NewcommandUtil.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. "use strict";
  2. var __importDefault = (this && this.__importDefault) || function (mod) {
  3. return (mod && mod.__esModule) ? mod : { "default": mod };
  4. };
  5. Object.defineProperty(exports, "__esModule", { value: true });
  6. var ParseUtil_js_1 = __importDefault(require("../ParseUtil.js"));
  7. var TexError_js_1 = __importDefault(require("../TexError.js"));
  8. var Symbol_js_1 = require("../Symbol.js");
  9. var NewcommandUtil;
  10. (function (NewcommandUtil) {
  11. function disassembleSymbol(name, symbol) {
  12. var newArgs = [name, symbol.char];
  13. if (symbol.attributes) {
  14. for (var key in symbol.attributes) {
  15. newArgs.push(key);
  16. newArgs.push(symbol.attributes[key]);
  17. }
  18. }
  19. return newArgs;
  20. }
  21. NewcommandUtil.disassembleSymbol = disassembleSymbol;
  22. function assembleSymbol(args) {
  23. var name = args[0];
  24. var char = args[1];
  25. var attrs = {};
  26. for (var i = 2; i < args.length; i = i + 2) {
  27. attrs[args[i]] = args[i + 1];
  28. }
  29. return new Symbol_js_1.Symbol(name, char, attrs);
  30. }
  31. NewcommandUtil.assembleSymbol = assembleSymbol;
  32. function GetCSname(parser, cmd) {
  33. var c = parser.GetNext();
  34. if (c !== '\\') {
  35. throw new TexError_js_1.default('MissingCS', '%1 must be followed by a control sequence', cmd);
  36. }
  37. var cs = ParseUtil_js_1.default.trimSpaces(parser.GetArgument(cmd));
  38. return cs.substr(1);
  39. }
  40. NewcommandUtil.GetCSname = GetCSname;
  41. function GetCsNameArgument(parser, name) {
  42. var cs = ParseUtil_js_1.default.trimSpaces(parser.GetArgument(name));
  43. if (cs.charAt(0) === '\\') {
  44. cs = cs.substr(1);
  45. }
  46. if (!cs.match(/^(.|[a-z]+)$/i)) {
  47. throw new TexError_js_1.default('IllegalControlSequenceName', 'Illegal control sequence name for %1', name);
  48. }
  49. return cs;
  50. }
  51. NewcommandUtil.GetCsNameArgument = GetCsNameArgument;
  52. function GetArgCount(parser, name) {
  53. var n = parser.GetBrackets(name);
  54. if (n) {
  55. n = ParseUtil_js_1.default.trimSpaces(n);
  56. if (!n.match(/^[0-9]+$/)) {
  57. throw new TexError_js_1.default('IllegalParamNumber', 'Illegal number of parameters specified in %1', name);
  58. }
  59. }
  60. return n;
  61. }
  62. NewcommandUtil.GetArgCount = GetArgCount;
  63. function GetTemplate(parser, cmd, cs) {
  64. var c = parser.GetNext();
  65. var params = [];
  66. var n = 0;
  67. var i = parser.i;
  68. while (parser.i < parser.string.length) {
  69. c = parser.GetNext();
  70. if (c === '#') {
  71. if (i !== parser.i) {
  72. params[n] = parser.string.substr(i, parser.i - i);
  73. }
  74. c = parser.string.charAt(++parser.i);
  75. if (!c.match(/^[1-9]$/)) {
  76. throw new TexError_js_1.default('CantUseHash2', 'Illegal use of # in template for %1', cs);
  77. }
  78. if (parseInt(c) !== ++n) {
  79. throw new TexError_js_1.default('SequentialParam', 'Parameters for %1 must be numbered sequentially', cs);
  80. }
  81. i = parser.i + 1;
  82. }
  83. else if (c === '{') {
  84. if (i !== parser.i) {
  85. params[n] = parser.string.substr(i, parser.i - i);
  86. }
  87. if (params.length > 0) {
  88. return [n.toString()].concat(params);
  89. }
  90. else {
  91. return n;
  92. }
  93. }
  94. parser.i++;
  95. }
  96. throw new TexError_js_1.default('MissingReplacementString', 'Missing replacement string for definition of %1', cmd);
  97. }
  98. NewcommandUtil.GetTemplate = GetTemplate;
  99. function GetParameter(parser, name, param) {
  100. if (param == null) {
  101. return parser.GetArgument(name);
  102. }
  103. var i = parser.i;
  104. var j = 0;
  105. var hasBraces = 0;
  106. while (parser.i < parser.string.length) {
  107. var c = parser.string.charAt(parser.i);
  108. if (c === '{') {
  109. if (parser.i === i) {
  110. hasBraces = 1;
  111. }
  112. parser.GetArgument(name);
  113. j = parser.i - i;
  114. }
  115. else if (MatchParam(parser, param)) {
  116. if (hasBraces) {
  117. i++;
  118. j -= 2;
  119. }
  120. return parser.string.substr(i, j);
  121. }
  122. else if (c === '\\') {
  123. parser.i++;
  124. j++;
  125. hasBraces = 0;
  126. var match = parser.string.substr(parser.i).match(/[a-z]+|./i);
  127. if (match) {
  128. parser.i += match[0].length;
  129. j = parser.i - i;
  130. }
  131. }
  132. else {
  133. parser.i++;
  134. j++;
  135. hasBraces = 0;
  136. }
  137. }
  138. throw new TexError_js_1.default('RunawayArgument', 'Runaway argument for %1?', name);
  139. }
  140. NewcommandUtil.GetParameter = GetParameter;
  141. function MatchParam(parser, param) {
  142. if (parser.string.substr(parser.i, param.length) !== param) {
  143. return 0;
  144. }
  145. if (param.match(/\\[a-z]+$/i) &&
  146. parser.string.charAt(parser.i + param.length).match(/[a-z]/i)) {
  147. return 0;
  148. }
  149. parser.i += param.length;
  150. return 1;
  151. }
  152. NewcommandUtil.MatchParam = MatchParam;
  153. function addDelimiter(parser, cs, char, attr) {
  154. var handlers = parser.configuration.handlers;
  155. var handler = handlers.retrieve(NewcommandUtil.NEW_DELIMITER);
  156. handler.add(cs, new Symbol_js_1.Symbol(cs, char, attr));
  157. }
  158. NewcommandUtil.addDelimiter = addDelimiter;
  159. function addMacro(parser, cs, func, attr, symbol) {
  160. if (symbol === void 0) { symbol = ''; }
  161. var handlers = parser.configuration.handlers;
  162. var handler = handlers.retrieve(NewcommandUtil.NEW_COMMAND);
  163. handler.add(cs, new Symbol_js_1.Macro(symbol ? symbol : cs, func, attr));
  164. }
  165. NewcommandUtil.addMacro = addMacro;
  166. function addEnvironment(parser, env, func, attr) {
  167. var handlers = parser.configuration.handlers;
  168. var handler = handlers.retrieve(NewcommandUtil.NEW_ENVIRONMENT);
  169. handler.add(env, new Symbol_js_1.Macro(env, func, attr));
  170. }
  171. NewcommandUtil.addEnvironment = addEnvironment;
  172. NewcommandUtil.NEW_DELIMITER = 'new-Delimiter';
  173. NewcommandUtil.NEW_COMMAND = 'new-Command';
  174. NewcommandUtil.NEW_ENVIRONMENT = 'new-Environment';
  175. })(NewcommandUtil || (NewcommandUtil = {}));
  176. exports.default = NewcommandUtil;
  177. //# sourceMappingURL=NewcommandUtil.js.map