CasesConfiguration.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  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 __importDefault = (this && this.__importDefault) || function (mod) {
  18. return (mod && mod.__esModule) ? mod : { "default": mod };
  19. };
  20. var _a;
  21. Object.defineProperty(exports, "__esModule", { value: true });
  22. exports.CasesConfiguration = exports.CasesMethods = exports.CasesTags = exports.CasesBeginItem = void 0;
  23. var Configuration_js_1 = require("../Configuration.js");
  24. var SymbolMap_js_1 = require("../SymbolMap.js");
  25. var ParseUtil_js_1 = __importDefault(require("../ParseUtil.js"));
  26. var BaseMethods_js_1 = __importDefault(require("../base/BaseMethods.js"));
  27. var TexError_js_1 = __importDefault(require("../TexError.js"));
  28. var BaseItems_js_1 = require("../base/BaseItems.js");
  29. var AmsConfiguration_js_1 = require("../ams/AmsConfiguration.js");
  30. var EmpheqUtil_js_1 = require("../empheq/EmpheqUtil.js");
  31. var CasesBeginItem = (function (_super) {
  32. __extends(CasesBeginItem, _super);
  33. function CasesBeginItem() {
  34. return _super !== null && _super.apply(this, arguments) || this;
  35. }
  36. Object.defineProperty(CasesBeginItem.prototype, "kind", {
  37. get: function () {
  38. return 'cases-begin';
  39. },
  40. enumerable: false,
  41. configurable: true
  42. });
  43. CasesBeginItem.prototype.checkItem = function (item) {
  44. if (item.isKind('end') && item.getName() === this.getName()) {
  45. if (this.getProperty('end')) {
  46. this.setProperty('end', false);
  47. return [[], true];
  48. }
  49. }
  50. return _super.prototype.checkItem.call(this, item);
  51. };
  52. return CasesBeginItem;
  53. }(BaseItems_js_1.BeginItem));
  54. exports.CasesBeginItem = CasesBeginItem;
  55. var CasesTags = (function (_super) {
  56. __extends(CasesTags, _super);
  57. function CasesTags() {
  58. var _this = _super !== null && _super.apply(this, arguments) || this;
  59. _this.subcounter = 0;
  60. return _this;
  61. }
  62. CasesTags.prototype.start = function (env, taggable, defaultTags) {
  63. this.subcounter = 0;
  64. _super.prototype.start.call(this, env, taggable, defaultTags);
  65. };
  66. CasesTags.prototype.autoTag = function () {
  67. if (this.currentTag.tag != null)
  68. return;
  69. if (this.currentTag.env === 'subnumcases') {
  70. if (this.subcounter === 0)
  71. this.counter++;
  72. this.subcounter++;
  73. this.tag(this.formatNumber(this.counter, this.subcounter), false);
  74. }
  75. else {
  76. if (this.subcounter === 0 || this.currentTag.env !== 'numcases-left')
  77. this.counter++;
  78. this.tag(this.formatNumber(this.counter), false);
  79. }
  80. };
  81. CasesTags.prototype.formatNumber = function (n, m) {
  82. if (m === void 0) { m = null; }
  83. return n.toString() + (m === null ? '' : String.fromCharCode(0x60 + m));
  84. };
  85. return CasesTags;
  86. }(AmsConfiguration_js_1.AmsTags));
  87. exports.CasesTags = CasesTags;
  88. exports.CasesMethods = {
  89. NumCases: function (parser, begin) {
  90. if (parser.stack.env.closing === begin.getName()) {
  91. delete parser.stack.env.closing;
  92. parser.Push(parser.itemFactory.create('end').setProperty('name', begin.getName()));
  93. var cases = parser.stack.Top();
  94. var table = cases.Last;
  95. var original = ParseUtil_js_1.default.copyNode(table, parser);
  96. var left = cases.getProperty('left');
  97. EmpheqUtil_js_1.EmpheqUtil.left(table, original, left + '\\empheqlbrace\\,', parser, 'numcases-left');
  98. parser.Push(parser.itemFactory.create('end').setProperty('name', begin.getName()));
  99. return null;
  100. }
  101. else {
  102. var left = parser.GetArgument('\\begin{' + begin.getName() + '}');
  103. begin.setProperty('left', left);
  104. var array = BaseMethods_js_1.default.EqnArray(parser, begin, true, true, 'll');
  105. array.arraydef.displaystyle = false;
  106. array.arraydef.rowspacing = '.2em';
  107. array.setProperty('numCases', true);
  108. parser.Push(begin);
  109. return array;
  110. }
  111. },
  112. Entry: function (parser, name) {
  113. if (!parser.stack.Top().getProperty('numCases')) {
  114. return BaseMethods_js_1.default.Entry(parser, name);
  115. }
  116. parser.Push(parser.itemFactory.create('cell').setProperties({ isEntry: true, name: name }));
  117. var tex = parser.string;
  118. var braces = 0, i = parser.i, m = tex.length;
  119. while (i < m) {
  120. var c = tex.charAt(i);
  121. if (c === '{') {
  122. braces++;
  123. i++;
  124. }
  125. else if (c === '}') {
  126. if (braces === 0) {
  127. break;
  128. }
  129. else {
  130. braces--;
  131. i++;
  132. }
  133. }
  134. else if (c === '&' && braces === 0) {
  135. throw new TexError_js_1.default('ExtraCasesAlignTab', 'Extra alignment tab in text for numcase environment');
  136. }
  137. else if (c === '\\' && braces === 0) {
  138. var cs = (tex.slice(i + 1).match(/^[a-z]+|./i) || [])[0];
  139. if (cs === '\\' || cs === 'cr' || cs === 'end' || cs === 'label') {
  140. break;
  141. }
  142. else {
  143. i += cs.length;
  144. }
  145. }
  146. else {
  147. i++;
  148. }
  149. }
  150. var text = tex.substr(parser.i, i - parser.i).replace(/^\s*/, '');
  151. parser.PushAll(ParseUtil_js_1.default.internalMath(parser, text, 0));
  152. parser.i = i;
  153. }
  154. };
  155. new SymbolMap_js_1.EnvironmentMap('cases-env', EmpheqUtil_js_1.EmpheqUtil.environment, {
  156. numcases: ['NumCases', 'cases'],
  157. subnumcases: ['NumCases', 'cases']
  158. }, exports.CasesMethods);
  159. new SymbolMap_js_1.MacroMap('cases-macros', {
  160. '&': 'Entry'
  161. }, exports.CasesMethods);
  162. exports.CasesConfiguration = Configuration_js_1.Configuration.create('cases', {
  163. handler: {
  164. environment: ['cases-env'],
  165. character: ['cases-macros']
  166. },
  167. items: (_a = {},
  168. _a[CasesBeginItem.prototype.kind] = CasesBeginItem,
  169. _a),
  170. tags: { 'cases': CasesTags }
  171. });
  172. //# sourceMappingURL=CasesConfiguration.js.map