mathpix-markdown-it 2.0.38 → 2.0.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/README.md +3 -0
  2. package/doc/changelog.md +128 -0
  3. package/es5/browser/auto-render.js +1 -1
  4. package/es5/bundle.js +4 -4
  5. package/es5/index.js +4 -4
  6. package/lib/components/mathpix-markdown/index.js +2 -1
  7. package/lib/components/mathpix-markdown/index.js.map +1 -1
  8. package/lib/index.d.ts +2 -1
  9. package/lib/index.js +3 -1
  10. package/lib/index.js.map +1 -1
  11. package/lib/markdown/common/consts.d.ts +5 -0
  12. package/lib/markdown/common/consts.js +17 -5
  13. package/lib/markdown/common/consts.js.map +1 -1
  14. package/lib/markdown/common/convert-math-to-html.d.ts +10 -0
  15. package/lib/markdown/common/convert-math-to-html.js +163 -41
  16. package/lib/markdown/common/convert-math-to-html.js.map +1 -1
  17. package/lib/markdown/common/labels.d.ts +9 -1
  18. package/lib/markdown/common/labels.js +82 -37
  19. package/lib/markdown/common/labels.js.map +1 -1
  20. package/lib/markdown/common/reset-mmd-state.d.ts +4 -0
  21. package/lib/markdown/common/reset-mmd-state.js +30 -0
  22. package/lib/markdown/common/reset-mmd-state.js.map +1 -0
  23. package/lib/markdown/common.d.ts +3 -0
  24. package/lib/markdown/common.js +34 -23
  25. package/lib/markdown/common.js.map +1 -1
  26. package/lib/markdown/highlight/highlight-math-token.js +1 -0
  27. package/lib/markdown/highlight/highlight-math-token.js.map +1 -1
  28. package/lib/markdown/index.js +22 -8
  29. package/lib/markdown/index.js.map +1 -1
  30. package/lib/markdown/mathpix-markdown-plugins.js +21 -1
  31. package/lib/markdown/mathpix-markdown-plugins.js.map +1 -1
  32. package/lib/markdown/md-block-rule/begin-tabular/common.d.ts +15 -1
  33. package/lib/markdown/md-block-rule/begin-tabular/common.js +57 -11
  34. package/lib/markdown/md-block-rule/begin-tabular/common.js.map +1 -1
  35. package/lib/markdown/md-block-rule/begin-tabular/index.d.ts +3 -0
  36. package/lib/markdown/md-block-rule/begin-tabular/index.js +79 -20
  37. package/lib/markdown/md-block-rule/begin-tabular/index.js.map +1 -1
  38. package/lib/markdown/md-block-rule/begin-tabular/multi-column-row.d.ts +3 -1
  39. package/lib/markdown/md-block-rule/begin-tabular/multi-column-row.js +15 -9
  40. package/lib/markdown/md-block-rule/begin-tabular/multi-column-row.js.map +1 -1
  41. package/lib/markdown/md-block-rule/begin-tabular/parse-tabular.d.ts +2 -1
  42. package/lib/markdown/md-block-rule/begin-tabular/parse-tabular.js +177 -73
  43. package/lib/markdown/md-block-rule/begin-tabular/parse-tabular.js.map +1 -1
  44. package/lib/markdown/md-block-rule/begin-tabular/sub-cell.d.ts +1 -0
  45. package/lib/markdown/md-block-rule/begin-tabular/sub-cell.js +11 -23
  46. package/lib/markdown/md-block-rule/begin-tabular/sub-cell.js.map +1 -1
  47. package/lib/markdown/md-block-rule/begin-tabular/sub-code.d.ts +0 -6
  48. package/lib/markdown/md-block-rule/begin-tabular/sub-code.js +10 -21
  49. package/lib/markdown/md-block-rule/begin-tabular/sub-code.js.map +1 -1
  50. package/lib/markdown/md-block-rule/begin-tabular/sub-math.d.ts +13 -5
  51. package/lib/markdown/md-block-rule/begin-tabular/sub-math.js +132 -93
  52. package/lib/markdown/md-block-rule/begin-tabular/sub-math.js.map +1 -1
  53. package/lib/markdown/md-block-rule/begin-tabular/sub-tabular.d.ts +3 -1
  54. package/lib/markdown/md-block-rule/begin-tabular/sub-tabular.js +44 -36
  55. package/lib/markdown/md-block-rule/begin-tabular/sub-tabular.js.map +1 -1
  56. package/lib/markdown/md-block-rule/begin-tabular/tabular-td.d.ts +11 -3
  57. package/lib/markdown/md-block-rule/begin-tabular/tabular-td.js +207 -57
  58. package/lib/markdown/md-block-rule/begin-tabular/tabular-td.js.map +1 -1
  59. package/lib/markdown/md-block-rule/mmd-html-block.js +11 -2
  60. package/lib/markdown/md-block-rule/mmd-html-block.js.map +1 -1
  61. package/lib/markdown/md-core-rules/set-positions.js +90 -15
  62. package/lib/markdown/md-core-rules/set-positions.js.map +1 -1
  63. package/lib/markdown/md-inline-rule/core-inline.js +41 -9
  64. package/lib/markdown/md-inline-rule/core-inline.js.map +1 -1
  65. package/lib/markdown/md-inline-rule/tabular.js +5 -2
  66. package/lib/markdown/md-inline-rule/tabular.js.map +1 -1
  67. package/lib/markdown/md-latex-footnotes/block-rule.js +72 -3
  68. package/lib/markdown/md-latex-footnotes/block-rule.js.map +1 -1
  69. package/lib/markdown/md-latex-lists-env/re-level.js +39 -22
  70. package/lib/markdown/md-latex-lists-env/re-level.js.map +1 -1
  71. package/lib/markdown/md-renderer-rules/render-tabular.js +115 -36
  72. package/lib/markdown/md-renderer-rules/render-tabular.js.map +1 -1
  73. package/lib/markdown/md-svg-to-base64/base64.js +8 -8
  74. package/lib/markdown/md-svg-to-base64/base64.js.map +1 -1
  75. package/lib/markdown/md-theorem/block-rule.js +10 -6
  76. package/lib/markdown/md-theorem/block-rule.js.map +1 -1
  77. package/lib/markdown/mdPluginRaw.js +24 -3
  78. package/lib/markdown/mdPluginRaw.js.map +1 -1
  79. package/lib/markdown/mdPluginTOC.js +30 -4
  80. package/lib/markdown/mdPluginTOC.js.map +1 -1
  81. package/lib/markdown/mdPluginTableTabular.js +46 -1
  82. package/lib/markdown/mdPluginTableTabular.js.map +1 -1
  83. package/lib/markdown/utils.js +3 -0
  84. package/lib/markdown/utils.js.map +1 -1
  85. package/lib/mathjax/index.js +3 -3
  86. package/lib/mathjax/index.js.map +1 -1
  87. package/lib/mathpix-markdown-model/index.d.ts +4 -0
  88. package/lib/mathpix-markdown-model/index.js +2 -1
  89. package/lib/mathpix-markdown-model/index.js.map +1 -1
  90. package/package.json +1 -1
  91. package/pr-specs/2026-04-global-state-cleanup-and-perf.md +212 -0
  92. package/pr-specs/2026-04-optimize-tabular-parsing.md +211 -0
  93. package/pr-specs/2026-05-footnote-perf-and-parser-invariants.md +246 -0
  94. package/pr-specs/2026-05-tabular-vertical-align-bracket.md +270 -0
  95. package/lib/markdown/mdPluginSeparateForBlock.d.ts +0 -2
  96. package/lib/markdown/mdPluginSeparateForBlock.js +0 -209
  97. package/lib/markdown/mdPluginSeparateForBlock.js.map +0 -1
@@ -40,10 +40,11 @@ var getCurrentMC = function (cells, i) {
40
40
  return res;
41
41
  };
42
42
  exports.getCurrentMC = getCurrentMC;
43
- var getMultiColumnMultiRow = function (str, params, forLatex, forPptx) {
44
- var _a, _b, _c, _d, _e;
43
+ var getMultiColumnMultiRow = function (str, params, forLatex, forPptx, skipVisual) {
44
+ var _a, _b, _c, _d, _e, _f;
45
45
  if (forLatex === void 0) { forLatex = false; }
46
46
  if (forPptx === void 0) { forPptx = false; }
47
+ if (skipVisual === void 0) { skipVisual = false; }
47
48
  var attrs = [];
48
49
  var mr = 0;
49
50
  var mc = 0;
@@ -69,6 +70,9 @@ var getMultiColumnMultiRow = function (str, params, forLatex, forPptx) {
69
70
  }
70
71
  }
71
72
  vpos = vpos ? vpos.trim() : '';
73
+ // Explicit \multirow[…] wins over row-level bracketDefault. Legacy: undefined → '' (no CSS).
74
+ var effectiveBracket = (_f = (0, common_1.parseTabularPos)(vpos)) !== null && _f !== void 0 ? _f : params.bracketDefault;
75
+ var cellV = effectiveBracket ? (0, common_1.bracketToVAlign)(effectiveBracket) : '';
72
76
  if (matchMC) {
73
77
  mc = Number(matchMC[1]);
74
78
  var align = matchMC[2];
@@ -76,10 +80,12 @@ var getMultiColumnMultiRow = function (str, params, forLatex, forPptx) {
76
80
  var cAlign = (0, common_1.getColumnAlign)(align);
77
81
  var cLeft = cLines && cLines[0] ? cLines[0] : '';
78
82
  var cRight = cLines && cLines[1] ? cLines[1] : '';
79
- attrs.push((0, tabular_td_1.setColumnLines)({
80
- h: cAlign ? cAlign[0] : '',
81
- v: vpos === 't' ? 'top' : vpos === 'b' ? 'bottom' : '',
82
- }, { left: cLeft, right: cRight }));
83
+ if (!skipVisual) {
84
+ attrs.push((0, tabular_td_1.setColumnLines)({
85
+ h: cAlign ? cAlign[0] : '',
86
+ v: cellV,
87
+ }, { left: cLeft, right: cRight }));
88
+ }
83
89
  if (!forPptx || mc > 1) {
84
90
  attrs.push(['colspan', mc.toString()]);
85
91
  }
@@ -87,10 +93,10 @@ var getMultiColumnMultiRow = function (str, params, forLatex, forPptx) {
87
93
  if (matchMR) {
88
94
  mr = Number(nrows);
89
95
  var w = width || '';
90
- if (!matchMC) {
96
+ if (!matchMC && !skipVisual) {
91
97
  attrs.push((0, tabular_td_1.setColumnLines)({
92
98
  h: params.align ? params.align : '',
93
- v: vpos === 't' ? 'top' : vpos === 'b' ? 'bottom' : '',
99
+ v: cellV,
94
100
  }, { left: params.lLines, right: params.rLines }));
95
101
  }
96
102
  if (mr > 0) {
@@ -99,7 +105,7 @@ var getMultiColumnMultiRow = function (str, params, forLatex, forPptx) {
99
105
  }
100
106
  }
101
107
  w = w.trim().replace('*', 'auto');
102
- if (w && w.length > 0) {
108
+ if (w && w.length > 0 && !skipVisual) {
103
109
  attrs = (0, tabular_td_1.addStyle)(attrs, "width: ".concat(w, "; "));
104
110
  }
105
111
  str = str.slice(0, matchMR.index) + str.slice(matchMR.index + matchMR[0].length);
@@ -1 +1 @@
1
- {"version":3,"file":"multi-column-row.js","sourceRoot":"","sources":["../../../../src/markdown/md-block-rule/begin-tabular/multi-column-row.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"multi-column-row.js","sourceRoot":"","sources":["../../../../src/markdown/md-block-rule/begin-tabular/multi-column-row.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { TTokenTabular } from "./index";
2
+ import { TVerticalPos } from './common';
2
3
  /**
3
4
  * Splits a tabular row into columns by unescaped '&' characters.
4
5
  * Escaped '\&' is treated as a literal '&' and does not split columns.
5
6
  */
6
7
  export declare const separateByColumns: (str: string) => string[];
7
- export declare const ParseTabular: (str: string, i: number, align?: string, options?: {}, isSubTabular?: boolean) => Array<TTokenTabular> | null;
8
+ export declare const ParseTabular: (str: string, i: number, align?: string, options?: {}, isSubTabular?: boolean, bracket?: TVerticalPos) => Array<TTokenTabular> | null;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ParseTabular = exports.separateByColumns = void 0;
4
+ var tslib_1 = require("tslib");
4
5
  var tabular_td_1 = require("./tabular-td");
5
6
  var common_1 = require("./common");
6
7
  var sub_math_1 = require("./sub-math");
@@ -8,6 +9,15 @@ var sub_tabular_1 = require("./sub-tabular");
8
9
  var multi_column_row_1 = require("./multi-column-row");
9
10
  var sub_cell_1 = require("./sub-cell");
10
11
  var utils_1 = require("../../utils");
12
+ var consts_1 = require("../../common/consts");
13
+ // Column spec letters that carry explicit vertical alignment.
14
+ var EXPLICIT_V_COL_SPEC = 'mpb';
15
+ // Frozen: shared by all td_open in a tabular — extend via spread, not in-place.
16
+ var TD_META_BY_BRACKET = {
17
+ t: Object.freeze({ parentBracket: 't' }),
18
+ c: Object.freeze({ parentBracket: 'c' }),
19
+ b: Object.freeze({ parentBracket: 'b' }),
20
+ };
11
21
  /**
12
22
  * Splits a tabular row into columns by unescaped '&' characters.
13
23
  * Escaped '\&' is treated as a literal '&' and does not split columns.
@@ -68,14 +78,11 @@ var markColIfHasList = function (colsToFixWidth, colIndex, content) {
68
78
  if (!(0, common_1.detectLocalBlock)(content)) {
69
79
  return;
70
80
  }
71
- if (!colsToFixWidth.includes(colIndex)) {
72
- colsToFixWidth.push(colIndex);
73
- }
81
+ colsToFixWidth.add(colIndex);
74
82
  };
75
- var setTokensTabular = function (str, align, options, isSubTabular) {
76
- if (align === void 0) { align = ''; }
77
- if (options === void 0) { options = {}; }
78
- if (isSubTabular === void 0) { isSubTabular = false; }
83
+ var setTokensTabular = function (str, _a) {
84
+ var _b, _c, _d;
85
+ var _e = _a === void 0 ? {} : _a, _f = _e.align, align = _f === void 0 ? '' : _f, _g = _e.options, options = _g === void 0 ? {} : _g, _h = _e.isSubTabular, isSubTabular = _h === void 0 ? false : _h, bracket = _e.bracket;
79
86
  var res = [];
80
87
  var rows = getRows(str);
81
88
  var cellsAll = (0, common_1.getCellsAll)(rows);
@@ -83,14 +90,22 @@ var setTokensTabular = function (str, align, options, isSubTabular) {
83
90
  var data = (0, common_1.getRowLines)(rows, numCol);
84
91
  var CellsHLines = data.cLines;
85
92
  var CellsHLSpaces = data.cSpaces;
86
- var colsToFixWidth = [];
87
- var dataAlign = (0, common_1.getVerticallyColumnAlign)(align, numCol);
93
+ var colsToFixWidth = new Set();
94
+ var optionBracket = (0, common_1.normalizeDefaultCellVerticalAlign)(options === null || options === void 0 ? void 0 : options.defaultCellVerticalAlign);
95
+ // For HTML rendering: source bracket OR option (incl. 'c').
96
+ var effectiveBracket = bracket !== null && bracket !== void 0 ? bracket : optionBracket;
97
+ var dataAlign = (0, common_1.getVerticallyColumnAlign)(align, numCol, effectiveBracket);
88
98
  var cLines = (0, common_1.getColumnLines)(align, numCol);
89
99
  var cAlign = dataAlign.cAlign, vAlign = dataAlign.vAlign, cWidth = dataAlign.cWidth, colSpec = dataAlign.colSpec;
90
100
  var decimal = (0, common_1.getDecimal)(cAlign, cellsAll);
91
- var _a = options.forLatex, forLatex = _a === void 0 ? false : _a, _b = options.outMath, outMath = _b === void 0 ? {} : _b;
101
+ var _j = options.forLatex, forLatex = _j === void 0 ? false : _j, _k = options.outMath, outMath = _k === void 0 ? {} : _k;
102
+ var skipVisual = !!(options === null || options === void 0 ? void 0 : options.forMD) || !!forLatex;
103
+ // Option fallback only at top level — nested keeps source bracket (round-trip).
104
+ var latexBracket = bracket !== null && bracket !== void 0 ? bracket : (isSubTabular ? undefined : (optionBracket === 'c' ? undefined : optionBracket));
105
+ // Parent bracket attached to every td_open under forLatex.
106
+ var tdMeta = forLatex && latexBracket ? TD_META_BY_BRACKET[latexBracket] : undefined;
92
107
  res.push({ token: 'table_open', type: 'table_open', tag: 'table', n: 1,
93
- attrs: [['class', 'tabular']],
108
+ attrs: (0, tabular_td_1.getSharedTableOpenAttrs)(undefined, skipVisual),
94
109
  latex: forLatex
95
110
  ? align
96
111
  : outMath.include_table_markdown
@@ -99,17 +114,18 @@ var setTokensTabular = function (str, align, options, isSubTabular) {
99
114
  });
100
115
  var tableOpen = res[0];
101
116
  if (options === null || options === void 0 ? void 0 : options.forPptx) {
102
- res.push({ token: 'tbody_open', type: 'tbody_open', tag: 'tbody', n: 1, attrs: [['data_num_col', numCol.toString()]] });
117
+ res.push({ token: 'tbody_open', type: 'tbody_open', tag: 'tbody', n: 1, attrs: (0, tabular_td_1.getSharedTbodyOpenAttrs)(numCol) });
103
118
  }
104
119
  else {
105
120
  res.push({ token: 'tbody_open', type: 'tbody_open', tag: 'tbody', n: 1 });
106
121
  }
107
122
  var MR = new Array(numCol).fill(0);
108
123
  var _loop_1 = function (i) {
124
+ var e_1, _l;
109
125
  if (!cellsAll[i] || cellsAll[i].length === 0) {
110
126
  if (i < cellsAll.length - 1) {
111
127
  res.push({ token: 'tr_open', type: 'tr_open', tag: 'tr', n: 1,
112
- attrs: [['style', 'border-top: none !important; border-bottom: none !important;']],
128
+ attrs: (0, tabular_td_1.getSharedTrOpenAttrs)(skipVisual),
113
129
  latex: forLatex && data && data.sLines && data.sLines.length > i ? data.sLines[i] : ''
114
130
  });
115
131
  for (var k = 0; k < numCol; k++) {
@@ -120,20 +136,33 @@ var setTokensTabular = function (str, align, options, isSubTabular) {
120
136
  var cRight = k === numCol - 1 ? cLines[cLines.length - 1] : cLines[k + 1];
121
137
  var cLeft = k === 0 ? cLines[0] : '';
122
138
  var data_1 = (0, tabular_td_1.AddTd)('', { h: cAlign[k], v: vAlign[k], w: cWidth[k] }, { left: cLeft, right: cRight, bottom: CellsHLines[i + 1] ? CellsHLines[i + 1][k] : 'none',
123
- top: i === 0 ? CellsHLines[i] ? CellsHLines[i][k] : 'none' : '' }, CellsHLSpaces[i + 1][k]);
139
+ top: i === 0 ? CellsHLines[i] ? CellsHLines[i][k] : 'none' : '' }, CellsHLSpaces[i + 1][k], null, skipVisual, tdMeta);
124
140
  markColIfHasList(colsToFixWidth, k, data_1.content);
125
- res = res.concat(data_1.res);
141
+ try {
142
+ for (var _m = (e_1 = void 0, tslib_1.__values(data_1.res)), _o = _m.next(); !_o.done; _o = _m.next()) {
143
+ var t = _o.value;
144
+ res.push(t);
145
+ }
146
+ }
147
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
148
+ finally {
149
+ try {
150
+ if (_o && !_o.done && (_l = _m.return)) _l.call(_m);
151
+ }
152
+ finally { if (e_1) throw e_1.error; }
153
+ }
126
154
  }
127
- res.push({ token: 'tr_close', type: 'tr_close', tag: 'tr', n: -1 });
155
+ res.push(tabular_td_1.SHARED_TR_CLOSE);
128
156
  }
129
157
  return "continue";
130
158
  }
131
159
  res.push({ token: 'tr_open', type: 'tr_open', tag: 'tr', n: 1,
132
- attrs: [['style', 'border-top: none !important; border-bottom: none !important;']],
160
+ attrs: (0, tabular_td_1.getSharedTrOpenAttrs)(skipVisual),
133
161
  latex: forLatex && data && data.sLines && data.sLines.length > i ? data.sLines[i] : ''
134
162
  });
135
163
  var cells = (0, exports.separateByColumns)(cellsAll[i]);
136
164
  var _loop_2 = function (j) {
165
+ var e_2, _p, e_3, _q, e_4, _r, e_5, _s, e_6, _t;
137
166
  var ic = (0, multi_column_row_1.getCurrentMC)(cells, j);
138
167
  if (ic >= numCol) {
139
168
  return "break";
@@ -147,16 +176,29 @@ var setTokensTabular = function (str, align, options, isSubTabular) {
147
176
  var cRight_1 = k === numCol - 1 ? cLines[cLines.length - 1] : cLines[k + 1];
148
177
  var cLeft_1 = k === 0 ? cLines[0] : '';
149
178
  var data_2 = (0, tabular_td_1.AddTd)('', { h: cAlign[k], v: vAlign[k], w: cWidth[k] }, { left: cLeft_1, right: cRight_1, bottom: CellsHLines[i + 1] ? CellsHLines[i + 1][k] : 'none',
150
- top: i === 0 ? CellsHLines[i] ? CellsHLines[i][k] : 'none' : '' }, CellsHLSpaces[i + 1][k]);
179
+ top: i === 0 ? CellsHLines[i] ? CellsHLines[i][k] : 'none' : '' }, CellsHLSpaces[i + 1][k], null, skipVisual, tdMeta);
151
180
  markColIfHasList(colsToFixWidth, k, data_2.content);
152
- res = res.concat(data_2.res);
181
+ try {
182
+ for (var _u = (e_2 = void 0, tslib_1.__values(data_2.res)), _v = _u.next(); !_v.done; _v = _u.next()) {
183
+ var t = _v.value;
184
+ res.push(t);
185
+ }
186
+ }
187
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
188
+ finally {
189
+ try {
190
+ if (_v && !_v.done && (_p = _u.return)) _p.call(_u);
191
+ }
192
+ finally { if (e_2) throw e_2.error; }
193
+ }
153
194
  }
154
195
  return "break";
155
196
  }
156
197
  var cRight = ic === numCol - 1 ? cLines[cLines.length - 1] : cLines[ic + 1];
157
198
  var cLeft = ic === 0 ? cLines[0] : '';
158
199
  if (cells[j] && cells[j].trim().length > 0) {
159
- var multi = (0, multi_column_row_1.getMultiColumnMultiRow)(cells[j], { lLines: cLines[ic], align: cAlign[ic], rLines: cRight }, forLatex, options === null || options === void 0 ? void 0 : options.forPptx);
200
+ // Multicol inherits only non-default brackets (option 'middle' stays no-op).
201
+ var multi = (0, multi_column_row_1.getMultiColumnMultiRow)(cells[j], { lLines: cLines[ic], align: cAlign[ic], rLines: cRight, bracketDefault: latexBracket }, forLatex, options === null || options === void 0 ? void 0 : options.forPptx, skipVisual);
160
202
  if (multi) {
161
203
  var mr = multi.mr > rows.length ? rows.length : multi.mr;
162
204
  var mc = multi.mc > numCol ? numCol : multi.mc;
@@ -203,7 +245,7 @@ var setTokensTabular = function (str, align, options, isSubTabular) {
203
245
  else {
204
246
  MR[ic] = mr;
205
247
  }
206
- if (mr + i >= rows.length - 1) {
248
+ if (mr + i >= rows.length - 1 && !skipVisual) {
207
249
  multi.attrs = (0, tabular_td_1.addHLineIntoStyle)(multi.attrs, CellsHLines[mr + i] ? CellsHLines[mr + i][ic] : 'none');
208
250
  }
209
251
  }
@@ -226,14 +268,16 @@ var setTokensTabular = function (str, align, options, isSubTabular) {
226
268
  return "continue";
227
269
  }
228
270
  }
229
- if (i === 0) {
230
- multi.attrs = (0, tabular_td_1.addHLineIntoStyle)(multi.attrs, CellsHLines[i] ? CellsHLines[i][ic] : 'none', 'top');
231
- }
232
- if (mr && mr > 0) {
233
- multi.attrs = (0, tabular_td_1.addHLineIntoStyle)(multi.attrs, CellsHLines[mr + i] ? CellsHLines[mr + i][ic] : 'none');
234
- }
235
- else {
236
- multi.attrs = (0, tabular_td_1.addHLineIntoStyle)(multi.attrs, CellsHLines[i + 1] ? CellsHLines[i + 1][ic] : 'none');
271
+ if (!skipVisual) {
272
+ if (i === 0) {
273
+ multi.attrs = (0, tabular_td_1.addHLineIntoStyle)(multi.attrs, CellsHLines[i] ? CellsHLines[i][ic] : 'none', 'top');
274
+ }
275
+ if (mr && mr > 0) {
276
+ multi.attrs = (0, tabular_td_1.addHLineIntoStyle)(multi.attrs, CellsHLines[mr + i] ? CellsHLines[mr + i][ic] : 'none');
277
+ }
278
+ else {
279
+ multi.attrs = (0, tabular_td_1.addHLineIntoStyle)(multi.attrs, CellsHLines[i + 1] ? CellsHLines[i + 1][ic] : 'none');
280
+ }
237
281
  }
238
282
  var tdOpen = {
239
283
  token: 'td_open',
@@ -245,31 +289,33 @@ var setTokensTabular = function (str, align, options, isSubTabular) {
245
289
  };
246
290
  res.push(tdOpen);
247
291
  if (forLatex) {
248
- tdOpen.meta = {
249
- multi: multi.multi,
250
- colCount: numCol,
251
- colSpecs: colSpec,
252
- currentColIndex: ic,
253
- isSubTabular: isSubTabular
254
- };
292
+ tdOpen.meta = tslib_1.__assign(tslib_1.__assign({}, tdMeta), { multi: multi.multi, colCount: numCol, colSpecs: colSpec, currentColIndex: ic, isSubTabular: isSubTabular });
255
293
  }
256
294
  if (multi.subTable) {
257
295
  if (multi.subTable.some(function (item) { return (0, common_1.detectLocalBlock)(item.content); })) {
258
- if (!colsToFixWidth.includes(ic)) {
259
- colsToFixWidth.push(ic);
260
- }
296
+ colsToFixWidth.add(ic);
261
297
  if (forLatex) {
262
298
  tdOpen.meta.forceMultiFixedWidth = true;
263
299
  }
264
300
  }
265
- res = res.concat(multi.subTable);
301
+ try {
302
+ for (var _w = (e_3 = void 0, tslib_1.__values(multi.subTable)), _x = _w.next(); !_x.done; _x = _w.next()) {
303
+ var t = _x.value;
304
+ res.push(t);
305
+ }
306
+ }
307
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
308
+ finally {
309
+ try {
310
+ if (_x && !_x.done && (_q = _w.return)) _q.call(_w);
311
+ }
312
+ finally { if (e_3) throw e_3.error; }
313
+ }
266
314
  }
267
315
  else {
268
316
  if (multi.content) {
269
317
  if ((0, common_1.detectLocalBlock)(multi.content)) {
270
- if (!colsToFixWidth.includes(ic)) {
271
- colsToFixWidth.push(ic);
272
- }
318
+ colsToFixWidth.add(ic);
273
319
  if (forLatex) {
274
320
  tdOpen.meta.forceMultiFixedWidth = true;
275
321
  }
@@ -277,7 +323,7 @@ var setTokensTabular = function (str, align, options, isSubTabular) {
277
323
  res.push({ token: 'inline', type: 'inline', tag: '', n: 0, content: multi.content });
278
324
  }
279
325
  }
280
- res.push({ token: 'td_close', type: 'td_close', tag: 'td', n: -1 });
326
+ res.push(tabular_td_1.SHARED_TD_CLOSE);
281
327
  return "continue";
282
328
  }
283
329
  MR[ic] = MR[ic] > 0 ? MR[ic] - 1 : 0;
@@ -290,28 +336,65 @@ var setTokensTabular = function (str, align, options, isSubTabular) {
290
336
  }
291
337
  var parseMath = (0, sub_math_1.getMathTableContent)(cells[j], 0);
292
338
  var content = parseMath || (0, common_1.getContent)(cells[j]);
293
- var handleSubTable = function (subTable) {
294
- if (!colsToFixWidth.includes(ic)) {
295
- if (subTable.some(function (item) { return (0, common_1.detectLocalBlock)(item.content); })) {
296
- colsToFixWidth.push(ic);
297
- }
339
+ var handleSubTable = function (subTable, vOverride) {
340
+ if (!colsToFixWidth.has(ic)
341
+ && subTable.some(function (item) { return (0, common_1.detectLocalBlock)(item.content); })) {
342
+ colsToFixWidth.add(ic);
298
343
  }
299
- return (0, tabular_td_1.AddTdSubTable)(subTable, { h: cAlign[ic], v: vAlign[ic], w: cWidth[ic] }, {
344
+ return (0, tabular_td_1.AddTdSubTable)(subTable, { h: cAlign[ic], v: vOverride, w: cWidth[ic] }, {
300
345
  left: cLeft,
301
346
  right: cRight,
302
347
  bottom: CellsHLines[i + 1] ? CellsHLines[i + 1][ic] : 'none',
303
348
  top: i === 0 ? (CellsHLines[i] ? CellsHLines[i][ic] : 'none') : ''
304
- });
349
+ }, skipVisual, tdMeta);
305
350
  };
306
351
  var parseSub = (0, sub_tabular_1.getSubTabular)(content, 0, true, forLatex);
307
352
  if (parseSub && parseSub.length > 0) {
308
- res = res.concat(handleSubTable(parseSub));
353
+ var cellV = vAlign[ic];
354
+ // Diagbox always centers, ignoring outer bracket.
355
+ // getSubTabular returns a single wrapper; hasDiagbox is OR'd across all placeholders.
356
+ if ((_b = parseSub[0]) === null || _b === void 0 ? void 0 : _b.hasDiagbox) {
357
+ cellV = 'middle';
358
+ // colSpec may be 'p{2cm}'.
359
+ }
360
+ else if (!EXPLICIT_V_COL_SPEC.includes(((_c = colSpec[ic]) === null || _c === void 0 ? void 0 : _c[0]) || '')) {
361
+ // First nested tabular wins if a cell contains several.
362
+ var placeholder = (_d = content.match(consts_1.doubleAngleBracketUuidPattern)) === null || _d === void 0 ? void 0 : _d[0];
363
+ var cellBracket = placeholder ? (0, sub_tabular_1.getSubTabularBracket)(placeholder) : undefined;
364
+ if (cellBracket)
365
+ cellV = (0, common_1.bracketToVAlign)(cellBracket);
366
+ }
367
+ try {
368
+ for (var _y = (e_4 = void 0, tslib_1.__values(handleSubTable(parseSub, cellV))), _z = _y.next(); !_z.done; _z = _y.next()) {
369
+ var t = _z.value;
370
+ res.push(t);
371
+ }
372
+ }
373
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
374
+ finally {
375
+ try {
376
+ if (_z && !_z.done && (_r = _y.return)) _r.call(_y);
377
+ }
378
+ finally { if (e_4) throw e_4.error; }
379
+ }
309
380
  return "continue";
310
381
  }
311
382
  var data_3 = (0, tabular_td_1.AddTd)(content, { h: cAlign[ic], v: vAlign[ic], w: cWidth[ic] }, { left: cLeft, right: cRight, bottom: CellsHLines[i + 1] ? CellsHLines[i + 1][ic] : 'none',
312
- top: i === 0 ? CellsHLines[i] ? CellsHLines[i][ic] : 'none' : '' }, CellsHLSpaces[i + 1][ic], decimal[ic]);
383
+ top: i === 0 ? CellsHLines[i] ? CellsHLines[i][ic] : 'none' : '' }, CellsHLSpaces[i + 1][ic], decimal[ic], skipVisual, tdMeta);
313
384
  markColIfHasList(colsToFixWidth, ic, data_3.content);
314
- res = res.concat(data_3.res);
385
+ try {
386
+ for (var _0 = (e_5 = void 0, tslib_1.__values(data_3.res)), _1 = _0.next(); !_1.done; _1 = _0.next()) {
387
+ var t = _1.value;
388
+ res.push(t);
389
+ }
390
+ }
391
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
392
+ finally {
393
+ try {
394
+ if (_1 && !_1.done && (_s = _0.return)) _s.call(_0);
395
+ }
396
+ finally { if (e_5) throw e_5.error; }
397
+ }
315
398
  }
316
399
  else {
317
400
  MR[ic] = MR[ic] > 0 ? MR[ic] - 1 : 0;
@@ -322,9 +405,21 @@ var setTokensTabular = function (str, align, options, isSubTabular) {
322
405
  return "continue";
323
406
  }
324
407
  var data_4 = (0, tabular_td_1.AddTd)('', { h: cAlign[ic], v: vAlign[ic], w: cWidth[ic] }, { left: cLeft, right: cRight, bottom: CellsHLines[i + 1] ? CellsHLines[i + 1][ic] : 'none',
325
- top: i === 0 ? CellsHLines[i] ? CellsHLines[i][ic] : 'none' : '' }, CellsHLSpaces[i + 1][ic]);
408
+ top: i === 0 ? CellsHLines[i] ? CellsHLines[i][ic] : 'none' : '' }, CellsHLSpaces[i + 1][ic], null, skipVisual, tdMeta);
326
409
  markColIfHasList(colsToFixWidth, ic, data_4.content);
327
- res = res.concat(data_4.res);
410
+ try {
411
+ for (var _2 = (e_6 = void 0, tslib_1.__values(data_4.res)), _3 = _2.next(); !_3.done; _3 = _2.next()) {
412
+ var t = _3.value;
413
+ res.push(t);
414
+ }
415
+ }
416
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
417
+ finally {
418
+ try {
419
+ if (_3 && !_3.done && (_t = _2.return)) _t.call(_2);
420
+ }
421
+ finally { if (e_6) throw e_6.error; }
422
+ }
328
423
  }
329
424
  };
330
425
  for (var j = 0; j < numCol; j++) {
@@ -332,30 +427,39 @@ var setTokensTabular = function (str, align, options, isSubTabular) {
332
427
  if (state_1 === "break")
333
428
  break;
334
429
  }
335
- res.push({ token: 'tr_close', type: 'tr_close', tag: 'tr', n: -1 });
430
+ res.push(tabular_td_1.SHARED_TR_CLOSE);
336
431
  };
337
432
  for (var i = 0; i < rows.length; i++) {
338
433
  _loop_1(i);
339
434
  }
340
- res.push({ token: 'tbody_close', type: 'tbody_close', tag: 'tbody', n: -1,
341
- latex: forLatex && data && data.sLines && data.sLines.length ? data.sLines[data.sLines.length - 1] : ''
342
- });
343
- res.push({ token: 'table_close', type: 'table_close', tag: 'table', n: -1 });
344
435
  if (forLatex) {
436
+ res.push({ token: 'tbody_close', type: 'tbody_close', tag: 'tbody', n: -1,
437
+ latex: data && data.sLines && data.sLines.length ? data.sLines[data.sLines.length - 1] : ''
438
+ });
439
+ }
440
+ else {
441
+ res.push(tabular_td_1.SHARED_TBODY_CLOSE);
442
+ }
443
+ res.push(tabular_td_1.SHARED_TABLE_CLOSE);
444
+ if (forLatex) {
445
+ var colsToFixWidthArr = Array.from(colsToFixWidth);
345
446
  tableOpen.meta = {
346
- colsToFixWidth: colsToFixWidth,
447
+ colsToFixWidth: colsToFixWidthArr,
347
448
  colSpecs: colSpec,
348
449
  colCount: numCol,
349
450
  isSubTabular: isSubTabular,
350
451
  vLineSpec: cLines
351
452
  };
352
- if (colsToFixWidth === null || colsToFixWidth === void 0 ? void 0 : colsToFixWidth.length) {
353
- tableOpen.meta.shouldRewriteColSpec = (0, common_1.shouldRewriteColSpec)(colsToFixWidth, colSpec);
453
+ if (latexBracket) {
454
+ tableOpen.meta.bracket = latexBracket;
455
+ }
456
+ if (colsToFixWidthArr.length) {
457
+ tableOpen.meta.shouldRewriteColSpec = (0, common_1.shouldRewriteColSpec)(colsToFixWidthArr, colSpec);
354
458
  }
355
459
  }
356
460
  return res;
357
461
  };
358
- var ParseTabular = function (str, i, align, options, isSubTabular) {
462
+ var ParseTabular = function (str, i, align, options, isSubTabular, bracket) {
359
463
  if (align === void 0) { align = ''; }
360
464
  if (options === void 0) { options = {}; }
361
465
  if (isSubTabular === void 0) { isSubTabular = false; }
@@ -367,27 +471,27 @@ var ParseTabular = function (str, i, align, options, isSubTabular) {
367
471
  var params = (0, common_1.getParams)(str, posBegin + '\\begin{tabular}'.length);
368
472
  if (params) {
369
473
  var subT = str.slice(posBegin, posEnd + '\\end{tabular}'.length);
370
- str = (0, sub_tabular_1.pushSubTabular)(str, subT, [], posBegin, posEnd, i);
371
- res = (0, exports.ParseTabular)(str, 0, align, options, isSubTabular);
474
+ str = (0, sub_tabular_1.pushSubTabular)(str, subT, [], posBegin, posEnd, i, 0, params.bracket);
475
+ res = (0, exports.ParseTabular)(str, 0, align, options, isSubTabular, bracket);
372
476
  }
373
477
  else {
374
478
  var match = str
375
479
  .slice(posBegin)
376
- .match(/(?:\\begin{tabular}\s{0,}\{([^}]*)\})/);
480
+ .match(consts_1.BEGIN_TABULAR_BRACKET_RE);
377
481
  var subT = str.slice(posBegin, posEnd + '\\end{tabular}'.length);
378
- str = (0, sub_tabular_1.pushSubTabular)(str, subT, [], posBegin + match.index, posEnd, i);
379
- res = (0, exports.ParseTabular)(str, 0, align, options, isSubTabular);
482
+ str = (0, sub_tabular_1.pushSubTabular)(str, subT, [], posBegin + match.index, posEnd, i, 0, (0, common_1.parseTabularPos)(match === null || match === void 0 ? void 0 : match[1]));
483
+ res = (0, exports.ParseTabular)(str, 0, align, options, isSubTabular, bracket);
380
484
  }
381
485
  }
382
486
  else {
383
487
  var subT = str.slice(i, posEnd);
384
- var subRes = setTokensTabular(subT, align, options);
488
+ var subRes = setTokensTabular(subT, { align: align, options: options, isSubTabular: false, bracket: bracket });
385
489
  str = (0, sub_tabular_1.pushSubTabular)(str, subT, subRes, 0, posEnd);
386
- res = (0, exports.ParseTabular)(str, 0, align, options, isSubTabular);
490
+ res = (0, exports.ParseTabular)(str, 0, align, options, isSubTabular, bracket);
387
491
  }
388
492
  }
389
493
  else {
390
- res = setTokensTabular(str, align, options, isSubTabular);
494
+ res = setTokensTabular(str, { align: align, options: options, isSubTabular: isSubTabular, bracket: bracket });
391
495
  }
392
496
  return res;
393
497
  };