wikilint 2.7.1 → 2.9.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/dist/base.d.ts +2 -2
- package/dist/base.js +1 -0
- package/dist/index.d.ts +1 -3
- package/dist/index.js +7 -2
- package/dist/lib/element.d.ts +0 -6
- package/dist/lib/element.js +2 -6
- package/dist/lib/node.d.ts +1 -1
- package/dist/lib/node.js +1 -1
- package/dist/lib/text.d.ts +0 -6
- package/dist/lib/text.js +4 -8
- package/dist/parser/braces.js +10 -1
- package/dist/parser/externalLinks.js +1 -1
- package/dist/parser/magicLinks.js +34 -17
- package/dist/parser/table.js +1 -1
- package/dist/src/arg.d.ts +0 -2
- package/dist/src/arg.js +2 -2
- package/dist/src/attribute.d.ts +0 -2
- package/dist/src/attribute.js +2 -2
- package/dist/src/attributes.d.ts +0 -2
- package/dist/src/attributes.js +1 -1
- package/dist/src/converter.js +1 -1
- package/dist/src/converterFlags.d.ts +0 -2
- package/dist/src/converterFlags.js +1 -1
- package/dist/src/converterRule.js +1 -1
- package/dist/src/extLink.d.ts +0 -2
- package/dist/src/extLink.js +2 -2
- package/dist/src/gallery.d.ts +0 -2
- package/dist/src/gallery.js +2 -2
- package/dist/src/heading.d.ts +0 -2
- package/dist/src/heading.js +3 -3
- package/dist/src/html.d.ts +0 -2
- package/dist/src/html.js +2 -2
- package/dist/src/imageParameter.d.ts +0 -2
- package/dist/src/imageParameter.js +1 -1
- package/dist/src/imagemap.d.ts +0 -2
- package/dist/src/imagemap.js +2 -2
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +29 -15
- package/dist/src/link/base.d.ts +0 -2
- package/dist/src/link/base.js +1 -1
- package/dist/src/link/file.d.ts +0 -2
- package/dist/src/link/file.js +1 -1
- package/dist/src/link/galleryImage.d.ts +0 -2
- package/dist/src/link/galleryImage.js +2 -3
- package/dist/src/link/index.d.ts +0 -2
- package/dist/src/link/index.js +1 -1
- package/dist/src/link/redirectTarget.d.ts +0 -2
- package/dist/src/link/redirectTarget.js +3 -3
- package/dist/src/magicLink.d.ts +7 -5
- package/dist/src/magicLink.js +37 -5
- package/dist/src/nested.d.ts +0 -2
- package/dist/src/nested.js +3 -3
- package/dist/src/nowiki/comment.d.ts +0 -2
- package/dist/src/nowiki/comment.js +1 -1
- package/dist/src/nowiki/index.d.ts +0 -2
- package/dist/src/nowiki/index.js +1 -1
- package/dist/src/nowiki/quote.d.ts +0 -2
- package/dist/src/nowiki/quote.js +1 -1
- package/dist/src/paramTag/index.d.ts +0 -2
- package/dist/src/paramTag/index.js +2 -2
- package/dist/src/parameter.d.ts +0 -2
- package/dist/src/parameter.js +2 -2
- package/dist/src/pre.d.ts +0 -2
- package/dist/src/pre.js +1 -1
- package/dist/src/redirect.d.ts +0 -4
- package/dist/src/redirect.js +3 -3
- package/dist/src/syntax.d.ts +0 -2
- package/dist/src/syntax.js +1 -1
- package/dist/src/table/index.d.ts +0 -2
- package/dist/src/table/index.js +1 -1
- package/dist/src/table/td.d.ts +0 -2
- package/dist/src/table/td.js +2 -2
- package/dist/src/table/trBase.d.ts +0 -2
- package/dist/src/table/trBase.js +2 -2
- package/dist/src/tagPair/ext.d.ts +0 -2
- package/dist/src/tagPair/ext.js +1 -1
- package/dist/src/tagPair/include.d.ts +0 -2
- package/dist/src/tagPair/include.js +1 -1
- package/dist/src/tagPair/index.js +2 -2
- package/dist/src/transclude.d.ts +0 -2
- package/dist/src/transclude.js +2 -2
- package/dist/util/lint.js +1 -1
- package/dist/util/string.js +1 -1
- package/i18n/zh-hans.json +1 -0
- package/i18n/zh-hant.json +1 -0
- package/package.json +4 -4
package/dist/base.d.ts
CHANGED
|
@@ -11,8 +11,8 @@ export interface Config {
|
|
|
11
11
|
readonly variants: string[];
|
|
12
12
|
readonly excludes?: string[];
|
|
13
13
|
}
|
|
14
|
-
export type TokenTypes = 'root' | 'plain' | 'redirect' | 'redirect-syntax' | 'redirect-target' | 'onlyinclude' | 'noinclude' | 'include' | 'comment' | 'ext' | 'ext-attrs' | 'ext-attr-dirty' | 'ext-attr' | 'attr-key' | 'attr-value' | 'ext-inner' | 'arg' | 'arg-name' | 'arg-default' | 'hidden' | 'magic-word' | 'magic-word-name' | 'invoke-function' | 'invoke-module' | 'template' | 'template-name' | 'parameter' | 'parameter-key' | 'parameter-value' | 'heading' | 'heading-title' | 'heading-trail' | 'html' | 'html-attrs' | 'html-attr-dirty' | 'html-attr' | 'table' | 'tr' | 'td' | 'table-syntax' | 'table-attrs' | 'table-attr-dirty' | 'table-attr' | 'table-inter' | 'td-inner' | 'hr' | 'double-underscore' | 'link' | 'link-target' | 'link-text' | 'category' | 'file' | 'gallery-image' | 'imagemap-image' | 'image-parameter' | 'quote' | 'ext-link' | 'ext-link-text' | 'ext-link-url' | 'free-ext-link' | 'list' | 'dd' | 'converter' | 'converter-flags' | 'converter-flag' | 'converter-rule' | 'converter-rule-variant' | 'converter-rule-to' | 'converter-rule-from' | 'param-line' | 'imagemap-link';
|
|
15
|
-
export declare const rules: readonly ["bold-header", "format-leakage", "fostered-content", "h1", "illegal-attr", "insecure-style", "invalid-gallery", "invalid-imagemap", "invalid-invoke", "lonely-apos", "lonely-bracket", "lonely-http", "nested-link", "no-arg", "no-duplicate", "no-ignored", "obsolete-attr", "obsolete-tag", "parsing-order", "pipe-like", "table-layout", "tag-like", "unbalanced-header", "unclosed-comment", "unclosed-quote", "unclosed-table", "unescaped", "unknown-page", "unmatched-tag", "unterminated-url", "url-encoding", "var-anchor", "void-ext"];
|
|
14
|
+
export type TokenTypes = 'root' | 'plain' | 'redirect' | 'redirect-syntax' | 'redirect-target' | 'onlyinclude' | 'noinclude' | 'include' | 'comment' | 'ext' | 'ext-attrs' | 'ext-attr-dirty' | 'ext-attr' | 'attr-key' | 'attr-value' | 'ext-inner' | 'arg' | 'arg-name' | 'arg-default' | 'hidden' | 'magic-word' | 'magic-word-name' | 'invoke-function' | 'invoke-module' | 'template' | 'template-name' | 'parameter' | 'parameter-key' | 'parameter-value' | 'heading' | 'heading-title' | 'heading-trail' | 'html' | 'html-attrs' | 'html-attr-dirty' | 'html-attr' | 'table' | 'tr' | 'td' | 'table-syntax' | 'table-attrs' | 'table-attr-dirty' | 'table-attr' | 'table-inter' | 'td-inner' | 'hr' | 'double-underscore' | 'link' | 'link-target' | 'link-text' | 'category' | 'file' | 'gallery-image' | 'imagemap-image' | 'image-parameter' | 'quote' | 'ext-link' | 'ext-link-text' | 'ext-link-url' | 'free-ext-link' | 'magic-link' | 'list' | 'dd' | 'converter' | 'converter-flags' | 'converter-flag' | 'converter-rule' | 'converter-rule-variant' | 'converter-rule-to' | 'converter-rule-from' | 'param-line' | 'imagemap-link';
|
|
15
|
+
export declare const rules: readonly ["bold-header", "format-leakage", "fostered-content", "h1", "illegal-attr", "insecure-style", "invalid-gallery", "invalid-imagemap", "invalid-invoke", "invalid-isbn", "lonely-apos", "lonely-bracket", "lonely-http", "nested-link", "no-arg", "no-duplicate", "no-ignored", "obsolete-attr", "obsolete-tag", "parsing-order", "pipe-like", "table-layout", "tag-like", "unbalanced-header", "unclosed-comment", "unclosed-quote", "unclosed-table", "unescaped", "unknown-page", "unmatched-tag", "unterminated-url", "url-encoding", "var-anchor", "void-ext"];
|
|
16
16
|
export declare namespace LintError {
|
|
17
17
|
type Severity = 'error' | 'warning';
|
|
18
18
|
type Rule = typeof rules[number];
|
package/dist/base.js
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -43,7 +43,11 @@ const Parser = {
|
|
|
43
43
|
return new Title(title, defaultNs, config, decode, selfLink);
|
|
44
44
|
}
|
|
45
45
|
const { Token } = require('./src/index');
|
|
46
|
-
const token = debug_1.Shadow.run(() =>
|
|
46
|
+
const token = debug_1.Shadow.run(() => {
|
|
47
|
+
const root = new Token(title, config);
|
|
48
|
+
root.type = 'root';
|
|
49
|
+
return root.parseOnce(0, include).parseOnce();
|
|
50
|
+
}), titleObj = new Title(token.toString(), defaultNs, config, decode, selfLink);
|
|
47
51
|
debug_1.Shadow.run(() => {
|
|
48
52
|
for (const key of ['main', 'fragment']) {
|
|
49
53
|
const str = titleObj[key];
|
|
@@ -60,13 +64,14 @@ const Parser = {
|
|
|
60
64
|
const { Token } = require('./src/index');
|
|
61
65
|
const root = debug_1.Shadow.run(() => {
|
|
62
66
|
const token = new Token(wikitext, config);
|
|
67
|
+
token.type = 'root';
|
|
63
68
|
try {
|
|
64
69
|
return token.parse(maxStage, include);
|
|
65
70
|
}
|
|
66
71
|
catch (e) {
|
|
67
72
|
if (e instanceof Error) {
|
|
68
73
|
const file = path.join(__dirname, '..', 'errors', new Date().toISOString()), stage = token.getAttribute('stage');
|
|
69
|
-
fs.writeFileSync(file, stage === constants_1.MAX_STAGE ? wikitext :
|
|
74
|
+
fs.writeFileSync(file, stage === constants_1.MAX_STAGE ? wikitext : token.toString());
|
|
70
75
|
fs.writeFileSync(`${file}.err`, e.stack);
|
|
71
76
|
fs.writeFileSync(`${file}.json`, JSON.stringify({ stage, include, config }, null, '\t'));
|
|
72
77
|
}
|
package/dist/lib/element.d.ts
CHANGED
|
@@ -57,10 +57,4 @@ export declare abstract class AstElement extends AstNode {
|
|
|
57
57
|
* @param i 子节点位置
|
|
58
58
|
*/
|
|
59
59
|
setText(str: string, i?: number): string;
|
|
60
|
-
/**
|
|
61
|
-
* @override
|
|
62
|
-
* @param start
|
|
63
|
-
* @param re 用于`AstText`后代节点的正则表达式
|
|
64
|
-
*/
|
|
65
|
-
lint(start?: number, re?: RegExp): LintError[];
|
|
66
60
|
}
|
package/dist/lib/element.js
CHANGED
|
@@ -164,17 +164,13 @@ class AstElement extends node_1.AstNode {
|
|
|
164
164
|
toString(separator = '') {
|
|
165
165
|
return this.childNodes.map(String).join(separator);
|
|
166
166
|
}
|
|
167
|
-
/**
|
|
168
|
-
* @override
|
|
169
|
-
* @param start
|
|
170
|
-
* @param re 用于`AstText`后代节点的正则表达式
|
|
171
|
-
*/
|
|
167
|
+
/** @private */
|
|
172
168
|
lint(start = this.getAbsoluteIndex(), re) {
|
|
173
169
|
const errors = [];
|
|
174
170
|
for (let i = 0, cur = start + this.getAttribute('padding'); i < this.length; i++) {
|
|
175
171
|
const child = this.childNodes[i];
|
|
176
172
|
errors.push(...child.lint(cur, re));
|
|
177
|
-
cur +=
|
|
173
|
+
cur += child.toString().length + this.getGaps(i);
|
|
178
174
|
}
|
|
179
175
|
return errors;
|
|
180
176
|
}
|
package/dist/lib/node.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export declare abstract class AstNode implements AstNodeBase {
|
|
|
19
19
|
type: TokenTypes | 'text';
|
|
20
20
|
data?: string | undefined;
|
|
21
21
|
readonly childNodes: readonly AstNodes[];
|
|
22
|
-
|
|
22
|
+
lint(): LintError[];
|
|
23
23
|
/** 首位子节点 */
|
|
24
24
|
get firstChild(): AstNodes | undefined;
|
|
25
25
|
/** 末位子节点 */
|
package/dist/lib/node.js
CHANGED
|
@@ -14,7 +14,7 @@ const getDimension = (str) => {
|
|
|
14
14
|
* @param j 子节点序号
|
|
15
15
|
* @param parent 父节点
|
|
16
16
|
*/
|
|
17
|
-
const getIndex = (j, parent) => parent.childNodes.slice(0, j).reduce((acc, cur, i) => acc +
|
|
17
|
+
const getIndex = (j, parent) => parent.childNodes.slice(0, j).reduce((acc, cur, i) => acc + cur.toString().length + parent.getGaps(i), 0)
|
|
18
18
|
+ parent.getAttribute('padding');
|
|
19
19
|
/** 类似Node */
|
|
20
20
|
class AstNode {
|
package/dist/lib/text.d.ts
CHANGED
|
@@ -10,12 +10,6 @@ export declare class AstText extends AstNode {
|
|
|
10
10
|
constructor(text: string);
|
|
11
11
|
/** 可见部分 */
|
|
12
12
|
text(): string;
|
|
13
|
-
/**
|
|
14
|
-
* @override
|
|
15
|
-
* @param start
|
|
16
|
-
* @throws `Error` 孤立文本节点
|
|
17
|
-
*/
|
|
18
|
-
lint(start?: number, errorRegex?: RegExp): LintError[];
|
|
19
13
|
/**
|
|
20
14
|
* 替换字符串
|
|
21
15
|
* @param text 替换的字符串
|
package/dist/lib/text.js
CHANGED
|
@@ -73,11 +73,7 @@ class AstText extends node_1.AstNode {
|
|
|
73
73
|
text() {
|
|
74
74
|
return this.data;
|
|
75
75
|
}
|
|
76
|
-
/**
|
|
77
|
-
* @override
|
|
78
|
-
* @param start
|
|
79
|
-
* @throws `Error` 孤立文本节点
|
|
80
|
-
*/
|
|
76
|
+
/** @private */
|
|
81
77
|
lint(start = this.getAbsoluteIndex(), errorRegex) {
|
|
82
78
|
const { data, parentNode, nextSibling, previousSibling } = this;
|
|
83
79
|
if (!parentNode) {
|
|
@@ -129,7 +125,7 @@ class AstText extends node_1.AstNode {
|
|
|
129
125
|
else if (char === 'h' && index === 0 && type === 'ext-link-text' && extImage.test(data)) {
|
|
130
126
|
continue;
|
|
131
127
|
}
|
|
132
|
-
const startIndex = start + index, endIndex = startIndex + length, rootStr =
|
|
128
|
+
const startIndex = start + index, endIndex = startIndex + length, rootStr = root.toString(), nextChar = rootStr[endIndex], previousChar = rootStr[startIndex - 1], severity = length > 1 && !(char === '<' && !/[\s/>]/u.test(nextChar ?? '')
|
|
133
129
|
|| isHtmlAttrVal && (char === '[' || char === ']'))
|
|
134
130
|
|| char === '{' && (nextChar === char || previousChar === '-')
|
|
135
131
|
|| char === '}' && (previousChar === char || nextChar === '-')
|
|
@@ -190,7 +186,7 @@ class AstText extends node_1.AstNode {
|
|
|
190
186
|
];
|
|
191
187
|
}
|
|
192
188
|
else if (char === '[' && type === 'ext-link-text') {
|
|
193
|
-
const i = parentNode.getAbsoluteIndex() +
|
|
189
|
+
const i = parentNode.getAbsoluteIndex() + parentNode.toString().length;
|
|
194
190
|
e.suggestions = [
|
|
195
191
|
{
|
|
196
192
|
desc: 'escape',
|
|
@@ -200,7 +196,7 @@ class AstText extends node_1.AstNode {
|
|
|
200
196
|
];
|
|
201
197
|
}
|
|
202
198
|
else if (char === ']' && previousType === 'free-ext-link' && severity === 'error') {
|
|
203
|
-
const i = start -
|
|
199
|
+
const i = start - previousSibling.toString().length;
|
|
204
200
|
e.fix = {
|
|
205
201
|
range: [i, i],
|
|
206
202
|
text: '[',
|
package/dist/parser/braces.js
CHANGED
|
@@ -13,7 +13,16 @@ const arg_1 = require("../src/arg");
|
|
|
13
13
|
* @throws TranscludeToken.constructor()
|
|
14
14
|
*/
|
|
15
15
|
const parseBraces = (wikitext, config, accum) => {
|
|
16
|
-
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
17
|
+
/\{\{\s*([!=]|!!|\(!|!\)|!-)\s*\}\}(?!\})/gu;
|
|
18
|
+
const source = `${config.excludes?.includes('heading') ? '' : '^(\0\\d+c\x7F)*={1,6}|'}\\[\\[|\\{{2,}|-\\{(?!\\{)`, { parserFunction: [, , , subst] } = config, stack = [], closes = { '=': '\n', '{': '\\}{2,}|\\|', '-': '\\}-', '[': '\\]\\]' }, marks = new Map([['!', '!'], ['!!', '+'], ['(!', '{'], ['!)', '}'], ['!-', '-'], ['=', '~']]), re = new RegExp(`\\{\\{\\s*(${[...marks.keys()].map(string_1.escapeRegExp).join('|')})\\s*\\}\\}(?!\\})`, 'gu');
|
|
19
|
+
wikitext = wikitext.replace(re, (m, p1) => {
|
|
20
|
+
// @ts-expect-error abstract class
|
|
21
|
+
new transclude_1.TranscludeToken(m.slice(2, -2), [], config, accum);
|
|
22
|
+
return `\0${accum.length - 2}${marks.get(p1)}\x7F`;
|
|
23
|
+
});
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
25
|
+
/^(\0\d+c\x7F)*={1,6}|\[\[|\{{2,}|-\{(?!\{)|[\n|=]|\}{2,}|\}-|\]\]/gmu;
|
|
17
26
|
let regex = new RegExp(source, 'gmu'), mt = regex.exec(wikitext), moreBraces = wikitext.includes('}}'), lastIndex;
|
|
18
27
|
while (mt
|
|
19
28
|
|| lastIndex !== undefined && lastIndex <= wikitext.length && stack[stack.length - 1]?.[0]?.startsWith('=')) {
|
|
@@ -29,7 +29,7 @@ const parseExternalLinks = (wikitext, config, accum, inFile) => {
|
|
|
29
29
|
}
|
|
30
30
|
if (inFile) {
|
|
31
31
|
// @ts-expect-error abstract class
|
|
32
|
-
new magicLink_1.MagicLinkToken(url,
|
|
32
|
+
new magicLink_1.MagicLinkToken(url, 'ext-link-url', config, accum);
|
|
33
33
|
return `[\0${length}f\x7F${space}${text}]`;
|
|
34
34
|
}
|
|
35
35
|
// @ts-expect-error abstract class
|
|
@@ -10,29 +10,46 @@ const magicLink_1 = require("../src/magicLink");
|
|
|
10
10
|
* @param accum
|
|
11
11
|
*/
|
|
12
12
|
const parseMagicLinks = (wikitext, config, accum) => {
|
|
13
|
-
const regex = new RegExp(
|
|
13
|
+
const space = '[\\p{Zs}\\t]| |�*160;|�*a0;', spdash = `(?:${space}|-)`, regex = new RegExp('(^|[^\\p{L}\\d_])' // lead
|
|
14
|
+
+ '(?:'
|
|
15
|
+
+ `(?:${config.protocol})(${string_1.extUrlCharFirst}${string_1.extUrlChar})` // free external link
|
|
16
|
+
+ '|'
|
|
17
|
+
+ `(?:RFC|PMID)(?:${space})+\\d+\\b` // RFC or PMID
|
|
18
|
+
+ '|'
|
|
19
|
+
+ `ISBN(?:${space})+(?:97[89]${spdash}?)?(?:\\d${spdash}?){9}[\\dx]\\b` // ISBN
|
|
20
|
+
+ ')', 'giu');
|
|
14
21
|
return wikitext.replace(regex, (m, lead, p1) => {
|
|
15
|
-
let
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if (sepChars
|
|
25
|
-
correction =
|
|
22
|
+
let url = lead ? m.slice(lead.length) : m;
|
|
23
|
+
if (p1) {
|
|
24
|
+
let trail = '';
|
|
25
|
+
const m2 = /&(?:lt|gt|nbsp|#x0*(?:3[ce]|a0)|#0*(?:6[02]|160));/iu.exec(url);
|
|
26
|
+
if (m2) {
|
|
27
|
+
trail = url.slice(m2.index);
|
|
28
|
+
url = url.slice(0, m2.index);
|
|
29
|
+
}
|
|
30
|
+
const sep = new RegExp(`[,;\\\\.:!?${url.includes('(') ? '' : ')'}]+$`, 'u'), sepChars = sep.exec(url);
|
|
31
|
+
if (sepChars) {
|
|
32
|
+
let correction = 0;
|
|
33
|
+
if (sepChars[0].startsWith(';')
|
|
34
|
+
&& /&(?:[a-z]+|#x[\da-f]+|#\d+)$/iu.test(url.slice(0, sepChars.index))) {
|
|
35
|
+
correction = 1;
|
|
36
|
+
}
|
|
37
|
+
trail = url.slice(sepChars.index + correction) + trail;
|
|
38
|
+
url = url.slice(0, sepChars.index + correction);
|
|
39
|
+
}
|
|
40
|
+
if (trail.length >= p1.length) {
|
|
41
|
+
return m;
|
|
26
42
|
}
|
|
27
|
-
|
|
28
|
-
|
|
43
|
+
// @ts-expect-error abstract class
|
|
44
|
+
new magicLink_1.MagicLinkToken(url, undefined, config, accum);
|
|
45
|
+
return `${lead}\0${accum.length - 1}w\x7F${trail}`;
|
|
29
46
|
}
|
|
30
|
-
if (
|
|
47
|
+
else if (!/^(?:RFC|PMID|ISBN)/u.test(url)) {
|
|
31
48
|
return m;
|
|
32
49
|
}
|
|
33
50
|
// @ts-expect-error abstract class
|
|
34
|
-
new magicLink_1.MagicLinkToken(url,
|
|
35
|
-
return `${lead}\0${accum.length - 1}
|
|
51
|
+
new magicLink_1.MagicLinkToken(url, 'magic-link', config, accum);
|
|
52
|
+
return `${lead}\0${accum.length - 1}i\x7F`;
|
|
36
53
|
});
|
|
37
54
|
};
|
|
38
55
|
exports.parseMagicLinks = parseMagicLinks;
|
package/dist/parser/table.js
CHANGED
package/dist/src/arg.d.ts
CHANGED
package/dist/src/arg.js
CHANGED
|
@@ -53,7 +53,7 @@ class ArgToken extends index_2.Token {
|
|
|
53
53
|
getGaps() {
|
|
54
54
|
return 1;
|
|
55
55
|
}
|
|
56
|
-
/** @
|
|
56
|
+
/** @private */
|
|
57
57
|
lint(start = this.getAbsoluteIndex(), re) {
|
|
58
58
|
const { childNodes: [argName, argDefault, ...rest] } = this;
|
|
59
59
|
if (!this.getAttribute('include')) {
|
|
@@ -68,7 +68,7 @@ class ArgToken extends index_2.Token {
|
|
|
68
68
|
}
|
|
69
69
|
const errors = argName.lint(start + 3, re);
|
|
70
70
|
if (argDefault) {
|
|
71
|
-
errors.push(...argDefault.lint(start + 4 +
|
|
71
|
+
errors.push(...argDefault.lint(start + 4 + argName.toString().length, re));
|
|
72
72
|
}
|
|
73
73
|
if (rest.length > 0) {
|
|
74
74
|
const rect = { start, ...this.getRootNode().posFromIndex(start) };
|
package/dist/src/attribute.d.ts
CHANGED
|
@@ -33,8 +33,6 @@ export declare abstract class AttributeToken extends Token {
|
|
|
33
33
|
constructor(type: AttributeTypes, tag: string, key: string, equal?: string, value?: string, quotes?: readonly [string?, string?], config?: Parser.Config, accum?: Token[]);
|
|
34
34
|
/** @override */
|
|
35
35
|
text(): string;
|
|
36
|
-
/** @override */
|
|
37
|
-
lint(start?: number, re?: RegExp): LintError[];
|
|
38
36
|
/** 获取属性值 */
|
|
39
37
|
getValue(): string | true;
|
|
40
38
|
}
|
package/dist/src/attribute.js
CHANGED
|
@@ -244,7 +244,7 @@ class AttributeToken extends index_2.Token {
|
|
|
244
244
|
/** @private */
|
|
245
245
|
toString() {
|
|
246
246
|
const [quoteStart = '', quoteEnd = ''] = this.#quotes;
|
|
247
|
-
return this.#equal ? super.toString(this.#equal + quoteStart) + quoteEnd :
|
|
247
|
+
return this.#equal ? super.toString(this.#equal + quoteStart) + quoteEnd : this.firstChild.toString();
|
|
248
248
|
}
|
|
249
249
|
/** @override */
|
|
250
250
|
text() {
|
|
@@ -254,7 +254,7 @@ class AttributeToken extends index_2.Token {
|
|
|
254
254
|
getGaps() {
|
|
255
255
|
return this.#equal ? this.#equal.length + (this.#quotes[0]?.length ?? 0) : 0;
|
|
256
256
|
}
|
|
257
|
-
/** @
|
|
257
|
+
/** @private */
|
|
258
258
|
lint(start = this.getAbsoluteIndex(), re) {
|
|
259
259
|
const errors = super.lint(start, re), { balanced, firstChild, lastChild, type, name, tag } = this, value = this.getValue();
|
|
260
260
|
let rect;
|
package/dist/src/attributes.d.ts
CHANGED
package/dist/src/attributes.js
CHANGED
|
@@ -92,7 +92,7 @@ class AttributesToken extends index_2.Token {
|
|
|
92
92
|
getAttr(key) {
|
|
93
93
|
return this.getAttrToken(key)?.getValue();
|
|
94
94
|
}
|
|
95
|
-
/** @
|
|
95
|
+
/** @private */
|
|
96
96
|
lint(start = this.getAbsoluteIndex(), re) {
|
|
97
97
|
const errors = super.lint(start, re), { parentNode, length, childNodes } = this, attrs = new Map(), duplicated = new Set();
|
|
98
98
|
let rect;
|
package/dist/src/converter.js
CHANGED
|
@@ -36,7 +36,7 @@ class ConverterToken extends index_2.Token {
|
|
|
36
36
|
/** @private */
|
|
37
37
|
toString() {
|
|
38
38
|
const { childNodes: [flags, ...rules] } = this;
|
|
39
|
-
return `-{${
|
|
39
|
+
return `-{${flags.toString()}${flags.length > 0 ? '|' : ''}${rules.map(String).join(';')}}-`;
|
|
40
40
|
}
|
|
41
41
|
/** @override */
|
|
42
42
|
text() {
|
|
@@ -43,7 +43,7 @@ class ConverterFlagsToken extends index_2.Token {
|
|
|
43
43
|
const variants = new Set(this.getAttribute('config').variants);
|
|
44
44
|
return new Set(this.#flags.filter(flag => variants.has(flag)));
|
|
45
45
|
}
|
|
46
|
-
/** @
|
|
46
|
+
/** @private */
|
|
47
47
|
lint(start = this.getAbsoluteIndex(), re) {
|
|
48
48
|
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, errors = super.lint(start, re);
|
|
49
49
|
if (variantFlags.size === knownFlagCount || validFlags.size === knownFlagCount) {
|
|
@@ -33,7 +33,7 @@ class ConverterRuleToken extends index_2.Token {
|
|
|
33
33
|
const { childNodes } = this;
|
|
34
34
|
if (childNodes.length === 3) {
|
|
35
35
|
const [from, variant, to] = childNodes;
|
|
36
|
-
return `${
|
|
36
|
+
return `${from.toString()}=>${variant.toString()}:${to.toString()}`;
|
|
37
37
|
}
|
|
38
38
|
return super.toString(':');
|
|
39
39
|
}
|
package/dist/src/extLink.d.ts
CHANGED
|
@@ -20,6 +20,4 @@ export declare abstract class ExtLinkToken extends Token {
|
|
|
20
20
|
constructor(url?: string, space?: string, text?: string, config?: Parser.Config, accum?: Token[]);
|
|
21
21
|
/** @override */
|
|
22
22
|
text(): string;
|
|
23
|
-
/** @override */
|
|
24
|
-
lint(start?: number, re?: RegExp): LintError[];
|
|
25
23
|
}
|
package/dist/src/extLink.js
CHANGED
|
@@ -23,7 +23,7 @@ class ExtLinkToken extends index_2.Token {
|
|
|
23
23
|
const link = url && /\0\d+f\x7F/u.test(url)
|
|
24
24
|
? accum[Number(url.slice(1, -2))]
|
|
25
25
|
// @ts-expect-error abstract class
|
|
26
|
-
: new magicLink_1.MagicLinkToken(url,
|
|
26
|
+
: new magicLink_1.MagicLinkToken(url, 'ext-link-url', config, accum);
|
|
27
27
|
this.insertAt(link);
|
|
28
28
|
this.#space = space;
|
|
29
29
|
if (text) {
|
|
@@ -52,7 +52,7 @@ class ExtLinkToken extends index_2.Token {
|
|
|
52
52
|
getGaps() {
|
|
53
53
|
return this.#space.length;
|
|
54
54
|
}
|
|
55
|
-
/** @
|
|
55
|
+
/** @private */
|
|
56
56
|
lint(start = this.getAbsoluteIndex(), re) {
|
|
57
57
|
const errors = super.lint(start, re);
|
|
58
58
|
if (this.length === 1 && this.closest('heading-title')) {
|
package/dist/src/gallery.d.ts
CHANGED
package/dist/src/gallery.js
CHANGED
|
@@ -51,11 +51,11 @@ class GalleryToken extends index_2.Token {
|
|
|
51
51
|
getGaps() {
|
|
52
52
|
return 1;
|
|
53
53
|
}
|
|
54
|
-
/** @
|
|
54
|
+
/** @private */
|
|
55
55
|
lint(start = this.getAbsoluteIndex(), re) {
|
|
56
56
|
const { top, left } = this.getRootNode().posFromIndex(start), errors = [];
|
|
57
57
|
for (let i = 0; i < this.length; i++) {
|
|
58
|
-
const child = this.childNodes[i], str =
|
|
58
|
+
const child = this.childNodes[i], str = child.toString(), { length } = str, trimmed = str.trim(), startLine = top + i, startCol = i ? 0 : left;
|
|
59
59
|
if (child.type === 'noinclude' && trimmed && !/^<!--.*-->$/u.test(trimmed)) {
|
|
60
60
|
errors.push({
|
|
61
61
|
rule: 'no-ignored',
|
package/dist/src/heading.d.ts
CHANGED
|
@@ -21,6 +21,4 @@ export declare abstract class HeadingToken extends Token {
|
|
|
21
21
|
constructor(level: number, input: readonly [string?, string?], config?: Parser.Config, accum?: Token[]);
|
|
22
22
|
/** @override */
|
|
23
23
|
text(): string;
|
|
24
|
-
/** @override */
|
|
25
|
-
lint(start?: number, re?: RegExp): LintError[];
|
|
26
24
|
}
|
package/dist/src/heading.js
CHANGED
|
@@ -36,7 +36,7 @@ class HeadingToken extends index_2.Token {
|
|
|
36
36
|
/** @private */
|
|
37
37
|
toString() {
|
|
38
38
|
const equals = this.#equals;
|
|
39
|
-
return equals +
|
|
39
|
+
return equals + this.firstChild.toString() + equals + this.lastChild.toString();
|
|
40
40
|
}
|
|
41
41
|
/** @override */
|
|
42
42
|
text() {
|
|
@@ -51,9 +51,9 @@ class HeadingToken extends index_2.Token {
|
|
|
51
51
|
getGaps() {
|
|
52
52
|
return this.level;
|
|
53
53
|
}
|
|
54
|
-
/** @
|
|
54
|
+
/** @private */
|
|
55
55
|
lint(start = this.getAbsoluteIndex(), re) {
|
|
56
|
-
const errors = super.lint(start, re), { firstChild, level } = this, innerStr =
|
|
56
|
+
const errors = super.lint(start, re), { firstChild, level } = this, innerStr = firstChild.toString(), quotes = firstChild.childNodes.filter((node) => node.type === 'quote'), boldQuotes = quotes.filter(({ bold }) => bold), italicQuotes = quotes.filter(({ italic }) => italic);
|
|
57
57
|
let rect;
|
|
58
58
|
if (this.level === 1) {
|
|
59
59
|
rect = { start, ...this.getRootNode().posFromIndex(start) };
|
package/dist/src/html.d.ts
CHANGED
|
@@ -26,8 +26,6 @@ export declare abstract class HtmlToken extends Token {
|
|
|
26
26
|
constructor(name: string, attr: AttributesToken, closing: boolean, selfClosing: boolean, config?: Parser.Config, accum?: Token[]);
|
|
27
27
|
/** @override */
|
|
28
28
|
text(): string;
|
|
29
|
-
/** @override */
|
|
30
|
-
lint(start?: number, re?: RegExp): LintError[];
|
|
31
29
|
/**
|
|
32
30
|
* 搜索匹配的标签
|
|
33
31
|
* @throws `SyntaxError` 同时闭合和自封闭的标签
|
package/dist/src/html.js
CHANGED
|
@@ -78,7 +78,7 @@ class HtmlToken extends index_2.Token {
|
|
|
78
78
|
? this.#tag.length + (this.closing ? 2 : 1)
|
|
79
79
|
: super.getAttribute(key);
|
|
80
80
|
}
|
|
81
|
-
/** @
|
|
81
|
+
/** @private */
|
|
82
82
|
lint(start = this.getAbsoluteIndex(), re) {
|
|
83
83
|
const errors = super.lint(start, re);
|
|
84
84
|
let refError;
|
|
@@ -167,7 +167,7 @@ class HtmlToken extends index_2.Token {
|
|
|
167
167
|
* @throws `SyntaxError` 未匹配的标签
|
|
168
168
|
*/
|
|
169
169
|
findMatchingTag() {
|
|
170
|
-
const { html: [normalTags, flexibleTags, voidTags] } = this.getAttribute('config'), { name: tagName, parentNode, closing } = this, string = (0, string_1.noWrap)(
|
|
170
|
+
const { html: [normalTags, flexibleTags, voidTags] } = this.getAttribute('config'), { name: tagName, parentNode, closing } = this, string = (0, string_1.noWrap)(this.toString());
|
|
171
171
|
if (closing && (this.#selfClosing || voidTags.includes(tagName))) {
|
|
172
172
|
throw new SyntaxError(`tag that is both closing and self-closing: ${string}`);
|
|
173
173
|
}
|
|
@@ -18,8 +18,6 @@ export declare abstract class ImageParameterToken extends Token {
|
|
|
18
18
|
constructor(str: string, extension: string | undefined, config?: Parser.Config, accum?: Token[]);
|
|
19
19
|
/** @override */
|
|
20
20
|
text(): string;
|
|
21
|
-
/** @override */
|
|
22
|
-
lint(start?: number, re?: RegExp): LintError[];
|
|
23
21
|
/** 获取参数值 */
|
|
24
22
|
getValue(): string | true;
|
|
25
23
|
}
|
|
@@ -99,7 +99,7 @@ class ImageParameterToken extends index_2.Token {
|
|
|
99
99
|
? Math.max(0, this.#syntax.indexOf('$1'))
|
|
100
100
|
: super.getAttribute(key);
|
|
101
101
|
}
|
|
102
|
-
/** @
|
|
102
|
+
/** @private */
|
|
103
103
|
lint(start = this.getAbsoluteIndex(), re) {
|
|
104
104
|
const errors = super.lint(start, re), { link, name } = this;
|
|
105
105
|
if (name === 'invalid') {
|
package/dist/src/imagemap.d.ts
CHANGED
package/dist/src/imagemap.js
CHANGED
|
@@ -85,12 +85,12 @@ class ImagemapToken extends index_2.Token {
|
|
|
85
85
|
getGaps() {
|
|
86
86
|
return 1;
|
|
87
87
|
}
|
|
88
|
-
/** @
|
|
88
|
+
/** @private */
|
|
89
89
|
lint(start = this.getAbsoluteIndex(), re) {
|
|
90
90
|
const errors = super.lint(start, re), rect = { start, ...this.getRootNode().posFromIndex(start) };
|
|
91
91
|
if (this.image) {
|
|
92
92
|
errors.push(...this.childNodes.filter(child => {
|
|
93
|
-
const str =
|
|
93
|
+
const str = child.toString().trim();
|
|
94
94
|
return child.type === 'noinclude' && str && !str.startsWith('#');
|
|
95
95
|
}).map(child => (0, lint_1.generateForChild)(child, rect, 'invalid-imagemap', 'invalid link in <imagemap>')));
|
|
96
96
|
}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -30,5 +30,5 @@ export declare class Token extends AstElement {
|
|
|
30
30
|
*/
|
|
31
31
|
normalizeTitle(title: string, defaultNs?: number, halfParsed?: boolean, decode?: boolean, selfLink?: boolean): Title;
|
|
32
32
|
/** @override */
|
|
33
|
-
|
|
33
|
+
toString(separator?: string): string;
|
|
34
34
|
}
|