SetOptionsConfiguration.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. "use strict";
  2. var __values = (this && this.__values) || function(o) {
  3. var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
  4. if (m) return m.call(o);
  5. if (o && typeof o.length === "number") return {
  6. next: function () {
  7. if (o && i >= o.length) o = void 0;
  8. return { value: o && o[i++], done: !o };
  9. }
  10. };
  11. throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
  12. };
  13. var __importDefault = (this && this.__importDefault) || function (mod) {
  14. return (mod && mod.__esModule) ? mod : { "default": mod };
  15. };
  16. Object.defineProperty(exports, "__esModule", { value: true });
  17. exports.SetOptionsConfiguration = exports.SetOptionsUtil = void 0;
  18. var Configuration_js_1 = require("../Configuration.js");
  19. var SymbolMap_js_1 = require("../SymbolMap.js");
  20. var TexError_js_1 = __importDefault(require("../TexError.js"));
  21. var ParseUtil_js_1 = __importDefault(require("../ParseUtil.js"));
  22. var Symbol_js_1 = require("../Symbol.js");
  23. var BaseMethods_js_1 = __importDefault(require("../base/BaseMethods.js"));
  24. var Options_js_1 = require("../../../util/Options.js");
  25. exports.SetOptionsUtil = {
  26. filterPackage: function (parser, extension) {
  27. if (extension !== 'tex' && !Configuration_js_1.ConfigurationHandler.get(extension)) {
  28. throw new TexError_js_1.default('NotAPackage', 'Not a defined package: %1', extension);
  29. }
  30. var config = parser.options.setoptions;
  31. var options = config.allowOptions[extension];
  32. if ((options === undefined && !config.allowPackageDefault) || options === false) {
  33. throw new TexError_js_1.default('PackageNotSettable', 'Options can\'t be set for package "%1"', extension);
  34. }
  35. return true;
  36. },
  37. filterOption: function (parser, extension, option) {
  38. var _a;
  39. var config = parser.options.setoptions;
  40. var options = config.allowOptions[extension] || {};
  41. var allow = (options.hasOwnProperty(option) && !(0, Options_js_1.isObject)(options[option]) ? options[option] : null);
  42. if (allow === false || (allow === null && !config.allowOptionsDefault)) {
  43. throw new TexError_js_1.default('OptionNotSettable', 'Option "%1" is not allowed to be set', option);
  44. }
  45. if (!((_a = (extension === 'tex' ? parser.options : parser.options[extension])) === null || _a === void 0 ? void 0 : _a.hasOwnProperty(option))) {
  46. if (extension === 'tex') {
  47. throw new TexError_js_1.default('InvalidTexOption', 'Invalid TeX option "%1"', option);
  48. }
  49. else {
  50. throw new TexError_js_1.default('InvalidOptionKey', 'Invalid option "%1" for package "%2"', option, extension);
  51. }
  52. }
  53. return true;
  54. },
  55. filterValue: function (_parser, _extension, _option, value) {
  56. return value;
  57. }
  58. };
  59. var setOptionsMap = new SymbolMap_js_1.CommandMap('setoptions', {
  60. setOptions: 'SetOptions'
  61. }, {
  62. SetOptions: function (parser, name) {
  63. var e_1, _a;
  64. var extension = parser.GetBrackets(name) || 'tex';
  65. var options = ParseUtil_js_1.default.keyvalOptions(parser.GetArgument(name));
  66. var config = parser.options.setoptions;
  67. if (!config.filterPackage(parser, extension))
  68. return;
  69. try {
  70. for (var _b = __values(Object.keys(options)), _c = _b.next(); !_c.done; _c = _b.next()) {
  71. var key = _c.value;
  72. if (config.filterOption(parser, extension, key)) {
  73. (extension === 'tex' ? parser.options : parser.options[extension])[key] =
  74. config.filterValue(parser, extension, key, options[key]);
  75. }
  76. }
  77. }
  78. catch (e_1_1) { e_1 = { error: e_1_1 }; }
  79. finally {
  80. try {
  81. if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
  82. }
  83. finally { if (e_1) throw e_1.error; }
  84. }
  85. }
  86. });
  87. function setoptionsConfig(_config, jax) {
  88. var require = jax.parseOptions.handlers.get('macro').lookup('require');
  89. if (require) {
  90. setOptionsMap.add('Require', new Symbol_js_1.Macro('Require', require._func));
  91. setOptionsMap.add('require', new Symbol_js_1.Macro('require', BaseMethods_js_1.default.Macro, ['\\Require{#2}\\setOptions[#2]{#1}', 2, '']));
  92. }
  93. }
  94. exports.SetOptionsConfiguration = Configuration_js_1.Configuration.create('setoptions', {
  95. handler: { macro: ['setoptions'] },
  96. config: setoptionsConfig,
  97. priority: 3,
  98. options: {
  99. setoptions: {
  100. filterPackage: exports.SetOptionsUtil.filterPackage,
  101. filterOption: exports.SetOptionsUtil.filterOption,
  102. filterValue: exports.SetOptionsUtil.filterValue,
  103. allowPackageDefault: true,
  104. allowOptionsDefault: true,
  105. allowOptions: (0, Options_js_1.expandable)({
  106. tex: {
  107. FindTeX: false,
  108. formatError: false,
  109. package: false,
  110. baseURL: false,
  111. tags: false,
  112. maxBuffer: false,
  113. maxMaxros: false,
  114. macros: false,
  115. environments: false
  116. },
  117. setoptions: false,
  118. autoload: false,
  119. require: false,
  120. configmacros: false,
  121. tagformat: false
  122. })
  123. }
  124. }
  125. });
  126. //# sourceMappingURL=SetOptionsConfiguration.js.map