From 9d28ebf4338d2abb949f0a8b288ccde5a9d45b4d Mon Sep 17 00:00:00 2001 From: SabineSIL <86713187+SabineSIL@users.noreply.github.com> Date: Mon, 20 Sep 2021 10:31:49 +0200 Subject: [PATCH 01/12] Update common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp Co-authored-by: Marc Durdin --- common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp b/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp index f40dfbf91b..a0874887c4 100644 --- a/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp +++ b/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp @@ -247,9 +247,5 @@ int main(int argc, char *argv []) { test_incxstr(); - // Destroy them - //teardown(); - - return 0; } From e92a2bf5572135cd1ae4fc20bca8663ac87a4023 Mon Sep 17 00:00:00 2001 From: SabineSIL <86713187+SabineSIL@users.noreply.github.com> Date: Mon, 20 Sep 2021 10:42:12 +0200 Subject: [PATCH 02/12] Update common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp Co-authored-by: Marc Durdin --- common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp b/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp index a0874887c4..84a223ebf7 100644 --- a/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp +++ b/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp @@ -237,7 +237,7 @@ int main(int argc, char *argv []) { return error_args(); } - auto arg_color = std::string(argv[1]) == "--color"; + auto arg_color = argc > 1 && std::string(argv[1]) == "--color"; if(arg_color && argc < 3) { return error_args(); } From f02f4f85365c92d99f925440f9fbed01ef78eb83 Mon Sep 17 00:00:00 2001 From: SabineSIL <86713187+SabineSIL@users.noreply.github.com> Date: Mon, 20 Sep 2021 10:46:06 +0200 Subject: [PATCH 03/12] Update common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp Co-authored-by: Marc Durdin --- common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp b/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp index 84a223ebf7..cde5ba6f1d 100644 --- a/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp +++ b/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp @@ -243,7 +243,6 @@ int main(int argc, char *argv []) { } console_color::enabled = console_color::isaterminal() || arg_color; - //arg_path = argv[arg_color ? 2 : 1]; test_incxstr(); From 2f0f7c000f0cf23bf0e5f871d8805014e00e957d Mon Sep 17 00:00:00 2001 From: SabineSIL <86713187+SabineSIL@users.noreply.github.com> Date: Mon, 20 Sep 2021 10:47:13 +0200 Subject: [PATCH 04/12] Update common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp Co-authored-by: Marc Durdin --- common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp b/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp index cde5ba6f1d..1a913fe773 100644 --- a/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp +++ b/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp @@ -233,9 +233,6 @@ int main(int argc, char *argv []) { // Global setup //std::string path(argv[1]); - if(argc < 2) { - return error_args(); - } auto arg_color = argc > 1 && std::string(argv[1]) == "--color"; if(arg_color && argc < 3) { From c3f89bd86860c586a851e1f5b8339bad3cd60492 Mon Sep 17 00:00:00 2001 From: SabineSIL <86713187+SabineSIL@users.noreply.github.com> Date: Mon, 20 Sep 2021 10:47:44 +0200 Subject: [PATCH 05/12] Update common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp Co-authored-by: Marc Durdin --- common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp b/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp index 1a913fe773..5d738454a9 100644 --- a/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp +++ b/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp @@ -235,9 +235,6 @@ int main(int argc, char *argv []) { auto arg_color = argc > 1 && std::string(argv[1]) == "--color"; - if(arg_color && argc < 3) { - return error_args(); - } console_color::enabled = console_color::isaterminal() || arg_color; From 1fb93061dd3dfa95d1e135a9f788c3c26540b578 Mon Sep 17 00:00:00 2001 From: SabineSIL <86713187+SabineSIL@users.noreply.github.com> Date: Mon, 20 Sep 2021 10:49:03 +0200 Subject: [PATCH 06/12] Update common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp Co-authored-by: Marc Durdin --- common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp b/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp index 5d738454a9..fd7662c206 100644 --- a/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp +++ b/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp @@ -215,12 +215,9 @@ void test_incxstr() { } constexpr const auto help_str = "\ -debug_api [--color] |--print-sizeof\n\ +test_kmx_xstring [--color]\n\ \n\ - --color Force color output\n\ - --print-sizeof Emit structure sizes for interop debug\n\ - SOURCE_PATH Path where debug_api.cpp is found; kmx files are\n\ - located relative to this path.\n"; + --color Force color output\n"; int error_args() { std::cerr << "debug_api: Invalid arguments." << std::endl; From 04f6a932880446fa3d6bf9ef440bd3e87132b91a Mon Sep 17 00:00:00 2001 From: SabineSIL <86713187+SabineSIL@users.noreply.github.com> Date: Mon, 20 Sep 2021 10:52:03 +0200 Subject: [PATCH 07/12] Update common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp Co-authored-by: Marc Durdin --- common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp b/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp index fd7662c206..4373a0c293 100644 --- a/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp +++ b/common/core/desktop/tests/unit/kmnkbd/test_kmx_xstring.cpp @@ -220,7 +220,7 @@ test_kmx_xstring [--color]\n\ --color Force color output\n"; int error_args() { - std::cerr << "debug_api: Invalid arguments." << std::endl; + std::cerr << "test_kmx_xstring: Invalid arguments." << std::endl; std::cout << help_str; return 1; } From 390169b868e09b909aa0b99fdadccf18fa4ef34f Mon Sep 17 00:00:00 2001 From: SabineSIL <86713187+SabineSIL@users.noreply.github.com> Date: Tue, 21 Sep 2021 14:05:53 +0200 Subject: [PATCH 08/12] Update meson.build --- common/core/desktop/tests/unit/kmnkbd/meson.build | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/common/core/desktop/tests/unit/kmnkbd/meson.build b/common/core/desktop/tests/unit/kmnkbd/meson.build index 4b54dee080..9cc97c6e74 100644 --- a/common/core/desktop/tests/unit/kmnkbd/meson.build +++ b/common/core/desktop/tests/unit/kmnkbd/meson.build @@ -5,7 +5,12 @@ # defns=['-DKMN_KBP_STATIC'] -tests = [ +tests = [ + ['context-api', 'context_api.cpp'], + ['keyboard-api', 'keyboard_api.cpp'], +# ['options-api', 'options_api.cpp'], + ['state-api', 'state_api.cpp'], + ['debug-api', 'debug_api.cpp'], ['kmx_xstring', 'test_kmx_xstring.cpp'], ] From bdf946b65d87b2c557b1208a00496bf290cc71db Mon Sep 17 00:00:00 2001 From: SabineSIL <86713187+SabineSIL@users.noreply.github.com> Date: Tue, 21 Sep 2021 14:53:07 +0200 Subject: [PATCH 09/12] Update common/core/desktop/src/kmx/kmx_xstring.cpp Co-authored-by: Marc Durdin --- common/core/desktop/src/kmx/kmx_xstring.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/common/core/desktop/src/kmx/kmx_xstring.cpp b/common/core/desktop/src/kmx/kmx_xstring.cpp index 4e7c7f1a88..524e42b566 100644 --- a/common/core/desktop/src/kmx/kmx_xstring.cpp +++ b/common/core/desktop/src/kmx/kmx_xstring.cpp @@ -135,7 +135,6 @@ PKMX_WCHAR km::kbp::kmx::incxstr(PKMX_WCHAR p) while (*(p - 1) && *p && *p != UC_SENTINEL_EXTENDEDEND) p++; - //if (!(*(p))) return p; if (*p == 0) return p; if (*p == UC_SENTINEL_EXTENDEDEND) return p + 1; } From 705f7980048213f6c40818afd29d3c5b654baa87 Mon Sep 17 00:00:00 2001 From: SabineSIL <86713187+SabineSIL@users.noreply.github.com> Date: Tue, 21 Sep 2021 14:53:29 +0200 Subject: [PATCH 10/12] Update common/core/desktop/src/kmx/kmx_xstring.cpp Co-authored-by: Marc Durdin --- common/core/desktop/src/kmx/kmx_xstring.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/common/core/desktop/src/kmx/kmx_xstring.cpp b/common/core/desktop/src/kmx/kmx_xstring.cpp index 524e42b566..5f4813a9bc 100644 --- a/common/core/desktop/src/kmx/kmx_xstring.cpp +++ b/common/core/desktop/src/kmx/kmx_xstring.cpp @@ -160,10 +160,12 @@ PKMX_WCHAR km::kbp::kmx::incxstr(PKMX_WCHAR p) } // check for \0 between FFFF and next printable character - for (int i = 0; i < (deltaptr); i++) { - if (*p==0) + for (int i = 0; i < deltaptr; i++) { + if (*p==0) { return p; - p += 1; } + } + p++; + } return p; } From 08220c61fd2f8c48e78c5ff038faf6e40f82a7f4 Mon Sep 17 00:00:00 2001 From: SabineSIL <86713187+SabineSIL@users.noreply.github.com> Date: Tue, 21 Sep 2021 21:37:17 +0200 Subject: [PATCH 11/12] Update kmx_processevent.h --- common/core/desktop/src/kmx/kmx_processevent.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common/core/desktop/src/kmx/kmx_processevent.h b/common/core/desktop/src/kmx/kmx_processevent.h index 894954a590..ec3ad75e8f 100644 --- a/common/core/desktop/src/kmx/kmx_processevent.h +++ b/common/core/desktop/src/kmx/kmx_processevent.h @@ -139,6 +139,10 @@ const char *Debug_UnicodeString(PKMX_WCHAR s, int x = 0); const char *Debug_UnicodeString(std::u16string s, int x = 0); const char *Debug_ModifierName(KMX_UINT modifiers); +const int CODE_PTR[2][14] = { + {CODE_ANY, CODE_NOTANY, CODE_INDEX, CODE_USE, CODE_DEADKEY, CODE_CLEARCONTEXT, CODE_CALL, CODE_CONTEXTEX, CODE_IFOPT, + CODE_IFSYSTEMSTORE, CODE_SETOPT, CODE_SETSYSTEMSTORE, CODE_RESETOPT, CODE_SAVEOPT}, + {3, 3, 4, 3, 3, 3, 3, 3, 5, 5, 4, 4, 3, 3}}; inline KMX_BOOL ShouldDebug() { return g_debug_KeymanLog; } From 7e295008616ad11775f40af5a140a51c64e195b9 Mon Sep 17 00:00:00 2001 From: SabineSIL <86713187+SabineSIL@users.noreply.github.com> Date: Tue, 21 Sep 2021 21:48:33 +0200 Subject: [PATCH 12/12] Update kmx_xstring.cpp --- common/core/desktop/src/kmx/kmx_xstring.cpp | 77 ++++++++------------- 1 file changed, 30 insertions(+), 47 deletions(-) diff --git a/common/core/desktop/src/kmx/kmx_xstring.cpp b/common/core/desktop/src/kmx/kmx_xstring.cpp index 5f4813a9bc..dbaf74cc01 100644 --- a/common/core/desktop/src/kmx/kmx_xstring.cpp +++ b/common/core/desktop/src/kmx/kmx_xstring.cpp @@ -2,7 +2,8 @@ Copyright: Copyright (C) 2003-2018 SIL International. Authors: mcdurdin */ -#include +#include > +#include #include #include #include @@ -11,6 +12,7 @@ +using namespace std; using namespace km::kbp; using namespace kmx; @@ -119,58 +121,39 @@ km_kbp_cp *km::kbp::kmx::u16tok(km_kbp_cp *p, km_kbp_cp ch, km_kbp_cp **ctx) { PKMX_WCHAR km::kbp::kmx::incxstr(PKMX_WCHAR p) { - int deltaptr; // how many bytes to jump over - - if (*p == 0) return p; - if (*p != UC_SENTINEL) - { - if (*p >= 0xD800 && *p <= 0xDBFF && *(p + 1) >= 0xDC00 && *(p + 1) <= 0xDFFF) return p + 2; + if (*p == 0) + return p; + if (*p != UC_SENTINEL) { + if (*p >= 0xD800 && *p <= 0xDBFF && *(p + 1) >= 0xDC00 && *(p + 1) <= 0xDFFF) + return p + 2; return p + 1; } - else - { - // UC_SENTINEL(FFFF) with UC_SENTINEL_EXTENDEDEND(0x10) == variable length - if (*(p + 1) == CODE_EXTENDED) { - p += 2; - while (*(p - 1) && *p && *p != UC_SENTINEL_EXTENDEDEND) - p++; - - if (*p == 0) return p; - if (*p == UC_SENTINEL_EXTENDEDEND) return p + 1; - } - - // UC_SENTINEL(FFFF) followed by other special - switch (*(p + 1)) - { - case CODE_ANY: deltaptr = 3; break; - case CODE_NOTANY: deltaptr = 3; break; - case CODE_INDEX: deltaptr = 4; break; - case CODE_USE: deltaptr = 3; break; - case CODE_DEADKEY: deltaptr = 3; break; - case CODE_CLEARCONTEXT: deltaptr = 3; break; - case CODE_CALL: deltaptr = 3; break; - case CODE_CONTEXTEX: deltaptr = 3; break; - case CODE_IFOPT: deltaptr = 5; break; - case CODE_IFSYSTEMSTORE: deltaptr = 5; break; - case CODE_SETOPT: deltaptr = 4; break; - case CODE_SETSYSTEMSTORE: deltaptr = 4; break; - case CODE_RESETOPT: deltaptr = 3; break; - case CODE_SAVEOPT: deltaptr = 3; break; - default: deltaptr = 2; - } - - // check for \0 between FFFF and next printable character - for (int i = 0; i < deltaptr; i++) { - if (*p==0) { - return p; - } + // UC_SENTINEL(FFFF) with UC_SENTINEL_EXTENDEDEND(0x10) == variable length + if (*(p + 1) == CODE_EXTENDED) { + p += 2; + while (*p && *p != UC_SENTINEL_EXTENDEDEND) p++; - } - return p; + if (*p == 0) + return p; + return p + 1; + } + // CODE_PTR defined in kmx_processevent.h + for (int i = 0; i < size(CODE_PTR[0]); i++) { + if (*(p + 1) == CODE_PTR[0][i]) { + deltaptr = CODE_PTR[1][i]; + break; + } + } + + // check for \0 between FFFF and next printable character + for (int i = 0; i < deltaptr; i++) { + if (*p == 0) { + return p; + } + p++; } return p; - } PKMX_WCHAR km::kbp::kmx::decxstr(PKMX_WCHAR p, PKMX_WCHAR pStart)