mirror of
https://github.com/keymanapp/keyman.git
synced 2026-10-09 07:27:29 +00:00
feat(developer): stripped compile targets out of the parser
This commit is contained in:
parent
bbbb7b3759
commit
626ed855ac
5 changed files with 9 additions and 98 deletions
|
|
@ -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]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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},
|
||||
];
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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", () => {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue