wikiparser-node 1.12.3-b → 1.12.3

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 (174) hide show
  1. package/config/.schema.json +203 -0
  2. package/config/default.json +30 -29
  3. package/config/enwiki.json +829 -15
  4. package/config/llwiki.json +56 -21
  5. package/config/moegirl.json +65 -21
  6. package/config/zhwiki.json +494 -28
  7. package/dist/addon/table.js +494 -0
  8. package/dist/addon/token.js +391 -0
  9. package/dist/addon/transclude.js +184 -0
  10. package/dist/base.d.ts +81 -0
  11. package/dist/base.js +40 -0
  12. package/dist/index.d.ts +33 -0
  13. package/dist/index.js +275 -0
  14. package/dist/internal.d.ts +47 -0
  15. package/dist/lib/element.d.ts +125 -0
  16. package/dist/lib/element.js +376 -0
  17. package/dist/lib/node.d.ts +173 -0
  18. package/dist/lib/node.js +478 -0
  19. package/dist/lib/range.d.ts +105 -0
  20. package/dist/lib/range.js +406 -0
  21. package/dist/lib/ranges.d.ts +28 -0
  22. package/dist/lib/ranges.js +126 -0
  23. package/dist/lib/rect.d.ts +18 -0
  24. package/dist/lib/rect.js +36 -0
  25. package/dist/lib/text.d.ts +58 -0
  26. package/dist/lib/text.js +414 -0
  27. package/dist/lib/title.d.ts +49 -0
  28. package/dist/lib/title.js +253 -0
  29. package/dist/mixin/attributesParent.d.ts +49 -0
  30. package/dist/mixin/attributesParent.js +80 -0
  31. package/dist/mixin/fixed.d.ts +5 -0
  32. package/dist/mixin/fixed.js +32 -0
  33. package/dist/mixin/flagsParent.d.ts +43 -0
  34. package/dist/mixin/flagsParent.js +64 -0
  35. package/dist/mixin/hidden.d.ts +7 -0
  36. package/dist/mixin/hidden.js +39 -0
  37. package/dist/mixin/magicLinkParent.d.ts +19 -0
  38. package/dist/mixin/magicLinkParent.js +43 -0
  39. package/dist/mixin/singleLine.d.ts +5 -0
  40. package/dist/mixin/singleLine.js +25 -0
  41. package/dist/mixin/sol.d.ts +6 -0
  42. package/dist/mixin/sol.js +45 -0
  43. package/dist/mixin/syntax.d.ts +8 -0
  44. package/dist/mixin/syntax.js +46 -0
  45. package/dist/parser/braces.js +152 -0
  46. package/dist/parser/commentAndExt.js +84 -0
  47. package/dist/parser/converter.js +41 -0
  48. package/dist/parser/externalLinks.js +39 -0
  49. package/dist/parser/hrAndDoubleUnderscore.js +44 -0
  50. package/dist/parser/html.js +40 -0
  51. package/dist/parser/links.js +103 -0
  52. package/dist/parser/list.js +116 -0
  53. package/dist/parser/magicLinks.js +54 -0
  54. package/dist/parser/quotes.js +69 -0
  55. package/dist/parser/redirect.js +28 -0
  56. package/dist/parser/selector.js +393 -0
  57. package/dist/parser/table.js +125 -0
  58. package/dist/src/arg.d.ts +51 -0
  59. package/dist/src/arg.js +225 -0
  60. package/dist/src/atom.d.ts +14 -0
  61. package/dist/src/atom.js +54 -0
  62. package/dist/src/attribute.d.ts +64 -0
  63. package/dist/src/attribute.js +478 -0
  64. package/dist/src/attributes.d.ts +103 -0
  65. package/dist/src/attributes.js +380 -0
  66. package/dist/src/converter.d.ts +28 -0
  67. package/dist/src/converter.js +150 -0
  68. package/dist/src/converterFlags.d.ts +80 -0
  69. package/dist/src/converterFlags.js +241 -0
  70. package/dist/src/converterRule.d.ts +71 -0
  71. package/dist/src/converterRule.js +218 -0
  72. package/dist/src/extLink.d.ts +36 -0
  73. package/dist/src/extLink.js +223 -0
  74. package/dist/src/gallery.d.ts +47 -0
  75. package/dist/src/gallery.js +145 -0
  76. package/dist/src/heading.d.ts +42 -0
  77. package/dist/src/heading.js +209 -0
  78. package/dist/src/hidden.d.ts +9 -0
  79. package/dist/src/hidden.js +82 -0
  80. package/dist/src/html.d.ts +61 -0
  81. package/dist/src/html.js +344 -0
  82. package/dist/src/imageParameter.d.ts +60 -0
  83. package/dist/src/imageParameter.js +262 -0
  84. package/dist/src/imagemap.d.ts +47 -0
  85. package/dist/src/imagemap.js +148 -0
  86. package/dist/src/imagemapLink.d.ts +35 -0
  87. package/dist/src/imagemapLink.js +99 -0
  88. package/dist/src/index.d.ts +136 -0
  89. package/dist/src/index.js +779 -0
  90. package/dist/src/link/base.d.ts +52 -0
  91. package/dist/src/link/base.js +258 -0
  92. package/dist/src/link/category.d.ts +22 -0
  93. package/dist/src/link/category.js +36 -0
  94. package/dist/src/link/file.d.ts +102 -0
  95. package/dist/src/link/file.js +335 -0
  96. package/dist/src/link/galleryImage.d.ts +29 -0
  97. package/dist/src/link/galleryImage.js +133 -0
  98. package/dist/src/link/index.d.ts +39 -0
  99. package/dist/src/link/index.js +100 -0
  100. package/dist/src/link/redirectTarget.d.ts +27 -0
  101. package/dist/src/link/redirectTarget.js +71 -0
  102. package/dist/src/magicLink.d.ts +57 -0
  103. package/dist/src/magicLink.js +261 -0
  104. package/dist/src/nested.d.ts +40 -0
  105. package/dist/src/nested.js +108 -0
  106. package/dist/src/nowiki/base.d.ts +28 -0
  107. package/dist/src/nowiki/base.js +90 -0
  108. package/dist/src/nowiki/comment.d.ts +14 -0
  109. package/dist/src/nowiki/comment.js +123 -0
  110. package/dist/src/nowiki/dd.d.ts +8 -0
  111. package/dist/src/nowiki/dd.js +74 -0
  112. package/dist/src/nowiki/doubleUnderscore.d.ts +15 -0
  113. package/dist/src/nowiki/doubleUnderscore.js +101 -0
  114. package/dist/src/nowiki/hr.d.ts +5 -0
  115. package/dist/src/nowiki/hr.js +72 -0
  116. package/dist/src/nowiki/index.d.ts +14 -0
  117. package/dist/src/nowiki/index.js +30 -0
  118. package/dist/src/nowiki/list.d.ts +5 -0
  119. package/dist/src/nowiki/list.js +67 -0
  120. package/dist/src/nowiki/listBase.d.ts +23 -0
  121. package/dist/src/nowiki/listBase.js +100 -0
  122. package/dist/src/nowiki/noinclude.d.ts +6 -0
  123. package/dist/src/nowiki/noinclude.js +77 -0
  124. package/dist/src/nowiki/quote.d.ts +14 -0
  125. package/dist/src/nowiki/quote.js +149 -0
  126. package/dist/src/onlyinclude.d.ts +13 -0
  127. package/dist/src/onlyinclude.js +60 -0
  128. package/dist/src/paramTag/index.d.ts +28 -0
  129. package/dist/src/paramTag/index.js +80 -0
  130. package/dist/src/paramTag/inputbox.d.ts +8 -0
  131. package/dist/src/paramTag/inputbox.js +24 -0
  132. package/dist/src/parameter.d.ts +60 -0
  133. package/dist/src/parameter.js +267 -0
  134. package/dist/src/pre.d.ts +28 -0
  135. package/dist/src/pre.js +62 -0
  136. package/dist/src/redirect.d.ts +30 -0
  137. package/dist/src/redirect.js +128 -0
  138. package/dist/src/syntax.d.ts +15 -0
  139. package/dist/src/syntax.js +87 -0
  140. package/dist/src/table/base.d.ts +28 -0
  141. package/dist/src/table/base.js +81 -0
  142. package/dist/src/table/index.d.ts +230 -0
  143. package/dist/src/table/index.js +506 -0
  144. package/dist/src/table/td.d.ts +72 -0
  145. package/dist/src/table/td.js +375 -0
  146. package/dist/src/table/tr.d.ts +30 -0
  147. package/dist/src/table/tr.js +61 -0
  148. package/dist/src/table/trBase.d.ts +49 -0
  149. package/dist/src/table/trBase.js +165 -0
  150. package/dist/src/tagPair/ext.d.ts +29 -0
  151. package/dist/src/tagPair/ext.js +217 -0
  152. package/dist/src/tagPair/include.d.ts +33 -0
  153. package/dist/src/tagPair/include.js +132 -0
  154. package/dist/src/tagPair/index.d.ts +23 -0
  155. package/dist/src/tagPair/index.js +130 -0
  156. package/dist/src/transclude.d.ts +159 -0
  157. package/dist/src/transclude.js +598 -0
  158. package/dist/util/constants.js +26 -0
  159. package/dist/util/debug.js +95 -0
  160. package/dist/util/diff.js +83 -0
  161. package/dist/util/html.js +145 -0
  162. package/dist/util/lint.js +32 -0
  163. package/dist/util/string.js +107 -0
  164. package/errors/README +3 -0
  165. package/package.json +21 -28
  166. package/printed/README +3 -0
  167. package/bundle/bundle.min.js +0 -37
  168. package/extensions/dist/base.js +0 -163
  169. package/extensions/dist/codejar.js +0 -52
  170. package/extensions/dist/editor.js +0 -159
  171. package/extensions/dist/highlight.js +0 -30
  172. package/extensions/dist/lint.js +0 -72
  173. package/extensions/editor.css +0 -59
  174. package/extensions/ui.css +0 -162
@@ -0,0 +1,376 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AstElement = void 0;
4
+ const string_1 = require("../util/string");
5
+ const debug_1 = require("../util/debug");
6
+ const node_1 = require("./node");
7
+ /* NOT FOR BROWSER */
8
+ const fs = require("fs");
9
+ const path = require("path");
10
+ const constants_1 = require("../util/constants");
11
+ const selector_1 = require("../parser/selector");
12
+ /**
13
+ * 将选择器转化为类型谓词
14
+ * @param selector 选择器
15
+ */
16
+ const getCondition = (selector) => {
17
+ /* NOT FOR BROWSER */
18
+ if (/[^a-z\-,\s]/u.test(selector)) {
19
+ return (0, selector_1.checkToken)(selector);
20
+ }
21
+ /* NOT FOR BROWSER END */
22
+ const types = new Set(selector.split(',').map(str => str.trim()));
23
+ return (({ type }) => types.has(type));
24
+ };
25
+ /** 类似HTMLElement */
26
+ class AstElement extends node_1.AstNode {
27
+ /** 子节点总数 */
28
+ get length() {
29
+ return this.childNodes.length;
30
+ }
31
+ /* NOT FOR BROWSER */
32
+ set length(n) {
33
+ if (n >= 0 && n < this.length) {
34
+ for (let i = this.length - 1; i >= n; i--) {
35
+ this.removeAt(i);
36
+ }
37
+ }
38
+ }
39
+ /** 全部非文本子节点 */
40
+ get children() {
41
+ return this.childNodes.filter((child) => child.type !== 'text');
42
+ }
43
+ /** 首位非文本子节点 */
44
+ get firstElementChild() {
45
+ return this.childNodes.find((child) => child.type !== 'text');
46
+ }
47
+ /** 末位非文本子节点 */
48
+ get lastElementChild() {
49
+ return this.children[this.childElementCount - 1];
50
+ }
51
+ /** 非文本子节点总数 */
52
+ get childElementCount() {
53
+ return this.children.length;
54
+ }
55
+ /** 父节点 */
56
+ get parentElement() {
57
+ return this.parentNode;
58
+ }
59
+ /** AstElement.prototype.text()的getter写法 */
60
+ get outerText() {
61
+ return this.text();
62
+ }
63
+ /** 不可见 */
64
+ get hidden() {
65
+ return this.text() === '';
66
+ }
67
+ /** 内部高度 */
68
+ get clientHeight() {
69
+ const { innerText } = this;
70
+ return typeof innerText === 'string' ? innerText.split('\n').length : undefined;
71
+ }
72
+ /** 内部宽度 */
73
+ get clientWidth() {
74
+ const { innerText } = this;
75
+ if (typeof innerText === 'string') {
76
+ const lines = innerText.split('\n');
77
+ return lines.at(-1).length;
78
+ }
79
+ return undefined;
80
+ }
81
+ constructor() {
82
+ super();
83
+ this.seal('name');
84
+ }
85
+ /* NOT FOR BROWSER END */
86
+ /** @private */
87
+ text(separator) {
88
+ return (0, string_1.text)(this.childNodes, separator);
89
+ }
90
+ /** 合并相邻的文本子节点 */
91
+ normalize() {
92
+ const childNodes = [...this.childNodes];
93
+ /**
94
+ * 移除子节点
95
+ * @param i 移除位置
96
+ */
97
+ const remove = (i) => {
98
+ childNodes[i].setAttribute('parentNode', undefined);
99
+ childNodes.splice(i, 1);
100
+ };
101
+ for (let i = childNodes.length - 1; i >= 0; i--) {
102
+ const { type, data } = childNodes[i];
103
+ if (type !== 'text' || this.getGaps(i - 1)) {
104
+ //
105
+ }
106
+ else if (data === '') {
107
+ remove(i);
108
+ /* NOT FOR BROWSER */
109
+ }
110
+ else {
111
+ const prev = childNodes[i - 1];
112
+ if (prev?.type === 'text') {
113
+ prev.setAttribute('data', prev.data + data);
114
+ remove(i);
115
+ }
116
+ /* NOT FOR BROWSER END */
117
+ }
118
+ }
119
+ this.setAttribute('childNodes', childNodes);
120
+ }
121
+ /**
122
+ * 移除子节点
123
+ * @param i 移除位置
124
+ */
125
+ removeAt(i) {
126
+ /* NOT FOR BROWSER */
127
+ this.verifyChild(i);
128
+ /* NOT FOR BROWSER END */
129
+ return (0, debug_1.setChildNodes)(this, i, 1)[0];
130
+ }
131
+ /**
132
+ * 插入子节点
133
+ * @param node 待插入的子节点
134
+ * @param i 插入位置
135
+ * @throws `RangeError` 不能插入祖先或子节点
136
+ */
137
+ insertAt(node, i = this.length) {
138
+ /* NOT FOR BROWSER */
139
+ if (node.contains(this)) {
140
+ throw new RangeError('Cannot insert an ancestor node!');
141
+ }
142
+ else if (this.childNodes.includes(node)) {
143
+ throw new RangeError('Cannot insert its own child node!');
144
+ }
145
+ this.verifyChild(i, 1);
146
+ node.parentNode?.removeChild(node);
147
+ /* NOT FOR BROWSER END */
148
+ (0, debug_1.setChildNodes)(this, i, 0, [node]);
149
+ return node;
150
+ }
151
+ /**
152
+ * 最近的祖先节点
153
+ * @param selector 选择器
154
+ */
155
+ closest(selector) {
156
+ const condition = getCondition(selector);
157
+ let { parentNode } = this;
158
+ while (parentNode) {
159
+ if (condition(parentNode)) {
160
+ return parentNode;
161
+ }
162
+ ({ parentNode } = parentNode);
163
+ }
164
+ return undefined;
165
+ }
166
+ /**
167
+ * 符合条件的第一个后代节点
168
+ * @param condition 条件
169
+ */
170
+ #getElementBy(condition) {
171
+ for (const child of this.childNodes) {
172
+ if (child.type === 'text') {
173
+ continue;
174
+ }
175
+ else if (condition(child)) {
176
+ return child;
177
+ }
178
+ const descendant = child.#getElementBy(condition);
179
+ if (descendant) {
180
+ return descendant;
181
+ }
182
+ }
183
+ return undefined;
184
+ }
185
+ /**
186
+ * 符合选择器的第一个后代节点
187
+ * @param selector 选择器
188
+ */
189
+ querySelector(selector) {
190
+ const condition = getCondition(selector);
191
+ return this.#getElementBy(condition);
192
+ }
193
+ /**
194
+ * 符合条件的所有后代节点
195
+ * @param condition 条件
196
+ */
197
+ #getElementsBy(condition) {
198
+ const descendants = [];
199
+ for (const child of this.childNodes) {
200
+ if (child.type === 'text') {
201
+ continue;
202
+ }
203
+ else if (condition(child)) {
204
+ descendants.push(child);
205
+ }
206
+ descendants.push(...child.#getElementsBy(condition));
207
+ }
208
+ return descendants;
209
+ }
210
+ /**
211
+ * 符合选择器的所有后代节点
212
+ * @param selector 选择器
213
+ */
214
+ querySelectorAll(selector) {
215
+ const condition = getCondition(selector);
216
+ return this.#getElementsBy(condition);
217
+ }
218
+ /**
219
+ * 在末尾批量插入子节点
220
+ * @param elements 插入节点
221
+ */
222
+ append(...elements) {
223
+ for (const element of elements) {
224
+ this.insertAt(element);
225
+ }
226
+ }
227
+ /**
228
+ * 批量替换子节点
229
+ * @param elements 新的子节点
230
+ */
231
+ replaceChildren(...elements) {
232
+ for (let i = this.length - 1; i >= 0; i--) {
233
+ this.removeAt(i);
234
+ }
235
+ this.append(...elements);
236
+ }
237
+ /**
238
+ * 修改文本子节点
239
+ * @param str 新文本
240
+ * @param i 子节点位置
241
+ * @throws `RangeError` 对应位置的子节点不是文本节点
242
+ */
243
+ setText(str, i = 0) {
244
+ i += i < 0 ? this.length : 0;
245
+ /* NOT FOR BROWSER */
246
+ this.verifyChild(i);
247
+ /* NOT FOR BROWSER END */
248
+ const oldText = this.childNodes[i];
249
+ if (oldText.type === 'text') { // eslint-disable-line @typescript-eslint/no-unnecessary-condition
250
+ const { data } = oldText;
251
+ oldText.replaceData(str);
252
+ return data;
253
+ }
254
+ /* NOT FOR BROWSER */
255
+ throw new RangeError(`The child node at position ${i} is ${oldText.constructor.name}!`);
256
+ }
257
+ /** @private */
258
+ toString(skip, separator = '') {
259
+ return this.childNodes.map(child => child.toString(skip)).join(separator);
260
+ }
261
+ /** @private */
262
+ lint(start = this.getAbsoluteIndex(), re) {
263
+ const errors = [];
264
+ for (let i = 0, cur = start + this.getAttribute('padding'); i < this.length; i++) {
265
+ const child = this.childNodes[i];
266
+ errors.push(...child.lint(cur, re));
267
+ cur += child.toString().length + this.getGaps(i);
268
+ }
269
+ return errors;
270
+ }
271
+ /** @private */
272
+ print(opt = {}) {
273
+ const cl = opt.class;
274
+ return this.toString()
275
+ ? `${cl === '' ? '' : `<span class="wpb-${cl ?? this.type}">`}${(0, string_1.print)(this.childNodes, opt)}${cl === '' ? '' : '</span>'}`
276
+ : '';
277
+ }
278
+ /**
279
+ * 保存为JSON
280
+ * @param file 文件名
281
+ * @param start
282
+ */
283
+ json(file, start = this.getAbsoluteIndex()) {
284
+ const json = {
285
+ ...this,
286
+ type: this.type,
287
+ range: [start, start + this.toString().length],
288
+ childNodes: [],
289
+ };
290
+ for (let i = 0, cur = start + this.getAttribute('padding'); i < this.length; i++) {
291
+ const child = this.childNodes[i], { length } = child.toString();
292
+ json.childNodes.push(child.type === 'text'
293
+ ? { data: child.data, range: [cur, cur + length] }
294
+ : child.json(undefined, cur));
295
+ cur += length + this.getGaps(i);
296
+ }
297
+ /* NOT FOR BROWSER */
298
+ if (typeof file === 'string') {
299
+ fs.writeFileSync(path.join(__dirname, '..', '..', 'printed', file + (file.endsWith('.json') ? '' : '.json')), JSON.stringify(json, null, 2));
300
+ }
301
+ /* NOT FOR BROWSER END */
302
+ return json;
303
+ }
304
+ /* NOT FOR BROWSER */
305
+ /**
306
+ * 检查是否符合选择器
307
+ * @param selector 选择器
308
+ */
309
+ matches(selector) {
310
+ return selector === undefined || getCondition(selector)(this);
311
+ }
312
+ /**
313
+ * 类型选择器
314
+ * @param types
315
+ */
316
+ getElementByTypes(types) {
317
+ const typeSet = new Set(types.split(',').map(str => str.trim()));
318
+ return this.#getElementBy((({ type }) => typeSet.has(type)));
319
+ }
320
+ /**
321
+ * id选择器
322
+ * @param id id名
323
+ */
324
+ getElementById(id) {
325
+ return this.#getElementBy((token => 'id' in token && token.id === id));
326
+ }
327
+ /**
328
+ * 类选择器
329
+ * @param className 类名之一
330
+ */
331
+ getElementsByClassName(className) {
332
+ return this.#getElementsBy((token => 'classList' in token && token.classList.has(className)));
333
+ }
334
+ /**
335
+ * 标签名选择器
336
+ * @param tag 标签名
337
+ */
338
+ getElementsByTagName(tag) {
339
+ return this.#getElementsBy((({ type, name }) => name === tag && (type === 'html' || type === 'ext')));
340
+ }
341
+ /**
342
+ * 在开头批量插入子节点
343
+ * @param elements 插入节点
344
+ */
345
+ prepend(...elements) {
346
+ for (let i = 0; i < elements.length; i++) {
347
+ this.insertAt(elements[i], i);
348
+ }
349
+ }
350
+ /**
351
+ * 获取子节点的位置
352
+ * @param node 子节点
353
+ * @throws `RangeError` 找不到子节点
354
+ */
355
+ #getChildIndex(node) {
356
+ const i = this.childNodes.indexOf(node);
357
+ if (i === -1) {
358
+ throw new RangeError('Not a child node!');
359
+ }
360
+ return i;
361
+ }
362
+ /**
363
+ * 移除子节点
364
+ * @param node 子节点
365
+ */
366
+ removeChild(node) {
367
+ return this.removeAt(this.#getChildIndex(node));
368
+ }
369
+ insertBefore(child, reference) {
370
+ return reference === undefined
371
+ ? this.insertAt(child)
372
+ : this.insertAt(child, this.#getChildIndex(reference));
373
+ }
374
+ }
375
+ exports.AstElement = AstElement;
376
+ constants_1.classes['AstElement'] = __filename;
@@ -0,0 +1,173 @@
1
+ import type { LintError, AstNode as AstNodeBase, TokenTypes } from '../base';
2
+ import type { AstText, Token } from '../internal';
3
+ export type AstNodes = AstText | Token;
4
+ export interface Dimension {
5
+ readonly height: number;
6
+ readonly width: number;
7
+ }
8
+ export interface Position {
9
+ readonly top: number;
10
+ readonly left: number;
11
+ }
12
+ export interface CaretPosition {
13
+ readonly offsetNode: AstNodes;
14
+ readonly offset: number;
15
+ }
16
+ /** 类似Node */
17
+ export declare abstract class AstNode implements AstNodeBase {
18
+ #private;
19
+ data?: string | undefined;
20
+ readonly childNodes: readonly AstNodes[];
21
+ abstract get type(): TokenTypes | 'text';
22
+ abstract set type(value: TokenTypes | 'text');
23
+ /** 可见部分 */
24
+ text(): string;
25
+ lint(): LintError[];
26
+ print(): string;
27
+ /** 首位子节点 */
28
+ get firstChild(): AstNodes | undefined;
29
+ /** 末位子节点 */
30
+ get lastChild(): AstNodes | undefined;
31
+ /** 父节点 */
32
+ get parentNode(): Token | undefined;
33
+ /** 后一个兄弟节点 */
34
+ get nextSibling(): AstNodes | undefined;
35
+ /** 前一个兄弟节点 */
36
+ get previousSibling(): AstNodes | undefined;
37
+ /** 行数 */
38
+ get offsetHeight(): number;
39
+ /** 最后一行的列数 */
40
+ get offsetWidth(): number;
41
+ /** 后一个非文本兄弟节点 */
42
+ get nextElementSibling(): Token | undefined;
43
+ /** 前一个非文本兄弟节点 */
44
+ get previousElementSibling(): Token | undefined;
45
+ /** 后一个可见的兄弟节点 */
46
+ get nextVisibleSibling(): AstNodes | undefined;
47
+ /** 前一个可见的兄弟节点 */
48
+ get previousVisibleSibling(): AstNodes | undefined;
49
+ /** 是否具有根节点 */
50
+ get isConnected(): boolean;
51
+ /** 后方是否还有其他节点(不含后代) */
52
+ get eof(): boolean | undefined;
53
+ /** 相对于父容器的行号 */
54
+ get offsetTop(): number;
55
+ /** 相对于父容器的列号 */
56
+ get offsetLeft(): number;
57
+ /** 位置、大小和padding */
58
+ get style(): Position & Dimension & {
59
+ padding: number;
60
+ };
61
+ /** 字体样式 */
62
+ get font(): {
63
+ bold: boolean;
64
+ italic: boolean;
65
+ };
66
+ /** 是否粗体 */
67
+ get bold(): boolean;
68
+ /** 是否斜体 */
69
+ get italic(): boolean;
70
+ constructor();
71
+ /** 获取根节点 */
72
+ getRootNode(): Token | this;
73
+ /**
74
+ * 将字符位置转换为行列号
75
+ * @param index 字符位置
76
+ */
77
+ posFromIndex(index: number): Position | undefined;
78
+ /**
79
+ * 获取当前节点的相对字符位置,或其第`j`个子节点的相对字符位置
80
+ * @param j 子节点序号
81
+ */
82
+ getRelativeIndex(j?: number): number;
83
+ /** 获取当前节点的绝对位置 */
84
+ getAbsoluteIndex(): number;
85
+ /**
86
+ * 是否是某种类型的节点
87
+ * @param type 节点类型
88
+ */
89
+ is<T extends Token>(type: string): this is T;
90
+ /**
91
+ * 是否是全同节点
92
+ * @param node 待比较的节点
93
+ * @throws `assert.AssertionError`
94
+ */
95
+ isEqualNode(node: AstNode): boolean;
96
+ /**
97
+ * 在后方批量插入兄弟节点
98
+ * @param nodes 插入节点
99
+ */
100
+ after(...nodes: (AstNodes | string)[]): void;
101
+ /**
102
+ * 在前方批量插入兄弟节点
103
+ * @param nodes 插入节点
104
+ */
105
+ before(...nodes: (AstNodes | string)[]): void;
106
+ /** 移除当前节点 */
107
+ remove(): void;
108
+ /**
109
+ * 将当前节点批量替换为新的节点
110
+ * @param nodes 插入节点
111
+ */
112
+ replaceWith(...nodes: (AstNodes | string)[]): void;
113
+ /**
114
+ * 是自身或后代节点
115
+ * @param node 待检测节点
116
+ */
117
+ contains(node: AstNode): boolean;
118
+ /**
119
+ * 添加事件监听
120
+ * @param types 事件类型
121
+ * @param listener 监听函数
122
+ * @param options 选项
123
+ * @param options.once 仅执行一次
124
+ */
125
+ addEventListener(types: string | string[], listener: (...args: any[]) => void, options?: {
126
+ once?: boolean;
127
+ }): void;
128
+ /**
129
+ * 移除事件监听
130
+ * @param types 事件类型
131
+ * @param listener 监听函数
132
+ */
133
+ removeEventListener(types: string | string[], listener: (...args: any[]) => void): void;
134
+ /**
135
+ * 移除事件的所有监听
136
+ * @param types 事件类型
137
+ */
138
+ removeAllEventListeners(types: string | string[]): void;
139
+ /**
140
+ * 列举事件监听
141
+ * @param type 事件类型
142
+ */
143
+ listEventListeners(type: string): Function[];
144
+ /**
145
+ * 触发事件
146
+ * @param e 事件对象
147
+ * @param data 事件数据
148
+ */
149
+ dispatchEvent(e: Event, data: unknown): void;
150
+ /** 获取所有祖先节点 */
151
+ getAncestors(): Token[];
152
+ /**
153
+ * 比较和另一个节点的相对位置
154
+ * @param other 待比较的节点
155
+ * @throws `RangeError` 不在同一个语法树
156
+ */
157
+ compareDocumentPosition(other: AstNodes): number;
158
+ /**
159
+ * 将行列号转换为字符位置
160
+ * @param top 行号
161
+ * @param left 列号
162
+ */
163
+ indexFromPos(top: number, left: number): number | undefined;
164
+ /** 获取当前节点的行列位置和大小 */
165
+ getBoundingClientRect(): Dimension & Position;
166
+ /** 销毁 */
167
+ destroy(): void;
168
+ /**
169
+ * 获取某一行的wikitext
170
+ * @param n 行号
171
+ */
172
+ getLine(n: number): string | undefined;
173
+ }