wikiparser-node 1.29.1 → 1.30.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.
- package/bundle/bundle-es8.min.js +29 -26
- package/bundle/bundle-lsp.min.js +31 -28
- package/bundle/bundle.min.js +23 -23
- package/dist/addon/token.js +3 -2
- package/dist/addon/transclude.js +19 -2
- package/dist/base.d.mts +1 -1
- package/dist/base.d.ts +1 -1
- package/dist/base.js +1 -0
- package/dist/base.mjs +1 -0
- package/dist/bin/config.js +1 -1
- package/dist/index.js +13 -13
- package/dist/lib/attributes.js +0 -1
- package/dist/lib/document.js +2 -2
- package/dist/lib/element.js +5 -7
- package/dist/lib/lintConfig.js +7 -0
- package/dist/lib/lsp.d.ts +0 -1
- package/dist/lib/lsp.js +2 -5
- package/dist/lib/node.js +6 -8
- package/dist/lib/text.js +53 -10
- package/dist/lib/title.js +1 -1
- package/dist/mixin/attributesParent.d.ts +0 -1
- package/dist/mixin/attributesParent.js +2 -4
- package/dist/mixin/elementLike.js +2 -4
- package/dist/mixin/fixed.js +0 -2
- package/dist/mixin/gapped.js +0 -2
- package/dist/mixin/hidden.js +1 -3
- package/dist/mixin/noEscape.js +1 -3
- package/dist/mixin/nodeLike.js +2 -4
- package/dist/mixin/padded.js +5 -9
- package/dist/mixin/singleLine.js +0 -2
- package/dist/mixin/sol.js +0 -2
- package/dist/mixin/syntax.js +0 -2
- package/dist/parser/commentAndExt.js +1 -1
- package/dist/parser/quotes.js +20 -8
- package/dist/parser/table.js +1 -2
- package/dist/src/arg.js +3 -5
- package/dist/src/attribute.js +10 -10
- package/dist/src/attributes.js +4 -4
- package/dist/src/commented.js +0 -1
- package/dist/src/converter.js +1 -2
- package/dist/src/converterFlags.js +1 -1
- package/dist/src/converterRule.js +1 -2
- package/dist/src/extLink.js +1 -1
- package/dist/src/heading.d.ts +8 -0
- package/dist/src/heading.js +25 -2
- package/dist/src/imageParameter.js +4 -6
- package/dist/src/index.d.ts +0 -2
- package/dist/src/index.js +1 -3
- package/dist/src/link/base.js +4 -5
- package/dist/src/link/category.js +2 -2
- package/dist/src/link/file.js +7 -7
- package/dist/src/link/galleryImage.d.ts +0 -2
- package/dist/src/link/galleryImage.js +1 -3
- package/dist/src/link/index.js +2 -2
- package/dist/src/link/redirectTarget.js +1 -1
- package/dist/src/magicLink.js +3 -3
- package/dist/src/multiLine/gallery.js +5 -5
- package/dist/src/multiLine/imagemap.js +1 -1
- package/dist/src/multiLine/paramTag.js +1 -1
- package/dist/src/nested.js +1 -1
- package/dist/src/nowiki/comment.js +1 -1
- package/dist/src/nowiki/dd.d.ts +3 -0
- package/dist/src/nowiki/doubleUnderscore.d.ts +3 -0
- package/dist/src/nowiki/hr.d.ts +3 -0
- package/dist/src/nowiki/index.js +2 -2
- package/dist/src/nowiki/list.d.ts +5 -0
- package/dist/src/nowiki/list.js +30 -0
- package/dist/src/nowiki/listBase.js +2 -2
- package/dist/src/nowiki/noinclude.d.ts +2 -1
- package/dist/src/nowiki/noinclude.js +26 -1
- package/dist/src/nowiki/quote.d.ts +21 -0
- package/dist/src/nowiki/quote.js +59 -2
- package/dist/src/parameter.js +3 -3
- package/dist/src/pre.js +1 -1
- package/dist/src/redirect.js +1 -1
- package/dist/src/syntax.js +1 -1
- package/dist/src/table/base.js +1 -1
- package/dist/src/table/index.d.ts +0 -4
- package/dist/src/table/index.js +9 -10
- package/dist/src/table/td.js +6 -6
- package/dist/src/table/trBase.js +2 -4
- package/dist/src/tag/html.js +2 -2
- package/dist/src/tag/index.js +2 -3
- package/dist/src/tagPair/ext.js +1 -1
- package/dist/src/tagPair/include.js +1 -1
- package/dist/src/transclude.d.ts +4 -8
- package/dist/src/transclude.js +11 -17
- package/dist/util/html.js +1 -3
- package/extensions/dist/base.js +2 -2
- package/i18n/en.json +2 -0
- package/i18n/zh-hans.json +2 -0
- package/i18n/zh-hant.json +2 -0
- package/package.json +26 -25
package/dist/mixin/hidden.js
CHANGED
|
@@ -46,7 +46,6 @@ const cached_1 = require("./cached");
|
|
|
46
46
|
* @param html 是否覆写 toHtml 方法
|
|
47
47
|
*/
|
|
48
48
|
const hiddenToken = (linter = true, html = true) => (constructor) => {
|
|
49
|
-
/* eslint-disable jsdoc/require-jsdoc */
|
|
50
49
|
let AnyHiddenToken = (() => {
|
|
51
50
|
let _classSuper = constructor;
|
|
52
51
|
let _instanceExtraInitializers = [];
|
|
@@ -63,7 +62,7 @@ const hiddenToken = (linter = true, html = true) => (constructor) => {
|
|
|
63
62
|
}
|
|
64
63
|
lint(start) {
|
|
65
64
|
// @ts-expect-error private argument
|
|
66
|
-
LINT: return linter ? [] : super.lint(start);
|
|
65
|
+
LINT: return linter ? [] : super.lint(start);
|
|
67
66
|
}
|
|
68
67
|
/* NOT FOR BROWSER */
|
|
69
68
|
dispatchEvent(e, data) {
|
|
@@ -79,7 +78,6 @@ const hiddenToken = (linter = true, html = true) => (constructor) => {
|
|
|
79
78
|
}
|
|
80
79
|
};
|
|
81
80
|
})();
|
|
82
|
-
/* eslint-enable jsdoc/require-jsdoc */
|
|
83
81
|
(0, debug_1.mixin)(AnyHiddenToken, constructor);
|
|
84
82
|
return AnyHiddenToken;
|
|
85
83
|
};
|
package/dist/mixin/noEscape.js
CHANGED
|
@@ -10,14 +10,12 @@ const constants_1 = require("../util/constants");
|
|
|
10
10
|
* @ignore
|
|
11
11
|
*/
|
|
12
12
|
const noEscape = (constructor) => {
|
|
13
|
-
LSP: {
|
|
14
|
-
/* eslint-disable jsdoc/require-jsdoc */
|
|
13
|
+
LSP: {
|
|
15
14
|
class NoEscapeToken extends constructor {
|
|
16
15
|
escape() {
|
|
17
16
|
//
|
|
18
17
|
}
|
|
19
18
|
}
|
|
20
|
-
/* eslint-enable jsdoc/require-jsdoc */
|
|
21
19
|
(0, debug_1.mixin)(NoEscapeToken, constructor);
|
|
22
20
|
return NoEscapeToken;
|
|
23
21
|
}
|
package/dist/mixin/nodeLike.js
CHANGED
|
@@ -6,7 +6,6 @@ const debug_1 = require("../util/debug");
|
|
|
6
6
|
const constants_1 = require("../util/constants");
|
|
7
7
|
/** @ignore */
|
|
8
8
|
const nodeLike = (constructor) => {
|
|
9
|
-
/* eslint-disable jsdoc/require-jsdoc */
|
|
10
9
|
class NodeLike extends constructor {
|
|
11
10
|
get firstChild() {
|
|
12
11
|
return this.childNodes[0];
|
|
@@ -15,13 +14,12 @@ const nodeLike = (constructor) => {
|
|
|
15
14
|
return this.childNodes[this.childNodes.length - 1];
|
|
16
15
|
}
|
|
17
16
|
get offsetHeight() {
|
|
18
|
-
LINT: return this.getDimension().height;
|
|
17
|
+
LINT: return this.getDimension().height;
|
|
19
18
|
}
|
|
20
19
|
get offsetWidth() {
|
|
21
|
-
LINT: return this.getDimension().width;
|
|
20
|
+
LINT: return this.getDimension().width;
|
|
22
21
|
}
|
|
23
22
|
}
|
|
24
|
-
/* eslint-enable jsdoc/require-jsdoc */
|
|
25
23
|
(0, debug_1.mixin)(NodeLike, constructor);
|
|
26
24
|
return NodeLike;
|
|
27
25
|
};
|
package/dist/mixin/padded.js
CHANGED
|
@@ -11,17 +11,13 @@ const constants_1 = require("../util/constants");
|
|
|
11
11
|
* @param padding.length
|
|
12
12
|
*/
|
|
13
13
|
const padded = ({ length }) => (constructor) => {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
getAttribute(key) {
|
|
18
|
-
return key === 'padding' ? length : super.getAttribute(key);
|
|
19
|
-
}
|
|
14
|
+
class PaddedToken extends constructor {
|
|
15
|
+
getAttribute(key) {
|
|
16
|
+
return key === 'padding' ? length : super.getAttribute(key);
|
|
20
17
|
}
|
|
21
|
-
/* eslint-enable jsdoc/require-jsdoc */
|
|
22
|
-
(0, debug_1.mixin)(PaddedToken, constructor);
|
|
23
|
-
return PaddedToken;
|
|
24
18
|
}
|
|
19
|
+
(0, debug_1.mixin)(PaddedToken, constructor);
|
|
20
|
+
return PaddedToken;
|
|
25
21
|
};
|
|
26
22
|
exports.padded = padded;
|
|
27
23
|
constants_1.mixins['padded'] = __filename;
|
package/dist/mixin/singleLine.js
CHANGED
|
@@ -8,7 +8,6 @@ const constants_1 = require("../util/constants");
|
|
|
8
8
|
* @ignore
|
|
9
9
|
*/
|
|
10
10
|
const singleLine = (constructor) => {
|
|
11
|
-
/* eslint-disable jsdoc/require-jsdoc */
|
|
12
11
|
class SingleLineToken extends constructor {
|
|
13
12
|
toString(skip) {
|
|
14
13
|
if (this.parentNode?.name === 'inputbox') {
|
|
@@ -25,7 +24,6 @@ const singleLine = (constructor) => {
|
|
|
25
24
|
return super.text().replaceAll('\n', ' ');
|
|
26
25
|
}
|
|
27
26
|
}
|
|
28
|
-
/* eslint-enable jsdoc/require-jsdoc */
|
|
29
27
|
(0, debug_1.mixin)(SingleLineToken, constructor);
|
|
30
28
|
return SingleLineToken;
|
|
31
29
|
};
|
package/dist/mixin/sol.js
CHANGED
|
@@ -8,7 +8,6 @@ const constants_1 = require("../util/constants");
|
|
|
8
8
|
* @param self 是否允许同类节点相邻
|
|
9
9
|
*/
|
|
10
10
|
const sol = (self) => (constructor) => {
|
|
11
|
-
/* eslint-disable jsdoc/require-jsdoc */
|
|
12
11
|
class SolToken extends constructor {
|
|
13
12
|
#prependNewLine() {
|
|
14
13
|
const { previousVisibleSibling, parentNode, type } = this;
|
|
@@ -36,7 +35,6 @@ const sol = (self) => (constructor) => {
|
|
|
36
35
|
return this.#prependNewLine() + super.text();
|
|
37
36
|
}
|
|
38
37
|
}
|
|
39
|
-
/* eslint-enable jsdoc/require-jsdoc */
|
|
40
38
|
(0, debug_1.mixin)(SolToken, constructor);
|
|
41
39
|
return SolToken;
|
|
42
40
|
};
|
package/dist/mixin/syntax.js
CHANGED
|
@@ -9,7 +9,6 @@ const string_1 = require("../util/string");
|
|
|
9
9
|
* @param pattern 语法正则
|
|
10
10
|
*/
|
|
11
11
|
const syntax = (pattern) => (constructor) => {
|
|
12
|
-
/* eslint-disable jsdoc/require-jsdoc */
|
|
13
12
|
class SyntaxToken extends constructor {
|
|
14
13
|
constructor(...args) {
|
|
15
14
|
super(...args); // eslint-disable-line @typescript-eslint/no-unsafe-argument
|
|
@@ -36,7 +35,6 @@ const syntax = (pattern) => (constructor) => {
|
|
|
36
35
|
}
|
|
37
36
|
}
|
|
38
37
|
}
|
|
39
|
-
/* eslint-enable jsdoc/require-jsdoc */
|
|
40
38
|
(0, debug_1.mixin)(SyntaxToken, constructor);
|
|
41
39
|
return SyntaxToken;
|
|
42
40
|
};
|
|
@@ -73,7 +73,7 @@ const parseCommentAndExt = (wikitext, config, accum, includeOnly) => {
|
|
|
73
73
|
wikitext = wikitext.replace(/<nowiki>[\s\S]*?<\/nowiki>/giu, m => {
|
|
74
74
|
stack.push(m);
|
|
75
75
|
return `\0${stack.length - 1}\x7F`;
|
|
76
|
-
}).replace(/<translate( nowrap)?>([\s\S]
|
|
76
|
+
}).replace(/<translate( nowrap)?>([\s\S]*?)<\/translate>/gu, (_, p1, p2) => {
|
|
77
77
|
const l = accum.length;
|
|
78
78
|
// @ts-expect-error abstract class
|
|
79
79
|
new translate_1.TranslateToken(p1, p2 && (0, string_1.restore)(p2, stack), newConfig, accum);
|
package/dist/parser/quotes.js
CHANGED
|
@@ -59,23 +59,35 @@ const parseQuotes = (wikitext, config, accum, tidy) => {
|
|
|
59
59
|
arr[i - 1] += `'`;
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
-
let bold =
|
|
62
|
+
let bold = false, italic = false;
|
|
63
63
|
for (let i = 1; i < length; i += 2) {
|
|
64
|
-
const n = arr[i].length, isBold = n !== 2, isItalic = n !== 3
|
|
64
|
+
const n = arr[i].length, isBold = n !== 2, isItalic = n !== 3,
|
|
65
|
+
// @ts-expect-error abstract class
|
|
66
|
+
token = new quote_1.QuoteToken(arr[i], { bold: isBold && Boolean(bold), italic: isItalic && Boolean(italic) }, config, accum);
|
|
65
67
|
if (isBold) {
|
|
66
|
-
|
|
68
|
+
/* NOT FOR BROWSER */
|
|
69
|
+
if (!tidy && bold) {
|
|
70
|
+
bold.setAttribute('bold', token);
|
|
71
|
+
token.setAttribute('bold', bold);
|
|
72
|
+
}
|
|
73
|
+
/* NOT FOR BROWSER END */
|
|
74
|
+
bold = !bold && token;
|
|
67
75
|
}
|
|
68
76
|
if (isItalic) {
|
|
69
|
-
|
|
77
|
+
/* NOT FOR BROWSER */
|
|
78
|
+
if (!tidy && italic) {
|
|
79
|
+
italic.setAttribute('italic', token);
|
|
80
|
+
token.setAttribute('italic', italic);
|
|
81
|
+
}
|
|
82
|
+
/* NOT FOR BROWSER END */
|
|
83
|
+
italic = !italic && token;
|
|
70
84
|
}
|
|
71
|
-
// @ts-expect-error abstract class
|
|
72
|
-
new quote_1.QuoteToken(arr[i], { bold: isBold && bold, italic: isItalic && italic }, config, accum);
|
|
73
85
|
arr[i] = `\0${accum.length - 1}q\x7F`;
|
|
74
86
|
}
|
|
75
87
|
/* NOT FOR BROWSER */
|
|
76
|
-
if (tidy && (
|
|
88
|
+
if (tidy && (bold || italic)) {
|
|
77
89
|
// @ts-expect-error abstract class
|
|
78
|
-
new quote_1.QuoteToken((bold ? '' :
|
|
90
|
+
new quote_1.QuoteToken((bold ? `'''` : '') + (italic ? `''` : ''), { bold, italic }, config, accum);
|
|
79
91
|
arr.push(`\0${accum.length - 1}q\x7F`);
|
|
80
92
|
}
|
|
81
93
|
/* NOT FOR BROWSER END */
|
package/dist/parser/table.js
CHANGED
|
@@ -74,8 +74,7 @@ const parseTable = ({ firstChild: { data }, type, name }, config, accum) => {
|
|
|
74
74
|
out += `\n${outLine}`;
|
|
75
75
|
continue;
|
|
76
76
|
}
|
|
77
|
-
const matches =
|
|
78
|
-
/^(?:(\|\}|\0\d+!\x7F\}|\0\d+\}\x7F)|(\|-+|\0\d+!\x7F-+|\0\d+-\x7F-*)(?!-)|(!|(?:\||\0\d+!\x7F)\+?))(.*)$/u
|
|
77
|
+
const matches = /^(?:(\|\}|\0\d+!\x7F\}|\0\d+\}\x7F)|(\|-+|\0\d+!\x7F-+|\0\d+-\x7F-*)(?!-)|(!|(?:\||\0\d+!\x7F)\+?))(.*)$/u
|
|
79
78
|
.exec(line);
|
|
80
79
|
if (!matches) {
|
|
81
80
|
push(`\n${outLine}`, top);
|
package/dist/src/arg.js
CHANGED
|
@@ -85,7 +85,7 @@ let ArgToken = (() => {
|
|
|
85
85
|
/* PRINT ONLY */
|
|
86
86
|
/** default value / 预设值 */
|
|
87
87
|
get default() {
|
|
88
|
-
LSP: return this.childNodes[1]?.text() ?? false;
|
|
88
|
+
LSP: return this.childNodes[1]?.text() ?? false;
|
|
89
89
|
}
|
|
90
90
|
/* PRINT ONLY END */
|
|
91
91
|
/* NOT FOR BROWSER */
|
|
@@ -131,12 +131,10 @@ let ArgToken = (() => {
|
|
|
131
131
|
}
|
|
132
132
|
/** 更新name */
|
|
133
133
|
#setName() {
|
|
134
|
-
// eslint-disable-next-line no-unused-labels
|
|
135
134
|
LSP: this.setAttribute('name', this.firstChild.text().trim());
|
|
136
135
|
}
|
|
137
136
|
/** @private */
|
|
138
137
|
afterBuild() {
|
|
139
|
-
// eslint-disable-next-line no-unused-labels
|
|
140
138
|
LSP: this.#setName();
|
|
141
139
|
super.afterBuild();
|
|
142
140
|
/* NOT FOR BROWSER */
|
|
@@ -149,7 +147,7 @@ let ArgToken = (() => {
|
|
|
149
147
|
}
|
|
150
148
|
/** @private */
|
|
151
149
|
lint(start = this.getAbsoluteIndex(), re) {
|
|
152
|
-
LINT: {
|
|
150
|
+
LINT: {
|
|
153
151
|
const { childNodes: [argName, argDefault, ...rest] } = this;
|
|
154
152
|
argName.setAttribute('aIndex', start + 3);
|
|
155
153
|
const errors = argName.lint(start + 3, re);
|
|
@@ -192,7 +190,7 @@ let ArgToken = (() => {
|
|
|
192
190
|
}
|
|
193
191
|
/** @private */
|
|
194
192
|
json(_, start = this.getAbsoluteIndex()) {
|
|
195
|
-
LSP: {
|
|
193
|
+
LSP: {
|
|
196
194
|
const json = super.json(undefined, start);
|
|
197
195
|
json['default'] = this.default;
|
|
198
196
|
return json;
|
package/dist/src/attribute.js
CHANGED
|
@@ -105,7 +105,7 @@ let AttributeToken = (() => {
|
|
|
105
105
|
}
|
|
106
106
|
/** whether the quotes are balanced / 引号是否匹配 */
|
|
107
107
|
get balanced() {
|
|
108
|
-
LINT: return !this.#equal || this.#quotes[0] === this.#quotes[1];
|
|
108
|
+
LINT: return !this.#equal || this.#quotes[0] === this.#quotes[1];
|
|
109
109
|
}
|
|
110
110
|
/* NOT FOR BROWSER */
|
|
111
111
|
set balanced(value) {
|
|
@@ -211,7 +211,7 @@ let AttributeToken = (() => {
|
|
|
211
211
|
#lint(start, rect) {
|
|
212
212
|
const { firstChild, lastChild, type, name, tag, parentNode } = this, simple = !lastChild.childNodes.some(({ type: t }) => complexTypes.has(t)), value = this.getValue(), attrs = sharable_1.extAttrs[tag], attrs2 = sharable_1.htmlAttrs[tag], { length } = this.toString();
|
|
213
213
|
let rule = 'illegal-attr', lintConfig, computeEditInfo;
|
|
214
|
-
LINT: {
|
|
214
|
+
LINT: {
|
|
215
215
|
({ lintConfig } = index_1.default);
|
|
216
216
|
({ computeEditInfo } = lintConfig);
|
|
217
217
|
}
|
|
@@ -229,7 +229,7 @@ let AttributeToken = (() => {
|
|
|
229
229
|
return true;
|
|
230
230
|
}
|
|
231
231
|
/* PRINT ONLY END */
|
|
232
|
-
LINT: {
|
|
232
|
+
LINT: {
|
|
233
233
|
const s = lintConfig.getSeverity(rule, 'unknown');
|
|
234
234
|
if (s) {
|
|
235
235
|
const e = (0, lint_1.generateForChild)(firstChild, rect, rule, 'illegal-attribute-name', s);
|
|
@@ -246,7 +246,7 @@ let AttributeToken = (() => {
|
|
|
246
246
|
return true;
|
|
247
247
|
}
|
|
248
248
|
/* PRINT ONLY END */
|
|
249
|
-
LINT: {
|
|
249
|
+
LINT: {
|
|
250
250
|
rule = 'insecure-style';
|
|
251
251
|
const s = lintConfig.getSeverity(rule);
|
|
252
252
|
return s && (0, lint_1.generateForChild)(lastChild, rect, rule, 'insecure-style', s);
|
|
@@ -258,7 +258,7 @@ let AttributeToken = (() => {
|
|
|
258
258
|
return true;
|
|
259
259
|
}
|
|
260
260
|
/* PRINT ONLY END */
|
|
261
|
-
LINT: {
|
|
261
|
+
LINT: {
|
|
262
262
|
const s = lintConfig.getSeverity(rule, 'tabindex');
|
|
263
263
|
if (s) {
|
|
264
264
|
const e = (0, lint_1.generateForChild)(lastChild, rect, rule, 'nonzero-tabindex', s);
|
|
@@ -282,7 +282,7 @@ let AttributeToken = (() => {
|
|
|
282
282
|
return true;
|
|
283
283
|
}
|
|
284
284
|
/* PRINT ONLY END */
|
|
285
|
-
LINT: {
|
|
285
|
+
LINT: {
|
|
286
286
|
const s = lintConfig.getSeverity(rule, 'value');
|
|
287
287
|
return s && (0, lint_1.generateForChild)(lastChild, rect, rule, 'illegal-attribute-value', s);
|
|
288
288
|
}
|
|
@@ -295,7 +295,7 @@ let AttributeToken = (() => {
|
|
|
295
295
|
return true;
|
|
296
296
|
}
|
|
297
297
|
/* PRINT ONLY END */
|
|
298
|
-
LINT: {
|
|
298
|
+
LINT: {
|
|
299
299
|
const s = lintConfig.getSeverity(rule, 'value');
|
|
300
300
|
return s && (0, lint_1.generateForChild)(lastChild, rect, rule, 'illegal-attribute-value', s);
|
|
301
301
|
}
|
|
@@ -305,7 +305,7 @@ let AttributeToken = (() => {
|
|
|
305
305
|
}
|
|
306
306
|
/** @private */
|
|
307
307
|
lint(start = this.getAbsoluteIndex(), re) {
|
|
308
|
-
LINT: {
|
|
308
|
+
LINT: {
|
|
309
309
|
const errors = super.lint(start, re), { balanced, firstChild, lastChild, name, tag } = this, rect = new rect_1.BoundingRect(this, start), rules = ['unclosed-quote', 'obsolete-attr'], { lintConfig } = index_1.default, s = rules.map(rule => lintConfig.getSeverity(rule, name));
|
|
310
310
|
if (s[0] && !balanced) {
|
|
311
311
|
const e = (0, lint_1.generateForChild)(lastChild, rect, rules[0], 'unclosed-quotes', s[0]);
|
|
@@ -359,7 +359,7 @@ let AttributeToken = (() => {
|
|
|
359
359
|
return this.#equal ? this.lastChild.text().trim() : this.type === 'ext-attr' || '';
|
|
360
360
|
}
|
|
361
361
|
escape() {
|
|
362
|
-
LSP: {
|
|
362
|
+
LSP: {
|
|
363
363
|
if (this.type !== 'ext-attr') {
|
|
364
364
|
this.#equal = '{{=}}';
|
|
365
365
|
this.lastChild.escape();
|
|
@@ -378,7 +378,7 @@ let AttributeToken = (() => {
|
|
|
378
378
|
}
|
|
379
379
|
/** @private */
|
|
380
380
|
json(_, start = this.getAbsoluteIndex()) {
|
|
381
|
-
LSP: {
|
|
381
|
+
LSP: {
|
|
382
382
|
const json = super.json(undefined, start);
|
|
383
383
|
json['tag'] = this.tag;
|
|
384
384
|
return json;
|
package/dist/src/attributes.js
CHANGED
|
@@ -230,7 +230,7 @@ let AttributesToken = (() => {
|
|
|
230
230
|
* @param key attribute name / 属性名
|
|
231
231
|
*/
|
|
232
232
|
getAttrToken(key) {
|
|
233
|
-
LINT: {
|
|
233
|
+
LINT: {
|
|
234
234
|
const tokens = this.getAttrTokens(key);
|
|
235
235
|
return tokens[tokens.length - 1];
|
|
236
236
|
}
|
|
@@ -242,7 +242,7 @@ let AttributesToken = (() => {
|
|
|
242
242
|
* @param key attribute name / 属性键
|
|
243
243
|
*/
|
|
244
244
|
getAttr(key) {
|
|
245
|
-
LINT: return this.getAttrToken(key)?.getValue();
|
|
245
|
+
LINT: return this.getAttrToken(key)?.getValue();
|
|
246
246
|
}
|
|
247
247
|
/** 是否位于闭合标签内 */
|
|
248
248
|
#lint() {
|
|
@@ -251,7 +251,7 @@ let AttributesToken = (() => {
|
|
|
251
251
|
}
|
|
252
252
|
/** @private */
|
|
253
253
|
lint(start = this.getAbsoluteIndex(), re) {
|
|
254
|
-
LINT: {
|
|
254
|
+
LINT: {
|
|
255
255
|
const errors = super.lint(start, re), { parentNode, childNodes } = this, attrs = new Map(), duplicated = new Set(), rect = new rect_1.BoundingRect(this, start), rules = ['no-ignored', 'no-duplicate'], { lintConfig } = index_1.default, { computeEditInfo, fix } = lintConfig, s = ['closingTag', 'invalidAttributes', 'nonWordAttributes']
|
|
256
256
|
.map(k => lintConfig.getSeverity(rules[0], k));
|
|
257
257
|
if (s[0] && this.#lint()) {
|
|
@@ -313,7 +313,7 @@ let AttributesToken = (() => {
|
|
|
313
313
|
}
|
|
314
314
|
}
|
|
315
315
|
escape() {
|
|
316
|
-
LSP: {
|
|
316
|
+
LSP: {
|
|
317
317
|
if (this.type !== 'ext-attrs') {
|
|
318
318
|
super.escape();
|
|
319
319
|
}
|
package/dist/src/commented.js
CHANGED
|
@@ -85,7 +85,6 @@ let CommentedToken = (() => {
|
|
|
85
85
|
}
|
|
86
86
|
/** @private */
|
|
87
87
|
lint(start = this.getAbsoluteIndex()) {
|
|
88
|
-
// eslint-disable-next-line no-unused-labels
|
|
89
88
|
LINT: return super.lint(start, new RegExp(String.raw `<\s*(?:\/\s*)?(${this.name})\b`, 'giu'));
|
|
90
89
|
}
|
|
91
90
|
/* NOT FOR BROWSER */
|
package/dist/src/converter.js
CHANGED
|
@@ -101,8 +101,7 @@ let ConverterToken = (() => {
|
|
|
101
101
|
const [firstRule] = rules, hasColon = firstRule.includes(':'),
|
|
102
102
|
// @ts-expect-error abstract class
|
|
103
103
|
firstRuleToken = new converterRule_1.ConverterRuleToken(firstRule, hasColon, config, accum);
|
|
104
|
-
if (hasColon
|
|
105
|
-
|| !hasColon && rules.length === 2 && !(0, string_1.removeComment)(rules[1]).trim()) {
|
|
104
|
+
if (hasColon ? firstRuleToken.length === 1 : rules.length === 2 && !(0, string_1.removeComment)(rules[1]).trim()) {
|
|
106
105
|
this.insertAt(
|
|
107
106
|
// @ts-expect-error abstract class
|
|
108
107
|
new converterRule_1.ConverterRuleToken(rules.join(';'), false, config, accum));
|
|
@@ -151,7 +151,7 @@ let ConverterFlagsToken = (() => {
|
|
|
151
151
|
}
|
|
152
152
|
/** @private */
|
|
153
153
|
lint(start = this.getAbsoluteIndex(), re) {
|
|
154
|
-
LINT: {
|
|
154
|
+
LINT: {
|
|
155
155
|
const variantFlags = this.getVariantFlags(), unknownFlags = this.getUnknownFlags(), validFlags = new Set(this.#flags.filter(flag => definedFlags.has(flag))), emptyFlagCount = this.#flags.filter(flag => !flag).length, knownFlagCount = this.#flags.length - unknownFlags.size - emptyFlagCount, { lintConfig } = index_1.default, { computeEditInfo, fix } = lintConfig, errors = super.lint(start, re);
|
|
156
156
|
if (variantFlags.size === knownFlagCount || validFlags.size === knownFlagCount) {
|
|
157
157
|
return errors;
|
|
@@ -93,7 +93,6 @@ let ConverterRuleToken = (() => {
|
|
|
93
93
|
/* PRINT ONLY */
|
|
94
94
|
/** language variant / 语言变体 */
|
|
95
95
|
get variant() {
|
|
96
|
-
// eslint-disable-next-line no-unused-labels
|
|
97
96
|
LSP: return this.childNodes[this.length - 2]?.text().trim().toLowerCase() ?? '';
|
|
98
97
|
}
|
|
99
98
|
/* PRINT ONLY END */
|
|
@@ -192,7 +191,7 @@ let ConverterRuleToken = (() => {
|
|
|
192
191
|
}
|
|
193
192
|
/** @private */
|
|
194
193
|
json(_, start = this.getAbsoluteIndex()) {
|
|
195
|
-
LSP: {
|
|
194
|
+
LSP: {
|
|
196
195
|
const json = super.json(undefined, start);
|
|
197
196
|
json['variant'] = this.variant;
|
|
198
197
|
return json;
|
package/dist/src/extLink.js
CHANGED
|
@@ -157,7 +157,7 @@ let ExtLinkToken = (() => {
|
|
|
157
157
|
}
|
|
158
158
|
/** @private */
|
|
159
159
|
lint(start = this.getAbsoluteIndex(), re) {
|
|
160
|
-
LINT: {
|
|
160
|
+
LINT: {
|
|
161
161
|
const errors = super.lint(start, re), rule = 'var-anchor', s = index_1.default.lintConfig.getSeverity(rule, 'extLink');
|
|
162
162
|
if (s && this.length === 1 && this.closest('heading-title')) {
|
|
163
163
|
errors.push((0, lint_1.generateForSelf)(this, { start }, rule, 'variable-anchor', s));
|
package/dist/src/heading.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { Token } from './index';
|
|
|
2
2
|
import { SyntaxToken } from './syntax';
|
|
3
3
|
import type { Config, LintError, AST } from '../base';
|
|
4
4
|
import type { AstText } from '../internal';
|
|
5
|
+
import type { AstRange } from '../lib/range';
|
|
5
6
|
/**
|
|
6
7
|
* section heading
|
|
7
8
|
*
|
|
@@ -51,4 +52,11 @@ export declare abstract class HeadingToken extends Token {
|
|
|
51
52
|
* 移除标题后的不可见内容
|
|
52
53
|
*/
|
|
53
54
|
removeTrail(): void;
|
|
55
|
+
/**
|
|
56
|
+
* Get the section led by this heading
|
|
57
|
+
*
|
|
58
|
+
* 获取由此标题引导的章节
|
|
59
|
+
* @since v1.29.3
|
|
60
|
+
*/
|
|
61
|
+
section(): AstRange | undefined;
|
|
54
62
|
}
|
package/dist/src/heading.js
CHANGED
|
@@ -155,7 +155,7 @@ let HeadingToken = (() => {
|
|
|
155
155
|
}
|
|
156
156
|
/** @private */
|
|
157
157
|
lint(start = this.getAbsoluteIndex(), re) {
|
|
158
|
-
LINT: {
|
|
158
|
+
LINT: {
|
|
159
159
|
const errors = super.lint(start, re), { firstChild, level } = this, innerStr = firstChild.toString(), unbalancedStart = innerStr.startsWith('='), unbalanced = unbalancedStart || innerStr.endsWith('='), rect = new rect_1.BoundingRect(this, start), s = this.inHtmlAttrs(), rules = ['h1', 'unbalanced-header', 'format-leakage'], { lintConfig } = index_1.default, { computeEditInfo, fix } = lintConfig, severities = rules.map(rule => lintConfig.getSeverity(rule, 'apostrophe'));
|
|
160
160
|
if (severities[0] && this.level === 1) {
|
|
161
161
|
const e = (0, lint_1.generateForChild)(firstChild, rect, rules[0], '<h1>', severities[0]);
|
|
@@ -247,7 +247,7 @@ let HeadingToken = (() => {
|
|
|
247
247
|
}
|
|
248
248
|
/** @private */
|
|
249
249
|
json(_, start = this.getAbsoluteIndex()) {
|
|
250
|
-
LSP: {
|
|
250
|
+
LSP: {
|
|
251
251
|
const json = super.json(undefined, start);
|
|
252
252
|
json['level'] = this.level;
|
|
253
253
|
return json;
|
|
@@ -305,6 +305,29 @@ let HeadingToken = (() => {
|
|
|
305
305
|
}
|
|
306
306
|
return `<div class="mw-heading mw-heading${level}"><h${level} id="${(0, string_1.sanitizeId)(id)}">${firstChild.toHtmlInternal().trim()}</h${level}></div>`;
|
|
307
307
|
}
|
|
308
|
+
/**
|
|
309
|
+
* Get the section led by this heading
|
|
310
|
+
*
|
|
311
|
+
* 获取由此标题引导的章节
|
|
312
|
+
* @since v1.29.3
|
|
313
|
+
*/
|
|
314
|
+
section() {
|
|
315
|
+
const { parentNode, level } = this;
|
|
316
|
+
if (!parentNode) {
|
|
317
|
+
return undefined;
|
|
318
|
+
}
|
|
319
|
+
const range = this.createRange(), { childNodes, length } = parentNode;
|
|
320
|
+
let i = childNodes.indexOf(this);
|
|
321
|
+
range.setStart(parentNode, i);
|
|
322
|
+
for (i++; i < length; i++) {
|
|
323
|
+
const sibling = childNodes[i];
|
|
324
|
+
if (sibling.is('heading') && sibling.level <= level) {
|
|
325
|
+
break;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
range.setEnd(parentNode, i);
|
|
329
|
+
return range;
|
|
330
|
+
}
|
|
308
331
|
};
|
|
309
332
|
return HeadingToken = _classThis;
|
|
310
333
|
})();
|
|
@@ -101,7 +101,6 @@ function validate(key, val, config, halfParsed, ext) {
|
|
|
101
101
|
return Boolean(value) && !isNaN(value);
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
|
-
/* eslint-enable jsdoc/check-param-names */
|
|
105
104
|
/**
|
|
106
105
|
* image parameter
|
|
107
106
|
*
|
|
@@ -135,13 +134,13 @@ let ImageParameterToken = (() => {
|
|
|
135
134
|
* @since v1.29.0
|
|
136
135
|
*/
|
|
137
136
|
get thumb() {
|
|
138
|
-
LINT: return this.name === 'manualthumb'
|
|
137
|
+
LINT: return this.name === 'manualthumb'
|
|
139
138
|
? this.normalizeTitle(`File:${super.text().trim()}`, 6, { page: '' })
|
|
140
139
|
: undefined;
|
|
141
140
|
}
|
|
142
141
|
/** image link / 图片链接 */
|
|
143
142
|
get link() {
|
|
144
|
-
LINT: {
|
|
143
|
+
LINT: {
|
|
145
144
|
if (this.name !== 'link') {
|
|
146
145
|
return undefined;
|
|
147
146
|
}
|
|
@@ -287,7 +286,7 @@ let ImageParameterToken = (() => {
|
|
|
287
286
|
}
|
|
288
287
|
/** @private */
|
|
289
288
|
lint(start = this.getAbsoluteIndex(), re) {
|
|
290
|
-
LINT: {
|
|
289
|
+
LINT: {
|
|
291
290
|
const errors = super.lint(start, re), { lintConfig } = index_1.default, { computeEditInfo, fix } = lintConfig, { link, name } = this, value = name === 'width' && this.getValue();
|
|
292
291
|
if (name === 'invalid' || value && value.endsWith('px')) {
|
|
293
292
|
const rule = 'invalid-gallery', s = lintConfig.getSeverity(rule, 'parameter');
|
|
@@ -339,7 +338,7 @@ let ImageParameterToken = (() => {
|
|
|
339
338
|
}
|
|
340
339
|
/** 是否是不可变参数 */
|
|
341
340
|
#isVoid() {
|
|
342
|
-
LINT: return this.#syntax && !this.#syntax.includes('$1');
|
|
341
|
+
LINT: return this.#syntax && !this.#syntax.includes('$1');
|
|
343
342
|
}
|
|
344
343
|
/**
|
|
345
344
|
* Get the parameter value
|
|
@@ -347,7 +346,6 @@ let ImageParameterToken = (() => {
|
|
|
347
346
|
* 获取参数值
|
|
348
347
|
*/
|
|
349
348
|
getValue() {
|
|
350
|
-
// eslint-disable-next-line no-unused-labels
|
|
351
349
|
LINT: return this.name === 'invalid' ? this.text() : this.#isVoid() || super.text();
|
|
352
350
|
}
|
|
353
351
|
/** @private */
|
package/dist/src/index.d.ts
CHANGED
|
@@ -60,7 +60,6 @@ export declare class Token extends AstElement {
|
|
|
60
60
|
* @param options options / 选项
|
|
61
61
|
* @param options.selfClosing whether to be a self-closing tag / 是否自封闭
|
|
62
62
|
* @param options.closing whether to be a closing tag / 是否是闭合标签
|
|
63
|
-
* @throws `RangeError` 非法的标签名
|
|
64
63
|
*/
|
|
65
64
|
createElement(tagName: string, options?: {
|
|
66
65
|
selfClosing?: boolean;
|
|
@@ -110,7 +109,6 @@ export declare class Token extends AstElement {
|
|
|
110
109
|
*
|
|
111
110
|
* 获取指定的外层HTML标签
|
|
112
111
|
* @param tag HTML tag name / HTML标签名
|
|
113
|
-
* @throws `RangeError` 非法的标签或空标签
|
|
114
112
|
*/
|
|
115
113
|
findEnclosingHtml(tag?: string): AstRange | undefined;
|
|
116
114
|
/**
|
package/dist/src/index.js
CHANGED
|
@@ -541,7 +541,7 @@ let Token = (() => {
|
|
|
541
541
|
}
|
|
542
542
|
/** @private */
|
|
543
543
|
lint(start = this.getAbsoluteIndex(), re) {
|
|
544
|
-
LINT: {
|
|
544
|
+
LINT: {
|
|
545
545
|
const { lintConfig } = index_1.default, { computeEditInfo, fix: needFix, ignoreDisables, configurationComment } = lintConfig;
|
|
546
546
|
let errors = super.lint(start, re);
|
|
547
547
|
if (this.type === 'root') {
|
|
@@ -763,7 +763,6 @@ let Token = (() => {
|
|
|
763
763
|
* @param options options / 选项
|
|
764
764
|
* @param options.selfClosing whether to be a self-closing tag / 是否自封闭
|
|
765
765
|
* @param options.closing whether to be a closing tag / 是否是闭合标签
|
|
766
|
-
* @throws `RangeError` 非法的标签名
|
|
767
766
|
*/
|
|
768
767
|
createElement(tagName, options) {
|
|
769
768
|
require('../addon/token');
|
|
@@ -843,7 +842,6 @@ let Token = (() => {
|
|
|
843
842
|
*
|
|
844
843
|
* 获取指定的外层HTML标签
|
|
845
844
|
* @param tag HTML tag name / HTML标签名
|
|
846
|
-
* @throws `RangeError` 非法的标签或空标签
|
|
847
845
|
*/
|
|
848
846
|
findEnclosingHtml(tag) {
|
|
849
847
|
require('../addon/token');
|
package/dist/src/link/base.js
CHANGED
|
@@ -87,13 +87,12 @@ let LinkBaseToken = (() => {
|
|
|
87
87
|
/* NOT FOR BROWSER END */
|
|
88
88
|
/** full link / 完整链接 */
|
|
89
89
|
get link() {
|
|
90
|
-
// eslint-disable-next-line no-unused-labels
|
|
91
90
|
LSP: return this.#title;
|
|
92
91
|
}
|
|
93
92
|
/* PRINT ONLY */
|
|
94
93
|
/** 片段标识符 */
|
|
95
94
|
get fragment() {
|
|
96
|
-
LSP: return this.#title.fragment;
|
|
95
|
+
LSP: return this.#title.fragment;
|
|
97
96
|
}
|
|
98
97
|
/* PRINT ONLY END */
|
|
99
98
|
/* NOT FOR BROWSER */
|
|
@@ -214,7 +213,7 @@ let LinkBaseToken = (() => {
|
|
|
214
213
|
}
|
|
215
214
|
/** @private */
|
|
216
215
|
lint(start = this.getAbsoluteIndex(), re) {
|
|
217
|
-
LINT: {
|
|
216
|
+
LINT: {
|
|
218
217
|
const errors = super.lint(start, re), { childNodes: [target, linkText], type } = this, { encoded, fragment } = this.#title, { lintConfig } = index_1.default, { computeEditInfo, fix } = lintConfig, rect = new rect_1.BoundingRect(this, start);
|
|
219
218
|
let rule = 'unknown-page', s = lintConfig.getSeverity(rule);
|
|
220
219
|
if (s && target.childNodes.some(({ type: t }) => t === 'template')) {
|
|
@@ -267,7 +266,7 @@ let LinkBaseToken = (() => {
|
|
|
267
266
|
}
|
|
268
267
|
/** @private */
|
|
269
268
|
json(_, start = this.getAbsoluteIndex()) {
|
|
270
|
-
LSP: {
|
|
269
|
+
LSP: {
|
|
271
270
|
const json = super.json(undefined, start), { type, fragment } = this;
|
|
272
271
|
if (fragment !== undefined && (type === 'link' || type === 'redirect-target')) {
|
|
273
272
|
json['fragment'] = fragment;
|
|
@@ -293,7 +292,7 @@ let LinkBaseToken = (() => {
|
|
|
293
292
|
*/
|
|
294
293
|
setTarget(link) {
|
|
295
294
|
const { childNodes } = index_1.default.parseWithRef(link, this, 2), token = debug_1.Shadow.run(() => new atom_1.AtomToken(undefined, 'link-target', this.getAttribute('config'), [], { 'Stage-2': ':', '!ExtToken': '', '!HeadingToken': '' }));
|
|
296
|
-
token.
|
|
295
|
+
token.concat(childNodes); // eslint-disable-line unicorn/prefer-spread
|
|
297
296
|
this.firstChild.safeReplaceWith(token);
|
|
298
297
|
}
|
|
299
298
|
/**
|
|
@@ -20,7 +20,7 @@ class CategoryToken extends base_1.LinkBaseToken {
|
|
|
20
20
|
/* PRINT ONLY */
|
|
21
21
|
/** sort key / 分类排序关键字 */
|
|
22
22
|
get sortkey() {
|
|
23
|
-
LSP: {
|
|
23
|
+
LSP: {
|
|
24
24
|
const { childNodes: [, child] } = this;
|
|
25
25
|
return child && (0, string_1.decodeHtml)(child.text());
|
|
26
26
|
}
|
|
@@ -33,7 +33,7 @@ class CategoryToken extends base_1.LinkBaseToken {
|
|
|
33
33
|
/* NOT FOR BROWSER END */
|
|
34
34
|
/** @private */
|
|
35
35
|
json(_, start = this.getAbsoluteIndex()) {
|
|
36
|
-
LSP: {
|
|
36
|
+
LSP: {
|
|
37
37
|
const json = super.json(undefined, start), { sortkey } = this;
|
|
38
38
|
if (sortkey) {
|
|
39
39
|
json['sortkey'] = sortkey;
|