wikiparser-node 1.27.0 → 1.28.1

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 (112) hide show
  1. package/bundle/bundle-es8.min.js +25 -25
  2. package/bundle/bundle-lsp.min.js +29 -29
  3. package/bundle/bundle.min.js +24 -25
  4. package/config/default.json +15 -16
  5. package/config/jawiki.json +15 -16
  6. package/dist/addon/token.js +1 -1
  7. package/dist/base.d.mts +2 -2
  8. package/dist/base.d.ts +2 -2
  9. package/dist/base.js +1 -0
  10. package/dist/base.mjs +1 -0
  11. package/dist/bin/config.js +11 -11
  12. package/dist/index.d.ts +2 -1
  13. package/dist/index.js +2 -3
  14. package/dist/internal.d.ts +5 -5
  15. package/dist/lib/lintConfig.js +7 -5
  16. package/dist/lib/lsp.d.ts +1 -1
  17. package/dist/lib/lsp.js +5 -2
  18. package/dist/lib/node.js +51 -40
  19. package/dist/mixin/attributesParent.js +59 -57
  20. package/dist/mixin/elementLike.js +77 -75
  21. package/dist/mixin/hidden.js +3 -3
  22. package/dist/mixin/nodeLike.js +2 -2
  23. package/dist/mixin/padded.js +9 -7
  24. package/dist/mixin/singleLine.d.ts +1 -1
  25. package/dist/mixin/singleLine.js +10 -11
  26. package/dist/parser/commentAndExt.js +5 -2
  27. package/dist/parser/hrAndDoubleUnderscore.js +9 -8
  28. package/dist/parser/html.js +1 -1
  29. package/dist/parser/selector.js +2 -1
  30. package/dist/src/arg.js +4 -5
  31. package/dist/src/atom.d.ts +1 -1
  32. package/dist/src/atom.js +0 -1
  33. package/dist/src/attribute.d.ts +5 -7
  34. package/dist/src/attribute.js +18 -8
  35. package/dist/src/attributes.d.ts +7 -8
  36. package/dist/src/attributes.js +5 -3
  37. package/dist/src/commented.d.ts +3 -3
  38. package/dist/src/converterRule.js +1 -1
  39. package/dist/src/heading.js +1 -1
  40. package/dist/src/imageParameter.d.ts +0 -8
  41. package/dist/src/imageParameter.js +56 -25
  42. package/dist/src/imagemapLink.js +1 -1
  43. package/dist/src/index.d.ts +0 -5
  44. package/dist/src/index.js +2 -5
  45. package/dist/src/link/base.js +1 -2
  46. package/dist/src/link/category.js +1 -2
  47. package/dist/src/link/file.js +9 -11
  48. package/dist/src/link/galleryImage.d.ts +0 -3
  49. package/dist/src/link/galleryImage.js +3 -2
  50. package/dist/src/link/index.js +1 -1
  51. package/dist/src/magicLink.d.ts +0 -7
  52. package/dist/src/magicLink.js +12 -1
  53. package/dist/src/multiLine/gallery.d.ts +49 -0
  54. package/dist/src/{gallery.js → multiLine/gallery.js} +24 -37
  55. package/dist/src/multiLine/imagemap.d.ts +25 -0
  56. package/dist/src/{imagemap.js → multiLine/imagemap.js} +20 -36
  57. package/dist/src/multiLine/index.d.ts +17 -0
  58. package/dist/src/multiLine/index.js +36 -0
  59. package/dist/src/{paramTag → multiLine}/inputbox.d.ts +1 -1
  60. package/dist/src/{paramTag → multiLine}/inputbox.js +2 -2
  61. package/dist/src/multiLine/paramTag.d.ts +20 -0
  62. package/dist/src/{paramTag/index.js → multiLine/paramTag.js} +10 -24
  63. package/dist/src/nowiki/base.d.ts +1 -1
  64. package/dist/src/nowiki/comment.js +2 -0
  65. package/dist/src/nowiki/commentLine.d.ts +11 -0
  66. package/dist/src/nowiki/commentLine.js +67 -0
  67. package/dist/src/nowiki/doubleUnderscore.d.ts +2 -1
  68. package/dist/src/nowiki/doubleUnderscore.js +10 -4
  69. package/dist/src/nowiki/listBase.js +1 -2
  70. package/dist/src/nowiki/noinclude.d.ts +6 -0
  71. package/dist/src/nowiki/noinclude.js +19 -4
  72. package/dist/src/nowiki/quote.js +2 -2
  73. package/dist/src/paramLine.d.ts +17 -0
  74. package/dist/src/paramLine.js +83 -0
  75. package/dist/src/parameter.d.ts +0 -1
  76. package/dist/src/parameter.js +2 -1
  77. package/dist/src/pre.d.ts +6 -8
  78. package/dist/src/pre.js +3 -2
  79. package/dist/src/syntax.d.ts +1 -1
  80. package/dist/src/table/base.d.ts +6 -1
  81. package/dist/src/table/base.js +96 -46
  82. package/dist/src/table/index.js +70 -66
  83. package/dist/src/table/td.d.ts +2 -2
  84. package/dist/src/table/td.js +8 -7
  85. package/dist/src/table/tr.d.ts +2 -2
  86. package/dist/src/table/trBase.d.ts +0 -5
  87. package/dist/src/table/trBase.js +4 -5
  88. package/dist/src/{html.d.ts → tag/html.d.ts} +6 -22
  89. package/dist/src/{html.js → tag/html.js} +43 -131
  90. package/dist/src/tag/index.d.ts +44 -0
  91. package/dist/src/tag/index.js +214 -0
  92. package/dist/src/tag/tvar.d.ts +38 -0
  93. package/dist/src/tag/tvar.js +169 -0
  94. package/dist/src/tagPair/ext.js +14 -7
  95. package/dist/src/tagPair/include.js +1 -1
  96. package/dist/src/tagPair/index.d.ts +1 -1
  97. package/dist/src/tagPair/index.js +1 -0
  98. package/dist/src/tagPair/translate.js +10 -10
  99. package/dist/src/transclude.d.ts +8 -9
  100. package/dist/src/transclude.js +8 -5
  101. package/dist/util/constants.js +1 -1
  102. package/extensions/dist/base.js +1 -1
  103. package/extensions/ui.css +1 -1
  104. package/i18n/en.json +2 -0
  105. package/i18n/zh-hans.json +2 -0
  106. package/i18n/zh-hant.json +2 -0
  107. package/package.json +5 -5
  108. package/dist/mixin/multiLine.d.ts +0 -4
  109. package/dist/mixin/multiLine.js +0 -33
  110. package/dist/src/gallery.d.ts +0 -66
  111. package/dist/src/imagemap.d.ts +0 -49
  112. package/dist/src/paramTag/index.d.ts +0 -28
@@ -0,0 +1,214 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.TagToken = void 0;
41
+ const lint_1 = require("../../util/lint");
42
+ const debug_1 = require("../../util/debug");
43
+ const index_1 = __importDefault(require("../../index"));
44
+ const index_2 = require("../index");
45
+ /* NOT FOR BROWSER */
46
+ const constants_1 = require("../../util/constants");
47
+ const fixed_1 = require("../../mixin/fixed");
48
+ /* NOT FOR BROWSER END */
49
+ /**
50
+ * HTML tag
51
+ *
52
+ * HTML标签
53
+ * @classdesc `{childNodes: [AttributesToken]}`
54
+ */
55
+ let TagToken = (() => {
56
+ let _classDecorators = [fixed_1.fixedToken];
57
+ let _classDescriptor;
58
+ let _classExtraInitializers = [];
59
+ let _classThis;
60
+ let _classSuper = index_2.Token;
61
+ var TagToken = class extends _classSuper {
62
+ static { _classThis = this; }
63
+ static {
64
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
65
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
66
+ TagToken = _classThis = _classDescriptor.value;
67
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
68
+ __runInitializers(_classThis, _classExtraInitializers);
69
+ }
70
+ #closing;
71
+ #tag;
72
+ #match;
73
+ /* NOT FOR BROWSER END */
74
+ /** whether to be a closing tag / 是否是闭合标签 */
75
+ get closing() {
76
+ return this.#closing;
77
+ }
78
+ /* NOT FOR BROWSER */
79
+ set closing(value) {
80
+ this.#closing = Boolean(value);
81
+ }
82
+ /** @private */
83
+ get tag() {
84
+ return this.#tag;
85
+ }
86
+ /** @private */
87
+ set tag(value) {
88
+ this.#tag = value;
89
+ }
90
+ /* NOT FOR BROWSER END */
91
+ /**
92
+ * @param tag 标签名
93
+ * @param attr 标签属性
94
+ * @param closing 是否闭合
95
+ */
96
+ constructor(tag, attr, closing, config, accum) {
97
+ super(undefined, config, accum);
98
+ this.insertAt(attr);
99
+ this.#closing = closing;
100
+ this.#tag = tag;
101
+ }
102
+ /** @private */
103
+ toString(skip) {
104
+ return `<${this.#closing ? '/' : ''}${this.#tag}${super.toString(skip)}${this.selfClosing ? '/' : ''}>`;
105
+ }
106
+ /** @private */
107
+ text(separator = '') {
108
+ const { closing } = this;
109
+ return `<${closing && !separator ? '/' : ''}${this.#tag}${closing ? '' : super.text()}${separator}>`;
110
+ }
111
+ /** @private */
112
+ getAttribute(key) {
113
+ return key === 'padding'
114
+ ? this.#tag.length + (this.#closing ? 2 : 1)
115
+ : super.getAttribute(key);
116
+ }
117
+ /**
118
+ * Find the matching tag
119
+ *
120
+ * 搜索匹配的标签
121
+ */
122
+ findMatchingTag() {
123
+ LINT: return (0, lint_1.cache)(// eslint-disable-line no-unused-labels
124
+ this.#match, () => {
125
+ const { type, name, parentNode, closing, selfClosing,
126
+ /* NOT FOR BROWSER */
127
+ legacy, } = this;
128
+ let isVoid = false, isFlexible = false;
129
+ if (type === 'html') {
130
+ const { html: [, flexibleTags, voidTags] } = this.getAttribute('config');
131
+ isVoid = voidTags.includes(name);
132
+ isFlexible = flexibleTags.includes(name);
133
+ }
134
+ if (isVoid || isFlexible && selfClosing) { // 自封闭标签
135
+ return this;
136
+ }
137
+ else /* istanbul ignore if */ if (!parentNode) {
138
+ return undefined;
139
+ }
140
+ const { childNodes } = parentNode, i = childNodes.indexOf(this), siblings = closing ? childNodes.slice(0, i).reverse() : childNodes.slice(i + 1), stack = [this], { rev } = debug_1.Shadow;
141
+ for (const token of siblings) {
142
+ if (!token.is(type)
143
+ || type === 'html' && (token.name !== name || isFlexible && token.selfClosing)
144
+ || type === 'tvar' && token.legacy !== legacy) {
145
+ continue;
146
+ }
147
+ else if (token.#closing === closing) {
148
+ /* istanbul ignore if */
149
+ if (type === 'tvar') {
150
+ return undefined;
151
+ }
152
+ stack.push(token);
153
+ }
154
+ else {
155
+ const top = stack.pop();
156
+ if (top === this) {
157
+ return token;
158
+ }
159
+ if (index_1.default.viewOnly) {
160
+ top.#match = [rev, token];
161
+ token.#match = [rev, top];
162
+ }
163
+ }
164
+ }
165
+ if (index_1.default.viewOnly) {
166
+ for (const token of stack) {
167
+ token.#match = [rev, undefined];
168
+ }
169
+ }
170
+ return undefined;
171
+ }, value => {
172
+ this.#match = value;
173
+ if (value[1] && value[1] !== this) {
174
+ value[1].#match = [debug_1.Shadow.rev, this];
175
+ }
176
+ });
177
+ }
178
+ /** @private */
179
+ print() {
180
+ return super.print({
181
+ pre: `&lt;${this.#closing ? '/' : ''}${this.#tag}`,
182
+ post: `${this.selfClosing ? '/' : ''}&gt;`,
183
+ });
184
+ }
185
+ /** @private */
186
+ json(_, start = this.getAbsoluteIndex()) {
187
+ LSP: { // eslint-disable-line no-unused-labels
188
+ const json = super.json(undefined, start);
189
+ json['closing'] = this.#closing;
190
+ return json;
191
+ }
192
+ }
193
+ /* NOT FOR BROWSER */
194
+ /**
195
+ * Get the range of the tag pair
196
+ *
197
+ * 获取标签对的范围
198
+ * @since v1.23.0
199
+ */
200
+ getRange() {
201
+ const matched = this.findMatchingTag();
202
+ if (!matched || matched === this) {
203
+ return undefined;
204
+ }
205
+ const { closing } = this, range = this.createRange();
206
+ range.setStartAfter(closing ? matched : this);
207
+ range.setEndBefore(closing ? this : matched);
208
+ return range;
209
+ }
210
+ };
211
+ return TagToken = _classThis;
212
+ })();
213
+ exports.TagToken = TagToken;
214
+ constants_1.classes['TagToken'] = __filename;
@@ -0,0 +1,38 @@
1
+ import { TagToken } from './index';
2
+ import { SyntaxToken } from '../syntax';
3
+ import type { Config } from '../../base';
4
+ import type { Token } from '../../internal';
5
+ /**
6
+ * `<tvar>`
7
+ * @classdesc `{childNodes: [SyntaxToken]}`
8
+ */
9
+ export declare abstract class TvarToken extends TagToken {
10
+ #private;
11
+ readonly childNodes: readonly [SyntaxToken];
12
+ abstract get firstChild(): SyntaxToken;
13
+ abstract get lastChild(): SyntaxToken;
14
+ abstract get children(): [SyntaxToken];
15
+ abstract get firstElementChild(): SyntaxToken;
16
+ abstract get lastElementChild(): SyntaxToken;
17
+ get type(): 'tvar';
18
+ /** whether to use the legacy syntax / 是否使用旧语法 */
19
+ get legacy(): boolean;
20
+ /**
21
+ * @param tag 标签名
22
+ * @param attr 标签属性
23
+ * @param closing 是否闭合
24
+ */
25
+ constructor(tag: string, attr: string, closing: boolean, config?: Config, accum?: Token[]);
26
+ afterBuild(): void;
27
+ cloneNode(): this;
28
+ /**
29
+ * Set the tvar name.
30
+ *
31
+ * 设置tvar变量名。
32
+ * @param name name / 变量名
33
+ * @since v1.28.0
34
+ * @throws `Error` 闭合标签
35
+ * @throws `SyntaxError` 同时包含单引号和双引号
36
+ */
37
+ setName(name: string): void;
38
+ }
@@ -0,0 +1,169 @@
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.TvarToken = void 0;
38
+ const hidden_1 = require("../../mixin/hidden");
39
+ const index_1 = require("./index");
40
+ const syntax_1 = require("../syntax");
41
+ /* NOT FOR BROWSER */
42
+ const constants_1 = require("../../util/constants");
43
+ const debug_1 = require("../../util/debug");
44
+ const legacyPattern = /^\|([^>]+)$/u, newPattern = /^\s+name\s*=(?:\s*(?:(["'])([\s\S]*?)\1|([^"'\s>]+)))?\s*$/iu, legacyClosingPattern = /^$/u, newClosingPattern = /^\s*$/u;
45
+ /* NOT FOR BROWSER END */
46
+ /**
47
+ * `<tvar>`
48
+ * @classdesc `{childNodes: [SyntaxToken]}`
49
+ */
50
+ let TvarToken = (() => {
51
+ let _classDecorators = [(0, hidden_1.hiddenToken)()];
52
+ let _classDescriptor;
53
+ let _classExtraInitializers = [];
54
+ let _classThis;
55
+ let _classSuper = index_1.TagToken;
56
+ var TvarToken = class extends _classSuper {
57
+ static { _classThis = this; }
58
+ static {
59
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
60
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
61
+ TvarToken = _classThis = _classDescriptor.value;
62
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
63
+ __runInitializers(_classThis, _classExtraInitializers);
64
+ }
65
+ /* NOT FOR BROWSER END */
66
+ get type() {
67
+ return 'tvar';
68
+ }
69
+ /* NOT FOR BROWSER */
70
+ /** @private */
71
+ get closing() {
72
+ return super.closing;
73
+ }
74
+ /** whether to use the legacy syntax / 是否使用旧语法 */
75
+ get legacy() {
76
+ const { pattern } = this.firstChild;
77
+ return pattern === legacyPattern || pattern === legacyClosingPattern;
78
+ }
79
+ /* NOT FOR BROWSER END */
80
+ /**
81
+ * @param tag 标签名
82
+ * @param attr 标签属性
83
+ * @param closing 是否闭合
84
+ */
85
+ constructor(tag, attr, closing, config, accum) {
86
+ /* NOT FOR BROWSER */
87
+ let pattern;
88
+ if (closing) {
89
+ pattern = tag ? newClosingPattern : legacyClosingPattern;
90
+ }
91
+ else {
92
+ pattern = legacyPattern.test(attr) ? legacyPattern : newPattern;
93
+ }
94
+ /* NOT FOR BROWSER END */
95
+ const attrToken = new syntax_1.SyntaxToken(attr, pattern, 'tvar-name', config, accum, { AstText: ':' });
96
+ super(tag, attrToken, closing, config, accum);
97
+ /* NOT FOR BROWSER */
98
+ if (!closing) {
99
+ this.#setName(attr, pattern);
100
+ }
101
+ }
102
+ /* NOT FOR BROWSER */
103
+ /**
104
+ * 设置name
105
+ * @param attr 标签属性
106
+ * @param pattern 标签属性模式
107
+ */
108
+ #setName(attr, pattern) {
109
+ let name;
110
+ if (pattern === legacyPattern) {
111
+ [, name] = legacyPattern.exec(attr);
112
+ }
113
+ else {
114
+ const mt = newPattern.exec(attr);
115
+ name = mt[2] ?? mt[3];
116
+ }
117
+ this.setAttribute('name', name);
118
+ }
119
+ afterBuild() {
120
+ super.afterBuild();
121
+ if (!this.closing) {
122
+ const /** @implements */ tvarListener = ({ prevTarget }) => {
123
+ const { firstChild } = this;
124
+ if (prevTarget === firstChild) {
125
+ const { pattern } = firstChild, attr = firstChild.toString();
126
+ if (pattern.test(attr)) {
127
+ this.#setName(attr, pattern);
128
+ }
129
+ }
130
+ };
131
+ this.addEventListener(['remove', 'insert', 'replace', 'text'], tvarListener);
132
+ }
133
+ }
134
+ cloneNode() {
135
+ const config = this.getAttribute('config');
136
+ // @ts-expect-error abstract class
137
+ return debug_1.Shadow.run(() => new TvarToken(this.tag, this.firstChild.toString(), this.closing, config));
138
+ }
139
+ /**
140
+ * Set the tvar name.
141
+ *
142
+ * 设置tvar变量名。
143
+ * @param name name / 变量名
144
+ * @since v1.28.0
145
+ * @throws `Error` 闭合标签
146
+ * @throws `SyntaxError` 同时包含单引号和双引号
147
+ */
148
+ setName(name) {
149
+ const { closing, firstChild } = this;
150
+ /* istanbul ignore if */
151
+ if (closing) {
152
+ throw new Error('Cannot set name of a closing tvar tag');
153
+ }
154
+ else if (firstChild.pattern === legacyPattern) {
155
+ firstChild.replaceChildren(`|${name}`);
156
+ }
157
+ else /* istanbul ignore if */ if (name.includes('"') && name.includes("'")) {
158
+ throw new SyntaxError('Tvar name cannot contain both single and double quotes');
159
+ }
160
+ else {
161
+ const quote = name.includes('"') ? "'" : '"';
162
+ firstChild.replaceChildren(` name=${quote}${name}${quote}`);
163
+ }
164
+ }
165
+ };
166
+ return TvarToken = _classThis;
167
+ })();
168
+ exports.TvarToken = TvarToken;
169
+ constants_1.classes['TvarToken'] = __filename;
@@ -122,13 +122,13 @@ let ExtToken = (() => {
122
122
  break;
123
123
  }
124
124
  case 'dynamicpagelist': {
125
- const { ParamTagToken } = require('../paramTag/index');
125
+ const { ParamTagToken } = require('../multiLine/paramTag');
126
126
  // @ts-expect-error abstract class
127
127
  innerToken = new ParamTagToken(include, inner, newConfig, accum);
128
128
  break;
129
129
  }
130
130
  case 'inputbox': {
131
- const { InputboxToken } = require('../paramTag/inputbox');
131
+ const { InputboxToken } = require('../multiLine/inputbox');
132
132
  // @ts-expect-error abstract class
133
133
  innerToken = new InputboxToken(include, inner, newConfig, accum);
134
134
  break;
@@ -156,13 +156,13 @@ let ExtToken = (() => {
156
156
  break;
157
157
  }
158
158
  case 'gallery': {
159
- const { GalleryToken } = require('../gallery');
159
+ const { GalleryToken } = require('../multiLine/gallery');
160
160
  // @ts-expect-error abstract class
161
161
  innerToken = new GalleryToken(inner, newConfig, accum);
162
162
  break;
163
163
  }
164
164
  case 'imagemap': {
165
- const { ImagemapToken } = require('../imagemap');
165
+ const { ImagemapToken } = require('../multiLine/imagemap');
166
166
  // @ts-expect-error abstract class
167
167
  innerToken = new ImagemapToken(inner, newConfig, accum);
168
168
  break;
@@ -206,9 +206,16 @@ let ExtToken = (() => {
206
206
  errors.push((0, lint_1.generateForSelf)(this, rect, rule, 'ext-in-html', severity));
207
207
  }
208
208
  }
209
- const rule = 'var-anchor', s = lintConfig.getSeverity(rule, 'ref');
210
- if (s && this.name === 'ref' && this.closest('heading-title')) {
211
- errors.push((0, lint_1.generateForSelf)(this, rect, rule, 'variable-anchor', s));
209
+ if (this.name === 'ref') {
210
+ let rule = 'var-anchor', s = lintConfig.getSeverity(rule, 'ref');
211
+ if (s && this.closest('heading-title')) {
212
+ errors.push((0, lint_1.generateForSelf)(this, rect, rule, 'variable-anchor', s));
213
+ }
214
+ rule = 'nested-link';
215
+ s = lintConfig.getSeverity(rule, 'ref');
216
+ if (s && this.closest('link,ext-link-text')) {
217
+ errors.push((0, lint_1.generateForSelf)(this, rect, rule, 'ref-in-link', s));
218
+ }
212
219
  }
213
220
  return errors;
214
221
  }
@@ -74,7 +74,7 @@ let IncludeToken = (() => {
74
74
  }
75
75
  /* NOT FOR BROWSER */
76
76
  get innerText() {
77
- return this.selfClosing ? undefined : this.lastChild.data;
77
+ return super.innerText;
78
78
  }
79
79
  set innerText(text) {
80
80
  if (text === undefined) {
@@ -1,6 +1,6 @@
1
1
  import { Token } from '../index';
2
2
  import type { Config } from '../../base';
3
- import type { AstNodes } from '../../lib/node';
3
+ import type { AstNodes } from '../../internal';
4
4
  /**
5
5
  * Paired tags
6
6
  *
@@ -95,6 +95,7 @@ let TagPairToken = (() => {
95
95
  /* NOT FOR BROWSER */
96
96
  nextSibling, name, closed, type, } = this, [opening, closing] = this.#tags;
97
97
  /* NOT FOR BROWSER */
98
+ /* istanbul ignore next */
98
99
  if (!closed && nextSibling && type === 'include') {
99
100
  index_2.default.error(`Auto-closing <${name}>`, lastChild);
100
101
  this.closed = true;
@@ -38,7 +38,7 @@ exports.TranslateToken = void 0;
38
38
  const index_1 = require("../index");
39
39
  const index_2 = require("./index");
40
40
  const syntax_1 = require("../syntax");
41
- const noinclude_1 = require("../nowiki/noinclude");
41
+ const tvar_1 = require("../tag/tvar");
42
42
  /* NOT FOR BROWSER */
43
43
  const debug_1 = require("../../util/debug");
44
44
  const constants_1 = require("../../util/constants");
@@ -70,18 +70,18 @@ let TranslateToken = (() => {
70
70
  */
71
71
  constructor(attr, inner, config, accum = []) {
72
72
  const attrToken = new syntax_1.SyntaxToken(attr, /^(?: nowrap)?$/u, 'translate-attr', config, accum, { AstText: ':' });
73
- inner = inner?.replace(/(<tvar\|[^>]+>)([\s\S]*?)(<\/>)/gu, (_, p1, p2, p3) => {
73
+ inner = inner?.replace(/<tvar(\|[^>]+)>([\s\S]*?)<\/>/gu, (_, p1, p2) => {
74
74
  // @ts-expect-error abstract class
75
- new noinclude_1.NoincludeToken(p1, config, accum);
75
+ new tvar_1.TvarToken('tvar', p1, false, config, accum);
76
76
  // @ts-expect-error abstract class
77
- new noinclude_1.NoincludeToken(p3, config, accum);
78
- return `\0${accum.length - 1}n\x7F${p2}\0${accum.length}n\x7F`;
79
- }).replace(/(<tvar\s+name\s*=(?:\s*(?:(["'])[\s\S]*?\2|[^"'\s>]+))?\s*>)([\s\S]*?)(<\/tvar\s*>)/giu, (_, p1, __, p3, p4) => {
77
+ new tvar_1.TvarToken('', '', true, config, accum);
78
+ return `\0${accum.length - 2}n\x7F${p2}\0${accum.length}n\x7F`;
79
+ }).replace(/<(tvar)(\s+name\s*=(?:\s*(?:(["'])[\s\S]*?\3|[^"'\s>]+))?\s*)>([\s\S]*?)<\/(tvar)(\s*)>/giu, (_, p1, p2, __, p3, p4, p5) => {
80
80
  // @ts-expect-error abstract class
81
- new noinclude_1.NoincludeToken(p1, config, accum);
81
+ new tvar_1.TvarToken(p1, p2, false, config, accum);
82
82
  // @ts-expect-error abstract class
83
- new noinclude_1.NoincludeToken(p4, config, accum);
84
- return `\0${accum.length - 1}n\x7F${p3}\0${accum.length}n\x7F`;
83
+ new tvar_1.TvarToken(p4, p5, true, config, accum);
84
+ return `\0${accum.length - 2}n\x7F${p3}\0${accum.length}n\x7F`;
85
85
  });
86
86
  const innerToken = new index_1.Token(inner, config, accum);
87
87
  innerToken.type = 'translate-inner';
@@ -119,7 +119,7 @@ let TranslateToken = (() => {
119
119
  * @param nowrap 是否nowrap
120
120
  */
121
121
  #setNowrap(nowrap) {
122
- this.firstChild.setText(nowrap ? ' nowrap' : '');
122
+ this.firstChild.replaceChildren(nowrap ? ' nowrap' : '');
123
123
  }
124
124
  /** @implements */
125
125
  getAttr(key) {
@@ -8,7 +8,6 @@ declare interface Frame {
8
8
  parent?: Frame | undefined;
9
9
  title: string;
10
10
  }
11
- declare type Child = AtomToken | SyntaxToken;
12
11
  /**
13
12
  * template or magic word
14
13
  *
@@ -19,12 +18,12 @@ export declare abstract class TranscludeToken extends Token {
19
18
  #private;
20
19
  readonly modifier: string;
21
20
  readonly name: string;
22
- readonly childNodes: readonly [Child, ...ParameterToken[]] | readonly [SyntaxToken, AtomToken, AtomToken, ...ParameterToken[]];
23
- abstract get firstChild(): Child;
24
- abstract get lastChild(): Child | ParameterToken;
25
- abstract get children(): [Child, ...ParameterToken[]] | [SyntaxToken, AtomToken, AtomToken, ...ParameterToken[]];
26
- abstract get firstElementChild(): Child;
27
- abstract get lastElementChild(): Child | ParameterToken;
21
+ readonly childNodes: readonly [AtomToken | SyntaxToken, ...ParameterToken[]] | readonly [SyntaxToken, AtomToken, AtomToken, ...ParameterToken[]];
22
+ abstract get firstChild(): AtomToken | SyntaxToken;
23
+ abstract get lastChild(): AtomToken | SyntaxToken | ParameterToken;
24
+ abstract get children(): [AtomToken | SyntaxToken, ...ParameterToken[]] | [SyntaxToken, AtomToken, AtomToken, ...ParameterToken[]];
25
+ abstract get firstElementChild(): AtomToken | SyntaxToken;
26
+ abstract get lastElementChild(): AtomToken | SyntaxToken | ParameterToken;
28
27
  get type(): 'template' | 'magic-word';
29
28
  /**
30
29
  * module name
@@ -246,8 +245,8 @@ export declare abstract class TranscludeToken extends Token {
246
245
  * Get the module name and module function name
247
246
  *
248
247
  * 获取模块名和模块函数名
249
- * @throws `Error` 仅用于模块
250
248
  * @since v1.16.4
249
+ * @throws `Error` 仅用于模块
251
250
  */
252
251
  getModule(): [string, string | undefined];
253
252
  /**
@@ -255,8 +254,8 @@ export declare abstract class TranscludeToken extends Token {
255
254
  *
256
255
  * 获取 [frame 对象](https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#frame-object)
257
256
  * @param context template calling this module / 调用该模块的模板
258
- * @throws `Error` 仅用于模块
259
257
  * @since v1.22.0
258
+ * @throws `Error` 仅用于模块
260
259
  */
261
260
  getFrame(context?: this): Frame;
262
261
  }
@@ -53,6 +53,7 @@ const syntax_1 = require("./syntax");
53
53
  /* NOT FOR BROWSER */
54
54
  const cached_1 = require("../mixin/cached");
55
55
  const basicMagicWords = new Map([['=', '='], ['!', '|']]);
56
+ /* NOT FOR BROWSER END */
56
57
  /**
57
58
  * template or magic word
58
59
  *
@@ -495,10 +496,12 @@ let TranscludeToken = (() => {
495
496
  * @throws `Error` 仅用于模板
496
497
  */
497
498
  getDuplicatedArgs() {
498
- if (this.isTemplate()) {
499
- return [...this.#args].filter(([, { size }]) => size > 1).map(([key, args]) => [key, [...args]]);
499
+ LINT: { // eslint-disable-line no-unused-labels
500
+ if (this.isTemplate()) {
501
+ return [...this.#args].filter(([, { size }]) => size > 1).map(([key, args]) => [key, [...args]]);
502
+ }
503
+ throw new Error('TranscludeToken.getDuplicatedArgs method is only for template!');
500
504
  }
501
- throw new Error('TranscludeToken.getDuplicatedArgs method is only for template!');
502
505
  }
503
506
  /**
504
507
  * Get possible values of some magic words
@@ -795,8 +798,8 @@ let TranscludeToken = (() => {
795
798
  * Get the module name and module function name
796
799
  *
797
800
  * 获取模块名和模块函数名
798
- * @throws `Error` 仅用于模块
799
801
  * @since v1.16.4
802
+ * @throws `Error` 仅用于模块
800
803
  */
801
804
  getModule() {
802
805
  /* istanbul ignore if */
@@ -810,8 +813,8 @@ let TranscludeToken = (() => {
810
813
  *
811
814
  * 获取 [frame 对象](https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#frame-object)
812
815
  * @param context template calling this module / 调用该模块的模板
813
- * @throws `Error` 仅用于模块
814
816
  * @since v1.22.0
817
+ * @throws `Error` 仅用于模块
815
818
  */
816
819
  getFrame(context) {
817
820
  /* istanbul ignore if */
@@ -15,7 +15,7 @@ exports.enMsg = (() => require('../../i18n/en.json'))();
15
15
  exports.classes = {}, exports.mixins = exports.classes, exports.parsers = exports.classes;
16
16
  exports.aliases = [
17
17
  ['AstText'],
18
- ['CommentToken', 'ExtToken', 'IncludeToken', 'NoincludeToken'],
18
+ ['CommentToken', 'ExtToken', 'IncludeToken', 'NoincludeToken', 'TranslateToken'],
19
19
  ['ArgToken', 'TranscludeToken', 'HeadingToken'],
20
20
  ['HtmlToken'],
21
21
  ['TableToken'],
@@ -1,6 +1,6 @@
1
1
  (() => {
2
2
  var _a;
3
- const version = '1.27.0', src = (_a = document.currentScript) === null || _a === void 0 ? void 0 : _a.src, file = /\/extensions\/dist\/base\.(?:min\.)?js$/u, CDN = src && file.test(src)
3
+ const version = '1.28.1', src = (_a = document.currentScript) === null || _a === void 0 ? void 0 : _a.src, file = /\/extensions\/dist\/base\.(?:min\.)?js$/u, CDN = src && file.test(src)
4
4
  ? src.replace(file, '')
5
5
  : `https://testingcf.jsdelivr.net/npm/wikiparser-node@${version}`;
6
6
  const workerJS = () => {