diff --git a/developer/src/kmc-ldml/.gitignore b/developer/src/kmc-ldml/.gitignore
index c27c0f4e3b..0a7af4d6dd 100644
--- a/developer/src/kmc-ldml/.gitignore
+++ b/developer/src/kmc-ldml/.gitignore
@@ -1 +1,2 @@
src/util/abnf/*.pegjs
+src/util/abnf/*.js
diff --git a/developer/src/kmc-ldml/build.sh b/developer/src/kmc-ldml/build.sh
index abd213e7c4..5335ca69c0 100755
--- a/developer/src/kmc-ldml/build.sh
+++ b/developer/src/kmc-ldml/build.sh
@@ -54,9 +54,12 @@ function do_build_abnf() {
base=$(basename "$file" .abnf)
peg="$base.pegjs"
outfile="./src/util/abnf/$peg"
+ outjs="./src/util/abnf/$base.js"
if [ ! -f "$outfile" ]; then
printf "${COLOR_GREY}abnf_gen ${COLOR_PURPLE}${base}.abnf -> ${peg}${COLOR_RESET}"
npx -p abnf abnf_gen "$file" -o "$outfile"
+ printf "${COLOR_GREY}abnf_gen ${COLOR_PURPLE}${peg} -> ${base}.js${COLOR_RESET}"
+ npx peggy "$outfile" -o "$outjs" --format es --dts
fi
done
}
diff --git a/developer/src/kmc-ldml/package.json b/developer/src/kmc-ldml/package.json
index 08708b64cc..5375e2673a 100644
--- a/developer/src/kmc-ldml/package.json
+++ b/developer/src/kmc-ldml/package.json
@@ -29,7 +29,6 @@
"@keymanapp/keyman-version": "*",
"@keymanapp/kmc-kmn": "*",
"@keymanapp/ldml-keyboard-constants": "*",
- "peggy": "^4.2.0",
"semver": "^7.5.4"
},
"devDependencies": {
@@ -44,6 +43,7 @@
"chalk": "^2.4.2",
"common-tags": "^1.8.2",
"mocha": "^8.4.0",
+ "peggy": "^4.2.0",
"typescript": "^5.4.5"
},
"mocha": {
diff --git a/developer/src/kmc-ldml/src/compiler/ldml-compiler-messages.ts b/developer/src/kmc-ldml/src/compiler/ldml-compiler-messages.ts
index 3577a2e110..7a78126423 100644
--- a/developer/src/kmc-ldml/src/compiler/ldml-compiler-messages.ts
+++ b/developer/src/kmc-ldml/src/compiler/ldml-compiler-messages.ts
@@ -258,4 +258,9 @@ export class LdmlCompilerMessages {
\`\`.
`);
+ static ERROR_UnparseableTransformTo = SevErrorTransform | 0x06;
+ static Error_UnparseableTransformTo = (o: { to: string, message: string }) =>
+ m(this.ERROR_UnparseableTransformTo, `Invalid transform to="${def(o.to)}": "${def(o.message)}"`);
+
+
}
diff --git a/developer/src/kmc-ldml/src/compiler/tran.ts b/developer/src/kmc-ldml/src/compiler/tran.ts
index 1a91e8d382..ea55ec2ae8 100644
--- a/developer/src/kmc-ldml/src/compiler/tran.ts
+++ b/developer/src/kmc-ldml/src/compiler/tran.ts
@@ -17,6 +17,7 @@ import LKTransforms = LDMLKeyboard.LKTransforms;
import { verifyValidAndUnique } from "../util/util.js";
import { LdmlCompilerMessages } from "./ldml-compiler-messages.js";
import { Substitutions, SubstitutionUse } from "./substitution-tracker.js";
+import { transform_from_parse, transform_to_parse } from "../util/abnf/abnf.js";
type TransformCompilerType = 'simple' | 'backspace';
@@ -144,8 +145,24 @@ export abstract class TransformCompiler=18"
}
@@ -13615,6 +13619,7 @@
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/source-map-generator/-/source-map-generator-0.8.0.tgz",
"integrity": "sha512-psgxdGMwl5MZM9S3FWee4EgsEaIjahYV5AzGnwUvPhWeITz/j6rKpysQHlQ4USdxvINlb8lKfWGIXwfkrgtqkA==",
+ "dev": true,
"engines": {
"node": ">= 10"
}