@predictive-text-studio/lexical-model-compiler
Version:
Keyman Developer lexical model compiler
58 lines • 3 kB
JavaScript
;
/**
* kmlmi - Keyman Lexical Model model_info Compiler
*/
Object.defineProperty(exports, "__esModule", { value: true });
const program = require("commander");
const fs = require("fs");
const path = require("path");
const kmp_compiler_1 = require("./package-compiler/kmp-compiler");
const model_info_compiler_1 = require("./model-info-compiler/model-info-compiler");
let inputFilename;
/* Arguments */
program
.description('Merges Keyman lexical model model_info files. Intended for use within the keymanapp/lexical-models repository.')
.version(require('../package.json').version)
.arguments('<infile>')
.action(infile => inputFilename = infile)
.option('-o, --outFile <filename>', 'where to save the resultant file')
.option('-m, --model <model_id>', 'model id, defaults to basename of input file sans .model_info extension')
.option('-s, --source <source>', 'path to source of model, relative to lexical-models repo root')
.option('--kpsFilename <kpsFilename>', 'path to .model.kps file, defaults to source/<model_id>.model.kps')
.option('--kmpFilename <kmpFilename>', 'path to .model.kmp file, defaults to build/<model_id>.model.kmp')
.option('--jsFilename <jsFilename>', 'path to .model.js file, defaults to build/<model_id>.model.js');
program.parse(process.argv);
// Deal with input arguments:
if (!inputFilename) {
exitDueToUsageError('Must provide a lexical model .model_info source file.');
}
let model_id = program.model ? program.model : path.basename(inputFilename).replace(/\.model_info$/, "");
let outputFilename = program.outFile ? program.outFile : path.join(path.dirname(inputFilename), 'build', path.basename(inputFilename));
let kpsFilename = program.kpsFilename ? program.kpsFilename : path.join(path.dirname(inputFilename), 'source', path.basename(inputFilename).replace(/\.model_info$/, '.model.kps'));
let kmpFilename = program.kmpFilename ? program.kmpFilename : path.join(path.dirname(inputFilename), 'build', path.basename(inputFilename).replace(/\.model_info$/, '.model.kmp'));
let jsFilename = program.jsFilename ? program.jsFilename : path.join(path.dirname(inputFilename), 'build', path.basename(inputFilename).replace(/\.model_info$/, '.model.js'));
//
// Load .kps source data
//
let kpsString = fs.readFileSync(kpsFilename, 'utf8');
let kmpCompiler = new kmp_compiler_1.default();
let kmpJsonData = kmpCompiler.transformKpsToKmpObject(kpsString);
//
// Write out the merged .model_info file
//
let modelInfoOptions = {
model_id: model_id,
kmpJsonData: kmpJsonData,
sourcePath: program.source,
modelFileName: jsFilename,
kmpFileName: kmpFilename
};
model_info_compiler_1.writeMergedModelMetadataFile(inputFilename, outputFilename, modelInfoOptions);
function exitDueToUsageError(message) {
console.error(`${program._name}: ${message}`);
console.error();
program.outputHelp();
return process.exit(64 /* EX_USAGE */);
}
//# sourceMappingURL=kmlmi.js.map