diff --git a/HISTORY.md b/HISTORY.md
index f14f4b5e586..2f7554af849 100644
--- a/HISTORY.md
+++ b/HISTORY.md
@@ -40,6 +40,76 @@
* chore(common): move to 18.0 alpha (#10713)
* chore: move to 18.0 alpha
+## 17.0.288 beta 2024-03-13
+
+* test(developer): kmc keyboard info compiler messages unit tests (#10848)
+* fix(developer): getFontFamily now returns null if ttfMeta.promise errors (#10983)
+* docs(android/app): Add data privacy policy page (#10985)
+* fix(developer): min Keyman version for LDML is 17.0 (#10977)
+
+## 17.0.287 beta 2024-03-12
+
+* chore(developer): resolve excessive-fatal-exception issue (#10949)
+* fix(linux): Remove `ibus-keyman.post{inst,rm}` and verify that `ibus-daemon` is running when we start km-config (#10788)
+
+## 17.0.286 beta 2024-03-11
+
+* chore(web): improve the clarity of hints on OSK for Android (#10971)
+
+## 17.0.285 beta 2024-03-08
+
+* fix(windows): GetKeyboardLanguage exits early on an invalid keyboard ID (#10936)
+
+## 17.0.284 beta 2024-03-07
+
+* fix(web): globe key highlighting (#10932)
+* chore(web): updates mtnt model used by test page (#10935)
+* fix(developer): kmc keyboard info compiler no kmp error (#10893)
+* fix(developer): Treat Right Shift as Shift in debugger (#10919)
+* docs(developer): kmc-model api documentation (#10921)
+* docs(developer): kmc-model-info api documentation (#10922)
+* docs(developer): kmc-keyboard-info api documentation (#10923)
+* docs(developer): kmc-package api documentation (#10924)
+* fix(developer): normalize all input paths in .kps compiler (#10950)
+
+## 17.0.283 beta 2024-03-06
+
+* fix(android): fixes context-change detection for repeated-char cases (#10873)
+* fix(developer): search-term quote replacement was not global (#10934)
+* (#10913)
+* fix(developer): fix for errant \uXXXX error (#10946)
+* (#10948)
+* refactor(oem/fv/android): Install fallback keyboard (#10907)
+* refactor(android/app): Move storage permission checks (#10904)
+* fix(common): missing script exec bit (#10951)
+
+## 17.0.282 beta 2024-03-05
+
+* fix(developer): move osk.ts from developer-utils to kmc-kmn (#10903)
+* fix(developer): hint text special characters (#10927)
+* docs(developer): kmc-ldml api documentation (#10917)
+* chore(developer): consolidate external links in Developer messages (#10918)
+* fix(developer): message export filename was title case (#10941)
+
+## 17.0.281 beta 2024-03-04
+
+* chore(linux): Update debian changelog (#10897)
+* fix(ios): cross-paragraph keyboard rules (#10905)
+* chore(developer): deploy compiler messages to help site (#10906)
+
+## 17.0.280 beta 2024-03-01
+
+* fix(developer): make sure scroll bar appears when needed in global welcome (#10818)
+* chore(common): loosen .keyman-touch-layout schema layer id requirements (#10819)
+* docs(developer): kmc-kmn api documentation and some message documentation (#10856)
+* refactor(developer): cleanup kmn compiler message namespaces (#10867)
+* refactor(developer): reorganize messages for adding details (#10878)
+* fix(ios): context-initial diacritic handling (#10589)
+* feat(developer): adds kmc message command (#10888)
+* test(developer): kmc unit test infrastructure messages (#10825)
+* fix(android): handle surrogate pairs in selection range indexing (#10885)
+* feat(windows): move the code kmshell.dpr to unit so that only the includes are in dpr (#10871)
+
## 17.0.279 beta 2024-02-29
* fix(linux): Fix libkeymancore-dev dependencies (#10880)
diff --git a/android/KMAPro/kMAPro/src/main/AndroidManifest.xml b/android/KMAPro/kMAPro/src/main/AndroidManifest.xml
index 41cda823b86..d4028e8a70e 100644
--- a/android/KMAPro/kMAPro/src/main/AndroidManifest.xml
+++ b/android/KMAPro/kMAPro/src/main/AndroidManifest.xml
@@ -5,9 +5,13 @@
-
+
+
+
Settings
diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboardJSHandler.java b/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboardJSHandler.java
index b85353e2e16..74be658216f 100644
--- a/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboardJSHandler.java
+++ b/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboardJSHandler.java
@@ -297,12 +297,13 @@ private static void performLeftDeletions(InputConnection ic, int dn) {
expectedChars = "";
}
ic.deleteSurroundingText(dn + numPairs, 0);
- CharSequence newContext = getCharacterSequence(ic, originalBufferLength - 2*dn);
+ // Shorten the retrieved context by exactly as many characters as were just deleted.
+ CharSequence newContext = getCharacterSequence(ic, originalBufferLength - dn - numPairs);
CharSequence charsToRestore = CharSequenceUtil.restoreChars(expectedChars, newContext);
if (charsToRestore.length() > 0) {
// Restore expectedChars that Chromium deleted.
- // Use newCusorPosition 1 so cursor will be after the inserted string
+ // Use newCursorPosition 1 so cursor will be after the inserted string
ic.commitText(charsToRestore, 1);
}
}
diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/util/CharSequenceUtil.java b/android/KMEA/app/src/main/java/com/keyman/engine/util/CharSequenceUtil.java
index 45199fe6842..d3ad56a227d 100644
--- a/android/KMEA/app/src/main/java/com/keyman/engine/util/CharSequenceUtil.java
+++ b/android/KMEA/app/src/main/java/com/keyman/engine/util/CharSequenceUtil.java
@@ -48,7 +48,10 @@ public static CharSequence restoreChars(CharSequence expectedChars, CharSequence
if (expectedChars.length() != currentContext.length()) {
String expectedCharsString = expectedChars.toString();
String currentContextString = currentContext.toString();
- int index = expectedCharsString.indexOf(currentContextString);
+ int index = expectedCharsString.lastIndexOf(currentContextString);
+ if (currentContextString.length() == 0) {
+ index = 0;
+ }
if (index > -1) {
// subSequence indices are start(inclusive) to end(exclusive)
charsToRestore = expectedChars.subSequence(index + currentContextString.length(), expectedChars.length());
diff --git a/android/KMEA/app/src/test/java/com/keyman/engine/util/CharSequenceUtilTest.java b/android/KMEA/app/src/test/java/com/keyman/engine/util/CharSequenceUtilTest.java
index 6feb49feb1f..ee1c80ce3cf 100644
--- a/android/KMEA/app/src/test/java/com/keyman/engine/util/CharSequenceUtilTest.java
+++ b/android/KMEA/app/src/test/java/com/keyman/engine/util/CharSequenceUtilTest.java
@@ -151,5 +151,12 @@ public void test_restoreChars_expected_chars() {
Assert.assertEquals("p" + COMPOSING_CIRCUMFLEX_ACCENT + "p" + COMPOSING_CIRCUMFLEX_ACCENT, charsToRestore);
}
+ @Test
+ public void test_repeated_char_backspace() {
+ CharSequence currentContext = "----------------";
+ CharSequence expectedChars = "-----------------";
+ CharSequence charsToRestore = CharSequenceUtil.restoreChars(expectedChars, currentContext);
+ Assert.assertEquals("", charsToRestore);
+ }
//endregion
}
diff --git a/android/help/about/index.md b/android/help/about/index.md
index 97f10d9e007..787c0c9d4dd 100644
--- a/android/help/about/index.md
+++ b/android/help/about/index.md
@@ -5,4 +5,5 @@ title: About Keyman
* [Welcome to Keyman](welcome)
* [What's New](whatsnew)
* [System Requirements](system-requirements)
+* [Data Privacy Policy](privacy)
* [Version History](history)
\ No newline at end of file
diff --git a/android/help/about/privacy.md b/android/help/about/privacy.md
new file mode 100644
index 00000000000..6173d6c3c39
--- /dev/null
+++ b/android/help/about/privacy.md
@@ -0,0 +1,34 @@
+---
+title: Data Privacy Policy
+---
+
+## Privacy Policy for Keyman
+
+This application will send crash reporting information to https://sentry.keyman.com. No personally identifiable information or keyboard strokes are recorded or shared.
+
+You can disable crash reporting on the Keyman
+[settings menu](../basic/config/)
+
+### Data Deletion
+
+Crash reporting information is retained for 90 days.
+
+Keyman does not use user accounts, so we are unable to identify which crash reports associated with you or your device can be deleted.
+
+
+
+### Developer Information
+
+Keyman is developed and published by SIL International.
+
+You can contact SIL or provide any feedback using the app store.
+
+https://play.google.com/store/apps/details?id=com.tavultesoft.kmapro
+
+The full SIL software privacy policy is at
+
+https://software.sil.org/language-software-privacy-policy/
+
+This Keyman data privacy policy is also available at
+
+https://help.keyman.com/products/android/current-version/about/privacy
diff --git a/android/help/index.md b/android/help/index.md
index f03adb523d1..62df93195b4 100644
--- a/android/help/index.md
+++ b/android/help/index.md
@@ -6,6 +6,7 @@ title: Keyman for Android 18.0 Help
* [Welcome to Keyman](about/welcome)
* [What's New](about/whatsnew)
* [System Requirements](about/system-requirements)
+* [Data Privacy Policy](about/privacy)
* [Version History](about/history)
## [Getting Started](start/)
diff --git a/common/web/types/build.sh b/common/web/types/build.sh
index e565b03acc7..2ca21319ee4 100755
--- a/common/web/types/build.sh
+++ b/common/web/types/build.sh
@@ -29,8 +29,8 @@ builder_parse "$@"
function compile_schemas() {
# We need the schema files at runtime and bundled, so always copy it for all actions except `clean`
local schemas=(
- "$KEYMAN_ROOT/resources/standards-data/ldml-keyboards/techpreview/ldml-keyboard3.schema.json"
- "$KEYMAN_ROOT/resources/standards-data/ldml-keyboards/techpreview/ldml-keyboardtest3.schema.json"
+ "$KEYMAN_ROOT/resources/standards-data/ldml-keyboards/45/ldml-keyboard3.schema.json"
+ "$KEYMAN_ROOT/resources/standards-data/ldml-keyboards/45/ldml-keyboardtest3.schema.json"
"$KEYMAN_ROOT/common/schemas/kvks/kvks.schema.json"
"$KEYMAN_ROOT/common/schemas/kpj/kpj.schema.json"
"$KEYMAN_ROOT/common/schemas/kpj-9.0/kpj-9.0.schema.json"
diff --git a/common/web/types/src/kmx/kmx-builder.ts b/common/web/types/src/kmx/kmx-builder.ts
index e795759c60d..4a319bfe450 100644
--- a/common/web/types/src/kmx/kmx-builder.ts
+++ b/common/web/types/src/kmx/kmx-builder.ts
@@ -36,7 +36,7 @@ export default class KMXBuilder {
this.comp_header = {
dwIdentifier: KMXFile.FILEID_COMPILED,
- dwFileVersion: KMXFile.VERSION_160,
+ dwFileVersion: KMXFile.VERSION_170,
dwCheckSum: 0, // Deprecated in Keyman 16.0
KeyboardID: 0,
IsRegistered: 1,
diff --git a/common/web/types/src/ldml-keyboard/ldml-keyboard-xml-reader.ts b/common/web/types/src/ldml-keyboard/ldml-keyboard-xml-reader.ts
index 5c58bd383e1..4f5c30bb1ac 100644
--- a/common/web/types/src/ldml-keyboard/ldml-keyboard-xml-reader.ts
+++ b/common/web/types/src/ldml-keyboard/ldml-keyboard-xml-reader.ts
@@ -156,7 +156,7 @@ export class LDMLKeyboardXMLSourceFileReader {
}
// then, the implied imports
if (subtag === 'keys') {
- //
+ //
if (!this.resolveOneImport(obj, subtag, {
base: constants.cldr_import_base,
path: constants.cldr_implied_keys_import
@@ -164,7 +164,7 @@ export class LDMLKeyboardXMLSourceFileReader {
return false;
}
} else if (subtag === 'forms') {
- //
+ //
if (!this.resolveOneImport(obj, subtag, {
base: constants.cldr_import_base,
path: constants.cldr_implied_forms_import
diff --git a/common/web/types/src/ldml-keyboard/ldml-keyboard-xml.ts b/common/web/types/src/ldml-keyboard/ldml-keyboard-xml.ts
index d47cb656198..696194573f8 100644
--- a/common/web/types/src/ldml-keyboard/ldml-keyboard-xml.ts
+++ b/common/web/types/src/ldml-keyboard/ldml-keyboard-xml.ts
@@ -1,5 +1,5 @@
//
-// Conforms to techpreview
+// Conforms to 45
//
// The interfaces in this file are designed with reference to the mapped
// structures produced by xml2js when passed a LDML keyboard .xml file.
@@ -40,7 +40,7 @@ export interface LKImport {
*/
base: string;
/**
- * path to imported resource, of the form `techpreview/*.xml`
+ * path to imported resource, of the form `45/*.xml`
*/
path: string;
};
diff --git a/common/web/types/src/package/kps-file.ts b/common/web/types/src/package/kps-file.ts
index 7c7ba12c879..6ab578d0bc2 100644
--- a/common/web/types/src/package/kps-file.ts
+++ b/common/web/types/src/package/kps-file.ts
@@ -44,8 +44,8 @@ export interface KpsFileOptions {
LicenseFile?: string;
WelcomeFile?: string;
ExecuteProgram?: string;
- MsiFileName?: string;
- MsiOptions?: string;
+ MSIFileName?: string;
+ MSIOptions?: string;
}
export interface KpsFileInfo {
diff --git a/common/web/types/test/fixtures/import-minimal.xml b/common/web/types/test/fixtures/import-minimal.xml
index 02a4c0fdfe9..1510e81a476 100644
--- a/common/web/types/test/fixtures/import-minimal.xml
+++ b/common/web/types/test/fixtures/import-minimal.xml
@@ -1,5 +1,4 @@
-
-
+
diff --git a/common/web/types/test/fixtures/import-minimal1.xml b/common/web/types/test/fixtures/import-minimal1.xml
index 7239fc9a85e..cfaf73abb9b 100644
--- a/common/web/types/test/fixtures/import-minimal1.xml
+++ b/common/web/types/test/fixtures/import-minimal1.xml
@@ -1,6 +1,5 @@
-
-
+
diff --git a/common/web/types/test/fixtures/import-minimal2.xml b/common/web/types/test/fixtures/import-minimal2.xml
index 3e30044f268..6e768dc0958 100644
--- a/common/web/types/test/fixtures/import-minimal2.xml
+++ b/common/web/types/test/fixtures/import-minimal2.xml
@@ -1,6 +1,5 @@
-
-
+
diff --git a/common/web/types/test/fixtures/import-symbols.xml b/common/web/types/test/fixtures/import-symbols.xml
index 763de4e78a6..43cc1a7de73 100644
--- a/common/web/types/test/fixtures/import-symbols.xml
+++ b/common/web/types/test/fixtures/import-symbols.xml
@@ -1,9 +1,8 @@
-
-
+
-
+
diff --git a/common/web/types/test/fixtures/invalid-conforms-to.xml b/common/web/types/test/fixtures/invalid-conforms-to.xml
index de19c3a3bf0..96059891911 100644
--- a/common/web/types/test/fixtures/invalid-conforms-to.xml
+++ b/common/web/types/test/fixtures/invalid-conforms-to.xml
@@ -1,10 +1,5 @@
-
-
-
+
diff --git a/common/web/types/test/fixtures/invalid-import-base.xml b/common/web/types/test/fixtures/invalid-import-base.xml
index 05dcaad299a..29b06045822 100644
--- a/common/web/types/test/fixtures/invalid-import-base.xml
+++ b/common/web/types/test/fixtures/invalid-import-base.xml
@@ -1,6 +1,5 @@
-
-
+
diff --git a/common/web/types/test/fixtures/invalid-import-path.xml b/common/web/types/test/fixtures/invalid-import-path.xml
index b6d4c9da665..58d36967579 100644
--- a/common/web/types/test/fixtures/invalid-import-path.xml
+++ b/common/web/types/test/fixtures/invalid-import-path.xml
@@ -1,10 +1,9 @@
-
-
+
-
+
diff --git a/common/web/types/test/fixtures/invalid-import-readfail.xml b/common/web/types/test/fixtures/invalid-import-readfail.xml
index 00f02e7da82..82e609b0b76 100644
--- a/common/web/types/test/fixtures/invalid-import-readfail.xml
+++ b/common/web/types/test/fixtures/invalid-import-readfail.xml
@@ -1,10 +1,9 @@
-
-
+
-
+
diff --git a/common/web/types/test/fixtures/invalid-import-wrongroot.xml b/common/web/types/test/fixtures/invalid-import-wrongroot.xml
index fbe75ffe19b..3d194933f55 100644
--- a/common/web/types/test/fixtures/invalid-import-wrongroot.xml
+++ b/common/web/types/test/fixtures/invalid-import-wrongroot.xml
@@ -1,6 +1,5 @@
-
-
+
@@ -10,7 +9,7 @@
-
+
diff --git a/common/web/types/test/fixtures/invalid-structure-per-dtd.xml b/common/web/types/test/fixtures/invalid-structure-per-dtd.xml
index 961e6033fa6..cb47dcb1f37 100644
--- a/common/web/types/test/fixtures/invalid-structure-per-dtd.xml
+++ b/common/web/types/test/fixtures/invalid-structure-per-dtd.xml
@@ -1,8 +1,3 @@
-
-
-
+
diff --git a/common/web/types/test/fixtures/test-fr.xml b/common/web/types/test/fixtures/test-fr.xml
index c705605521b..b92ba413605 100644
--- a/common/web/types/test/fixtures/test-fr.xml
+++ b/common/web/types/test/fixtures/test-fr.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_001_tiny.xml b/core/tests/unit/ldml/keyboards/k_001_tiny.xml
index aae89fd4119..b8a543cd2d7 100644
--- a/core/tests/unit/ldml/keyboards/k_001_tiny.xml
+++ b/core/tests/unit/ldml/keyboards/k_001_tiny.xml
@@ -8,8 +8,7 @@
@@expected: \u0127\u1790\u17B6\u0127
-->
-
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_002_tinyu32.xml b/core/tests/unit/ldml/keyboards/k_002_tinyu32.xml
index a8c5e372339..078e8aec3cf 100644
--- a/core/tests/unit/ldml/keyboards/k_002_tinyu32.xml
+++ b/core/tests/unit/ldml/keyboards/k_002_tinyu32.xml
@@ -6,8 +6,7 @@
@@expected: \u0127\u1790\u17B6\u0127\uD83D\uDE40\u0127
-->
-
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_003_transform.xml b/core/tests/unit/ldml/keyboards/k_003_transform.xml
index ba837a7115b..2fc8d61e3dc 100644
--- a/core/tests/unit/ldml/keyboards/k_003_transform.xml
+++ b/core/tests/unit/ldml/keyboards/k_003_transform.xml
@@ -7,8 +7,7 @@ from https://github.com/unicode-org/cldr/blob/keyboard-preview/docs/ldml/tr35-ke
@@expected: qu\u00ea
-->
-
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_004_tinyshift.xml b/core/tests/unit/ldml/keyboards/k_004_tinyshift.xml
index e2c442b28ad..4346fa801b0 100644
--- a/core/tests/unit/ldml/keyboards/k_004_tinyshift.xml
+++ b/core/tests/unit/ldml/keyboards/k_004_tinyshift.xml
@@ -6,8 +6,7 @@
@@expected: \u0037\u1790\u17B6\u0127
-->
-
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_005_modbittest.xml b/core/tests/unit/ldml/keyboards/k_005_modbittest.xml
index 2af7cf2be05..054c81d8c06 100644
--- a/core/tests/unit/ldml/keyboards/k_005_modbittest.xml
+++ b/core/tests/unit/ldml/keyboards/k_005_modbittest.xml
@@ -6,8 +6,7 @@
@@expected: \u0061\u0041\u0062\u0063\u0064\u0064\u0065\u0066\u0067\u0067
-->
-
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_006_backspace-test.xml b/core/tests/unit/ldml/keyboards/k_006_backspace-test.xml
index 5239fe3409c..c0157f88287 100644
--- a/core/tests/unit/ldml/keyboards/k_006_backspace-test.xml
+++ b/core/tests/unit/ldml/keyboards/k_006_backspace-test.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_006_backspace.xml b/core/tests/unit/ldml/keyboards/k_006_backspace.xml
index d9f29956957..763d90bc7f7 100644
--- a/core/tests/unit/ldml/keyboards/k_006_backspace.xml
+++ b/core/tests/unit/ldml/keyboards/k_006_backspace.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_007_transform_rgx-test.xml b/core/tests/unit/ldml/keyboards/k_007_transform_rgx-test.xml
index 6fe824270e3..80f3bbafabe 100644
--- a/core/tests/unit/ldml/keyboards/k_007_transform_rgx-test.xml
+++ b/core/tests/unit/ldml/keyboards/k_007_transform_rgx-test.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_007_transform_rgx.xml b/core/tests/unit/ldml/keyboards/k_007_transform_rgx.xml
index 6a74ea5a77a..18356b2c3e3 100644
--- a/core/tests/unit/ldml/keyboards/k_007_transform_rgx.xml
+++ b/core/tests/unit/ldml/keyboards/k_007_transform_rgx.xml
@@ -4,8 +4,7 @@
from https://github.com/unicode-org/cldr/blob/keyboard-preview/docs/ldml/tr35-keyboards.md#element-transform
-->
-
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_008_transform_norm-test.xml b/core/tests/unit/ldml/keyboards/k_008_transform_norm-test.xml
index 7717ef5c30a..52323ea0717 100644
--- a/core/tests/unit/ldml/keyboards/k_008_transform_norm-test.xml
+++ b/core/tests/unit/ldml/keyboards/k_008_transform_norm-test.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_008_transform_norm.xml b/core/tests/unit/ldml/keyboards/k_008_transform_norm.xml
index aa121f66fdb..cc1a7ab43d1 100644
--- a/core/tests/unit/ldml/keyboards/k_008_transform_norm.xml
+++ b/core/tests/unit/ldml/keyboards/k_008_transform_norm.xml
@@ -5,8 +5,7 @@ from
https://github.com/unicode-org/cldr/blob/keyboard-preview/docs/ldml/tr35-keyboards.md#element-transform
-->
-
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_009_transform_nfc-test.xml b/core/tests/unit/ldml/keyboards/k_009_transform_nfc-test.xml
index f6462c61d7f..8d63e86e02a 100644
--- a/core/tests/unit/ldml/keyboards/k_009_transform_nfc-test.xml
+++ b/core/tests/unit/ldml/keyboards/k_009_transform_nfc-test.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_009_transform_nfc.xml b/core/tests/unit/ldml/keyboards/k_009_transform_nfc.xml
index 877aeefc8e8..e975260dcb8 100644
--- a/core/tests/unit/ldml/keyboards/k_009_transform_nfc.xml
+++ b/core/tests/unit/ldml/keyboards/k_009_transform_nfc.xml
@@ -3,8 +3,7 @@
-
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_010_mt.xml b/core/tests/unit/ldml/keyboards/k_010_mt.xml
index 2fd3e2b44f9..af50d2cb751 100644
--- a/core/tests/unit/ldml/keyboards/k_010_mt.xml
+++ b/core/tests/unit/ldml/keyboards/k_010_mt.xml
@@ -10,9 +10,7 @@ Gets part of the way,
Based on mt.xml from CLDR. 'TODO-LDML' denotes modifications.
Note this is the 47-key version.
-->
-
-
-
+
@@ -21,8 +19,8 @@ Gets part of the way,
-
-
+
+
diff --git a/core/tests/unit/ldml/keyboards/k_011_mt_iso.xml b/core/tests/unit/ldml/keyboards/k_011_mt_iso.xml
index 59496726fad..0ea0b7f3177 100644
--- a/core/tests/unit/ldml/keyboards/k_011_mt_iso.xml
+++ b/core/tests/unit/ldml/keyboards/k_011_mt_iso.xml
@@ -11,8 +11,7 @@ Exact copy of mt.xml from CLDR, but with:
- an updated DTD path
- test case
-->
-
-
+
@@ -21,8 +20,8 @@ Exact copy of mt.xml from CLDR, but with:
-
-
+
+
diff --git a/core/tests/unit/ldml/keyboards/k_020_fr-test.xml b/core/tests/unit/ldml/keyboards/k_020_fr-test.xml
index f4ac30aa9f6..22fce785389 100644
--- a/core/tests/unit/ldml/keyboards/k_020_fr-test.xml
+++ b/core/tests/unit/ldml/keyboards/k_020_fr-test.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_020_fr.xml b/core/tests/unit/ldml/keyboards/k_020_fr.xml
index 297062e5d18..671f1b8b9b6 100644
--- a/core/tests/unit/ldml/keyboards/k_020_fr.xml
+++ b/core/tests/unit/ldml/keyboards/k_020_fr.xml
@@ -1,7 +1,6 @@
-
-
+
@@ -28,8 +27,8 @@
-
-
+
+
diff --git a/core/tests/unit/ldml/keyboards/k_100_keytest.xml b/core/tests/unit/ldml/keyboards/k_100_keytest.xml
index 47457bb99f8..6c2d6934477 100644
--- a/core/tests/unit/ldml/keyboards/k_100_keytest.xml
+++ b/core/tests/unit/ldml/keyboards/k_100_keytest.xml
@@ -5,8 +5,7 @@
@@expected: \u0061
-->
-
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_101_keytest.xml b/core/tests/unit/ldml/keyboards/k_101_keytest.xml
index 9dc35408fa4..2af4ee26c94 100644
--- a/core/tests/unit/ldml/keyboards/k_101_keytest.xml
+++ b/core/tests/unit/ldml/keyboards/k_101_keytest.xml
@@ -4,8 +4,7 @@
@@keys: [K_BKQUOTE]
@@expected: \u0061
-->
-
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_102_keytest.xml b/core/tests/unit/ldml/keyboards/k_102_keytest.xml
index de61b8a9c2d..5b47eb5f155 100644
--- a/core/tests/unit/ldml/keyboards/k_102_keytest.xml
+++ b/core/tests/unit/ldml/keyboards/k_102_keytest.xml
@@ -16,8 +16,7 @@
qaz Az enter=not mappable, should cause context reset of qaz. TODO-LDML no invalidate here?
-->
-
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_200_reorder_nod_Lana-test.xml b/core/tests/unit/ldml/keyboards/k_200_reorder_nod_Lana-test.xml
index e207d191931..d23e596bbb3 100644
--- a/core/tests/unit/ldml/keyboards/k_200_reorder_nod_Lana-test.xml
+++ b/core/tests/unit/ldml/keyboards/k_200_reorder_nod_Lana-test.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_200_reorder_nod_Lana.xml b/core/tests/unit/ldml/keyboards/k_200_reorder_nod_Lana.xml
index f5f5adf7535..b6e6cc2e924 100644
--- a/core/tests/unit/ldml/keyboards/k_200_reorder_nod_Lana.xml
+++ b/core/tests/unit/ldml/keyboards/k_200_reorder_nod_Lana.xml
@@ -5,8 +5,7 @@
see https://keyman.com/keyboards/sil_boonkit
-->
-
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_201_reorder_esk-test.xml b/core/tests/unit/ldml/keyboards/k_201_reorder_esk-test.xml
index c1510ba1dae..fbb3427878c 100644
--- a/core/tests/unit/ldml/keyboards/k_201_reorder_esk-test.xml
+++ b/core/tests/unit/ldml/keyboards/k_201_reorder_esk-test.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_201_reorder_esk.xml b/core/tests/unit/ldml/keyboards/k_201_reorder_esk.xml
index 5f3134ee05e..419d4d17943 100644
--- a/core/tests/unit/ldml/keyboards/k_201_reorder_esk.xml
+++ b/core/tests/unit/ldml/keyboards/k_201_reorder_esk.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_210_marker-test.xml b/core/tests/unit/ldml/keyboards/k_210_marker-test.xml
index 8b05aca859d..df6b65422b6 100644
--- a/core/tests/unit/ldml/keyboards/k_210_marker-test.xml
+++ b/core/tests/unit/ldml/keyboards/k_210_marker-test.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_210_marker.xml b/core/tests/unit/ldml/keyboards/k_210_marker.xml
index 750a1870bba..4d3d66ce986 100644
--- a/core/tests/unit/ldml/keyboards/k_210_marker.xml
+++ b/core/tests/unit/ldml/keyboards/k_210_marker.xml
@@ -4,8 +4,7 @@
Test Keyboard
-->
-
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_211_marker_escape-test.xml b/core/tests/unit/ldml/keyboards/k_211_marker_escape-test.xml
index f8eb8ed921a..5fb09e7fc58 100644
--- a/core/tests/unit/ldml/keyboards/k_211_marker_escape-test.xml
+++ b/core/tests/unit/ldml/keyboards/k_211_marker_escape-test.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/core/tests/unit/ldml/keyboards/k_211_marker_escape.xml b/core/tests/unit/ldml/keyboards/k_211_marker_escape.xml
index 8ddae398195..4130e22850f 100644
--- a/core/tests/unit/ldml/keyboards/k_211_marker_escape.xml
+++ b/core/tests/unit/ldml/keyboards/k_211_marker_escape.xml
@@ -4,8 +4,7 @@
Test Keyboard
-->
-
-
+
diff --git a/core/tests/unit/ldml/keyboards/ldml_test-test.xml b/core/tests/unit/ldml/keyboards/ldml_test-test.xml
index a771562bda9..ea196dab893 100644
--- a/core/tests/unit/ldml/keyboards/ldml_test-test.xml
+++ b/core/tests/unit/ldml/keyboards/ldml_test-test.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/core/tests/unit/ldml/keyboards/ldml_test.xml b/core/tests/unit/ldml/keyboards/ldml_test.xml
index 2885d6cc32d..684e9fdd395 100644
--- a/core/tests/unit/ldml/keyboards/ldml_test.xml
+++ b/core/tests/unit/ldml/keyboards/ldml_test.xml
@@ -1,11 +1,11 @@
-
+
-
-
+
+
diff --git a/core/tests/unit/ldml/keyboards/meson.build b/core/tests/unit/ldml/keyboards/meson.build
index 890a4e65f7a..ca047a67bc6 100644
--- a/core/tests/unit/ldml/keyboards/meson.build
+++ b/core/tests/unit/ldml/keyboards/meson.build
@@ -5,13 +5,13 @@
#
-# keyboards in resources/standards-data/ldml-keyboards/techpreview/3.0/
-# tests in resources/standards-data/ldml-keyboards/techpreview/test/
+# keyboards in resources/standards-data/ldml-keyboards/45/3.0/
+# tests in resources/standards-data/ldml-keyboards/45/test/
tests_from_cldr = [
'ja-Latn',
'pt-t-k0-abnt2',
# 'fr-t-k0-optimise', (not yet)
- # 'fr-t-k0-test',
+ 'fr-t-k0-azerty',
'pcm',
'bn',
]
@@ -55,7 +55,7 @@ tests += tests_from_cldr
# Setup kmc
kmc_root = join_paths(meson.source_root(),'..','developer','src','kmc')
-ldml_root = join_paths(meson.source_root(),'..','resources','standards-data','ldml-keyboards','techpreview')
+ldml_root = join_paths(meson.source_root(),'..','resources','standards-data','ldml-keyboards','45')
ldml_data = join_paths(ldml_root, '3.0')
ldml_testdata = join_paths(ldml_root, 'test')
kmc_cmd = [node, '--enable-source-maps', kmc_root]
diff --git a/core/tests/unit/ldml/ldml_test_source.cpp b/core/tests/unit/ldml/ldml_test_source.cpp
index 9bb08b11f25..b638379bb6d 100644
--- a/core/tests/unit/ldml/ldml_test_source.cpp
+++ b/core/tests/unit/ldml/ldml_test_source.cpp
@@ -753,7 +753,7 @@ int LdmlJsonTestSourceFactory::load(const km::core::path &compiled, const km::co
}
auto conformsTo = data["/keyboardTest3/conformsTo"_json_pointer].get();
- assert_or_return(std::string(LDML_CLDR_VERSION_LATEST) == conformsTo);
+ assert_or_return(std::string(LDML_CLDR_TEST_VERSION_LATEST) == conformsTo);
auto info_keyboard = data["/keyboardTest3/info/keyboard"_json_pointer].get();
auto info_author = data["/keyboardTest3/info/author"_json_pointer].get();
auto info_name = data["/keyboardTest3/info/name"_json_pointer].get();
diff --git a/developer/docs/api/etc/kmc-analyze.api.md b/developer/docs/api/etc/kmc-analyze.api.md
index 91fbf7f1f12..490ead7be77 100644
--- a/developer/docs/api/etc/kmc-analyze.api.md
+++ b/developer/docs/api/etc/kmc-analyze.api.md
@@ -33,16 +33,20 @@ export class AnalyzeOskRewritePua {
};
}
-// @public
+// Warning: (ae-internal-missing-underscore) The name "AnalyzerMessages" should be prefixed with an underscore because the declaration is marked as @internal
+//
+// @internal
export class AnalyzerMessages {
+ // (undocumented)
static readonly FATAL_UnexpectedException: number;
- // @internal (undocumented)
- static Fatal_UnexpectedException: (o: {
+ // (undocumented)
+ static readonly Fatal_UnexpectedException: (o: {
e: any;
}) => CompilerEvent;
+ // (undocumented)
static readonly INFO_ScanningFile: number;
- // @internal (undocumented)
- static Info_ScanningFile: (o: {
+ // (undocumented)
+ static readonly Info_ScanningFile: (o: {
type: string;
name: string;
}) => CompilerEvent;
diff --git a/developer/docs/api/etc/kmc-keyboard-info.api.md b/developer/docs/api/etc/kmc-keyboard-info.api.md
index 93e652e9e3f..262c463cf2b 100644
--- a/developer/docs/api/etc/kmc-keyboard-info.api.md
+++ b/developer/docs/api/etc/kmc-keyboard-info.api.md
@@ -13,27 +13,26 @@ import { KeymanCompilerArtifacts } from '@keymanapp/common-types';
import { KeymanCompilerResult } from '@keymanapp/common-types';
import { KmpJsonFile } from '@keymanapp/common-types';
-// @public (undocumented)
+// @public
export class KeyboardInfoCompiler implements KeymanCompiler {
constructor();
// Warning: (ae-forgotten-export) The symbol "KeyboardInfoFileLanguageFont" needs to be exported by the entry point index.d.ts
//
- // (undocumented)
+ // @internal (undocumented)
fontSourceToKeyboardInfoFont(kpsFilename: string, kmpJsonData: KmpJsonFile.KmpJsonFile, source: string[]): Promise;
- // (undocumented)
init(callbacks: CompilerCallbacks, options: KeyboardInfoCompilerOptions): Promise;
run(inputFilename: string, outputFilename?: string): Promise;
- // (undocumented)
write(artifacts: KeyboardInfoCompilerArtifacts): Promise;
}
-// @public (undocumented)
+// @public
export interface KeyboardInfoCompilerArtifacts extends KeymanCompilerArtifacts {
- // (undocumented)
keyboard_info: KeymanCompilerArtifact;
}
-// @public (undocumented)
+// Warning: (ae-internal-missing-underscore) The name "KeyboardInfoCompilerMessages" should be prefixed with an underscore because the declaration is marked as @internal
+//
+// @internal (undocumented)
export class KeyboardInfoCompilerMessages {
// (undocumented)
static ERROR_CannotBuildWithoutKmpFile: number;
@@ -65,10 +64,6 @@ export class KeyboardInfoCompilerMessages {
email: string;
}) => CompilerEvent;
// (undocumented)
- static Error_LicenseFileDoesNotExist: (o: {
- filename: string;
- }) => CompilerEvent;
- // (undocumented)
static ERROR_LicenseFileIsDamaged: number;
// (undocumented)
static Error_LicenseFileIsDamaged: (o: {
@@ -77,6 +72,10 @@ export class KeyboardInfoCompilerMessages {
// (undocumented)
static ERROR_LicenseFileIsMissing: number;
// (undocumented)
+ static Error_LicenseFileIsMissing: (o: {
+ filename: string;
+ }) => CompilerEvent;
+ // (undocumented)
static ERROR_LicenseIsNotValid: number;
// (undocumented)
static Error_LicenseIsNotValid: (o: {
@@ -121,19 +120,17 @@ export class KeyboardInfoCompilerMessages {
}) => CompilerEvent;
}
-// @public (undocumented)
+// @public
export interface KeyboardInfoCompilerOptions extends CompilerOptions {
- // (undocumented)
sources: KeyboardInfoSources;
}
-// @public (undocumented)
+// @public
export interface KeyboardInfoCompilerResult extends KeymanCompilerResult {
- // (undocumented)
artifacts: KeyboardInfoCompilerArtifacts;
}
-// @public (undocumented)
+// @public
export interface KeyboardInfoSources {
forPublishing: boolean;
jsFilename?: string;
diff --git a/developer/docs/api/etc/kmc-kmn.api.md b/developer/docs/api/etc/kmc-kmn.api.md
index e14c9b80747..28c7aae5e8b 100644
--- a/developer/docs/api/etc/kmc-kmn.api.md
+++ b/developer/docs/api/etc/kmc-kmn.api.md
@@ -15,62 +15,10 @@ import { Osk } from '@keymanapp/developer-utils';
import { UnicodeSet } from '@keymanapp/common-types';
import { UnicodeSetParser } from '@keymanapp/common-types';
-// @public
-export class CompilerMessages {
- static ERROR_FileNotFound: number;
- // @internal (undocumented)
- static Error_FileNotFound: (o: {
- filename: string;
- }) => CompilerEvent;
- static ERROR_InvalidDisplayMapFile: number;
- // @internal (undocumented)
- static Error_InvalidDisplayMapFile: (o: {
- filename: string;
- e: any;
- }) => CompilerEvent;
- static ERROR_InvalidKvkFile: number;
- // @internal (undocumented)
- static Error_InvalidKvkFile: (o: {
- filename: string;
- e: any;
- }) => CompilerEvent;
- static ERROR_InvalidKvksFile: number;
- // @internal (undocumented)
- static Error_InvalidKvksFile: (o: {
- filename: string;
- e: any;
- }) => CompilerEvent;
- static ERROR_UnicodeSetHasProperties: number;
- // @internal (undocumented)
- static Error_UnicodeSetHasProperties: () => CompilerEvent;
- static ERROR_UnicodeSetHasStrings: number;
- // @internal (undocumented)
- static Error_UnicodeSetHasStrings: () => CompilerEvent;
- static ERROR_UnicodeSetSyntaxError: number;
- // @internal (undocumented)
- static Error_UnicodeSetSyntaxError: () => CompilerEvent;
- static FATAL_CallbacksNotSet: number;
- // @internal (undocumented)
- static Fatal_CallbacksNotSet: () => CompilerEvent;
- static FATAL_MissingWasmModule: number;
- // @internal (undocumented)
- static Fatal_MissingWasmModule: (o: {
- e?: any;
- }) => CompilerEvent;
- static FATAL_UnexpectedException: number;
- // @internal (undocumented)
- static Fatal_UnexpectedException: (o: {
- e: any;
- }) => CompilerEvent;
- static FATAL_UnicodeSetOutOfRange: number;
- // @internal (undocumented)
- static Fatal_UnicodeSetOutOfRange: () => CompilerEvent;
- static WARN_InvalidVkeyInKvksFile: number;
- // @internal (undocumented)
- static Warn_InvalidVkeyInKvksFile: (o: {
- filename: string;
- invalidVkey: string;
- }) => CompilerEvent;
+// Warning: (ae-internal-missing-underscore) The name "CompilerMessages" should be prefixed with an underscore because the declaration is marked as @internal
+//
+// @internal
+export class CompilerMessages extends KmnCompilerMessages {
}
// Warning: (ae-internal-missing-underscore) The name "CompilerResultExtraGroup" should be prefixed with an underscore because the declaration is marked as @internal
@@ -114,338 +62,754 @@ export class KmnCompiler implements KeymanCompiler, UnicodeSetParser {
// @public
export interface KmnCompilerArtifacts extends KeymanCompilerArtifacts {
- // (undocumented)
js?: KeymanCompilerArtifactOptional;
- // (undocumented)
kmx?: KeymanCompilerArtifactOptional;
- // (undocumented)
kvk?: KeymanCompilerArtifactOptional;
}
-// @public
+// Warning: (ae-internal-missing-underscore) The name "KmnCompilerMessages" should be prefixed with an underscore because the declaration is marked as @internal
+//
+// @internal
export class KmnCompilerMessages {
// (undocumented)
static ERROR_140FeatureOnlyContextAndNotAnyWeb: number;
// (undocumented)
+ static Error_140FeatureOnlyContextAndNotAnyWeb: () => CompilerEvent;
+ // (undocumented)
static ERROR_501FeatureOnly_Call: number;
// (undocumented)
+ static Error_501FeatureOnly_Call: () => CompilerEvent;
+ // (undocumented)
static ERROR_60FeatureOnly_Contextn: number;
// (undocumented)
+ static Error_60FeatureOnly_Contextn: () => CompilerEvent;
+ // (undocumented)
static ERROR_60FeatureOnly_EthnologueCode: number;
// (undocumented)
+ static Error_60FeatureOnly_EthnologueCode: () => CompilerEvent;
+ // (undocumented)
static ERROR_60FeatureOnly_MnemonicLayout: number;
// (undocumented)
+ static Error_60FeatureOnly_MnemonicLayout: () => CompilerEvent;
+ // (undocumented)
static ERROR_60FeatureOnly_NamedCodes: number;
// (undocumented)
+ static Error_60FeatureOnly_NamedCodes: () => CompilerEvent;
+ // (undocumented)
static ERROR_60FeatureOnly_OldCharPosMatching: number;
// (undocumented)
+ static Error_60FeatureOnly_OldCharPosMatching: () => CompilerEvent;
+ // (undocumented)
static ERROR_60FeatureOnly_VirtualCharKey: number;
// (undocumented)
+ static Error_60FeatureOnly_VirtualCharKey: () => CompilerEvent;
+ // (undocumented)
static ERROR_70FeatureOnly: number;
// (undocumented)
+ static Error_70FeatureOnly: () => CompilerEvent;
+ // (undocumented)
static ERROR_80FeatureOnly: number;
// (undocumented)
+ static Error_80FeatureOnly: () => CompilerEvent;
+ // (undocumented)
static ERROR_90FeatureOnly_IfSystemStores: number;
// (undocumented)
+ static Error_90FeatureOnly_IfSystemStores: () => CompilerEvent;
+ // (undocumented)
static ERROR_90FeatureOnly_SetSystemStores: number;
// (undocumented)
+ static Error_90FeatureOnly_SetSystemStores: () => CompilerEvent;
+ // (undocumented)
static ERROR_90FeatureOnlyEmbedCSS: number;
// (undocumented)
+ static Error_90FeatureOnlyEmbedCSS: () => CompilerEvent;
+ // (undocumented)
static ERROR_90FeatureOnlyKeyboardVersion: number;
// (undocumented)
+ static Error_90FeatureOnlyKeyboardVersion: () => CompilerEvent;
+ // (undocumented)
static ERROR_90FeatureOnlyLayoutFile: number;
// (undocumented)
+ static Error_90FeatureOnlyLayoutFile: () => CompilerEvent;
+ // (undocumented)
static ERROR_90FeatureOnlyTargets: number;
// (undocumented)
+ static Error_90FeatureOnlyTargets: () => CompilerEvent;
+ // (undocumented)
static ERROR_90FeatureOnlyVirtualKeyDictionary: number;
// (undocumented)
+ static Error_90FeatureOnlyVirtualKeyDictionary: () => CompilerEvent;
+ // (undocumented)
static ERROR_AnyInVirtualKeySection: number;
// (undocumented)
+ static Error_AnyInVirtualKeySection: () => CompilerEvent;
+ // (undocumented)
static ERROR_BeepInVirtualKeySection: number;
// (undocumented)
+ static Error_BeepInVirtualKeySection: () => CompilerEvent;
+ // (undocumented)
static ERROR_CallInVirtualKeySection: number;
// (undocumented)
+ static Error_CallInVirtualKeySection: () => CompilerEvent;
+ // (undocumented)
static ERROR_CannotLoadIncludeFile: number;
// (undocumented)
+ static Error_CannotLoadIncludeFile: () => CompilerEvent;
+ // (undocumented)
static ERROR_CannotReadBitmapFile: number;
// (undocumented)
+ static Error_CannotReadBitmapFile: () => CompilerEvent;
+ // (undocumented)
static ERROR_CannotReadInfile: number;
// (undocumented)
+ static Error_CannotReadInfile: () => CompilerEvent;
+ // (undocumented)
static ERROR_CannotUseReadWriteGroupFromReadonlyGroup: number;
// (undocumented)
+ static Error_CannotUseReadWriteGroupFromReadonlyGroup: () => CompilerEvent;
+ // (undocumented)
static ERROR_CasedKeysMustContainOnlyVirtualKeys: number;
// (undocumented)
+ static Error_CasedKeysMustContainOnlyVirtualKeys: () => CompilerEvent;
+ // (undocumented)
static ERROR_CasedKeysMustNotIncludeShiftStates: number;
// (undocumented)
+ static Error_CasedKeysMustNotIncludeShiftStates: () => CompilerEvent;
+ // (undocumented)
static ERROR_CasedKeysNotSupportedWithMnemonicLayout: number;
// (undocumented)
+ static Error_CasedKeysNotSupportedWithMnemonicLayout: () => CompilerEvent;
+ // (undocumented)
static ERROR_CharacterExpansionMustBeFollowedByCharacter: number;
// (undocumented)
+ static Error_CharacterExpansionMustBeFollowedByCharacter: () => CompilerEvent;
+ // (undocumented)
static ERROR_CodeInvalidInKeyStore: number;
// (undocumented)
+ static Error_CodeInvalidInKeyStore: () => CompilerEvent;
+ // (undocumented)
static ERROR_CodeInvalidInThisSection: number;
// (undocumented)
+ static Error_CodeInvalidInThisSection: () => CompilerEvent;
+ // (undocumented)
static ERROR_ContextAndIndexInvalidInMatchNomatch: number;
// (undocumented)
+ static Error_ContextAndIndexInvalidInMatchNomatch: () => CompilerEvent;
+ // (undocumented)
static ERROR_ContextExHasInvalidOffset: number;
// (undocumented)
+ static Error_ContextExHasInvalidOffset: () => CompilerEvent;
+ // (undocumented)
static ERROR_ContextInVirtualKeySection: number;
// (undocumented)
+ static Error_ContextInVirtualKeySection: () => CompilerEvent;
+ // (undocumented)
static ERROR_DuplicateGroup: number;
// (undocumented)
+ static Error_DuplicateGroup: () => CompilerEvent;
+ // (undocumented)
static ERROR_DuplicateStore: number;
// (undocumented)
+ static Error_DuplicateStore: () => CompilerEvent;
+ // (undocumented)
static ERROR_ExpansionMustBePositive: number;
// (undocumented)
+ static Error_ExpansionMustBePositive: () => CompilerEvent;
+ // (undocumented)
static ERROR_ExpansionMustFollowCharacterOrVKey: number;
// (undocumented)
+ static Error_ExpansionMustFollowCharacterOrVKey: () => CompilerEvent;
+ // (undocumented)
+ static ERROR_FileNotFound: number;
+ // (undocumented)
+ static Error_FileNotFound: (o: {
+ filename: string;
+ }) => CompilerEvent;
+ // (undocumented)
static ERROR_GroupDoesNotExist: number;
// (undocumented)
+ static Error_GroupDoesNotExist: () => CompilerEvent;
+ // (undocumented)
static ERROR_IfSystemStore_NotFound: number;
// (undocumented)
+ static Error_IfSystemStore_NotFound: () => CompilerEvent;
+ // (undocumented)
static ERROR_IndexDoesNotPointToAny: number;
// (undocumented)
+ static Error_IndexDoesNotPointToAny: () => CompilerEvent;
+ // (undocumented)
static ERROR_IndexInVirtualKeySection: number;
// (undocumented)
+ static Error_IndexInVirtualKeySection: () => CompilerEvent;
+ // (undocumented)
static ERROR_InfileNotExist: number;
// (undocumented)
+ static Error_InfileNotExist: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidAny: number;
// (undocumented)
+ static Error_InvalidAny: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidBegin: number;
// (undocumented)
+ static Error_InvalidBegin: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidBitmapLine: number;
// (undocumented)
+ static Error_InvalidBitmapLine: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidCall: number;
// (undocumented)
+ static Error_InvalidCall: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidCharacter: number;
// (undocumented)
+ static Error_InvalidCharacter: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidCodeInKeyPartOfRule: number;
// (undocumented)
+ static Error_InvalidCodeInKeyPartOfRule: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidCopyright: number;
// (undocumented)
+ static Error_InvalidCopyright: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidDeadkey: number;
// (undocumented)
+ static Error_InvalidDeadkey: () => CompilerEvent;
+ // (undocumented)
+ static ERROR_InvalidDisplayMapFile: number;
+ // (undocumented)
+ static Error_InvalidDisplayMapFile: (o: {
+ filename: string;
+ e: any;
+ }) => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidEthnologueCode: number;
// (undocumented)
+ static Error_InvalidEthnologueCode: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidGroupLine: number;
// (undocumented)
+ static Error_InvalidGroupLine: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidIf: number;
// (undocumented)
+ static Error_InvalidIf: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidIndex: number;
// (undocumented)
+ static Error_InvalidIndex: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidInVirtualKeySection: number;
// (undocumented)
+ static Error_InvalidInVirtualKeySection: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidKeyCode: number;
// (undocumented)
+ static Error_InvalidKeyCode: (o: {
+ keyId: string;
+ }) => CompilerEvent;
+ // (undocumented)
+ static ERROR_InvalidKvkFile: number;
+ // (undocumented)
+ static Error_InvalidKvkFile: (o: {
+ filename: string;
+ e: any;
+ }) => CompilerEvent;
+ // (undocumented)
+ static ERROR_InvalidKvksFile: number;
+ // (undocumented)
+ static Error_InvalidKvksFile: (o: {
+ filename: string;
+ e: any;
+ }) => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidLanguageLine: number;
// (undocumented)
+ static Error_InvalidLanguageLine: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidLanguageName: number;
// (undocumented)
+ static Error_InvalidLanguageName: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidLayoutLine: number;
// (undocumented)
+ static Error_InvalidLayoutLine: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidLineContinuation: number;
// (undocumented)
+ static Error_InvalidLineContinuation: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidMessage: number;
// (undocumented)
+ static Error_InvalidMessage: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidName: number;
// (undocumented)
+ static Error_InvalidName: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidNamedCode: number;
// (undocumented)
+ static Error_InvalidNamedCode: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidOuts: number;
// (undocumented)
+ static Error_InvalidOuts: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidReset: number;
// (undocumented)
+ static Error_InvalidReset: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidSave: number;
// (undocumented)
+ static Error_InvalidSave: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidSet: number;
// (undocumented)
+ static Error_InvalidSet: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidStoreLine: number;
// (undocumented)
+ static Error_InvalidStoreLine: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidSwitch: number;
// (undocumented)
+ static Error_InvalidSwitch: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidSystemStore: number;
// (undocumented)
+ static Error_InvalidSystemStore: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidToken: number;
// (undocumented)
+ static Error_InvalidToken: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidTouchLayoutFile: number;
// (undocumented)
+ static Error_InvalidTouchLayoutFile: (o: {
+ filename: string;
+ }) => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidUse: number;
// (undocumented)
+ static Error_InvalidUse: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidValue: number;
// (undocumented)
+ static Error_InvalidValue: () => CompilerEvent;
+ // (undocumented)
static ERROR_InvalidVersion: number;
// (undocumented)
+ static Error_InvalidVersion: () => CompilerEvent;
+ // (undocumented)
static ERROR_KeyboardVersionFormatInvalid: number;
// (undocumented)
+ static Error_KeyboardVersionFormatInvalid: () => CompilerEvent;
+ // (undocumented)
static ERROR_LayoutButNoLanguage: number;
// (undocumented)
+ static Error_LayoutButNoLanguage: () => CompilerEvent;
+ // (undocumented)
static ERROR_LineTooLong: number;
// (undocumented)
+ static Error_LineTooLong: () => CompilerEvent;
+ // (undocumented)
static ERROR_NewContextGroupMustBeReadonly: number;
// (undocumented)
+ static Error_NewContextGroupMustBeReadonly: () => CompilerEvent;
+ // (undocumented)
static ERROR_NoTokensFound: number;
// (undocumented)
+ static Error_NoTokensFound: () => CompilerEvent;
+ // (undocumented)
static ERROR_NotSupportedInKeymanWebContext: number;
// (undocumented)
+ static Error_NotSupportedInKeymanWebContext: (o: {
+ line: number;
+ code: String;
+ }) => CompilerEvent;
+ // (undocumented)
static ERROR_NotSupportedInKeymanWebOutput: number;
// (undocumented)
+ static Error_NotSupportedInKeymanWebOutput: (o: {
+ line: number;
+ code: string;
+ }) => CompilerEvent;
+ // (undocumented)
static ERROR_NotSupportedInKeymanWebStore: number;
// (undocumented)
+ static Error_NotSupportedInKeymanWebStore: (o: {
+ code: string;
+ store: string;
+ }) => CompilerEvent;
+ // (undocumented)
static ERROR_NoVersionLine: number;
// (undocumented)
+ static Error_NoVersionLine: () => CompilerEvent;
+ // (undocumented)
static ERROR_OutputInReadonlyGroup: number;
// (undocumented)
+ static Error_OutputInReadonlyGroup: () => CompilerEvent;
+ // (undocumented)
static ERROR_OutsInVirtualKeySection: number;
// (undocumented)
+ static Error_OutsInVirtualKeySection: () => CompilerEvent;
+ // (undocumented)
static ERROR_PostKeystrokeGroupMustBeReadonly: number;
// (undocumented)
+ static Error_PostKeystrokeGroupMustBeReadonly: () => CompilerEvent;
+ // (undocumented)
static ERROR_RepeatedBegin: number;
// (undocumented)
+ static Error_RepeatedBegin: () => CompilerEvent;
+ // (undocumented)
static ERROR_ReservedCharacter: number;
// (undocumented)
+ static Error_ReservedCharacter: () => CompilerEvent;
+ // (undocumented)
static ERROR_SetSystemStore_NotFound: number;
// (undocumented)
+ static Error_SetSystemStore_NotFound: () => CompilerEvent;
+ // (undocumented)
static ERROR_StatementNotPermittedInReadonlyGroup: number;
// (undocumented)
+ static Error_StatementNotPermittedInReadonlyGroup: () => CompilerEvent;
+ // (undocumented)
static ERROR_StoreDoesNotExist: number;
// (undocumented)
+ static Error_StoreDoesNotExist: () => CompilerEvent;
+ // (undocumented)
static ERROR_StringInVirtualKeySection: number;
// (undocumented)
+ static Error_StringInVirtualKeySection: () => CompilerEvent;
+ // (undocumented)
static ERROR_TooManyIndexToKeyRefs: number;
// (undocumented)
+ static Error_TooManyIndexToKeyRefs: () => CompilerEvent;
+ // (undocumented)
static ERROR_TouchLayoutInvalidIdentifier: number;
// (undocumented)
+ static Error_TouchLayoutInvalidIdentifier: (o: {
+ keyId: string;
+ platformName: string;
+ layerId: string;
+ }) => CompilerEvent;
+ // (undocumented)
+ static ERROR_UnicodeSetHasProperties: number;
+ // (undocumented)
+ static Error_UnicodeSetHasProperties: () => CompilerEvent;
+ // (undocumented)
+ static ERROR_UnicodeSetHasStrings: number;
+ // (undocumented)
+ static Error_UnicodeSetHasStrings: () => CompilerEvent;
+ // (undocumented)
+ static ERROR_UnicodeSetSyntaxError: number;
+ // (undocumented)
+ static Error_UnicodeSetSyntaxError: () => CompilerEvent;
+ // (undocumented)
static ERROR_UnterminatedString: number;
// (undocumented)
+ static Error_UnterminatedString: () => CompilerEvent;
+ // (undocumented)
static ERROR_VersionAlreadyIncluded: number;
// (undocumented)
+ static Error_VersionAlreadyIncluded: () => CompilerEvent;
+ // (undocumented)
static ERROR_VirtualCharacterKeysNotSupportedInKeymanWeb: number;
// (undocumented)
+ static Error_VirtualCharacterKeysNotSupportedInKeymanWeb: (o: {
+ line: number;
+ }) => CompilerEvent;
+ // (undocumented)
static ERROR_VirtualKeyInContext: number;
// (undocumented)
+ static Error_VirtualKeyInContext: () => CompilerEvent;
+ // (undocumented)
static ERROR_VirtualKeyNotAllowedHere: number;
// (undocumented)
+ static Error_VirtualKeyNotAllowedHere: () => CompilerEvent;
+ // (undocumented)
static ERROR_VirtualKeysNotValidForMnemonicLayouts: number;
// (undocumented)
+ static Error_VirtualKeysNotValidForMnemonicLayouts: (o: {
+ line: number;
+ }) => CompilerEvent;
+ // (undocumented)
static ERROR_VKeyExpansionMustBeFollowedByVKey: number;
// (undocumented)
+ static Error_VKeyExpansionMustBeFollowedByVKey: () => CompilerEvent;
+ // (undocumented)
static ERROR_VKeyExpansionMustUseConsistentShift: number;
// (undocumented)
+ static Error_VKeyExpansionMustUseConsistentShift: () => CompilerEvent;
+ // (undocumented)
static ERROR_ZeroLengthString: number;
// (undocumented)
+ static Error_ZeroLengthString: () => CompilerEvent;
+ // (undocumented)
static FATAL_BadCallParams: number;
// (undocumented)
+ static Fatal_BadCallParams: () => CompilerEvent;
+ // (undocumented)
static FATAL_Break: number;
// (undocumented)
+ static Fatal_Break: () => CompilerEvent;
+ // (undocumented)
static FATAL_BufferOverflow: number;
// (undocumented)
+ static Fatal_BufferOverflow: () => CompilerEvent;
+ // (undocumented)
+ static FATAL_CallbacksNotSet: number;
+ // (undocumented)
+ static Fatal_CallbacksNotSet: () => CompilerEvent;
+ // (undocumented)
static FATAL_CannotAllocateMemory: number;
// (undocumented)
+ static Fatal_CannotAllocateMemory: () => CompilerEvent;
+ // (undocumented)
static FATAL_CannotCreateTempfile: number;
// (undocumented)
+ static Fatal_CannotCreateTempfile: () => CompilerEvent;
+ // (undocumented)
+ static FATAL_MissingWasmModule: number;
+ // (undocumented)
+ static Fatal_MissingWasmModule: (o: {
+ e?: any;
+ }) => CompilerEvent;
+ // (undocumented)
static FATAL_SomewhereIGotItWrong: number;
// (undocumented)
+ static Fatal_SomewhereIGotItWrong: () => CompilerEvent;
+ // (undocumented)
static FATAL_UnableToWriteFully: number;
// (undocumented)
+ static Fatal_UnableToWriteFully: () => CompilerEvent;
+ // (undocumented)
+ static FATAL_UnexpectedException: number;
+ // (undocumented)
+ static Fatal_UnexpectedException: (o: {
+ e: any;
+ }) => CompilerEvent;
+ // (undocumented)
+ static FATAL_UnicodeSetOutOfRange: number;
+ // (undocumented)
+ static Fatal_UnicodeSetOutOfRange: () => CompilerEvent;
+ // (undocumented)
static HINT_NonUnicodeFile: number;
// (undocumented)
+ static Hint_NonUnicodeFile: () => CompilerEvent;
+ // (undocumented)
static HINT_UnreachableKeyCode: number;
// (undocumented)
+ static Hint_UnreachableKeyCode: (o: {
+ line: number;
+ key: string;
+ }) => CompilerEvent;
+ // (undocumented)
static HINT_UnreachableRule: number;
// (undocumented)
+ static Hint_UnreachableRule: () => CompilerEvent;
+ // (undocumented)
static INFO_EndOfFile: number;
// (undocumented)
+ static Info_EndOfFile: () => CompilerEvent;
+ // (undocumented)
static INFO_Info: number;
// (undocumented)
- static INFO_None: number;
+ static Info_Info: () => CompilerEvent;
// (undocumented)
static WARN_ANSIInUnicodeGroup: number;
// (undocumented)
+ static Warn_ANSIInUnicodeGroup: () => CompilerEvent;
+ // (undocumented)
static WARN_BitmapNotUsed: number;
// (undocumented)
- static WARN_CouldNotCopyJsonFile: number;
+ static Warn_BitmapNotUsed: () => CompilerEvent;
// (undocumented)
static WARN_CustomLanguagesNotSupported: number;
// (undocumented)
+ static Warn_CustomLanguagesNotSupported: () => CompilerEvent;
+ // (undocumented)
static WARN_DontMixChiralAndNonChiralModifiers: number;
// (undocumented)
+ static Warn_DontMixChiralAndNonChiralModifiers: () => CompilerEvent;
+ // (undocumented)
static WARN_EmbedJsFileMissing: number;
// (undocumented)
+ static Warn_EmbedJsFileMissing: (o: {
+ line: number;
+ jsFilename: string;
+ e: any;
+ }) => CompilerEvent;
+ // (undocumented)
static WARN_ExtendedShiftFlagsNotSupportedInKeymanWeb: number;
// (undocumented)
+ static Warn_ExtendedShiftFlagsNotSupportedInKeymanWeb: (o: {
+ line: number;
+ flags: string;
+ }) => CompilerEvent;
+ // (undocumented)
static WARN_HeaderStatementIsDeprecated: number;
// (undocumented)
+ static Warn_HeaderStatementIsDeprecated: () => CompilerEvent;
+ // (undocumented)
static WARN_HelpFileMissing: number;
// (undocumented)
+ static Warn_HelpFileMissing: (o: {
+ line: number;
+ helpFilename: string;
+ e: any;
+ }) => CompilerEvent;
+ // (undocumented)
static WARN_HotkeyHasInvalidModifier: number;
// (undocumented)
+ static Warn_HotkeyHasInvalidModifier: () => CompilerEvent;
+ // (undocumented)
static WARN_IfShouldBeAtStartOfContext: number;
// (undocumented)
+ static Warn_IfShouldBeAtStartOfContext: () => CompilerEvent;
+ // (undocumented)
static WARN_IndexStoreShort: number;
// (undocumented)
- static WARN_InvalidJSONMetadataFile: number;
+ static Warn_IndexStoreShort: () => CompilerEvent;
+ // (undocumented)
+ static WARN_InvalidVkeyInKvksFile: number;
// (undocumented)
- static WARN_JSONMetadataOSKFontShouldMatchTouchFont: number;
+ static Warn_InvalidVkeyInKvksFile: (o: {
+ filename: string;
+ invalidVkey: string;
+ }) => CompilerEvent;
// (undocumented)
static WARN_KeyBadLength: number;
// (undocumented)
+ static Warn_KeyBadLength: () => CompilerEvent;
+ // (undocumented)
static WARN_KeyShouldIncludeNCaps: number;
// (undocumented)
+ static Warn_KeyShouldIncludeNCaps: () => CompilerEvent;
+ // (undocumented)
static WARN_KVKFileIsInSourceFormat: number;
// (undocumented)
+ static Warn_KVKFileIsInSourceFormat: () => CompilerEvent;
+ // (undocumented)
static WARN_LanguageHeadersDeprecatedInKeyman10: number;
// (undocumented)
+ static Warn_LanguageHeadersDeprecatedInKeyman10: () => CompilerEvent;
+ // (undocumented)
static WARN_MixingLeftAndRightModifiers: number;
// (undocumented)
+ static Warn_MixingLeftAndRightModifiers: () => CompilerEvent;
+ // (undocumented)
static WARN_NulNotFirstStatementInContext: number;
// (undocumented)
+ static Warn_NulNotFirstStatementInContext: () => CompilerEvent;
+ // (undocumented)
static WARN_OldVersion: number;
// (undocumented)
+ static Warn_OldVersion: () => CompilerEvent;
+ // (undocumented)
static WARN_OptionStoreNameInvalid: number;
// (undocumented)
+ static Warn_OptionStoreNameInvalid: (o: {
+ name: string;
+ }) => CompilerEvent;
+ // (undocumented)
static WARN_PlatformNotInTargets: number;
// (undocumented)
+ static Warn_PlatformNotInTargets: () => CompilerEvent;
+ // (undocumented)
static WARN_PunctuationInEthnologueCode: number;
// (undocumented)
+ static Warn_PunctuationInEthnologueCode: () => CompilerEvent;
+ // (undocumented)
static WARN_ReservedCharacter: number;
// (undocumented)
+ static Warn_ReservedCharacter: () => CompilerEvent;
+ // (undocumented)
static WARN_StoreAlreadyUsedAsOptionOrCall: number;
// (undocumented)
+ static Warn_StoreAlreadyUsedAsOptionOrCall: () => CompilerEvent;
+ // (undocumented)
static WARN_StoreAlreadyUsedAsStoreOrCall: number;
// (undocumented)
+ static Warn_StoreAlreadyUsedAsStoreOrCall: () => CompilerEvent;
+ // (undocumented)
static WARN_StoreAlreadyUsedAsStoreOrOption: number;
// (undocumented)
- static WARN_TooManyErrorsOrWarnings: number;
+ static Warn_StoreAlreadyUsedAsStoreOrOption: () => CompilerEvent;
// (undocumented)
static WARN_TooManyWarnings: number;
// (undocumented)
+ static Warn_TooManyWarnings: () => CompilerEvent;
+ // (undocumented)
static WARN_TouchLayoutCustomKeyNotDefined: number;
// (undocumented)
- static WARN_TouchLayoutFileMissing: number;
+ static Warn_TouchLayoutCustomKeyNotDefined: (o: {
+ keyId: string;
+ platformName: string;
+ layerId: string;
+ }) => CompilerEvent;
// (undocumented)
static WARN_TouchLayoutFontShouldBeSameForAllPlatforms: number;
// (undocumented)
+ static Warn_TouchLayoutFontShouldBeSameForAllPlatforms: () => CompilerEvent;
+ // (undocumented)
static WARN_TouchLayoutMissingLayer: number;
// (undocumented)
+ static Warn_TouchLayoutMissingLayer: (o: {
+ keyId: string;
+ platformName: string;
+ layerId: string;
+ nextLayer: string;
+ }) => CompilerEvent;
+ // (undocumented)
static WARN_TouchLayoutMissingRequiredKeys: number;
// (undocumented)
+ static Warn_TouchLayoutMissingRequiredKeys: (o: {
+ layerId: string;
+ platformName: string;
+ missingKeys: string;
+ }) => CompilerEvent;
+ // (undocumented)
static WARN_TouchLayoutSpecialLabelOnNormalKey: number;
// (undocumented)
+ static Warn_TouchLayoutSpecialLabelOnNormalKey: (o: {
+ keyId: string;
+ platformName: string;
+ layerId: string;
+ label: string;
+ }) => CompilerEvent;
+ // (undocumented)
static WARN_TouchLayoutUnidentifiedKey: number;
// (undocumented)
+ static Warn_TouchLayoutUnidentifiedKey: (o: {
+ layerId: string;
+ }) => CompilerEvent;
+ // (undocumented)
static WARN_UnicodeInANSIGroup: number;
// (undocumented)
+ static Warn_UnicodeInANSIGroup: () => CompilerEvent;
+ // (undocumented)
static WARN_UnicodeSurrogateUsed: number;
// (undocumented)
+ static Warn_UnicodeSurrogateUsed: () => CompilerEvent;
+ // (undocumented)
static WARN_UseNotLastStatementInRule: number;
// (undocumented)
+ static Warn_UseNotLastStatementInRule: () => CompilerEvent;
+ // (undocumented)
static WARN_VirtualCharKeyWithPositionalLayout: number;
// (undocumented)
+ static Warn_VirtualCharKeyWithPositionalLayout: () => CompilerEvent;
+ // (undocumented)
static WARN_VirtualKeyInOutput: number;
// (undocumented)
+ static Warn_VirtualKeyInOutput: () => CompilerEvent;
+ // (undocumented)
static WARN_VirtualKeyWithMnemonicLayout: number;
// (undocumented)
- static WARN_VisualKeyboardFileMissing: number;
+ static Warn_VirtualKeyWithMnemonicLayout: () => CompilerEvent;
}
// @public
@@ -454,13 +818,9 @@ export interface KmnCompilerOptions extends CompilerOptions {
// @public
export interface KmnCompilerResult extends KeymanCompilerResult {
- // (undocumented)
artifacts: KmnCompilerArtifacts;
- // (undocumented)
displayMap?: Osk.PuaMap;
// Warning: (ae-incompatible-release-tags) The symbol "extra" is marked as @public, but its signature references "KmnCompilerResultExtra" which is marked as @internal
- //
- // (undocumented)
extra: KmnCompilerResultExtra;
}
@@ -479,139 +839,42 @@ export interface KmnCompilerResultExtra {
targets: number;
}
-// @public
+// Warning: (ae-internal-missing-underscore) The name "KmwCompilerMessages" should be prefixed with an underscore because the declaration is marked as @internal
+//
+// @internal
export class KmwCompilerMessages extends KmnCompilerMessages {
- // @internal (undocumented)
- static Error_InvalidBegin: () => CompilerEvent;
- // @internal (undocumented)
- static Error_InvalidKeyCode: (o: {
- keyId: string;
- }) => CompilerEvent;
- // @internal (undocumented)
- static Error_InvalidTouchLayoutFile: (o: {
- filename: string;
- }) => CompilerEvent;
// (undocumented)
static ERROR_InvalidTouchLayoutFileFormat: number;
- // @internal (undocumented)
+ // (undocumented)
static Error_InvalidTouchLayoutFileFormat: (o: {
msg: string;
}) => CompilerEvent;
// (undocumented)
static ERROR_NotAnyRequiresVersion14: number;
- // @internal (undocumented)
+ // (undocumented)
static Error_NotAnyRequiresVersion14: (o: {
line: number;
}) => CompilerEvent;
- // @internal (undocumented)
- static Error_NotSupportedInKeymanWebContext: (o: {
- line: number;
- code: String;
- }) => CompilerEvent;
- // @internal (undocumented)
- static Error_NotSupportedInKeymanWebOutput: (o: {
- line: number;
- code: string;
- }) => CompilerEvent;
- // @internal (undocumented)
- static Error_NotSupportedInKeymanWebStore: (o: {
- code: string;
- store: string;
- }) => CompilerEvent;
// (undocumented)
static ERROR_TouchLayoutFileDoesNotExist: number;
- // @internal (undocumented)
+ // (undocumented)
static Error_TouchLayoutFileDoesNotExist: (o: {
filename: string;
}) => CompilerEvent;
// (undocumented)
static ERROR_TouchLayoutIdentifierRequires15: number;
- // @internal (undocumented)
+ // (undocumented)
static Error_TouchLayoutIdentifierRequires15: (o: {
keyId: string;
platformName: string;
layerId: string;
}) => CompilerEvent;
- // @internal (undocumented)
- static Error_TouchLayoutInvalidIdentifier: (o: {
- keyId: string;
- platformName: string;
- layerId: string;
- }) => CompilerEvent;
- // @internal (undocumented)
- static Error_VirtualCharacterKeysNotSupportedInKeymanWeb: (o: {
- line: number;
- }) => CompilerEvent;
- // @internal (undocumented)
- static Error_VirtualKeysNotValidForMnemonicLayouts: (o: {
- line: number;
- }) => CompilerEvent;
// (undocumented)
static HINT_TouchLayoutUsesUnsupportedGesturesDownlevel: number;
- // @internal (undocumented)
+ // (undocumented)
static Hint_TouchLayoutUsesUnsupportedGesturesDownlevel: (o: {
keyId: string;
}) => CompilerEvent;
- // @internal (undocumented)
- static Hint_UnreachableKeyCode: (o: {
- line: number;
- key: string;
- }) => CompilerEvent;
- // @internal (undocumented)
- static Warn_DontMixChiralAndNonChiralModifiers: () => CompilerEvent;
- // @internal (undocumented)
- static Warn_EmbedJsFileMissing: (o: {
- line: number;
- jsFilename: string;
- e: any;
- }) => CompilerEvent;
- // @internal (undocumented)
- static Warn_ExtendedShiftFlagsNotSupportedInKeymanWeb: (o: {
- line: number;
- flags: string;
- }) => CompilerEvent;
- // @internal (undocumented)
- static Warn_HelpFileMissing: (o: {
- line: number;
- helpFilename: string;
- e: any;
- }) => CompilerEvent;
- // @internal (undocumented)
- static Warn_OptionStoreNameInvalid: (o: {
- name: string;
- }) => CompilerEvent;
- // @internal (undocumented)
- static Warn_TouchLayoutCustomKeyNotDefined: (o: {
- keyId: string;
- platformName: string;
- layerId: string;
- }) => CompilerEvent;
- // @internal (undocumented)
- static Warn_TouchLayoutFontShouldBeSameForAllPlatforms: () => CompilerEvent;
- // @internal (undocumented)
- static Warn_TouchLayoutMissingLayer: (o: {
- keyId: string;
- platformName: string;
- layerId: string;
- nextLayer: string;
- }) => CompilerEvent;
- // @internal (undocumented)
- static Warn_TouchLayoutMissingRequiredKeys: (o: {
- layerId: string;
- platformName: string;
- missingKeys: string;
- }) => CompilerEvent;
- // @internal (undocumented)
- static Warn_TouchLayoutSpecialLabelOnNormalKey: (o: {
- keyId: string;
- platformName: string;
- layerId: string;
- label: string;
- }) => CompilerEvent;
- // @internal (undocumented)
- static Warn_TouchLayoutUnidentifiedKey: (o: {
- layerId: string;
- }) => CompilerEvent;
}
```
diff --git a/developer/docs/api/etc/kmc-ldml.api.md b/developer/docs/api/etc/kmc-ldml.api.md
index 65ca6d30888..2ea37258715 100644
--- a/developer/docs/api/etc/kmc-ldml.api.md
+++ b/developer/docs/api/etc/kmc-ldml.api.md
@@ -11,52 +11,40 @@ import { KeymanCompiler } from '@keymanapp/common-types';
import { KeymanCompilerArtifactOptional } from '@keymanapp/common-types';
import { KeymanCompilerArtifacts } from '@keymanapp/common-types';
import { KeymanCompilerResult } from '@keymanapp/common-types';
-import { KMXBuilder } from '@keymanapp/common-types';
import { KMXPlus } from '@keymanapp/common-types';
-import { LDMLKeyboard } from '@keymanapp/common-types';
import { LDMLKeyboardTestDataXMLSourceFile } from '@keymanapp/common-types';
import { LDMLKeyboardXMLSourceFileReaderOptions } from '@keymanapp/common-types';
-import { SectionIdent } from '@keymanapp/ldml-keyboard-constants';
-import { TouchLayout } from '@keymanapp/common-types';
-import { UnicodeSet } from '@keymanapp/common-types';
import { UnicodeSetParser } from '@keymanapp/common-types';
-import { VisualKeyboard } from '@keymanapp/common-types';
-export { KMXBuilder }
-
-// @public (undocumented)
-export class KMXPlusMetadataCompiler {
- // Warning: (ae-forgotten-export) The symbol "KMXPlusData" needs to be exported by the entry point main.d.ts
- // Warning: (ae-forgotten-export) The symbol "KEYBOARD" needs to be exported by the entry point main.d.ts
- static addKmxMetadata(kmxplus: KMXPlusData, keyboard: KEYBOARD, options: LdmlCompilerOptions): void;
-}
-
-// @public (undocumented)
+// @public
export interface LdmlCompilerOptions extends CompilerOptions {
readerOptions: LDMLKeyboardXMLSourceFileReaderOptions;
}
-// @public (undocumented)
+// @public
export class LdmlKeyboardCompiler implements KeymanCompiler {
+ // @internal
compile(source: LDMLKeyboardXMLSourceFile, postValidate?: boolean): Promise;
+ // @internal
getUsetParser(): Promise;
- // (undocumented)
init(callbacks: CompilerCallbacks, options: LdmlCompilerOptions): Promise;
// Warning: (ae-forgotten-export) The symbol "LDMLKeyboardXMLSourceFile" needs to be exported by the entry point main.d.ts
+ //
+ // @internal
load(filename: string): LDMLKeyboardXMLSourceFile | null;
+ // @internal
loadTestData(filename: string): LDMLKeyboardTestDataXMLSourceFile | null;
// Warning: (ae-forgotten-export) The symbol "LdmlKeyboardCompilerResult" needs to be exported by the entry point main.d.ts
- //
- // (undocumented)
run(inputFilename: string, outputFilename?: string): Promise;
+ // @internal
validate(source: LDMLKeyboardXMLSourceFile): Promise;
// Warning: (ae-forgotten-export) The symbol "LdmlKeyboardCompilerArtifacts" needs to be exported by the entry point main.d.ts
- //
- // (undocumented)
write(artifacts: LdmlKeyboardCompilerArtifacts): Promise;
}
-// @public (undocumented)
+// Warning: (ae-internal-missing-underscore) The name "LdmlKeyboardCompilerMessages" should be prefixed with an underscore because the declaration is marked as @internal
+//
+// @internal (undocumented)
export class LdmlKeyboardCompilerMessages {
// (undocumented)
static ERROR_CantReferenceSetFromUnicodeSet: number;
@@ -307,30 +295,6 @@ export class LdmlKeyboardCompilerMessages {
}) => CompilerEvent;
}
-// @public (undocumented)
-export class LdmlKeyboardKeymanWebCompiler {
- constructor(callbacks: CompilerCallbacks, options?: LdmlCompilerOptions);
- // (undocumented)
- compile(name: string, source: LDMLKeyboard.LDMLKeyboardXMLSourceFile): string;
- // (undocumented)
- compileTouchLayout(source: LDMLKeyboard.LDMLKeyboardXMLSourceFile): string;
- // (undocumented)
- compileVisualKeyboard(source: LDMLKeyboard.LDMLKeyboardXMLSourceFile): string;
-}
-
-// @public (undocumented)
-export class LdmlKeyboardVisualKeyboardCompiler {
- constructor(callbacks: CompilerCallbacks);
- // (undocumented)
- compile(source: LDMLKeyboard.LDMLKeyboardXMLSourceFile): VisualKeyboard.VisualKeyboard;
-}
-
-// @public (undocumented)
-export class TouchLayoutCompiler {
- // (undocumented)
- compileToJavascript(source: LDMLKeyboard.LDMLKeyboardXMLSourceFile): TouchLayout.TouchLayoutFile;
-}
-
// (No @packageDocumentation comment for this package)
```
diff --git a/developer/docs/api/etc/kmc-model-info.api.md b/developer/docs/api/etc/kmc-model-info.api.md
index 1c933be6691..af54f5b8821 100644
--- a/developer/docs/api/etc/kmc-model-info.api.md
+++ b/developer/docs/api/etc/kmc-model-info.api.md
@@ -13,23 +13,22 @@ import { KeymanCompilerArtifacts } from '@keymanapp/common-types';
import { KeymanCompilerResult } from '@keymanapp/common-types';
import { KmpJsonFile } from '@keymanapp/common-types';
-// @public (undocumented)
+// @public
export class ModelInfoCompiler implements KeymanCompiler {
constructor();
- // (undocumented)
init(callbacks: CompilerCallbacks, options: ModelInfoCompilerOptions): Promise;
run(inputFilename: string, outputFilename?: string): Promise;
- // (undocumented)
write(artifacts: ModelInfoCompilerArtifacts): Promise;
}
-// @public (undocumented)
+// @public
export interface ModelInfoCompilerArtifacts extends KeymanCompilerArtifacts {
- // (undocumented)
model_info: KeymanCompilerArtifact;
}
-// @public (undocumented)
+// Warning: (ae-internal-missing-underscore) The name "ModelInfoCompilerMessages" should be prefixed with an underscore because the declaration is marked as @internal
+//
+// @internal (undocumented)
export class ModelInfoCompilerMessages {
// (undocumented)
static ERROR_FileDoesNotExist: number;
@@ -51,10 +50,6 @@ export class ModelInfoCompilerMessages {
email: string;
}) => CompilerEvent;
// (undocumented)
- static Error_LicenseFileDoesNotExist: (o: {
- filename: string;
- }) => CompilerEvent;
- // (undocumented)
static ERROR_LicenseFileIsDamaged: number;
// (undocumented)
static Error_LicenseFileIsDamaged: (o: {
@@ -63,6 +58,10 @@ export class ModelInfoCompilerMessages {
// (undocumented)
static ERROR_LicenseFileIsMissing: number;
// (undocumented)
+ static Error_LicenseFileIsMissing: (o: {
+ filename: string;
+ }) => CompilerEvent;
+ // (undocumented)
static ERROR_LicenseIsNotValid: number;
// (undocumented)
static Error_LicenseIsNotValid: (o: {
@@ -89,19 +88,17 @@ export class ModelInfoCompilerMessages {
}) => CompilerEvent;
}
-// @public (undocumented)
+// @public
export interface ModelInfoCompilerOptions extends CompilerOptions {
- // (undocumented)
sources: ModelInfoSources;
}
-// @public (undocumented)
+// @public
export interface ModelInfoCompilerResult extends KeymanCompilerResult {
- // (undocumented)
artifacts: ModelInfoCompilerArtifacts;
}
-// @public (undocumented)
+// @public
export class ModelInfoSources {
forPublishing: boolean;
kmpFileName: string;
diff --git a/developer/docs/api/etc/kmc-model.api.md b/developer/docs/api/etc/kmc-model.api.md
index 68ef0fd4eda..df76354c238 100644
--- a/developer/docs/api/etc/kmc-model.api.md
+++ b/developer/docs/api/etc/kmc-model.api.md
@@ -14,26 +14,49 @@ import { KeymanCompilerArtifact } from '@keymanapp/common-types';
import { KeymanCompilerArtifacts } from '@keymanapp/common-types';
import { KeymanCompilerResult } from '@keymanapp/common-types';
-// @public (undocumented)
+// @public
+export type CasedWordformToKeySpec = (term: string, applyCasing?: CasingFunction) => string;
+
+// @public
export class LexicalModelCompiler implements KeymanCompiler {
+ // @internal
generateLexicalModelCode(model_id: string, modelSource: LexicalModelSource, sourcePath: string): string;
- // (undocumented)
init(callbacks: CompilerCallbacks, _options: CompilerOptions): Promise;
- // Warning: (ae-forgotten-export) The symbol "LexicalModelSource" needs to be exported by the entry point main.d.ts
+ // @internal
loadFromFilename(filename: string): LexicalModelSource;
- // Warning: (ae-forgotten-export) The symbol "LexicalModelCompilerResult" needs to be exported by the entry point main.d.ts
- //
- // (undocumented)
run(inputFilename: string, outputFilename?: string): Promise;
- // (undocumented)
+ // @internal (undocumented)
transpileSources(sources: Array): Array;
- // Warning: (ae-forgotten-export) The symbol "LexicalModelCompilerArtifacts" needs to be exported by the entry point main.d.ts
- //
- // (undocumented)
write(artifacts: LexicalModelCompilerArtifacts): Promise;
}
-// @public (undocumented)
+// @public
+export interface LexicalModelCompilerArtifacts extends KeymanCompilerArtifacts {
+ js: KeymanCompilerArtifact;
+}
+
+// @public
+export interface LexicalModelCompilerResult extends KeymanCompilerResult {
+ artifacts: LexicalModelCompilerArtifacts;
+}
+
+// Warning: (ae-forgotten-export) The symbol "LexicalModelDeclaration" needs to be exported by the entry point main.d.ts
+//
+// @public
+export interface LexicalModelSource extends LexicalModelDeclaration {
+ readonly applyCasing?: CasingFunction;
+ readonly languageUsesCasing?: boolean;
+ readonly punctuation?: LexicalModelPunctuation;
+ readonly rootClass?: string;
+ readonly searchTermToKey?: WordformToKeySpec;
+ // (undocumented)
+ readonly sources: Array;
+ readonly wordBreaker?: WordBreakerSpec | SimpleWordBreakerSpec;
+}
+
+// Warning: (ae-internal-missing-underscore) The name "ModelCompilerMessages" should be prefixed with an underscore because the declaration is marked as @internal
+//
+// @internal (undocumented)
export class ModelCompilerMessages {
// (undocumented)
static ERROR_NoDefaultExport: number;
@@ -91,6 +114,24 @@ export class ModelCompilerMessages {
}) => CompilerEvent;
}
+// @public
+export type SimpleWordBreakerSpec = 'default' | 'ascii' | WordBreakingFunction;
+
+// @public
+export type SimpleWordformToKeySpec = (term: string) => string;
+
+// @public
+export interface WordBreakerSpec {
+ readonly joinWordsAt?: string[];
+ // Warning: (ae-forgotten-export) The symbol "OverrideScriptDefaults" needs to be exported by the entry point main.d.ts
+ readonly overrideScriptDefaults?: OverrideScriptDefaults;
+ // (undocumented)
+ readonly use: SimpleWordBreakerSpec;
+}
+
+// @public
+export type WordformToKeySpec = SimpleWordformToKeySpec | CasedWordformToKeySpec;
+
// (No @packageDocumentation comment for this package)
```
diff --git a/developer/docs/api/etc/kmc-package.api.md b/developer/docs/api/etc/kmc-package.api.md
index 2601e38f3bd..1215057dfea 100644
--- a/developer/docs/api/etc/kmc-package.api.md
+++ b/developer/docs/api/etc/kmc-package.api.md
@@ -14,30 +14,38 @@ import { KeymanCompilerResult } from '@keymanapp/common-types';
import { KmpJsonFile } from '@keymanapp/common-types';
import { KpsFile } from '@keymanapp/common-types';
-// @public (undocumented)
+// @public
export class KmpCompiler implements KeymanCompiler {
+ // @internal
buildKmpFile(kpsFilename: string, kmpJsonData: KmpJsonFile.KmpJsonFile): Promise;
- // Warning: (ae-forgotten-export) The symbol "KmpCompilerOptions" needs to be exported by the entry point main.d.ts
- //
- // (undocumented)
init(callbacks: CompilerCallbacks, options: KmpCompilerOptions): Promise;
- // (undocumented)
+ // @internal (undocumented)
loadKpsFile(kpsFilename: string): KpsFile.KpsFile;
- // Warning: (ae-forgotten-export) The symbol "KmpCompilerResult" needs to be exported by the entry point main.d.ts
- //
- // (undocumented)
run(inputFilename: string, outputFilename?: string): Promise;
- // (undocumented)
+ // @internal (undocumented)
transformKpsFileToKmpObject(kpsFilename: string, kps: KpsFile.KpsFile): KmpJsonFile.KmpJsonFile;
- // (undocumented)
+ // @internal (undocumented)
transformKpsToKmpObject(kpsFilename: string): KmpJsonFile.KmpJsonFile;
- // Warning: (ae-forgotten-export) The symbol "KmpCompilerArtifacts" needs to be exported by the entry point main.d.ts
- //
- // (undocumented)
write(artifacts: KmpCompilerArtifacts): Promise;
}
-// @public (undocumented)
+// @public
+export interface KmpCompilerArtifacts extends KeymanCompilerArtifacts {
+ kmp: KeymanCompilerArtifact;
+}
+
+// @public
+export interface KmpCompilerOptions extends CompilerOptions {
+}
+
+// @public
+export interface KmpCompilerResult extends KeymanCompilerResult {
+ artifacts: KmpCompilerArtifacts;
+}
+
+// Warning: (ae-internal-missing-underscore) The name "PackageCompilerMessages" should be prefixed with an underscore because the declaration is marked as @internal
+//
+// @internal (undocumented)
export class PackageCompilerMessages {
// (undocumented)
static ERROR_FileCouldNotBeRead: number;
@@ -220,30 +228,38 @@ export class PackageCompilerMessages {
}) => CompilerEvent;
}
-// @public (undocumented)
+// Warning: (ae-internal-missing-underscore) The name "PackageValidation" should be prefixed with an underscore because the declaration is marked as @internal
+//
+// @internal (undocumented)
export class PackageValidation {
constructor(callbacks: CompilerCallbacks, options: CompilerOptions);
// (undocumented)
validate(filename: string, kmpJson: KmpJsonFile.KmpJsonFile): boolean;
}
-// @public (undocumented)
+// @public
export class WindowsPackageInstallerCompiler implements KeymanCompiler {
- // Warning: (ae-forgotten-export) The symbol "WindowsPackageInstallerCompilerOptions" needs to be exported by the entry point main.d.ts
- //
- // (undocumented)
init(callbacks: CompilerCallbacks, options: WindowsPackageInstallerCompilerOptions): Promise;
- // Warning: (ae-forgotten-export) The symbol "WindowsPackageInstallerCompilerResult" needs to be exported by the entry point main.d.ts
- //
- // (undocumented)
run(inputFilename: string, outputFilename?: string): Promise;
- // Warning: (ae-forgotten-export) The symbol "WindowsPackageInstallerCompilerArtifacts" needs to be exported by the entry point main.d.ts
- //
- // (undocumented)
write(artifacts: WindowsPackageInstallerCompilerArtifacts): Promise;
}
-// @public (undocumented)
+// @public
+export interface WindowsPackageInstallerCompilerArtifacts extends KeymanCompilerArtifacts {
+ exe: KeymanCompilerArtifact;
+}
+
+// @public
+export interface WindowsPackageInstallerCompilerOptions extends KmpCompilerOptions {
+ sources: WindowsPackageInstallerSources;
+}
+
+// @public
+export interface WindowsPackageInstallerCompilerResult extends KeymanCompilerResult {
+ artifacts: WindowsPackageInstallerCompilerArtifacts;
+}
+
+// @public
export interface WindowsPackageInstallerSources {
// (undocumented)
appName?: string;
diff --git a/developer/src/common/web/utils/README.md b/developer/src/common/web/utils/README.md
index 64955e5439a..b50f9fa4558 100644
--- a/developer/src/common/web/utils/README.md
+++ b/developer/src/common/web/utils/README.md
@@ -7,4 +7,7 @@ containing helper functions such as:
* Sentry integration
* MIT license text validation
-It is not intended for separate use.
\ No newline at end of file
+It is not intended for separate use.
+
+**Note:** developer/server depends on this module; adding extra dependencies may
+impact the bundling for that module too (#10872).
\ No newline at end of file
diff --git a/developer/src/common/web/utils/index.ts b/developer/src/common/web/utils/index.ts
index 08836a2f5c9..a37b244027e 100644
--- a/developer/src/common/web/utils/index.ts
+++ b/developer/src/common/web/utils/index.ts
@@ -1,5 +1,5 @@
export { validateMITLicense } from './src/validate-mit-license.js';
export { KeymanSentry } from './src/KeymanSentry.js';
export { getOption, loadOptions, clearOptions } from './src/options.js';
-export * as Osk from './src/osk.js';
export { escapeMarkdownChar } from './src/markdown.js';
+export { KeymanUrls } from './src/keyman-urls.js';
\ No newline at end of file
diff --git a/developer/src/common/web/utils/package.json b/developer/src/common/web/utils/package.json
index 8cd1e5ae0a2..b246377d28b 100644
--- a/developer/src/common/web/utils/package.json
+++ b/developer/src/common/web/utils/package.json
@@ -19,9 +19,6 @@
"scripts": {
"build": "tsc -b"
},
- "dependencies": {
- "@keymanapp/common-types": "*"
- },
"mocha": {
"spec": "build/test/**/test-*.js",
"require": [
diff --git a/developer/src/common/web/utils/src/keyman-urls.ts b/developer/src/common/web/utils/src/keyman-urls.ts
new file mode 100644
index 00000000000..70e05ba9a3e
--- /dev/null
+++ b/developer/src/common/web/utils/src/keyman-urls.ts
@@ -0,0 +1,24 @@
+export class KeymanUrls {
+ static readonly HELP_KEYMAN_COM = `https://help.keyman.com`;
+ static readonly KEYMAN_COM = `https://keyman.com`;
+
+ // Various Sites
+ static readonly NEW_KEYMAN_ISSUE = () => 'https://github.com/keymanapp/keyman/issues/new';
+ static readonly LDML_SPEC = (topic: string) => `https://www.unicode.org/reports/tr35/tr35-keyboards.html#${topic}`;
+
+ // TODO: Not formatting code here to avoid dep on @keymanapp/common-types for developer-utils
+ static readonly COMPILER_ERROR_CODE = (code: string) => `https://kmn.sh/${code}`; // code should be km##### (already formatted)
+
+ // help.keyman.com
+ static readonly VIRTUAL_KEYS = () => `${KeymanUrls.HELP_KEYMAN_COM}/developer/language/guide/virtual-keys#common-virtual-key-codes`;
+ static readonly FILE_TYPE = (ext: string) => `${KeymanUrls.HELP_KEYMAN_COM}/developer/current-version/reference/file-types/${ext}`;
+ static readonly KMN_REF = (topic: string) => `${KeymanUrls.HELP_KEYMAN_COM}/developer/language/reference/${topic}`;
+ static readonly HELP_KEYBOARD = (id: string) => `${KeymanUrls.HELP_KEYMAN_COM}/keyboard/${id}`;
+ static readonly HELP_MODEL = (id: string) => `${KeymanUrls.HELP_KEYMAN_COM}/model/${id}`;
+
+
+ // keyman.com
+ static readonly KeymanDeveloper_KeymanForAndroidDownload = (version: string) => `${KeymanUrls.KEYMAN_COM}/go/developer/${version}/android-app`;
+ static readonly KeymanDeveloper_KeymanForIosDownload = (version: string) => `${KeymanUrls.KEYMAN_COM}/go/developer/${version}/ios-app`;
+
+}
diff --git a/developer/src/common/web/utils/tsconfig.json b/developer/src/common/web/utils/tsconfig.json
index 9d67982457f..c5980c82f9c 100644
--- a/developer/src/common/web/utils/tsconfig.json
+++ b/developer/src/common/web/utils/tsconfig.json
@@ -5,15 +5,9 @@
"rootDir": ".",
"outDir": "./build/",
"baseUrl": ".",
- "paths": {
- "@keymanapp/common-types": ["../../../../../common/web/types/src/main"],
- },
},
"include": [
"index.ts",
"src/**/*.ts",
],
- "references": [
- { "path": "../../../../../common/web/types/" },
- ]
}
\ No newline at end of file
diff --git a/developer/src/inst/kmdev.wxs b/developer/src/inst/kmdev.wxs
index b76f0ac34ad..f804b8b9cf8 100644
--- a/developer/src/inst/kmdev.wxs
+++ b/developer/src/inst/kmdev.wxs
@@ -59,7 +59,7 @@
-
+
@@ -198,7 +198,7 @@
-
+
diff --git a/developer/src/kmc-analyze/src/messages.ts b/developer/src/kmc-analyze/src/messages.ts
index 41861bcc13a..5c5ced08299 100644
--- a/developer/src/kmc-analyze/src/messages.ts
+++ b/developer/src/kmc-analyze/src/messages.ts
@@ -1,4 +1,5 @@
import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageDef as def, CompilerMessageSpecWithException } from "@keymanapp/common-types";
+import { KeymanUrls } from "@keymanapp/developer-utils";
const Namespace = CompilerErrorNamespace.Analyzer;
const SevInfo = CompilerErrorSeverity.Info | Namespace;
@@ -19,7 +20,7 @@ export class AnalyzerMessages {
o.e ?? 'unknown error',
`Raised when an analysis components has an internal error. If you
experience this error, it should be reported to the Keyman team for
- resolution via https://github.com/keymanapp/keyman/issues/new`
+ resolution via ${KeymanUrls.NEW_KEYMAN_ISSUE()}`
);
static readonly INFO_ScanningFile = SevInfo | 0x0002;
diff --git a/developer/src/kmc-analyze/src/osk-character-use/index.ts b/developer/src/kmc-analyze/src/osk-character-use/index.ts
index 64a496f65bd..e0570b99497 100644
--- a/developer/src/kmc-analyze/src/osk-character-use/index.ts
+++ b/developer/src/kmc-analyze/src/osk-character-use/index.ts
@@ -1,6 +1,6 @@
import { CompilerCallbacks, KeymanFileTypes, KvksFile, KvksFileReader, TouchLayout, TouchLayoutFileReader } from "@keymanapp/common-types";
-import { CompilerMessages } from '@keymanapp/kmc-kmn';
-import { escapeMarkdownChar, Osk } from '@keymanapp/developer-utils';
+import { CompilerMessages, Osk } from '@keymanapp/kmc-kmn';
+import { escapeMarkdownChar } from '@keymanapp/developer-utils';
import { getOskFromKmnFile } from "../util/get-osk-from-kmn-file.js";
import { AnalyzerMessages } from "../messages.js";
diff --git a/developer/src/kmc-analyze/src/osk-rewrite-pua/index.ts b/developer/src/kmc-analyze/src/osk-rewrite-pua/index.ts
index 2d246195460..eff545bb8e7 100644
--- a/developer/src/kmc-analyze/src/osk-rewrite-pua/index.ts
+++ b/developer/src/kmc-analyze/src/osk-rewrite-pua/index.ts
@@ -1,6 +1,5 @@
import { CompilerCallbacks, KeymanFileTypes, KvksFile, KvksFileReader, KvksFileWriter, TouchLayoutFileReader, TouchLayoutFileWriter } from "@keymanapp/common-types";
-import { Osk } from '@keymanapp/developer-utils';
-import { CompilerMessages } from '@keymanapp/kmc-kmn';
+import { CompilerMessages, Osk } from '@keymanapp/kmc-kmn';
import { getOskFromKmnFile } from "../util/get-osk-from-kmn-file.js";
import { AnalyzerMessages } from "../messages.js";
diff --git a/developer/src/kmc-keyboard-info/src/font-family.ts b/developer/src/kmc-keyboard-info/src/font-family.ts
index e069f7949e5..905f5237cd7 100644
--- a/developer/src/kmc-keyboard-info/src/font-family.ts
+++ b/developer/src/kmc-keyboard-info/src/font-family.ts
@@ -16,7 +16,12 @@ export async function getFontFamily(source: Uint8Array) {
}
const buffer = Buffer.from(source);
- const font = await ttfMeta.promise(buffer);
+ let font = null;
+ try {
+ font = await ttfMeta.promise(buffer);
+ } catch(e) {
+ return null;
+ }
/* c8 ignore next 3 */
if(!font) {
return null;
diff --git a/developer/src/kmc-keyboard-info/src/keyboard-info-compiler-messages.ts b/developer/src/kmc-keyboard-info/src/keyboard-info-compiler-messages.ts
index 192dc76970a..d4ccf49dc9d 100644
--- a/developer/src/kmc-keyboard-info/src/keyboard-info-compiler-messages.ts
+++ b/developer/src/kmc-keyboard-info/src/keyboard-info-compiler-messages.ts
@@ -7,6 +7,9 @@ const SevWarn = CompilerErrorSeverity.Warn | Namespace;
const SevError = CompilerErrorSeverity.Error | Namespace;
const SevFatal = CompilerErrorSeverity.Fatal | Namespace;
+/**
+ * @internal
+ */
export class KeyboardInfoCompilerMessages {
static FATAL_UnexpectedException = SevFatal | 0x0001;
static Fatal_UnexpectedException = (o:{e: any}) => CompilerMessageSpecWithException(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error');
diff --git a/developer/src/kmc-keyboard-info/src/keyboard-info-compiler.ts b/developer/src/kmc-keyboard-info/src/keyboard-info-compiler.ts
index fdee45599b7..f374d208442 100644
--- a/developer/src/kmc-keyboard-info/src/keyboard-info-compiler.ts
+++ b/developer/src/kmc-keyboard-info/src/keyboard-info-compiler.ts
@@ -8,7 +8,7 @@ import { KeyboardInfoFile, KeyboardInfoFileIncludes, KeyboardInfoFileLanguageFon
import { KeymanFileTypes, CompilerCallbacks, KmpJsonFile, KmxFileReader, KMX, KeymanTargets, KeymanCompiler, CompilerOptions, KeymanCompilerResult, KeymanCompilerArtifacts, KeymanCompilerArtifact } from "@keymanapp/common-types";
import { KeyboardInfoCompilerMessages } from "./keyboard-info-compiler-messages.js";
import langtags from "./imports/langtags.js";
-import { validateMITLicense } from "@keymanapp/developer-utils";
+import { KeymanUrls, validateMITLicense } from "@keymanapp/developer-utils";
import { KmpCompiler } from "@keymanapp/kmc-package";
import { SchemaValidators } from "@keymanapp/common-types";
@@ -18,8 +18,6 @@ const regionNames = new Intl.DisplayNames(['en'], { type: "region" });
const scriptNames = new Intl.DisplayNames(['en'], { type: "script" });
const langtagsByTag = {};
-const HelpRoot = 'https://help.keyman.com/keyboard/';
-
/**
* Build a dictionary of language tags from langtags.json
*/
@@ -42,6 +40,10 @@ function preinit(): void {
}
}
+/**
+ * @public
+ * Description of sources and metadata required to build a .keyboard_info file
+ */
export interface KeyboardInfoSources {
/** The path in the keymanapp/keyboards repo where this keyboard may be found */
sourcePath: string;
@@ -62,18 +64,46 @@ export interface KeyboardInfoSources {
forPublishing: boolean;
};
+/**
+ * @public
+ * Options for the .keyboard_info compiler
+ */
export interface KeyboardInfoCompilerOptions extends CompilerOptions {
+ /**
+ * Description of sources and metadata required to build a .keyboard_info file
+ */
sources: KeyboardInfoSources;
};
+/**
+ * @public
+ * Internal in-memory build artifacts from a successful compilation
+ */
export interface KeyboardInfoCompilerArtifacts extends KeymanCompilerArtifacts {
+ /**
+ * Binary keyboard info filedata and filename - used by keyman.com
+ */
keyboard_info: KeymanCompilerArtifact;
};
+/**
+ * @public
+ * Build artifacts from the .keyboard_info compiler
+ */
export interface KeyboardInfoCompilerResult extends KeymanCompilerResult {
+ /**
+ * Internal in-memory build artifacts from a successful compilation. Caller
+ * can write these to disk with {@link KeyboardInfoCompiler.write}
+ */
artifacts: KeyboardInfoCompilerArtifacts;
};
+/**
+ * @public
+ * Compiles source data from a keyboard project to a .keyboard_info. The
+ * compiler does not read or write from filesystem or network directly, but
+ * relies on callbacks for all external IO.
+ */
export class KeyboardInfoCompiler implements KeymanCompiler {
private callbacks: CompilerCallbacks;
private options: KeyboardInfoCompilerOptions;
@@ -82,6 +112,14 @@ export class KeyboardInfoCompiler implements KeymanCompiler {
preinit();
}
+ /**
+ * Initialize the compiler.
+ * Copies options.
+ * @param callbacks - Callbacks for external interfaces, including message
+ * reporting and file io
+ * @param options - Compiler options
+ * @returns false if initialization fails
+ */
public async init(callbacks: CompilerCallbacks, options: KeyboardInfoCompilerOptions): Promise {
this.callbacks = callbacks;
this.options = {...options};
@@ -89,14 +127,25 @@ export class KeyboardInfoCompiler implements KeymanCompiler {
}
/**
- * Builds a .keyboard_info file with metadata from the keyboard and package source file.
- * This function is intended for use within the keyboards repository. While many of the
- * parameters could be deduced from each other, they are specified here to reduce the
- * number of places the filenames are constructed.
- * For full documentation, see:
- * https://help.keyman.com/developer/cloud/keyboard_info/
+ * @public
+ * Builds a .keyboard_info file with metadata from the keyboard and package
+ * source file. Returns an object containing binary artifacts on success. The
+ * files are passed in by name, and the compiler will use callbacks as passed
+ * to the {@link KeyboardInfoCompiler.init} function to read any input files
+ * by disk.
+ *
+ * This function is intended for use within the keyboards repository. While
+ * many of the parameters could be deduced from each other, they are specified
+ * here to reduce the number of places the filenames are constructed. For full
+ * documentation, see: https://help.keyman.com/developer/cloud/keyboard_info/
*
- * @param sources Details on files from which to extract metadata
+ * @param infile - Path to source file. Path will be parsed to find relative
+ * references in the .kpj file, such as .model.ts or
+ * .model.kps file
+ * @param outfile - Path to output file. The file will not be written to, but
+ * will be included in the result for use by
+ * {@link KeyboardInfoCompiler.write}.
+ * @returns Binary artifacts on success, null on failure.
*/
public async run(inputFilename: string, outputFilename?: string): Promise {
const sources = this.options.sources;
@@ -213,15 +262,16 @@ export class KeyboardInfoCompiler implements KeymanCompiler {
keyboard_info.packageFilename = this.callbacks.path.basename(sources.kmpFilename);
// Always overwrite with actual file size
- keyboard_info.packageFileSize = this.callbacks.fileSize(sources.kmpFilename);
- if(keyboard_info.packageFileSize === undefined) {
+ if(!this.callbacks.fs.existsSync(sources.kmpFilename)) {
this.callbacks.reportMessage(KeyboardInfoCompilerMessages.Error_FileDoesNotExist({filename:sources.kmpFilename}));
return null;
}
+ keyboard_info.packageFileSize = this.callbacks.fileSize(sources.kmpFilename);
if(sources.jsFilename) {
keyboard_info.jsFilename = this.callbacks.path.basename(sources.jsFilename);
// Always overwrite with actual file size
+ /* c8 ignore next 5 */
keyboard_info.jsFileSize = this.callbacks.fileSize(sources.jsFilename);
if(keyboard_info.jsFileSize === undefined) {
this.callbacks.reportMessage(KeyboardInfoCompilerMessages.Error_FileDoesNotExist({filename:sources.jsFilename}));
@@ -308,7 +358,7 @@ export class KeyboardInfoCompiler implements KeymanCompiler {
keyboard_info.minKeymanVersion = minVersion;
keyboard_info.sourcePath = sources.sourcePath;
- keyboard_info.helpLink = HelpRoot + keyboard_info.id;
+ keyboard_info.helpLink = KeymanUrls.HELP_KEYBOARD(keyboard_info.id);
// Related packages
if(kmpJsonData.relatedPackages?.length) {
@@ -344,6 +394,15 @@ export class KeyboardInfoCompiler implements KeymanCompiler {
return result;
}
+ /**
+ * Write artifacts from a successful compile to disk, via callbacks methods.
+ * The artifacts written may include:
+ *
+ * - .keyboard_info file - metadata file used by keyman.com
+ *
+ * @param artifacts - object containing artifact binary data to write out
+ * @returns true on success
+ */
public async write(artifacts: KeyboardInfoCompilerArtifacts): Promise {
this.callbacks.fs.writeFileSync(artifacts.keyboard_info.filename, artifacts.keyboard_info.data);
return true;
@@ -508,6 +567,9 @@ export class KeyboardInfoCompiler implements KeymanCompiler {
return true;
}
+ /**
+ * @internal
+ */
async fontSourceToKeyboardInfoFont(kpsFilename: string, kmpJsonData: KmpJsonFile.KmpJsonFile, source: string[]): Promise {
// locate a .ttf, .otf, or .woff font file
const ttf = source.find(file => file.endsWith('.ttf') || file.endsWith('.otf') || file.endsWith('.woff'));
diff --git a/developer/src/kmc-keyboard-info/test/fixtures/font-file-cannot-be-read/shared/fonts/khmer/mondulkiri/font_file_cannot_be_read.ttf b/developer/src/kmc-keyboard-info/test/fixtures/font-file-cannot-be-read/shared/fonts/khmer/mondulkiri/font_file_cannot_be_read.ttf
new file mode 100644
index 00000000000..0f28bde9fb0
--- /dev/null
+++ b/developer/src/kmc-keyboard-info/test/fixtures/font-file-cannot-be-read/shared/fonts/khmer/mondulkiri/font_file_cannot_be_read.ttf
@@ -0,0 +1 @@
+This is a file used to test the font file cannot be read error (see keyboard-info-compiler-messages.ts)
\ No newline at end of file
diff --git a/developer/src/kmc-keyboard-info/test/fixtures/invalid-license/invalid_license.md b/developer/src/kmc-keyboard-info/test/fixtures/invalid-license/invalid_license.md
new file mode 100644
index 00000000000..7c7b3901d6c
--- /dev/null
+++ b/developer/src/kmc-keyboard-info/test/fixtures/invalid-license/invalid_license.md
@@ -0,0 +1 @@
+This is a file used to test the license is not valid error (see keyboard-info-compiler-messages.ts)
\ No newline at end of file
diff --git a/developer/src/kmc-keyboard-info/test/fixtures/no-kmp/LICENSE.md b/developer/src/kmc-keyboard-info/test/fixtures/no-kmp/LICENSE.md
new file mode 100644
index 00000000000..0a8c9054319
--- /dev/null
+++ b/developer/src/kmc-keyboard-info/test/fixtures/no-kmp/LICENSE.md
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2022 SIL International
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/developer/src/kmc-keyboard-info/test/fixtures/no-kmp/build/.gitattributes b/developer/src/kmc-keyboard-info/test/fixtures/no-kmp/build/.gitattributes
new file mode 100644
index 00000000000..7e3549570d7
--- /dev/null
+++ b/developer/src/kmc-keyboard-info/test/fixtures/no-kmp/build/.gitattributes
@@ -0,0 +1 @@
+khmer_angkor.js -text
\ No newline at end of file
diff --git a/developer/src/kmc-keyboard-info/test/fixtures/no-kmp/build/khmer_angkor.js b/developer/src/kmc-keyboard-info/test/fixtures/no-kmp/build/khmer_angkor.js
new file mode 100644
index 00000000000..f95f54848cf
--- /dev/null
+++ b/developer/src/kmc-keyboard-info/test/fixtures/no-kmp/build/khmer_angkor.js
@@ -0,0 +1,5462 @@
+if(typeof keyman === 'undefined') {
+ console.log('Keyboard requires KeymanWeb 10.0 or later');
+ if(typeof tavultesoft !== 'undefined') tavultesoft.keymanweb.util.alert("This keyboard requires KeymanWeb 10.0 or later");
+} else {
+KeymanWeb.KR(new Keyboard_khmer_angkor());
+}
+function Keyboard_khmer_angkor()
+{
+ var modCodes = keyman.osk.modifierCodes;
+ var keyCodes = keyman.osk.keyCodes;
+
+ this._v=(typeof keyman!="undefined"&&typeof keyman.version=="string")?parseInt(keyman.version,10):9;
+ this.KI="Keyboard_khmer_angkor";
+ this.KN="Khmer Angkor";
+ this.KMINVER="10.0";
+ this.KV={F:' 1em "Khmer Busra Kbd"',K102:0};
+ this.KV.KLS={
+ "rightalt": ["","","@","","$","€","៙","៚","*","{","}","≈","","","","","ៜ","","ឯ","ឫ","ឨ","[","]","ឦ","ឱ","ឰ","ឩ","ឳ","\\","","","","+","-","×","÷",":","‘","’","ឝ","៘","៖","ៈ","","","","","","","<",">","#","&","ឞ",";","",",",".","/","","","","",""," "],
+ "rightalt-shift": ["","៱","៲","៳","៴","៵","៶","៷","៸","៹","៰","","","","","","᧠","᧡","᧢","᧣","᧤","᧥","᧦","᧧","᧨","᧩","᧪","᧫","","","","","᧬","᧭","᧮","᧯","᧰","᧱","᧲","᧳","᧴","᧵","᧶","","","","","","","᧷","᧸","᧹","᧺","᧻","᧼","᧽","᧾","᧿","","","","","","",""],
+ "default": ["«","១","២","៣","៤","៥","៦","៧","៨","៩","០","ឥ","ឲ","","","","ឆ","","","រ","ត","យ","","","","ផ","","ឪ","ឮ","","","","","ស","ដ","ថ","ង","ហ","","ក","ល","","","","","","","","","ឋ","ខ","ច","វ","ប","ន","ម","","។","","","","","","",""],
+ "shift": ["»","!","ៗ","\"","៛","%","","","","(",")","","=","","","","ឈ","","","ឬ","ទ","","","","","ភ","","ឧ","ឭ","","","","","","ឌ","ធ","អ","ះ","ញ","គ","ឡ","","","","","","","","","ឍ","ឃ","ជ","","ព","ណ","","","៕","?","","","","","",""]
+ };
+ this.KV.BK=(function(x){
+ var
+ empty=Array.apply(null, Array(65)).map(String.prototype.valueOf,""),
+ result=[], v, i,
+ modifiers=['default','shift','ctrl','shift-ctrl','alt','shift-alt','ctrl-alt','shift-ctrl-alt'];
+ for(i=modifiers.length-1;i>=0;i--) {
+ v = x[modifiers[i]];
+ if(v || result.length > 0) {
+ result=(v ? v : empty).slice().concat(result);
+ }
+ }
+ return result;
+ })(this.KV.KLS);
+ this.KDU=0;
+ this.KH='';
+ this.KM=0;
+ this.KBVER="1.3";
+ this.KMBM=modCodes.RALT | modCodes.SHIFT /* 0x0018 */;
+ this.KVKD="T_17D2_1780 T_17D2_1781 T_17D2_1782 T_17D2_1783 T_17D2_1784 T_17D2_1785 T_17D2_1786 T_17D2_1787 T_17D2_1788 T_17D2_1789 T_17D2_178A T_17D2_178B T_17D2_178C T_17D2_178D T_17D2_178E T_17D2_178F T_17D2_1790 T_17D2_1791 T_17D2_1792 T_17D2_1793 T_17D2_1794 T_17D2_1795 T_17D2_1796 T_17D2_1797 T_17D2_1798 T_17D2_1799 T_17D2_179A T_17D2_179B T_17D2_179C T_17D2_179D T_17D2_179E T_17D2_179F T_17D2_17A0 T_17D2_17A1 T_17D2_17A2 U_0030 U_0031 U_0032 U_0033 U_0034 U_0035 U_0036 U_0037 U_0038 U_0039";
+ this.KVKL={
+ "tablet": {
+ "displayUnderlying": false,
+ "layer": [
+ {
+ "id": "default",
+ "row": [
+ {
+ "id": "1",
+ "key": [
+ {
+ "id": "K_1",
+ "text": "១"
+ },
+ {
+ "id": "K_2",
+ "text": "២"
+ },
+ {
+ "id": "K_3",
+ "text": "៣"
+ },
+ {
+ "id": "K_4",
+ "text": "៤"
+ },
+ {
+ "id": "K_5",
+ "text": "៥"
+ },
+ {
+ "id": "K_6",
+ "text": "៦"
+ },
+ {
+ "id": "K_7",
+ "text": "៧"
+ },
+ {
+ "id": "K_8",
+ "text": "៨"
+ },
+ {
+ "id": "K_9",
+ "text": "៩"
+ },
+ {
+ "id": "K_0",
+ "text": "០"
+ },
+ {
+ "id": "K_HYPHEN",
+ "text": "ឥ"
+ },
+ {
+ "id": "K_EQUAL",
+ "text": "ឲ"
+ },
+ {
+ "id": "K_BKSP",
+ "text": "*BkSp*",
+ "width": "100",
+ "sp": "1"
+ }
+ ]
+ },
+ {
+ "id": "2",
+ "key": [
+ {
+ "id": "K_Q",
+ "text": "ឆ",
+ "pad": "75"
+ },
+ {
+ "id": "K_W",
+ "text": ""
+ },
+ {
+ "id": "K_E",
+ "text": ""
+ },
+ {
+ "id": "K_R",
+ "text": "រ"
+ },
+ {
+ "id": "K_T",
+ "text": "ត"
+ },
+ {
+ "id": "K_Y",
+ "text": "យ"
+ },
+ {
+ "id": "K_U",
+ "text": ""
+ },
+ {
+ "id": "K_I",
+ "text": ""
+ },
+ {
+ "id": "K_O",
+ "text": ""
+ },
+ {
+ "id": "K_P",
+ "text": "ផ"
+ },
+ {
+ "id": "K_LBRKT",
+ "text": ""
+ },
+ {
+ "id": "K_RBRKT",
+ "text": "ឪ"
+ },
+ {
+ "id": "T_new_138",
+ "width": "10",
+ "sp": "10"
+ }
+ ]
+ },
+ {
+ "id": "3",
+ "key": [
+ {
+ "id": "K_BKQUOTE",
+ "text": "«"
+ },
+ {
+ "id": "K_A",
+ "text": ""
+ },
+ {
+ "id": "K_S",
+ "text": "ស"
+ },
+ {
+ "id": "K_D",
+ "text": "ដ"
+ },
+ {
+ "id": "K_F",
+ "text": "ថ"
+ },
+ {
+ "id": "K_G",
+ "text": "ង"
+ },
+ {
+ "id": "K_H",
+ "text": "ហ"
+ },
+ {
+ "id": "K_J",
+ "text": ""
+ },
+ {
+ "id": "K_K",
+ "text": "ក"
+ },
+ {
+ "id": "K_L",
+ "text": "ល"
+ },
+ {
+ "id": "K_COLON",
+ "text": ""
+ },
+ {
+ "id": "K_QUOTE",
+ "text": ""
+ },
+ {
+ "id": "K_BKSLASH",
+ "text": "ឮ"
+ }
+ ]
+ },
+ {
+ "id": "4",
+ "key": [
+ {
+ "id": "K_SHIFT",
+ "text": "*Shift*",
+ "width": "160",
+ "sp": "1",
+ "nextlayer": "shift"
+ },
+ {
+ "id": "K_oE2"
+ },
+ {
+ "id": "K_Z",
+ "text": "ឋ"
+ },
+ {
+ "id": "K_X",
+ "text": "ខ"
+ },
+ {
+ "id": "K_C",
+ "text": "ច"
+ },
+ {
+ "id": "K_V",
+ "text": "វ"
+ },
+ {
+ "id": "K_B",
+ "text": "ប"
+ },
+ {
+ "id": "K_N",
+ "text": "ន"
+ },
+ {
+ "id": "K_M",
+ "text": "ម"
+ },
+ {
+ "id": "K_COMMA",
+ "text": ""
+ },
+ {
+ "id": "K_PERIOD",
+ "text": "។"
+ },
+ {
+ "id": "K_SLASH",
+ "text": ""
+ },
+ {
+ "id": "T_new_164",
+ "width": "10",
+ "sp": "10"
+ }
+ ]
+ },
+ {
+ "id": "5",
+ "key": [
+ {
+ "id": "K_LCONTROL",
+ "text": "*AltGr*",
+ "width": "160",
+ "sp": "1",
+ "nextlayer": "rightalt"
+ },
+ {
+ "id": "K_LOPT",
+ "text": "*Menu*",
+ "width": "160",
+ "sp": "1"
+ },
+ {
+ "id": "K_SPACE",
+ "text": "",
+ "width": "930"
+ },
+ {
+ "id": "K_ENTER",
+ "text": "*Enter*",
+ "width": "160",
+ "sp": "1"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "rightalt",
+ "row": [
+ {
+ "id": "1",
+ "key": [
+ {
+ "id": "K_1",
+ "text": ""
+ },
+ {
+ "id": "K_2",
+ "text": "@"
+ },
+ {
+ "id": "K_3",
+ "text": ""
+ },
+ {
+ "id": "K_4",
+ "text": "$"
+ },
+ {
+ "id": "K_5",
+ "text": "€"
+ },
+ {
+ "id": "K_6",
+ "text": "៙"
+ },
+ {
+ "id": "K_7",
+ "text": "៚"
+ },
+ {
+ "id": "K_8",
+ "text": "*"
+ },
+ {
+ "id": "K_9",
+ "text": "{"
+ },
+ {
+ "id": "K_0",
+ "text": "}"
+ },
+ {
+ "id": "K_HYPHEN",
+ "text": "≈"
+ },
+ {
+ "id": "K_EQUAL",
+ "text": ""
+ },
+ {
+ "id": "K_BKSP",
+ "text": "*BkSp*",
+ "width": "100",
+ "sp": "1"
+ }
+ ]
+ },
+ {
+ "id": "2",
+ "key": [
+ {
+ "id": "K_Q",
+ "text": "ៜ",
+ "pad": "75"
+ },
+ {
+ "id": "K_W",
+ "text": ""
+ },
+ {
+ "id": "K_E",
+ "text": "ឯ"
+ },
+ {
+ "id": "K_R",
+ "text": "ឫ"
+ },
+ {
+ "id": "K_T",
+ "text": "ឨ"
+ },
+ {
+ "id": "K_Y",
+ "text": "["
+ },
+ {
+ "id": "K_U",
+ "text": "]"
+ },
+ {
+ "id": "K_I",
+ "text": "ឦ"
+ },
+ {
+ "id": "K_O",
+ "text": "ឱ"
+ },
+ {
+ "id": "K_P",
+ "text": "ឰ"
+ },
+ {
+ "id": "K_LBRKT",
+ "text": "ឩ"
+ },
+ {
+ "id": "K_RBRKT",
+ "text": "ឳ"
+ },
+ {
+ "id": "T_new_307",
+ "width": "10",
+ "sp": "10"
+ }
+ ]
+ },
+ {
+ "id": "3",
+ "key": [
+ {
+ "id": "K_BKQUOTE",
+ "text": ""
+ },
+ {
+ "id": "K_A",
+ "text": "+"
+ },
+ {
+ "id": "K_S",
+ "text": "-"
+ },
+ {
+ "id": "K_D",
+ "text": "×"
+ },
+ {
+ "id": "K_F",
+ "text": "÷"
+ },
+ {
+ "id": "K_G",
+ "text": ":"
+ },
+ {
+ "id": "K_H",
+ "text": "‘"
+ },
+ {
+ "id": "K_J",
+ "text": "’"
+ },
+ {
+ "id": "K_K",
+ "text": "ឝ"
+ },
+ {
+ "id": "K_L",
+ "text": "៘"
+ },
+ {
+ "id": "K_COLON",
+ "text": "៖"
+ },
+ {
+ "id": "K_QUOTE",
+ "text": "ៈ"
+ },
+ {
+ "id": "K_BKSLASH",
+ "text": "\\"
+ }
+ ]
+ },
+ {
+ "id": "4",
+ "key": [
+ {
+ "id": "K_SHIFT",
+ "text": "*Shift*",
+ "width": "160",
+ "sp": "1",
+ "nextlayer": "shift"
+ },
+ {
+ "id": "K_oE2"
+ },
+ {
+ "id": "K_Z",
+ "text": "<"
+ },
+ {
+ "id": "K_X",
+ "text": ">"
+ },
+ {
+ "id": "K_C",
+ "text": "#"
+ },
+ {
+ "id": "K_V",
+ "text": "&"
+ },
+ {
+ "id": "K_B",
+ "text": "ឞ"
+ },
+ {
+ "id": "K_N",
+ "text": ";"
+ },
+ {
+ "id": "K_M",
+ "text": ""
+ },
+ {
+ "id": "K_COMMA",
+ "text": ","
+ },
+ {
+ "id": "K_PERIOD",
+ "text": "."
+ },
+ {
+ "id": "K_SLASH",
+ "text": "/"
+ },
+ {
+ "id": "T_new_333",
+ "width": "10",
+ "sp": "10"
+ }
+ ]
+ },
+ {
+ "id": "5",
+ "key": [
+ {
+ "id": "K_LCONTROL",
+ "text": "*AltGr*",
+ "width": "160",
+ "sp": "2",
+ "nextlayer": "default"
+ },
+ {
+ "id": "K_LOPT",
+ "text": "*Menu*",
+ "width": "160",
+ "sp": "1"
+ },
+ {
+ "id": "K_SPACE",
+ "text": " ",
+ "width": "930"
+ },
+ {
+ "id": "K_ENTER",
+ "text": "*Enter*",
+ "width": "160",
+ "sp": "1"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "shift",
+ "row": [
+ {
+ "id": "1",
+ "key": [
+ {
+ "id": "K_1",
+ "text": "!"
+ },
+ {
+ "id": "K_2",
+ "text": "ៗ"
+ },
+ {
+ "id": "K_3",
+ "text": "\""
+ },
+ {
+ "id": "K_4",
+ "text": "៛"
+ },
+ {
+ "id": "K_5",
+ "text": "%"
+ },
+ {
+ "id": "K_6",
+ "text": ""
+ },
+ {
+ "id": "K_7",
+ "text": ""
+ },
+ {
+ "id": "K_8",
+ "text": ""
+ },
+ {
+ "id": "K_9",
+ "text": "("
+ },
+ {
+ "id": "K_0",
+ "text": ")"
+ },
+ {
+ "id": "K_HYPHEN",
+ "text": ""
+ },
+ {
+ "id": "K_EQUAL",
+ "text": "="
+ },
+ {
+ "id": "K_BKSP",
+ "text": "*BkSp*",
+ "width": "100",
+ "sp": "1"
+ }
+ ]
+ },
+ {
+ "id": "2",
+ "key": [
+ {
+ "id": "K_Q",
+ "text": "ឈ",
+ "pad": "75"
+ },
+ {
+ "id": "K_W",
+ "text": ""
+ },
+ {
+ "id": "K_E",
+ "text": ""
+ },
+ {
+ "id": "K_R",
+ "text": "ឬ"
+ },
+ {
+ "id": "K_T",
+ "text": "ទ"
+ },
+ {
+ "id": "K_Y",
+ "text": ""
+ },
+ {
+ "id": "K_U",
+ "text": ""
+ },
+ {
+ "id": "K_I",
+ "text": ""
+ },
+ {
+ "id": "K_O",
+ "text": ""
+ },
+ {
+ "id": "K_P",
+ "text": "ភ"
+ },
+ {
+ "id": "K_LBRKT",
+ "text": ""
+ },
+ {
+ "id": "K_RBRKT",
+ "text": "ឧ"
+ },
+ {
+ "id": "T_new_364",
+ "width": "10",
+ "sp": "10"
+ }
+ ]
+ },
+ {
+ "id": "3",
+ "key": [
+ {
+ "id": "K_BKQUOTE",
+ "text": "»"
+ },
+ {
+ "id": "K_A",
+ "text": ""
+ },
+ {
+ "id": "K_S",
+ "text": ""
+ },
+ {
+ "id": "K_D",
+ "text": "ឌ"
+ },
+ {
+ "id": "K_F",
+ "text": "ធ"
+ },
+ {
+ "id": "K_G",
+ "text": "អ"
+ },
+ {
+ "id": "K_H",
+ "text": "ះ"
+ },
+ {
+ "id": "K_J",
+ "text": "ញ"
+ },
+ {
+ "id": "K_K",
+ "text": "គ"
+ },
+ {
+ "id": "K_L",
+ "text": "ឡ"
+ },
+ {
+ "id": "K_COLON",
+ "text": ""
+ },
+ {
+ "id": "K_QUOTE",
+ "text": ""
+ },
+ {
+ "id": "K_BKSLASH",
+ "text": "ឭ"
+ }
+ ]
+ },
+ {
+ "id": "4",
+ "key": [
+ {
+ "id": "K_SHIFT",
+ "text": "*Shift*",
+ "width": "160",
+ "sp": "2",
+ "nextlayer": "default"
+ },
+ {
+ "id": "K_oE2"
+ },
+ {
+ "id": "K_Z",
+ "text": "ឍ"
+ },
+ {
+ "id": "K_X",
+ "text": "ឃ"
+ },
+ {
+ "id": "K_C",
+ "text": "ជ"
+ },
+ {
+ "id": "K_V",
+ "text": ""
+ },
+ {
+ "id": "K_B",
+ "text": "ព"
+ },
+ {
+ "id": "K_N",
+ "text": "ណ"
+ },
+ {
+ "id": "K_M",
+ "text": ""
+ },
+ {
+ "id": "K_COMMA",
+ "text": ""
+ },
+ {
+ "id": "K_PERIOD",
+ "text": "៕"
+ },
+ {
+ "id": "K_SLASH",
+ "text": "?"
+ },
+ {
+ "id": "T_new_390",
+ "width": "10",
+ "sp": "10"
+ }
+ ]
+ },
+ {
+ "id": "5",
+ "key": [
+ {
+ "id": "K_LCONTROL",
+ "text": "*AltGr*",
+ "width": "160",
+ "sp": "1",
+ "nextlayer": "rightalt"
+ },
+ {
+ "id": "K_LOPT",
+ "text": "*Menu*",
+ "width": "160",
+ "sp": "1"
+ },
+ {
+ "id": "K_SPACE",
+ "width": "930"
+ },
+ {
+ "id": "K_ENTER",
+ "text": "*Enter*",
+ "width": "160",
+ "sp": "1"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "font": "Khmer Busra Kbd",
+ "fontsize": "0.8em"
+ },
+ "phone": {
+ "layer": [
+ {
+ "id": "default",
+ "row": [
+ {
+ "id": "1",
+ "key": [
+ {
+ "id": "K_Q",
+ "text": "ឆ",
+ "sk": [
+ {
+ "text": "ឈ",
+ "id": "K_Q",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1786"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1788"
+ }
+ ]
+ },
+ {
+ "id": "K_W",
+ "text": "",
+ "sk": [
+ {
+ "text": "",
+ "id": "K_W",
+ "layer": "shift"
+ }
+ ]
+ },
+ {
+ "id": "K_E",
+ "text": "",
+ "sk": [
+ {
+ "text": "",
+ "id": "K_E",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "K_S",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "K_V",
+ "layer": "shift"
+ },
+ {
+ "text": "ឯ",
+ "id": "U_17AF"
+ },
+ {
+ "text": "ឰ",
+ "id": "U_17B0"
+ }
+ ]
+ },
+ {
+ "id": "K_R",
+ "text": "រ",
+ "sk": [
+ {
+ "text": "",
+ "id": "T_17D2_179A"
+ },
+ {
+ "text": "ឫ",
+ "id": "U_17AB"
+ },
+ {
+ "text": "ឬ",
+ "id": "U_17AC"
+ }
+ ]
+ },
+ {
+ "id": "K_T",
+ "text": "ត",
+ "sk": [
+ {
+ "text": "ទ",
+ "id": "K_T",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_178F"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1791",
+ "layer": "default"
+ }
+ ]
+ },
+ {
+ "id": "K_Y",
+ "text": "យ",
+ "sk": [
+ {
+ "text": "",
+ "id": "T_17D2_1799"
+ }
+ ]
+ },
+ {
+ "id": "K_U",
+ "text": "",
+ "sk": [
+ {
+ "text": "",
+ "id": "K_U",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "K_Y",
+ "layer": "shift"
+ },
+ {
+ "text": "ឧ",
+ "id": "U_17A7"
+ },
+ {
+ "text": "ឪ",
+ "id": "U_17AA",
+ "layer": "shift"
+ },
+ {
+ "text": "ឩ",
+ "id": "U_17A9",
+ "layer": "shift"
+ },
+ {
+ "text": "ឨ",
+ "id": "U_17A8"
+ }
+ ]
+ },
+ {
+ "id": "K_I",
+ "text": "",
+ "sk": [
+ {
+ "text": "",
+ "id": "K_I",
+ "layer": "shift"
+ },
+ {
+ "text": "ឥ",
+ "id": "U_17A5"
+ },
+ {
+ "text": "ឦ",
+ "id": "U_17A6",
+ "layer": "shift"
+ }
+ ]
+ },
+ {
+ "id": "K_O",
+ "text": "",
+ "sk": [
+ {
+ "text": "",
+ "id": "K_O",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "K_LBRKT"
+ },
+ {
+ "text": "",
+ "id": "K_LBRKT",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "K_COLON",
+ "layer": "shift"
+ },
+ {
+ "text": "ឱ",
+ "id": "U_17B1"
+ },
+ {
+ "text": "ឲ",
+ "id": "U_17B2"
+ },
+ {
+ "text": "ឳ",
+ "id": "U_17B3",
+ "layer": "shift"
+ }
+ ]
+ },
+ {
+ "id": "K_P",
+ "text": "ផ",
+ "sk": [
+ {
+ "text": "ភ",
+ "id": "K_P",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1795"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1797",
+ "layer": "default"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "2",
+ "key": [
+ {
+ "id": "K_A",
+ "text": "",
+ "width": "100",
+ "sk": [
+ {
+ "text": "",
+ "id": "K_A",
+ "layer": "shift"
+ }
+ ]
+ },
+ {
+ "id": "K_S",
+ "text": "ស",
+ "sk": [
+ {
+ "text": "",
+ "id": "T_17D2_179F"
+ },
+ {
+ "text": "ឝ",
+ "id": "U_179D"
+ },
+ {
+ "text": "ឞ",
+ "id": "U_179E"
+ }
+ ]
+ },
+ {
+ "id": "K_D",
+ "text": "ដ",
+ "sk": [
+ {
+ "text": "ឌ",
+ "id": "K_D",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_178A"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_178C",
+ "layer": "default"
+ }
+ ]
+ },
+ {
+ "id": "K_F",
+ "text": "ថ",
+ "sk": [
+ {
+ "text": "ធ",
+ "id": "K_F",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1790"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1792",
+ "layer": "default"
+ }
+ ]
+ },
+ {
+ "id": "K_G",
+ "text": "ង",
+ "sk": [
+ {
+ "text": "អ",
+ "id": "K_G",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1784"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_17A2",
+ "layer": "default"
+ }
+ ]
+ },
+ {
+ "id": "K_H",
+ "text": "ហ",
+ "sk": [
+ {
+ "text": "",
+ "id": "T_17D2_17A0"
+ },
+ {
+ "text": "ះ",
+ "id": "K_H",
+ "layer": "shift"
+ },
+ {
+ "text": "ៈ",
+ "id": "U_17C8"
+ }
+ ]
+ },
+ {
+ "id": "K_J",
+ "text": "ញ",
+ "layer": "shift",
+ "sk": [
+ {
+ "text": "",
+ "id": "T_17D2_1789"
+ }
+ ]
+ },
+ {
+ "id": "K_K",
+ "text": "ក",
+ "sk": [
+ {
+ "text": "គ",
+ "id": "K_K",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1780"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1782"
+ }
+ ]
+ },
+ {
+ "id": "K_L",
+ "text": "ល",
+ "sk": [
+ {
+ "text": "ឡ",
+ "id": "K_L",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_179B"
+ },
+ {
+ "text": "ឭ",
+ "id": "U_17AD"
+ },
+ {
+ "text": "ឮ",
+ "id": "U_17AE"
+ }
+ ]
+ },
+ {
+ "id": "K_COLON",
+ "text": ""
+ }
+ ]
+ },
+ {
+ "id": "3",
+ "key": [
+ {
+ "id": "K_Z",
+ "text": "ឋ",
+ "sk": [
+ {
+ "text": "ឍ",
+ "id": "K_Z",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_178B"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_178D",
+ "layer": "default"
+ }
+ ]
+ },
+ {
+ "id": "K_X",
+ "text": "ខ",
+ "sk": [
+ {
+ "text": "ឃ",
+ "id": "K_X",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1781"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1783",
+ "layer": "default"
+ }
+ ]
+ },
+ {
+ "id": "K_C",
+ "text": "ច",
+ "sk": [
+ {
+ "text": "ជ",
+ "id": "K_C",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1785"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1787",
+ "layer": "default"
+ }
+ ]
+ },
+ {
+ "id": "K_V",
+ "text": "វ",
+ "sk": [
+ {
+ "text": "",
+ "id": "T_17D2_179C"
+ }
+ ]
+ },
+ {
+ "id": "K_B",
+ "text": "ប",
+ "sk": [
+ {
+ "text": "ព",
+ "id": "K_B",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1794"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1796",
+ "layer": "default"
+ }
+ ]
+ },
+ {
+ "id": "K_N",
+ "text": "ន",
+ "sk": [
+ {
+ "text": "ណ",
+ "id": "K_N",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1793"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_178E",
+ "layer": "default"
+ }
+ ]
+ },
+ {
+ "id": "K_M",
+ "text": "ម",
+ "sk": [
+ {
+ "text": "",
+ "id": "T_17D2_1798"
+ },
+ {
+ "text": "",
+ "id": "K_M",
+ "layer": "shift"
+ }
+ ]
+ },
+ {
+ "id": "K_COMMA",
+ "text": "",
+ "sk": [
+ {
+ "text": "",
+ "id": "K_COMMA",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "K_6",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "K_7",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "K_8",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "K_HYPHEN",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "U_17D1",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "U_17DD",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "U_17CE",
+ "layer": "shift"
+ }
+ ]
+ },
+ {
+ "id": "K_QUOTE",
+ "text": "",
+ "width": "100",
+ "sk": [
+ {
+ "text": "",
+ "id": "K_QUOTE",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "K_SLASH"
+ }
+ ]
+ },
+ {
+ "id": "K_BKSP",
+ "text": "*BkSp*",
+ "width": "100",
+ "sp": "1"
+ }
+ ]
+ },
+ {
+ "id": "4",
+ "key": [
+ {
+ "id": "K_NUMLOCK",
+ "text": "១២៣",
+ "width": "140",
+ "sp": "1",
+ "nextlayer": "numeric"
+ },
+ {
+ "id": "K_LOPT",
+ "text": "*Menu*",
+ "width": "120",
+ "sp": "1"
+ },
+ {
+ "id": "K_SPACE",
+ "text": "",
+ "width": "555",
+ "sk": [
+ {
+ "text": " ",
+ "id": "U_0020",
+ "layer": "default"
+ }
+ ]
+ },
+ {
+ "id": "K_PERIOD",
+ "text": "។",
+ "width": "120",
+ "sk": [
+ {
+ "text": "៕",
+ "id": "K_PERIOD",
+ "layer": "shift"
+ },
+ {
+ "text": "!",
+ "id": "U_0021"
+ },
+ {
+ "text": "?",
+ "id": "U_003F"
+ }
+ ]
+ },
+ {
+ "id": "K_ENTER",
+ "text": "*Enter*",
+ "width": "140",
+ "sp": "1"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "numeric",
+ "row": [
+ {
+ "id": "1",
+ "key": [
+ {
+ "id": "K_1",
+ "text": "១",
+ "sk": [
+ {
+ "text": "1",
+ "id": "U_0031"
+ }
+ ]
+ },
+ {
+ "id": "K_2",
+ "text": "២",
+ "sk": [
+ {
+ "text": "2",
+ "id": "U_0032"
+ }
+ ]
+ },
+ {
+ "id": "K_3",
+ "text": "៣",
+ "sk": [
+ {
+ "text": "3",
+ "id": "U_0033"
+ }
+ ]
+ },
+ {
+ "id": "K_4",
+ "text": "៤",
+ "sk": [
+ {
+ "text": "4",
+ "id": "U_0034"
+ }
+ ]
+ },
+ {
+ "id": "K_5",
+ "text": "៥",
+ "sk": [
+ {
+ "text": "5",
+ "id": "U_0035"
+ }
+ ]
+ },
+ {
+ "id": "K_6",
+ "text": "៦",
+ "sk": [
+ {
+ "text": "6",
+ "id": "U_0036"
+ }
+ ]
+ },
+ {
+ "id": "K_7",
+ "text": "៧",
+ "sk": [
+ {
+ "text": "7",
+ "id": "U_0037"
+ }
+ ]
+ },
+ {
+ "id": "K_8",
+ "text": "៨",
+ "sk": [
+ {
+ "text": "8",
+ "id": "U_0038"
+ }
+ ]
+ },
+ {
+ "id": "K_9",
+ "text": "៩",
+ "sk": [
+ {
+ "text": "9",
+ "id": "U_0039"
+ }
+ ]
+ },
+ {
+ "id": "K_0",
+ "text": "០",
+ "sk": [
+ {
+ "text": "0",
+ "id": "U_0030"
+ },
+ {
+ "text": "",
+ "id": "U_17D3"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "2",
+ "key": [
+ {
+ "id": "U_0040",
+ "text": "@",
+ "sk": [
+ {
+ "text": "©",
+ "id": "U_00A9"
+ },
+ {
+ "text": "®",
+ "id": "U_00AE"
+ }
+ ]
+ },
+ {
+ "id": "U_0023",
+ "text": "#",
+ "sk": [
+ {
+ "text": "№",
+ "id": "U_2116"
+ },
+ {
+ "text": "~",
+ "id": "U_007E"
+ }
+ ]
+ },
+ {
+ "id": "U_17DB",
+ "text": "៛",
+ "sk": [
+ {
+ "text": "$",
+ "id": "U_0024"
+ },
+ {
+ "text": "฿",
+ "id": "U_0E3F"
+ },
+ {
+ "text": "¢",
+ "id": "U_00A2"
+ },
+ {
+ "text": "£",
+ "id": "U_00A3"
+ },
+ {
+ "text": "¥",
+ "id": "U_00A5"
+ }
+ ]
+ },
+ {
+ "id": "U_0026",
+ "text": "&"
+ },
+ {
+ "id": "U_0025",
+ "text": "%",
+ "sk": [
+ {
+ "text": "‰",
+ "id": "U_2030"
+ },
+ {
+ "text": "‱",
+ "id": "U_2031"
+ }
+ ]
+ },
+ {
+ "id": "U_002B",
+ "text": "+",
+ "sk": [
+ {
+ "text": "-",
+ "id": "U_002D"
+ },
+ {
+ "text": "×",
+ "id": "U_00D7"
+ },
+ {
+ "text": "÷",
+ "id": "U_00F7"
+ },
+ {
+ "text": "±",
+ "id": "U_00B1"
+ }
+ ]
+ },
+ {
+ "id": "U_003D",
+ "text": "=",
+ "sk": [
+ {
+ "text": "_",
+ "id": "U_005F"
+ },
+ {
+ "text": "≠",
+ "id": "U_2260"
+ }
+ ]
+ },
+ {
+ "id": "U_002A",
+ "text": "*",
+ "sk": [
+ {
+ "text": "^",
+ "id": "U_005E"
+ }
+ ]
+ },
+ {
+ "id": "U_003F",
+ "text": "?",
+ "sk": [
+ {
+ "text": "¿",
+ "id": "U_00BF"
+ }
+ ]
+ },
+ {
+ "id": "U_0021",
+ "text": "!",
+ "sk": [
+ {
+ "text": "¡",
+ "id": "U_00A1"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "3",
+ "key": [
+ {
+ "id": "U_2018",
+ "text": "‘",
+ "sk": [
+ {
+ "text": "’",
+ "id": "U_2019"
+ }
+ ]
+ },
+ {
+ "id": "U_201C",
+ "text": "“",
+ "sk": [
+ {
+ "text": "”",
+ "id": "U_201D"
+ }
+ ]
+ },
+ {
+ "id": "U_00AB",
+ "text": "«",
+ "sk": [
+ {
+ "text": "»",
+ "id": "U_00BB"
+ }
+ ]
+ },
+ {
+ "id": "U_002F",
+ "text": "/",
+ "sk": [
+ {
+ "text": "\\",
+ "id": "U_005C"
+ },
+ {
+ "text": "|",
+ "id": "U_007C"
+ },
+ {
+ "text": "¦",
+ "id": "U_00A6"
+ }
+ ]
+ },
+ {
+ "id": "U_0028",
+ "text": "(",
+ "sk": [
+ {
+ "text": ")",
+ "id": "U_0029"
+ },
+ {
+ "text": "[",
+ "id": "U_005B"
+ },
+ {
+ "text": "]",
+ "id": "U_005D"
+ },
+ {
+ "text": "{",
+ "id": "U_007B"
+ },
+ {
+ "text": "}",
+ "id": "U_007D"
+ }
+ ]
+ },
+ {
+ "id": "U_17D9",
+ "text": "៙",
+ "sk": [
+ {
+ "text": "៚",
+ "id": "U_17DA"
+ },
+ {
+ "text": "ៜ",
+ "id": "U_17DC"
+ },
+ {
+ "text": "§",
+ "id": "U_00A7"
+ },
+ {
+ "text": "Ø",
+ "id": "U_00D8"
+ }
+ ]
+ },
+ {
+ "id": "U_17D7",
+ "text": "ៗ"
+ },
+ {
+ "id": "U_003C",
+ "text": "<",
+ "sk": [
+ {
+ "text": "≤",
+ "id": "U_2264"
+ },
+ {
+ "text": ">",
+ "id": "U_003E"
+ },
+ {
+ "text": "≥",
+ "id": "U_2265"
+ }
+ ]
+ },
+ {
+ "id": "U_17D6",
+ "text": "៖",
+ "sk": [
+ {
+ "text": ":",
+ "id": "U_003A"
+ },
+ {
+ "text": ";",
+ "id": "U_003B"
+ },
+ {
+ "text": "…",
+ "id": "U_2026"
+ }
+ ]
+ },
+ {
+ "id": "K_BKSP",
+ "text": "*BkSp*",
+ "sp": "1"
+ }
+ ]
+ },
+ {
+ "id": "4",
+ "key": [
+ {
+ "id": "K_LCONTROL",
+ "text": "១២៣",
+ "width": "140",
+ "sp": "2",
+ "nextlayer": "default"
+ },
+ {
+ "id": "K_LOPT",
+ "text": "*Menu*",
+ "width": "120",
+ "sp": "1"
+ },
+ {
+ "id": "K_SPACE",
+ "text": "",
+ "width": "555",
+ "layer": "shift"
+ },
+ {
+ "id": "K_PERIOD",
+ "text": "។",
+ "width": "120",
+ "sk": [
+ {
+ "text": "៕",
+ "id": "K_PERIOD",
+ "layer": "shift"
+ },
+ {
+ "text": "!",
+ "id": "U_0021"
+ },
+ {
+ "text": "?",
+ "id": "U_003F"
+ }
+ ]
+ },
+ {
+ "id": "K_ENTER",
+ "text": "*Enter*",
+ "width": "140",
+ "sp": "1"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "displayUnderlying": false,
+ "font": "Khmer Busra Kbd",
+ "fontsize": "0.8em"
+ }
+};
+ this.s_c_key_11=['','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',''];
+ this.s_c_out_12="កខគឃងចឆជឈញដឋឌឍណតថទធនបផពភមយរលវសហឡអឝឞ";
+ this.s_v_gen_key_13=['','','','','','','','','','','','','','','',''];
+ this.s_v_gen_14="ាិីឹឺុូួើឿៀេែៃោៅ";
+ this.s_v_pseudo_key_15=['','',''];
+ this.s_v_pseudo_16="ំះៈ";
+ this.s_v_key_17=['','','','','','','','','','','','','','','','','','',''];
+ this.s_v_out_18="ាិីឹឺុូួើឿៀេែៃោៅំះៈ";
+ this.s_v_any_19="ាិីឹឺុូួើឿៀេែៃោៅំះៈ";
+ this.s_v_combo_R_20="េោុិីឹែ";
+ this.s_v_combo_N_21="ាុ";
+ this.s_v_combo_22="េោុិីឹែាុ";
+ this.s_ind_v_key_23=['','','','','','','','','','','','','','',''];
+ this.s_ind_v_out_24="ឥឦឧឨឩឪឫឬឭឮឯឰឱឲឳ";
+ this.s_diacritic_key_25=['','','','','','','','','','',''];
+ this.s_diacritic_out_26="់័៌៏៍ៈ៎៑៝ៜ្";
+ this.s_c_shifter_key_27=['',''];
+ this.s_c_shifter_28="៉៊";
+ this.s_punct_key_29=['','','','','','','',''];
+ this.s_punct_out_30="។៕៖ៗ៘៙៚៓";
+ this.s_latin_punct_key_31=['','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',''];
+ this.s_latin_punct_out_32="«»()!\"%=?{}\\@*,×./[]+-÷:≈‘’;<>#&";
+ this.s_spaces_key_33=['','',''];
+ this.s_spaces_out_34=" ";
+ this.s_currency_key_35=['','',''];
+ this.s_currency_out_36="៛$€";
+ this.s_digit_key_37=['','','','','','','','','',''];
+ this.s_digit_out_38="០១២៣៤៥៦៧៨៩";
+ this.s_lek_attak_key_39=['','','','','','','','','',''];
+ this.s_lek_attak_out_40="៰៱៲៳៴៵៶៷៸៹";
+ this.s_lunar_date_key_41=['','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',''];
+ this.s_lunar_date_out_42="᧬᧻᧹᧮᧢᧯᧰᧱᧧᧲᧳᧴᧽᧼᧨᧩᧠᧣᧭᧤᧦᧺᧡᧸᧥᧷᧵᧾᧿᧪᧫᧶";
+ this.s_input_subcons_43=['','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',''];
+ this.s_subcons_44="កខគឃងចឆជឈញដឋឌឍណតថទធនបផពភមយរលវឝឞសហឡអ";
+ this.s_arabic_digit_key_45=['','','','','','','','','',''];
+ this.s_arabic_digit_out_46="0123456789";
+ this.s_v_above_47="ិីឹឺើ័";
+ this.s_shiftable_c_1st_48="សហអ";
+ this.s_shiftable_BA_49="ប";
+ this.s_shiftable_c_2nd_50="ងញមយរវនល";
+ this.s_shiftable_c_2nd_with_BA_51="ងញមយរវនលប";
+ this.s_c_2nd_combo_LO_52="យមងបវ";
+ this.s_c_2nd_combo_MO_53="យលងរ";
+ this.s_c_1st_combo_LO_54="បហអ";
+ this.s_c_1st_combo_MO_55="ហសអ";
+ this.s_c_combo_SA_56="បយលមនញងរវអ";
+ this.s_c_combo_QA_57="ឆឈបផតទ";
+ this.s_c_combo_HA_58="វឣ";
+ this.s62="touch";
+ this.KVS=[];
+ this.gs=function(t,e) {
+ return this.g_main_0(t,e);
+ };
+ this.gs=function(t,e) {
+ return this.g_main_0(t,e);
+ };
+ this.g_main_0=function(t,e) {
+ var k=KeymanWeb,r=0,m=0;
+ if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_BKSP /* 0x08 */)) {
+ if(k.KFCM(2,t,['្',{t:'a',a:this.s_c_out_12}])&&k.KIFS(31,this.s62,t)){
+ r=m=1; // Line 266
+ k.KDC(2,t);
+ }
+ else if(k.KFCM(2,t,[{t:'a',a:this.s_v_combo_N_21},'ំ'])){
+ r=m=1; // Line 229
+ k.KDC(2,t);
+ }
+ else if(k.KFCM(2,t,[{t:'a',a:this.s_v_combo_R_20},'ះ'])){
+ r=m=1; // Line 230
+ k.KDC(2,t);
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_B /* 0x42 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ឞ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_K /* 0x4B */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ឝ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_QUOTE /* 0xDE */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ៈ");
+ }
+ else if(1){
+ r=m=1; // Line 191
+ k.KDC(0,t);
+ k.KO(-1,t,"ៈ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_E /* 0x45 */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឯ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_I /* 0x49 */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឦ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_O /* 0x4F */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឱ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_P /* 0x50 */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឰ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_R /* 0x52 */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឫ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_T /* 0x54 */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឨ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_LBRKT /* 0xDB */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឩ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_RBRKT /* 0xDD */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឳ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_3 /* 0x33 */)) {
+ if(1){
+ r=m=1; // Line 191
+ k.KDC(0,t);
+ k.KO(-1,t,"៑");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_Q /* 0x51 */)) {
+ if(1){
+ r=m=1; // Line 191
+ k.KDC(0,t);
+ k.KO(-1,t,"ៜ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_W /* 0x57 */)) {
+ if(1){
+ r=m=1; // Line 191
+ k.KDC(0,t);
+ k.KO(-1,t,"៝");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_EQUAL /* 0xBB */)) {
+ if(1){
+ r=m=1; // Line 191
+ k.KDC(0,t);
+ k.KO(-1,t,"៎");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_6 /* 0x36 */)) {
+ if(1){
+ r=m=1; // Line 193
+ k.KDC(0,t);
+ k.KO(-1,t,"៙");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_7 /* 0x37 */)) {
+ if(1){
+ r=m=1; // Line 193
+ k.KDC(0,t);
+ k.KO(-1,t,"៚");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_L /* 0x4C */)) {
+ if(1){
+ r=m=1; // Line 193
+ k.KDC(0,t);
+ k.KO(-1,t,"៘");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_M /* 0x4D */)) {
+ if(1){
+ r=m=1; // Line 193
+ k.KDC(0,t);
+ k.KO(-1,t,"៓");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_COLON /* 0xBA */)) {
+ if(1){
+ r=m=1; // Line 193
+ k.KDC(0,t);
+ k.KO(-1,t,"៖");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_0 /* 0x30 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"}");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_1 /* 0x31 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_2 /* 0x32 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"@");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_8 /* 0x38 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"*");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_9 /* 0x39 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"{");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_A /* 0x41 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"+");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_C /* 0x43 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"#");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_D /* 0x44 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"×");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_F /* 0x46 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"÷");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_G /* 0x47 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,":");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_H /* 0x48 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"‘");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_J /* 0x4A */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"’");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_N /* 0x4E */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,";");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_S /* 0x53 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"-");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_U /* 0x55 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"]");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_V /* 0x56 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"&");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_X /* 0x58 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,">");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_Y /* 0x59 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"[");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_Z /* 0x5A */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"<");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_COMMA /* 0xBC */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,",");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_HYPHEN /* 0xBD */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"≈");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_PERIOD /* 0xBE */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,".");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_SLASH /* 0xBF */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"/");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_BKQUOTE /* 0xC0 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_BKSLASH /* 0xDC */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"\\");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_4 /* 0x34 */)) {
+ if(1){
+ r=m=1; // Line 195
+ k.KDC(0,t);
+ k.KO(-1,t,"$");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_5 /* 0x35 */)) {
+ if(1){
+ r=m=1; // Line 195
+ k.KDC(0,t);
+ k.KO(-1,t,"€");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_0 /* 0x30 */)) {
+ if(1){
+ r=m=1; // Line 197
+ k.KDC(0,t);
+ k.KO(-1,t,"៰");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_1 /* 0x31 */)) {
+ if(1){
+ r=m=1; // Line 197
+ k.KDC(0,t);
+ k.KO(-1,t,"៱");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_2 /* 0x32 */)) {
+ if(1){
+ r=m=1; // Line 197
+ k.KDC(0,t);
+ k.KO(-1,t,"៲");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_3 /* 0x33 */)) {
+ if(1){
+ r=m=1; // Line 197
+ k.KDC(0,t);
+ k.KO(-1,t,"៳");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_4 /* 0x34 */)) {
+ if(1){
+ r=m=1; // Line 197
+ k.KDC(0,t);
+ k.KO(-1,t,"៴");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_5 /* 0x35 */)) {
+ if(1){
+ r=m=1; // Line 197
+ k.KDC(0,t);
+ k.KO(-1,t,"៵");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_6 /* 0x36 */)) {
+ if(1){
+ r=m=1; // Line 197
+ k.KDC(0,t);
+ k.KO(-1,t,"៶");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_7 /* 0x37 */)) {
+ if(1){
+ r=m=1; // Line 197
+ k.KDC(0,t);
+ k.KO(-1,t,"៷");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_8 /* 0x38 */)) {
+ if(1){
+ r=m=1; // Line 197
+ k.KDC(0,t);
+ k.KO(-1,t,"៸");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_9 /* 0x39 */)) {
+ if(1){
+ r=m=1; // Line 197
+ k.KDC(0,t);
+ k.KO(-1,t,"៹");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_A /* 0x41 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧬");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_B /* 0x42 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧻");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_C /* 0x43 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧹");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_D /* 0x44 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧮");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_E /* 0x45 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧢");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_F /* 0x46 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧯");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_G /* 0x47 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧰");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_H /* 0x48 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧱");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_I /* 0x49 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧧");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_J /* 0x4A */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧲");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_K /* 0x4B */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧳");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_L /* 0x4C */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧴");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_M /* 0x4D */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧽");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_N /* 0x4E */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧼");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_O /* 0x4F */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧨");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_P /* 0x50 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧩");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_Q /* 0x51 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧠");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_R /* 0x52 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧣");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_S /* 0x53 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧭");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_T /* 0x54 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧤");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_U /* 0x55 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧦");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_V /* 0x56 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧺");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_W /* 0x57 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧡");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_X /* 0x58 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧸");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_Y /* 0x59 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧥");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_Z /* 0x5A */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧷");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_COLON /* 0xBA */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧵");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_COMMA /* 0xBC */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧾");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_PERIOD /* 0xBE */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧿");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_LBRKT /* 0xDB */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧪");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_RBRKT /* 0xDD */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧫");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_QUOTE /* 0xDE */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧶");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_SPACE /* 0x20 */)) {
+ if(1){
+ r=m=1; // Line 199
+ k.KDC(0,t);
+ k.KO(-1,t," ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x100)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ក");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x101)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ខ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x102)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្គ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x103)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ឃ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x104)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ង");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x105)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ច");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x106)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ឆ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x107)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ជ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x108)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ឈ");
+ }
+ }
+ if(m) {}
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x109)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ញ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x10A)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ដ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x10B)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ឋ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x10C)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ឌ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x10D)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ឍ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x10E)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ណ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x10F)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ត");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x110)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ថ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x111)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ទ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x112)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ធ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x113)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ន");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x114)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ប");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x115)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ផ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x116)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ព");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x117)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ភ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x118)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ម");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x119)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្យ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x11A)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្រ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x11B)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ល");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x11C)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្វ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x11D)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ឝ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x11E)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ឞ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x11F)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ស");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x120)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ហ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x121)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ឡ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x122)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្អ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_NPSTAR /* 0x6A */)) {
+ if(1){
+ r=m=1; // Line 268
+ k.KDC(0,t);
+ k.KO(-1,t,"*");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_NPSTAR /* 0x6A */)) {
+ if(1){
+ r=m=1; // Line 269
+ k.KDC(0,t);
+ k.KO(-1,t,"*");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_NPPLUS /* 0x6B */)) {
+ if(1){
+ r=m=1; // Line 270
+ k.KDC(0,t);
+ k.KO(-1,t,"+");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_NPPLUS /* 0x6B */)) {
+ if(1){
+ r=m=1; // Line 271
+ k.KDC(0,t);
+ k.KO(-1,t,"+");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_NPMINUS /* 0x6D */)) {
+ if(1){
+ r=m=1; // Line 272
+ k.KDC(0,t);
+ k.KO(-1,t,"-");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_NPMINUS /* 0x6D */)) {
+ if(1){
+ r=m=1; // Line 273
+ k.KDC(0,t);
+ k.KO(-1,t,"-");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_NPDOT /* 0x6E */)) {
+ if(1){
+ r=m=1; // Line 274
+ k.KDC(0,t);
+ k.KO(-1,t,".");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_NPDOT /* 0x6E */)) {
+ if(1){
+ r=m=1; // Line 275
+ k.KDC(0,t);
+ k.KO(-1,t,".");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_NPSLASH /* 0x6F */)) {
+ if(1){
+ r=m=1; // Line 276
+ k.KDC(0,t);
+ k.KO(-1,t,"/");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_NPSLASH /* 0x6F */)) {
+ if(1){
+ r=m=1; // Line 277
+ k.KDC(0,t);
+ k.KO(-1,t,"/");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_SPACE /* 0x20 */)) {
+ if(k.KFCM(1,t,[''])){
+ r=m=1; // Line 225
+ k.KDC(1,t);
+ k.KO(-1,t," ");
+ }
+ else if(1){
+ r=m=1; // Line 199
+ k.KDC(0,t);
+ k.KO(-1,t,"");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_SPACE /* 0x20 */)) {
+ if(1){
+ r=m=1; // Line 199
+ k.KDC(0,t);
+ k.KO(-1,t," ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_1 /* 0x31 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"!");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_QUOTE /* 0xDE */)) {
+ if(k.KFCM(3,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ'])){
+ r=m=1; // Line 244
+ k.KDC(3,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្អ៉");
+ k.KB(t);
+ }
+ else if(k.KFCM(3,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54}])){
+ r=m=1; // Line 245
+ k.KDC(3,t);
+ k.KO(-1,t,"ល្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៉");
+ k.KB(t);
+ }
+ else if(k.KFCM(3,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55}])){
+ r=m=1; // Line 246
+ k.KDC(3,t);
+ k.KO(-1,t,"ម្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៉");
+ k.KB(t);
+ }
+ else if(k.KFCM(3,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56}])){
+ r=m=1; // Line 247
+ k.KDC(3,t);
+ k.KO(-1,t,"ស្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៉");
+ k.KB(t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ'])){
+ r=m=1; // Line 248
+ k.KDC(3,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្ហ៉");
+ k.KB(t);
+ }
+ else if(k.KFCM(3,t,['អ','្','ង'])){
+ r=m=1; // Line 249
+ k.KDC(3,t);
+ k.KO(-1,t,"អ្ង៉");
+ k.KB(t);
+ }
+ else if(k.KFCM(3,t,['អ','្','វ'])){
+ r=m=1; // Line 250
+ k.KDC(3,t);
+ k.KO(-1,t,"អ្វ៉");
+ k.KB(t);
+ }
+ else if(k.KFCM(1,t,[{t:'a',a:this.s_c_shifter_28}])){
+ r=m=1; // Line 215
+ k.KDC(1,t);
+ k.KIO(-1,this.s_c_shifter_28,1,t);
+ k.KB(t);
+ }
+ else if(k.KFCM(1,t,[{t:'a',a:this.s_shiftable_c_1st_48}])){
+ r=m=1; // Line 239
+ k.KDC(1,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៉");
+ k.KB(t);
+ }
+ else if(1){
+ r=m=1; // Line 192
+ k.KDC(0,t);
+ k.KO(-1,t,"៉");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_3 /* 0x33 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"\"");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_4 /* 0x34 */)) {
+ if(1){
+ r=m=1; // Line 195
+ k.KDC(0,t);
+ k.KO(-1,t,"៛");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_5 /* 0x35 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"%");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_7 /* 0x37 */)) {
+ if(1){
+ r=m=1; // Line 191
+ k.KDC(0,t);
+ k.KO(-1,t,"័");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_QUOTE /* 0xDE */)) {
+ if(k.KFCM(2,t,['្',{t:'a',a:this.s_c_out_12}])){
+ r=m=1; // Line 214
+ k.KDC(2,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_out_12,2,t);
+ k.KB(t);
+ }
+ else if(k.KFCM(1,t,[{t:'a',a:this.s_v_gen_14}])){
+ r=m=1; // Line 211
+ k.KDC(1,t);
+ k.KIO(-1,this.s_v_gen_14,1,t);
+ k.KB(t);
+ }
+ else if(k.KFCM(1,t,[{t:'a',a:this.s_v_pseudo_16}])){
+ r=m=1; // Line 212
+ k.KDC(1,t);
+ k.KIO(-1,this.s_v_pseudo_16,1,t);
+ k.KB(t);
+ }
+ else if(k.KFCM(1,t,[{t:'a',a:this.s_c_shifter_28}])){
+ r=m=1; // Line 213
+ k.KDC(1,t);
+ k.KIO(-1,this.s_c_shifter_28,1,t);
+ k.KB(t);
+ }
+ else if(1){
+ r=m=1; // Line 191
+ k.KDC(0,t);
+ k.KO(-1,t,"់");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_9 /* 0x39 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"(");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_0 /* 0x30 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,")");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_8 /* 0x38 */)) {
+ if(1){
+ r=m=1; // Line 191
+ k.KDC(0,t);
+ k.KO(-1,t,"៏");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_EQUAL /* 0xBB */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"=");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_COMMA /* 0xBC */)) {
+ if(1){
+ r=m=1; // Line 206
+ k.KDC(0,t);
+ k.KO(-1,t,"ុំ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_HYPHEN /* 0xBD */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឥ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_PERIOD /* 0xBE */)) {
+ if(1){
+ r=m=1; // Line 193
+ k.KDC(0,t);
+ k.KO(-1,t,"។");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_SLASH /* 0xBF */)) {
+ if(k.KFCM(3,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52}])){
+ r=m=1; // Line 254
+ k.KDC(3,t);
+ k.KO(-1,t,"ល្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៊");
+ k.KB(t);
+ }
+ else if(k.KFCM(3,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53}])){
+ r=m=1; // Line 255
+ k.KDC(3,t);
+ k.KO(-1,t,"ម្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៊");
+ k.KB(t);
+ }
+ else if(k.KFCM(1,t,[{t:'a',a:this.s_c_shifter_28}])){
+ r=m=1; // Line 215
+ k.KDC(1,t);
+ k.KIO(-1,this.s_c_shifter_28,1,t);
+ k.KB(t);
+ }
+ else if(k.KFCM(1,t,[{t:'a',a:this.s_shiftable_c_2nd_with_BA_51}])){
+ r=m=1; // Line 240
+ k.KDC(1,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,1,t);
+ k.KO(-1,t,"៊");
+ k.KB(t);
+ }
+ else if(1){
+ r=m=1; // Line 192
+ k.KDC(0,t);
+ k.KO(-1,t,"៊");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_0 /* 0x30 */)) {
+ if(1){
+ r=m=1; // Line 196
+ k.KDC(0,t);
+ k.KO(-1,t,"០");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_1 /* 0x31 */)) {
+ if(1){
+ r=m=1; // Line 196
+ k.KDC(0,t);
+ k.KO(-1,t,"១");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_2 /* 0x32 */)) {
+ if(1){
+ r=m=1; // Line 196
+ k.KDC(0,t);
+ k.KO(-1,t,"២");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_3 /* 0x33 */)) {
+ if(1){
+ r=m=1; // Line 196
+ k.KDC(0,t);
+ k.KO(-1,t,"៣");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_4 /* 0x34 */)) {
+ if(1){
+ r=m=1; // Line 196
+ k.KDC(0,t);
+ k.KO(-1,t,"៤");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_5 /* 0x35 */)) {
+ if(1){
+ r=m=1; // Line 196
+ k.KDC(0,t);
+ k.KO(-1,t,"៥");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_6 /* 0x36 */)) {
+ if(1){
+ r=m=1; // Line 196
+ k.KDC(0,t);
+ k.KO(-1,t,"៦");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_7 /* 0x37 */)) {
+ if(1){
+ r=m=1; // Line 196
+ k.KDC(0,t);
+ k.KO(-1,t,"៧");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_8 /* 0x38 */)) {
+ if(1){
+ r=m=1; // Line 196
+ k.KDC(0,t);
+ k.KO(-1,t,"៨");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_9 /* 0x39 */)) {
+ if(1){
+ r=m=1; // Line 196
+ k.KDC(0,t);
+ k.KO(-1,t,"៩");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_COLON /* 0xBA */)) {
+ if(1){
+ r=m=1; // Line 205
+ k.KDC(0,t);
+ k.KO(-1,t,"ោះ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_COLON /* 0xBA */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ើ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_COMMA /* 0xBC */)) {
+ if(1){
+ r=m=1; // Line 207
+ k.KDC(0,t);
+ k.KO(-1,t,"ុះ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_EQUAL /* 0xBB */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឲ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_PERIOD /* 0xBE */)) {
+ if(1){
+ r=m=1; // Line 193
+ k.KDC(0,t);
+ k.KO(-1,t,"៕");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_SLASH /* 0xBF */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"?");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_2 /* 0x32 */)) {
+ if(1){
+ r=m=1; // Line 193
+ k.KDC(0,t);
+ k.KO(-1,t,"ៗ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_A /* 0x41 */)) {
+ if(1){
+ r=m=1; // Line 203
+ k.KDC(0,t);
+ k.KO(-1,t,"ាំ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_B /* 0x42 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ព");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_C /* 0x43 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ជ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_D /* 0x44 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ឌ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_E /* 0x45 */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ែ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_F /* 0x46 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ធ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_G /* 0x47 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"អ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_H /* 0x48 */)) {
+ if(k.KFCM(1,t,['ះ'])){
+ r=m=1; // Line 219
+ k.KDC(1,t);
+ k.KO(-1,t,"ៈ");
+ }
+ else if(k.KFCM(1,t,['ៈ'])){
+ r=m=1; // Line 220
+ k.KDC(1,t);
+ k.KO(-1,t,"ះ");
+ }
+ else if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ះ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_I /* 0x49 */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ី");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_J /* 0x4A */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ញ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_K /* 0x4B */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"គ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_L /* 0x4C */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ឡ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_M /* 0x4D */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ំ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_N /* 0x4E */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ណ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_O /* 0x4F */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ៅ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_P /* 0x50 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ភ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_Q /* 0x51 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ឈ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_R /* 0x52 */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឬ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_S /* 0x53 */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ៃ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_T /* 0x54 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ទ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_U /* 0x55 */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ូ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_V /* 0x56 */)) {
+ if(1){
+ r=m=1; // Line 204
+ k.KDC(0,t);
+ k.KO(-1,t,"េះ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_W /* 0x57 */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ឺ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_X /* 0x58 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ឃ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_Y /* 0x59 */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ួ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_Z /* 0x5A */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ឍ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_LBRKT /* 0xDB */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ៀ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_BKSLASH /* 0xDC */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឮ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_RBRKT /* 0xDD */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឪ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_6 /* 0x36 */)) {
+ if(1){
+ r=m=1; // Line 191
+ k.KDC(0,t);
+ k.KO(-1,t,"៍");
+ }
+ }
+ if(m) {}
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_HYPHEN /* 0xBD */)) {
+ if(1){
+ r=m=1; // Line 191
+ k.KDC(0,t);
+ k.KO(-1,t,"៌");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_BKQUOTE /* 0xC0 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"«");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_A /* 0x41 */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ា");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ប");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_C /* 0x43 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ច");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_D /* 0x44 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ដ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_E /* 0x45 */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"េ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_F /* 0x46 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ថ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_G /* 0x47 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ង");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_H /* 0x48 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ហ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_I /* 0x49 */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ិ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_J /* 0x4A */)) {
+ if(1){
+ r=m=1; // Line 191
+ k.KDC(0,t);
+ k.KO(-1,t,"្");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_K /* 0x4B */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ក");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_L /* 0x4C */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ល");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_M /* 0x4D */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ម");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_N /* 0x4E */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ន");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_O /* 0x4F */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ោ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_P /* 0x50 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ផ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_Q /* 0x51 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ឆ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_R /* 0x52 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"រ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_S /* 0x53 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ស");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_T /* 0x54 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ត");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_U /* 0x55 */)) {
+ if(k.KFCM(3,t,[{t:'a',a:this.s_shiftable_c_1st_48},'ា','ំ'])){
+ r=m=1; // Line 234
+ k.KDC(3,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_shiftable_c_2nd_with_BA_51},'ា','ំ'])){
+ r=m=1; // Line 235
+ k.KDC(3,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,1,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ុ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_V /* 0x56 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"វ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_W /* 0x57 */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ឹ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_X /* 0x58 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ខ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_Y /* 0x59 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"យ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_Z /* 0x5A */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ឋ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_LBRKT /* 0xDB */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ឿ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_BKSLASH /* 0xDC */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឭ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_RBRKT /* 0xDD */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឧ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_BKQUOTE /* 0xC0 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"»");
+ }
+ }
+ if(m==1) {
+
+ k.KDC(-1,t);
+ r=this.g_normalise_1(t,e);
+ m=2;
+ }
+ return r;
+ };
+ this.g_normalise_1=function(t,e) {
+ var k=KeymanWeb,r=1,m=0;
+ if(k.KFCM(7,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ','ុ','ំ','ា','ំ'])){
+ m=1; // Line 376
+ k.KDC(7,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"អ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(7,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54},'ុ','ំ','ា','ំ'])){
+ m=1; // Line 381
+ k.KDC(7,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(7,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55},'ុ','ំ','ា','ំ'])){
+ m=1; // Line 386
+ k.KDC(7,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(7,t,['ស','្','ប','ុ','ំ','ា','ំ'])){
+ m=1; // Line 391
+ k.KDC(7,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ប៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(7,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56},'ុ','ំ','ា','ំ'])){
+ m=1; // Line 396
+ k.KDC(7,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(7,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ','ុ','ំ','ា','ំ'])){
+ m=1; // Line 401
+ k.KDC(7,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ហ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(7,t,['អ','្','ង','ុ','ំ','ា','ំ'])){
+ m=1; // Line 406
+ k.KDC(7,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ង៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(7,t,['អ','្','វ','ុ','ំ','ា','ំ'])){
+ m=1; // Line 411
+ k.KDC(7,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(7,t,['ហ','្','ប','ុ','ំ','ា','ំ'])){
+ m=1; // Line 416
+ k.KDC(7,t);
+ k.KO(-1,t,"ហ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ប៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(7,t,['ហ','្',{t:'a',a:this.s_shiftable_c_2nd_with_BA_51},'ុ','ំ','ា','ំ'])){
+ m=1; // Line 422
+ k.KDC(7,t);
+ k.KO(-1,t,"ហ");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(7,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52},'ុ','ំ','ា','ំ'])){
+ m=1; // Line 429
+ k.KDC(7,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(7,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53},'ុ','ំ','ា','ំ'])){
+ m=1; // Line 434
+ k.KDC(7,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['្','ដ',{t:'a',a:this.s_v_combo_N_21},'ំ','្','រ'])){
+ m=1; // Line 340
+ k.KDC(6,t);
+ k.KO(-1,t,"្ត");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ k.KIO(-1,this.s_v_combo_N_21,3,t);
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['្','ដ',{t:'a',a:this.s_v_combo_R_20},'ះ','្','រ'])){
+ m=1; // Line 341
+ k.KDC(6,t);
+ k.KO(-1,t,"្ត");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ k.KIO(-1,this.s_v_combo_R_20,3,t);
+ k.KO(-1,t,"ះ");
+ }
+ else if(k.KFCM(6,t,['្','រ',{t:'a',a:this.s_v_combo_N_21},'ំ','្','ដ'])){
+ m=1; // Line 344
+ k.KDC(6,t);
+ k.KO(-1,t,"្ត");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ k.KIO(-1,this.s_v_combo_N_21,3,t);
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['្','រ',{t:'a',a:this.s_v_combo_R_20},'ះ','្','ដ'])){
+ m=1; // Line 345
+ k.KDC(6,t);
+ k.KO(-1,t,"្ត");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ k.KIO(-1,this.s_v_combo_R_20,3,t);
+ k.KO(-1,t,"ះ");
+ }
+ else if(k.KFCM(6,t,['្','រ',{t:'a',a:this.s_v_combo_N_21},'ំ','្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 350
+ k.KDC(6,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,6,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ k.KIO(-1,this.s_v_combo_N_21,3,t);
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['្','រ',{t:'a',a:this.s_v_combo_R_20},'ះ','្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 351
+ k.KDC(6,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,6,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ k.KIO(-1,this.s_v_combo_R_20,3,t);
+ k.KO(-1,t,"ះ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ','ុ','ា','ំ'])){
+ m=1; // Line 374
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"អ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54},'ុ','ា','ំ'])){
+ m=1; // Line 379
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55},'ុ','ា','ំ'])){
+ m=1; // Line 384
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ស','្','ប','ុ','ា','ំ'])){
+ m=1; // Line 389
+ k.KDC(6,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ប៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56},'ុ','ា','ំ'])){
+ m=1; // Line 394
+ k.KDC(6,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ','ុ','ា','ំ'])){
+ m=1; // Line 399
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ហ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['អ','្','ង','ុ','ា','ំ'])){
+ m=1; // Line 404
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ង៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['អ','្','វ','ុ','ា','ំ'])){
+ m=1; // Line 409
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ហ','្','ប','ុ','ា','ំ'])){
+ m=1; // Line 414
+ k.KDC(6,t);
+ k.KO(-1,t,"ហ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ប៉");
+ k.KO(-1,t,"ប");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ហ','្',{t:'a',a:this.s_shiftable_c_2nd_with_BA_51},'ុ','ា','ំ'])){
+ m=1; // Line 420
+ k.KDC(6,t);
+ k.KO(-1,t,"ហ");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,3,t);
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52},'ុ','ា','ំ'])){
+ m=1; // Line 427
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53},'ុ','ា','ំ'])){
+ m=1; // Line 432
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52},'៊',{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16}])){
+ m=1; // Line 454
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_gen_14,5,t);
+ k.KIO(-1,this.s_v_pseudo_16,6,t);
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53},'៊',{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16}])){
+ m=1; // Line 455
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_gen_14,5,t);
+ k.KIO(-1,this.s_v_pseudo_16,6,t);
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ','៉','ា','ំ'])){
+ m=1; // Line 489
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"អ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54},'៉','ា','ំ'])){
+ m=1; // Line 490
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55},'៉','ា','ំ'])){
+ m=1; // Line 491
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ស','្','ប','៉','ា','ំ'])){
+ m=1; // Line 492
+ k.KDC(6,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ប៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56},'៉','ា','ំ'])){
+ m=1; // Line 493
+ k.KDC(6,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ','៉','ា','ំ'])){
+ m=1; // Line 494
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ហ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['អ','្','ង','៉','ា','ំ'])){
+ m=1; // Line 495
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ង៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['អ','្','វ','៉','ា','ំ'])){
+ m=1; // Line 496
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ','ា','ុ','ំ'])){
+ m=1; // Line 503
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"អ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ','ុ','ំ','ា'])){
+ m=1; // Line 504
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"អ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54},'ា','ុ','ំ'])){
+ m=1; // Line 506
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54},'ុ','ំ','ា'])){
+ m=1; // Line 507
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55},'ា','ុ','ំ'])){
+ m=1; // Line 509
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55},'ុ','ំ','ា'])){
+ m=1; // Line 510
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56},'ា','ុ','ំ'])){
+ m=1; // Line 512
+ k.KDC(6,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56},'ុ','ំ','ា'])){
+ m=1; // Line 513
+ k.KDC(6,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ','ា','ុ','ំ'])){
+ m=1; // Line 515
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ហ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ','ុ','ំ','ា'])){
+ m=1; // Line 516
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ហ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['អ','្','ង','ា','ុ','ំ'])){
+ m=1; // Line 518
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ង៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['អ','្','ង','ុ','ំ','ា'])){
+ m=1; // Line 519
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ង៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['អ','្','វ','ា','ុ','ំ'])){
+ m=1; // Line 521
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['អ','្','វ','ុ','ំ','ា'])){
+ m=1; // Line 522
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វ៊");
+ k.KO(-1,t,"ុ");
+ k.KO(-1,t,"ា");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52},'ា','ុ','ំ'])){
+ m=1; // Line 529
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52},'ុ','ំ','ា'])){
+ m=1; // Line 530
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53},'ា','ុ','ំ'])){
+ m=1; // Line 532
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53},'ុ','ំ','ា'])){
+ m=1; // Line 533
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ','េ','ុ','ី'])){
+ m=1; // Line 541
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"អ៊ើ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ','ុ','េ','ី'])){
+ m=1; // Line 542
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"អ៊ើ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ','៉','េ','ី'])){
+ m=1; // Line 543
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"អ៊ើ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54},'េ','ុ','ី'])){
+ m=1; // Line 545
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54},'ុ','េ','ី'])){
+ m=1; // Line 546
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54},'៉','េ','ី'])){
+ m=1; // Line 547
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55},'េ','ុ','ី'])){
+ m=1; // Line 549
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55},'ុ','េ','ី'])){
+ m=1; // Line 550
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55},'៉','េ','ី'])){
+ m=1; // Line 551
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(6,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56},'េ','ុ','ី'])){
+ m=1; // Line 553
+ k.KDC(6,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(6,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56},'ុ','េ','ី'])){
+ m=1; // Line 554
+ k.KDC(6,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(6,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56},'៉','េ','ី'])){
+ m=1; // Line 555
+ k.KDC(6,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ','េ','ុ','ី'])){
+ m=1; // Line 557
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ហ៊ើ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ','ុ','េ','ី'])){
+ m=1; // Line 558
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ហ៊ើ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ','៉','េ','ី'])){
+ m=1; // Line 559
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ហ៊ើ");
+ }
+ else if(k.KFCM(6,t,['អ','្','ង','េ','ុ','ី'])){
+ m=1; // Line 561
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ង៊ើ");
+ }
+ else if(k.KFCM(6,t,['អ','្','ង','ុ','េ','ី'])){
+ m=1; // Line 562
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ង៊ើ");
+ }
+ else if(k.KFCM(6,t,['អ','្','ង','៉','េ','ី'])){
+ m=1; // Line 563
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ង៊ើ");
+ }
+ else if(k.KFCM(6,t,['អ','្','វ','េ','ុ','ី'])){
+ m=1; // Line 565
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វ៊ើ");
+ }
+ else if(k.KFCM(6,t,['អ','្','វ','ុ','េ','ី'])){
+ m=1; // Line 566
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វ៊ើ");
+ }
+ else if(k.KFCM(6,t,['អ','្','វ','៉','េ','ី'])){
+ m=1; // Line 567
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វ៊ើ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52},'េ','ុ','ី'])){
+ m=1; // Line 575
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៉ើ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52},'ុ','េ','ី'])){
+ m=1; // Line 576
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៉ើ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52},'៊','េ','ី'])){
+ m=1; // Line 577
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៉ើ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53},'េ','ុ','ី'])){
+ m=1; // Line 579
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៉ើ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53},'ុ','េ','ី'])){
+ m=1; // Line 580
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៉ើ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53},'៊','េ','ី'])){
+ m=1; // Line 581
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៉ើ");
+ }
+ else if(k.KFCM(6,t,['្','យ','្',{t:'a',a:this.s_c_out_12},'េ','ឺ'])){
+ m=1; // Line 631
+ k.KDC(6,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_out_12,4,t);
+ k.KO(-1,t,"ឿ");
+ }
+ else if(k.KFCM(6,t,['្','យ','្',{t:'a',a:this.s_c_out_12},'េ','ឹ'])){
+ m=1; // Line 632
+ k.KDC(6,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_out_12,4,t);
+ k.KO(-1,t,"ឿ");
+ }
+ else if(k.KFCM(6,t,['្','យ','្',{t:'a',a:this.s_c_out_12},'េ','ី'])){
+ m=1; // Line 633
+ k.KDC(6,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_out_12,4,t);
+ k.KO(-1,t,"ឿ");
+ }
+ else if(k.KFCM(5,t,[{t:'a',a:this.s_c_shifter_28},{t:'a',a:this.s_v_combo_N_21},'ំ','្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 331
+ k.KDC(5,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,5,t);
+ k.KIO(-1,this.s_c_shifter_28,1,t);
+ k.KIO(-1,this.s_v_combo_N_21,2,t);
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(5,t,[{t:'a',a:this.s_c_shifter_28},{t:'a',a:this.s_v_combo_R_20},'ះ','្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 332
+ k.KDC(5,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,5,t);
+ k.KIO(-1,this.s_c_shifter_28,1,t);
+ k.KIO(-1,this.s_v_combo_R_20,2,t);
+ k.KO(-1,t,"ះ");
+ }
+ else if(k.KFCM(5,t,['្','ដ',{t:'a',a:this.s_v_any_19},'្','រ'])){
+ m=1; // Line 339
+ k.KDC(5,t);
+ k.KO(-1,t,"្ត");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ k.KIO(-1,this.s_v_any_19,3,t);
+ }
+ else if(k.KFCM(5,t,['្','រ',{t:'a',a:this.s_v_any_19},'្','ដ'])){
+ m=1; // Line 343
+ k.KDC(5,t);
+ k.KO(-1,t,"្ត");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ k.KIO(-1,this.s_v_any_19,3,t);
+ }
+ else if(k.KFCM(5,t,['្','រ',{t:'a',a:this.s_c_shifter_28},'្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 347
+ k.KDC(5,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,5,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ k.KIO(-1,this.s_c_shifter_28,3,t);
+ }
+ else if(k.KFCM(5,t,['្','រ',{t:'a',a:this.s_v_any_19},'្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 349
+ k.KDC(5,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,5,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ k.KIO(-1,this.s_v_any_19,3,t);
+ }
+ else if(k.KFCM(5,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ','ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 373
+ k.KDC(5,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"អ៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ',{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 375
+ k.KDC(5,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"អ៊");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(5,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54},'ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 378
+ k.KDC(5,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54},{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 380
+ k.KDC(5,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(5,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55},'ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 383
+ k.KDC(5,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55},{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 385
+ k.KDC(5,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ if(m) {}
+ else if(k.KFCM(5,t,['ស','្','ប','ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 388
+ k.KDC(5,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ប៉");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ស','្','ប',{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 390
+ k.KDC(5,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ប៉");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(5,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56},'ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 393
+ k.KDC(5,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56},{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 395
+ k.KDC(5,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(5,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ','ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 398
+ k.KDC(5,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ហ៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ',{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 400
+ k.KDC(5,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ហ៊");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(5,t,['អ','្','ង','ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 403
+ k.KDC(5,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ង៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['អ','្','ង',{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 405
+ k.KDC(5,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ង៊");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(5,t,['អ','្','វ','ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 408
+ k.KDC(5,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វ៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['អ','្','វ',{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 410
+ k.KDC(5,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វ៊");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(5,t,['ហ','្','ប','ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 413
+ k.KDC(5,t);
+ k.KO(-1,t,"ហ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ប៉");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ហ','្','ប',{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 415
+ k.KDC(5,t);
+ k.KO(-1,t,"ហ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ប៉");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(5,t,['ហ','្',{t:'a',a:this.s_shiftable_c_2nd_with_BA_51},'ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 419
+ k.KDC(5,t);
+ k.KO(-1,t,"ហ");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ហ','្',{t:'a',a:this.s_shiftable_c_2nd_with_BA_51},{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 421
+ k.KDC(5,t);
+ k.KO(-1,t,"ហ");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(5,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52},'ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 426
+ k.KDC(5,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52},{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 428
+ k.KDC(5,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(5,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53},'ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 431
+ k.KDC(5,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53},{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 433
+ k.KDC(5,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(5,t,[{t:'a',a:this.s_shiftable_c_1st_48},'ុ','ំ','ា','ំ'])){
+ m=1; // Line 441
+ k.KDC(5,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(5,t,[{t:'a',a:this.s_shiftable_c_2nd_with_BA_51},'ុ','ំ','ា','ំ'])){
+ m=1; // Line 448
+ k.KDC(5,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,1,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(5,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52},'៊',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 452
+ k.KDC(5,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53},'៊',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 453
+ k.KDC(5,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['្',{t:'a',a:this.s_shiftable_c_2nd_50},'៊',{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16}])){
+ m=1; // Line 463
+ k.KDC(5,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_shiftable_c_2nd_50,2,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_gen_14,4,t);
+ k.KIO(-1,this.s_v_pseudo_16,5,t);
+ }
+ else if(k.KFCM(5,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ','៉',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 481
+ k.KDC(5,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"អ៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54},'៉',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 482
+ k.KDC(5,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55},'៉',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 483
+ k.KDC(5,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ស','្','ប','៉',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 484
+ k.KDC(5,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ប៉");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56},'៉',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 485
+ k.KDC(5,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ','៉',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 486
+ k.KDC(5,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ហ៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['អ','្','ង','៉',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 487
+ k.KDC(5,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ង៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['អ','្','វ','៉',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 488
+ k.KDC(5,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វ៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ព','័','ន','្','ឋ'])){
+ m=1; // Line 619
+ k.KDC(5,t);
+ k.KO(-1,t,"ព");
+ k.KO(-1,t,"័");
+ k.KO(-1,t,"ន");
+ k.KO(-1,t,"្ធ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16},{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16}])){
+ m=1; // Line 312
+ k.KDC(4,t);
+ k.KIO(-1,this.s_v_gen_14,3,t);
+ k.KIO(-1,this.s_v_pseudo_16,4,t);
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_v_combo_N_21},'ំ','្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 325
+ k.KDC(4,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,4,t);
+ k.KIO(-1,this.s_v_combo_N_21,1,t);
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_v_combo_R_20},'ះ','្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 326
+ k.KDC(4,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,4,t);
+ k.KIO(-1,this.s_v_combo_R_20,1,t);
+ k.KO(-1,t,"ះ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_c_shifter_28},{t:'a',a:this.s_v_any_19},'្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 330
+ k.KDC(4,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,4,t);
+ k.KIO(-1,this.s_c_shifter_28,1,t);
+ k.KIO(-1,this.s_v_any_19,2,t);
+ }
+ else if(k.KFCM(4,t,['្','ដ','្','រ'])){
+ m=1; // Line 336
+ k.KDC(4,t);
+ k.KO(-1,t,"្ត");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ }
+ else if(k.KFCM(4,t,['្','រ','្','ដ'])){
+ m=1; // Line 337
+ k.KDC(4,t);
+ k.KO(-1,t,"្ត");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ }
+ else if(k.KFCM(4,t,['្','រ','្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 348
+ k.KDC(4,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,4,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_c_shifter_28},{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16},{t:'a',a:this.s_c_shifter_28}])){
+ m=1; // Line 362
+ k.KDC(4,t);
+ k.KIO(-1,this.s_v_gen_14,2,t);
+ k.KIO(-1,this.s_v_pseudo_16,3,t);
+ k.KIO(-1,this.s_c_shifter_28,4,t);
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_1st_48},'ុ','ា','ំ'])){
+ m=1; // Line 439
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_2nd_with_BA_51},'ុ','ា','ំ'])){
+ m=1; // Line 446
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,1,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_2nd_50},'៊',{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16}])){
+ m=1; // Line 460
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_50,1,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_gen_14,3,t);
+ k.KIO(-1,this.s_v_pseudo_16,4,t);
+ }
+ else if(k.KFCM(4,t,['្',{t:'a',a:this.s_shiftable_c_2nd_50},'៊',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 462
+ k.KDC(4,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_shiftable_c_2nd_50,2,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(4,t,['ប','្','យ',{t:'a',a:this.s_c_shifter_28}])){
+ m=1; // Line 467
+ k.KDC(4,t);
+ k.KO(-1,t,"ប្យ");
+ k.KIO(-1,this.s_c_shifter_28,4,t);
+ }
+ else if(k.KFCM(4,t,['ស','្','ប',{t:'a',a:this.s_c_shifter_28}])){
+ m=1; // Line 468
+ k.KDC(4,t);
+ k.KO(-1,t,"ស្ប");
+ k.KIO(-1,this.s_c_shifter_28,4,t);
+ }
+ else if(k.KFCM(4,t,['ឆ','្','ប',{t:'a',a:this.s_c_shifter_28}])){
+ m=1; // Line 469
+ k.KDC(4,t);
+ k.KO(-1,t,"ឆ្ប");
+ k.KIO(-1,this.s_c_shifter_28,4,t);
+ }
+ else if(k.KFCM(4,t,['ប','្','យ',{t:'a',a:this.s_c_shifter_28}])){
+ m=1; // Line 470
+ k.KDC(4,t);
+ k.KO(-1,t,"ប្យ");
+ k.KIO(-1,this.s_c_shifter_28,4,t);
+ }
+ else if(k.KFCM(4,t,['ស','្','ប',{t:'a',a:this.s_c_shifter_28}])){
+ m=1; // Line 471
+ k.KDC(4,t);
+ k.KO(-1,t,"ស្ប");
+ k.KIO(-1,this.s_c_shifter_28,4,t);
+ }
+ else if(k.KFCM(4,t,['ឆ','្','ប',{t:'a',a:this.s_c_shifter_28}])){
+ m=1; // Line 472
+ k.KDC(4,t);
+ k.KO(-1,t,"ឆ្ប");
+ k.KIO(-1,this.s_c_shifter_28,4,t);
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_1st_48},'៉',{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16}])){
+ m=1; // Line 477
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_gen_14,3,t);
+ k.KIO(-1,this.s_v_pseudo_16,4,t);
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_1st_48},'ា','ុ','ំ'])){
+ m=1; // Line 500
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_1st_48},'ុ','ំ','ា'])){
+ m=1; // Line 501
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_2nd_with_BA_51},'ា','ុ','ំ'])){
+ m=1; // Line 526
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,1,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_2nd_with_BA_51},'ុ','ំ','ា'])){
+ m=1; // Line 527
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,1,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_1st_48},'េ','ុ','ី'])){
+ m=1; // Line 537
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_1st_48},'ុ','េ','ី'])){
+ m=1; // Line 538
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_1st_48},'៉','េ','ី'])){
+ m=1; // Line 539
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_2nd_50},'េ','ុ','ី'])){
+ m=1; // Line 571
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_50,1,t);
+ k.KO(-1,t,"៉ើ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_2nd_50},'ុ','េ','ី'])){
+ m=1; // Line 572
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_50,1,t);
+ k.KO(-1,t,"៉ើ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_2nd_50},'៊','េ','ី'])){
+ m=1; // Line 573
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_50,1,t);
+ k.KO(-1,t,"៉ើ");
+ }
+ else if(k.KFCM(4,t,['ព','ន','្','ឋ'])){
+ m=1; // Line 618
+ k.KDC(4,t);
+ k.KO(-1,t,"ព");
+ k.KO(-1,t,"ន");
+ k.KO(-1,t,"្ធ");
+ }
+ else if(k.KFCM(4,t,['្','យ','េ','ឺ'])){
+ m=1; // Line 627
+ k.KDC(4,t);
+ k.KO(-1,t,"ឿ");
+ }
+ else if(k.KFCM(4,t,['្','យ','េ','ឹ'])){
+ m=1; // Line 628
+ k.KDC(4,t);
+ k.KO(-1,t,"ឿ");
+ }
+ else if(k.KFCM(4,t,['្','យ','េ','ី'])){
+ m=1; // Line 629
+ k.KDC(4,t);
+ k.KO(-1,t,"ឿ");
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16},{t:'a',a:this.s_v_gen_14}])){
+ m=1; // Line 308
+ k.KDC(3,t);
+ k.KIO(-1,this.s_v_gen_14,3,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16},{t:'a',a:this.s_v_pseudo_16}])){
+ m=1; // Line 309
+ k.KDC(3,t);
+ k.KIO(-1,this.s_v_pseudo_16,3,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16}])){
+ m=1; // Line 310
+ k.KDC(3,t);
+ k.KIO(-1,this.s_v_gen_14,2,t);
+ k.KIO(-1,this.s_v_pseudo_16,3,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_v_pseudo_16},{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16}])){
+ m=1; // Line 311
+ k.KDC(3,t);
+ k.KIO(-1,this.s_v_gen_14,2,t);
+ k.KIO(-1,this.s_v_pseudo_16,3,t);
+ }
+ else if(k.KFCM(3,t,['្',{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16}])){
+ m=1; // Line 320
+ k.KDC(3,t);
+ k.KIO(-1,this.s_v_gen_14,2,t);
+ k.KIO(-1,this.s_v_pseudo_16,3,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_v_any_19},'្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 324
+ k.KDC(3,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,3,t);
+ k.KIO(-1,this.s_v_any_19,1,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_c_shifter_28},'្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 355
+ k.KDC(3,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,3,t);
+ k.KIO(-1,this.s_c_shifter_28,1,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16},{t:'a',a:this.s_c_shifter_28}])){
+ m=1; // Line 360
+ k.KDC(3,t);
+ k.KIO(-1,this.s_c_shifter_28,3,t);
+ k.KIO(-1,this.s_v_gen_14,1,t);
+ k.KIO(-1,this.s_v_pseudo_16,2,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_c_shifter_28},{t:'a',a:this.s_v_any_19},{t:'a',a:this.s_c_shifter_28}])){
+ m=1; // Line 361
+ k.KDC(3,t);
+ k.KIO(-1,this.s_c_shifter_28,3,t);
+ k.KIO(-1,this.s_v_any_19,2,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_shiftable_c_1st_48},'ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 438
+ k.KDC(3,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,3,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_shiftable_c_1st_48},{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 440
+ k.KDC(3,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,2,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_shiftable_c_2nd_with_BA_51},'ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 445
+ k.KDC(3,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,1,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_above_47,3,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_shiftable_c_2nd_with_BA_51},{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 447
+ k.KDC(3,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,1,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_above_47,2,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_shiftable_c_2nd_50},'៊',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 459
+ k.KDC(3,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_50,1,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_above_47,3,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_shiftable_c_1st_48},'៉',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 476
+ k.KDC(3,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,3,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_c_out_12},{t:'a',a:this.s_v_gen_14},'៌'])){
+ m=1; // Line 585
+ k.KDC(3,t);
+ k.KIO(-1,this.s_c_out_12,1,t);
+ k.KO(-1,t,"៌");
+ k.KIO(-1,this.s_v_gen_14,2,t);
+ }
+ else if(k.KFCM(3,t,['ណ','្','ត'])){
+ m=1; // Line 589
+ k.KDC(3,t);
+ k.KO(-1,t,"ណ");
+ k.KO(-1,t,"្ដ");
+ }
+ else if(k.KFCM(3,t,['ន','្','ដ'])){
+ m=1; // Line 590
+ k.KDC(3,t);
+ k.KO(-1,t,"ន");
+ k.KO(-1,t,"្ត");
+ }
+ else if(k.KFCM(3,t,['ទ','្','ប'])){
+ m=1; // Line 594
+ k.KDC(3,t);
+ k.KO(-1,t,"ឡ");
+ }
+ else if(k.KFCM(3,t,['ប','្','ញ'])){
+ m=1; // Line 596
+ k.KDC(3,t);
+ k.KO(-1,t,"ឫ");
+ }
+ else if(k.KFCM(3,t,['ព','្','ញ'])){
+ m=1; // Line 602
+ k.KDC(3,t);
+ k.KO(-1,t,"ឭ");
+ }
+ else if(k.KFCM(3,t,['ព','្','ឋ'])){
+ m=1; // Line 605
+ k.KDC(3,t);
+ k.KO(-1,t,"ឰ");
+ }
+ else if(k.KFCM(3,t,['ដ','្','ធ'])){
+ m=1; // Line 613
+ k.KDC(3,t);
+ k.KO(-1,t,"ដ្ឋ");
+ }
+ else if(k.KFCM(3,t,['ទ','្','ឋ'])){
+ m=1; // Line 614
+ k.KDC(3,t);
+ k.KO(-1,t,"ទ្ធ");
+ }
+ else if(k.KFCM(3,t,['ឪ','្','យ'])){
+ m=1; // Line 622
+ k.KDC(3,t);
+ k.KO(-1,t,"ឱ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"យ");
+ }
+ else if(k.KFCM(3,t,['ឳ','្','យ'])){
+ m=1; // Line 623
+ k.KDC(3,t);
+ k.KO(-1,t,"ឱ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"យ");
+ }
+ else if(k.KFCM(3,t,['ញ','្','វ'])){
+ m=1; // Line 625
+ k.KDC(3,t);
+ k.KO(-1,t,"ព");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វា");
+ }
+ else if(k.KFCM(2,t,['េ','ា'])){
+ m=1; // Line 291
+ k.KDC(2,t);
+ k.KO(-1,t,"ោ");
+ }
+ else if(k.KFCM(2,t,['ា','េ'])){
+ m=1; // Line 292
+ k.KDC(2,t);
+ k.KO(-1,t,"ោ");
+ }
+ else if(k.KFCM(2,t,['េ','ី'])){
+ m=1; // Line 293
+ k.KDC(2,t);
+ k.KO(-1,t,"ើ");
+ }
+ else if(k.KFCM(2,t,['ី','េ'])){
+ m=1; // Line 294
+ k.KDC(2,t);
+ k.KO(-1,t,"ើ");
+ }
+ else if(k.KFCM(2,t,['ំ','ុ'])){
+ m=1; // Line 298
+ k.KDC(2,t);
+ k.KO(-1,t,"ុំ");
+ }
+ else if(k.KFCM(2,t,['ំ','ា'])){
+ m=1; // Line 299
+ k.KDC(2,t);
+ k.KO(-1,t,"ាំ");
+ }
+ else if(k.KFCM(2,t,[{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_gen_14}])){
+ m=1; // Line 304
+ k.KDC(2,t);
+ k.KIO(-1,this.s_v_gen_14,2,t);
+ }
+ else if(k.KFCM(2,t,[{t:'a',a:this.s_v_pseudo_16},{t:'a',a:this.s_v_pseudo_16}])){
+ m=1; // Line 313
+ k.KDC(2,t);
+ k.KIO(-1,this.s_v_pseudo_16,2,t);
+ }
+ if(m) {}
+ else if(k.KFCM(2,t,['្','្'])){
+ m=1; // Line 318
+ k.KDC(2,t);
+ k.KO(-1,t,"្");
+ }
+ else if(k.KFCM(2,t,['្',{t:'a',a:this.s_v_any_19}])){
+ m=1; // Line 319
+ k.KDC(2,t);
+ k.KIO(-1,this.s_v_any_19,2,t);
+ }
+ else if(k.KFCM(2,t,[{t:'a',a:this.s_v_any_19},{t:'a',a:this.s_c_shifter_28}])){
+ m=1; // Line 359
+ k.KDC(2,t);
+ k.KIO(-1,this.s_c_shifter_28,2,t);
+ k.KIO(-1,this.s_v_any_19,1,t);
+ }
+ else if(k.KFCM(2,t,['ឫ','ុ'])){
+ m=1; // Line 597
+ k.KDC(2,t);
+ k.KO(-1,t,"ឬ");
+ }
+ else if(k.KFCM(2,t,['ឭ','ា'])){
+ m=1; // Line 599
+ k.KDC(2,t);
+ k.KO(-1,t,"ញ");
+ }
+ else if(k.KFCM(2,t,['ឮ','ា'])){
+ m=1; // Line 600
+ k.KDC(2,t);
+ k.KO(-1,t,"ញ");
+ }
+ else if(k.KFCM(2,t,['ឭ','ុ'])){
+ m=1; // Line 603
+ k.KDC(2,t);
+ k.KO(-1,t,"ឮ");
+ }
+ else if(k.KFCM(2,t,['ឧ','ិ'])){
+ m=1; // Line 607
+ k.KDC(2,t);
+ k.KO(-1,t,"ឱ");
+ }
+ else if(k.KFCM(2,t,['ឧ','៌'])){
+ m=1; // Line 608
+ k.KDC(2,t);
+ k.KO(-1,t,"ឱ");
+ }
+ else if(k.KFCM(2,t,['ឧ','៍'])){
+ m=1; // Line 609
+ k.KDC(2,t);
+ k.KO(-1,t,"ឱ");
+ }
+ return r;
+ };
+}
diff --git a/developer/src/kmc-keyboard-info/test/fixtures/no-kmp/build/khmer_angkor.kmx b/developer/src/kmc-keyboard-info/test/fixtures/no-kmp/build/khmer_angkor.kmx
new file mode 100644
index 00000000000..d8495d187c4
Binary files /dev/null and b/developer/src/kmc-keyboard-info/test/fixtures/no-kmp/build/khmer_angkor.kmx differ
diff --git a/developer/src/kmc-keyboard-info/test/fixtures/no-kmp/source/khmer_angkor.kps b/developer/src/kmc-keyboard-info/test/fixtures/no-kmp/source/khmer_angkor.kps
new file mode 100644
index 00000000000..50213c4488d
--- /dev/null
+++ b/developer/src/kmc-keyboard-info/test/fixtures/no-kmp/source/khmer_angkor.kps
@@ -0,0 +1,163 @@
+
+
+
+ 15.0.266.0
+ 7.0
+
+
+
+ readme.htm
+ splash.gif
+
+
+ ..\LICENSE.md
+
+
+
+
+
+
+
+ Khmer Angkor
+ © 2015-2022 SIL International
+ Makara Sok
+
+ https://keyman.com/keyboards/khmer_angkor
+ Khmer Unicode keyboard layout based on the NiDA keyboard layout. Automatically corrects many common keying errors.
+
+
+
+
+
+
+ ..\LICENSE.md
+ File LICENSE.md
+ 0
+ .md
+
+
+ ..\build\khmer_angkor.js
+ File khmer_angkor.js
+ 0
+ .js
+
+
+ ..\build\khmer_angkor.kvk
+ File khmer_angkor.kvk
+ 0
+ .kvk
+
+
+ ..\build\khmer_angkor.kmx
+ Keyboard Khmer Angkor
+ 0
+ .kmx
+
+
+ welcome\keyboard_layout.png
+ File keyboard_layout.png
+ 0
+ .png
+
+
+ welcome\welcome.htm
+ File welcome.htm
+ 0
+ .htm
+
+
+ ..\shared\fonts\khmer\mondulkiri\FONTLOG.txt
+ File FONTLOG.txt
+ 0
+ .txt
+
+
+ ..\shared\fonts\khmer\mondulkiri\Mondulkiri-B.ttf
+ Font Khmer Mondulkiri Bold
+ 0
+ .ttf
+
+
+ ..\shared\fonts\khmer\mondulkiri\Mondulkiri-BI.ttf
+ Font Khmer Mondulkiri Bold Italic
+ 0
+ .ttf
+
+
+ ..\shared\fonts\khmer\mondulkiri\Mondulkiri-I.ttf
+ Font Khmer Mondulkiri Italic
+ 0
+ .ttf
+
+
+ ..\shared\fonts\khmer\mondulkiri\Mondulkiri-R.ttf
+ Font Khmer Mondulkiri
+ 0
+ .ttf
+
+
+ ..\shared\fonts\khmer\mondulkiri\OFL.txt
+ File OFL.txt
+ 0
+ .txt
+
+
+ ..\shared\fonts\khmer\mondulkiri\OFL-FAQ.txt
+ File OFL-FAQ.txt
+ 0
+ .txt
+
+
+ welcome\KAK_Documentation_EN.pdf
+ File KAK_Documentation_EN.pdf
+ 0
+ .pdf
+
+
+ welcome\KAK_Documentation_KH.pdf
+ File KAK_Documentation_KH.pdf
+ 0
+ .pdf
+
+
+ readme.htm
+ File readme.htm
+ 0
+ .htm
+
+
+ welcome\image002.png
+ File image002.png
+ 0
+ .png
+
+
+ ..\shared\fonts\khmer\busrakbd\khmer_busra_kbd.ttf
+ Font KhmerBusraKbd
+ 0
+ .ttf
+
+
+ splash.gif
+ File splash.gif
+ 0
+ .gif
+
+
+
+
+ Khmer Angkor
+ khmer_angkor
+ 1.3
+ ..\shared\fonts\khmer\busrakbd\khmer_busra_kbd.ttf
+ ..\shared\fonts\khmer\mondulkiri\Mondulkiri-R.ttf
+
+ Central Khmer (Khmer, Cambodia)
+
+
+
+
+
+
+
+
diff --git a/developer/src/kmc-keyboard-info/test/fixtures/no-license-in-kps-sources/build/.gitattributes b/developer/src/kmc-keyboard-info/test/fixtures/no-license-in-kps-sources/build/.gitattributes
new file mode 100644
index 00000000000..7e3549570d7
--- /dev/null
+++ b/developer/src/kmc-keyboard-info/test/fixtures/no-license-in-kps-sources/build/.gitattributes
@@ -0,0 +1 @@
+khmer_angkor.js -text
\ No newline at end of file
diff --git a/developer/src/kmc-keyboard-info/test/fixtures/no-license-in-kps-sources/build/khmer_angkor.js b/developer/src/kmc-keyboard-info/test/fixtures/no-license-in-kps-sources/build/khmer_angkor.js
new file mode 100644
index 00000000000..f95f54848cf
--- /dev/null
+++ b/developer/src/kmc-keyboard-info/test/fixtures/no-license-in-kps-sources/build/khmer_angkor.js
@@ -0,0 +1,5462 @@
+if(typeof keyman === 'undefined') {
+ console.log('Keyboard requires KeymanWeb 10.0 or later');
+ if(typeof tavultesoft !== 'undefined') tavultesoft.keymanweb.util.alert("This keyboard requires KeymanWeb 10.0 or later");
+} else {
+KeymanWeb.KR(new Keyboard_khmer_angkor());
+}
+function Keyboard_khmer_angkor()
+{
+ var modCodes = keyman.osk.modifierCodes;
+ var keyCodes = keyman.osk.keyCodes;
+
+ this._v=(typeof keyman!="undefined"&&typeof keyman.version=="string")?parseInt(keyman.version,10):9;
+ this.KI="Keyboard_khmer_angkor";
+ this.KN="Khmer Angkor";
+ this.KMINVER="10.0";
+ this.KV={F:' 1em "Khmer Busra Kbd"',K102:0};
+ this.KV.KLS={
+ "rightalt": ["","","@","","$","€","៙","៚","*","{","}","≈","","","","","ៜ","","ឯ","ឫ","ឨ","[","]","ឦ","ឱ","ឰ","ឩ","ឳ","\\","","","","+","-","×","÷",":","‘","’","ឝ","៘","៖","ៈ","","","","","","","<",">","#","&","ឞ",";","",",",".","/","","","","",""," "],
+ "rightalt-shift": ["","៱","៲","៳","៴","៵","៶","៷","៸","៹","៰","","","","","","᧠","᧡","᧢","᧣","᧤","᧥","᧦","᧧","᧨","᧩","᧪","᧫","","","","","᧬","᧭","᧮","᧯","᧰","᧱","᧲","᧳","᧴","᧵","᧶","","","","","","","᧷","᧸","᧹","᧺","᧻","᧼","᧽","᧾","᧿","","","","","","",""],
+ "default": ["«","១","២","៣","៤","៥","៦","៧","៨","៩","០","ឥ","ឲ","","","","ឆ","","","រ","ត","យ","","","","ផ","","ឪ","ឮ","","","","","ស","ដ","ថ","ង","ហ","","ក","ល","","","","","","","","","ឋ","ខ","ច","វ","ប","ន","ម","","។","","","","","","",""],
+ "shift": ["»","!","ៗ","\"","៛","%","","","","(",")","","=","","","","ឈ","","","ឬ","ទ","","","","","ភ","","ឧ","ឭ","","","","","","ឌ","ធ","អ","ះ","ញ","គ","ឡ","","","","","","","","","ឍ","ឃ","ជ","","ព","ណ","","","៕","?","","","","","",""]
+ };
+ this.KV.BK=(function(x){
+ var
+ empty=Array.apply(null, Array(65)).map(String.prototype.valueOf,""),
+ result=[], v, i,
+ modifiers=['default','shift','ctrl','shift-ctrl','alt','shift-alt','ctrl-alt','shift-ctrl-alt'];
+ for(i=modifiers.length-1;i>=0;i--) {
+ v = x[modifiers[i]];
+ if(v || result.length > 0) {
+ result=(v ? v : empty).slice().concat(result);
+ }
+ }
+ return result;
+ })(this.KV.KLS);
+ this.KDU=0;
+ this.KH='';
+ this.KM=0;
+ this.KBVER="1.3";
+ this.KMBM=modCodes.RALT | modCodes.SHIFT /* 0x0018 */;
+ this.KVKD="T_17D2_1780 T_17D2_1781 T_17D2_1782 T_17D2_1783 T_17D2_1784 T_17D2_1785 T_17D2_1786 T_17D2_1787 T_17D2_1788 T_17D2_1789 T_17D2_178A T_17D2_178B T_17D2_178C T_17D2_178D T_17D2_178E T_17D2_178F T_17D2_1790 T_17D2_1791 T_17D2_1792 T_17D2_1793 T_17D2_1794 T_17D2_1795 T_17D2_1796 T_17D2_1797 T_17D2_1798 T_17D2_1799 T_17D2_179A T_17D2_179B T_17D2_179C T_17D2_179D T_17D2_179E T_17D2_179F T_17D2_17A0 T_17D2_17A1 T_17D2_17A2 U_0030 U_0031 U_0032 U_0033 U_0034 U_0035 U_0036 U_0037 U_0038 U_0039";
+ this.KVKL={
+ "tablet": {
+ "displayUnderlying": false,
+ "layer": [
+ {
+ "id": "default",
+ "row": [
+ {
+ "id": "1",
+ "key": [
+ {
+ "id": "K_1",
+ "text": "១"
+ },
+ {
+ "id": "K_2",
+ "text": "២"
+ },
+ {
+ "id": "K_3",
+ "text": "៣"
+ },
+ {
+ "id": "K_4",
+ "text": "៤"
+ },
+ {
+ "id": "K_5",
+ "text": "៥"
+ },
+ {
+ "id": "K_6",
+ "text": "៦"
+ },
+ {
+ "id": "K_7",
+ "text": "៧"
+ },
+ {
+ "id": "K_8",
+ "text": "៨"
+ },
+ {
+ "id": "K_9",
+ "text": "៩"
+ },
+ {
+ "id": "K_0",
+ "text": "០"
+ },
+ {
+ "id": "K_HYPHEN",
+ "text": "ឥ"
+ },
+ {
+ "id": "K_EQUAL",
+ "text": "ឲ"
+ },
+ {
+ "id": "K_BKSP",
+ "text": "*BkSp*",
+ "width": "100",
+ "sp": "1"
+ }
+ ]
+ },
+ {
+ "id": "2",
+ "key": [
+ {
+ "id": "K_Q",
+ "text": "ឆ",
+ "pad": "75"
+ },
+ {
+ "id": "K_W",
+ "text": ""
+ },
+ {
+ "id": "K_E",
+ "text": ""
+ },
+ {
+ "id": "K_R",
+ "text": "រ"
+ },
+ {
+ "id": "K_T",
+ "text": "ត"
+ },
+ {
+ "id": "K_Y",
+ "text": "យ"
+ },
+ {
+ "id": "K_U",
+ "text": ""
+ },
+ {
+ "id": "K_I",
+ "text": ""
+ },
+ {
+ "id": "K_O",
+ "text": ""
+ },
+ {
+ "id": "K_P",
+ "text": "ផ"
+ },
+ {
+ "id": "K_LBRKT",
+ "text": ""
+ },
+ {
+ "id": "K_RBRKT",
+ "text": "ឪ"
+ },
+ {
+ "id": "T_new_138",
+ "width": "10",
+ "sp": "10"
+ }
+ ]
+ },
+ {
+ "id": "3",
+ "key": [
+ {
+ "id": "K_BKQUOTE",
+ "text": "«"
+ },
+ {
+ "id": "K_A",
+ "text": ""
+ },
+ {
+ "id": "K_S",
+ "text": "ស"
+ },
+ {
+ "id": "K_D",
+ "text": "ដ"
+ },
+ {
+ "id": "K_F",
+ "text": "ថ"
+ },
+ {
+ "id": "K_G",
+ "text": "ង"
+ },
+ {
+ "id": "K_H",
+ "text": "ហ"
+ },
+ {
+ "id": "K_J",
+ "text": ""
+ },
+ {
+ "id": "K_K",
+ "text": "ក"
+ },
+ {
+ "id": "K_L",
+ "text": "ល"
+ },
+ {
+ "id": "K_COLON",
+ "text": ""
+ },
+ {
+ "id": "K_QUOTE",
+ "text": ""
+ },
+ {
+ "id": "K_BKSLASH",
+ "text": "ឮ"
+ }
+ ]
+ },
+ {
+ "id": "4",
+ "key": [
+ {
+ "id": "K_SHIFT",
+ "text": "*Shift*",
+ "width": "160",
+ "sp": "1",
+ "nextlayer": "shift"
+ },
+ {
+ "id": "K_oE2"
+ },
+ {
+ "id": "K_Z",
+ "text": "ឋ"
+ },
+ {
+ "id": "K_X",
+ "text": "ខ"
+ },
+ {
+ "id": "K_C",
+ "text": "ច"
+ },
+ {
+ "id": "K_V",
+ "text": "វ"
+ },
+ {
+ "id": "K_B",
+ "text": "ប"
+ },
+ {
+ "id": "K_N",
+ "text": "ន"
+ },
+ {
+ "id": "K_M",
+ "text": "ម"
+ },
+ {
+ "id": "K_COMMA",
+ "text": ""
+ },
+ {
+ "id": "K_PERIOD",
+ "text": "។"
+ },
+ {
+ "id": "K_SLASH",
+ "text": ""
+ },
+ {
+ "id": "T_new_164",
+ "width": "10",
+ "sp": "10"
+ }
+ ]
+ },
+ {
+ "id": "5",
+ "key": [
+ {
+ "id": "K_LCONTROL",
+ "text": "*AltGr*",
+ "width": "160",
+ "sp": "1",
+ "nextlayer": "rightalt"
+ },
+ {
+ "id": "K_LOPT",
+ "text": "*Menu*",
+ "width": "160",
+ "sp": "1"
+ },
+ {
+ "id": "K_SPACE",
+ "text": "",
+ "width": "930"
+ },
+ {
+ "id": "K_ENTER",
+ "text": "*Enter*",
+ "width": "160",
+ "sp": "1"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "rightalt",
+ "row": [
+ {
+ "id": "1",
+ "key": [
+ {
+ "id": "K_1",
+ "text": ""
+ },
+ {
+ "id": "K_2",
+ "text": "@"
+ },
+ {
+ "id": "K_3",
+ "text": ""
+ },
+ {
+ "id": "K_4",
+ "text": "$"
+ },
+ {
+ "id": "K_5",
+ "text": "€"
+ },
+ {
+ "id": "K_6",
+ "text": "៙"
+ },
+ {
+ "id": "K_7",
+ "text": "៚"
+ },
+ {
+ "id": "K_8",
+ "text": "*"
+ },
+ {
+ "id": "K_9",
+ "text": "{"
+ },
+ {
+ "id": "K_0",
+ "text": "}"
+ },
+ {
+ "id": "K_HYPHEN",
+ "text": "≈"
+ },
+ {
+ "id": "K_EQUAL",
+ "text": ""
+ },
+ {
+ "id": "K_BKSP",
+ "text": "*BkSp*",
+ "width": "100",
+ "sp": "1"
+ }
+ ]
+ },
+ {
+ "id": "2",
+ "key": [
+ {
+ "id": "K_Q",
+ "text": "ៜ",
+ "pad": "75"
+ },
+ {
+ "id": "K_W",
+ "text": ""
+ },
+ {
+ "id": "K_E",
+ "text": "ឯ"
+ },
+ {
+ "id": "K_R",
+ "text": "ឫ"
+ },
+ {
+ "id": "K_T",
+ "text": "ឨ"
+ },
+ {
+ "id": "K_Y",
+ "text": "["
+ },
+ {
+ "id": "K_U",
+ "text": "]"
+ },
+ {
+ "id": "K_I",
+ "text": "ឦ"
+ },
+ {
+ "id": "K_O",
+ "text": "ឱ"
+ },
+ {
+ "id": "K_P",
+ "text": "ឰ"
+ },
+ {
+ "id": "K_LBRKT",
+ "text": "ឩ"
+ },
+ {
+ "id": "K_RBRKT",
+ "text": "ឳ"
+ },
+ {
+ "id": "T_new_307",
+ "width": "10",
+ "sp": "10"
+ }
+ ]
+ },
+ {
+ "id": "3",
+ "key": [
+ {
+ "id": "K_BKQUOTE",
+ "text": ""
+ },
+ {
+ "id": "K_A",
+ "text": "+"
+ },
+ {
+ "id": "K_S",
+ "text": "-"
+ },
+ {
+ "id": "K_D",
+ "text": "×"
+ },
+ {
+ "id": "K_F",
+ "text": "÷"
+ },
+ {
+ "id": "K_G",
+ "text": ":"
+ },
+ {
+ "id": "K_H",
+ "text": "‘"
+ },
+ {
+ "id": "K_J",
+ "text": "’"
+ },
+ {
+ "id": "K_K",
+ "text": "ឝ"
+ },
+ {
+ "id": "K_L",
+ "text": "៘"
+ },
+ {
+ "id": "K_COLON",
+ "text": "៖"
+ },
+ {
+ "id": "K_QUOTE",
+ "text": "ៈ"
+ },
+ {
+ "id": "K_BKSLASH",
+ "text": "\\"
+ }
+ ]
+ },
+ {
+ "id": "4",
+ "key": [
+ {
+ "id": "K_SHIFT",
+ "text": "*Shift*",
+ "width": "160",
+ "sp": "1",
+ "nextlayer": "shift"
+ },
+ {
+ "id": "K_oE2"
+ },
+ {
+ "id": "K_Z",
+ "text": "<"
+ },
+ {
+ "id": "K_X",
+ "text": ">"
+ },
+ {
+ "id": "K_C",
+ "text": "#"
+ },
+ {
+ "id": "K_V",
+ "text": "&"
+ },
+ {
+ "id": "K_B",
+ "text": "ឞ"
+ },
+ {
+ "id": "K_N",
+ "text": ";"
+ },
+ {
+ "id": "K_M",
+ "text": ""
+ },
+ {
+ "id": "K_COMMA",
+ "text": ","
+ },
+ {
+ "id": "K_PERIOD",
+ "text": "."
+ },
+ {
+ "id": "K_SLASH",
+ "text": "/"
+ },
+ {
+ "id": "T_new_333",
+ "width": "10",
+ "sp": "10"
+ }
+ ]
+ },
+ {
+ "id": "5",
+ "key": [
+ {
+ "id": "K_LCONTROL",
+ "text": "*AltGr*",
+ "width": "160",
+ "sp": "2",
+ "nextlayer": "default"
+ },
+ {
+ "id": "K_LOPT",
+ "text": "*Menu*",
+ "width": "160",
+ "sp": "1"
+ },
+ {
+ "id": "K_SPACE",
+ "text": " ",
+ "width": "930"
+ },
+ {
+ "id": "K_ENTER",
+ "text": "*Enter*",
+ "width": "160",
+ "sp": "1"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "shift",
+ "row": [
+ {
+ "id": "1",
+ "key": [
+ {
+ "id": "K_1",
+ "text": "!"
+ },
+ {
+ "id": "K_2",
+ "text": "ៗ"
+ },
+ {
+ "id": "K_3",
+ "text": "\""
+ },
+ {
+ "id": "K_4",
+ "text": "៛"
+ },
+ {
+ "id": "K_5",
+ "text": "%"
+ },
+ {
+ "id": "K_6",
+ "text": ""
+ },
+ {
+ "id": "K_7",
+ "text": ""
+ },
+ {
+ "id": "K_8",
+ "text": ""
+ },
+ {
+ "id": "K_9",
+ "text": "("
+ },
+ {
+ "id": "K_0",
+ "text": ")"
+ },
+ {
+ "id": "K_HYPHEN",
+ "text": ""
+ },
+ {
+ "id": "K_EQUAL",
+ "text": "="
+ },
+ {
+ "id": "K_BKSP",
+ "text": "*BkSp*",
+ "width": "100",
+ "sp": "1"
+ }
+ ]
+ },
+ {
+ "id": "2",
+ "key": [
+ {
+ "id": "K_Q",
+ "text": "ឈ",
+ "pad": "75"
+ },
+ {
+ "id": "K_W",
+ "text": ""
+ },
+ {
+ "id": "K_E",
+ "text": ""
+ },
+ {
+ "id": "K_R",
+ "text": "ឬ"
+ },
+ {
+ "id": "K_T",
+ "text": "ទ"
+ },
+ {
+ "id": "K_Y",
+ "text": ""
+ },
+ {
+ "id": "K_U",
+ "text": ""
+ },
+ {
+ "id": "K_I",
+ "text": ""
+ },
+ {
+ "id": "K_O",
+ "text": ""
+ },
+ {
+ "id": "K_P",
+ "text": "ភ"
+ },
+ {
+ "id": "K_LBRKT",
+ "text": ""
+ },
+ {
+ "id": "K_RBRKT",
+ "text": "ឧ"
+ },
+ {
+ "id": "T_new_364",
+ "width": "10",
+ "sp": "10"
+ }
+ ]
+ },
+ {
+ "id": "3",
+ "key": [
+ {
+ "id": "K_BKQUOTE",
+ "text": "»"
+ },
+ {
+ "id": "K_A",
+ "text": ""
+ },
+ {
+ "id": "K_S",
+ "text": ""
+ },
+ {
+ "id": "K_D",
+ "text": "ឌ"
+ },
+ {
+ "id": "K_F",
+ "text": "ធ"
+ },
+ {
+ "id": "K_G",
+ "text": "អ"
+ },
+ {
+ "id": "K_H",
+ "text": "ះ"
+ },
+ {
+ "id": "K_J",
+ "text": "ញ"
+ },
+ {
+ "id": "K_K",
+ "text": "គ"
+ },
+ {
+ "id": "K_L",
+ "text": "ឡ"
+ },
+ {
+ "id": "K_COLON",
+ "text": ""
+ },
+ {
+ "id": "K_QUOTE",
+ "text": ""
+ },
+ {
+ "id": "K_BKSLASH",
+ "text": "ឭ"
+ }
+ ]
+ },
+ {
+ "id": "4",
+ "key": [
+ {
+ "id": "K_SHIFT",
+ "text": "*Shift*",
+ "width": "160",
+ "sp": "2",
+ "nextlayer": "default"
+ },
+ {
+ "id": "K_oE2"
+ },
+ {
+ "id": "K_Z",
+ "text": "ឍ"
+ },
+ {
+ "id": "K_X",
+ "text": "ឃ"
+ },
+ {
+ "id": "K_C",
+ "text": "ជ"
+ },
+ {
+ "id": "K_V",
+ "text": ""
+ },
+ {
+ "id": "K_B",
+ "text": "ព"
+ },
+ {
+ "id": "K_N",
+ "text": "ណ"
+ },
+ {
+ "id": "K_M",
+ "text": ""
+ },
+ {
+ "id": "K_COMMA",
+ "text": ""
+ },
+ {
+ "id": "K_PERIOD",
+ "text": "៕"
+ },
+ {
+ "id": "K_SLASH",
+ "text": "?"
+ },
+ {
+ "id": "T_new_390",
+ "width": "10",
+ "sp": "10"
+ }
+ ]
+ },
+ {
+ "id": "5",
+ "key": [
+ {
+ "id": "K_LCONTROL",
+ "text": "*AltGr*",
+ "width": "160",
+ "sp": "1",
+ "nextlayer": "rightalt"
+ },
+ {
+ "id": "K_LOPT",
+ "text": "*Menu*",
+ "width": "160",
+ "sp": "1"
+ },
+ {
+ "id": "K_SPACE",
+ "width": "930"
+ },
+ {
+ "id": "K_ENTER",
+ "text": "*Enter*",
+ "width": "160",
+ "sp": "1"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "font": "Khmer Busra Kbd",
+ "fontsize": "0.8em"
+ },
+ "phone": {
+ "layer": [
+ {
+ "id": "default",
+ "row": [
+ {
+ "id": "1",
+ "key": [
+ {
+ "id": "K_Q",
+ "text": "ឆ",
+ "sk": [
+ {
+ "text": "ឈ",
+ "id": "K_Q",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1786"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1788"
+ }
+ ]
+ },
+ {
+ "id": "K_W",
+ "text": "",
+ "sk": [
+ {
+ "text": "",
+ "id": "K_W",
+ "layer": "shift"
+ }
+ ]
+ },
+ {
+ "id": "K_E",
+ "text": "",
+ "sk": [
+ {
+ "text": "",
+ "id": "K_E",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "K_S",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "K_V",
+ "layer": "shift"
+ },
+ {
+ "text": "ឯ",
+ "id": "U_17AF"
+ },
+ {
+ "text": "ឰ",
+ "id": "U_17B0"
+ }
+ ]
+ },
+ {
+ "id": "K_R",
+ "text": "រ",
+ "sk": [
+ {
+ "text": "",
+ "id": "T_17D2_179A"
+ },
+ {
+ "text": "ឫ",
+ "id": "U_17AB"
+ },
+ {
+ "text": "ឬ",
+ "id": "U_17AC"
+ }
+ ]
+ },
+ {
+ "id": "K_T",
+ "text": "ត",
+ "sk": [
+ {
+ "text": "ទ",
+ "id": "K_T",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_178F"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1791",
+ "layer": "default"
+ }
+ ]
+ },
+ {
+ "id": "K_Y",
+ "text": "យ",
+ "sk": [
+ {
+ "text": "",
+ "id": "T_17D2_1799"
+ }
+ ]
+ },
+ {
+ "id": "K_U",
+ "text": "",
+ "sk": [
+ {
+ "text": "",
+ "id": "K_U",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "K_Y",
+ "layer": "shift"
+ },
+ {
+ "text": "ឧ",
+ "id": "U_17A7"
+ },
+ {
+ "text": "ឪ",
+ "id": "U_17AA",
+ "layer": "shift"
+ },
+ {
+ "text": "ឩ",
+ "id": "U_17A9",
+ "layer": "shift"
+ },
+ {
+ "text": "ឨ",
+ "id": "U_17A8"
+ }
+ ]
+ },
+ {
+ "id": "K_I",
+ "text": "",
+ "sk": [
+ {
+ "text": "",
+ "id": "K_I",
+ "layer": "shift"
+ },
+ {
+ "text": "ឥ",
+ "id": "U_17A5"
+ },
+ {
+ "text": "ឦ",
+ "id": "U_17A6",
+ "layer": "shift"
+ }
+ ]
+ },
+ {
+ "id": "K_O",
+ "text": "",
+ "sk": [
+ {
+ "text": "",
+ "id": "K_O",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "K_LBRKT"
+ },
+ {
+ "text": "",
+ "id": "K_LBRKT",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "K_COLON",
+ "layer": "shift"
+ },
+ {
+ "text": "ឱ",
+ "id": "U_17B1"
+ },
+ {
+ "text": "ឲ",
+ "id": "U_17B2"
+ },
+ {
+ "text": "ឳ",
+ "id": "U_17B3",
+ "layer": "shift"
+ }
+ ]
+ },
+ {
+ "id": "K_P",
+ "text": "ផ",
+ "sk": [
+ {
+ "text": "ភ",
+ "id": "K_P",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1795"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1797",
+ "layer": "default"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "2",
+ "key": [
+ {
+ "id": "K_A",
+ "text": "",
+ "width": "100",
+ "sk": [
+ {
+ "text": "",
+ "id": "K_A",
+ "layer": "shift"
+ }
+ ]
+ },
+ {
+ "id": "K_S",
+ "text": "ស",
+ "sk": [
+ {
+ "text": "",
+ "id": "T_17D2_179F"
+ },
+ {
+ "text": "ឝ",
+ "id": "U_179D"
+ },
+ {
+ "text": "ឞ",
+ "id": "U_179E"
+ }
+ ]
+ },
+ {
+ "id": "K_D",
+ "text": "ដ",
+ "sk": [
+ {
+ "text": "ឌ",
+ "id": "K_D",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_178A"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_178C",
+ "layer": "default"
+ }
+ ]
+ },
+ {
+ "id": "K_F",
+ "text": "ថ",
+ "sk": [
+ {
+ "text": "ធ",
+ "id": "K_F",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1790"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1792",
+ "layer": "default"
+ }
+ ]
+ },
+ {
+ "id": "K_G",
+ "text": "ង",
+ "sk": [
+ {
+ "text": "អ",
+ "id": "K_G",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1784"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_17A2",
+ "layer": "default"
+ }
+ ]
+ },
+ {
+ "id": "K_H",
+ "text": "ហ",
+ "sk": [
+ {
+ "text": "",
+ "id": "T_17D2_17A0"
+ },
+ {
+ "text": "ះ",
+ "id": "K_H",
+ "layer": "shift"
+ },
+ {
+ "text": "ៈ",
+ "id": "U_17C8"
+ }
+ ]
+ },
+ {
+ "id": "K_J",
+ "text": "ញ",
+ "layer": "shift",
+ "sk": [
+ {
+ "text": "",
+ "id": "T_17D2_1789"
+ }
+ ]
+ },
+ {
+ "id": "K_K",
+ "text": "ក",
+ "sk": [
+ {
+ "text": "គ",
+ "id": "K_K",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1780"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1782"
+ }
+ ]
+ },
+ {
+ "id": "K_L",
+ "text": "ល",
+ "sk": [
+ {
+ "text": "ឡ",
+ "id": "K_L",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_179B"
+ },
+ {
+ "text": "ឭ",
+ "id": "U_17AD"
+ },
+ {
+ "text": "ឮ",
+ "id": "U_17AE"
+ }
+ ]
+ },
+ {
+ "id": "K_COLON",
+ "text": ""
+ }
+ ]
+ },
+ {
+ "id": "3",
+ "key": [
+ {
+ "id": "K_Z",
+ "text": "ឋ",
+ "sk": [
+ {
+ "text": "ឍ",
+ "id": "K_Z",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_178B"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_178D",
+ "layer": "default"
+ }
+ ]
+ },
+ {
+ "id": "K_X",
+ "text": "ខ",
+ "sk": [
+ {
+ "text": "ឃ",
+ "id": "K_X",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1781"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1783",
+ "layer": "default"
+ }
+ ]
+ },
+ {
+ "id": "K_C",
+ "text": "ច",
+ "sk": [
+ {
+ "text": "ជ",
+ "id": "K_C",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1785"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1787",
+ "layer": "default"
+ }
+ ]
+ },
+ {
+ "id": "K_V",
+ "text": "វ",
+ "sk": [
+ {
+ "text": "",
+ "id": "T_17D2_179C"
+ }
+ ]
+ },
+ {
+ "id": "K_B",
+ "text": "ប",
+ "sk": [
+ {
+ "text": "ព",
+ "id": "K_B",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1794"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1796",
+ "layer": "default"
+ }
+ ]
+ },
+ {
+ "id": "K_N",
+ "text": "ន",
+ "sk": [
+ {
+ "text": "ណ",
+ "id": "K_N",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_1793"
+ },
+ {
+ "text": "",
+ "id": "T_17D2_178E",
+ "layer": "default"
+ }
+ ]
+ },
+ {
+ "id": "K_M",
+ "text": "ម",
+ "sk": [
+ {
+ "text": "",
+ "id": "T_17D2_1798"
+ },
+ {
+ "text": "",
+ "id": "K_M",
+ "layer": "shift"
+ }
+ ]
+ },
+ {
+ "id": "K_COMMA",
+ "text": "",
+ "sk": [
+ {
+ "text": "",
+ "id": "K_COMMA",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "K_6",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "K_7",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "K_8",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "K_HYPHEN",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "U_17D1",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "U_17DD",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "U_17CE",
+ "layer": "shift"
+ }
+ ]
+ },
+ {
+ "id": "K_QUOTE",
+ "text": "",
+ "width": "100",
+ "sk": [
+ {
+ "text": "",
+ "id": "K_QUOTE",
+ "layer": "shift"
+ },
+ {
+ "text": "",
+ "id": "K_SLASH"
+ }
+ ]
+ },
+ {
+ "id": "K_BKSP",
+ "text": "*BkSp*",
+ "width": "100",
+ "sp": "1"
+ }
+ ]
+ },
+ {
+ "id": "4",
+ "key": [
+ {
+ "id": "K_NUMLOCK",
+ "text": "១២៣",
+ "width": "140",
+ "sp": "1",
+ "nextlayer": "numeric"
+ },
+ {
+ "id": "K_LOPT",
+ "text": "*Menu*",
+ "width": "120",
+ "sp": "1"
+ },
+ {
+ "id": "K_SPACE",
+ "text": "",
+ "width": "555",
+ "sk": [
+ {
+ "text": " ",
+ "id": "U_0020",
+ "layer": "default"
+ }
+ ]
+ },
+ {
+ "id": "K_PERIOD",
+ "text": "។",
+ "width": "120",
+ "sk": [
+ {
+ "text": "៕",
+ "id": "K_PERIOD",
+ "layer": "shift"
+ },
+ {
+ "text": "!",
+ "id": "U_0021"
+ },
+ {
+ "text": "?",
+ "id": "U_003F"
+ }
+ ]
+ },
+ {
+ "id": "K_ENTER",
+ "text": "*Enter*",
+ "width": "140",
+ "sp": "1"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "numeric",
+ "row": [
+ {
+ "id": "1",
+ "key": [
+ {
+ "id": "K_1",
+ "text": "១",
+ "sk": [
+ {
+ "text": "1",
+ "id": "U_0031"
+ }
+ ]
+ },
+ {
+ "id": "K_2",
+ "text": "២",
+ "sk": [
+ {
+ "text": "2",
+ "id": "U_0032"
+ }
+ ]
+ },
+ {
+ "id": "K_3",
+ "text": "៣",
+ "sk": [
+ {
+ "text": "3",
+ "id": "U_0033"
+ }
+ ]
+ },
+ {
+ "id": "K_4",
+ "text": "៤",
+ "sk": [
+ {
+ "text": "4",
+ "id": "U_0034"
+ }
+ ]
+ },
+ {
+ "id": "K_5",
+ "text": "៥",
+ "sk": [
+ {
+ "text": "5",
+ "id": "U_0035"
+ }
+ ]
+ },
+ {
+ "id": "K_6",
+ "text": "៦",
+ "sk": [
+ {
+ "text": "6",
+ "id": "U_0036"
+ }
+ ]
+ },
+ {
+ "id": "K_7",
+ "text": "៧",
+ "sk": [
+ {
+ "text": "7",
+ "id": "U_0037"
+ }
+ ]
+ },
+ {
+ "id": "K_8",
+ "text": "៨",
+ "sk": [
+ {
+ "text": "8",
+ "id": "U_0038"
+ }
+ ]
+ },
+ {
+ "id": "K_9",
+ "text": "៩",
+ "sk": [
+ {
+ "text": "9",
+ "id": "U_0039"
+ }
+ ]
+ },
+ {
+ "id": "K_0",
+ "text": "០",
+ "sk": [
+ {
+ "text": "0",
+ "id": "U_0030"
+ },
+ {
+ "text": "",
+ "id": "U_17D3"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "2",
+ "key": [
+ {
+ "id": "U_0040",
+ "text": "@",
+ "sk": [
+ {
+ "text": "©",
+ "id": "U_00A9"
+ },
+ {
+ "text": "®",
+ "id": "U_00AE"
+ }
+ ]
+ },
+ {
+ "id": "U_0023",
+ "text": "#",
+ "sk": [
+ {
+ "text": "№",
+ "id": "U_2116"
+ },
+ {
+ "text": "~",
+ "id": "U_007E"
+ }
+ ]
+ },
+ {
+ "id": "U_17DB",
+ "text": "៛",
+ "sk": [
+ {
+ "text": "$",
+ "id": "U_0024"
+ },
+ {
+ "text": "฿",
+ "id": "U_0E3F"
+ },
+ {
+ "text": "¢",
+ "id": "U_00A2"
+ },
+ {
+ "text": "£",
+ "id": "U_00A3"
+ },
+ {
+ "text": "¥",
+ "id": "U_00A5"
+ }
+ ]
+ },
+ {
+ "id": "U_0026",
+ "text": "&"
+ },
+ {
+ "id": "U_0025",
+ "text": "%",
+ "sk": [
+ {
+ "text": "‰",
+ "id": "U_2030"
+ },
+ {
+ "text": "‱",
+ "id": "U_2031"
+ }
+ ]
+ },
+ {
+ "id": "U_002B",
+ "text": "+",
+ "sk": [
+ {
+ "text": "-",
+ "id": "U_002D"
+ },
+ {
+ "text": "×",
+ "id": "U_00D7"
+ },
+ {
+ "text": "÷",
+ "id": "U_00F7"
+ },
+ {
+ "text": "±",
+ "id": "U_00B1"
+ }
+ ]
+ },
+ {
+ "id": "U_003D",
+ "text": "=",
+ "sk": [
+ {
+ "text": "_",
+ "id": "U_005F"
+ },
+ {
+ "text": "≠",
+ "id": "U_2260"
+ }
+ ]
+ },
+ {
+ "id": "U_002A",
+ "text": "*",
+ "sk": [
+ {
+ "text": "^",
+ "id": "U_005E"
+ }
+ ]
+ },
+ {
+ "id": "U_003F",
+ "text": "?",
+ "sk": [
+ {
+ "text": "¿",
+ "id": "U_00BF"
+ }
+ ]
+ },
+ {
+ "id": "U_0021",
+ "text": "!",
+ "sk": [
+ {
+ "text": "¡",
+ "id": "U_00A1"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "3",
+ "key": [
+ {
+ "id": "U_2018",
+ "text": "‘",
+ "sk": [
+ {
+ "text": "’",
+ "id": "U_2019"
+ }
+ ]
+ },
+ {
+ "id": "U_201C",
+ "text": "“",
+ "sk": [
+ {
+ "text": "”",
+ "id": "U_201D"
+ }
+ ]
+ },
+ {
+ "id": "U_00AB",
+ "text": "«",
+ "sk": [
+ {
+ "text": "»",
+ "id": "U_00BB"
+ }
+ ]
+ },
+ {
+ "id": "U_002F",
+ "text": "/",
+ "sk": [
+ {
+ "text": "\\",
+ "id": "U_005C"
+ },
+ {
+ "text": "|",
+ "id": "U_007C"
+ },
+ {
+ "text": "¦",
+ "id": "U_00A6"
+ }
+ ]
+ },
+ {
+ "id": "U_0028",
+ "text": "(",
+ "sk": [
+ {
+ "text": ")",
+ "id": "U_0029"
+ },
+ {
+ "text": "[",
+ "id": "U_005B"
+ },
+ {
+ "text": "]",
+ "id": "U_005D"
+ },
+ {
+ "text": "{",
+ "id": "U_007B"
+ },
+ {
+ "text": "}",
+ "id": "U_007D"
+ }
+ ]
+ },
+ {
+ "id": "U_17D9",
+ "text": "៙",
+ "sk": [
+ {
+ "text": "៚",
+ "id": "U_17DA"
+ },
+ {
+ "text": "ៜ",
+ "id": "U_17DC"
+ },
+ {
+ "text": "§",
+ "id": "U_00A7"
+ },
+ {
+ "text": "Ø",
+ "id": "U_00D8"
+ }
+ ]
+ },
+ {
+ "id": "U_17D7",
+ "text": "ៗ"
+ },
+ {
+ "id": "U_003C",
+ "text": "<",
+ "sk": [
+ {
+ "text": "≤",
+ "id": "U_2264"
+ },
+ {
+ "text": ">",
+ "id": "U_003E"
+ },
+ {
+ "text": "≥",
+ "id": "U_2265"
+ }
+ ]
+ },
+ {
+ "id": "U_17D6",
+ "text": "៖",
+ "sk": [
+ {
+ "text": ":",
+ "id": "U_003A"
+ },
+ {
+ "text": ";",
+ "id": "U_003B"
+ },
+ {
+ "text": "…",
+ "id": "U_2026"
+ }
+ ]
+ },
+ {
+ "id": "K_BKSP",
+ "text": "*BkSp*",
+ "sp": "1"
+ }
+ ]
+ },
+ {
+ "id": "4",
+ "key": [
+ {
+ "id": "K_LCONTROL",
+ "text": "១២៣",
+ "width": "140",
+ "sp": "2",
+ "nextlayer": "default"
+ },
+ {
+ "id": "K_LOPT",
+ "text": "*Menu*",
+ "width": "120",
+ "sp": "1"
+ },
+ {
+ "id": "K_SPACE",
+ "text": "",
+ "width": "555",
+ "layer": "shift"
+ },
+ {
+ "id": "K_PERIOD",
+ "text": "។",
+ "width": "120",
+ "sk": [
+ {
+ "text": "៕",
+ "id": "K_PERIOD",
+ "layer": "shift"
+ },
+ {
+ "text": "!",
+ "id": "U_0021"
+ },
+ {
+ "text": "?",
+ "id": "U_003F"
+ }
+ ]
+ },
+ {
+ "id": "K_ENTER",
+ "text": "*Enter*",
+ "width": "140",
+ "sp": "1"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "displayUnderlying": false,
+ "font": "Khmer Busra Kbd",
+ "fontsize": "0.8em"
+ }
+};
+ this.s_c_key_11=['','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',''];
+ this.s_c_out_12="កខគឃងចឆជឈញដឋឌឍណតថទធនបផពភមយរលវសហឡអឝឞ";
+ this.s_v_gen_key_13=['','','','','','','','','','','','','','','',''];
+ this.s_v_gen_14="ាិីឹឺុូួើឿៀេែៃោៅ";
+ this.s_v_pseudo_key_15=['','',''];
+ this.s_v_pseudo_16="ំះៈ";
+ this.s_v_key_17=['','','','','','','','','','','','','','','','','','',''];
+ this.s_v_out_18="ាិីឹឺុូួើឿៀេែៃោៅំះៈ";
+ this.s_v_any_19="ាិីឹឺុូួើឿៀេែៃោៅំះៈ";
+ this.s_v_combo_R_20="េោុិីឹែ";
+ this.s_v_combo_N_21="ាុ";
+ this.s_v_combo_22="េោុិីឹែាុ";
+ this.s_ind_v_key_23=['','','','','','','','','','','','','','',''];
+ this.s_ind_v_out_24="ឥឦឧឨឩឪឫឬឭឮឯឰឱឲឳ";
+ this.s_diacritic_key_25=['','','','','','','','','','',''];
+ this.s_diacritic_out_26="់័៌៏៍ៈ៎៑៝ៜ្";
+ this.s_c_shifter_key_27=['',''];
+ this.s_c_shifter_28="៉៊";
+ this.s_punct_key_29=['','','','','','','',''];
+ this.s_punct_out_30="។៕៖ៗ៘៙៚៓";
+ this.s_latin_punct_key_31=['','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',''];
+ this.s_latin_punct_out_32="«»()!\"%=?{}\\@*,×./[]+-÷:≈‘’;<>#&";
+ this.s_spaces_key_33=['','',''];
+ this.s_spaces_out_34=" ";
+ this.s_currency_key_35=['','',''];
+ this.s_currency_out_36="៛$€";
+ this.s_digit_key_37=['','','','','','','','','',''];
+ this.s_digit_out_38="០១២៣៤៥៦៧៨៩";
+ this.s_lek_attak_key_39=['','','','','','','','','',''];
+ this.s_lek_attak_out_40="៰៱៲៳៴៵៶៷៸៹";
+ this.s_lunar_date_key_41=['','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',''];
+ this.s_lunar_date_out_42="᧬᧻᧹᧮᧢᧯᧰᧱᧧᧲᧳᧴᧽᧼᧨᧩᧠᧣᧭᧤᧦᧺᧡᧸᧥᧷᧵᧾᧿᧪᧫᧶";
+ this.s_input_subcons_43=['','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',''];
+ this.s_subcons_44="កខគឃងចឆជឈញដឋឌឍណតថទធនបផពភមយរលវឝឞសហឡអ";
+ this.s_arabic_digit_key_45=['','','','','','','','','',''];
+ this.s_arabic_digit_out_46="0123456789";
+ this.s_v_above_47="ិីឹឺើ័";
+ this.s_shiftable_c_1st_48="សហអ";
+ this.s_shiftable_BA_49="ប";
+ this.s_shiftable_c_2nd_50="ងញមយរវនល";
+ this.s_shiftable_c_2nd_with_BA_51="ងញមយរវនលប";
+ this.s_c_2nd_combo_LO_52="យមងបវ";
+ this.s_c_2nd_combo_MO_53="យលងរ";
+ this.s_c_1st_combo_LO_54="បហអ";
+ this.s_c_1st_combo_MO_55="ហសអ";
+ this.s_c_combo_SA_56="បយលមនញងរវអ";
+ this.s_c_combo_QA_57="ឆឈបផតទ";
+ this.s_c_combo_HA_58="វឣ";
+ this.s62="touch";
+ this.KVS=[];
+ this.gs=function(t,e) {
+ return this.g_main_0(t,e);
+ };
+ this.gs=function(t,e) {
+ return this.g_main_0(t,e);
+ };
+ this.g_main_0=function(t,e) {
+ var k=KeymanWeb,r=0,m=0;
+ if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_BKSP /* 0x08 */)) {
+ if(k.KFCM(2,t,['្',{t:'a',a:this.s_c_out_12}])&&k.KIFS(31,this.s62,t)){
+ r=m=1; // Line 266
+ k.KDC(2,t);
+ }
+ else if(k.KFCM(2,t,[{t:'a',a:this.s_v_combo_N_21},'ំ'])){
+ r=m=1; // Line 229
+ k.KDC(2,t);
+ }
+ else if(k.KFCM(2,t,[{t:'a',a:this.s_v_combo_R_20},'ះ'])){
+ r=m=1; // Line 230
+ k.KDC(2,t);
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_B /* 0x42 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ឞ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_K /* 0x4B */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ឝ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_QUOTE /* 0xDE */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ៈ");
+ }
+ else if(1){
+ r=m=1; // Line 191
+ k.KDC(0,t);
+ k.KO(-1,t,"ៈ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_E /* 0x45 */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឯ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_I /* 0x49 */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឦ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_O /* 0x4F */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឱ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_P /* 0x50 */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឰ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_R /* 0x52 */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឫ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_T /* 0x54 */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឨ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_LBRKT /* 0xDB */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឩ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_RBRKT /* 0xDD */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឳ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_3 /* 0x33 */)) {
+ if(1){
+ r=m=1; // Line 191
+ k.KDC(0,t);
+ k.KO(-1,t,"៑");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_Q /* 0x51 */)) {
+ if(1){
+ r=m=1; // Line 191
+ k.KDC(0,t);
+ k.KO(-1,t,"ៜ");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_W /* 0x57 */)) {
+ if(1){
+ r=m=1; // Line 191
+ k.KDC(0,t);
+ k.KO(-1,t,"៝");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_EQUAL /* 0xBB */)) {
+ if(1){
+ r=m=1; // Line 191
+ k.KDC(0,t);
+ k.KO(-1,t,"៎");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_6 /* 0x36 */)) {
+ if(1){
+ r=m=1; // Line 193
+ k.KDC(0,t);
+ k.KO(-1,t,"៙");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_7 /* 0x37 */)) {
+ if(1){
+ r=m=1; // Line 193
+ k.KDC(0,t);
+ k.KO(-1,t,"៚");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_L /* 0x4C */)) {
+ if(1){
+ r=m=1; // Line 193
+ k.KDC(0,t);
+ k.KO(-1,t,"៘");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_M /* 0x4D */)) {
+ if(1){
+ r=m=1; // Line 193
+ k.KDC(0,t);
+ k.KO(-1,t,"៓");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_COLON /* 0xBA */)) {
+ if(1){
+ r=m=1; // Line 193
+ k.KDC(0,t);
+ k.KO(-1,t,"៖");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_0 /* 0x30 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"}");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_1 /* 0x31 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_2 /* 0x32 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"@");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_8 /* 0x38 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"*");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_9 /* 0x39 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"{");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_A /* 0x41 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"+");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_C /* 0x43 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"#");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_D /* 0x44 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"×");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_F /* 0x46 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"÷");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_G /* 0x47 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,":");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_H /* 0x48 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"‘");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_J /* 0x4A */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"’");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_N /* 0x4E */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,";");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_S /* 0x53 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"-");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_U /* 0x55 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"]");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_V /* 0x56 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"&");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_X /* 0x58 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,">");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_Y /* 0x59 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"[");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_Z /* 0x5A */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"<");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_COMMA /* 0xBC */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,",");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_HYPHEN /* 0xBD */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"≈");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_PERIOD /* 0xBE */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,".");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_SLASH /* 0xBF */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"/");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_BKQUOTE /* 0xC0 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_BKSLASH /* 0xDC */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"\\");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_4 /* 0x34 */)) {
+ if(1){
+ r=m=1; // Line 195
+ k.KDC(0,t);
+ k.KO(-1,t,"$");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_5 /* 0x35 */)) {
+ if(1){
+ r=m=1; // Line 195
+ k.KDC(0,t);
+ k.KO(-1,t,"€");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_0 /* 0x30 */)) {
+ if(1){
+ r=m=1; // Line 197
+ k.KDC(0,t);
+ k.KO(-1,t,"៰");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_1 /* 0x31 */)) {
+ if(1){
+ r=m=1; // Line 197
+ k.KDC(0,t);
+ k.KO(-1,t,"៱");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_2 /* 0x32 */)) {
+ if(1){
+ r=m=1; // Line 197
+ k.KDC(0,t);
+ k.KO(-1,t,"៲");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_3 /* 0x33 */)) {
+ if(1){
+ r=m=1; // Line 197
+ k.KDC(0,t);
+ k.KO(-1,t,"៳");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_4 /* 0x34 */)) {
+ if(1){
+ r=m=1; // Line 197
+ k.KDC(0,t);
+ k.KO(-1,t,"៴");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_5 /* 0x35 */)) {
+ if(1){
+ r=m=1; // Line 197
+ k.KDC(0,t);
+ k.KO(-1,t,"៵");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_6 /* 0x36 */)) {
+ if(1){
+ r=m=1; // Line 197
+ k.KDC(0,t);
+ k.KO(-1,t,"៶");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_7 /* 0x37 */)) {
+ if(1){
+ r=m=1; // Line 197
+ k.KDC(0,t);
+ k.KO(-1,t,"៷");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_8 /* 0x38 */)) {
+ if(1){
+ r=m=1; // Line 197
+ k.KDC(0,t);
+ k.KO(-1,t,"៸");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_9 /* 0x39 */)) {
+ if(1){
+ r=m=1; // Line 197
+ k.KDC(0,t);
+ k.KO(-1,t,"៹");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_A /* 0x41 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧬");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_B /* 0x42 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧻");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_C /* 0x43 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧹");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_D /* 0x44 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧮");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_E /* 0x45 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧢");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_F /* 0x46 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧯");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_G /* 0x47 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧰");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_H /* 0x48 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧱");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_I /* 0x49 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧧");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_J /* 0x4A */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧲");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_K /* 0x4B */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧳");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_L /* 0x4C */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧴");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_M /* 0x4D */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧽");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_N /* 0x4E */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧼");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_O /* 0x4F */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧨");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_P /* 0x50 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧩");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_Q /* 0x51 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧠");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_R /* 0x52 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧣");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_S /* 0x53 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧭");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_T /* 0x54 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧤");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_U /* 0x55 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧦");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_V /* 0x56 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧺");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_W /* 0x57 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧡");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_X /* 0x58 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧸");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_Y /* 0x59 */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧥");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_Z /* 0x5A */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧷");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_COLON /* 0xBA */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧵");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_COMMA /* 0xBC */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧾");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_PERIOD /* 0xBE */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧿");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_LBRKT /* 0xDB */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧪");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_RBRKT /* 0xDD */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧫");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_QUOTE /* 0xDE */)) {
+ if(1){
+ r=m=1; // Line 198
+ k.KDC(0,t);
+ k.KO(-1,t,"᧶");
+ }
+ }
+ else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_SPACE /* 0x20 */)) {
+ if(1){
+ r=m=1; // Line 199
+ k.KDC(0,t);
+ k.KO(-1,t," ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x100)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ក");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x101)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ខ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x102)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្គ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x103)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ឃ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x104)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ង");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x105)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ច");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x106)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ឆ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x107)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ជ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x108)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ឈ");
+ }
+ }
+ if(m) {}
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x109)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ញ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x10A)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ដ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x10B)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ឋ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x10C)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ឌ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x10D)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ឍ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x10E)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ណ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x10F)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ត");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x110)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ថ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x111)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ទ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x112)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ធ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x113)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ន");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x114)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ប");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x115)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ផ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x116)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ព");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x117)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ភ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x118)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ម");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x119)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្យ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x11A)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្រ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x11B)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ល");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x11C)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្វ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x11D)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ឝ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x11E)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ឞ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x11F)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ស");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x120)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ហ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x121)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្ឡ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, 0x122)) {
+ if(1){
+ r=m=1; // Line 262
+ k.KDC(0,t);
+ k.KO(-1,t,"្អ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_NPSTAR /* 0x6A */)) {
+ if(1){
+ r=m=1; // Line 268
+ k.KDC(0,t);
+ k.KO(-1,t,"*");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_NPSTAR /* 0x6A */)) {
+ if(1){
+ r=m=1; // Line 269
+ k.KDC(0,t);
+ k.KO(-1,t,"*");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_NPPLUS /* 0x6B */)) {
+ if(1){
+ r=m=1; // Line 270
+ k.KDC(0,t);
+ k.KO(-1,t,"+");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_NPPLUS /* 0x6B */)) {
+ if(1){
+ r=m=1; // Line 271
+ k.KDC(0,t);
+ k.KO(-1,t,"+");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_NPMINUS /* 0x6D */)) {
+ if(1){
+ r=m=1; // Line 272
+ k.KDC(0,t);
+ k.KO(-1,t,"-");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_NPMINUS /* 0x6D */)) {
+ if(1){
+ r=m=1; // Line 273
+ k.KDC(0,t);
+ k.KO(-1,t,"-");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_NPDOT /* 0x6E */)) {
+ if(1){
+ r=m=1; // Line 274
+ k.KDC(0,t);
+ k.KO(-1,t,".");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_NPDOT /* 0x6E */)) {
+ if(1){
+ r=m=1; // Line 275
+ k.KDC(0,t);
+ k.KO(-1,t,".");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_NPSLASH /* 0x6F */)) {
+ if(1){
+ r=m=1; // Line 276
+ k.KDC(0,t);
+ k.KO(-1,t,"/");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_NPSLASH /* 0x6F */)) {
+ if(1){
+ r=m=1; // Line 277
+ k.KDC(0,t);
+ k.KO(-1,t,"/");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_SPACE /* 0x20 */)) {
+ if(k.KFCM(1,t,[''])){
+ r=m=1; // Line 225
+ k.KDC(1,t);
+ k.KO(-1,t," ");
+ }
+ else if(1){
+ r=m=1; // Line 199
+ k.KDC(0,t);
+ k.KO(-1,t,"");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_SPACE /* 0x20 */)) {
+ if(1){
+ r=m=1; // Line 199
+ k.KDC(0,t);
+ k.KO(-1,t," ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_1 /* 0x31 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"!");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_QUOTE /* 0xDE */)) {
+ if(k.KFCM(3,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ'])){
+ r=m=1; // Line 244
+ k.KDC(3,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្អ៉");
+ k.KB(t);
+ }
+ else if(k.KFCM(3,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54}])){
+ r=m=1; // Line 245
+ k.KDC(3,t);
+ k.KO(-1,t,"ល្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៉");
+ k.KB(t);
+ }
+ else if(k.KFCM(3,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55}])){
+ r=m=1; // Line 246
+ k.KDC(3,t);
+ k.KO(-1,t,"ម្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៉");
+ k.KB(t);
+ }
+ else if(k.KFCM(3,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56}])){
+ r=m=1; // Line 247
+ k.KDC(3,t);
+ k.KO(-1,t,"ស្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៉");
+ k.KB(t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ'])){
+ r=m=1; // Line 248
+ k.KDC(3,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្ហ៉");
+ k.KB(t);
+ }
+ else if(k.KFCM(3,t,['អ','្','ង'])){
+ r=m=1; // Line 249
+ k.KDC(3,t);
+ k.KO(-1,t,"អ្ង៉");
+ k.KB(t);
+ }
+ else if(k.KFCM(3,t,['អ','្','វ'])){
+ r=m=1; // Line 250
+ k.KDC(3,t);
+ k.KO(-1,t,"អ្វ៉");
+ k.KB(t);
+ }
+ else if(k.KFCM(1,t,[{t:'a',a:this.s_c_shifter_28}])){
+ r=m=1; // Line 215
+ k.KDC(1,t);
+ k.KIO(-1,this.s_c_shifter_28,1,t);
+ k.KB(t);
+ }
+ else if(k.KFCM(1,t,[{t:'a',a:this.s_shiftable_c_1st_48}])){
+ r=m=1; // Line 239
+ k.KDC(1,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៉");
+ k.KB(t);
+ }
+ else if(1){
+ r=m=1; // Line 192
+ k.KDC(0,t);
+ k.KO(-1,t,"៉");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_3 /* 0x33 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"\"");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_4 /* 0x34 */)) {
+ if(1){
+ r=m=1; // Line 195
+ k.KDC(0,t);
+ k.KO(-1,t,"៛");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_5 /* 0x35 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"%");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_7 /* 0x37 */)) {
+ if(1){
+ r=m=1; // Line 191
+ k.KDC(0,t);
+ k.KO(-1,t,"័");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_QUOTE /* 0xDE */)) {
+ if(k.KFCM(2,t,['្',{t:'a',a:this.s_c_out_12}])){
+ r=m=1; // Line 214
+ k.KDC(2,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_out_12,2,t);
+ k.KB(t);
+ }
+ else if(k.KFCM(1,t,[{t:'a',a:this.s_v_gen_14}])){
+ r=m=1; // Line 211
+ k.KDC(1,t);
+ k.KIO(-1,this.s_v_gen_14,1,t);
+ k.KB(t);
+ }
+ else if(k.KFCM(1,t,[{t:'a',a:this.s_v_pseudo_16}])){
+ r=m=1; // Line 212
+ k.KDC(1,t);
+ k.KIO(-1,this.s_v_pseudo_16,1,t);
+ k.KB(t);
+ }
+ else if(k.KFCM(1,t,[{t:'a',a:this.s_c_shifter_28}])){
+ r=m=1; // Line 213
+ k.KDC(1,t);
+ k.KIO(-1,this.s_c_shifter_28,1,t);
+ k.KB(t);
+ }
+ else if(1){
+ r=m=1; // Line 191
+ k.KDC(0,t);
+ k.KO(-1,t,"់");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_9 /* 0x39 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"(");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_0 /* 0x30 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,")");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_8 /* 0x38 */)) {
+ if(1){
+ r=m=1; // Line 191
+ k.KDC(0,t);
+ k.KO(-1,t,"៏");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_EQUAL /* 0xBB */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"=");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_COMMA /* 0xBC */)) {
+ if(1){
+ r=m=1; // Line 206
+ k.KDC(0,t);
+ k.KO(-1,t,"ុំ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_HYPHEN /* 0xBD */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឥ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_PERIOD /* 0xBE */)) {
+ if(1){
+ r=m=1; // Line 193
+ k.KDC(0,t);
+ k.KO(-1,t,"។");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_SLASH /* 0xBF */)) {
+ if(k.KFCM(3,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52}])){
+ r=m=1; // Line 254
+ k.KDC(3,t);
+ k.KO(-1,t,"ល្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៊");
+ k.KB(t);
+ }
+ else if(k.KFCM(3,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53}])){
+ r=m=1; // Line 255
+ k.KDC(3,t);
+ k.KO(-1,t,"ម្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៊");
+ k.KB(t);
+ }
+ else if(k.KFCM(1,t,[{t:'a',a:this.s_c_shifter_28}])){
+ r=m=1; // Line 215
+ k.KDC(1,t);
+ k.KIO(-1,this.s_c_shifter_28,1,t);
+ k.KB(t);
+ }
+ else if(k.KFCM(1,t,[{t:'a',a:this.s_shiftable_c_2nd_with_BA_51}])){
+ r=m=1; // Line 240
+ k.KDC(1,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,1,t);
+ k.KO(-1,t,"៊");
+ k.KB(t);
+ }
+ else if(1){
+ r=m=1; // Line 192
+ k.KDC(0,t);
+ k.KO(-1,t,"៊");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_0 /* 0x30 */)) {
+ if(1){
+ r=m=1; // Line 196
+ k.KDC(0,t);
+ k.KO(-1,t,"០");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_1 /* 0x31 */)) {
+ if(1){
+ r=m=1; // Line 196
+ k.KDC(0,t);
+ k.KO(-1,t,"១");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_2 /* 0x32 */)) {
+ if(1){
+ r=m=1; // Line 196
+ k.KDC(0,t);
+ k.KO(-1,t,"២");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_3 /* 0x33 */)) {
+ if(1){
+ r=m=1; // Line 196
+ k.KDC(0,t);
+ k.KO(-1,t,"៣");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_4 /* 0x34 */)) {
+ if(1){
+ r=m=1; // Line 196
+ k.KDC(0,t);
+ k.KO(-1,t,"៤");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_5 /* 0x35 */)) {
+ if(1){
+ r=m=1; // Line 196
+ k.KDC(0,t);
+ k.KO(-1,t,"៥");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_6 /* 0x36 */)) {
+ if(1){
+ r=m=1; // Line 196
+ k.KDC(0,t);
+ k.KO(-1,t,"៦");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_7 /* 0x37 */)) {
+ if(1){
+ r=m=1; // Line 196
+ k.KDC(0,t);
+ k.KO(-1,t,"៧");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_8 /* 0x38 */)) {
+ if(1){
+ r=m=1; // Line 196
+ k.KDC(0,t);
+ k.KO(-1,t,"៨");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_9 /* 0x39 */)) {
+ if(1){
+ r=m=1; // Line 196
+ k.KDC(0,t);
+ k.KO(-1,t,"៩");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_COLON /* 0xBA */)) {
+ if(1){
+ r=m=1; // Line 205
+ k.KDC(0,t);
+ k.KO(-1,t,"ោះ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_COLON /* 0xBA */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ើ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_COMMA /* 0xBC */)) {
+ if(1){
+ r=m=1; // Line 207
+ k.KDC(0,t);
+ k.KO(-1,t,"ុះ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_EQUAL /* 0xBB */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឲ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_PERIOD /* 0xBE */)) {
+ if(1){
+ r=m=1; // Line 193
+ k.KDC(0,t);
+ k.KO(-1,t,"៕");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_SLASH /* 0xBF */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"?");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_2 /* 0x32 */)) {
+ if(1){
+ r=m=1; // Line 193
+ k.KDC(0,t);
+ k.KO(-1,t,"ៗ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_A /* 0x41 */)) {
+ if(1){
+ r=m=1; // Line 203
+ k.KDC(0,t);
+ k.KO(-1,t,"ាំ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_B /* 0x42 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ព");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_C /* 0x43 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ជ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_D /* 0x44 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ឌ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_E /* 0x45 */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ែ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_F /* 0x46 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ធ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_G /* 0x47 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"អ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_H /* 0x48 */)) {
+ if(k.KFCM(1,t,['ះ'])){
+ r=m=1; // Line 219
+ k.KDC(1,t);
+ k.KO(-1,t,"ៈ");
+ }
+ else if(k.KFCM(1,t,['ៈ'])){
+ r=m=1; // Line 220
+ k.KDC(1,t);
+ k.KO(-1,t,"ះ");
+ }
+ else if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ះ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_I /* 0x49 */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ី");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_J /* 0x4A */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ញ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_K /* 0x4B */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"គ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_L /* 0x4C */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ឡ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_M /* 0x4D */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ំ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_N /* 0x4E */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ណ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_O /* 0x4F */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ៅ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_P /* 0x50 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ភ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_Q /* 0x51 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ឈ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_R /* 0x52 */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឬ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_S /* 0x53 */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ៃ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_T /* 0x54 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ទ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_U /* 0x55 */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ូ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_V /* 0x56 */)) {
+ if(1){
+ r=m=1; // Line 204
+ k.KDC(0,t);
+ k.KO(-1,t,"េះ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_W /* 0x57 */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ឺ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_X /* 0x58 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ឃ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_Y /* 0x59 */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ួ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_Z /* 0x5A */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ឍ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_LBRKT /* 0xDB */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ៀ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_BKSLASH /* 0xDC */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឮ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_RBRKT /* 0xDD */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឪ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_6 /* 0x36 */)) {
+ if(1){
+ r=m=1; // Line 191
+ k.KDC(0,t);
+ k.KO(-1,t,"៍");
+ }
+ }
+ if(m) {}
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_HYPHEN /* 0xBD */)) {
+ if(1){
+ r=m=1; // Line 191
+ k.KDC(0,t);
+ k.KO(-1,t,"៌");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_BKQUOTE /* 0xC0 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"«");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_A /* 0x41 */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ា");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ប");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_C /* 0x43 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ច");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_D /* 0x44 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ដ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_E /* 0x45 */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"េ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_F /* 0x46 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ថ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_G /* 0x47 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ង");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_H /* 0x48 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ហ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_I /* 0x49 */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ិ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_J /* 0x4A */)) {
+ if(1){
+ r=m=1; // Line 191
+ k.KDC(0,t);
+ k.KO(-1,t,"្");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_K /* 0x4B */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ក");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_L /* 0x4C */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ល");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_M /* 0x4D */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ម");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_N /* 0x4E */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ន");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_O /* 0x4F */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ោ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_P /* 0x50 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ផ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_Q /* 0x51 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ឆ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_R /* 0x52 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"រ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_S /* 0x53 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ស");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_T /* 0x54 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ត");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_U /* 0x55 */)) {
+ if(k.KFCM(3,t,[{t:'a',a:this.s_shiftable_c_1st_48},'ា','ំ'])){
+ r=m=1; // Line 234
+ k.KDC(3,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_shiftable_c_2nd_with_BA_51},'ា','ំ'])){
+ r=m=1; // Line 235
+ k.KDC(3,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,1,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ុ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_V /* 0x56 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"វ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_W /* 0x57 */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ឹ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_X /* 0x58 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ខ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_Y /* 0x59 */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"យ");
+ }
+ }
+ else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_Z /* 0x5A */)) {
+ if(1){
+ r=m=1; // Line 188
+ k.KDC(0,t);
+ k.KO(-1,t,"ឋ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_LBRKT /* 0xDB */)) {
+ if(1){
+ r=m=1; // Line 189
+ k.KDC(0,t);
+ k.KO(-1,t,"ឿ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_BKSLASH /* 0xDC */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឭ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_RBRKT /* 0xDD */)) {
+ if(1){
+ r=m=1; // Line 190
+ k.KDC(0,t);
+ k.KO(-1,t,"ឧ");
+ }
+ }
+ else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_BKQUOTE /* 0xC0 */)) {
+ if(1){
+ r=m=1; // Line 194
+ k.KDC(0,t);
+ k.KO(-1,t,"»");
+ }
+ }
+ if(m==1) {
+
+ k.KDC(-1,t);
+ r=this.g_normalise_1(t,e);
+ m=2;
+ }
+ return r;
+ };
+ this.g_normalise_1=function(t,e) {
+ var k=KeymanWeb,r=1,m=0;
+ if(k.KFCM(7,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ','ុ','ំ','ា','ំ'])){
+ m=1; // Line 376
+ k.KDC(7,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"អ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(7,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54},'ុ','ំ','ា','ំ'])){
+ m=1; // Line 381
+ k.KDC(7,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(7,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55},'ុ','ំ','ា','ំ'])){
+ m=1; // Line 386
+ k.KDC(7,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(7,t,['ស','្','ប','ុ','ំ','ា','ំ'])){
+ m=1; // Line 391
+ k.KDC(7,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ប៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(7,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56},'ុ','ំ','ា','ំ'])){
+ m=1; // Line 396
+ k.KDC(7,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(7,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ','ុ','ំ','ា','ំ'])){
+ m=1; // Line 401
+ k.KDC(7,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ហ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(7,t,['អ','្','ង','ុ','ំ','ា','ំ'])){
+ m=1; // Line 406
+ k.KDC(7,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ង៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(7,t,['អ','្','វ','ុ','ំ','ា','ំ'])){
+ m=1; // Line 411
+ k.KDC(7,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(7,t,['ហ','្','ប','ុ','ំ','ា','ំ'])){
+ m=1; // Line 416
+ k.KDC(7,t);
+ k.KO(-1,t,"ហ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ប៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(7,t,['ហ','្',{t:'a',a:this.s_shiftable_c_2nd_with_BA_51},'ុ','ំ','ា','ំ'])){
+ m=1; // Line 422
+ k.KDC(7,t);
+ k.KO(-1,t,"ហ");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(7,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52},'ុ','ំ','ា','ំ'])){
+ m=1; // Line 429
+ k.KDC(7,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(7,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53},'ុ','ំ','ា','ំ'])){
+ m=1; // Line 434
+ k.KDC(7,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['្','ដ',{t:'a',a:this.s_v_combo_N_21},'ំ','្','រ'])){
+ m=1; // Line 340
+ k.KDC(6,t);
+ k.KO(-1,t,"្ត");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ k.KIO(-1,this.s_v_combo_N_21,3,t);
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['្','ដ',{t:'a',a:this.s_v_combo_R_20},'ះ','្','រ'])){
+ m=1; // Line 341
+ k.KDC(6,t);
+ k.KO(-1,t,"្ត");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ k.KIO(-1,this.s_v_combo_R_20,3,t);
+ k.KO(-1,t,"ះ");
+ }
+ else if(k.KFCM(6,t,['្','រ',{t:'a',a:this.s_v_combo_N_21},'ំ','្','ដ'])){
+ m=1; // Line 344
+ k.KDC(6,t);
+ k.KO(-1,t,"្ត");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ k.KIO(-1,this.s_v_combo_N_21,3,t);
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['្','រ',{t:'a',a:this.s_v_combo_R_20},'ះ','្','ដ'])){
+ m=1; // Line 345
+ k.KDC(6,t);
+ k.KO(-1,t,"្ត");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ k.KIO(-1,this.s_v_combo_R_20,3,t);
+ k.KO(-1,t,"ះ");
+ }
+ else if(k.KFCM(6,t,['្','រ',{t:'a',a:this.s_v_combo_N_21},'ំ','្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 350
+ k.KDC(6,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,6,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ k.KIO(-1,this.s_v_combo_N_21,3,t);
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['្','រ',{t:'a',a:this.s_v_combo_R_20},'ះ','្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 351
+ k.KDC(6,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,6,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ k.KIO(-1,this.s_v_combo_R_20,3,t);
+ k.KO(-1,t,"ះ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ','ុ','ា','ំ'])){
+ m=1; // Line 374
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"អ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54},'ុ','ា','ំ'])){
+ m=1; // Line 379
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55},'ុ','ា','ំ'])){
+ m=1; // Line 384
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ស','្','ប','ុ','ា','ំ'])){
+ m=1; // Line 389
+ k.KDC(6,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ប៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56},'ុ','ា','ំ'])){
+ m=1; // Line 394
+ k.KDC(6,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ','ុ','ា','ំ'])){
+ m=1; // Line 399
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ហ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['អ','្','ង','ុ','ា','ំ'])){
+ m=1; // Line 404
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ង៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['អ','្','វ','ុ','ា','ំ'])){
+ m=1; // Line 409
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ហ','្','ប','ុ','ា','ំ'])){
+ m=1; // Line 414
+ k.KDC(6,t);
+ k.KO(-1,t,"ហ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ប៉");
+ k.KO(-1,t,"ប");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ហ','្',{t:'a',a:this.s_shiftable_c_2nd_with_BA_51},'ុ','ា','ំ'])){
+ m=1; // Line 420
+ k.KDC(6,t);
+ k.KO(-1,t,"ហ");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,3,t);
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52},'ុ','ា','ំ'])){
+ m=1; // Line 427
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53},'ុ','ា','ំ'])){
+ m=1; // Line 432
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52},'៊',{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16}])){
+ m=1; // Line 454
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_gen_14,5,t);
+ k.KIO(-1,this.s_v_pseudo_16,6,t);
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53},'៊',{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16}])){
+ m=1; // Line 455
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_gen_14,5,t);
+ k.KIO(-1,this.s_v_pseudo_16,6,t);
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ','៉','ា','ំ'])){
+ m=1; // Line 489
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"អ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54},'៉','ា','ំ'])){
+ m=1; // Line 490
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55},'៉','ា','ំ'])){
+ m=1; // Line 491
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ស','្','ប','៉','ា','ំ'])){
+ m=1; // Line 492
+ k.KDC(6,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ប៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56},'៉','ា','ំ'])){
+ m=1; // Line 493
+ k.KDC(6,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ','៉','ា','ំ'])){
+ m=1; // Line 494
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ហ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['អ','្','ង','៉','ា','ំ'])){
+ m=1; // Line 495
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ង៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['អ','្','វ','៉','ា','ំ'])){
+ m=1; // Line 496
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ','ា','ុ','ំ'])){
+ m=1; // Line 503
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"អ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ','ុ','ំ','ា'])){
+ m=1; // Line 504
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"អ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54},'ា','ុ','ំ'])){
+ m=1; // Line 506
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54},'ុ','ំ','ា'])){
+ m=1; // Line 507
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55},'ា','ុ','ំ'])){
+ m=1; // Line 509
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55},'ុ','ំ','ា'])){
+ m=1; // Line 510
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56},'ា','ុ','ំ'])){
+ m=1; // Line 512
+ k.KDC(6,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56},'ុ','ំ','ា'])){
+ m=1; // Line 513
+ k.KDC(6,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ','ា','ុ','ំ'])){
+ m=1; // Line 515
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ហ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ','ុ','ំ','ា'])){
+ m=1; // Line 516
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ហ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['អ','្','ង','ា','ុ','ំ'])){
+ m=1; // Line 518
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ង៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['អ','្','ង','ុ','ំ','ា'])){
+ m=1; // Line 519
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ង៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['អ','្','វ','ា','ុ','ំ'])){
+ m=1; // Line 521
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វ៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['អ','្','វ','ុ','ំ','ា'])){
+ m=1; // Line 522
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វ៊");
+ k.KO(-1,t,"ុ");
+ k.KO(-1,t,"ា");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52},'ា','ុ','ំ'])){
+ m=1; // Line 529
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52},'ុ','ំ','ា'])){
+ m=1; // Line 530
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53},'ា','ុ','ំ'])){
+ m=1; // Line 532
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53},'ុ','ំ','ា'])){
+ m=1; // Line 533
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ','េ','ុ','ី'])){
+ m=1; // Line 541
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"អ៊ើ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ','ុ','េ','ី'])){
+ m=1; // Line 542
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"អ៊ើ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ','៉','េ','ី'])){
+ m=1; // Line 543
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"អ៊ើ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54},'េ','ុ','ី'])){
+ m=1; // Line 545
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54},'ុ','េ','ី'])){
+ m=1; // Line 546
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54},'៉','េ','ី'])){
+ m=1; // Line 547
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55},'េ','ុ','ី'])){
+ m=1; // Line 549
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55},'ុ','េ','ី'])){
+ m=1; // Line 550
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55},'៉','េ','ី'])){
+ m=1; // Line 551
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(6,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56},'េ','ុ','ី'])){
+ m=1; // Line 553
+ k.KDC(6,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(6,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56},'ុ','េ','ី'])){
+ m=1; // Line 554
+ k.KDC(6,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(6,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56},'៉','េ','ី'])){
+ m=1; // Line 555
+ k.KDC(6,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ','េ','ុ','ី'])){
+ m=1; // Line 557
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ហ៊ើ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ','ុ','េ','ី'])){
+ m=1; // Line 558
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ហ៊ើ");
+ }
+ else if(k.KFCM(6,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ','៉','េ','ី'])){
+ m=1; // Line 559
+ k.KDC(6,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ហ៊ើ");
+ }
+ else if(k.KFCM(6,t,['អ','្','ង','េ','ុ','ី'])){
+ m=1; // Line 561
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ង៊ើ");
+ }
+ else if(k.KFCM(6,t,['អ','្','ង','ុ','េ','ី'])){
+ m=1; // Line 562
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ង៊ើ");
+ }
+ else if(k.KFCM(6,t,['អ','្','ង','៉','េ','ី'])){
+ m=1; // Line 563
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ង៊ើ");
+ }
+ else if(k.KFCM(6,t,['អ','្','វ','េ','ុ','ី'])){
+ m=1; // Line 565
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វ៊ើ");
+ }
+ else if(k.KFCM(6,t,['អ','្','វ','ុ','េ','ី'])){
+ m=1; // Line 566
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វ៊ើ");
+ }
+ else if(k.KFCM(6,t,['អ','្','វ','៉','េ','ី'])){
+ m=1; // Line 567
+ k.KDC(6,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វ៊ើ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52},'េ','ុ','ី'])){
+ m=1; // Line 575
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៉ើ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52},'ុ','េ','ី'])){
+ m=1; // Line 576
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៉ើ");
+ }
+ else if(k.KFCM(6,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52},'៊','េ','ី'])){
+ m=1; // Line 577
+ k.KDC(6,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៉ើ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53},'េ','ុ','ី'])){
+ m=1; // Line 579
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៉ើ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53},'ុ','េ','ី'])){
+ m=1; // Line 580
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៉ើ");
+ }
+ else if(k.KFCM(6,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53},'៊','េ','ី'])){
+ m=1; // Line 581
+ k.KDC(6,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៉ើ");
+ }
+ else if(k.KFCM(6,t,['្','យ','្',{t:'a',a:this.s_c_out_12},'េ','ឺ'])){
+ m=1; // Line 631
+ k.KDC(6,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_out_12,4,t);
+ k.KO(-1,t,"ឿ");
+ }
+ else if(k.KFCM(6,t,['្','យ','្',{t:'a',a:this.s_c_out_12},'េ','ឹ'])){
+ m=1; // Line 632
+ k.KDC(6,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_out_12,4,t);
+ k.KO(-1,t,"ឿ");
+ }
+ else if(k.KFCM(6,t,['្','យ','្',{t:'a',a:this.s_c_out_12},'េ','ី'])){
+ m=1; // Line 633
+ k.KDC(6,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_out_12,4,t);
+ k.KO(-1,t,"ឿ");
+ }
+ else if(k.KFCM(5,t,[{t:'a',a:this.s_c_shifter_28},{t:'a',a:this.s_v_combo_N_21},'ំ','្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 331
+ k.KDC(5,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,5,t);
+ k.KIO(-1,this.s_c_shifter_28,1,t);
+ k.KIO(-1,this.s_v_combo_N_21,2,t);
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(5,t,[{t:'a',a:this.s_c_shifter_28},{t:'a',a:this.s_v_combo_R_20},'ះ','្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 332
+ k.KDC(5,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,5,t);
+ k.KIO(-1,this.s_c_shifter_28,1,t);
+ k.KIO(-1,this.s_v_combo_R_20,2,t);
+ k.KO(-1,t,"ះ");
+ }
+ else if(k.KFCM(5,t,['្','ដ',{t:'a',a:this.s_v_any_19},'្','រ'])){
+ m=1; // Line 339
+ k.KDC(5,t);
+ k.KO(-1,t,"្ត");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ k.KIO(-1,this.s_v_any_19,3,t);
+ }
+ else if(k.KFCM(5,t,['្','រ',{t:'a',a:this.s_v_any_19},'្','ដ'])){
+ m=1; // Line 343
+ k.KDC(5,t);
+ k.KO(-1,t,"្ត");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ k.KIO(-1,this.s_v_any_19,3,t);
+ }
+ else if(k.KFCM(5,t,['្','រ',{t:'a',a:this.s_c_shifter_28},'្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 347
+ k.KDC(5,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,5,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ k.KIO(-1,this.s_c_shifter_28,3,t);
+ }
+ else if(k.KFCM(5,t,['្','រ',{t:'a',a:this.s_v_any_19},'្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 349
+ k.KDC(5,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,5,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ k.KIO(-1,this.s_v_any_19,3,t);
+ }
+ else if(k.KFCM(5,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ','ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 373
+ k.KDC(5,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"អ៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ',{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 375
+ k.KDC(5,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"អ៊");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(5,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54},'ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 378
+ k.KDC(5,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54},{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 380
+ k.KDC(5,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(5,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55},'ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 383
+ k.KDC(5,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55},{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 385
+ k.KDC(5,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ if(m) {}
+ else if(k.KFCM(5,t,['ស','្','ប','ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 388
+ k.KDC(5,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ប៉");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ស','្','ប',{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 390
+ k.KDC(5,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ប៉");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(5,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56},'ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 393
+ k.KDC(5,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56},{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 395
+ k.KDC(5,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(5,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ','ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 398
+ k.KDC(5,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ហ៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ',{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 400
+ k.KDC(5,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ហ៊");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(5,t,['អ','្','ង','ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 403
+ k.KDC(5,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ង៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['អ','្','ង',{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 405
+ k.KDC(5,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ង៊");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(5,t,['អ','្','វ','ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 408
+ k.KDC(5,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វ៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['អ','្','វ',{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 410
+ k.KDC(5,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វ៊");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(5,t,['ហ','្','ប','ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 413
+ k.KDC(5,t);
+ k.KO(-1,t,"ហ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ប៉");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ហ','្','ប',{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 415
+ k.KDC(5,t);
+ k.KO(-1,t,"ហ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ប៉");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(5,t,['ហ','្',{t:'a',a:this.s_shiftable_c_2nd_with_BA_51},'ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 419
+ k.KDC(5,t);
+ k.KO(-1,t,"ហ");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ហ','្',{t:'a',a:this.s_shiftable_c_2nd_with_BA_51},{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 421
+ k.KDC(5,t);
+ k.KO(-1,t,"ហ");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(5,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52},'ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 426
+ k.KDC(5,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52},{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 428
+ k.KDC(5,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(5,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53},'ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 431
+ k.KDC(5,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53},{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 433
+ k.KDC(5,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(5,t,[{t:'a',a:this.s_shiftable_c_1st_48},'ុ','ំ','ា','ំ'])){
+ m=1; // Line 441
+ k.KDC(5,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(5,t,[{t:'a',a:this.s_shiftable_c_2nd_with_BA_51},'ុ','ំ','ា','ំ'])){
+ m=1; // Line 448
+ k.KDC(5,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,1,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(5,t,['ល','្',{t:'a',a:this.s_c_2nd_combo_LO_52},'៊',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 452
+ k.KDC(5,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_LO_52,3,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ម','្',{t:'a',a:this.s_c_2nd_combo_MO_53},'៊',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 453
+ k.KDC(5,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_2nd_combo_MO_53,3,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['្',{t:'a',a:this.s_shiftable_c_2nd_50},'៊',{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16}])){
+ m=1; // Line 463
+ k.KDC(5,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_shiftable_c_2nd_50,2,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_gen_14,4,t);
+ k.KIO(-1,this.s_v_pseudo_16,5,t);
+ }
+ else if(k.KFCM(5,t,[{t:'a',a:this.s_c_combo_QA_57},'្','អ','៉',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 481
+ k.KDC(5,t);
+ k.KIO(-1,this.s_c_combo_QA_57,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"អ៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ល','្',{t:'a',a:this.s_c_1st_combo_LO_54},'៉',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 482
+ k.KDC(5,t);
+ k.KO(-1,t,"ល");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_LO_54,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ម','្',{t:'a',a:this.s_c_1st_combo_MO_55},'៉',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 483
+ k.KDC(5,t);
+ k.KO(-1,t,"ម");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_1st_combo_MO_55,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ស','្','ប','៉',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 484
+ k.KDC(5,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ប៉");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ស','្',{t:'a',a:this.s_c_combo_SA_56},'៉',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 485
+ k.KDC(5,t);
+ k.KO(-1,t,"ស");
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_c_combo_SA_56,3,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,[{t:'a',a:this.s_c_combo_HA_58},'្','ហ','៉',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 486
+ k.KDC(5,t);
+ k.KIO(-1,this.s_c_combo_HA_58,1,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ហ៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['អ','្','ង','៉',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 487
+ k.KDC(5,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"ង៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['អ','្','វ','៉',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 488
+ k.KDC(5,t);
+ k.KO(-1,t,"អ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វ៊");
+ k.KIO(-1,this.s_v_above_47,5,t);
+ }
+ else if(k.KFCM(5,t,['ព','័','ន','្','ឋ'])){
+ m=1; // Line 619
+ k.KDC(5,t);
+ k.KO(-1,t,"ព");
+ k.KO(-1,t,"័");
+ k.KO(-1,t,"ន");
+ k.KO(-1,t,"្ធ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16},{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16}])){
+ m=1; // Line 312
+ k.KDC(4,t);
+ k.KIO(-1,this.s_v_gen_14,3,t);
+ k.KIO(-1,this.s_v_pseudo_16,4,t);
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_v_combo_N_21},'ំ','្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 325
+ k.KDC(4,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,4,t);
+ k.KIO(-1,this.s_v_combo_N_21,1,t);
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_v_combo_R_20},'ះ','្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 326
+ k.KDC(4,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,4,t);
+ k.KIO(-1,this.s_v_combo_R_20,1,t);
+ k.KO(-1,t,"ះ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_c_shifter_28},{t:'a',a:this.s_v_any_19},'្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 330
+ k.KDC(4,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,4,t);
+ k.KIO(-1,this.s_c_shifter_28,1,t);
+ k.KIO(-1,this.s_v_any_19,2,t);
+ }
+ else if(k.KFCM(4,t,['្','ដ','្','រ'])){
+ m=1; // Line 336
+ k.KDC(4,t);
+ k.KO(-1,t,"្ត");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ }
+ else if(k.KFCM(4,t,['្','រ','្','ដ'])){
+ m=1; // Line 337
+ k.KDC(4,t);
+ k.KO(-1,t,"្ត");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ }
+ else if(k.KFCM(4,t,['្','រ','្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 348
+ k.KDC(4,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,4,t);
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"រ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_c_shifter_28},{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16},{t:'a',a:this.s_c_shifter_28}])){
+ m=1; // Line 362
+ k.KDC(4,t);
+ k.KIO(-1,this.s_v_gen_14,2,t);
+ k.KIO(-1,this.s_v_pseudo_16,3,t);
+ k.KIO(-1,this.s_c_shifter_28,4,t);
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_1st_48},'ុ','ា','ំ'])){
+ m=1; // Line 439
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_2nd_with_BA_51},'ុ','ា','ំ'])){
+ m=1; // Line 446
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,1,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_2nd_50},'៊',{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16}])){
+ m=1; // Line 460
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_50,1,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_gen_14,3,t);
+ k.KIO(-1,this.s_v_pseudo_16,4,t);
+ }
+ else if(k.KFCM(4,t,['្',{t:'a',a:this.s_shiftable_c_2nd_50},'៊',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 462
+ k.KDC(4,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_shiftable_c_2nd_50,2,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,4,t);
+ }
+ else if(k.KFCM(4,t,['ប','្','យ',{t:'a',a:this.s_c_shifter_28}])){
+ m=1; // Line 467
+ k.KDC(4,t);
+ k.KO(-1,t,"ប្យ");
+ k.KIO(-1,this.s_c_shifter_28,4,t);
+ }
+ else if(k.KFCM(4,t,['ស','្','ប',{t:'a',a:this.s_c_shifter_28}])){
+ m=1; // Line 468
+ k.KDC(4,t);
+ k.KO(-1,t,"ស្ប");
+ k.KIO(-1,this.s_c_shifter_28,4,t);
+ }
+ else if(k.KFCM(4,t,['ឆ','្','ប',{t:'a',a:this.s_c_shifter_28}])){
+ m=1; // Line 469
+ k.KDC(4,t);
+ k.KO(-1,t,"ឆ្ប");
+ k.KIO(-1,this.s_c_shifter_28,4,t);
+ }
+ else if(k.KFCM(4,t,['ប','្','យ',{t:'a',a:this.s_c_shifter_28}])){
+ m=1; // Line 470
+ k.KDC(4,t);
+ k.KO(-1,t,"ប្យ");
+ k.KIO(-1,this.s_c_shifter_28,4,t);
+ }
+ else if(k.KFCM(4,t,['ស','្','ប',{t:'a',a:this.s_c_shifter_28}])){
+ m=1; // Line 471
+ k.KDC(4,t);
+ k.KO(-1,t,"ស្ប");
+ k.KIO(-1,this.s_c_shifter_28,4,t);
+ }
+ else if(k.KFCM(4,t,['ឆ','្','ប',{t:'a',a:this.s_c_shifter_28}])){
+ m=1; // Line 472
+ k.KDC(4,t);
+ k.KO(-1,t,"ឆ្ប");
+ k.KIO(-1,this.s_c_shifter_28,4,t);
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_1st_48},'៉',{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16}])){
+ m=1; // Line 477
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_gen_14,3,t);
+ k.KIO(-1,this.s_v_pseudo_16,4,t);
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_1st_48},'ា','ុ','ំ'])){
+ m=1; // Line 500
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_1st_48},'ុ','ំ','ា'])){
+ m=1; // Line 501
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_2nd_with_BA_51},'ា','ុ','ំ'])){
+ m=1; // Line 526
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,1,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_2nd_with_BA_51},'ុ','ំ','ា'])){
+ m=1; // Line 527
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,1,t);
+ k.KO(-1,t,"៉");
+ k.KO(-1,t,"ា");
+ k.KO(-1,t,"ំ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_1st_48},'េ','ុ','ី'])){
+ m=1; // Line 537
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_1st_48},'ុ','េ','ី'])){
+ m=1; // Line 538
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_1st_48},'៉','េ','ី'])){
+ m=1; // Line 539
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊ើ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_2nd_50},'េ','ុ','ី'])){
+ m=1; // Line 571
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_50,1,t);
+ k.KO(-1,t,"៉ើ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_2nd_50},'ុ','េ','ី'])){
+ m=1; // Line 572
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_50,1,t);
+ k.KO(-1,t,"៉ើ");
+ }
+ else if(k.KFCM(4,t,[{t:'a',a:this.s_shiftable_c_2nd_50},'៊','េ','ី'])){
+ m=1; // Line 573
+ k.KDC(4,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_50,1,t);
+ k.KO(-1,t,"៉ើ");
+ }
+ else if(k.KFCM(4,t,['ព','ន','្','ឋ'])){
+ m=1; // Line 618
+ k.KDC(4,t);
+ k.KO(-1,t,"ព");
+ k.KO(-1,t,"ន");
+ k.KO(-1,t,"្ធ");
+ }
+ else if(k.KFCM(4,t,['្','យ','េ','ឺ'])){
+ m=1; // Line 627
+ k.KDC(4,t);
+ k.KO(-1,t,"ឿ");
+ }
+ else if(k.KFCM(4,t,['្','យ','េ','ឹ'])){
+ m=1; // Line 628
+ k.KDC(4,t);
+ k.KO(-1,t,"ឿ");
+ }
+ else if(k.KFCM(4,t,['្','យ','េ','ី'])){
+ m=1; // Line 629
+ k.KDC(4,t);
+ k.KO(-1,t,"ឿ");
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16},{t:'a',a:this.s_v_gen_14}])){
+ m=1; // Line 308
+ k.KDC(3,t);
+ k.KIO(-1,this.s_v_gen_14,3,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16},{t:'a',a:this.s_v_pseudo_16}])){
+ m=1; // Line 309
+ k.KDC(3,t);
+ k.KIO(-1,this.s_v_pseudo_16,3,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16}])){
+ m=1; // Line 310
+ k.KDC(3,t);
+ k.KIO(-1,this.s_v_gen_14,2,t);
+ k.KIO(-1,this.s_v_pseudo_16,3,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_v_pseudo_16},{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16}])){
+ m=1; // Line 311
+ k.KDC(3,t);
+ k.KIO(-1,this.s_v_gen_14,2,t);
+ k.KIO(-1,this.s_v_pseudo_16,3,t);
+ }
+ else if(k.KFCM(3,t,['្',{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16}])){
+ m=1; // Line 320
+ k.KDC(3,t);
+ k.KIO(-1,this.s_v_gen_14,2,t);
+ k.KIO(-1,this.s_v_pseudo_16,3,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_v_any_19},'្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 324
+ k.KDC(3,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,3,t);
+ k.KIO(-1,this.s_v_any_19,1,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_c_shifter_28},'្',{t:'a',a:this.s_subcons_44}])){
+ m=1; // Line 355
+ k.KDC(3,t);
+ k.KO(-1,t,"្");
+ k.KIO(-1,this.s_subcons_44,3,t);
+ k.KIO(-1,this.s_c_shifter_28,1,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_pseudo_16},{t:'a',a:this.s_c_shifter_28}])){
+ m=1; // Line 360
+ k.KDC(3,t);
+ k.KIO(-1,this.s_c_shifter_28,3,t);
+ k.KIO(-1,this.s_v_gen_14,1,t);
+ k.KIO(-1,this.s_v_pseudo_16,2,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_c_shifter_28},{t:'a',a:this.s_v_any_19},{t:'a',a:this.s_c_shifter_28}])){
+ m=1; // Line 361
+ k.KDC(3,t);
+ k.KIO(-1,this.s_c_shifter_28,3,t);
+ k.KIO(-1,this.s_v_any_19,2,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_shiftable_c_1st_48},'ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 438
+ k.KDC(3,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,3,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_shiftable_c_1st_48},{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 440
+ k.KDC(3,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,2,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_shiftable_c_2nd_with_BA_51},'ុ',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 445
+ k.KDC(3,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,1,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_above_47,3,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_shiftable_c_2nd_with_BA_51},{t:'a',a:this.s_v_above_47},'ុ'])){
+ m=1; // Line 447
+ k.KDC(3,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_with_BA_51,1,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_above_47,2,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_shiftable_c_2nd_50},'៊',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 459
+ k.KDC(3,t);
+ k.KIO(-1,this.s_shiftable_c_2nd_50,1,t);
+ k.KO(-1,t,"៉");
+ k.KIO(-1,this.s_v_above_47,3,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_shiftable_c_1st_48},'៉',{t:'a',a:this.s_v_above_47}])){
+ m=1; // Line 476
+ k.KDC(3,t);
+ k.KIO(-1,this.s_shiftable_c_1st_48,1,t);
+ k.KO(-1,t,"៊");
+ k.KIO(-1,this.s_v_above_47,3,t);
+ }
+ else if(k.KFCM(3,t,[{t:'a',a:this.s_c_out_12},{t:'a',a:this.s_v_gen_14},'៌'])){
+ m=1; // Line 585
+ k.KDC(3,t);
+ k.KIO(-1,this.s_c_out_12,1,t);
+ k.KO(-1,t,"៌");
+ k.KIO(-1,this.s_v_gen_14,2,t);
+ }
+ else if(k.KFCM(3,t,['ណ','្','ត'])){
+ m=1; // Line 589
+ k.KDC(3,t);
+ k.KO(-1,t,"ណ");
+ k.KO(-1,t,"្ដ");
+ }
+ else if(k.KFCM(3,t,['ន','្','ដ'])){
+ m=1; // Line 590
+ k.KDC(3,t);
+ k.KO(-1,t,"ន");
+ k.KO(-1,t,"្ត");
+ }
+ else if(k.KFCM(3,t,['ទ','្','ប'])){
+ m=1; // Line 594
+ k.KDC(3,t);
+ k.KO(-1,t,"ឡ");
+ }
+ else if(k.KFCM(3,t,['ប','្','ញ'])){
+ m=1; // Line 596
+ k.KDC(3,t);
+ k.KO(-1,t,"ឫ");
+ }
+ else if(k.KFCM(3,t,['ព','្','ញ'])){
+ m=1; // Line 602
+ k.KDC(3,t);
+ k.KO(-1,t,"ឭ");
+ }
+ else if(k.KFCM(3,t,['ព','្','ឋ'])){
+ m=1; // Line 605
+ k.KDC(3,t);
+ k.KO(-1,t,"ឰ");
+ }
+ else if(k.KFCM(3,t,['ដ','្','ធ'])){
+ m=1; // Line 613
+ k.KDC(3,t);
+ k.KO(-1,t,"ដ្ឋ");
+ }
+ else if(k.KFCM(3,t,['ទ','្','ឋ'])){
+ m=1; // Line 614
+ k.KDC(3,t);
+ k.KO(-1,t,"ទ្ធ");
+ }
+ else if(k.KFCM(3,t,['ឪ','្','យ'])){
+ m=1; // Line 622
+ k.KDC(3,t);
+ k.KO(-1,t,"ឱ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"យ");
+ }
+ else if(k.KFCM(3,t,['ឳ','្','យ'])){
+ m=1; // Line 623
+ k.KDC(3,t);
+ k.KO(-1,t,"ឱ");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"យ");
+ }
+ else if(k.KFCM(3,t,['ញ','្','វ'])){
+ m=1; // Line 625
+ k.KDC(3,t);
+ k.KO(-1,t,"ព");
+ k.KO(-1,t,"្");
+ k.KO(-1,t,"វា");
+ }
+ else if(k.KFCM(2,t,['េ','ា'])){
+ m=1; // Line 291
+ k.KDC(2,t);
+ k.KO(-1,t,"ោ");
+ }
+ else if(k.KFCM(2,t,['ា','េ'])){
+ m=1; // Line 292
+ k.KDC(2,t);
+ k.KO(-1,t,"ោ");
+ }
+ else if(k.KFCM(2,t,['េ','ី'])){
+ m=1; // Line 293
+ k.KDC(2,t);
+ k.KO(-1,t,"ើ");
+ }
+ else if(k.KFCM(2,t,['ី','េ'])){
+ m=1; // Line 294
+ k.KDC(2,t);
+ k.KO(-1,t,"ើ");
+ }
+ else if(k.KFCM(2,t,['ំ','ុ'])){
+ m=1; // Line 298
+ k.KDC(2,t);
+ k.KO(-1,t,"ុំ");
+ }
+ else if(k.KFCM(2,t,['ំ','ា'])){
+ m=1; // Line 299
+ k.KDC(2,t);
+ k.KO(-1,t,"ាំ");
+ }
+ else if(k.KFCM(2,t,[{t:'a',a:this.s_v_gen_14},{t:'a',a:this.s_v_gen_14}])){
+ m=1; // Line 304
+ k.KDC(2,t);
+ k.KIO(-1,this.s_v_gen_14,2,t);
+ }
+ else if(k.KFCM(2,t,[{t:'a',a:this.s_v_pseudo_16},{t:'a',a:this.s_v_pseudo_16}])){
+ m=1; // Line 313
+ k.KDC(2,t);
+ k.KIO(-1,this.s_v_pseudo_16,2,t);
+ }
+ if(m) {}
+ else if(k.KFCM(2,t,['្','្'])){
+ m=1; // Line 318
+ k.KDC(2,t);
+ k.KO(-1,t,"្");
+ }
+ else if(k.KFCM(2,t,['្',{t:'a',a:this.s_v_any_19}])){
+ m=1; // Line 319
+ k.KDC(2,t);
+ k.KIO(-1,this.s_v_any_19,2,t);
+ }
+ else if(k.KFCM(2,t,[{t:'a',a:this.s_v_any_19},{t:'a',a:this.s_c_shifter_28}])){
+ m=1; // Line 359
+ k.KDC(2,t);
+ k.KIO(-1,this.s_c_shifter_28,2,t);
+ k.KIO(-1,this.s_v_any_19,1,t);
+ }
+ else if(k.KFCM(2,t,['ឫ','ុ'])){
+ m=1; // Line 597
+ k.KDC(2,t);
+ k.KO(-1,t,"ឬ");
+ }
+ else if(k.KFCM(2,t,['ឭ','ា'])){
+ m=1; // Line 599
+ k.KDC(2,t);
+ k.KO(-1,t,"ញ");
+ }
+ else if(k.KFCM(2,t,['ឮ','ា'])){
+ m=1; // Line 600
+ k.KDC(2,t);
+ k.KO(-1,t,"ញ");
+ }
+ else if(k.KFCM(2,t,['ឭ','ុ'])){
+ m=1; // Line 603
+ k.KDC(2,t);
+ k.KO(-1,t,"ឮ");
+ }
+ else if(k.KFCM(2,t,['ឧ','ិ'])){
+ m=1; // Line 607
+ k.KDC(2,t);
+ k.KO(-1,t,"ឱ");
+ }
+ else if(k.KFCM(2,t,['ឧ','៌'])){
+ m=1; // Line 608
+ k.KDC(2,t);
+ k.KO(-1,t,"ឱ");
+ }
+ else if(k.KFCM(2,t,['ឧ','៍'])){
+ m=1; // Line 609
+ k.KDC(2,t);
+ k.KO(-1,t,"ឱ");
+ }
+ return r;
+ };
+}
diff --git a/developer/src/kmc-keyboard-info/test/fixtures/no-license-in-kps-sources/build/khmer_angkor.kmx b/developer/src/kmc-keyboard-info/test/fixtures/no-license-in-kps-sources/build/khmer_angkor.kmx
new file mode 100644
index 00000000000..d8495d187c4
Binary files /dev/null and b/developer/src/kmc-keyboard-info/test/fixtures/no-license-in-kps-sources/build/khmer_angkor.kmx differ
diff --git a/developer/src/kmc-keyboard-info/test/fixtures/no-license-in-kps-sources/source/khmer_angkor.kps b/developer/src/kmc-keyboard-info/test/fixtures/no-license-in-kps-sources/source/khmer_angkor.kps
new file mode 100644
index 00000000000..fab90076b57
--- /dev/null
+++ b/developer/src/kmc-keyboard-info/test/fixtures/no-license-in-kps-sources/source/khmer_angkor.kps
@@ -0,0 +1,163 @@
+
+
+
+ 15.0.266.0
+ 7.0
+
+
+
+ readme.htm
+ splash.gif
+
+
+
+
+
+
+
+
+
+
+ Khmer Angkor
+ © 2015-2022 SIL International
+ Makara Sok
+
+ https://keyman.com/keyboards/khmer_angkor
+ Khmer Unicode keyboard layout based on the NiDA keyboard layout. Automatically corrects many common keying errors.
+
+
+
+
+
+
+ ..\LICENSE.md
+ File LICENSE.md
+ 0
+ .md
+
+
+ ..\build\khmer_angkor.js
+ File khmer_angkor.js
+ 0
+ .js
+
+
+ ..\build\khmer_angkor.kvk
+ File khmer_angkor.kvk
+ 0
+ .kvk
+
+
+ ..\build\khmer_angkor.kmx
+ Keyboard Khmer Angkor
+ 0
+ .kmx
+
+
+ welcome\keyboard_layout.png
+ File keyboard_layout.png
+ 0
+ .png
+
+
+ welcome\welcome.htm
+ File welcome.htm
+ 0
+ .htm
+
+
+ ..\shared\fonts\khmer\mondulkiri\FONTLOG.txt
+ File FONTLOG.txt
+ 0
+ .txt
+
+
+ ..\shared\fonts\khmer\mondulkiri\Mondulkiri-B.ttf
+ Font Khmer Mondulkiri Bold
+ 0
+ .ttf
+
+
+ ..\shared\fonts\khmer\mondulkiri\Mondulkiri-BI.ttf
+ Font Khmer Mondulkiri Bold Italic
+ 0
+ .ttf
+
+
+ ..\shared\fonts\khmer\mondulkiri\Mondulkiri-I.ttf
+ Font Khmer Mondulkiri Italic
+ 0
+ .ttf
+
+
+ ..\shared\fonts\khmer\mondulkiri\Mondulkiri-R.ttf
+ Font Khmer Mondulkiri
+ 0
+ .ttf
+
+
+ ..\shared\fonts\khmer\mondulkiri\OFL.txt
+ File OFL.txt
+ 0
+ .txt
+
+
+ ..\shared\fonts\khmer\mondulkiri\OFL-FAQ.txt
+ File OFL-FAQ.txt
+ 0
+ .txt
+
+
+ welcome\KAK_Documentation_EN.pdf
+ File KAK_Documentation_EN.pdf
+ 0
+ .pdf
+
+
+ welcome\KAK_Documentation_KH.pdf
+ File KAK_Documentation_KH.pdf
+ 0
+ .pdf
+
+
+ readme.htm
+ File readme.htm
+ 0
+ .htm
+
+
+ welcome\image002.png
+ File image002.png
+ 0
+ .png
+
+
+ ..\shared\fonts\khmer\busrakbd\khmer_busra_kbd.ttf
+ Font KhmerBusraKbd
+ 0
+ .ttf
+
+
+ splash.gif
+ File splash.gif
+ 0
+ .gif
+
+
+
+
+ Khmer Angkor
+ khmer_angkor
+ 1.3
+ ..\shared\fonts\khmer\busrakbd\khmer_busra_kbd.ttf
+ ..\shared\fonts\khmer\mondulkiri\Mondulkiri-R.ttf
+
+ Central Khmer (Khmer, Cambodia)
+
+
+
+
+
+
+
+
diff --git a/developer/src/kmc-keyboard-info/test/test-keyboard-info-compiler-messages.ts b/developer/src/kmc-keyboard-info/test/test-keyboard-info-compiler-messages.ts
index 28fe5713546..fc3058f1b89 100644
--- a/developer/src/kmc-keyboard-info/test/test-keyboard-info-compiler-messages.ts
+++ b/developer/src/kmc-keyboard-info/test/test-keyboard-info-compiler-messages.ts
@@ -1,10 +1,353 @@
+import { assert } from 'chai';
import 'mocha';
import { KeyboardInfoCompilerMessages } from '../src/keyboard-info-compiler-messages.js';
-import { verifyCompilerMessagesObject } from '@keymanapp/developer-test-helpers';
-import { CompilerErrorNamespace } from '@keymanapp/common-types';
+import { TestCompilerCallbacks, verifyCompilerMessagesObject } from '@keymanapp/developer-test-helpers';
+import { CompilerErrorNamespace, KmpJsonFile, KeymanFileTypes } from '@keymanapp/common-types';
+import { makePathToFixture } from './helpers/index.js';
+import { KeyboardInfoCompiler, KeyboardInfoCompilerResult } from '../src/keyboard-info-compiler.js';
+import { KeyboardInfoFile } from '../src/keyboard-info-file.js';
+
+const callbacks = new TestCompilerCallbacks();
+
+beforeEach(function() {
+ callbacks.clear();
+});
describe('KeyboardInfoCompilerMessages', function () {
it('should have a valid KeyboardInfoCompilerMessages object', function() {
return verifyCompilerMessagesObject(KeyboardInfoCompilerMessages, CompilerErrorNamespace.KeyboardInfoCompiler);
});
+
+ // ERROR_FileDoesNotExist (loadJsFile)
+
+ it('should generate ERROR_FileDoesNotExist error if .js file does not exist', async function() {
+ const jsFilename = makePathToFixture('khmer_angkor', 'build', 'xxx.js');
+ const kpsFilename = makePathToFixture('khmer_angkor', 'source', 'khmer_angkor.kps');
+ const kmpFilename = makePathToFixture('khmer_angkor', 'build', 'khmer_angkor.kmp');
+
+ const sources = {
+ kmpFilename,
+ sourcePath: 'release/k/khmer_angkor',
+ kpsFilename,
+ jsFilename: jsFilename,
+ forPublishing: true,
+ };
+
+ const compiler = new KeyboardInfoCompiler();
+ assert.isTrue(await compiler.init(callbacks, {sources}));
+ let result: KeyboardInfoCompilerResult = null;
+ try {
+ result = await compiler.run(kmpFilename, null);
+ } catch(e) {
+ callbacks.printMessages();
+ throw e;
+ }
+ assert.isNull(result);
+
+ assert.isTrue(callbacks.hasMessage(KeyboardInfoCompilerMessages.ERROR_FileDoesNotExist),
+ `ERROR_FileDoesNotExist not generated, instead got: `+JSON.stringify(callbacks.messages,null,2));
+ assert.isTrue(nodeCompilerMessage(callbacks, KeyboardInfoCompilerMessages.ERROR_FileDoesNotExist).includes(KeymanFileTypes.Binary.WebKeyboard),
+ KeymanFileTypes.Binary.WebKeyboard+' not found in the message');
+ });
+
+ // ERROR_FileDoesNotExist (.kmp fileSize)
+
+ it('should generate ERROR_FileDoesNotExist error if .kmp file does not exist', async function() {
+ const jsFilename = makePathToFixture('no-kmp', 'build', 'khmer_angkor.js');
+ const kpsFilename = makePathToFixture('no-kmp', 'source', 'khmer_angkor.kps');
+ const kmpFilename = makePathToFixture('no-kmp', 'build', 'khmer_angkor.kmp');
+
+ const sources = {
+ kmpFilename,
+ sourcePath: 'release/k/no-kmp',
+ kpsFilename,
+ jsFilename: jsFilename,
+ forPublishing: true,
+ };
+
+ const compiler = new KeyboardInfoCompiler();
+ assert.isTrue(await compiler.init(callbacks, {sources}));
+ // stubbing fillLanguages internal function to avoid pulling in font resources in fixture
+ compiler['fillLanguages'] = async (_kpsFilename: string, _keyboard_info: KeyboardInfoFile, _kmpJsonData: KmpJsonFile.KmpJsonFile): Promise => true;
+ let result: KeyboardInfoCompilerResult = null;
+ try {
+ result = await compiler.run(kmpFilename, null);
+ } catch(e) {
+ callbacks.printMessages();
+ throw e;
+ }
+ assert.isNull(result);
+
+ assert.isTrue(callbacks.hasMessage(KeyboardInfoCompilerMessages.ERROR_FileDoesNotExist),
+ `ERROR_FileDoesNotExist not generated, instead got: `+JSON.stringify(callbacks.messages,null,2));
+ assert.isTrue(nodeCompilerMessage(callbacks, KeyboardInfoCompilerMessages.ERROR_FileDoesNotExist).includes(KeymanFileTypes.Binary.Package),
+ KeymanFileTypes.Binary.Package+' not found in the message');
+ });
+
+ // ERROR_FileDoesNotExist (font file not in package)
+
+ it('should generate ERROR_FileDoesNotExist error if font file is missing from package', async function() {
+ const jsFilename = makePathToFixture('khmer_angkor', 'build', 'khmer_angkor.js');
+ const kpsFilename = makePathToFixture('khmer_angkor', 'source', 'khmer_angkor.kps');
+ const kmpFilename = makePathToFixture('khmer_angkor', 'build', 'khmer_angkor.kmp');
+
+ const sources = {
+ kmpFilename,
+ sourcePath: 'release/k/khmer_angkor',
+ kpsFilename,
+ jsFilename: jsFilename,
+ forPublishing: true,
+ };
+
+ const compiler = new KeyboardInfoCompiler();
+ assert.isTrue(await compiler.init(callbacks, {sources}));
+ const kmpJsonData: KmpJsonFile.KmpJsonFile = {system: {fileVersion: "7.0", keymanDeveloperVersion: "17.0.204"},
+ options: {},
+ files: []}
+ const source = ["Mondulkiri-R.ttf"]
+ const result = await compiler['fontSourceToKeyboardInfoFont'](kpsFilename, kmpJsonData, source)
+ assert.isNull(result);
+
+ assert.isTrue(callbacks.hasMessage(KeyboardInfoCompilerMessages.ERROR_FileDoesNotExist),
+ `ERROR_FileDoesNotExist not generated, instead got: `+JSON.stringify(callbacks.messages,null,2));
+ assert.isTrue(nodeCompilerMessage(callbacks, KeyboardInfoCompilerMessages.ERROR_FileDoesNotExist).includes(source[0]),
+ source[0]+' not found in the message');
+ });
+
+ // ERROR_FileDoesNotExist (font file not on disk)
+
+ it('should generate ERROR_FileDoesNotExist error if font file is missing from disk', async function() {
+ const jsFilename = makePathToFixture('khmer_angkor', 'build', 'khmer_angkor.js');
+ const kpsFilename = makePathToFixture('khmer_angkor', 'source', 'khmer_angkor.kps');
+ const kmpFilename = makePathToFixture('khmer_angkor', 'build', 'khmer_angkor.kmp');
+
+ const sources = {
+ kmpFilename,
+ sourcePath: 'release/k/khmer_angkor',
+ kpsFilename,
+ jsFilename: jsFilename,
+ forPublishing: true,
+ };
+
+ const compiler = new KeyboardInfoCompiler();
+ assert.isTrue(await compiler.init(callbacks, {sources}));
+ const kmpJsonData: KmpJsonFile.KmpJsonFile = {system: {fileVersion: "7.0", keymanDeveloperVersion: "17.0.204"},
+ options: {},
+ files: [{name: "../shared/fonts/khmer/mondulkiri/xxx.ttf", description: "Font not on disk"}]}
+ const source = ["xxx.ttf"]
+ const result = await compiler['fontSourceToKeyboardInfoFont'](kpsFilename, kmpJsonData, source)
+ assert.isNull(result);
+
+ assert.isTrue(callbacks.hasMessage(KeyboardInfoCompilerMessages.ERROR_FileDoesNotExist),
+ `ERROR_FileDoesNotExist not generated, instead got: `+JSON.stringify(callbacks.messages,null,2));
+ assert.isTrue(nodeCompilerMessage(callbacks, KeyboardInfoCompilerMessages.ERROR_FileDoesNotExist).includes(kmpJsonData.files[0].name),
+ kmpJsonData.files[0].name+' not found in the message');
+ });
+
+ // ERROR_LicenseFileIsMissing
+
+ it('should generate ERROR_LicenseFileIsMissing error if license file is missing from disk', async function() {
+ const jsFilename = makePathToFixture('khmer_angkor', 'build', 'khmer_angkor.js');
+ const kpsFilename = makePathToFixture('khmer_angkor', 'source', 'khmer_angkor.kps');
+ const kmpFilename = makePathToFixture('khmer_angkor', 'build', 'khmer_angkor.kmp');
+
+ const sources = {
+ kmpFilename,
+ sourcePath: 'release/k/khmer_angkor',
+ kpsFilename,
+ jsFilename: jsFilename,
+ forPublishing: true,
+ };
+
+ const compiler = new KeyboardInfoCompiler();
+ assert.isTrue(await compiler.init(callbacks, {sources}));
+ const licenseFilename = makePathToFixture('khmer_angkor', 'xxx.md');
+ const result = compiler['isLicenseMIT'](licenseFilename)
+ assert.isFalse(result);
+
+ assert.isTrue(callbacks.hasMessage(KeyboardInfoCompilerMessages.ERROR_LicenseFileIsMissing),
+ `ERROR_LicenseFileIsMissing not generated, instead got: `+JSON.stringify(callbacks.messages,null,2));
+ assert.isTrue(nodeCompilerMessage(callbacks, KeyboardInfoCompilerMessages.ERROR_LicenseFileIsMissing).includes(licenseFilename),
+ licenseFilename+' not found in the message');
+ });
+
+ // ERROR_LicenseFileIsDamaged (error on decode)
+
+ it('should generate ERROR_LicenseFileIsDamaged error if license file throws error on decode', async function() {
+ const jsFilename = makePathToFixture('khmer_angkor', 'build', 'khmer_angkor.js');
+ const kpsFilename = makePathToFixture('khmer_angkor', 'source', 'khmer_angkor.kps');
+ const kmpFilename = makePathToFixture('khmer_angkor', 'build', 'khmer_angkor.kmp');
+
+ const sources = {
+ kmpFilename,
+ sourcePath: 'release/k/khmer_angkor',
+ kpsFilename,
+ jsFilename: jsFilename,
+ forPublishing: true,
+ };
+
+ const compiler = new KeyboardInfoCompiler();
+ assert.isTrue(await compiler.init(callbacks, {sources}));
+ const licenseFilename = makePathToFixture('khmer_angkor', 'LICENSE.md');
+ const originalDecode = TextDecoder.prototype.decode
+ TextDecoder.prototype.decode = () => { throw new Error() }
+ const result = compiler['isLicenseMIT'](licenseFilename)
+ TextDecoder.prototype.decode = originalDecode
+ assert.isFalse(result);
+
+ assert.isTrue(callbacks.hasMessage(KeyboardInfoCompilerMessages.ERROR_LicenseFileIsDamaged),
+ `ERROR_LicenseFileIsDamaged not generated, instead got: `+JSON.stringify(callbacks.messages,null,2));
+ assert.isTrue(nodeCompilerMessage(callbacks, KeyboardInfoCompilerMessages.ERROR_LicenseFileIsDamaged).includes(licenseFilename),
+ licenseFilename+' not found in the message');
+ });
+
+ // ERROR_LicenseFileIsDamaged (null on decode)
+
+ it('should generate ERROR_LicenseFileIsDamaged error if license file returns null on decode', async function() {
+ const jsFilename = makePathToFixture('khmer_angkor', 'build', 'khmer_angkor.js');
+ const kpsFilename = makePathToFixture('khmer_angkor', 'source', 'khmer_angkor.kps');
+ const kmpFilename = makePathToFixture('khmer_angkor', 'build', 'khmer_angkor.kmp');
+
+ const sources = {
+ kmpFilename,
+ sourcePath: 'release/k/khmer_angkor',
+ kpsFilename,
+ jsFilename: jsFilename,
+ forPublishing: true,
+ };
+
+ const compiler = new KeyboardInfoCompiler();
+ assert.isTrue(await compiler.init(callbacks, {sources}));
+ const licenseFilename = makePathToFixture('khmer_angkor', 'LICENSE.md');
+ const originalDecode = TextDecoder.prototype.decode
+ TextDecoder.prototype.decode = () => { return null }
+ const result = compiler['isLicenseMIT'](licenseFilename)
+ TextDecoder.prototype.decode = originalDecode
+ assert.isFalse(result);
+
+ assert.isTrue(callbacks.hasMessage(KeyboardInfoCompilerMessages.ERROR_LicenseFileIsDamaged),
+ `ERROR_LicenseFileIsDamaged not generated, instead got: `+JSON.stringify(callbacks.messages,null,2));
+ assert.isTrue(nodeCompilerMessage(callbacks, KeyboardInfoCompilerMessages.ERROR_LicenseFileIsDamaged).includes(licenseFilename),
+ licenseFilename+' not found in the message');
+ });
+
+ // ERROR_LicenseIsNotValid
+
+ it('should generate ERROR_LicenseIsNotValid error if license file is invalid', async function() {
+ const jsFilename = makePathToFixture('khmer_angkor', 'build', 'khmer_angkor.js');
+ const kpsFilename = makePathToFixture('khmer_angkor', 'source', 'khmer_angkor.kps');
+ const kmpFilename = makePathToFixture('khmer_angkor', 'build', 'khmer_angkor.kmp');
+
+ const sources = {
+ kmpFilename,
+ sourcePath: 'release/k/invalid-license',
+ kpsFilename,
+ jsFilename: jsFilename,
+ forPublishing: true,
+ };
+
+ const compiler = new KeyboardInfoCompiler();
+ assert.isTrue(await compiler.init(callbacks, {sources}));
+ const licenseFilename = makePathToFixture('invalid-license', 'invalid_license.md');
+ const result = compiler['isLicenseMIT'](licenseFilename)
+ assert.isFalse(result);
+
+ assert.isTrue(callbacks.hasMessage(KeyboardInfoCompilerMessages.ERROR_LicenseIsNotValid),
+ `ERROR_LicenseIsNotValid not generated, instead got: `+JSON.stringify(callbacks.messages,null,2));
+ assert.isTrue(nodeCompilerMessage(callbacks, KeyboardInfoCompilerMessages.ERROR_LicenseIsNotValid).includes(licenseFilename),
+ licenseFilename+' not found in the message');
+ });
+
+ // ERROR_CannotBuildWithoutKmpFile
+
+ it('should generate ERROR_CannotBuildWithoutKmpFile error if .kmp file is not in sources', async function() {
+ const jsFilename = makePathToFixture('no-kmp', 'build', 'khmer_angkor.js');
+ const kpsFilename = makePathToFixture('no-kmp', 'source', 'khmer_angkor.kps');
+ const kmpFilename = makePathToFixture('no-kmp', 'build', 'khmer_angkor.kmp');
+
+ const sources = {
+ kmpFilename: '',
+ sourcePath: 'release/k/no-kmp',
+ kpsFilename,
+ jsFilename: jsFilename,
+ forPublishing: true,
+ };
+
+ const compiler = new KeyboardInfoCompiler();
+ assert.isTrue(await compiler.init(callbacks, {sources}));
+ let result: KeyboardInfoCompilerResult = null;
+ try {
+ result = await compiler.run(kmpFilename, null);
+ } catch(e) {
+ callbacks.printMessages();
+ throw e;
+ }
+ assert.isNull(result);
+
+ assert.isTrue(callbacks.hasMessage(KeyboardInfoCompilerMessages.ERROR_CannotBuildWithoutKmpFile),
+ `ERROR_CannotBuildWithoutKmpFile not generated, instead got: `+JSON.stringify(callbacks.messages,null,2));
+ });
+
+ // ERROR_NoLicenseFound
+
+ it('should generate ERROR_NoLicenseFound error if licence file is not in .kps options', async function() {
+ const jsFilename = makePathToFixture('no-license-in-kps-sources', 'build', 'khmer_angkor.js');
+ const kpsFilename = makePathToFixture('no-license-in-kps-sources', 'source', 'khmer_angkor.kps');
+ const kmpFilename = makePathToFixture('no-license-in-kps-sources', 'build', 'khmer_angkor.kmp');
+
+ const sources = {
+ kmpFilename,
+ sourcePath: 'release/k/no-license-in-kps-sources',
+ kpsFilename,
+ jsFilename: jsFilename,
+ forPublishing: true,
+ };
+
+ const compiler = new KeyboardInfoCompiler();
+ assert.isTrue(await compiler.init(callbacks, {sources}));
+ let result: KeyboardInfoCompilerResult = null;
+ try {
+ result = await compiler.run(kmpFilename, null);
+ } catch(e) {
+ callbacks.printMessages();
+ throw e;
+ }
+ assert.isNull(result);
+
+ assert.isTrue(callbacks.hasMessage(KeyboardInfoCompilerMessages.ERROR_NoLicenseFound),
+ `ERROR_NoLicenseFound not generated, instead got: `+JSON.stringify(callbacks.messages,null,2));
+ });
+
+ // ERROR_FontFileCannotBeRead
+
+ it('should generate ERROR_FontFileCannotBeRead error if font family cannot be obtained from file', async function() {
+ const jsFilename = makePathToFixture('font-file-cannot-be-read', 'build', 'khmer_angkor.js');
+ const kpsFilename = makePathToFixture('font-file-cannot-be-read', 'source', 'khmer_angkor.kps');
+ const kmpFilename = makePathToFixture('font-file-cannot-be-read', 'build', 'khmer_angkor.kmp');
+
+ const sources = {
+ kmpFilename,
+ sourcePath: 'release/k/font-file-cannot-be-read',
+ kpsFilename,
+ jsFilename: jsFilename,
+ forPublishing: true,
+ };
+
+ const compiler = new KeyboardInfoCompiler();
+ assert.isTrue(await compiler.init(callbacks, {sources}));
+ const kmpJsonData: KmpJsonFile.KmpJsonFile = {system: {fileVersion: "7.0", keymanDeveloperVersion: "17.0.204"},
+ options: {},
+ files: [{name: "../shared/fonts/khmer/mondulkiri/font_file_cannot_be_read.ttf", description: ""}]}
+ const source = ["font_file_cannot_be_read.ttf"]
+ const result = await compiler['fontSourceToKeyboardInfoFont'](kpsFilename, kmpJsonData, source)
+ assert.isNull(result);
+ assert.isTrue(callbacks.hasMessage(KeyboardInfoCompilerMessages.ERROR_FontFileCannotBeRead),
+ `ERROR_FontFileCannotBeRead not generated, instead got: `+JSON.stringify(callbacks.messages,null,2));
+ assert.isTrue(nodeCompilerMessage(callbacks, KeyboardInfoCompilerMessages.ERROR_FontFileCannotBeRead).includes(kmpJsonData.files[0].name),
+ kmpJsonData.files[0].name+' not found in the message');
+ });
});
+
+function nodeCompilerMessage(ncb: TestCompilerCallbacks, code: number): string {
+ return ncb.messages.find((item) => item.code == code).message ?? '';
+}
diff --git a/developer/src/kmc-kmn/src/compiler/compiler.ts b/developer/src/kmc-kmn/src/compiler/compiler.ts
index ca107a584cb..109ec0cfa57 100644
--- a/developer/src/kmc-kmn/src/compiler/compiler.ts
+++ b/developer/src/kmc-kmn/src/compiler/compiler.ts
@@ -8,7 +8,7 @@ TODO: implement additional interfaces:
// TODO: rename wasm-host?
import { UnicodeSetParser, UnicodeSet, VisualKeyboard, KvkFileReader, KeymanCompiler, KeymanCompilerArtifacts, KeymanCompilerArtifactOptional, KeymanCompilerResult, KeymanCompilerArtifact } from '@keymanapp/common-types';
import { CompilerCallbacks, CompilerEvent, CompilerOptions, KeymanFileTypes, KvkFileWriter, KvksFileReader } from '@keymanapp/common-types';
-import { Osk } from '@keymanapp/developer-utils';
+import * as Osk from './osk.js';
import loadWasmHost from '../import/kmcmplib/wasm-host.js';
import { CompilerMessages, mapErrorFromKmcmplib } from './kmn-compiler-messages.js';
import { WriteCompiledKeyboard } from '../kmw-compiler/kmw-compiler.js';
@@ -59,11 +59,23 @@ export interface KmnCompilerResultExtra {
/**
* @public
- * Internal in-memory result from a successful compilation
+ * Internal in-memory build artifacts from a successful compilation
*/
export interface KmnCompilerArtifacts extends KeymanCompilerArtifacts {
+ /**
+ * Binary keyboard filedata and filename - installable into Keyman desktop
+ * projects
+ */
kmx?: KeymanCompilerArtifactOptional;
+ /**
+ * Binary on screen keyboard filedata and filename - installable into Keyman
+ * desktop projects alongside .kmx
+ */
kvk?: KeymanCompilerArtifactOptional;
+ /**
+ * Javascript keyboard filedata and filename - installable into KeymanWeb,
+ * Keyman mobile products
+ */
js?: KeymanCompilerArtifactOptional;
};
@@ -72,8 +84,19 @@ export interface KmnCompilerArtifacts extends KeymanCompilerArtifacts {
* Build artifacts from the .kmn compiler
*/
export interface KmnCompilerResult extends KeymanCompilerResult {
+ /**
+ * Internal in-memory build artifacts from a successful compilation. Caller
+ * can write these to disk with {@link KmnCompiler.write}
+ */
artifacts: KmnCompilerArtifacts;
+ /**
+ * Internal additional metadata used by secondary compile phases such as
+ * KmwCompiler, not intended for external use
+ */
extra: KmnCompilerResultExtra;
+ /**
+ * Mapping data for `&displayMap`, intended for use by kmc-analyze
+ */
displayMap?: Osk.PuaMap;
};
@@ -129,7 +152,8 @@ export class KmnCompiler implements KeymanCompiler, UnicodeSetParser {
/**
* Initialize the compiler, including loading the WASM host for kmcmplib.
* Copies options.
- * @param callbacks - Callbacks for external interfaces, including message reporting and file io
+ * @param callbacks - Callbacks for external interfaces, including message
+ * reporting and file io
* @param options - Compiler options
* @returns false if initialization fails
*/
@@ -277,9 +301,9 @@ export class KmnCompiler implements KeymanCompiler, UnicodeSetParser {
/**
* Compiles a .kmn file to .kmx, .kvk, and/or .js files. Returns an object
- * containing binary artifacts on succes. The files are passed in by name, and
- * the compiler will use callbacks as passed to the {@link KmnCompiler.init}
- * function to read any input files by disk.
+ * containing binary artifacts on success. The files are passed in by name,
+ * and the compiler will use callbacks as passed to the
+ * {@link KmnCompiler.init} function to read any input files by disk.
* @param infile - Path to source file. Path will be parsed to find relative
* references in the .kmn file, such as icon or On Screen
* Keyboard file
diff --git a/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts b/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts
index 944ba2c33ea..5a5208009af 100644
--- a/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts
+++ b/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts
@@ -1,5 +1,6 @@
import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerEvent, CompilerMessageSpec as m, CompilerMessageDef as def, CompilerMessageSpecWithException } from "@keymanapp/common-types";
import { kmnfile } from "../kmw-compiler/compiler-globals.js";
+import { KeymanUrls } from "@keymanapp/developer-utils";
const Namespace = CompilerErrorNamespace.KmnCompiler;
const SevInfo = CompilerErrorSeverity.Info | Namespace;
@@ -86,7 +87,7 @@ export class KmnCompilerMessages {
o.e ?? 'unknown error',
`Raised when KmnCompiler or one of its components has an internal
error. If you experience this error, it should be reported to the Keyman
- team for resolution via https://github.com/keymanapp/keyman/issues/new.`
+ team for resolution via ${KeymanUrls.NEW_KEYMAN_ISSUE()}.`
);
static FATAL_MissingWasmModule = SevFatal | 0x901;
@@ -110,7 +111,7 @@ export class KmnCompilerMessages {
`Callbacks were not set with init`,
`Raised when KmnCompiler or one of its components experiences an internal
error. If you experience this error, it should be reported to the Keyman
- team for resolution via https://github.com/keymanapp/keyman/issues/new.`
+ team for resolution via ${KeymanUrls.NEW_KEYMAN_ISSUE()}.`
);
static FATAL_UnicodeSetOutOfRange = SevFatal | 0x904;
@@ -120,7 +121,7 @@ export class KmnCompilerMessages {
`UnicodeSet buffer was too small`,
`Raised when caller to UnicodeSet functions provides an invalid buffer. If
you experience this error, it should be reported to the Keyman team for
- resolution via https://github.com/keymanapp/keyman/issues/new.`
+ resolution via ${KeymanUrls.NEW_KEYMAN_ISSUE()}.`
);
// TODO: rename the following functions to Error_UsetHasStrings etc
@@ -134,7 +135,7 @@ export class KmnCompilerMessages {
keyboards do not support multi-character strings in usets. To resolve this,
reformat the uset to avoid the use of multi-character strings.
- More on uset: https://www.unicode.org/reports/tr35/tr35-keyboards.html#element-uset`
+ More on uset: ${KeymanUrls.LDML_SPEC('element-uset')}`
);
static ERROR_UnicodeSetHasProperties = SevError | 0x906;
@@ -146,7 +147,7 @@ export class KmnCompilerMessages {
make implementations dependent on a particular version of Unicode. To
resolve this, reformat the uset to avoid the use of properties.
- More on uset: https://www.unicode.org/reports/tr35/tr35-keyboards.html#element-uset`
+ More on uset: ${KeymanUrls.LDML_SPEC('element-uset')}`
);
static ERROR_UnicodeSetSyntaxError = SevError | 0x907;
@@ -156,7 +157,7 @@ export class KmnCompilerMessages {
`The provided uset has a syntax error and could not be parsed. Verify the
format of the uset against the specification.
- More on uset: https://www.unicode.org/reports/tr35/tr35-keyboards.html#element-uset`
+ More on uset: ${KeymanUrls.LDML_SPEC('element-uset')}`
);
static ERROR_InvalidKvksFile = SevError | 0x908;
@@ -167,7 +168,7 @@ export class KmnCompilerMessages {
There may be additional information in the error message to help you
resolve the error.
- More on .kvks file format: https://help.keyman.com/developer/current-version/reference/file-types/kvks`
+ More on .kvks file format: ${KeymanUrls.FILE_TYPE('kvks')}`
);
static WARN_InvalidVkeyInKvksFile = SevWarn | 0x909;
@@ -177,7 +178,7 @@ export class KmnCompilerMessages {
`The .kvks file contained a virtual key that was not supported by
Keyman. Remove this virtual key from the .kvks file.
- Supported virtual keys: https://help.keyman.com/developer/language/guide/virtual-keys#common-virtual-key-codes`
+ Supported virtual keys: ${KeymanUrls.VIRTUAL_KEYS()}`
);
static ERROR_InvalidDisplayMapFile = SevError | 0x90A;
@@ -188,7 +189,7 @@ export class KmnCompilerMessages {
file. There may be additional information in the error message to help you
resolve the error.
- More on displayMap: https://help.keyman.com/developer/language/reference/displaymap`
+ More on displayMap: ${KeymanUrls.KMN_REF('displaymap')}`
);
static ERROR_InvalidKvkFile = SevError | 0x90B;
@@ -199,7 +200,7 @@ export class KmnCompilerMessages {
may be additional information in the error message to help you resolve the
error.
- More on .kvk files: https://help.keyman.com/developer/current-version/reference/file-types/kvk`
+ More on .kvk files: ${KeymanUrls.FILE_TYPE('kvk')}`
);
static ERROR_FileNotFound = SevError | 0x90C;
diff --git a/developer/src/common/web/utils/src/osk.ts b/developer/src/kmc-kmn/src/compiler/osk.ts
similarity index 100%
rename from developer/src/common/web/utils/src/osk.ts
rename to developer/src/kmc-kmn/src/compiler/osk.ts
diff --git a/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts b/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts
index b5bb31f1023..19d58d64ba9 100644
--- a/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts
+++ b/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts
@@ -16,7 +16,7 @@ const m = (code: number, message: string, o?: {filename?: string, line?: number}
});
/**
- * @public
+ * @internal
* Error messages reported by the KeymanWeb .kmn compiler.
*/
export class KmwCompilerMessages extends KmnCompilerMessages {
diff --git a/developer/src/kmc-kmn/src/kmw-compiler/validate-layout-file.ts b/developer/src/kmc-kmn/src/kmw-compiler/validate-layout-file.ts
index a8005d2a46e..e2f0d23a73d 100644
--- a/developer/src/kmc-kmn/src/kmw-compiler/validate-layout-file.ts
+++ b/developer/src/kmc-kmn/src/kmw-compiler/validate-layout-file.ts
@@ -4,7 +4,7 @@ import { JavaScript_Key } from "./javascript-strings.js";
import { TRequiredKey, CRequiredKeys, CSpecialText, CSpecialText14Map, CSpecialText17Map, CSpecialTextMinVer, CSpecialTextMaxVer } from "./constants.js";
import { KeymanWebTouchStandardKeyNames, KMWAdditionalKeyNames, VKeyNames } from "./keymanweb-key-codes.js";
import { KmwCompilerMessages } from "./kmw-compiler-messages.js";
-import { Osk } from '@keymanapp/developer-utils';
+import * as Osk from '../compiler/osk.js';
interface VLFOutput {
output: string;
diff --git a/developer/src/kmc-kmn/src/main.ts b/developer/src/kmc-kmn/src/main.ts
index d09bca91b21..a7290970acb 100644
--- a/developer/src/kmc-kmn/src/main.ts
+++ b/developer/src/kmc-kmn/src/main.ts
@@ -6,3 +6,6 @@
export { KmnCompiler, KmnCompilerOptions, KmnCompilerResult, KmnCompilerArtifacts, KmnCompilerResultExtra, CompilerResultExtraStore, CompilerResultExtraGroup } from './compiler/compiler.js';
export { KmnCompilerMessages, CompilerMessages } from './compiler/kmn-compiler-messages.js';
export { KmwCompilerMessages } from './kmw-compiler/kmw-compiler-messages.js';
+
+import * as Osk from './compiler/osk.js';
+export { Osk };
diff --git a/developer/src/kmc-ldml/src/compiler/compiler.ts b/developer/src/kmc-ldml/src/compiler/compiler.ts
index 17f4fed6be2..b972baf7509 100644
--- a/developer/src/kmc-ldml/src/compiler/compiler.ts
+++ b/developer/src/kmc-ldml/src/compiler/compiler.ts
@@ -41,16 +41,42 @@ export const SECTION_COMPILERS = [
TranCompiler,
];
+/**
+ * @public
+ * Internal in-memory build artifacts from a successful compilation
+ */
export interface LdmlKeyboardCompilerArtifacts extends KeymanCompilerArtifacts {
+ /**
+ * Binary keyboard filedata and filename - installable into Keyman desktop
+ * projects
+ */
kmx?: KeymanCompilerArtifactOptional;
+ /**
+ * Binary on screen keyboard filedata and filename - installable into Keyman
+ * desktop projects alongside .kmx
+ */
kvk?: KeymanCompilerArtifactOptional;
+ /**
+ * Javascript keyboard filedata and filename - installable into KeymanWeb,
+ * Keyman mobile products
+ */
js?: KeymanCompilerArtifactOptional;
};
export interface LdmlKeyboardCompilerResult extends KeymanCompilerResult {
+ /**
+ * Internal in-memory build artifacts from a successful compilation. Caller
+ * can write these to disk with {@link LdmlKeyboardCompiler.write}
+ */
artifacts: LdmlKeyboardCompilerArtifacts;
};
+/**
+ * @public
+ * Compiles a LDML keyboard .xml file to a .kmx (KMXPlus), .kvk, and/or .js. The
+ * compiler does not read or write from filesystem or network directly, but
+ * relies on callbacks for all external IO.
+ */
export class LdmlKeyboardCompiler implements KeymanCompiler {
private callbacks: CompilerCallbacks;
private options: LdmlCompilerOptions;
@@ -58,12 +84,31 @@ export class LdmlKeyboardCompiler implements KeymanCompiler {
// uset parser
private usetparser?: UnicodeSetParser = undefined;
+ /**
+ * Initialize the compiler, including loading the WASM host for uset parsing.
+ * Copies options.
+ * @param callbacks - Callbacks for external interfaces, including message
+ * reporting and file io
+ * @param options - Compiler options
+ * @returns false if initialization fails
+ */
async init(callbacks: CompilerCallbacks, options: LdmlCompilerOptions): Promise {
this.options = {...options};
this.callbacks = callbacks;
return true;
}
+ /**
+ * Compiles a LDML keyboard .xml file to .kmx, .kvk, and/or .js files. Returns
+ * an object containing binary artifacts on success. The files are passed in
+ * by name, and the compiler will use callbacks as passed to the
+ * {@link LdmlKeyboardCompiler.init} function to read any input files by disk.
+ * @param infile - Path to source file.
+ * @param outfile - Path to output file. The file will not be written to, but
+ * will be included in the result for use by
+ * {@link LdmlKeyboardCompiler.write}.
+ * @returns Binary artifacts on success, null on failure.
+ */
async run(inputFilename: string, outputFilename?: string): Promise {
let compilerOptions: LdmlCompilerOptions = {
@@ -115,6 +160,17 @@ export class LdmlKeyboardCompiler implements KeymanCompiler {
};
}
+ /**
+ * Write artifacts from a successful compile to disk, via callbacks methods.
+ * The artifacts written may include:
+ *
+ * - .kmx file - binary keyboard used by Keyman on desktop platforms
+ * - .kvk file - binary on screen keyboard used by Keyman on desktop platforms
+ * - .js file - Javascript keyboard for web and touch platforms
+ *
+ * @param artifacts - object containing artifact binary data to write out
+ * @returns true on success
+ */
async write(artifacts: LdmlKeyboardCompilerArtifacts): Promise {
if(artifacts.kmx) {
this.callbacks.fs.writeFileSync(artifacts.kmx.filename, artifacts.kmx.data);
@@ -132,6 +188,7 @@ export class LdmlKeyboardCompiler implements KeymanCompiler {
}
/**
+ * @internal
* Construct or return a UnicodeSetParser, aka KmnCompiler
* @returns the held UnicodeSetParser
*/
@@ -155,10 +212,11 @@ export class LdmlKeyboardCompiler implements KeymanCompiler {
}
/**
+ * @internal
* Loads a LDML Keyboard xml file and compiles into in-memory xml
* structures.
- * @param filename input filename, will use callback to load from disk
- * @returns the source file, or null if invalid
+ * @param filename - input filename, will use callback to load from disk
+ * @returns the source file, or null if invalid
*/
public load(filename: string): LDMLKeyboardXMLSourceFile | null {
const reader = new LDMLKeyboardXMLSourceFileReader(this.options.readerOptions, this.callbacks);
@@ -188,54 +246,57 @@ export class LdmlKeyboardCompiler implements KeymanCompiler {
}
/**
+ * @internal
* Loads a LDML Keyboard test data xml file and compiles into in-memory xml
* structures.
- * @param filename input filename, will use callback to load from disk
- * @returns the source file, or null if invalid
+ * @param filename - input filename, will use callback to load from disk
+ * @returns the source file, or null if invalid
*/
- public loadTestData(filename: string): LDMLKeyboardTestDataXMLSourceFile | null {
- const reader = new LDMLKeyboardXMLSourceFileReader(this.options.readerOptions, this.callbacks);
- const data = this.callbacks.loadFile(filename);
- if(!data) {
- this.callbacks.reportMessage(CompilerMessages.Error_InvalidFile({errorText: 'Unable to read XML file'}));
- return null;
- }
- const source = reader.loadTestData(data);
- /* c8 ignore next 4 */
- if(!source) {
- this.callbacks.reportMessage(CompilerMessages.Error_InvalidFile({errorText: 'Unable to load XML file'}));
- return null;
- }
- // TODO-LDML: The unboxed data doesn't match the schema anymore. Skipping validation, for now.
-
- // try {
- // if (!reader.validate(source)) {
- // return null;
- // }
- // } catch(e) {
- // this.callbacks.reportMessage(CompilerMessages.Error_InvalidFile({errorText: e.toString()}));
- // return null;
- // }
-
- return source;
+ public loadTestData(filename: string): LDMLKeyboardTestDataXMLSourceFile | null {
+ const reader = new LDMLKeyboardXMLSourceFileReader(this.options.readerOptions, this.callbacks);
+ const data = this.callbacks.loadFile(filename);
+ if(!data) {
+ this.callbacks.reportMessage(CompilerMessages.Error_InvalidFile({errorText: 'Unable to read XML file'}));
+ return null;
}
+ const source = reader.loadTestData(data);
+ /* c8 ignore next 4 */
+ if(!source) {
+ this.callbacks.reportMessage(CompilerMessages.Error_InvalidFile({errorText: 'Unable to load XML file'}));
+ return null;
+ }
+ // TODO-LDML: The unboxed data doesn't match the schema anymore. Skipping validation, for now.
+
+ // try {
+ // if (!reader.validate(source)) {
+ // return null;
+ // }
+ // } catch(e) {
+ // this.callbacks.reportMessage(CompilerMessages.Error_InvalidFile({errorText: e.toString()}));
+ // return null;
+ // }
+
+ return source;
+ }
/**
+ * @internal
* Validates that the LDML keyboard source file and lints. Actually just
* compiles the keyboard and returns `true` if everything is good...
- * @param source
- * @returns true if the file validates
+ * @param source - in-memory representation of LDML keyboard xml file
+ * @returns true if the file validates
*/
public async validate(source: LDMLKeyboardXMLSourceFile): Promise {
return !!(await this.compile(source, true));
}
/**
+ * @internal
* Transforms in-memory LDML keyboard xml file to an intermediate
* representation of a .kmx file.
- * @param source in-memory representation of LDML keyboard xml file
- * @returns KMXPlusFile intermediate file
+ * @param source - in-memory representation of LDML keyboard xml file
+ * @returns KMXPlusFile intermediate file
*/
public async compile(source: LDMLKeyboardXMLSourceFile, postValidate?: boolean): Promise {
const sections = this.buildSections(source);
@@ -282,11 +343,7 @@ export class LdmlKeyboardCompiler implements KeymanCompiler {
}
const sect = section.compile(globalSections);
- /* c8 ignore next 7 */
if(!sect) {
- // This should not happen -- validate() should have told us
- // if something is going to fail to compile
- this.callbacks.reportMessage(CompilerMessages.Fatal_SectionCompilerFailed({sect:section.id}));
passed = false;
continue;
}
diff --git a/developer/src/kmc-ldml/src/compiler/ldml-compiler-options.ts b/developer/src/kmc-ldml/src/compiler/ldml-compiler-options.ts
index d1f25fe8c7d..9ea0f043bb1 100644
--- a/developer/src/kmc-ldml/src/compiler/ldml-compiler-options.ts
+++ b/developer/src/kmc-ldml/src/compiler/ldml-compiler-options.ts
@@ -1,5 +1,9 @@
import { CompilerOptions, LDMLKeyboardXMLSourceFileReaderOptions } from "@keymanapp/common-types";
+/**
+ * @public
+ * Options for the .xml LDML keyboard compiler
+ */
export interface LdmlCompilerOptions extends CompilerOptions {
/**
* Paths and other options required for reading .xml files
diff --git a/developer/src/kmc-ldml/src/compiler/messages.ts b/developer/src/kmc-ldml/src/compiler/messages.ts
index 710a58b74e5..a4f19f170a6 100644
--- a/developer/src/kmc-ldml/src/compiler/messages.ts
+++ b/developer/src/kmc-ldml/src/compiler/messages.ts
@@ -1,10 +1,13 @@
-import { util, CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageDef as def, CompilerMessageSpecWithException } from "@keymanapp/common-types";
+import { util, CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageDef as def } from "@keymanapp/common-types";
// const SevInfo = CompilerErrorSeverity.Info | CompilerErrorNamespace.LdmlKeyboardCompiler;
const SevHint = CompilerErrorSeverity.Hint | CompilerErrorNamespace.LdmlKeyboardCompiler;
const SevWarn = CompilerErrorSeverity.Warn | CompilerErrorNamespace.LdmlKeyboardCompiler;
const SevError = CompilerErrorSeverity.Error | CompilerErrorNamespace.LdmlKeyboardCompiler;
-const SevFatal = CompilerErrorSeverity.Fatal | CompilerErrorNamespace.LdmlKeyboardCompiler;
+// const SevFatal = CompilerErrorSeverity.Fatal | CompilerErrorNamespace.LdmlKeyboardCompiler;
+/**
+ * @internal
+ */
export class CompilerMessages {
static HINT_NormalizationDisabled = SevHint | 0x0001;
static Hint_NormalizationDisabled = () => m(this.HINT_NormalizationDisabled, `normalization=disabled is not recommended.`);
@@ -56,9 +59,7 @@ export class CompilerMessages {
static Error_MustBeAtLeastOneLayerElement = () =>
m(this.ERROR_MustBeAtLeastOneLayerElement, `The source file must contain at least one layer element.`);
- static FATAL_SectionCompilerFailed = SevFatal | 0x000F;
- static Fatal_SectionCompilerFailed = (o:{sect: string}) =>
- CompilerMessageSpecWithException(this.FATAL_SectionCompilerFailed, null, `The compiler for '${def(o.sect)}' failed unexpectedly.`);
+ // 0x000F - available
/** annotate the to= or id= entry */
private static outputOrKeyId(o:{output?: string, keyId?: string}) {
diff --git a/developer/src/kmc-ldml/src/compiler/tran.ts b/developer/src/kmc-ldml/src/compiler/tran.ts
index 1bb392c38b2..bf27fb2fea5 100644
--- a/developer/src/kmc-ldml/src/compiler/tran.ts
+++ b/developer/src/kmc-ldml/src/compiler/tran.ts
@@ -154,13 +154,13 @@ export abstract class TransformCompiler
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/bksp/minimal.xml b/developer/src/kmc-ldml/test/fixtures/sections/bksp/minimal.xml
index 184991ad4c1..d0a05695c36 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/bksp/minimal.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/bksp/minimal.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/disp/escaped.xml b/developer/src/kmc-ldml/test/fixtures/sections/disp/escaped.xml
index 44412e2c1fd..d2a2dd611a0 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/disp/escaped.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/disp/escaped.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-both.xml b/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-both.xml
index 41c414b41e3..1f0c35dfd0e 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-both.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-both.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-dupid.xml b/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-dupid.xml
index c3db581640f..6ff77d83b0d 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-dupid.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-dupid.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-dupto.xml b/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-dupto.xml
index ec5cda2e425..1046e0f4d85 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-dupto.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-dupto.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-none.xml b/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-none.xml
index e6c43aafd97..0eb1435edca 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-none.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-none.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-var.xml b/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-var.xml
index 8ba588ce14b..af46b249951 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-var.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-var.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/disp/maximal.xml b/developer/src/kmc-ldml/test/fixtures/sections/disp/maximal.xml
index d3b66576731..aeab3a71a5c 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/disp/maximal.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/disp/maximal.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/disp/minimal.xml b/developer/src/kmc-ldml/test/fixtures/sections/disp/minimal.xml
index 15590710ba3..ead9c5d2031 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/disp/minimal.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/disp/minimal.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/disp/options-only.xml b/developer/src/kmc-ldml/test/fixtures/sections/disp/options-only.xml
index ee967fc027c..7f08c5dd984 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/disp/options-only.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/disp/options-only.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/disp/typical.xml b/developer/src/kmc-ldml/test/fixtures/sections/disp/typical.xml
index 9486e904b7c..958e5d83815 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/disp/typical.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/disp/typical.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/finl/minimal.xml b/developer/src/kmc-ldml/test/fixtures/sections/finl/minimal.xml
index 022241b4f57..bb437bec764 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/finl/minimal.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/finl/minimal.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/escaped.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/escaped.xml
index 00e67686e4c..99f9609d21b 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/keys/escaped.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/escaped.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/escaped2.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/escaped2.xml
index 13835331a91..20991504b78 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/keys/escaped2.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/escaped2.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/gap-switch.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/gap-switch.xml
index e714f74c76f..a22eb6dc8e9 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/keys/gap-switch.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/gap-switch.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware.xml
index 6f7884888cb..c793eefa4e6 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware_iso.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware_iso.xml
index 39947cd1898..1d2d53aa131 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware_iso.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware_iso.xml
@@ -1,11 +1,10 @@
-
-
+
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware_us.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware_us.xml
index 238f89e4329..0c4a0ee78a0 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware_us.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/hardware_us.xml
@@ -1,11 +1,10 @@
-
-
+
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-bad-modifier.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-bad-modifier.xml
index 5bde7c586c1..29a2ba7b73c 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-bad-modifier.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-bad-modifier.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-hardware-too-many-keys.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-hardware-too-many-keys.xml
index f4d78bf203c..6255e04d559 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-hardware-too-many-keys.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-hardware-too-many-keys.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-hardware-too-many-rows.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-hardware-too-many-rows.xml
index 77ec94b805f..a80f26e39c1 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-hardware-too-many-rows.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-hardware-too-many-rows.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-key-missing-attrs.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-key-missing-attrs.xml
index 0aa7fe9562a..0dec7a50fc7 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-key-missing-attrs.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-key-missing-attrs.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-missing-flick.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-missing-flick.xml
index 494d61fe59e..d5ea11be313 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-missing-flick.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-missing-flick.xml
@@ -1,6 +1,5 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-key.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-key.xml
index 395e9204a0a..6417058b5c4 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-key.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-key.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1.xml
index 233aa516db8..d679a35421d 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1b.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1b.xml
index 9e8f15bb960..384babd70c7 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1b.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1b.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/markers.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/markers.xml
index 4dab6ea4f25..2f5183600e1 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/keys/markers.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/markers.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/maximal-nfc.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/maximal-nfc.xml
index 11a08b1e9b1..c7c6dccd712 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/keys/maximal-nfc.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/maximal-nfc.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/maximal.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/maximal.xml
index 20c1e5534c7..b7c5ade4bc2 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/keys/maximal.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/maximal.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/minimal.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/minimal.xml
index 38002138f97..f670d95d4f1 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/keys/minimal.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/minimal.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/error-custom-us-form.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-custom-us-form.xml
index 916ea8cb088..3a242dddfd7 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/layr/error-custom-us-form.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-custom-us-form.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/error-custom-zzz-form.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-custom-zzz-form.xml
index 12d3f6f77bb..b1ca16c5a18 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/layr/error-custom-zzz-form.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/error-custom-zzz-form.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-invalid-form.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-invalid-form.xml
index 469c8d0d8f0..c15dac8c269 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-invalid-form.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-invalid-form.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-missing-hardware.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-missing-hardware.xml
index 51707442338..ddc77d70abb 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-missing-hardware.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-missing-hardware.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-missing-layer.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-missing-layer.xml
index b3ca93e0775..211961d6162 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-missing-layer.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-missing-layer.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-missing-layer2.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-missing-layer2.xml
index 26b5b98bdc8..c8a38602eac 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-missing-layer2.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-missing-layer2.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-multi-hardware.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-multi-hardware.xml
index df544e40705..7d3df0cb34f 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-multi-hardware.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/invalid-multi-hardware.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/warn-custom-us-form.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/warn-custom-us-form.xml
index ec1a75afe7b..ace1485521c 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/layr/warn-custom-us-form.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/warn-custom-us-form.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/warn-custom-zzz-form.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/warn-custom-zzz-form.xml
index bf17a8a0879..52c6e3a2e9f 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/layr/warn-custom-zzz-form.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/warn-custom-zzz-form.xml
@@ -1,7 +1,6 @@
-
-
+
diff --git a/developer/src/kmc-ldml/test/fixtures/sections/loca/invalid-locale.xml b/developer/src/kmc-ldml/test/fixtures/sections/loca/invalid-locale.xml
index 3dd5e8b1c3e..3d63234dbe7 100644
--- a/developer/src/kmc-ldml/test/fixtures/sections/loca/invalid-locale.xml
+++ b/developer/src/kmc-ldml/test/fixtures/sections/loca/invalid-locale.xml
@@ -1,7 +1,6 @@
-
-
+