UNPKG

speech-rule-engine

Version:

A standalone speech rule engine for XML structures, based on the original engine from ChromeVox.

287 lines 11.7 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.localePath = exports.file = exports.localeLoader = exports.version = void 0; exports.setupEngine = setupEngine; exports.engineSetup = engineSetup; exports.resetEngine = resetEngine; exports.engineReady = engineReady; exports.toSpeech = toSpeech; exports.toSemantic = toSemantic; exports.toJson = toJson; exports.toDescription = toDescription; exports.toEnriched = toEnriched; exports.number = number; exports.ordinal = ordinal; exports.numericOrdinal = numericOrdinal; exports.vulgar = vulgar; exports.processFile = processFile; exports.walk = walk; exports.move = move; exports.exit = exit; exports.toSpeechStructure = toSpeechStructure; exports.workerSpeech = workerSpeech; exports.workerNextRules = workerNextRules; exports.workerNextStyle = workerNextStyle; exports.workerLocalePreferences = workerLocalePreferences; exports.workerRelevantPreferences = workerRelevantPreferences; const engine_js_1 = require("./engine.js"); const engine_setup_js_1 = require("./engine_setup.js"); const EngineConst = __importStar(require("./engine_const.js")); const FileUtil = __importStar(require("./file_util.js")); const ProcessorFactory = __importStar(require("./processor_factory.js")); const system_external_js_1 = require("./system_external.js"); const variables_js_1 = require("./variables.js"); const math_map_js_1 = require("../speech_rules/math_map.js"); const SpeechGeneratorUtil = __importStar(require("../speech_generator/speech_generator_util.js")); const rebuild_stree_js_1 = require("../walker/rebuild_stree.js"); const DomUtil = __importStar(require("./dom_util.js")); const clearspeak_preferences_js_1 = require("../speech_rules/clearspeak_preferences.js"); exports.version = variables_js_1.Variables.VERSION; function setupEngine(feature) { return __awaiter(this, void 0, void 0, function* () { return (0, engine_setup_js_1.setupEngine)(feature); }); } function engineSetup() { return (0, engine_setup_js_1.engineSetup)(); } function resetEngine() { return engine_js_1.Engine.getInstance().reset(); } function engineReady() { return __awaiter(this, void 0, void 0, function* () { return setupEngine({}).then(() => engine_js_1.EnginePromise.getall()); }); } exports.localeLoader = math_map_js_1.standardLoader; function toSpeech(expr) { return processString('speech', expr); } function toSemantic(expr) { return processString('semantic', expr); } function toJson(expr) { return processString('json', expr); } function toDescription(expr) { return processString('description', expr); } function toEnriched(expr) { return processString('enriched', expr); } function number(expr) { return processString('number', expr); } function ordinal(expr) { return processString('ordinal', expr); } function numericOrdinal(expr) { return processString('numericOrdinal', expr); } function vulgar(expr) { return processString('vulgar', expr); } function processString(processor, input) { return ProcessorFactory.process(processor, input); } exports.file = {}; exports.file.toSpeech = function (input, opt_output) { return processFile('speech', input, opt_output); }; exports.file.toSemantic = function (input, opt_output) { return processFile('semantic', input, opt_output); }; exports.file.toJson = function (input, opt_output) { return processFile('json', input, opt_output); }; exports.file.toDescription = function (input, opt_output) { return processFile('description', input, opt_output); }; exports.file.toEnriched = function (input, opt_output) { return processFile('enriched', input, opt_output); }; function processFile(processor, input, opt_output) { switch (engine_js_1.Engine.getInstance().mode) { case EngineConst.Mode.ASYNC: return processFileAsync(processor, input, opt_output); case EngineConst.Mode.SYNC: return processFileSync(processor, input, opt_output); default: throw new engine_js_1.SREError(`Can process files in ${engine_js_1.Engine.getInstance().mode} mode`); } } function processFileSync(processor, input, opt_output) { const expr = inputFileSync_(input); const result = ProcessorFactory.output(processor, expr); if (opt_output) { try { system_external_js_1.SystemExternal.fs.writeFileSync(opt_output, result); } catch (_err) { throw new engine_js_1.SREError('Can not write to file: ' + opt_output); } } return result; } function inputFileSync_(file) { let expr; try { expr = system_external_js_1.SystemExternal.fs.readFileSync(file, { encoding: 'utf8' }); } catch (_err) { throw new engine_js_1.SREError('Can not open file: ' + file); } return expr; } function processFileAsync(processor, file, output) { return __awaiter(this, void 0, void 0, function* () { const expr = yield system_external_js_1.SystemExternal.fs.promises.readFile(file, { encoding: 'utf8' }); const result = ProcessorFactory.output(processor, expr); if (output) { try { system_external_js_1.SystemExternal.fs.promises.writeFile(output, result); } catch (_err) { throw new engine_js_1.SREError('Can not write to file: ' + output); } } return result; }); } function walk(expr) { return ProcessorFactory.output('walker', expr); } function move(direction) { return ProcessorFactory.keypress('move', direction); } function exit(opt_value) { const value = opt_value || 0; engine_js_1.EnginePromise.getall().then(() => process.exit(value)); } function toSpeechStructure(expr) { return processString('speechStructure', expr); } const locale_js_1 = require("../l10n/locale.js"); function workerSpeech(expr, options) { return __awaiter(this, void 0, void 0, function* () { const mml = DomUtil.parseInput(expr); const rebuilt = new rebuild_stree_js_1.RebuildStree(mml); const styles = SpeechGeneratorUtil.toStyles(options); options.domain2style = SpeechGeneratorUtil.fromStyles(styles); return assembleWorkerStructure(mml, rebuilt.stree.xml(), options); }); } function workerNextRules(expr, options) { return __awaiter(this, void 0, void 0, function* () { const mml = DomUtil.parseInput(expr); const rebuilt = new rebuild_stree_js_1.RebuildStree(mml); const styles = SpeechGeneratorUtil.toStyles(options); options = SpeechGeneratorUtil.nextRules(options, styles); options.domain2style = SpeechGeneratorUtil.fromStyles(styles); return assembleWorkerStructure(mml, rebuilt.stree.xml(), options); }); } function workerNextStyle(expr, options, id) { return __awaiter(this, void 0, void 0, function* () { const mml = DomUtil.parseInput(expr); const rebuilt = new rebuild_stree_js_1.RebuildStree(mml); const styles = SpeechGeneratorUtil.toStyles(options); options.style = SpeechGeneratorUtil.nextStyle(rebuilt.nodeDict[id], options); styles[options.domain] = options.style; options.domain2style = SpeechGeneratorUtil.fromStyles(styles); return assembleWorkerStructure(mml, rebuilt.stree.xml(), options); }); } function workerLocalePreferences(options) { return __awaiter(this, void 0, void 0, function* () { return clearspeak_preferences_js_1.ClearspeakPreferences.getLocalePreferences()[options.locale]; }); } function workerRelevantPreferences(expr, id) { return __awaiter(this, void 0, void 0, function* () { var _a; const mml = DomUtil.parseInput(expr); const rebuilt = new rebuild_stree_js_1.RebuildStree(mml); const query = (_a = rebuilt.stree.root.querySelectorAll((x) => x.id.toString() === id)[0]) !== null && _a !== void 0 ? _a : rebuilt.stree.root; return clearspeak_preferences_js_1.ClearspeakPreferences.relevantPreferences(query); }); } function assembleWorkerStructure(mml, sxml, options) { return __awaiter(this, void 0, void 0, function* () { var _a; yield setupEngine(options); engine_js_1.Engine.getInstance().options.automark = true; const json = {}; json.options = options; json.mactions = SpeechGeneratorUtil.connectMactionSelections(mml, sxml); json.speech = SpeechGeneratorUtil.computeSpeechStructure(sxml); const root = (_a = sxml.childNodes[0]) === null || _a === void 0 ? void 0 : _a.getAttribute('id'); json.label = json.speech[root]['speech-none']; json.ssml = json.speech[root]['speech-ssml']; json.translations = Object.assign({}, locale_js_1.LOCALE.MESSAGES.navigate); if (options.braille === 'none') { return json; } yield setupEngine({ modality: 'braille', locale: options.braille, domain: 'default', style: 'default' }); json.braille = SpeechGeneratorUtil.computeBrailleStructure(sxml); json.braillelabel = json.braille[root]['braille-none']; return json; }); } exports.localePath = FileUtil.localePath; if (system_external_js_1.SystemExternal.documentSupported || system_external_js_1.SystemExternal.webworker) { setupEngine({ mode: EngineConst.Mode.HTTP }).then(() => setupEngine({})); } else { setupEngine({ mode: EngineConst.Mode.SYNC }).then(() => setupEngine({ mode: EngineConst.Mode.ASYNC })); } //# sourceMappingURL=system.js.map