wikiparser-node 1.8.0-b → 1.8.0

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 (169) hide show
  1. package/config/.schema.json +181 -0
  2. package/config/enwiki.json +814 -1
  3. package/config/llwiki.json +35 -1
  4. package/config/moegirl.json +44 -1
  5. package/config/zhwiki.json +466 -1
  6. package/dist/addon/table.js +485 -0
  7. package/dist/addon/token.js +237 -0
  8. package/dist/addon/transclude.js +183 -0
  9. package/dist/base.d.ts +71 -0
  10. package/dist/base.js +38 -0
  11. package/dist/index.d.ts +35 -0
  12. package/dist/index.js +211 -0
  13. package/dist/internal.d.ts +46 -0
  14. package/dist/lib/element.d.ts +140 -0
  15. package/dist/lib/element.js +597 -0
  16. package/dist/lib/node.d.ts +166 -0
  17. package/dist/lib/node.js +480 -0
  18. package/dist/lib/range.d.ts +105 -0
  19. package/dist/lib/range.js +406 -0
  20. package/dist/lib/ranges.d.ts +28 -0
  21. package/dist/lib/ranges.js +126 -0
  22. package/dist/lib/text.d.ts +63 -0
  23. package/dist/lib/text.js +355 -0
  24. package/dist/lib/title.d.ts +40 -0
  25. package/dist/lib/title.js +197 -0
  26. package/dist/mixin/attributesParent.d.ts +49 -0
  27. package/dist/mixin/attributesParent.js +81 -0
  28. package/dist/mixin/fixed.d.ts +5 -0
  29. package/dist/mixin/fixed.js +30 -0
  30. package/dist/mixin/flagsParent.d.ts +41 -0
  31. package/dist/mixin/flagsParent.js +59 -0
  32. package/dist/mixin/hidden.d.ts +4 -0
  33. package/dist/mixin/hidden.js +24 -0
  34. package/dist/mixin/magicLinkParent.d.ts +19 -0
  35. package/dist/mixin/magicLinkParent.js +42 -0
  36. package/dist/mixin/singleLine.d.ts +5 -0
  37. package/dist/mixin/singleLine.js +26 -0
  38. package/dist/mixin/sol.d.ts +5 -0
  39. package/dist/mixin/sol.js +43 -0
  40. package/dist/mixin/syntax.d.ts +8 -0
  41. package/dist/mixin/syntax.js +50 -0
  42. package/dist/parser/braces.js +130 -0
  43. package/dist/parser/commentAndExt.js +89 -0
  44. package/dist/parser/converter.js +40 -0
  45. package/dist/parser/externalLinks.js +44 -0
  46. package/dist/parser/hrAndDoubleUnderscore.js +40 -0
  47. package/dist/parser/html.js +38 -0
  48. package/dist/parser/links.js +99 -0
  49. package/dist/parser/list.js +97 -0
  50. package/dist/parser/magicLinks.js +42 -0
  51. package/dist/parser/quotes.js +67 -0
  52. package/dist/parser/redirect.js +26 -0
  53. package/dist/parser/selector.js +190 -0
  54. package/dist/parser/table.js +123 -0
  55. package/dist/src/arg.d.ts +58 -0
  56. package/dist/src/arg.js +214 -0
  57. package/dist/src/atom.d.ts +12 -0
  58. package/dist/src/atom.js +27 -0
  59. package/dist/src/attribute.d.ts +71 -0
  60. package/dist/src/attribute.js +502 -0
  61. package/dist/src/attributes.d.ts +109 -0
  62. package/dist/src/attributes.js +356 -0
  63. package/dist/src/converter.d.ts +33 -0
  64. package/dist/src/converter.js +134 -0
  65. package/dist/src/converterFlags.d.ts +87 -0
  66. package/dist/src/converterFlags.js +242 -0
  67. package/dist/src/converterRule.d.ts +77 -0
  68. package/dist/src/converterRule.js +209 -0
  69. package/dist/src/extLink.d.ts +43 -0
  70. package/dist/src/extLink.js +191 -0
  71. package/dist/src/gallery.d.ts +54 -0
  72. package/dist/src/gallery.js +139 -0
  73. package/dist/src/heading.d.ts +47 -0
  74. package/dist/src/heading.js +190 -0
  75. package/dist/src/hidden.d.ts +7 -0
  76. package/dist/src/hidden.js +23 -0
  77. package/dist/src/html.d.ts +65 -0
  78. package/dist/src/html.js +358 -0
  79. package/dist/src/imageParameter.d.ts +65 -0
  80. package/dist/src/imageParameter.js +257 -0
  81. package/dist/src/imagemap.d.ts +54 -0
  82. package/dist/src/imagemap.js +144 -0
  83. package/dist/src/imagemapLink.d.ts +31 -0
  84. package/dist/src/imagemapLink.js +93 -0
  85. package/dist/src/index.d.ts +142 -0
  86. package/dist/src/index.js +701 -0
  87. package/dist/src/link/base.d.ts +52 -0
  88. package/dist/src/link/base.js +228 -0
  89. package/dist/src/link/category.d.ts +22 -0
  90. package/dist/src/link/category.js +30 -0
  91. package/dist/src/link/file.d.ts +98 -0
  92. package/dist/src/link/file.js +272 -0
  93. package/dist/src/link/galleryImage.d.ts +32 -0
  94. package/dist/src/link/galleryImage.js +158 -0
  95. package/dist/src/link/index.d.ts +56 -0
  96. package/dist/src/link/index.js +133 -0
  97. package/dist/src/link/redirectTarget.d.ts +51 -0
  98. package/dist/src/link/redirectTarget.js +101 -0
  99. package/dist/src/magicLink.d.ts +59 -0
  100. package/dist/src/magicLink.js +220 -0
  101. package/dist/src/nested.d.ts +43 -0
  102. package/dist/src/nested.js +105 -0
  103. package/dist/src/nowiki/base.d.ts +31 -0
  104. package/dist/src/nowiki/base.js +93 -0
  105. package/dist/src/nowiki/comment.d.ts +25 -0
  106. package/dist/src/nowiki/comment.js +76 -0
  107. package/dist/src/nowiki/dd.d.ts +8 -0
  108. package/dist/src/nowiki/dd.js +24 -0
  109. package/dist/src/nowiki/doubleUnderscore.d.ts +18 -0
  110. package/dist/src/nowiki/doubleUnderscore.js +101 -0
  111. package/dist/src/nowiki/hr.d.ts +5 -0
  112. package/dist/src/nowiki/hr.js +63 -0
  113. package/dist/src/nowiki/index.d.ts +16 -0
  114. package/dist/src/nowiki/index.js +27 -0
  115. package/dist/src/nowiki/list.d.ts +16 -0
  116. package/dist/src/nowiki/list.js +109 -0
  117. package/dist/src/nowiki/listBase.d.ts +5 -0
  118. package/dist/src/nowiki/listBase.js +61 -0
  119. package/dist/src/nowiki/noinclude.d.ts +10 -0
  120. package/dist/src/nowiki/noinclude.js +23 -0
  121. package/dist/src/nowiki/quote.d.ts +19 -0
  122. package/dist/src/nowiki/quote.js +137 -0
  123. package/dist/src/onlyinclude.d.ts +16 -0
  124. package/dist/src/onlyinclude.js +57 -0
  125. package/dist/src/paramTag/index.d.ts +37 -0
  126. package/dist/src/paramTag/index.js +77 -0
  127. package/dist/src/paramTag/inputbox.d.ts +8 -0
  128. package/dist/src/paramTag/inputbox.js +22 -0
  129. package/dist/src/parameter.d.ts +70 -0
  130. package/dist/src/parameter.js +264 -0
  131. package/dist/src/pre.d.ts +31 -0
  132. package/dist/src/pre.js +59 -0
  133. package/dist/src/redirect.d.ts +34 -0
  134. package/dist/src/redirect.js +119 -0
  135. package/dist/src/syntax.d.ts +19 -0
  136. package/dist/src/syntax.js +86 -0
  137. package/dist/src/table/base.d.ts +27 -0
  138. package/dist/src/table/base.js +81 -0
  139. package/dist/src/table/index.d.ts +242 -0
  140. package/dist/src/table/index.js +498 -0
  141. package/dist/src/table/td.d.ts +86 -0
  142. package/dist/src/table/td.js +355 -0
  143. package/dist/src/table/tr.d.ts +32 -0
  144. package/dist/src/table/tr.js +58 -0
  145. package/dist/src/table/trBase.d.ts +53 -0
  146. package/dist/src/table/trBase.js +156 -0
  147. package/dist/src/tagPair/ext.d.ts +32 -0
  148. package/dist/src/tagPair/ext.js +203 -0
  149. package/dist/src/tagPair/include.d.ts +35 -0
  150. package/dist/src/tagPair/include.js +74 -0
  151. package/dist/src/tagPair/index.d.ts +27 -0
  152. package/dist/src/tagPair/index.js +128 -0
  153. package/dist/src/transclude.d.ts +166 -0
  154. package/dist/src/transclude.js +584 -0
  155. package/dist/util/constants.js +27 -0
  156. package/dist/util/debug.js +81 -0
  157. package/dist/util/diff.js +83 -0
  158. package/dist/util/lint.js +31 -0
  159. package/dist/util/string.js +60 -0
  160. package/errors/README +1 -0
  161. package/package.json +17 -29
  162. package/printed/README +1 -0
  163. package/bundle/bundle.min.js +0 -38
  164. package/extensions/dist/base.js +0 -64
  165. package/extensions/dist/editor.js +0 -159
  166. package/extensions/dist/highlight.js +0 -58
  167. package/extensions/dist/lint.js +0 -72
  168. package/extensions/editor.css +0 -64
  169. package/extensions/ui.css +0 -144
@@ -0,0 +1,485 @@
1
+ "use strict";
2
+ /* eslint @stylistic/operator-linebreak: [2, "before", {overrides: {"=": "after"}}] */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const assert = require("assert/strict");
5
+ const debug_1 = require("../util/debug");
6
+ const constants_1 = require("../util/constants");
7
+ const index_1 = require("../src/index");
8
+ const tr_1 = require("../src/table/tr");
9
+ const index_2 = require("../src/table/index");
10
+ const td_1 = require("../src/table/td");
11
+ const trBase_1 = require("../src/table/trBase");
12
+ /**
13
+ * 检查坐标形式
14
+ * @param coords 坐标
15
+ */
16
+ const isTableCoords = (coords) => coords.x === undefined;
17
+ /**
18
+ * 比较两个表格坐标
19
+ * @param coords1 坐标1
20
+ * @param coords2 坐标2
21
+ */
22
+ const cmpCoords = (coords1, coords2) => {
23
+ const diff = coords1.row - coords2.row;
24
+ return diff === 0 ? coords1.column - coords2.column : diff;
25
+ };
26
+ /**
27
+ * 是否是合并单元格的第一列
28
+ * @param rowLayout 行布局
29
+ * @param i 单元格序号
30
+ * @param oneCol 是否仅有一列
31
+ */
32
+ const isStartCol = (rowLayout, i, oneCol) => {
33
+ const coords = rowLayout[i];
34
+ return rowLayout[i - 1] !== coords && (!oneCol || rowLayout[i + 1] !== coords);
35
+ };
36
+ function occupied(layout, i, oneRow, cells) {
37
+ const rowLayout = layout[i];
38
+ if (rowLayout) {
39
+ return rowLayout.map(({ row, column }, j) => row === i && (!oneRow || cells[column]?.rowspan === 1) ? j : undefined).filter((j) => j !== undefined);
40
+ }
41
+ throw new RangeError(`表格没有第 ${i} 行!`);
42
+ }
43
+ /**
44
+ * 设置表格格式
45
+ * @param cells 单元格
46
+ * @param attr 属性
47
+ * @param multi 是否对所有单元格设置,或是仅对行首单元格设置
48
+ */
49
+ const format = (cells, attr = {}, multi) => {
50
+ for (const [token, start] of cells) {
51
+ if (multi || start) {
52
+ if (typeof attr === 'string') {
53
+ token.setSyntax(attr);
54
+ }
55
+ else {
56
+ token.setAttr(attr);
57
+ }
58
+ }
59
+ }
60
+ };
61
+ /**
62
+ * 填补缺失单元格
63
+ * @param y 行号
64
+ * @param rowToken 表格行
65
+ * @param layout 表格布局
66
+ * @param maxCol 最大列数
67
+ * @param token 待填充的单元格
68
+ */
69
+ const fill = (y, rowToken, layout, maxCol, token) => {
70
+ const rowLayout = layout[y], childNodes = [...rowToken.childNodes].reverse(), index = childNodes.findIndex(child => child instanceof td_1.TdToken && child.subtype !== 'caption'), pos = index > 0 ? childNodes.length - index : undefined;
71
+ debug_1.Shadow.run(() => {
72
+ for (let i = 0; i < maxCol; i++) {
73
+ if (!rowLayout[i]) {
74
+ rowToken.insertAt(token.cloneNode(), pos);
75
+ }
76
+ }
77
+ });
78
+ };
79
+ index_2.TableToken.prototype.printLayout =
80
+ /** @implements */
81
+ function () {
82
+ this.getLayout().print();
83
+ };
84
+ index_2.TableToken.prototype.toRenderedCoords =
85
+ /** @implements */
86
+ function ({ row, column }) {
87
+ const rowLayout = this.getLayout({ row, column })[row], x = rowLayout?.findIndex(coords => cmpCoords(coords, { row, column }) === 0);
88
+ return rowLayout && (x === -1 ? undefined : { y: row, x: x });
89
+ };
90
+ index_2.TableToken.prototype.toRawCoords =
91
+ /** @implements */
92
+ function ({ x, y }) {
93
+ const rowLayout = this.getLayout({ x, y })[y], coords = rowLayout?.[x];
94
+ if (coords) {
95
+ return { ...coords, start: coords.row === y && rowLayout[x - 1] !== coords };
96
+ }
97
+ else if (rowLayout || y > 0) {
98
+ return x === rowLayout?.length
99
+ ? { row: y, column: (rowLayout.reverse().find(({ row }) => row === y)?.column ?? -1) + 1, start: true }
100
+ : undefined;
101
+ }
102
+ return { row: 0, column: 0, start: true };
103
+ };
104
+ index_2.TableToken.prototype.getFullRow =
105
+ /** @implements */
106
+ function (y) {
107
+ const rows = this.getAllRows();
108
+ return new Map(this.getLayout({ y })[y]?.map(({ row, column }) => [rows[row].getNthCol(column), row === y]));
109
+ };
110
+ index_2.TableToken.prototype.getFullCol =
111
+ /** @implements */
112
+ function (x) {
113
+ const layout = this.getLayout(), colLayout = layout.map(row => row[x]).filter(Boolean), rows = this.getAllRows();
114
+ return new Map(colLayout.map(coords => [rows[coords.row].getNthCol(coords.column), layout[coords.row][x - 1] !== coords]));
115
+ };
116
+ index_2.TableToken.prototype.formatTableRow =
117
+ /** @implements */
118
+ function (y, attr, multiRow) {
119
+ format(this.getFullRow(y), attr, multiRow);
120
+ };
121
+ index_2.TableToken.prototype.formatTableCol =
122
+ /** @implements */
123
+ function (x, attr, multiCol) {
124
+ format(this.getFullCol(x), attr, multiCol);
125
+ };
126
+ index_2.TableToken.prototype.fillTableRow =
127
+ /** @implements */
128
+ function (y, inner, subtype, attr) {
129
+ const rowToken = this.getNthRow(y), layout = this.getLayout({ y }), maxCol = Math.max(...layout.map(({ length }) => length)), token = (0, td_1.createTd)(inner, subtype, attr, this.getAttribute('include'), this.getAttribute('config'));
130
+ fill(y, rowToken, layout, maxCol, token);
131
+ };
132
+ index_2.TableToken.prototype.fillTable =
133
+ /** @implements */
134
+ function (inner, subtype, attr) {
135
+ const rowTokens = this.getAllRows(), layout = this.getLayout(), maxCol = Math.max(...layout.map(({ length }) => length)), token = (0, td_1.createTd)(inner, subtype, attr, this.getAttribute('include'), this.getAttribute('config'));
136
+ for (let y = 0; y < rowTokens.length; y++) {
137
+ fill(y, rowTokens[y], layout, maxCol, token);
138
+ }
139
+ };
140
+ index_2.TableToken.prototype.insertTableCell =
141
+ /** @implements */
142
+ function (inner, coords, subtype, attr) {
143
+ let rawCoords;
144
+ if (coords.column === undefined) {
145
+ const { x, y } = coords;
146
+ rawCoords = this.toRawCoords(coords);
147
+ if (!rawCoords?.start) {
148
+ throw new RangeError(`指定的坐标不是单元格起始点:(${x}, ${y})`);
149
+ }
150
+ }
151
+ else {
152
+ rawCoords = coords;
153
+ }
154
+ const rowToken = this.getNthRow(rawCoords.row, true);
155
+ return rowToken === this
156
+ ? trBase_1.TrBaseToken.prototype.insertTableCell.call(this, inner, rawCoords, subtype, attr)
157
+ : rowToken.insertTableCell(inner, rawCoords, subtype, attr);
158
+ };
159
+ index_2.TableToken.prototype.prependTableRow =
160
+ /** @implements */
161
+ function () {
162
+ // @ts-expect-error abstract class
163
+ const row = debug_1.Shadow.run(() => new tr_1.TrToken('\n|-', undefined, this.getAttribute('config'))), { childNodes } = this, [, , plain] = childNodes, start = plain?.constructor === index_1.Token ? 3 : 2, tdChildren = childNodes.slice(start), index = tdChildren.findIndex(({ type }) => type !== 'td');
164
+ this.insertAt(row, index === -1 ? -1 : index + start);
165
+ debug_1.Shadow.run(() => {
166
+ for (const cell of tdChildren.slice(0, index === -1 ? undefined : index)) {
167
+ if (cell.subtype !== 'caption') {
168
+ row.insertAt(cell);
169
+ }
170
+ }
171
+ });
172
+ return row;
173
+ };
174
+ index_2.TableToken.prototype.insertTableRow =
175
+ /** @implements */
176
+ function (y, attr = {}, inner, subtype = 'td', innerAttr = {}) {
177
+ let reference = this.getNthRow(y, false, true);
178
+ // @ts-expect-error abstract class
179
+ const token = debug_1.Shadow.run(() => new tr_1.TrToken('\n|-', undefined, this.getAttribute('config')));
180
+ token.setAttr(attr);
181
+ if (reference?.type === 'table') { // `row === 0`且表格自身是有效行
182
+ reference = this.prependTableRow();
183
+ }
184
+ this.insertBefore(token, reference);
185
+ if (inner !== undefined) {
186
+ const td = token.insertTableCell(inner, { row: 0, column: 0 }, subtype, innerAttr), set = new WeakSet(), layout = this.getLayout({ y }), maxCol = Math.max(...layout.map(({ length }) => length)), rowLayout = layout[y];
187
+ debug_1.Shadow.run(() => {
188
+ for (let i = 0; i < maxCol; i++) {
189
+ const coords = rowLayout[i];
190
+ if (!coords) {
191
+ token.insertAt(td.cloneNode());
192
+ }
193
+ else if (!set.has(coords)) {
194
+ set.add(coords);
195
+ if (coords.row < y) {
196
+ this.getNthCell(coords).rowspan++;
197
+ }
198
+ }
199
+ }
200
+ });
201
+ }
202
+ return token;
203
+ };
204
+ index_2.TableToken.prototype.insertTableCol =
205
+ /** @implements */
206
+ function (x, inner, subtype, attr) {
207
+ const layout = this.getLayout(), rowLength = layout.map(({ length }) => length), minCol = Math.min(...rowLength);
208
+ if (x > minCol) {
209
+ throw new RangeError(`表格第 ${rowLength.indexOf(minCol)} 行仅有 ${minCol} 列!`);
210
+ }
211
+ const token = (0, td_1.createTd)(inner, subtype, attr, this.getAttribute('include'), this.getAttribute('config'));
212
+ for (let i = 0; i < layout.length; i++) {
213
+ const coords = layout[i][x], prevCoords = x === 0 ? true : layout[i][x - 1];
214
+ if (!prevCoords) {
215
+ continue;
216
+ }
217
+ else if (prevCoords !== coords) {
218
+ const rowToken = this.getNthRow(i);
219
+ rowToken.insertBefore(token.cloneNode(), rowToken.getNthCol(coords.column, true));
220
+ }
221
+ else if (coords.row === i) {
222
+ this.getNthCell(coords).colspan++;
223
+ }
224
+ }
225
+ };
226
+ index_2.TableToken.prototype.removeTableRow =
227
+ /** @implements */
228
+ function (y) {
229
+ const rows = this.getAllRows(), layout = this.getLayout(), rowLayout = layout[y], set = new WeakSet();
230
+ for (let x = rowLayout.length - 1; x >= 0; x--) {
231
+ const coords = rowLayout[x];
232
+ if (set.has(coords)) {
233
+ continue;
234
+ }
235
+ set.add(coords);
236
+ const token = rows[coords.row].getNthCol(coords.column);
237
+ let { rowspan } = token;
238
+ if (rowspan > 1) {
239
+ token.rowspan = --rowspan;
240
+ if (coords.row === y) {
241
+ const { colspan, subtype } = token, attr = token.getAttrs();
242
+ for (let i = y + 1; rowspan && i < rows.length; i++, rowspan--) {
243
+ const { column } = layout[i].slice(x + colspan).find(({ row }) => row === i) ?? {};
244
+ if (column !== undefined) {
245
+ rows[i].insertTableCell('', { row: 0, column }, subtype, { ...attr, rowspan });
246
+ break;
247
+ }
248
+ }
249
+ }
250
+ }
251
+ }
252
+ const row = rows[y], rowToken = row.type === 'tr' ? row : this.prependTableRow();
253
+ rowToken.remove();
254
+ return rowToken;
255
+ };
256
+ index_2.TableToken.prototype.removeTableCol =
257
+ /** @implements */
258
+ function (x) {
259
+ for (const [token, start] of this.getFullCol(x)) {
260
+ const { colspan, lastChild } = token;
261
+ if (colspan > 1) {
262
+ token.colspan = colspan - 1;
263
+ if (start) {
264
+ lastChild.replaceChildren();
265
+ }
266
+ }
267
+ else {
268
+ token.remove();
269
+ }
270
+ }
271
+ };
272
+ index_2.TableToken.prototype.mergeCells =
273
+ /** @implements */
274
+ function (xlim, ylim) {
275
+ const layout = this.getLayout(), maxCol = Math.max(...layout.map(({ length }) => length)), [xmin, xmax] = xlim.map(x => x < 0 ? x + maxCol : x).sort(), [ymin, ymax] = ylim.map(y => y < 0 ? y + layout.length : y).sort(), set = new Set(layout.slice(ymin, ymax).flatMap(rowLayout => rowLayout.slice(xmin, xmax)));
276
+ if ([...layout[ymin - 1] ?? [], ...layout[ymax] ?? []].some(coords => set.has(coords))
277
+ || layout.some(rowLayout => set.has(rowLayout[xmin - 1]) || set.has(rowLayout[xmax]))) {
278
+ throw new RangeError('待合并区域与外侧区域有重叠!');
279
+ }
280
+ const corner = layout[ymin][xmin], rows = this.getAllRows(), cornerCell = rows[corner.row].getNthCol(corner.column);
281
+ cornerCell.rowspan = ymax - ymin;
282
+ cornerCell.colspan = xmax - xmin;
283
+ set.delete(corner);
284
+ for (const token of [...set].map(({ row, column }) => rows[row].getNthCol(column))) {
285
+ token.remove();
286
+ }
287
+ return cornerCell;
288
+ };
289
+ index_2.TableToken.prototype.split =
290
+ /** @implements */
291
+ function (coords, dirs) {
292
+ const cell = this.getNthCell(coords), attr = cell.getAttrs(), { subtype } = cell;
293
+ attr.rowspan ||= 1;
294
+ attr.colspan ||= 1;
295
+ for (const dir of dirs) {
296
+ if (attr[dir] === 1) {
297
+ dirs.delete(dir);
298
+ }
299
+ }
300
+ if (dirs.size === 0) {
301
+ return;
302
+ }
303
+ let { x, y } = coords;
304
+ const rawCoords = isTableCoords(coords) ? coords : this.toRawCoords(coords);
305
+ if (rawCoords.start === false || x === undefined) {
306
+ ({ x, y } = this.toRenderedCoords(rawCoords));
307
+ }
308
+ const splitting = { rowspan: 1, colspan: 1 };
309
+ for (const dir of dirs) {
310
+ cell.setAttr(dir, 1);
311
+ splitting[dir] = attr[dir];
312
+ delete attr[dir];
313
+ }
314
+ for (let j = y; j < y + splitting.rowspan; j++) {
315
+ for (let i = x; i < x + splitting.colspan; i++) {
316
+ if (i > x || j > y) {
317
+ try {
318
+ this.insertTableCell('', { x: i, y: j }, subtype, attr);
319
+ }
320
+ catch (e) {
321
+ if (e instanceof RangeError && e.message.startsWith('指定的坐标不是单元格起始点:')) {
322
+ break;
323
+ }
324
+ throw e;
325
+ }
326
+ }
327
+ }
328
+ }
329
+ };
330
+ index_2.TableToken.prototype.splitIntoRows =
331
+ /** @implements */
332
+ function (coords) {
333
+ this.split(coords, new Set(['rowspan']));
334
+ };
335
+ index_2.TableToken.prototype.splitIntoCols =
336
+ /** @implements */
337
+ function (coords) {
338
+ this.split(coords, new Set(['colspan']));
339
+ };
340
+ index_2.TableToken.prototype.splitIntoCells =
341
+ /** @implements */
342
+ function (coords) {
343
+ this.split(coords, new Set(['rowspan', 'colspan']));
344
+ };
345
+ index_2.TableToken.prototype.replicateTableRow =
346
+ /** @implements */
347
+ function (row) {
348
+ let rowToken = this.getNthRow(row);
349
+ if (rowToken.type === 'table') {
350
+ rowToken = this.prependTableRow();
351
+ }
352
+ const replicated = this.insertBefore(rowToken.cloneNode(), rowToken);
353
+ for (const [token, start] of this.getFullRow(row)) {
354
+ if (start) {
355
+ token.rowspan = 1;
356
+ }
357
+ else {
358
+ token.rowspan++;
359
+ }
360
+ }
361
+ return replicated;
362
+ };
363
+ index_2.TableToken.prototype.replicateTableCol =
364
+ /** @implements */
365
+ function (x) {
366
+ const replicated = [];
367
+ for (const [token, start] of this.getFullCol(x)) {
368
+ if (start) {
369
+ const newToken = token.cloneNode();
370
+ newToken.colspan = 1;
371
+ token.before(newToken);
372
+ replicated.push(newToken);
373
+ }
374
+ else {
375
+ token.colspan++;
376
+ }
377
+ }
378
+ return replicated;
379
+ };
380
+ index_2.TableToken.prototype.moveTableRowBefore =
381
+ /** @implements */
382
+ function (y, before) {
383
+ const layout = this.getLayout();
384
+ try {
385
+ assert.deepEqual(occupied(layout, y), occupied(layout, before));
386
+ }
387
+ catch (e) {
388
+ if (e instanceof assert.AssertionError) {
389
+ throw new RangeError(`第 ${y} 行与第 ${before} 行的构造不同,无法移动!`);
390
+ }
391
+ throw e;
392
+ }
393
+ const rowToken = this.removeTableRow(y);
394
+ for (const coords of layout[before]) {
395
+ if (coords.row < before) {
396
+ this.getNthCell(coords).rowspan++;
397
+ }
398
+ }
399
+ let beforeToken = this.getNthRow(before);
400
+ if (beforeToken.type === 'table') {
401
+ beforeToken = this.prependTableRow();
402
+ }
403
+ this.insertBefore(rowToken, beforeToken);
404
+ return rowToken;
405
+ };
406
+ index_2.TableToken.prototype.moveTableRowAfter =
407
+ /** @implements */
408
+ function (y, after) {
409
+ const layout = this.getLayout(), afterToken = this.getNthRow(after), cells = afterToken.childNodes.filter(child => child.type === 'td' && child.subtype !== 'caption');
410
+ try {
411
+ assert.deepEqual(occupied(layout, y), occupied(layout, after, true, cells));
412
+ }
413
+ catch (e) {
414
+ if (e instanceof assert.AssertionError) {
415
+ throw new RangeError(`第 ${y} 行与第 ${after} 行的构造不同,无法移动!`);
416
+ }
417
+ throw e;
418
+ }
419
+ const rowToken = this.removeTableRow(y);
420
+ for (const coords of layout[after]) {
421
+ if (coords.row < after) {
422
+ this.getNthCell(coords).rowspan++;
423
+ }
424
+ else {
425
+ const cell = cells[coords.column], { rowspan } = cell;
426
+ if (rowspan > 1) {
427
+ cell.rowspan = rowspan + 1;
428
+ }
429
+ }
430
+ }
431
+ if (afterToken === this) {
432
+ const index = this.childNodes.slice(2).findIndex(index_2.isRowEnd);
433
+ this.insertAt(rowToken, index + 2);
434
+ }
435
+ else {
436
+ this.insertBefore(rowToken, afterToken);
437
+ }
438
+ return rowToken;
439
+ };
440
+ index_2.TableToken.prototype.moveCol =
441
+ /** @implements */
442
+ function (x, reference, after) {
443
+ const layout = this.getLayout();
444
+ if (layout.some(rowLayout => isStartCol(rowLayout, x) !== isStartCol(rowLayout, reference, after))) {
445
+ throw new RangeError(`第 ${x} 列与第 ${reference} 列的构造不同,无法移动!`);
446
+ }
447
+ const setX = new WeakSet(), setRef = new WeakSet(), rows = this.getAllRows();
448
+ for (let i = 0; i < layout.length; i++) {
449
+ const rowLayout = layout[i], coords = rowLayout[x], refCoords = rowLayout[reference], start = isStartCol(rowLayout, x);
450
+ if (refCoords && !start && !setRef.has(refCoords)) {
451
+ setRef.add(refCoords);
452
+ rows[refCoords.row].getNthCol(refCoords.column).colspan++;
453
+ }
454
+ if (coords && !setX.has(coords)) {
455
+ setX.add(coords);
456
+ const rowToken = rows[i];
457
+ let token = rowToken.getNthCol(coords.column);
458
+ const { colspan } = token;
459
+ if (colspan > 1) {
460
+ token.colspan = colspan - 1;
461
+ if (start) {
462
+ const original = token;
463
+ token = token.cloneNode();
464
+ original.lastChild.replaceChildren();
465
+ token.colspan = 1;
466
+ }
467
+ }
468
+ if (start) {
469
+ const col = rowLayout.slice(reference + Number(after)).find(({ row }) => row === i)?.column;
470
+ rowToken.insertBefore(token, col === undefined ? rowToken.childNodes.slice(2).find(index_2.isRowEnd) : rowToken.getNthCol(col));
471
+ }
472
+ }
473
+ }
474
+ };
475
+ index_2.TableToken.prototype.moveTableColBefore =
476
+ /** @implements */
477
+ function (x, before) {
478
+ this.moveCol(x, before);
479
+ };
480
+ index_2.TableToken.prototype.moveTableColAfter =
481
+ /** @implements */
482
+ function (x, after) {
483
+ this.moveCol(x, after, true);
484
+ };
485
+ constants_1.classes['ExtendedTableToken'] = __filename;