From 53b20e6adc962cb7bc317fa508fdd543760d2ef8 Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Thu, 13 Feb 2025 16:47:12 -0600 Subject: [PATCH] feat(developer): use peggy grammar in from/to transform Fixes: #13175 --- developer/src/kmc-ldml/.gitignore | 1 + developer/src/kmc-ldml/build.sh | 3 +++ developer/src/kmc-ldml/package.json | 2 +- .../src/compiler/ldml-compiler-messages.ts | 5 +++++ developer/src/kmc-ldml/src/compiler/tran.ts | 17 +++++++++++++++++ developer/src/kmc-ldml/src/util/abnf/abnf.ts | 6 ++++++ developer/src/kmc-ldml/tsconfig.json | 3 ++- package-lock.json | 7 ++++++- 8 files changed, 41 insertions(+), 3 deletions(-) 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" }