engine_setup.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. "use strict";
  2. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  3. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  4. return new (P || (P = Promise))(function (resolve, reject) {
  5. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  6. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  7. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  8. step((generator = generator.apply(thisArg, _arguments || [])).next());
  9. });
  10. };
  11. Object.defineProperty(exports, "__esModule", { value: true });
  12. exports.setup = setup;
  13. const L10n = require("../l10n/l10n.js");
  14. const MathMap = require("../speech_rules/math_map.js");
  15. const BrowserUtil = require("./browser_util.js");
  16. const debugger_js_1 = require("./debugger.js");
  17. const engine_js_1 = require("./engine.js");
  18. const FileUtil = require("./file_util.js");
  19. const system_external_js_1 = require("./system_external.js");
  20. const MATHSPEAK_ONLY = ['ca', 'da', 'es'];
  21. const EN_RULES = [
  22. 'chromevox',
  23. 'clearspeak',
  24. 'mathspeak',
  25. 'emacspeak',
  26. 'html'
  27. ];
  28. function ensureDomain(feature) {
  29. if ((feature.modality && feature.modality !== 'speech') ||
  30. (!feature.modality && engine_js_1.Engine.getInstance().modality !== 'speech')) {
  31. return;
  32. }
  33. if (!feature.domain) {
  34. return;
  35. }
  36. if (feature.domain === 'default') {
  37. feature.domain = 'mathspeak';
  38. return;
  39. }
  40. const locale = (feature.locale || engine_js_1.Engine.getInstance().locale);
  41. const domain = feature.domain;
  42. if (MATHSPEAK_ONLY.indexOf(locale) !== -1) {
  43. if (domain !== 'mathspeak') {
  44. feature.domain = 'mathspeak';
  45. }
  46. return;
  47. }
  48. if (locale === 'en') {
  49. if (EN_RULES.indexOf(domain) === -1) {
  50. feature.domain = 'mathspeak';
  51. }
  52. return;
  53. }
  54. if (domain !== 'mathspeak' && domain !== 'clearspeak') {
  55. feature.domain = 'mathspeak';
  56. }
  57. }
  58. function setup(feature) {
  59. return __awaiter(this, void 0, void 0, function* () {
  60. ensureDomain(feature);
  61. const engine = engine_js_1.Engine.getInstance();
  62. const setIf = (feat) => {
  63. if (typeof feature[feat] !== 'undefined') {
  64. engine[feat] = !!feature[feat];
  65. }
  66. };
  67. const setMulti = (feat) => {
  68. if (typeof feature[feat] !== 'undefined') {
  69. engine[feat] = feature[feat];
  70. }
  71. };
  72. setMulti('mode');
  73. engine.configurate(feature);
  74. engine_js_1.Engine.BINARY_FEATURES.forEach(setIf);
  75. engine_js_1.Engine.STRING_FEATURES.forEach(setMulti);
  76. if (feature.debug) {
  77. debugger_js_1.Debugger.getInstance().init();
  78. }
  79. if (feature.json) {
  80. system_external_js_1.SystemExternal.jsonPath = FileUtil.makePath(feature.json);
  81. }
  82. if (feature.xpath) {
  83. system_external_js_1.SystemExternal.WGXpath = feature.xpath;
  84. }
  85. engine.setCustomLoader(feature.custom);
  86. setupBrowsers(engine);
  87. L10n.setLocale();
  88. engine.setDynamicCstr();
  89. if (engine.init) {
  90. engine_js_1.EnginePromise.promises['init'] = new Promise((res, _rej) => {
  91. setTimeout(() => {
  92. res('init');
  93. }, 10);
  94. });
  95. engine.init = false;
  96. return engine_js_1.EnginePromise.get();
  97. }
  98. if (engine.delay) {
  99. engine.delay = false;
  100. return engine_js_1.EnginePromise.get();
  101. }
  102. return MathMap.loadLocale();
  103. });
  104. }
  105. function setupBrowsers(engine) {
  106. engine.isIE = BrowserUtil.detectIE();
  107. engine.isEdge = BrowserUtil.detectEdge();
  108. }