SymbolMap.js 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. "use strict";
  2. var __extends = (this && this.__extends) || (function () {
  3. var extendStatics = function (d, b) {
  4. extendStatics = Object.setPrototypeOf ||
  5. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  6. function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  7. return extendStatics(d, b);
  8. };
  9. return function (d, b) {
  10. if (typeof b !== "function" && b !== null)
  11. throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  12. extendStatics(d, b);
  13. function __() { this.constructor = d; }
  14. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  15. };
  16. })();
  17. var __read = (this && this.__read) || function (o, n) {
  18. var m = typeof Symbol === "function" && o[Symbol.iterator];
  19. if (!m) return o;
  20. var i = m.call(o), r, ar = [], e;
  21. try {
  22. while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
  23. }
  24. catch (error) { e = { error: error }; }
  25. finally {
  26. try {
  27. if (r && !r.done && (m = i["return"])) m.call(i);
  28. }
  29. finally { if (e) throw e.error; }
  30. }
  31. return ar;
  32. };
  33. var __values = (this && this.__values) || function(o) {
  34. var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
  35. if (m) return m.call(o);
  36. if (o && typeof o.length === "number") return {
  37. next: function () {
  38. if (o && i >= o.length) o = void 0;
  39. return { value: o && o[i++], done: !o };
  40. }
  41. };
  42. throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
  43. };
  44. var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
  45. if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
  46. if (ar || !(i in from)) {
  47. if (!ar) ar = Array.prototype.slice.call(from, 0, i);
  48. ar[i] = from[i];
  49. }
  50. }
  51. return to.concat(ar || Array.prototype.slice.call(from));
  52. };
  53. Object.defineProperty(exports, "__esModule", { value: true });
  54. exports.EnvironmentMap = exports.CommandMap = exports.MacroMap = exports.DelimiterMap = exports.CharacterMap = exports.AbstractParseMap = exports.RegExpMap = exports.AbstractSymbolMap = exports.parseResult = void 0;
  55. var Symbol_js_1 = require("./Symbol.js");
  56. var MapHandler_js_1 = require("./MapHandler.js");
  57. function parseResult(result) {
  58. return result === void 0 ? true : result;
  59. }
  60. exports.parseResult = parseResult;
  61. var AbstractSymbolMap = (function () {
  62. function AbstractSymbolMap(_name, _parser) {
  63. this._name = _name;
  64. this._parser = _parser;
  65. MapHandler_js_1.MapHandler.register(this);
  66. }
  67. Object.defineProperty(AbstractSymbolMap.prototype, "name", {
  68. get: function () {
  69. return this._name;
  70. },
  71. enumerable: false,
  72. configurable: true
  73. });
  74. AbstractSymbolMap.prototype.parserFor = function (symbol) {
  75. return this.contains(symbol) ? this.parser : null;
  76. };
  77. AbstractSymbolMap.prototype.parse = function (_a) {
  78. var _b = __read(_a, 2), env = _b[0], symbol = _b[1];
  79. var parser = this.parserFor(symbol);
  80. var mapped = this.lookup(symbol);
  81. return (parser && mapped) ? parseResult(parser(env, mapped)) : null;
  82. };
  83. Object.defineProperty(AbstractSymbolMap.prototype, "parser", {
  84. get: function () {
  85. return this._parser;
  86. },
  87. set: function (parser) {
  88. this._parser = parser;
  89. },
  90. enumerable: false,
  91. configurable: true
  92. });
  93. return AbstractSymbolMap;
  94. }());
  95. exports.AbstractSymbolMap = AbstractSymbolMap;
  96. var RegExpMap = (function (_super) {
  97. __extends(RegExpMap, _super);
  98. function RegExpMap(name, parser, _regExp) {
  99. var _this = _super.call(this, name, parser) || this;
  100. _this._regExp = _regExp;
  101. return _this;
  102. }
  103. RegExpMap.prototype.contains = function (symbol) {
  104. return this._regExp.test(symbol);
  105. };
  106. RegExpMap.prototype.lookup = function (symbol) {
  107. return this.contains(symbol) ? symbol : null;
  108. };
  109. return RegExpMap;
  110. }(AbstractSymbolMap));
  111. exports.RegExpMap = RegExpMap;
  112. var AbstractParseMap = (function (_super) {
  113. __extends(AbstractParseMap, _super);
  114. function AbstractParseMap() {
  115. var _this = _super !== null && _super.apply(this, arguments) || this;
  116. _this.map = new Map();
  117. return _this;
  118. }
  119. AbstractParseMap.prototype.lookup = function (symbol) {
  120. return this.map.get(symbol);
  121. };
  122. AbstractParseMap.prototype.contains = function (symbol) {
  123. return this.map.has(symbol);
  124. };
  125. AbstractParseMap.prototype.add = function (symbol, object) {
  126. this.map.set(symbol, object);
  127. };
  128. AbstractParseMap.prototype.remove = function (symbol) {
  129. this.map.delete(symbol);
  130. };
  131. return AbstractParseMap;
  132. }(AbstractSymbolMap));
  133. exports.AbstractParseMap = AbstractParseMap;
  134. var CharacterMap = (function (_super) {
  135. __extends(CharacterMap, _super);
  136. function CharacterMap(name, parser, json) {
  137. var e_1, _a;
  138. var _this = _super.call(this, name, parser) || this;
  139. try {
  140. for (var _b = __values(Object.keys(json)), _c = _b.next(); !_c.done; _c = _b.next()) {
  141. var key = _c.value;
  142. var value = json[key];
  143. var _d = __read((typeof (value) === 'string') ? [value, null] : value, 2), char = _d[0], attrs = _d[1];
  144. var character = new Symbol_js_1.Symbol(key, char, attrs);
  145. _this.add(key, character);
  146. }
  147. }
  148. catch (e_1_1) { e_1 = { error: e_1_1 }; }
  149. finally {
  150. try {
  151. if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
  152. }
  153. finally { if (e_1) throw e_1.error; }
  154. }
  155. return _this;
  156. }
  157. return CharacterMap;
  158. }(AbstractParseMap));
  159. exports.CharacterMap = CharacterMap;
  160. var DelimiterMap = (function (_super) {
  161. __extends(DelimiterMap, _super);
  162. function DelimiterMap() {
  163. return _super !== null && _super.apply(this, arguments) || this;
  164. }
  165. DelimiterMap.prototype.parse = function (_a) {
  166. var _b = __read(_a, 2), env = _b[0], symbol = _b[1];
  167. return _super.prototype.parse.call(this, [env, '\\' + symbol]);
  168. };
  169. return DelimiterMap;
  170. }(CharacterMap));
  171. exports.DelimiterMap = DelimiterMap;
  172. var MacroMap = (function (_super) {
  173. __extends(MacroMap, _super);
  174. function MacroMap(name, json, functionMap) {
  175. var e_2, _a;
  176. var _this = _super.call(this, name, null) || this;
  177. try {
  178. for (var _b = __values(Object.keys(json)), _c = _b.next(); !_c.done; _c = _b.next()) {
  179. var key = _c.value;
  180. var value = json[key];
  181. var _d = __read((typeof (value) === 'string') ? [value] : value), func = _d[0], attrs = _d.slice(1);
  182. var character = new Symbol_js_1.Macro(key, functionMap[func], attrs);
  183. _this.add(key, character);
  184. }
  185. }
  186. catch (e_2_1) { e_2 = { error: e_2_1 }; }
  187. finally {
  188. try {
  189. if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
  190. }
  191. finally { if (e_2) throw e_2.error; }
  192. }
  193. return _this;
  194. }
  195. MacroMap.prototype.parserFor = function (symbol) {
  196. var macro = this.lookup(symbol);
  197. return macro ? macro.func : null;
  198. };
  199. MacroMap.prototype.parse = function (_a) {
  200. var _b = __read(_a, 2), env = _b[0], symbol = _b[1];
  201. var macro = this.lookup(symbol);
  202. var parser = this.parserFor(symbol);
  203. if (!macro || !parser) {
  204. return null;
  205. }
  206. return parseResult(parser.apply(void 0, __spreadArray([env, macro.symbol], __read(macro.args), false)));
  207. };
  208. return MacroMap;
  209. }(AbstractParseMap));
  210. exports.MacroMap = MacroMap;
  211. var CommandMap = (function (_super) {
  212. __extends(CommandMap, _super);
  213. function CommandMap() {
  214. return _super !== null && _super.apply(this, arguments) || this;
  215. }
  216. CommandMap.prototype.parse = function (_a) {
  217. var _b = __read(_a, 2), env = _b[0], symbol = _b[1];
  218. var macro = this.lookup(symbol);
  219. var parser = this.parserFor(symbol);
  220. if (!macro || !parser) {
  221. return null;
  222. }
  223. var saveCommand = env.currentCS;
  224. env.currentCS = '\\' + symbol;
  225. var result = parser.apply(void 0, __spreadArray([env, '\\' + macro.symbol], __read(macro.args), false));
  226. env.currentCS = saveCommand;
  227. return parseResult(result);
  228. };
  229. return CommandMap;
  230. }(MacroMap));
  231. exports.CommandMap = CommandMap;
  232. var EnvironmentMap = (function (_super) {
  233. __extends(EnvironmentMap, _super);
  234. function EnvironmentMap(name, parser, json, functionMap) {
  235. var _this = _super.call(this, name, json, functionMap) || this;
  236. _this.parser = parser;
  237. return _this;
  238. }
  239. EnvironmentMap.prototype.parse = function (_a) {
  240. var _b = __read(_a, 2), env = _b[0], symbol = _b[1];
  241. var macro = this.lookup(symbol);
  242. var envParser = this.parserFor(symbol);
  243. if (!macro || !envParser) {
  244. return null;
  245. }
  246. return parseResult(this.parser(env, macro.symbol, envParser, macro.args));
  247. };
  248. return EnvironmentMap;
  249. }(MacroMap));
  250. exports.EnvironmentMap = EnvironmentMap;
  251. //# sourceMappingURL=SymbolMap.js.map