@keymanapp/kmc 17.0.60-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +96 -0
- package/build/cjs-src/kmc.cjs +183594 -0
- package/build/cjs-src/kmlmc.cjs +154539 -0
- package/build/cjs-src/kmlmi.cjs +17266 -0
- package/build/cjs-src/kmlmp.cjs +17210 -0
- package/build/src/activities/buildKmnKeyboard.d.ts +3 -0
- package/build/src/activities/buildKmnKeyboard.d.ts.map +1 -0
- package/build/src/activities/buildKmnKeyboard.js +45 -0
- package/build/src/activities/buildKmnKeyboard.js.map +1 -0
- package/build/src/activities/buildLdmlKeyboard.d.ts +3 -0
- package/build/src/activities/buildLdmlKeyboard.d.ts.map +1 -0
- package/build/src/activities/buildLdmlKeyboard.js +72 -0
- package/build/src/activities/buildLdmlKeyboard.js.map +1 -0
- package/build/src/activities/buildModel.d.ts +3 -0
- package/build/src/activities/buildModel.d.ts.map +1 -0
- package/build/src/activities/buildModel.js +22 -0
- package/build/src/activities/buildModel.js.map +1 -0
- package/build/src/activities/buildPackage.d.ts +3 -0
- package/build/src/activities/buildPackage.d.ts.map +1 -0
- package/build/src/activities/buildPackage.js +24 -0
- package/build/src/activities/buildPackage.js.map +1 -0
- package/build/src/activities/buildProject.d.ts +3 -0
- package/build/src/activities/buildProject.d.ts.map +1 -0
- package/build/src/activities/buildProject.js +114 -0
- package/build/src/activities/buildProject.js.map +1 -0
- package/build/src/activities/buildTestData.d.ts +3 -0
- package/build/src/activities/buildTestData.d.ts.map +1 -0
- package/build/src/activities/buildTestData.js +31 -0
- package/build/src/activities/buildTestData.js.map +1 -0
- package/build/src/commands/build.d.ts +8 -0
- package/build/src/commands/build.d.ts.map +1 -0
- package/build/src/commands/build.js +50 -0
- package/build/src/commands/build.js.map +1 -0
- package/build/src/commands/buildTestData.d.ts +3 -0
- package/build/src/commands/buildTestData.d.ts.map +1 -0
- package/build/src/commands/buildTestData.js +9 -0
- package/build/src/commands/buildTestData.js.map +1 -0
- package/build/src/kmc.d.ts +6 -0
- package/build/src/kmc.d.ts.map +1 -0
- package/build/src/kmc.js +40 -0
- package/build/src/kmc.js.map +1 -0
- package/build/src/kmlmc.d.ts +6 -0
- package/build/src/kmlmc.d.ts.map +1 -0
- package/build/src/kmlmc.js +49 -0
- package/build/src/kmlmc.js.map +1 -0
- package/build/src/kmlmi.d.ts +6 -0
- package/build/src/kmlmi.d.ts.map +1 -0
- package/build/src/kmlmi.js +64 -0
- package/build/src/kmlmi.js.map +1 -0
- package/build/src/kmlmp.d.ts +6 -0
- package/build/src/kmlmp.d.ts.map +1 -0
- package/build/src/kmlmp.js +46 -0
- package/build/src/kmlmp.js.map +1 -0
- package/build/src/util/NodeCompilerCallbacks.d.ts +14 -0
- package/build/src/util/NodeCompilerCallbacks.d.ts.map +1 -0
- package/build/src/util/NodeCompilerCallbacks.js +41 -0
- package/build/src/util/NodeCompilerCallbacks.js.map +1 -0
- package/build/src/util/getDeveloperBinPath.d.ts +9 -0
- package/build/src/util/getDeveloperBinPath.d.ts.map +1 -0
- package/build/src/util/getDeveloperBinPath.js +36 -0
- package/build/src/util/getDeveloperBinPath.js.map +1 -0
- package/build/src/util/kpj.schema.json +127 -0
- package/build/src/util/kvks.schema.json +182 -0
- package/build/src/util/ldml-keyboard.schema.json +634 -0
- package/build/src/util/ldml-keyboardtest.schema.json +221 -0
- package/build/src/util/sysexits.d.ts +9 -0
- package/build/src/util/sysexits.d.ts.map +1 -0
- package/build/src/util/sysexits.js +3 -0
- package/build/src/util/sysexits.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildKmnKeyboard.d.ts","sourceRoot":"","sources":["../../../src/activities/buildKmnKeyboard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG3D,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAgDrG"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { spawnSync } from 'child_process';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { getDeveloperBinPath } from '../util/getDeveloperBinPath.js';
|
|
4
|
+
export async function buildKmnKeyboard(infile, options) {
|
|
5
|
+
// We'll call out to kmcomp.exe to build a .kmn keyboard into a .kmx Note:
|
|
6
|
+
// kmcomp.exe will also build a .js if it is required, and may not actually
|
|
7
|
+
// generate a .kmx if the output target defined in the .kmn is mobile/web
|
|
8
|
+
// only. kmcomp.exe will also build the .kvk file.
|
|
9
|
+
const binRoot = getDeveloperBinPath();
|
|
10
|
+
if (binRoot == null) {
|
|
11
|
+
console.error('Could not locate Keyman Developer bin path');
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
let args = ['-nologo'];
|
|
15
|
+
if (options.debug) {
|
|
16
|
+
args.push('-d');
|
|
17
|
+
}
|
|
18
|
+
args.push(path.win32.normalize(infile));
|
|
19
|
+
// .* target file name option allows us to specify .kmx output file and the
|
|
20
|
+
// .js output file will also be generated as required, in the same way as when
|
|
21
|
+
// we build a project. Note: this is a stop gap as we work to deprecate
|
|
22
|
+
// kmcomp.exe and replace it with kmcmp (cross-platform .kmx compiler in C++)
|
|
23
|
+
// + kmc-kmw (KMX->KMW transpiler in TypeScript) + kmc-kvk (KVK compiler in
|
|
24
|
+
// TypeScript).
|
|
25
|
+
let outfile = (options.outFile ?? infile).replace(/\\/g, '/');
|
|
26
|
+
// For now, we normalize to posix, and then renormalize to win32 for launching
|
|
27
|
+
// kmcomp, until we have a cross-platform alternative to use
|
|
28
|
+
outfile = path.win32.normalize(options.outFile).replace(/\.km.$/i, '.*');
|
|
29
|
+
args.push(outfile);
|
|
30
|
+
const kmcomp = path.join(binRoot, 'kmcomp.exe');
|
|
31
|
+
// We won't attempt to make this call cross-platform, yet.
|
|
32
|
+
let child = spawnSync(kmcomp, args, {
|
|
33
|
+
encoding: 'utf8'
|
|
34
|
+
});
|
|
35
|
+
if (child.error) {
|
|
36
|
+
console.error(child.error);
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
console.log(child.stdout);
|
|
40
|
+
if (child.stderr) {
|
|
41
|
+
console.error(child.stderr);
|
|
42
|
+
}
|
|
43
|
+
return child.status === 0;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=buildKmnKeyboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildKmnKeyboard.js","sourceRoot":"","sources":["../../../src/activities/buildKmnKeyboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAErE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAc,EAAE,OAA4B;IACjF,0EAA0E;IAC1E,2EAA2E;IAC3E,yEAAyE;IACzE,kDAAkD;IAClD,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,IAAG,OAAO,IAAI,IAAI,EAAE;QAClB,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC5D,OAAO,KAAK,CAAC;KACd;IAED,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IACvB,IAAG,OAAO,CAAC,KAAK,EAAE;QAChB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACjB;IAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAExC,2EAA2E;IAC3E,8EAA8E;IAC9E,uEAAuE;IACvE,6EAA6E;IAC7E,2EAA2E;IAC3E,eAAe;IACf,IAAI,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9D,8EAA8E;IAC9E,4DAA4D;IAC5D,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACzE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAEhD,0DAA0D;IAC1D,IAAI,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE;QAClC,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;IAEH,IAAG,KAAK,CAAC,KAAK,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAG,KAAK,CAAC,MAAM,EAAE;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;KAC7B;IAED,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildLdmlKeyboard.d.ts","sourceRoot":"","sources":["../../../src/activities/buildLdmlKeyboard.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CA8BtG"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import * as path from 'path';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as kmc from '@keymanapp/kmc-keyboard';
|
|
4
|
+
import { KvkFileWriter } from '@keymanapp/common-types';
|
|
5
|
+
import { NodeCompilerCallbacks } from '../util/NodeCompilerCallbacks.js';
|
|
6
|
+
export async function buildLdmlKeyboard(infile, options) {
|
|
7
|
+
// TODO-LDML: consider hardware vs touch -- touch-only layout will not have a .kvk
|
|
8
|
+
// Compile:
|
|
9
|
+
let [kmx, kvk, kmw] = buildLdmlKeyboardToMemory(infile, options);
|
|
10
|
+
// Output:
|
|
11
|
+
const fileBaseName = options.outFile ?? infile;
|
|
12
|
+
const outFileBase = path.basename(fileBaseName, path.extname(fileBaseName));
|
|
13
|
+
const outFileDir = path.dirname(fileBaseName);
|
|
14
|
+
if (kmx && kvk) {
|
|
15
|
+
const outFileKmx = path.join(outFileDir, outFileBase + '.kmx');
|
|
16
|
+
console.log(`Writing compiled keyboard to ${outFileKmx}`);
|
|
17
|
+
fs.writeFileSync(outFileKmx, kmx);
|
|
18
|
+
const outFileKvk = path.join(outFileDir, outFileBase + '.kvk');
|
|
19
|
+
console.log(`Writing compiled visual keyboard to ${outFileKvk}`);
|
|
20
|
+
fs.writeFileSync(outFileKvk, kvk);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
console.error(`An error occurred compiling ${infile}`);
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
if (kmw) {
|
|
27
|
+
const outFileKmw = path.join(outFileDir, outFileBase + '.js');
|
|
28
|
+
console.log(`Writing compiled js keyboard to ${outFileKmw}`);
|
|
29
|
+
fs.writeFileSync(outFileKmw, kmw);
|
|
30
|
+
}
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
function buildLdmlKeyboardToMemory(inputFilename, options) {
|
|
34
|
+
let compilerOptions = {
|
|
35
|
+
debug: options.debug ?? false,
|
|
36
|
+
addCompilerVersion: options.compilerVersion ?? true
|
|
37
|
+
};
|
|
38
|
+
const c = new NodeCompilerCallbacks();
|
|
39
|
+
const k = new kmc.Compiler(c, options);
|
|
40
|
+
let source = k.load(inputFilename);
|
|
41
|
+
if (!source) {
|
|
42
|
+
return [null, null, null];
|
|
43
|
+
}
|
|
44
|
+
if (!k.validate(source)) {
|
|
45
|
+
return [null, null, null];
|
|
46
|
+
}
|
|
47
|
+
let kmx = k.compile(source);
|
|
48
|
+
if (!kmx) {
|
|
49
|
+
return [null, null, null];
|
|
50
|
+
}
|
|
51
|
+
// In order for the KMX file to be loaded by non-KMXPlus components, it is helpful
|
|
52
|
+
// to duplicate some of the metadata
|
|
53
|
+
kmc.KMXPlusMetadataCompiler.addKmxMetadata(kmx.kmxplus, kmx.keyboard, compilerOptions);
|
|
54
|
+
// Use the builder to generate the binary output file
|
|
55
|
+
const builder = new kmc.KMXBuilder(kmx, options.debug);
|
|
56
|
+
const kmx_binary = builder.compile();
|
|
57
|
+
const vkcompiler = new kmc.VisualKeyboardCompiler();
|
|
58
|
+
const vk = vkcompiler.compile(source);
|
|
59
|
+
const writer = new KvkFileWriter();
|
|
60
|
+
const kvk_binary = writer.write(vk);
|
|
61
|
+
// Note: we could have a step of generating source files here
|
|
62
|
+
// KvksFileWriter()...
|
|
63
|
+
// const tlcompiler = new kmc.TouchLayoutCompiler();
|
|
64
|
+
// const tl = tlcompiler.compile(source);
|
|
65
|
+
// const tlwriter = new TouchLayoutFileWriter();
|
|
66
|
+
const kmwcompiler = new kmc.KeymanWebCompiler(compilerOptions);
|
|
67
|
+
const kmw_string = kmwcompiler.compile(inputFilename, source);
|
|
68
|
+
const encoder = new TextEncoder();
|
|
69
|
+
const kmw_binary = encoder.encode(kmw_string);
|
|
70
|
+
return [kmx_binary, kvk_binary, kmw_binary];
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=buildLdmlKeyboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildLdmlKeyboard.js","sourceRoot":"","sources":["../../../src/activities/buildLdmlKeyboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildModel.d.ts","sourceRoot":"","sources":["../../../src/activities/buildModel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG3D,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAuB/F"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import { compileModel } from '@keymanapp/kmc-model';
|
|
3
|
+
export async function buildModel(infile, options) {
|
|
4
|
+
let outputFilename = options.outFile ? options.outFile : infile.replace(/\.ts$/i, ".js");
|
|
5
|
+
let code = null;
|
|
6
|
+
// Compile:
|
|
7
|
+
try {
|
|
8
|
+
code = compileModel(infile);
|
|
9
|
+
}
|
|
10
|
+
catch (e) {
|
|
11
|
+
console.error(e);
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
if (!code) {
|
|
15
|
+
console.error('Compilation failed.');
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
// Output:
|
|
19
|
+
fs.writeFileSync(outputFilename, code, 'utf8');
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=buildModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildModel.js","sourceRoot":"","sources":["../../../src/activities/buildModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAc,EAAE,OAA4B;IAE3E,IAAI,cAAc,GAAW,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAEjG,IAAI,IAAI,GAAG,IAAI,CAAC;IAEhB,WAAW;IACX,IAAI;QACF,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;KAC7B;IAAC,OAAM,CAAC,EAAE;QACT,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjB,OAAO,KAAK,CAAC;KACd;IAED,IAAG,CAAC,IAAI,EAAE;QACR,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;QACpC,OAAO,KAAK,CAAC;KACd;IAED,UAAU;IACV,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAE/C,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildPackage.d.ts","sourceRoot":"","sources":["../../../src/activities/buildPackage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG3D,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAyBjG"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import KmpCompiler from '@keymanapp/kmc-package';
|
|
3
|
+
export async function buildPackage(infile, options) {
|
|
4
|
+
let outputFilename = options.outFile ? options.outFile : infile.replace(/\.kps$/i, ".kmp");
|
|
5
|
+
//
|
|
6
|
+
// Load .kps source data
|
|
7
|
+
//
|
|
8
|
+
let kpsString = fs.readFileSync(infile, 'utf8');
|
|
9
|
+
let kmpCompiler = new KmpCompiler();
|
|
10
|
+
let kmpJsonData = kmpCompiler.transformKpsToKmpObject(kpsString, infile);
|
|
11
|
+
//
|
|
12
|
+
// Build the .kmp package file
|
|
13
|
+
//
|
|
14
|
+
let data = await kmpCompiler.buildKmpFile(infile, kmpJsonData);
|
|
15
|
+
if (data) {
|
|
16
|
+
fs.writeFileSync(outputFilename, data, 'binary');
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
// TODO error logging
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=buildPackage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildPackage.js","sourceRoot":"","sources":["../../../src/activities/buildPackage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,WAAW,MAAM,wBAAwB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc,EAAE,OAA4B;IAE7E,IAAI,cAAc,GAAW,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEnG,EAAE;IACF,wBAAwB;IACxB,EAAE;IAEF,IAAI,SAAS,GAAW,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxD,IAAI,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IACpC,IAAI,WAAW,GAAG,WAAW,CAAC,uBAAuB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEzE,EAAE;IACF,8BAA8B;IAC9B,EAAE;IAEF,IAAI,IAAI,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC/D,IAAG,IAAI,EAAE;QACP,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;KAClD;SAAM;QACL,qBAAqB;QACrB,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildProject.d.ts","sourceRoot":"","sources":["../../../src/activities/buildProject.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAQ3D,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAGjG"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { KeymanDeveloperProject, KPJFileReader } from '@keymanapp/common-types';
|
|
2
|
+
import { NodeCompilerCallbacks } from '../util/NodeCompilerCallbacks.js';
|
|
3
|
+
import { buildKmnKeyboard } from './buildKmnKeyboard.js';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import * as fs from 'fs';
|
|
6
|
+
import { buildLdmlKeyboard } from './buildLdmlKeyboard.js';
|
|
7
|
+
import { buildModel } from './buildModel.js';
|
|
8
|
+
import { buildPackage } from './buildPackage.js';
|
|
9
|
+
export async function buildProject(infile, options) {
|
|
10
|
+
let builder = new ProjectBuilder(infile, options);
|
|
11
|
+
return builder.run();
|
|
12
|
+
}
|
|
13
|
+
class ProjectBuilder {
|
|
14
|
+
callbacks = new NodeCompilerCallbacks();
|
|
15
|
+
infile;
|
|
16
|
+
options;
|
|
17
|
+
project;
|
|
18
|
+
constructor(infile, options) {
|
|
19
|
+
this.infile = path.resolve(infile);
|
|
20
|
+
this.options = options;
|
|
21
|
+
}
|
|
22
|
+
async run() {
|
|
23
|
+
if (this.options.outFile) {
|
|
24
|
+
// TODO: callbacks.reportMessage
|
|
25
|
+
console.error('--out-file should not be specified for project builds');
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
this.project = this.loadProject();
|
|
29
|
+
if (!this.project) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
// Build all Keyman keyboards in the project
|
|
33
|
+
if (!await this.buildProjectTargets(buildKmnKeyboard, '.kmn', '.kmx')) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
// Build all LDML keyboards in the project
|
|
37
|
+
if (!await this.buildProjectTargets(buildLdmlKeyboard, '.xml', '.kmx')) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
// Build all models in the project
|
|
41
|
+
if (!await this.buildProjectTargets(buildModel, '.model.ts', '.model.js')) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
// Build all packages in the project
|
|
45
|
+
if (!await this.buildProjectTargets(buildPackage, '.kps', '.kmp')) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
// TODO: generate .keyboard_info from .kps + etc (and support merge of
|
|
49
|
+
// $PROJECTPATH/.keyboard_info for version 1.0 projects)
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
loadProject() {
|
|
53
|
+
// TODO: callbacks.reportMessage on exceptions
|
|
54
|
+
// TODO: version 2.0 projects are folder-based and scan source/ folder for valid
|
|
55
|
+
// files. .kpj need not exist, but if it does, is used just for options.
|
|
56
|
+
this.infile = path.resolve(this.infile.replace(/\\/g, '/'));
|
|
57
|
+
if (fs.statSync(this.infile).isDirectory()) {
|
|
58
|
+
// This is a project folder, look for folder-name.kpj
|
|
59
|
+
this.infile = path.join(this.infile, path.basename(this.infile) + '.kpj');
|
|
60
|
+
}
|
|
61
|
+
const project = fs.existsSync(this.infile) ?
|
|
62
|
+
this.loadProjectFromFile() :
|
|
63
|
+
this.loadDefaultProjectFromFolder();
|
|
64
|
+
return project;
|
|
65
|
+
}
|
|
66
|
+
loadDefaultProjectFromFolder() {
|
|
67
|
+
// The folder does not contain a .kpj, so construct a default 2.0 .kpj
|
|
68
|
+
const project = new KeymanDeveloperProject('2.0');
|
|
69
|
+
project.populateFiles(this.infile);
|
|
70
|
+
return project;
|
|
71
|
+
}
|
|
72
|
+
loadProjectFromFile() {
|
|
73
|
+
const kpjData = this.callbacks.loadFile(null, this.infile);
|
|
74
|
+
const reader = new KPJFileReader();
|
|
75
|
+
const kpj = reader.read(kpjData);
|
|
76
|
+
const schema = this.callbacks.loadKpjJsonSchema();
|
|
77
|
+
try {
|
|
78
|
+
reader.validate(kpj, schema);
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
// TODO: callbacks.reportMessage
|
|
82
|
+
console.error(e);
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
const project = reader.transform(this.infile, kpj);
|
|
86
|
+
return project;
|
|
87
|
+
}
|
|
88
|
+
async buildProjectTargets(buildTarget, fileType, outputFileType) {
|
|
89
|
+
let result = true;
|
|
90
|
+
for (let file of this.project.files) {
|
|
91
|
+
if (file.fileType.toLowerCase() == fileType) {
|
|
92
|
+
result = await this.buildTarget(file, buildTarget, fileType, outputFileType) && result;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
async buildTarget(file, buildTarget, fileType, outputFileType) {
|
|
98
|
+
const options = { ...this.options };
|
|
99
|
+
options.outFile = this.project.resolveOutputFilePath(this.infile, file, fileType, outputFileType);
|
|
100
|
+
const infile = this.project.resolveInputFilePath(this.infile, file);
|
|
101
|
+
// TODO: callbacks.reportMessage, improve logging and make consistent
|
|
102
|
+
console.log(`Building ${infile}\n Output ${options.outFile}`);
|
|
103
|
+
fs.mkdirSync(path.dirname(options.outFile), { recursive: true });
|
|
104
|
+
let result = await buildTarget(infile, options);
|
|
105
|
+
if (result) {
|
|
106
|
+
console.log(`${path.basename(infile)} built successfully.`);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
console.log(`${path.basename(infile)} failed to build.`);
|
|
110
|
+
}
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=buildProject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildProject.js","sourceRoot":"","sources":["../../../src/activities/buildProject.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildTestData.d.ts","sourceRoot":"","sources":["../../../src/activities/buildTestData.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,QAkBzE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as kmc from '@keymanapp/kmc-keyboard';
|
|
4
|
+
import { NodeCompilerCallbacks } from '../util/NodeCompilerCallbacks.js';
|
|
5
|
+
export function buildTestData(infile, options) {
|
|
6
|
+
let compilerOptions = {
|
|
7
|
+
debug: false,
|
|
8
|
+
addCompilerVersion: false
|
|
9
|
+
};
|
|
10
|
+
let testData = loadTestData(infile, compilerOptions);
|
|
11
|
+
if (!testData) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const fileBaseName = options.outFile ?? infile;
|
|
15
|
+
const outFileBase = path.basename(fileBaseName, path.extname(fileBaseName));
|
|
16
|
+
const outFileDir = path.dirname(fileBaseName);
|
|
17
|
+
const outFileJson = path.join(outFileDir, outFileBase + '.json');
|
|
18
|
+
console.log(`Writing JSON test data to ${outFileJson}`);
|
|
19
|
+
fs
|
|
20
|
+
.writeFileSync(outFileJson, JSON.stringify(testData, null, ' '));
|
|
21
|
+
}
|
|
22
|
+
function loadTestData(inputFilename, options) {
|
|
23
|
+
const c = new NodeCompilerCallbacks();
|
|
24
|
+
const k = new kmc.Compiler(c, options);
|
|
25
|
+
let source = k.loadTestData(inputFilename);
|
|
26
|
+
if (!source) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
return source;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=buildTestData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildTestData.js","sourceRoot":"","sources":["../../../src/activities/buildTestData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAE/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,OAA4B;IACxE,IAAI,eAAe,GAAwB;QACzC,KAAK,EAAE,KAAK;QACZ,kBAAkB,EAAE,KAAK;KAC1B,CAAC;IAEF,IAAI,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO;KACR;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC;IAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,6BAA6B,WAAW,EAAE,CAAC,CAAC;IACxD,EAAE;SACD,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACpE,CAAC;AACD,SAAS,YAAY,CAAC,aAAqB,EAAE,OAA4B;IACvE,MAAM,CAAC,GAAsB,IAAI,qBAAqB,EAAE,CAAC;IACzD,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACvC,IAAI,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,IAAI,CAAC;KACb;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/commands/build.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,QAkB5C"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import { buildPackage } from '../activities/buildPackage.js';
|
|
3
|
+
import { buildKmnKeyboard } from '../activities/buildKmnKeyboard.js';
|
|
4
|
+
import { buildLdmlKeyboard } from '../activities/buildLdmlKeyboard.js';
|
|
5
|
+
import { buildModel } from '../activities/buildModel.js';
|
|
6
|
+
import { buildProject } from '../activities/buildProject.js';
|
|
7
|
+
;
|
|
8
|
+
export function declareBuild(program) {
|
|
9
|
+
program
|
|
10
|
+
.command('build [infile...]')
|
|
11
|
+
.description('Build a source file into a final file')
|
|
12
|
+
.option('-d, --debug', 'Include debug information in output')
|
|
13
|
+
.option('-o, --out-file <filename>', 'where to save the resulting .kmx file')
|
|
14
|
+
.option('--no-compiler-version', 'Exclude compiler version metadata from output')
|
|
15
|
+
.action((infiles, options) => {
|
|
16
|
+
let p = [];
|
|
17
|
+
if (!infiles.length) {
|
|
18
|
+
console.debug('Assuming infile == .');
|
|
19
|
+
p.push(build('.', options));
|
|
20
|
+
}
|
|
21
|
+
for (let infile of infiles) {
|
|
22
|
+
p.push(build(infile, options));
|
|
23
|
+
}
|
|
24
|
+
return Promise.all(p).then();
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
async function build(infile, options) {
|
|
28
|
+
console.log(`Building ${infile}`);
|
|
29
|
+
if (infile.endsWith('.xml')) {
|
|
30
|
+
return buildLdmlKeyboard(infile, options);
|
|
31
|
+
}
|
|
32
|
+
if (infile.endsWith('.kmn')) {
|
|
33
|
+
return buildKmnKeyboard(infile, options);
|
|
34
|
+
}
|
|
35
|
+
if (infile.endsWith('.kps')) {
|
|
36
|
+
return buildPackage(infile, options);
|
|
37
|
+
}
|
|
38
|
+
if (infile.endsWith('.model.ts')) {
|
|
39
|
+
return buildModel(infile, options);
|
|
40
|
+
}
|
|
41
|
+
if (infile.endsWith('.kpj')) {
|
|
42
|
+
return buildProject(infile, options);
|
|
43
|
+
}
|
|
44
|
+
if (fs.statSync(infile).isDirectory()) {
|
|
45
|
+
return buildProject(infile, options);
|
|
46
|
+
}
|
|
47
|
+
console.error(`Unrecognised input file ${infile}, expecting .xml, .kmn, .kps, .model.ts, .kpj, or project folder`);
|
|
48
|
+
process.exit(2);
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAM5D,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,aAAa,EAAE,qCAAqC,CAAC;SAC5D,MAAM,CAAC,2BAA2B,EAAE,uCAAuC,CAAC;SAC5E,MAAM,CAAC,uBAAuB,EAAE,+CAA+C,CAAC;SAChF,MAAM,CAAC,CAAC,OAAiB,EAAE,OAAY,EAAE,EAAE;QAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,IAAG,CAAC,OAAO,CAAC,MAAM,EAAE;YAClB,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACtC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;SAC7B;QACD,KAAI,IAAI,MAAM,IAAI,OAAO,EAAE;YACzB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;SAChC;QACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,MAAc,EAAE,OAA4B;IAC/D,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,EAAE,CAAC,CAAC;IAElC,IAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC1B,OAAO,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC3C;IAED,IAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC1B,OAAO,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC1C;IAED,IAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC1B,OAAO,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC;IAED,IAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;QAC/B,OAAO,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC;IAED,IAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC1B,OAAO,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC;IAED,IAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE;QACpC,OAAO,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC;IAED,OAAO,CAAC,KAAK,CAAC,2BAA2B,MAAM,kEAAkE,CAAC,CAAC;IACnH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildTestData.d.ts","sourceRoot":"","sources":["../../../src/commands/buildTestData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAMpD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { buildTestData } from '../activities/buildTestData.js';
|
|
2
|
+
export function declareBuildTestData(program) {
|
|
3
|
+
program
|
|
4
|
+
.command('build-test-data <infile>')
|
|
5
|
+
.description('Convert keyboard test .xml to .json')
|
|
6
|
+
.option('-o, --out-file <filename>', 'where to save the resulting .json file')
|
|
7
|
+
.action(buildTestData);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=buildTestData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildTestData.js","sourceRoot":"","sources":["../../../src/commands/buildTestData.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,0BAA0B,CAAC;SACnC,WAAW,CAAC,qCAAqC,CAAC;SAClD,MAAM,CAAC,2BAA2B,EAAE,wCAAwC,CAAC;SAC7E,MAAM,CAAC,aAAa,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kmc.d.ts","sourceRoot":"","sources":["../../src/kmc.ts"],"names":[],"mappings":";AACA;;GAEG"}
|
package/build/src/kmc.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* kmc - Keyman Next Generation Compiler
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import KEYMAN_VERSION from "@keymanapp/keyman-version/keyman-version.mjs";
|
|
7
|
+
import { declareBuild } from './commands/build.js';
|
|
8
|
+
import { declareBuildTestData } from './commands/buildTestData.js';
|
|
9
|
+
const program = new Command();
|
|
10
|
+
/* Arguments */
|
|
11
|
+
program
|
|
12
|
+
.description('Keyman Developer Command Line Interface')
|
|
13
|
+
.version(KEYMAN_VERSION.VERSION_WITH_TAG);
|
|
14
|
+
declareBuild(program);
|
|
15
|
+
declareBuildTestData(program);
|
|
16
|
+
/*
|
|
17
|
+
program
|
|
18
|
+
.command('clean');
|
|
19
|
+
|
|
20
|
+
program
|
|
21
|
+
.command('copy');
|
|
22
|
+
|
|
23
|
+
program
|
|
24
|
+
.command('rename');
|
|
25
|
+
|
|
26
|
+
program
|
|
27
|
+
.command('generate');
|
|
28
|
+
|
|
29
|
+
program
|
|
30
|
+
.command('import');
|
|
31
|
+
|
|
32
|
+
program
|
|
33
|
+
.command('test');
|
|
34
|
+
|
|
35
|
+
program
|
|
36
|
+
.command('publish');
|
|
37
|
+
*/
|
|
38
|
+
program.parseAsync(process.argv)
|
|
39
|
+
.catch(reason => console.error(reason));
|
|
40
|
+
//# sourceMappingURL=kmc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kmc.js","sourceRoot":"","sources":["../../src/kmc.ts"],"names":[],"mappings":";AACA;;GAEG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,cAAc,MAAM,8CAA8C,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,eAAe;AACf,OAAO;KACJ,WAAW,CAAC,yCAAyC,CAAC;KACtD,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;AAE5C,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAE9B;;;;;;;;;;;;;;;;;;;;;EAqBE;AAEF,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;KAC7B,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kmlmc.d.ts","sourceRoot":"","sources":["../../src/kmlmc.ts"],"names":[],"mappings":";AACA;;GAEG"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* kmlmc - Keyman Lexical Model Compiler
|
|
4
|
+
*/
|
|
5
|
+
import * as fs from 'fs';
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import { compileModel } from '@keymanapp/kmc-model';
|
|
8
|
+
import KEYMAN_VERSION from "@keymanapp/keyman-version/keyman-version.mjs";
|
|
9
|
+
let inputFilename;
|
|
10
|
+
const program = new Command();
|
|
11
|
+
/* Arguments */
|
|
12
|
+
program
|
|
13
|
+
.description('Compiles Keyman lexical models')
|
|
14
|
+
.version(KEYMAN_VERSION.VERSION_WITH_TAG)
|
|
15
|
+
.arguments('<infile>')
|
|
16
|
+
.action(infile => inputFilename = infile)
|
|
17
|
+
.option('-o, --outFile <filename>', 'where to save the resultant file');
|
|
18
|
+
program.parse(process.argv);
|
|
19
|
+
// Deal with input arguments:
|
|
20
|
+
if (!inputFilename) {
|
|
21
|
+
exitDueToUsageError('Must provide a lexical model source file.');
|
|
22
|
+
}
|
|
23
|
+
let code = null;
|
|
24
|
+
// Compile:
|
|
25
|
+
try {
|
|
26
|
+
code = compileModel(inputFilename);
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
console.error(e);
|
|
30
|
+
process.exit(65 /* SysExits.EX_DATAERR */);
|
|
31
|
+
}
|
|
32
|
+
if (!code) {
|
|
33
|
+
console.error('Compilation failed.');
|
|
34
|
+
process.exit(65 /* SysExits.EX_DATAERR */);
|
|
35
|
+
}
|
|
36
|
+
// Output:
|
|
37
|
+
if (program.opts().outFile) {
|
|
38
|
+
fs.writeFileSync(program.opts().outFile, code, 'utf8');
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
console.log(code);
|
|
42
|
+
}
|
|
43
|
+
function exitDueToUsageError(message) {
|
|
44
|
+
console.error(`${program.name()}: ${message}`);
|
|
45
|
+
console.error();
|
|
46
|
+
program.outputHelp();
|
|
47
|
+
return process.exit(64 /* SysExits.EX_USAGE */);
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=kmlmc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kmlmc.js","sourceRoot":"","sources":["../../src/kmlmc.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,cAAc,MAAM,8CAA8C,CAAC;AAE1E,IAAI,aAAqB,CAAC;AAC1B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,eAAe;AACf,OAAO;KACJ,WAAW,CAAC,gCAAgC,CAAC;KAC7C,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC;KACxC,SAAS,CAAC,UAAU,CAAC;KACrB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,GAAG,MAAM,CAAC;KACxC,MAAM,CAAC,0BAA0B,EAAE,kCAAkC,CAAC,CAAC;AAE1E,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,6BAA6B;AAC7B,IAAI,CAAC,aAAa,EAAE;IAClB,mBAAmB,CAAC,2CAA2C,CAAC,CAAC;CAClE;AAED,IAAI,IAAI,GAAG,IAAI,CAAC;AAChB,WAAW;AACX,IAAI;IACF,IAAI,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;CACpC;AAAC,OAAM,CAAC,EAAE;IACT,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjB,OAAO,CAAC,IAAI,8BAAqB,CAAC;CACnC;AAED,IAAG,CAAC,IAAI,EAAE;IACR,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACpC,OAAO,CAAC,IAAI,8BAAqB,CAAC;CACnC;AAED,UAAU;AACV,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE;IAC1B,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;CACxD;KAAM;IACL,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;CACnB;AAED,SAAS,mBAAmB,CAAC,OAAe;IAC1C,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,UAAU,EAAE,CAAC;IACrB,OAAO,OAAO,CAAC,IAAI,4BAAmB,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kmlmi.d.ts","sourceRoot":"","sources":["../../src/kmlmi.ts"],"names":[],"mappings":";AACA;;GAEG"}
|