wikiparser-node 1.9.3-b → 1.9.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 (171) 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 +486 -0
  7. package/dist/addon/token.js +240 -0
  8. package/dist/addon/transclude.js +185 -0
  9. package/dist/base.d.ts +79 -0
  10. package/dist/base.js +39 -0
  11. package/dist/index.d.ts +31 -0
  12. package/dist/index.js +231 -0
  13. package/dist/internal.d.ts +46 -0
  14. package/dist/lib/element.d.ts +125 -0
  15. package/dist/lib/element.js +374 -0
  16. package/dist/lib/node.d.ts +168 -0
  17. package/dist/lib/node.js +472 -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/rect.d.ts +18 -0
  23. package/dist/lib/rect.js +34 -0
  24. package/dist/lib/text.d.ts +55 -0
  25. package/dist/lib/text.js +351 -0
  26. package/dist/lib/title.d.ts +40 -0
  27. package/dist/lib/title.js +197 -0
  28. package/dist/mixin/attributesParent.d.ts +49 -0
  29. package/dist/mixin/attributesParent.js +82 -0
  30. package/dist/mixin/fixed.d.ts +5 -0
  31. package/dist/mixin/fixed.js +32 -0
  32. package/dist/mixin/flagsParent.d.ts +41 -0
  33. package/dist/mixin/flagsParent.js +60 -0
  34. package/dist/mixin/hidden.d.ts +6 -0
  35. package/dist/mixin/hidden.js +34 -0
  36. package/dist/mixin/magicLinkParent.d.ts +19 -0
  37. package/dist/mixin/magicLinkParent.js +43 -0
  38. package/dist/mixin/singleLine.d.ts +5 -0
  39. package/dist/mixin/singleLine.js +27 -0
  40. package/dist/mixin/sol.d.ts +5 -0
  41. package/dist/mixin/sol.js +44 -0
  42. package/dist/mixin/syntax.d.ts +8 -0
  43. package/dist/mixin/syntax.js +48 -0
  44. package/dist/parser/braces.js +150 -0
  45. package/dist/parser/commentAndExt.js +79 -0
  46. package/dist/parser/converter.js +39 -0
  47. package/dist/parser/externalLinks.js +37 -0
  48. package/dist/parser/hrAndDoubleUnderscore.js +42 -0
  49. package/dist/parser/html.js +38 -0
  50. package/dist/parser/links.js +101 -0
  51. package/dist/parser/list.js +97 -0
  52. package/dist/parser/magicLinks.js +53 -0
  53. package/dist/parser/quotes.js +67 -0
  54. package/dist/parser/redirect.js +26 -0
  55. package/dist/parser/selector.js +393 -0
  56. package/dist/parser/table.js +123 -0
  57. package/dist/src/arg.d.ts +51 -0
  58. package/dist/src/arg.js +214 -0
  59. package/dist/src/atom.d.ts +14 -0
  60. package/dist/src/atom.js +52 -0
  61. package/dist/src/attribute.d.ts +64 -0
  62. package/dist/src/attribute.js +486 -0
  63. package/dist/src/attributes.d.ts +102 -0
  64. package/dist/src/attributes.js +355 -0
  65. package/dist/src/converter.d.ts +28 -0
  66. package/dist/src/converter.js +137 -0
  67. package/dist/src/converterFlags.d.ts +80 -0
  68. package/dist/src/converterFlags.js +242 -0
  69. package/dist/src/converterRule.d.ts +71 -0
  70. package/dist/src/converterRule.js +212 -0
  71. package/dist/src/extLink.d.ts +36 -0
  72. package/dist/src/extLink.js +194 -0
  73. package/dist/src/gallery.d.ts +47 -0
  74. package/dist/src/gallery.js +142 -0
  75. package/dist/src/heading.d.ts +40 -0
  76. package/dist/src/heading.js +186 -0
  77. package/dist/src/hidden.d.ts +9 -0
  78. package/dist/src/hidden.js +80 -0
  79. package/dist/src/html.d.ts +57 -0
  80. package/dist/src/html.js +335 -0
  81. package/dist/src/imageParameter.d.ts +58 -0
  82. package/dist/src/imageParameter.js +247 -0
  83. package/dist/src/imagemap.d.ts +47 -0
  84. package/dist/src/imagemap.js +146 -0
  85. package/dist/src/imagemapLink.d.ts +31 -0
  86. package/dist/src/imagemapLink.js +97 -0
  87. package/dist/src/index.d.ts +131 -0
  88. package/dist/src/index.js +746 -0
  89. package/dist/src/link/base.d.ts +45 -0
  90. package/dist/src/link/base.js +226 -0
  91. package/dist/src/link/category.d.ts +22 -0
  92. package/dist/src/link/category.js +34 -0
  93. package/dist/src/link/file.d.ts +96 -0
  94. package/dist/src/link/file.js +276 -0
  95. package/dist/src/link/galleryImage.d.ts +29 -0
  96. package/dist/src/link/galleryImage.js +132 -0
  97. package/dist/src/link/index.d.ts +51 -0
  98. package/dist/src/link/index.js +136 -0
  99. package/dist/src/link/redirectTarget.d.ts +36 -0
  100. package/dist/src/link/redirectTarget.js +98 -0
  101. package/dist/src/magicLink.d.ts +60 -0
  102. package/dist/src/magicLink.js +273 -0
  103. package/dist/src/nested.d.ts +40 -0
  104. package/dist/src/nested.js +106 -0
  105. package/dist/src/nowiki/base.d.ts +30 -0
  106. package/dist/src/nowiki/base.js +89 -0
  107. package/dist/src/nowiki/comment.d.ts +14 -0
  108. package/dist/src/nowiki/comment.js +124 -0
  109. package/dist/src/nowiki/dd.d.ts +8 -0
  110. package/dist/src/nowiki/dd.js +26 -0
  111. package/dist/src/nowiki/doubleUnderscore.d.ts +15 -0
  112. package/dist/src/nowiki/doubleUnderscore.js +97 -0
  113. package/dist/src/nowiki/hr.d.ts +5 -0
  114. package/dist/src/nowiki/hr.js +65 -0
  115. package/dist/src/nowiki/index.d.ts +14 -0
  116. package/dist/src/nowiki/index.js +31 -0
  117. package/dist/src/nowiki/list.d.ts +16 -0
  118. package/dist/src/nowiki/list.js +111 -0
  119. package/dist/src/nowiki/listBase.d.ts +5 -0
  120. package/dist/src/nowiki/listBase.js +61 -0
  121. package/dist/src/nowiki/noinclude.d.ts +6 -0
  122. package/dist/src/nowiki/noinclude.js +71 -0
  123. package/dist/src/nowiki/quote.d.ts +14 -0
  124. package/dist/src/nowiki/quote.js +130 -0
  125. package/dist/src/onlyinclude.d.ts +13 -0
  126. package/dist/src/onlyinclude.js +58 -0
  127. package/dist/src/paramTag/index.d.ts +30 -0
  128. package/dist/src/paramTag/index.js +78 -0
  129. package/dist/src/paramTag/inputbox.d.ts +8 -0
  130. package/dist/src/paramTag/inputbox.js +22 -0
  131. package/dist/src/parameter.d.ts +60 -0
  132. package/dist/src/parameter.js +261 -0
  133. package/dist/src/pre.d.ts +28 -0
  134. package/dist/src/pre.js +60 -0
  135. package/dist/src/redirect.d.ts +30 -0
  136. package/dist/src/redirect.js +122 -0
  137. package/dist/src/syntax.d.ts +17 -0
  138. package/dist/src/syntax.js +87 -0
  139. package/dist/src/table/base.d.ts +28 -0
  140. package/dist/src/table/base.js +81 -0
  141. package/dist/src/table/index.d.ts +230 -0
  142. package/dist/src/table/index.js +495 -0
  143. package/dist/src/table/td.d.ts +72 -0
  144. package/dist/src/table/td.js +364 -0
  145. package/dist/src/table/tr.d.ts +30 -0
  146. package/dist/src/table/tr.js +59 -0
  147. package/dist/src/table/trBase.d.ts +49 -0
  148. package/dist/src/table/trBase.js +156 -0
  149. package/dist/src/tagPair/ext.d.ts +29 -0
  150. package/dist/src/tagPair/ext.js +204 -0
  151. package/dist/src/tagPair/include.d.ts +33 -0
  152. package/dist/src/tagPair/include.js +126 -0
  153. package/dist/src/tagPair/index.d.ts +23 -0
  154. package/dist/src/tagPair/index.js +128 -0
  155. package/dist/src/transclude.d.ts +159 -0
  156. package/dist/src/transclude.js +582 -0
  157. package/dist/util/constants.js +25 -0
  158. package/dist/util/debug.js +95 -0
  159. package/dist/util/diff.js +83 -0
  160. package/dist/util/lint.js +32 -0
  161. package/dist/util/string.js +60 -0
  162. package/errors/README +1 -0
  163. package/package.json +22 -32
  164. package/printed/README +1 -0
  165. package/bundle/bundle.min.js +0 -39
  166. package/extensions/dist/base.js +0 -64
  167. package/extensions/dist/editor.js +0 -159
  168. package/extensions/dist/highlight.js +0 -58
  169. package/extensions/dist/lint.js +0 -72
  170. package/extensions/editor.css +0 -64
  171. package/extensions/ui.css +0 -144
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
3
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
4
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
5
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
6
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
7
+ var _, done = false;
8
+ for (var i = decorators.length - 1; i >= 0; i--) {
9
+ var context = {};
10
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
11
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
12
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
13
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
14
+ if (kind === "accessor") {
15
+ if (result === void 0) continue;
16
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
17
+ if (_ = accept(result.get)) descriptor.get = _;
18
+ if (_ = accept(result.set)) descriptor.set = _;
19
+ if (_ = accept(result.init)) initializers.unshift(_);
20
+ }
21
+ else if (_ = accept(result)) {
22
+ if (kind === "field") initializers.unshift(_);
23
+ else descriptor[key] = _;
24
+ }
25
+ }
26
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
27
+ done = true;
28
+ };
29
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
30
+ var useValue = arguments.length > 2;
31
+ for (var i = 0; i < initializers.length; i++) {
32
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
33
+ }
34
+ return useValue ? value : void 0;
35
+ };
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.ExtToken = void 0;
38
+ const lint_1 = require("../../util/lint");
39
+ const rect_1 = require("../../lib/rect");
40
+ const debug_1 = require("../../util/debug");
41
+ const constants_1 = require("../../util/constants");
42
+ const attributesParent_1 = require("../../mixin/attributesParent");
43
+ const index_1 = require("../../index");
44
+ const index_2 = require("../index");
45
+ const index_3 = require("./index");
46
+ const attributes_1 = require("../attributes");
47
+ /**
48
+ * 从数组中删除指定元素
49
+ * @param arr 数组
50
+ * @param ele 元素
51
+ */
52
+ const del = (arr, ele) => {
53
+ const set = new Set(arr);
54
+ set.delete(ele);
55
+ return [...set];
56
+ };
57
+ /* NOT FOR BROWSER END */
58
+ /**
59
+ * 扩展标签
60
+ * @classdesc `{childNodes: [AttributesToken, Token]}`
61
+ */
62
+ let ExtToken = (() => {
63
+ let _classDecorators = [(0, attributesParent_1.attributesParent)()];
64
+ let _classDescriptor;
65
+ let _classExtraInitializers = [];
66
+ let _classThis;
67
+ let _classSuper = index_3.TagPairToken;
68
+ var ExtToken = class extends _classSuper {
69
+ static { _classThis = this; }
70
+ static {
71
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
72
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
73
+ ExtToken = _classThis = _classDescriptor.value;
74
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
75
+ __runInitializers(_classThis, _classExtraInitializers);
76
+ }
77
+ /* NOT FOR BROWSER END */
78
+ get type() {
79
+ return 'ext';
80
+ }
81
+ /**
82
+ * @param name 标签名
83
+ * @param attr 标签属性
84
+ * @param inner 内部wikitext
85
+ * @param closed 是否封闭
86
+ */
87
+ constructor(name, attr, inner, closed, config = index_1.default.getConfig(), accum = []) {
88
+ const lcName = name.toLowerCase(),
89
+ // @ts-expect-error abstract class
90
+ attrToken = new attributes_1.AttributesToken(!attr || attr.trimStart() !== attr ? attr : ` ${attr}`, 'ext-attrs', lcName, config, accum), newConfig = { ...config, ext: del(config.ext, lcName), excludes: [...config.excludes ?? []] };
91
+ let innerToken;
92
+ switch (lcName) {
93
+ case 'tab':
94
+ newConfig.ext = del(newConfig.ext, 'tabs');
95
+ // fall through
96
+ case 'indicator':
97
+ case 'poem':
98
+ case 'ref':
99
+ case 'option':
100
+ case 'combooption':
101
+ case 'tabs':
102
+ case 'poll':
103
+ case 'seo':
104
+ if (lcName === 'poem') {
105
+ newConfig.excludes.push('heading');
106
+ }
107
+ innerToken = new index_2.Token(inner, newConfig, accum);
108
+ break;
109
+ case 'pre': {
110
+ const { PreToken } = require('../pre');
111
+ // @ts-expect-error abstract class
112
+ innerToken = new PreToken(inner, newConfig, accum);
113
+ break;
114
+ }
115
+ case 'dynamicpagelist': {
116
+ const { ParamTagToken } = require('../paramTag/index');
117
+ // @ts-expect-error abstract class
118
+ innerToken = new ParamTagToken(inner, newConfig, accum);
119
+ break;
120
+ }
121
+ case 'inputbox': {
122
+ newConfig.excludes.push('heading');
123
+ const { InputboxToken } = require('../paramTag/inputbox');
124
+ // @ts-expect-error abstract class
125
+ innerToken = new InputboxToken(inner, newConfig, accum);
126
+ break;
127
+ }
128
+ case 'references': {
129
+ const { NestedToken } = require('../nested');
130
+ // @ts-expect-error abstract class
131
+ innerToken = new NestedToken(inner, /<!--.*?(?:-->|$)|<(ref)(\s[^>]*)?>(.*?)<\/(ref\s*)>/gisu, ['ref'], newConfig, accum);
132
+ break;
133
+ }
134
+ case 'choose': {
135
+ const { NestedToken } = require('../nested');
136
+ // @ts-expect-error abstract class
137
+ innerToken = new NestedToken(inner, /<(option|choicetemplate)(\s[^>]*)?>(.*?)<\/(\1)>/gsu, ['option', 'choicetemplate'], newConfig, accum);
138
+ break;
139
+ }
140
+ case 'combobox': {
141
+ const { NestedToken } = require('../nested');
142
+ // @ts-expect-error abstract class
143
+ innerToken = new NestedToken(inner, /<(combooption)(\s[^>]*)?>(.*?)<\/(combooption\s*)>/gisu, ['combooption'], newConfig, accum);
144
+ break;
145
+ }
146
+ case 'gallery': {
147
+ const { GalleryToken } = require('../gallery');
148
+ // @ts-expect-error abstract class
149
+ innerToken = new GalleryToken(inner, newConfig, accum);
150
+ break;
151
+ }
152
+ case 'imagemap': {
153
+ const { ImagemapToken } = require('../imagemap');
154
+ // @ts-expect-error abstract class
155
+ innerToken = new ImagemapToken(inner, newConfig, accum);
156
+ break;
157
+ }
158
+ // 更多定制扩展的代码示例:
159
+ // ```
160
+ // case 'extensionName': {
161
+ // const {ExtensionToken}: typeof import('../extension') = require('../extension');
162
+ // innerToken = new ExtensionToken(inner, newConfig, accum);
163
+ // break;
164
+ // }
165
+ // ```
166
+ default: {
167
+ const { NowikiToken } = require('../nowiki/index');
168
+ // @ts-expect-error abstract class
169
+ innerToken = new NowikiToken(inner, newConfig, accum);
170
+ }
171
+ }
172
+ innerToken.setAttribute('name', lcName);
173
+ if (innerToken.type === 'plain') {
174
+ innerToken.type = 'ext-inner';
175
+ }
176
+ super(name, attrToken, innerToken, closed, config, accum);
177
+ this.seal('closed', true);
178
+ }
179
+ /** @private */
180
+ lint(start = this.getAbsoluteIndex(), re) {
181
+ const errors = super.lint(start, re), rect = new rect_1.BoundingRect(this, start);
182
+ if (this.name !== 'nowiki' && this.closest('html-attrs, table-attrs')) {
183
+ errors.push((0, lint_1.generateForSelf)(this, rect, 'parsing-order', 'extension tag in HTML tag attributes'));
184
+ }
185
+ if (this.name === 'ref' && this.closest('heading-title')) {
186
+ errors.push((0, lint_1.generateForSelf)(this, rect, 'var-anchor', 'variable anchor in a section header'));
187
+ }
188
+ return errors;
189
+ }
190
+ /* NOT FOR BROWSER */
191
+ cloneNode() {
192
+ const inner = this.lastChild.cloneNode(), tags = this.getAttribute('tags'), config = this.getAttribute('config'), attr = this.firstChild.toString();
193
+ return debug_1.Shadow.run(() => {
194
+ // @ts-expect-error abstract class
195
+ const token = new ExtToken(tags[0], attr, '', this.selfClosing ? undefined : tags[1], config);
196
+ token.lastChild.safeReplaceWith(inner);
197
+ return token;
198
+ });
199
+ }
200
+ };
201
+ return ExtToken = _classThis;
202
+ })();
203
+ exports.ExtToken = ExtToken;
204
+ constants_1.classes['ExtToken'] = __filename;
@@ -0,0 +1,33 @@
1
+ import { TagPairToken } from './index';
2
+ import type { LintError, Config } from '../../base';
3
+ import type { AstText, Token } from '../../internal';
4
+ /**
5
+ * `<includeonly>`或`<noinclude>`或`<onlyinclude>`
6
+ * @classdesc `{childNodes: [AstText, AstText]}`
7
+ */
8
+ export declare abstract class IncludeToken extends TagPairToken {
9
+ readonly childNodes: readonly [AstText, AstText];
10
+ abstract get firstChild(): AstText;
11
+ abstract get lastChild(): AstText;
12
+ abstract get children(): [];
13
+ abstract get firstElementChild(): undefined;
14
+ abstract get lastElementChild(): undefined;
15
+ get type(): 'include';
16
+ get innerText(): string | undefined;
17
+ set innerText(text: string | undefined);
18
+ /**
19
+ * @param name 标签名
20
+ * @param attr 标签属性
21
+ * @param inner 内部wikitext
22
+ * @param closed 是否封闭
23
+ */
24
+ constructor(name: string, attr?: string, inner?: string, closed?: string, config?: Config, accum?: Token[]);
25
+ cloneNode(): this;
26
+ /**
27
+ * @override
28
+ * @param str 新文本
29
+ */
30
+ setText(str: string): string;
31
+ /** 清除标签属性 */
32
+ removeAttr(): void;
33
+ }
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
3
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
4
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
5
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
6
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
7
+ var _, done = false;
8
+ for (var i = decorators.length - 1; i >= 0; i--) {
9
+ var context = {};
10
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
11
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
12
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
13
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
14
+ if (kind === "accessor") {
15
+ if (result === void 0) continue;
16
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
17
+ if (_ = accept(result.get)) descriptor.get = _;
18
+ if (_ = accept(result.set)) descriptor.set = _;
19
+ if (_ = accept(result.init)) initializers.unshift(_);
20
+ }
21
+ else if (_ = accept(result)) {
22
+ if (kind === "field") initializers.unshift(_);
23
+ else descriptor[key] = _;
24
+ }
25
+ }
26
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
27
+ done = true;
28
+ };
29
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
30
+ var useValue = arguments.length > 2;
31
+ for (var i = 0; i < initializers.length; i++) {
32
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
33
+ }
34
+ return useValue ? value : void 0;
35
+ };
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.IncludeToken = void 0;
38
+ const lint_1 = require("../../util/lint");
39
+ const debug_1 = require("../../util/debug");
40
+ const constants_1 = require("../../util/constants");
41
+ const hidden_1 = require("../../mixin/hidden");
42
+ const index_1 = require("../../index");
43
+ const index_2 = require("./index");
44
+ /**
45
+ * `<includeonly>`或`<noinclude>`或`<onlyinclude>`
46
+ * @classdesc `{childNodes: [AstText, AstText]}`
47
+ */
48
+ let IncludeToken = (() => {
49
+ let _classDecorators = [(0, hidden_1.hiddenToken)()];
50
+ let _classDescriptor;
51
+ let _classExtraInitializers = [];
52
+ let _classThis;
53
+ let _classSuper = index_2.TagPairToken;
54
+ var IncludeToken = class extends _classSuper {
55
+ static { _classThis = this; }
56
+ static {
57
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
58
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
59
+ IncludeToken = _classThis = _classDescriptor.value;
60
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
61
+ __runInitializers(_classThis, _classExtraInitializers);
62
+ }
63
+ /* NOT FOR BROWSER END */
64
+ get type() {
65
+ return 'include';
66
+ }
67
+ /* NOT FOR BROWSER */
68
+ get innerText() {
69
+ return this.selfClosing ? undefined : this.lastChild.data;
70
+ }
71
+ set innerText(text) {
72
+ if (text === undefined) {
73
+ this.selfClosing = true;
74
+ }
75
+ else {
76
+ this.selfClosing = false;
77
+ this.setText(text);
78
+ }
79
+ }
80
+ /* NOT FOR BROWSER END */
81
+ /**
82
+ * @param name 标签名
83
+ * @param attr 标签属性
84
+ * @param inner 内部wikitext
85
+ * @param closed 是否封闭
86
+ */
87
+ constructor(name, attr = '', inner, closed, config, accum) {
88
+ super(name, attr, inner ?? '', inner === undefined ? closed : closed ?? '', config, accum);
89
+ }
90
+ /** @private */
91
+ lint(start = this.getAbsoluteIndex()) {
92
+ if (this.closed) {
93
+ return [];
94
+ }
95
+ const e = (0, lint_1.generateForSelf)(this, { start }, 'unclosed-comment', index_1.default.msg('unclosed $1', `<${this.name}>`));
96
+ e.suggestions = [
97
+ {
98
+ desc: 'close',
99
+ range: [e.endIndex, e.endIndex],
100
+ text: `</${this.name}>`,
101
+ },
102
+ ];
103
+ return [e];
104
+ }
105
+ /* NOT FOR BROWSER */
106
+ cloneNode() {
107
+ const tags = this.getAttribute('tags'), config = this.getAttribute('config'), { innerText } = this, closing = this.selfClosing || !this.closed ? undefined : tags[1];
108
+ // @ts-expect-error abstract class
109
+ return debug_1.Shadow.run(() => new IncludeToken(tags[0], this.firstChild.data, innerText, closing, config));
110
+ }
111
+ /**
112
+ * @override
113
+ * @param str 新文本
114
+ */
115
+ setText(str) {
116
+ return super.setText(str, 1);
117
+ }
118
+ /** 清除标签属性 */
119
+ removeAttr() {
120
+ super.setText('');
121
+ }
122
+ };
123
+ return IncludeToken = _classThis;
124
+ })();
125
+ exports.IncludeToken = IncludeToken;
126
+ constants_1.classes['IncludeToken'] = __filename;
@@ -0,0 +1,23 @@
1
+ import { Token } from '../index';
2
+ import type { Config } from '../../base';
3
+ import type { AstNodes } from '../../lib/node';
4
+ /** 成对标签 */
5
+ export declare abstract class TagPairToken extends Token {
6
+ #private;
7
+ readonly name: string;
8
+ closed: boolean;
9
+ selfClosing: boolean;
10
+ abstract get type(): 'ext' | 'include';
11
+ readonly childNodes: readonly [AstNodes, AstNodes];
12
+ abstract get firstChild(): AstNodes;
13
+ abstract get lastChild(): AstNodes;
14
+ /** 内部wikitext */
15
+ get innerText(): string | undefined;
16
+ /**
17
+ * @param name 标签名
18
+ * @param attr 标签属性
19
+ * @param inner 内部wikitext
20
+ * @param closed 是否封闭;约定`undefined`表示自封闭,`''`表示未闭合
21
+ */
22
+ constructor(name: string, attr: string | Token, inner: string | Token, closed?: string, config?: Config, accum?: Token[]);
23
+ }
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
3
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
4
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
5
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
6
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
7
+ var _, done = false;
8
+ for (var i = decorators.length - 1; i >= 0; i--) {
9
+ var context = {};
10
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
11
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
12
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
13
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
14
+ if (kind === "accessor") {
15
+ if (result === void 0) continue;
16
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
17
+ if (_ = accept(result.get)) descriptor.get = _;
18
+ if (_ = accept(result.set)) descriptor.set = _;
19
+ if (_ = accept(result.init)) initializers.unshift(_);
20
+ }
21
+ else if (_ = accept(result)) {
22
+ if (kind === "field") initializers.unshift(_);
23
+ else descriptor[key] = _;
24
+ }
25
+ }
26
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
27
+ done = true;
28
+ };
29
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
30
+ var useValue = arguments.length > 2;
31
+ for (var i = 0; i < initializers.length; i++) {
32
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
33
+ }
34
+ return useValue ? value : void 0;
35
+ };
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.TagPairToken = void 0;
38
+ const constants_1 = require("../../util/constants");
39
+ const fixed_1 = require("../../mixin/fixed");
40
+ const index_1 = require("../../index");
41
+ const index_2 = require("../index");
42
+ /** 成对标签 */
43
+ let TagPairToken = (() => {
44
+ let _classDecorators = [fixed_1.fixedToken];
45
+ let _classDescriptor;
46
+ let _classExtraInitializers = [];
47
+ let _classThis;
48
+ let _classSuper = index_2.Token;
49
+ var TagPairToken = class extends _classSuper {
50
+ static { _classThis = this; }
51
+ static {
52
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
53
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
54
+ TagPairToken = _classThis = _classDescriptor.value;
55
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
56
+ __runInitializers(_classThis, _classExtraInitializers);
57
+ }
58
+ #tags;
59
+ closed;
60
+ selfClosing;
61
+ /* NOT FOR BROWSER END */
62
+ /** 内部wikitext */
63
+ get innerText() {
64
+ return this.selfClosing ? undefined : this.lastChild.text();
65
+ }
66
+ /**
67
+ * @param name 标签名
68
+ * @param attr 标签属性
69
+ * @param inner 内部wikitext
70
+ * @param closed 是否封闭;约定`undefined`表示自封闭,`''`表示未闭合
71
+ */
72
+ constructor(name, attr, inner, closed, config, accum = []) {
73
+ super(undefined, config);
74
+ this.setAttribute('name', name.toLowerCase());
75
+ this.#tags = [name, closed || name];
76
+ this.closed = closed !== '';
77
+ this.selfClosing = closed === undefined;
78
+ this.append(attr, inner);
79
+ const index = typeof attr === 'string' ? -1 : accum.indexOf(attr);
80
+ accum.splice(index === -1 ? Infinity : index, 0, this);
81
+ }
82
+ /** @private */
83
+ toString() {
84
+ const { selfClosing, firstChild, lastChild,
85
+ /* NOT FOR BROWSER */
86
+ nextSibling, name, closed, } = this, [opening, closing] = this.#tags;
87
+ /* NOT FOR BROWSER */
88
+ if (!closed && nextSibling) {
89
+ index_1.default.error(`Auto-closing <${name}>`, lastChild);
90
+ this.closed = true;
91
+ }
92
+ /* NOT FOR BROWSER END */
93
+ return selfClosing
94
+ ? `<${opening}${firstChild.toString()}/>`
95
+ : `<${opening}${firstChild.toString()}>${lastChild.toString()}${this.closed ? `</${closing}>` : ''}`;
96
+ }
97
+ /** @private */
98
+ text() {
99
+ const [opening, closing] = this.#tags;
100
+ return this.selfClosing
101
+ ? `<${opening}${this.firstChild.text()}/>`
102
+ : `<${opening}${super.text('>')}${this.closed ? `</${closing}>` : ''}`;
103
+ }
104
+ /** @private */
105
+ getAttribute(key) {
106
+ /* NOT FOR BROWSER */
107
+ if (key === 'tags') {
108
+ return this.#tags;
109
+ }
110
+ /* NOT FOR BROWSER END */
111
+ return key === 'padding' ? this.#tags[0].length + 1 : super.getAttribute(key);
112
+ }
113
+ /** @private */
114
+ getGaps() {
115
+ return 1;
116
+ }
117
+ /** @private */
118
+ print() {
119
+ const [opening, closing] = this.#tags;
120
+ return super.print(this.selfClosing
121
+ ? { pre: `&lt;${opening}`, post: '/&gt;' }
122
+ : { pre: `&lt;${opening}`, sep: '&gt;', post: this.closed ? `&lt;/${closing}&gt;` : '' });
123
+ }
124
+ };
125
+ return TagPairToken = _classThis;
126
+ })();
127
+ exports.TagPairToken = TagPairToken;
128
+ constants_1.classes['TagPairToken'] = __filename;
@@ -0,0 +1,159 @@
1
+ import Parser from '../index';
2
+ import { Token } from './index';
3
+ import { ParameterToken } from './parameter';
4
+ import { AtomToken } from './atom';
5
+ import { SyntaxToken } from './syntax';
6
+ import type { LintError } from '../base';
7
+ /**
8
+ * 模板或魔术字
9
+ * @classdesc `{childNodes: [AtomToken|SyntaxToken, ...AtomToken, ...ParameterToken]}`
10
+ */
11
+ export declare abstract class TranscludeToken extends Token {
12
+ #private;
13
+ readonly modifier: string;
14
+ readonly name: string;
15
+ readonly childNodes: readonly [AtomToken | SyntaxToken, ...ParameterToken[]] | readonly [SyntaxToken, AtomToken, AtomToken, ...ParameterToken[]];
16
+ abstract get firstChild(): AtomToken | SyntaxToken;
17
+ abstract get lastChild(): AtomToken | SyntaxToken | ParameterToken;
18
+ abstract get children(): [AtomToken | SyntaxToken, ...ParameterToken[]] | [SyntaxToken, AtomToken, AtomToken, ...ParameterToken[]];
19
+ abstract get firstElementChild(): AtomToken | SyntaxToken;
20
+ abstract get lastElementChild(): AtomToken | SyntaxToken | ParameterToken;
21
+ get type(): 'template' | 'magic-word';
22
+ /** 是否存在重复参数 */
23
+ get duplication(): boolean;
24
+ set duplication(duplication: boolean);
25
+ /**
26
+ * @param title 模板标题或魔术字
27
+ * @param parts 参数各部分
28
+ * @throws `SyntaxError` 非法的模板名称
29
+ */
30
+ constructor(title: string, parts: ([string] | [string | number, string])[], config?: Parser.Config, accum?: Token[]);
31
+ /**
32
+ * 设置引用修饰符
33
+ * @param modifier 引用修饰符
34
+ */
35
+ setModifier(modifier: string): boolean;
36
+ /** 是否是模板或模块 */
37
+ isTemplate(): boolean;
38
+ /**
39
+ * @override
40
+ * @param token 待插入的子节点
41
+ * @param i 插入位置
42
+ */
43
+ insertAt<T extends ParameterToken>(token: T, i?: number): T;
44
+ /** 获取所有参数 */
45
+ getAllArgs(): ParameterToken[];
46
+ /** 获取所有匿名参数 */
47
+ getAnonArgs(): ParameterToken[];
48
+ /**
49
+ * 获取指定参数
50
+ * @param key 参数名
51
+ * @param exact 是否匹配匿名性
52
+ * @param copy 是否返回一个备份
53
+ */
54
+ getArgs(key: string | number, exact?: boolean, copy?: boolean): Set<ParameterToken>;
55
+ /**
56
+ * 获取重名参数
57
+ * @throws `Error` 仅用于模板
58
+ */
59
+ getDuplicatedArgs(): [string, ParameterToken[]][];
60
+ /**
61
+ * 对特定魔术字获取可能的取值
62
+ * @throws `Error` 不是可接受的魔术字
63
+ */
64
+ getPossibleValues(): Token[];
65
+ cloneNode(): this;
66
+ /** 替换引用 */
67
+ subst(): void;
68
+ /** 安全的替换引用 */
69
+ safesubst(): void;
70
+ /**
71
+ * @override
72
+ * @param i 移除位置
73
+ */
74
+ removeAt(i: number): ParameterToken;
75
+ /**
76
+ * 是否具有某参数
77
+ * @param key 参数名
78
+ * @param exact 是否匹配匿名性
79
+ */
80
+ hasArg(key: string | number, exact?: boolean): boolean;
81
+ /**
82
+ * 获取生效的指定参数
83
+ * @param key 参数名
84
+ * @param exact 是否匹配匿名性
85
+ */
86
+ getArg(key: string | number, exact?: boolean): ParameterToken | undefined;
87
+ /**
88
+ * 移除指定参数
89
+ * @param key 参数名
90
+ * @param exact 是否匹配匿名性
91
+ */
92
+ removeArg(key: string | number, exact?: boolean): void;
93
+ /** 获取所有参数名 */
94
+ getKeys(): string[];
95
+ /**
96
+ * 获取参数值
97
+ * @param key 参数名
98
+ */
99
+ getValues(key: string | number): string[];
100
+ /**
101
+ * 获取生效的参数值
102
+ * @param key 参数名
103
+ */
104
+ getValue(): Record<string, string>;
105
+ getValue(key: string | number): string | undefined;
106
+ /**
107
+ * 插入匿名参数
108
+ * @param val 参数值
109
+ */
110
+ newAnonArg(val: string): ParameterToken;
111
+ /**
112
+ * 设置参数值
113
+ * @param key 参数名
114
+ * @param value 参数值
115
+ * @throws `Error` 仅用于模板
116
+ */
117
+ setValue(key: string, value: string): void;
118
+ /**
119
+ * 将匿名参数改写为命名参数
120
+ * @throws `Error` 仅用于模板
121
+ */
122
+ anonToNamed(): void;
123
+ /**
124
+ * 替换模板名
125
+ * @param title 模板名
126
+ * @throws `Error` 仅用于模板
127
+ */
128
+ replaceTemplate(title: string): void;
129
+ /**
130
+ * 替换模块名
131
+ * @param title 模块名
132
+ * @throws `Error` 仅用于模块
133
+ */
134
+ replaceModule(title: string): void;
135
+ /**
136
+ * 替换模块函数
137
+ * @param func 模块函数名
138
+ * @throws `Error` 仅用于模块
139
+ * @throws `Error` 尚未指定模块名称
140
+ */
141
+ replaceFunction(func: string): void;
142
+ /**
143
+ * 重复参数计数
144
+ * @throws `Error` 仅用于模板
145
+ */
146
+ hasDuplicatedArgs(): number;
147
+ /**
148
+ * 修复重名参数:
149
+ * `aggressive = false`时只移除空参数和全同参数,优先保留匿名参数,否则将所有匿名参数更改为命名。
150
+ * `aggressive = true`时还会尝试处理连续的以数字编号的参数。
151
+ * @param aggressive 是否使用有更大风险的修复手段
152
+ */
153
+ fixDuplication(aggressive?: boolean): string[];
154
+ /**
155
+ * 转义模板内的表格
156
+ * @throws `Error` 转义失败
157
+ */
158
+ escapeTables(): TranscludeToken;
159
+ }