From 626ed855ac427cb915eeb06403e8fcb5bdb0e899 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Tue, 29 Sep 2026 11:40:10 +0100 Subject: [PATCH] feat(developer): stripped compile targets out of the parser --- .../kmc-kmn/src/ng-compiler/kmn-analyzer.ts | 30 ++-------- .../src/kmc-kmn/src/ng-compiler/kmn-file.bnf | 3 +- .../kmc-kmn/src/ng-compiler/token-to-node.ts | 10 ---- .../test/ng-compiler/keyboard-names.ts | 4 +- .../test/ng-compiler/kmn-analyzer.tests.ts | 60 +------------------ 5 files changed, 9 insertions(+), 98 deletions(-) diff --git a/developer/src/kmc-kmn/src/ng-compiler/kmn-analyzer.ts b/developer/src/kmc-kmn/src/ng-compiler/kmn-analyzer.ts index 602c518199..2382723d4f 100644 --- a/developer/src/kmc-kmn/src/ng-compiler/kmn-analyzer.ts +++ b/developer/src/kmc-kmn/src/ng-compiler/kmn-analyzer.ts @@ -160,35 +160,15 @@ export class KmnTreeRebuild extends ASTRebuild { } /** - * (BNF) line: compileTarget? content? NEWLINE + * (BNF) line: content? NEWLINE */ export class LineRule extends SingleChildRule { public constructor() { super(); - const compileTarget = new CompileTargetRule(); - const optCompileTarget = new OptionalRule(compileTarget); - const content = new ContentRule(); - const optContent = new OptionalRule(content); - const newline = new TokenRule(TokenType.NEWLINE, true); - this.rule = new SequenceRule([optCompileTarget, optContent, newline]); - } -} - -/** - * (BNF) compileTarget: KEYMAN|KEYMANONLY|KEYMANWEB|KMFL|WEAVER - * - * https://help.keyman.com/developer/language/guide/compile-targets - */ -export class CompileTargetRule extends AlternateTokenRule { - // TODO-NG-COMPILER: warning/error for compile targets - public constructor() { - super([ - TokenType.KEYMAN, - TokenType.KEYMANONLY, - TokenType.KEYMANWEB, - TokenType.KMFL, - TokenType.WEAVER, - ], true); + const content = new ContentRule(); + const optContent = new OptionalRule(content); + const newline = new TokenRule(TokenType.NEWLINE, true); + this.rule = new SequenceRule([optContent, newline]); } } diff --git a/developer/src/kmc-kmn/src/ng-compiler/kmn-file.bnf b/developer/src/kmc-kmn/src/ng-compiler/kmn-file.bnf index 7a38ef4d1b..5b4ee476b2 100644 --- a/developer/src/kmc-kmn/src/ng-compiler/kmn-file.bnf +++ b/developer/src/kmc-kmn/src/ng-compiler/kmn-file.bnf @@ -1,6 +1,5 @@ kmnTree: line* -line: compileTarget? content? NEWLINE -compileTarget: KEYMAN|KEYMANONLY|KEYMANWEB|KMFL|WEAVER +line: content? NEWLINE content: systemStoreAssign|capsAlwaysOff|capsOnOnly|shiftFreesCaps| headerAssign|normalStoreAssign|ruleBlock text: plainText|outsStatement diff --git a/developer/src/kmc-kmn/src/ng-compiler/token-to-node.ts b/developer/src/kmc-kmn/src/ng-compiler/token-to-node.ts index 13f24fc313..ecc0e8fafc 100644 --- a/developer/src/kmc-kmn/src/ng-compiler/token-to-node.ts +++ b/developer/src/kmc-kmn/src/ng-compiler/token-to-node.ts @@ -76,18 +76,10 @@ export const TOKEN_TO_NODE = [ {tokenType: TokenType.INDEX, nodeType: NodeType.INDEX}, // https://help.keyman.com/developer/language/reference/keyboardversion {tokenType: TokenType.KEYBOARDVERSION, nodeType: NodeType.KEYBOARDVERSION}, - // https://help.keyman.com/developer/language/guide/compile-targets - {tokenType: TokenType.KEYMAN, nodeType: NodeType.KEYMAN}, - // https://help.keyman.com/developer/language/guide/compile-targets - {tokenType: TokenType.KEYMANONLY, nodeType: NodeType.KEYMANONLY}, - // https://help.keyman.com/developer/language/guide/compile-targets - {tokenType: TokenType.KEYMANWEB, nodeType: NodeType.KEYMANWEB}, // https://help.keyman.com/developer/language/reference/group {tokenType: TokenType.KEYS, nodeType: NodeType.KEYS}, // https://help.keyman.com/developer/language/guide/virtual-keys {tokenType: TokenType.KEY_CODE, nodeType: NodeType.KEY_CODE}, - // https://help.keyman.com/developer/language/guide/compile-targets - {tokenType: TokenType.KMFL, nodeType: NodeType.KMFL}, // https://help.keyman.com/developer/language/reference/kmw_embedcss {tokenType: TokenType.KMW_EMBEDCSS, nodeType: NodeType.KMW_EMBEDCSS}, // https://help.keyman.com/developer/language/reference/kmw_embedjs @@ -192,8 +184,6 @@ export const TOKEN_TO_NODE = [ {tokenType: TokenType.VERSION_HEADER, nodeType: NodeType.VERSION_HEADER}, // https://help.keyman.com/developer/language/reference/visualkeyboard {tokenType: TokenType.VISUALKEYBOARD, nodeType: NodeType.VISUALKEYBOARD}, - // https://help.keyman.com/developer/language/guide/compile-targets - {tokenType: TokenType.WEAVER, nodeType: NodeType.WEAVER}, // https://help.keyman.com/developer/language/reference/windowslanguages {tokenType: TokenType.WINDOWSLANGUAGES, nodeType: NodeType.WINDOWSLANGUAGES}, ]; diff --git a/developer/src/kmc-kmn/test/ng-compiler/keyboard-names.ts b/developer/src/kmc-kmn/test/ng-compiler/keyboard-names.ts index c5172d26d2..6e36ce3734 100644 --- a/developer/src/kmc-kmn/test/ng-compiler/keyboard-names.ts +++ b/developer/src/kmc-kmn/test/ng-compiler/keyboard-names.ts @@ -29,7 +29,7 @@ const EXCLUDED_REPOSITORY_FILES = [ 'release\\e\\eo_plus\\source\\eo_plus', 'release\\g\\galaxie_greek_mnemonic\\source\\galaxie_greek_mnemonic', 'release\\g\\galaxie_greek_positional\\source\\galaxie_greek_positional', - '\\release\\g\\galaxie_hebrew_mnemonic\\source\\galaxie_hebrew_mnemonic', + 'release\\g\\galaxie_hebrew_mnemonic\\source\\galaxie_hebrew_mnemonic', 'release\\g\\greekclassical\\source\\greekclassical', 'release\\gff\\gff_amharic\\source\\gff_amharic', 'release\\gff\\gff_amharic_classic\\source\\gff_amharic_classic', @@ -43,7 +43,7 @@ const EXCLUDED_REPOSITORY_FILES = [ 'release\\gff\\gff_harari\\source\\gff_harari', 'release\\gff\\gff_tigre\\source\\gff_tigre', 'release\\gff\\gff_tigrinya_eritrea\\source\\gff_tigrinya_eritrea', - 'release/gff/gff_tigrinya_ethiopia/source/gff_tigrinya_ethiopia', + 'release\\gff\\gff_tigrinya_ethiopia\\source\\gff_tigrinya_ethiopia', 'release\\h\\hieroglyphic\\source\\hieroglyphic', 'release\\itrans\\itrans_bengali\\source\\itrans_bengali', 'release\\itrans\\itrans_devanagari_hindi\\source\\itrans_devanagari_hindi', diff --git a/developer/src/kmc-kmn/test/ng-compiler/kmn-analyzer.tests.ts b/developer/src/kmc-kmn/test/ng-compiler/kmn-analyzer.tests.ts index c66613a401..2b1677b338 100644 --- a/developer/src/kmc-kmn/test/ng-compiler/kmn-analyzer.tests.ts +++ b/developer/src/kmc-kmn/test/ng-compiler/kmn-analyzer.tests.ts @@ -11,7 +11,7 @@ import { assert } from 'chai'; import { Rule } from '../../src/ng-compiler/recursive-descent.js'; import { Lexer, Token } from '../../src/ng-compiler/lexer.js'; import { TokenBuffer } from '../../src/ng-compiler/token-buffer.js'; -import { BeginStatementRule, CompileTargetRule, ContentRule, EntryPointRule, GroupNameRule, KeystrokeElementRule, Parser } from '../../src/ng-compiler/kmn-analyzer.js'; +import { BeginStatementRule, ContentRule, EntryPointRule, GroupNameRule, KeystrokeElementRule, Parser } from '../../src/ng-compiler/kmn-analyzer.js'; import { GroupQualifierRule, GroupStatementRule, InputBlockRule, InputContextRule, InputElementRule } from '../../src/ng-compiler/kmn-analyzer.js'; import { KeystrokeRule, KmnTreeRule, LhsBlockRule, LineRule, ModifierRule } from '../../src/ng-compiler/kmn-analyzer.js'; import { OutputStatementRule, PermittedKeywordRule, PlainTextRule, ProductionBlockRule, RhsBlockRule } from '../../src/ng-compiler/kmn-analyzer.js'; @@ -194,64 +194,6 @@ describe("KMN Analyser Tests", () => { assert.equal(root.getSoleChild().nodeType, NodeType.LINE); assert.isFalse(root.getSoleChild().hasChildren()); }); - it("can parse correctly (compile target)", () => { - tokenBuffer = stringToTokenBuffer('$keyman: store(&bitmap) "filename"\n'); - const line: Rule = new LineRule(); - assert.isTrue(line.parse(tokenBuffer, root)); - const children = root.getChildren(); - assert.equal(children.length, 3); - assert.equal(children[0].nodeType, NodeType.KEYMAN); - assert.equal(children[1].nodeType, NodeType.BITMAP); - assert.equal(children[1].getSoleChild().nodeType, NodeType.STRING); - assert.equal(children[2].nodeType, NodeType.LINE); - }); - it("can parse correctly (compile target, plus, virtual key, u_char)", () => { - tokenBuffer = stringToTokenBuffer('$keymanonly: + [CTRL "."] > U+135E\n'); - const line: Rule = new LineRule(); - assert.isTrue(line.parse(tokenBuffer, root)); - const children = root.getChildren(); - assert.equal(children.length, 3); - assert.equal(children[0].nodeType, NodeType.KEYMANONLY); - assert.equal(children[1].nodeType, NodeType.PRODUCTION); - assert.equal(children[2].nodeType, NodeType.LINE); - }); - }); - describe("CompileTargetRule Tests", () => { - it("can construct a CompileTargetRule", () => { - tokenBuffer = stringToTokenBuffer(''); - const compileTarget: Rule = new CompileTargetRule(); - assert.isNotNull(compileTarget); - }); - it("can parse correctly (KEYMAN)", () => { - tokenBuffer = stringToTokenBuffer('$keyman:'); - const compileTarget: Rule = new CompileTargetRule(); - assert.isTrue(compileTarget.parse(tokenBuffer, root)); - assert.isNotNull(root.getSoleChildOfType(NodeType.KEYMAN)); - }); - it("can parse correctly (KEYMANONLY)", () => { - tokenBuffer = stringToTokenBuffer('$keymanonly:'); - const compileTarget: Rule = new CompileTargetRule(); - assert.isTrue(compileTarget.parse(tokenBuffer, root)); - assert.isNotNull(root.getSoleChildOfType(NodeType.KEYMANONLY)); - }); - it("can parse correctly (KEYMANWEB)", () => { - tokenBuffer = stringToTokenBuffer('$keymanweb:'); - const compileTarget: Rule = new CompileTargetRule(); - assert.isTrue(compileTarget.parse(tokenBuffer, root)); - assert.isNotNull(root.getSoleChildOfType(NodeType.KEYMANWEB)); - }); - it("can parse correctly (KMFL)", () => { - tokenBuffer = stringToTokenBuffer('$kmfl:'); - const compileTarget: Rule = new CompileTargetRule(); - assert.isTrue(compileTarget.parse(tokenBuffer, root)); - assert.isNotNull(root.getSoleChildOfType(NodeType.KMFL)); - }); - it("can parse correctly (WEAVER)", () => { - tokenBuffer = stringToTokenBuffer('$weaver:'); - const compileTarget: Rule = new CompileTargetRule(); - assert.isTrue(compileTarget.parse(tokenBuffer, root)); - assert.isNotNull(root.getSoleChildOfType(NodeType.WEAVER)); - }); }); describe("ContentRule Tests", () => { it("can construct a ContentRule", () => {