wikiparser-node 1.3.1 → 1.3.2
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/index.d.ts +1 -1
- package/dist/lib/element.js +5 -25
- package/dist/lib/text.js +21 -8
- package/dist/mixin/hidden.js +4 -0
- package/dist/parser/braces.js +1 -2
- package/dist/src/attribute.d.ts +1 -0
- package/dist/src/attribute.js +3 -2
- package/dist/src/converter.d.ts +1 -0
- package/dist/src/converterFlags.js +3 -1
- package/dist/src/extLink.d.ts +1 -0
- package/dist/src/extLink.js +2 -1
- package/dist/src/heading.d.ts +2 -0
- package/dist/src/hidden.d.ts +1 -0
- package/dist/src/html.d.ts +3 -5
- package/dist/src/imagemapLink.d.ts +2 -0
- package/dist/src/link/base.js +3 -1
- package/dist/src/link/file.js +3 -1
- package/dist/src/link/galleryImage.d.ts +1 -0
- package/dist/src/magicLink.d.ts +2 -1
- package/dist/src/nowiki/base.d.ts +1 -0
- package/dist/src/nowiki/comment.d.ts +1 -0
- package/dist/src/nowiki/comment.js +1 -1
- package/dist/src/nowiki/doubleUnderscore.d.ts +3 -1
- package/dist/src/nowiki/hr.d.ts +3 -1
- package/dist/src/nowiki/list.d.ts +1 -0
- package/dist/src/nowiki/listBase.d.ts +2 -1
- package/dist/src/nowiki/noinclude.d.ts +1 -0
- package/dist/src/nowiki/quote.d.ts +2 -1
- package/dist/src/parameter.d.ts +1 -0
- package/dist/src/syntax.d.ts +5 -1
- package/dist/src/syntax.js +4 -0
- package/dist/src/table/base.d.ts +2 -1
- package/dist/src/table/index.js +1 -1
- package/dist/src/table/td.d.ts +1 -0
- package/dist/src/table/trBase.js +2 -1
- package/dist/src/tagPair/ext.d.ts +3 -5
- package/dist/src/tagPair/include.d.ts +5 -4
- package/dist/src/tagPair/include.js +5 -0
- package/dist/src/tagPair/index.d.ts +1 -0
- package/dist/src/transclude.js +3 -3
- package/i18n/zh-hans.json +4 -3
- package/i18n/zh-hant.json +4 -3
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Shadow } from './util/debug';
|
|
2
|
+
import type { Config, LintError, Parser as ParserBase } from './base';
|
|
2
3
|
import type { Title } from './lib/title';
|
|
3
4
|
import type { Token } from './internal';
|
|
4
|
-
import type { Config, LintError, Parser as ParserBase } from './base';
|
|
5
5
|
declare interface Parser extends ParserBase {
|
|
6
6
|
readonly Shadow: typeof Shadow;
|
|
7
7
|
conversionTable: Map<string, string>;
|
package/dist/lib/element.js
CHANGED
|
@@ -10,24 +10,6 @@ const ranges_1 = require("./ranges");
|
|
|
10
10
|
const title_1 = require("./title");
|
|
11
11
|
const Parser = require("../index");
|
|
12
12
|
const node_1 = require("./node");
|
|
13
|
-
const lintIgnoredExt = new Set([
|
|
14
|
-
'nowiki',
|
|
15
|
-
'pre',
|
|
16
|
-
'charinsert',
|
|
17
|
-
'score',
|
|
18
|
-
'syntaxhighlight',
|
|
19
|
-
'source',
|
|
20
|
-
'math',
|
|
21
|
-
'chem',
|
|
22
|
-
'ce',
|
|
23
|
-
'graph',
|
|
24
|
-
'mapframe',
|
|
25
|
-
'maplink',
|
|
26
|
-
'quiz',
|
|
27
|
-
'templatedata',
|
|
28
|
-
'timeline',
|
|
29
|
-
]);
|
|
30
|
-
/* NOT FOR BROWSER */
|
|
31
13
|
/**
|
|
32
14
|
* optionally convert to lower cases
|
|
33
15
|
* @param val 属性值
|
|
@@ -244,11 +226,6 @@ class AstElement extends node_1.AstNode {
|
|
|
244
226
|
* @param start
|
|
245
227
|
*/
|
|
246
228
|
lint(start = this.getAbsoluteIndex()) {
|
|
247
|
-
const { SyntaxToken } = require('../src/syntax');
|
|
248
|
-
if (this instanceof SyntaxToken || this.constructor.hidden
|
|
249
|
-
|| this.type === 'ext-inner' && lintIgnoredExt.has(this.name)) {
|
|
250
|
-
return [];
|
|
251
|
-
}
|
|
252
229
|
const errors = [];
|
|
253
230
|
for (let i = 0, cur = start + this.getAttribute('padding'); i < this.length; i++) {
|
|
254
231
|
const child = this.childNodes[i];
|
|
@@ -391,11 +368,14 @@ class AstElement extends node_1.AstNode {
|
|
|
391
368
|
case ':only-whitespace':
|
|
392
369
|
return this.text().trim() === '';
|
|
393
370
|
case ':any-link':
|
|
394
|
-
return type === 'link'
|
|
371
|
+
return type === 'link'
|
|
372
|
+
|| type === 'free-ext-link'
|
|
373
|
+
|| type === 'ext-link'
|
|
395
374
|
|| (type === 'file' || type === 'gallery-image' && link);
|
|
396
375
|
case ':local-link':
|
|
397
376
|
return (type === 'link' || type === 'file' || type === 'gallery-image')
|
|
398
|
-
&& link instanceof title_1.Title
|
|
377
|
+
&& link instanceof title_1.Title
|
|
378
|
+
&& link.title === '';
|
|
399
379
|
case ':invalid':
|
|
400
380
|
return type === 'table-inter' || type === 'image-parameter' && name === 'invalid';
|
|
401
381
|
case ':required':
|
package/dist/lib/text.js
CHANGED
|
@@ -4,7 +4,7 @@ exports.AstText = void 0;
|
|
|
4
4
|
const constants_1 = require("../util/constants");
|
|
5
5
|
const Parser = require("../index");
|
|
6
6
|
const node_1 = require("./node");
|
|
7
|
-
const errorSyntax =
|
|
7
|
+
const errorSyntax = /<\s*\/?([a-z]\w*)|\{+|\}+|\[{2,}|\[(?![^[]*\])|(?<=^|\])([^[]*?)\]+|\]{2,}|https?[:/]\/+/giu, errorSyntaxUrl = /<\s*\/?([a-z]\w*)|\{+|\}+|\[{2,}|\[(?![^[]*\])|(?<=^|\])([^[]*?)\]+|\]{2,}/giu, disallowedTags = [
|
|
8
8
|
'html',
|
|
9
9
|
'base',
|
|
10
10
|
'head',
|
|
@@ -93,14 +93,26 @@ class AstText extends node_1.AstNode {
|
|
|
93
93
|
if (!parentNode) {
|
|
94
94
|
throw new Error('无法对孤立文本节点进行语法分析!');
|
|
95
95
|
}
|
|
96
|
-
const {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
96
|
+
const { NowikiToken } = require('../src/nowiki');
|
|
97
|
+
const { type, name } = parentNode, nextType = nextSibling?.type, previousType = previousSibling?.type;
|
|
98
|
+
let errorRegex;
|
|
99
|
+
if (type === 'ext-inner' && (name === 'pre' || parentNode instanceof NowikiToken)) {
|
|
100
|
+
errorRegex = new RegExp(`<\\s*\\/?(${name})\\b`, 'giu');
|
|
101
|
+
}
|
|
102
|
+
else if (type === 'free-ext-link'
|
|
103
|
+
|| type === 'ext-link-url'
|
|
104
|
+
|| type === 'image-parameter' && name === 'link'
|
|
105
|
+
|| type === 'attr-value') {
|
|
106
|
+
errorRegex = errorSyntaxUrl;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
errorRegex = errorSyntax;
|
|
110
|
+
}
|
|
111
|
+
const errors = [...data.matchAll(errorRegex)], { ext, html } = this.getRootNode().getAttribute('config');
|
|
100
112
|
if (errors.length > 0) {
|
|
101
|
-
const root = this.getRootNode(), { top, left } = root.posFromIndex(start), tags = new Set([ext, html, disallowedTags].flat(2));
|
|
113
|
+
const root = this.getRootNode(), { top, left } = root.posFromIndex(start), tags = new Set(['onlyinclude', 'noinclude', 'includeonly', ext, html, disallowedTags].flat(2));
|
|
102
114
|
return errors
|
|
103
|
-
.map(({ 0: error, 1:
|
|
115
|
+
.map(({ 0: error, 1: tag, 2: prefix, index }) => {
|
|
104
116
|
if (prefix) {
|
|
105
117
|
const { length } = prefix;
|
|
106
118
|
index += length;
|
|
@@ -109,7 +121,8 @@ class AstText extends node_1.AstNode {
|
|
|
109
121
|
const startIndex = start + index, lines = data.slice(0, index).split('\n'), startLine = lines.length + top - 1, line = lines.at(-1), startCol = lines.length === 1 ? left + line.length : line.length, { 0: char, length } = error, endIndex = startIndex + length, rootStr = String(root), nextChar = rootStr[endIndex], previousChar = rootStr[startIndex - 1], severity = length > 1 && (char !== '<' || /[\s/>]/u.test(nextChar ?? ''))
|
|
110
122
|
|| char === '{' && (nextChar === char || previousChar === '-')
|
|
111
123
|
|| char === '}' && (previousChar === char || nextChar === '-')
|
|
112
|
-
|| char === '[' && (nextChar === char
|
|
124
|
+
|| char === '[' && (nextChar === char
|
|
125
|
+
|| type === 'ext-link-text'
|
|
113
126
|
|| !data.slice(index + 1).trim() && nextType === 'free-ext-link')
|
|
114
127
|
|| char === ']' && (previousChar === char
|
|
115
128
|
|| !data.slice(0, index).trim() && previousType === 'free-ext-link')
|
package/dist/mixin/hidden.js
CHANGED
package/dist/parser/braces.js
CHANGED
|
@@ -18,8 +18,7 @@ const parseBraces = (wikitext, config = Parser.getConfig(), accum = []) => {
|
|
|
18
18
|
const source = `${config.excludes?.includes('heading') ? '' : '^(\0\\d+c\x7F)*={1,6}|'}\\[\\[|\\{{2,}|-\\{(?!\\{)`, { parserFunction: [, , , subst] } = config, stack = [], closes = { '=': '\n', '{': '\\}{2,}|\\|', '-': '\\}-', '[': '\\]\\]' }, marks = new Map([['!', '!'], ['!!', '+'], ['(!', '{'], ['!)', '}'], ['!-', '-'], ['=', '~']]);
|
|
19
19
|
let regex = new RegExp(source, 'gmu'), mt = regex.exec(wikitext), moreBraces = wikitext.includes('}}'), lastIndex;
|
|
20
20
|
while (mt
|
|
21
|
-
|| lastIndex !== undefined && lastIndex <= wikitext.length
|
|
22
|
-
&& stack.at(-1)?.[0]?.startsWith('=')) {
|
|
21
|
+
|| lastIndex !== undefined && lastIndex <= wikitext.length && stack.at(-1)?.[0]?.startsWith('=')) {
|
|
23
22
|
if (mt?.[1]) {
|
|
24
23
|
const [, { length }] = mt;
|
|
25
24
|
mt[0] = mt[0].slice(length);
|
package/dist/src/attribute.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ declare const AttributeToken_base: ((abstract new (...args: any[]) => {
|
|
|
11
11
|
readonly length: number;
|
|
12
12
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
13
13
|
text(separator?: string | undefined): string;
|
|
14
|
+
lint(start?: number | undefined): Parser.LintError[];
|
|
14
15
|
afterBuild(): void;
|
|
15
16
|
getAttribute<T_1 extends string>(key: T_1): TokenAttributeGetter<T_1>;
|
|
16
17
|
setAttribute<T_2 extends string>(key: T_2, value: TokenAttributeSetter<T_2>): void;
|
package/dist/src/attribute.js
CHANGED
|
@@ -271,7 +271,7 @@ class AttributeToken extends (0, fixed_1.fixed)(index_1.Token) {
|
|
|
271
271
|
if (!balanced) {
|
|
272
272
|
const root = this.getRootNode();
|
|
273
273
|
rect = { start, ...root.posFromIndex(start) };
|
|
274
|
-
const e = (0, lint_1.generateForChild)(lastChild, rect, 'unclosed quotes', 'warning');
|
|
274
|
+
const e = (0, lint_1.generateForChild)(lastChild, rect, Parser.msg('unclosed $1', 'quotes'), 'warning');
|
|
275
275
|
errors.push({
|
|
276
276
|
...e,
|
|
277
277
|
startIndex: e.startIndex - 1,
|
|
@@ -280,7 +280,8 @@ class AttributeToken extends (0, fixed_1.fixed)(index_1.Token) {
|
|
|
280
280
|
}
|
|
281
281
|
if (extAttrs[tag] && !extAttrs[tag].has(name)
|
|
282
282
|
|| (type === 'ext-attr' ? tag in htmlAttrs : !/\{\{[^{]+\}\}/u.test(name))
|
|
283
|
-
&& !htmlAttrs[tag]?.has(name)
|
|
283
|
+
&& !htmlAttrs[tag]?.has(name)
|
|
284
|
+
&& !/^(?:xmlns:[\w:.-]+|data-[^:]*)$/u.test(name)
|
|
284
285
|
&& (tag === 'meta' || tag === 'link' || !commonHtmlAttrs.has(name))) {
|
|
285
286
|
rect ??= { start, ...this.getRootNode().posFromIndex(start) };
|
|
286
287
|
errors.push((0, lint_1.generateForChild)(firstChild, rect, 'illegal attribute name'));
|
package/dist/src/converter.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ declare const ConverterToken_base: (abstract new (...args: any[]) => {
|
|
|
17
17
|
readonly length: number;
|
|
18
18
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
19
19
|
text(separator?: string | undefined): string;
|
|
20
|
+
lint(start?: number | undefined): Parser.LintError[];
|
|
20
21
|
insertAt(token: unknown, i?: number | undefined): unknown;
|
|
21
22
|
afterBuild(): void;
|
|
22
23
|
getAttribute<T extends string>(key: T): TokenAttributeGetter<T>;
|
|
@@ -73,7 +73,9 @@ class ConverterFlagsToken extends index_1.Token {
|
|
|
73
73
|
const rect = { start, ...this.getRootNode().posFromIndex(start) }, { childNodes, length } = this;
|
|
74
74
|
for (let i = 0; i < length; i++) {
|
|
75
75
|
const child = childNodes[i], flag = child.text().trim();
|
|
76
|
-
if (flag
|
|
76
|
+
if (flag
|
|
77
|
+
&& !variantFlags.has(flag)
|
|
78
|
+
&& !unknownFlags.has(flag)
|
|
77
79
|
&& (variantFlags.size > 0 || !validFlags.has(flag))) {
|
|
78
80
|
errors.push((0, lint_1.generateForChild)(child, rect, 'invalid conversion flag'));
|
|
79
81
|
}
|
package/dist/src/extLink.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ declare const ExtLinkToken_base: (abstract new (...args: any[]) => {
|
|
|
11
11
|
readonly length: number;
|
|
12
12
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
13
13
|
text(separator?: string | undefined): string;
|
|
14
|
+
lint(start?: number | undefined): Parser.LintError[];
|
|
14
15
|
insertAt(token: unknown, i?: number | undefined): unknown;
|
|
15
16
|
afterBuild(): void;
|
|
16
17
|
getAttribute<T extends string>(key: T): TokenAttributeGetter<T>;
|
package/dist/src/extLink.js
CHANGED
|
@@ -92,7 +92,8 @@ class ExtLinkToken extends (0, magicLinkParent_1.magicLinkParent)(index_1.Token)
|
|
|
92
92
|
}
|
|
93
93
|
/** 修正空白字符 */
|
|
94
94
|
#correct() {
|
|
95
|
-
if (!this.#space
|
|
95
|
+
if (!this.#space
|
|
96
|
+
&& this.length > 1
|
|
96
97
|
// 都替换成`<`肯定不对,但无妨
|
|
97
98
|
&& /^[^[\]<>"{\0-\x1F\x7F\p{Zs}\uFFFD]/u.test(this.lastChild.text().replace(/&[lg]t;/u, '<'))) {
|
|
98
99
|
this.#space = ' ';
|
package/dist/src/heading.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ declare const HeadingToken_base: (abstract new (...args: any[]) => {
|
|
|
8
8
|
getAttribute<S extends string>(key: S): TokenAttributeGetter<S>;
|
|
9
9
|
text(): string;
|
|
10
10
|
readonly length: number;
|
|
11
|
+
lint(start?: number | undefined): Parser.LintError[];
|
|
11
12
|
insertAt(token: unknown, i?: number | undefined): unknown;
|
|
12
13
|
afterBuild(): void;
|
|
13
14
|
setAttribute<T extends string>(key: T, value: TokenAttributeSetter<T>): void;
|
|
@@ -20,6 +21,7 @@ declare const HeadingToken_base: (abstract new (...args: any[]) => {
|
|
|
20
21
|
readonly length: number;
|
|
21
22
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
22
23
|
text(separator?: string | undefined): string;
|
|
24
|
+
lint(start?: number | undefined): Parser.LintError[];
|
|
23
25
|
afterBuild(): void;
|
|
24
26
|
getAttribute<T_2 extends string>(key: T_2): TokenAttributeGetter<T_2>;
|
|
25
27
|
setAttribute<T extends string>(key: T, value: TokenAttributeSetter<T>): void;
|
package/dist/src/hidden.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Token } from './index';
|
|
2
2
|
declare const HiddenToken_base: ((abstract new (...args: any[]) => {
|
|
3
3
|
text(): string;
|
|
4
|
+
lint(): import("..").LintError[];
|
|
4
5
|
readonly length: number;
|
|
5
6
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
6
7
|
insertAt(token: unknown, i?: number | undefined): unknown;
|
package/dist/src/html.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import type { LintError } from '../base';
|
|
|
4
4
|
import type { AttributesToken } from '../internal';
|
|
5
5
|
declare const HtmlToken_base: (abstract new (...args: any[]) => {
|
|
6
6
|
readonly childNodes: Parser.AstNodes[];
|
|
7
|
-
readonly "__#
|
|
7
|
+
readonly "__#7@#attributesChild": Parser.AttributesToken;
|
|
8
8
|
attributes: Record<string, string | true>;
|
|
9
9
|
className: string;
|
|
10
10
|
classList: Set<string>;
|
|
@@ -19,10 +19,7 @@ declare const HtmlToken_base: (abstract new (...args: any[]) => {
|
|
|
19
19
|
readonly length: number;
|
|
20
20
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
21
21
|
text(separator?: string | undefined): string;
|
|
22
|
-
|
|
23
|
-
* HTML标签
|
|
24
|
-
* @classdesc `{childNodes: [AttributesToken]}`
|
|
25
|
-
*/
|
|
22
|
+
lint(start?: number | undefined): Parser.LintError[];
|
|
26
23
|
insertAt(token: unknown, i?: number | undefined): unknown;
|
|
27
24
|
afterBuild(): void;
|
|
28
25
|
getAttribute<T extends string>(key: T): TokenAttributeGetter<T>;
|
|
@@ -36,6 +33,7 @@ declare const HtmlToken_base: (abstract new (...args: any[]) => {
|
|
|
36
33
|
readonly length: number;
|
|
37
34
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
38
35
|
text(separator?: string | undefined): string;
|
|
36
|
+
lint(start?: number | undefined): Parser.LintError[];
|
|
39
37
|
afterBuild(): void;
|
|
40
38
|
getAttribute<T extends string>(key: T): TokenAttributeGetter<T>;
|
|
41
39
|
setAttribute<T_1 extends string>(key: T_1, value: TokenAttributeSetter<T_1>): void;
|
|
@@ -12,6 +12,7 @@ declare const ImagemapLinkToken_base: ((abstract new (...args: any[]) => {
|
|
|
12
12
|
readonly length: number;
|
|
13
13
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
14
14
|
text(separator?: string | undefined): string;
|
|
15
|
+
lint(start?: number | undefined): Parser.LintError[];
|
|
15
16
|
afterBuild(): void;
|
|
16
17
|
getAttribute<T_1 extends string>(key: T_1): TokenAttributeGetter<T_1>;
|
|
17
18
|
setAttribute<T_2 extends string>(key: T_2, value: TokenAttributeSetter<T_2>): void;
|
|
@@ -23,6 +24,7 @@ declare const ImagemapLinkToken_base: ((abstract new (...args: any[]) => {
|
|
|
23
24
|
toString(omit?: Set<string> | undefined): string;
|
|
24
25
|
text(): string;
|
|
25
26
|
readonly length: number;
|
|
27
|
+
lint(start?: number | undefined): Parser.LintError[];
|
|
26
28
|
insertAt(token: unknown, i?: number | undefined): unknown;
|
|
27
29
|
afterBuild(): void;
|
|
28
30
|
getAttribute<T_1 extends string>(key: T_1): TokenAttributeGetter<T_1>;
|
package/dist/src/link/base.js
CHANGED
|
@@ -76,7 +76,9 @@ class LinkBaseToken extends index_1.Token {
|
|
|
76
76
|
(0, debug_1.undo)(e, data);
|
|
77
77
|
throw new Error(`${this.type === 'file' ? '文件' : '分类'}链接不可更改命名空间:${name}`);
|
|
78
78
|
}
|
|
79
|
-
else if (this.type === 'link'
|
|
79
|
+
else if (this.type === 'link'
|
|
80
|
+
&& !interwiki
|
|
81
|
+
&& (ns === 6 || ns === 14)
|
|
80
82
|
&& !name.trim().startsWith(':')) {
|
|
81
83
|
const { firstChild } = prevTarget;
|
|
82
84
|
if (firstChild?.type === 'text') {
|
package/dist/src/link/file.js
CHANGED
|
@@ -102,7 +102,9 @@ class FileToken extends base_1.LinkBaseToken {
|
|
|
102
102
|
return visibleNodes.length !== 1 || visibleNodes[0].type !== 'arg';
|
|
103
103
|
}), keys = [...new Set(args.map(({ name }) => name))].filter(key => key !== 'invalid'), frameKeys = keys.filter(key => frame.has(key)), horizAlignKeys = keys.filter(key => horizAlign.has(key)), vertAlignKeys = keys.filter(key => vertAlign.has(key));
|
|
104
104
|
if (args.length === keys.length
|
|
105
|
-
&& frameKeys.length < 2
|
|
105
|
+
&& frameKeys.length < 2
|
|
106
|
+
&& horizAlignKeys.length < 2
|
|
107
|
+
&& vertAlignKeys.length < 2) {
|
|
106
108
|
return errors;
|
|
107
109
|
}
|
|
108
110
|
const rect = { start, ...this.getRootNode().posFromIndex(start) };
|
|
@@ -7,6 +7,7 @@ declare const GalleryImageToken_base: (abstract new (...args: any[]) => {
|
|
|
7
7
|
toString(omit?: Set<string> | undefined): string;
|
|
8
8
|
text(): string;
|
|
9
9
|
readonly length: number;
|
|
10
|
+
lint(start?: number | undefined): Parser.LintError[];
|
|
10
11
|
insertAt(token: unknown, i?: number | undefined): unknown;
|
|
11
12
|
afterBuild(): void;
|
|
12
13
|
getAttribute<T extends string>(key: T): TokenAttributeGetter<T>;
|
package/dist/src/magicLink.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { Token } from './index';
|
|
|
3
3
|
import type { LintError } from '../base';
|
|
4
4
|
import type { AstNodes, AstText, CommentToken, IncludeToken, NoincludeToken, TranscludeToken } from '../internal';
|
|
5
5
|
declare const MagicLinkToken_base: (abstract new (...args: any[]) => {
|
|
6
|
-
"__#
|
|
6
|
+
"__#10@#pattern": RegExp;
|
|
7
7
|
afterBuild(): void;
|
|
8
8
|
getAttribute<T extends string>(key: T): TokenAttributeGetter<T>;
|
|
9
9
|
setAttribute<T_1 extends string>(key: T_1, value: TokenAttributeSetter<T_1>): void;
|
|
@@ -11,6 +11,7 @@ declare const MagicLinkToken_base: (abstract new (...args: any[]) => {
|
|
|
11
11
|
readonly length: number;
|
|
12
12
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
13
13
|
text(separator?: string | undefined): string;
|
|
14
|
+
lint(start?: number | undefined): Parser.LintError[];
|
|
14
15
|
insertAt(token: unknown, i?: number | undefined): unknown;
|
|
15
16
|
addEventListener(events: string | string[], listener: AstListener): void;
|
|
16
17
|
}) & typeof Parser.Token;
|
|
@@ -9,6 +9,7 @@ declare const NowikiBaseToken_base: ((abstract new (...args: any[]) => {
|
|
|
9
9
|
readonly length: number;
|
|
10
10
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
11
11
|
text(separator?: string | undefined): string;
|
|
12
|
+
lint(start?: number | undefined): Parser.LintError[];
|
|
12
13
|
afterBuild(): void;
|
|
13
14
|
getAttribute<T_1 extends string>(key: T_1): TokenAttributeGetter<T_1>;
|
|
14
15
|
setAttribute<T_2 extends string>(key: T_2, value: TokenAttributeSetter<T_2>): void;
|
|
@@ -4,6 +4,7 @@ import type { LintError } from '../../base';
|
|
|
4
4
|
import type { Token } from '../index';
|
|
5
5
|
declare const CommentToken_base: ((abstract new (...args: any[]) => {
|
|
6
6
|
text(): string;
|
|
7
|
+
lint(): Parser.LintError[];
|
|
7
8
|
readonly length: number;
|
|
8
9
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
9
10
|
insertAt(token: unknown, i?: number | undefined): unknown;
|
|
@@ -33,7 +33,7 @@ class CommentToken extends (0, hidden_1.hidden)(base_1.NowikiBaseToken) {
|
|
|
33
33
|
}
|
|
34
34
|
/** @override */
|
|
35
35
|
lint(start = this.getAbsoluteIndex()) {
|
|
36
|
-
return this.closed ? [] : [(0, lint_1.generateForSelf)(this, { start }, 'unclosed HTML comment')];
|
|
36
|
+
return this.closed ? [] : [(0, lint_1.generateForSelf)(this, { start }, Parser.msg('unclosed $1', 'HTML comment'))];
|
|
37
37
|
}
|
|
38
38
|
/** @private */
|
|
39
39
|
toString(omit) {
|
|
@@ -2,7 +2,7 @@ import * as Parser from '../../index';
|
|
|
2
2
|
import { NowikiBaseToken } from './base';
|
|
3
3
|
import type { Token } from '../index';
|
|
4
4
|
declare const DoubleUnderscoreToken_base: (abstract new (...args: any[]) => {
|
|
5
|
-
"__#
|
|
5
|
+
"__#10@#pattern": RegExp;
|
|
6
6
|
afterBuild(): void;
|
|
7
7
|
getAttribute<T extends string>(key: T): TokenAttributeGetter<T>;
|
|
8
8
|
setAttribute<T_1 extends string>(key: T_1, value: TokenAttributeSetter<T_1>): void;
|
|
@@ -10,10 +10,12 @@ declare const DoubleUnderscoreToken_base: (abstract new (...args: any[]) => {
|
|
|
10
10
|
readonly length: number;
|
|
11
11
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
12
12
|
text(separator?: string | undefined): string;
|
|
13
|
+
lint(start?: number | undefined): Parser.LintError[];
|
|
13
14
|
insertAt(token: unknown, i?: number | undefined): unknown;
|
|
14
15
|
addEventListener(events: string | string[], listener: AstListener): void;
|
|
15
16
|
}) & ((abstract new (...args: any[]) => {
|
|
16
17
|
text(): string;
|
|
18
|
+
lint(): Parser.LintError[];
|
|
17
19
|
readonly length: number;
|
|
18
20
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
19
21
|
insertAt(token: unknown, i?: number | undefined): unknown;
|
package/dist/src/nowiki/hr.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NowikiBaseToken } from './base';
|
|
2
2
|
declare const HrToken_base: (abstract new (...args: any[]) => {
|
|
3
|
-
"__#
|
|
3
|
+
"__#10@#pattern": RegExp;
|
|
4
4
|
afterBuild(): void;
|
|
5
5
|
getAttribute<T extends string>(key: T): TokenAttributeGetter<T>;
|
|
6
6
|
setAttribute<T_1 extends string>(key: T_1, value: TokenAttributeSetter<T_1>): void;
|
|
@@ -8,6 +8,7 @@ declare const HrToken_base: (abstract new (...args: any[]) => {
|
|
|
8
8
|
readonly length: number;
|
|
9
9
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
10
10
|
text(separator?: string | undefined): string;
|
|
11
|
+
lint(start?: number | undefined): import("../..").LintError[];
|
|
11
12
|
insertAt(token: unknown, i?: number | undefined): unknown;
|
|
12
13
|
addEventListener(events: string | string[], listener: AstListener): void;
|
|
13
14
|
}) & (abstract new (...args: any[]) => {
|
|
@@ -16,6 +17,7 @@ declare const HrToken_base: (abstract new (...args: any[]) => {
|
|
|
16
17
|
getAttribute<S extends string>(key: S): TokenAttributeGetter<S>;
|
|
17
18
|
text(): string;
|
|
18
19
|
readonly length: number;
|
|
20
|
+
lint(start?: number | undefined): import("../..").LintError[];
|
|
19
21
|
insertAt(token: unknown, i?: number | undefined): unknown;
|
|
20
22
|
afterBuild(): void;
|
|
21
23
|
setAttribute<T_2 extends string>(key: T_2, value: TokenAttributeSetter<T_2>): void;
|
|
@@ -6,6 +6,7 @@ declare const ListToken_base: (abstract new (...args: any[]) => {
|
|
|
6
6
|
getAttribute<S extends string>(key: S): TokenAttributeGetter<S>;
|
|
7
7
|
text(): string;
|
|
8
8
|
readonly length: number;
|
|
9
|
+
lint(start?: number | undefined): import("../..").LintError[];
|
|
9
10
|
insertAt(token: unknown, i?: number | undefined): unknown;
|
|
10
11
|
afterBuild(): void;
|
|
11
12
|
setAttribute<T extends string>(key: T, value: TokenAttributeSetter<T>): void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NowikiBaseToken } from './base';
|
|
2
2
|
declare const ListBaseToken_base: (abstract new (...args: any[]) => {
|
|
3
|
-
"__#
|
|
3
|
+
"__#10@#pattern": RegExp;
|
|
4
4
|
afterBuild(): void;
|
|
5
5
|
getAttribute<T extends string>(key: T): TokenAttributeGetter<T>;
|
|
6
6
|
setAttribute<T_1 extends string>(key: T_1, value: TokenAttributeSetter<T_1>): void;
|
|
@@ -8,6 +8,7 @@ declare const ListBaseToken_base: (abstract new (...args: any[]) => {
|
|
|
8
8
|
readonly length: number;
|
|
9
9
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
10
10
|
text(separator?: string | undefined): string;
|
|
11
|
+
lint(start?: number | undefined): import("../..").LintError[];
|
|
11
12
|
insertAt(token: unknown, i?: number | undefined): unknown;
|
|
12
13
|
addEventListener(events: string | string[], listener: AstListener): void;
|
|
13
14
|
}) & typeof NowikiBaseToken;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { NowikiBaseToken } from './base';
|
|
2
2
|
declare const NoincludeToken_base: ((abstract new (...args: any[]) => {
|
|
3
3
|
text(): string;
|
|
4
|
+
lint(): import("../..").LintError[];
|
|
4
5
|
readonly length: number;
|
|
5
6
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
6
7
|
insertAt(token: unknown, i?: number | undefined): unknown;
|
|
@@ -2,7 +2,7 @@ import * as Parser from '../../index';
|
|
|
2
2
|
import { NowikiBaseToken } from './base';
|
|
3
3
|
import type { LintError } from '../../base';
|
|
4
4
|
declare const QuoteToken_base: (abstract new (...args: any[]) => {
|
|
5
|
-
"__#
|
|
5
|
+
"__#10@#pattern": RegExp;
|
|
6
6
|
afterBuild(): void;
|
|
7
7
|
getAttribute<T extends string>(key: T): TokenAttributeGetter<T>;
|
|
8
8
|
setAttribute<T_1 extends string>(key: T_1, value: TokenAttributeSetter<T_1>): void;
|
|
@@ -10,6 +10,7 @@ declare const QuoteToken_base: (abstract new (...args: any[]) => {
|
|
|
10
10
|
readonly length: number;
|
|
11
11
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
12
12
|
text(separator?: string | undefined): string;
|
|
13
|
+
lint(start?: number | undefined): Parser.LintError[];
|
|
13
14
|
insertAt(token: unknown, i?: number | undefined): unknown;
|
|
14
15
|
addEventListener(events: string | string[], listener: AstListener): void;
|
|
15
16
|
}) & typeof NowikiBaseToken;
|
package/dist/src/parameter.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ declare const ParameterToken_base: ((abstract new (...args: any[]) => {
|
|
|
9
9
|
readonly length: number;
|
|
10
10
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
11
11
|
text(separator?: string | undefined): string;
|
|
12
|
+
lint(start?: number | undefined): Parser.LintError[];
|
|
12
13
|
afterBuild(): void;
|
|
13
14
|
getAttribute<T_1 extends string>(key: T_1): TokenAttributeGetter<T_1>;
|
|
14
15
|
setAttribute<T_2 extends string>(key: T_2, value: TokenAttributeSetter<T_2>): void;
|
package/dist/src/syntax.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import * as Parser from '../index';
|
|
2
2
|
import { Token } from './index';
|
|
3
|
+
import type { LintError } from '../base';
|
|
3
4
|
declare type SyntaxTypes = 'plain' | 'heading-trail' | 'magic-word-name' | 'table-syntax';
|
|
4
5
|
declare const SyntaxToken_base: (abstract new (...args: any[]) => {
|
|
5
|
-
"__#
|
|
6
|
+
"__#10@#pattern": RegExp;
|
|
6
7
|
afterBuild(): void;
|
|
7
8
|
getAttribute<T extends string>(key: T): TokenAttributeGetter<T>;
|
|
8
9
|
setAttribute<T_1 extends string>(key: T_1, value: TokenAttributeSetter<T_1>): void;
|
|
@@ -10,6 +11,7 @@ declare const SyntaxToken_base: (abstract new (...args: any[]) => {
|
|
|
10
11
|
readonly length: number;
|
|
11
12
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
12
13
|
text(separator?: string | undefined): string;
|
|
14
|
+
lint(start?: number | undefined): Parser.LintError[];
|
|
13
15
|
insertAt(token: unknown, i?: number | undefined): unknown;
|
|
14
16
|
addEventListener(events: string | string[], listener: AstListener): void;
|
|
15
17
|
}) & typeof Parser.Token;
|
|
@@ -19,6 +21,8 @@ export declare class SyntaxToken extends SyntaxToken_base {
|
|
|
19
21
|
/** @param pattern 语法正则 */
|
|
20
22
|
constructor(wikitext: string | undefined, pattern: RegExp, type?: SyntaxTypes, config?: Parser.Config, accum?: Token[], acceptable?: Acceptable);
|
|
21
23
|
/** @override */
|
|
24
|
+
lint(): LintError[];
|
|
25
|
+
/** @override */
|
|
22
26
|
cloneNode(): this;
|
|
23
27
|
}
|
|
24
28
|
export {};
|
package/dist/src/syntax.js
CHANGED
package/dist/src/table/base.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { SyntaxToken } from '../syntax';
|
|
|
4
4
|
import { AttributesToken } from '../attributes';
|
|
5
5
|
declare const TableBaseToken_base: (abstract new (...args: any[]) => {
|
|
6
6
|
readonly childNodes: Parser.AstNodes[];
|
|
7
|
-
readonly "__#
|
|
7
|
+
readonly "__#7@#attributesChild": Parser.AttributesToken;
|
|
8
8
|
attributes: Record<string, string | true>;
|
|
9
9
|
className: string;
|
|
10
10
|
classList: Set<string>;
|
|
@@ -19,6 +19,7 @@ declare const TableBaseToken_base: (abstract new (...args: any[]) => {
|
|
|
19
19
|
readonly length: number;
|
|
20
20
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
21
21
|
text(separator?: string | undefined): string;
|
|
22
|
+
lint(start?: number | undefined): Parser.LintError[];
|
|
22
23
|
insertAt(token: unknown, i?: number | undefined): unknown;
|
|
23
24
|
afterBuild(): void;
|
|
24
25
|
getAttribute<T extends string>(key: T): TokenAttributeGetter<T>;
|
package/dist/src/table/index.js
CHANGED
|
@@ -40,7 +40,7 @@ class TableToken extends trBase_1.TrBaseToken {
|
|
|
40
40
|
lint(start = this.getAbsoluteIndex()) {
|
|
41
41
|
const errors = super.lint(start);
|
|
42
42
|
if (!this.closed) {
|
|
43
|
-
errors.push((0, lint_1.generateForChild)(this.firstChild, { start }, 'unclosed table'));
|
|
43
|
+
errors.push((0, lint_1.generateForChild)(this.firstChild, { start }, Parser.msg('unclosed $1', 'table')));
|
|
44
44
|
}
|
|
45
45
|
return errors;
|
|
46
46
|
}
|
package/dist/src/table/td.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ declare const TdToken_base: ((abstract new (...args: any[]) => {
|
|
|
18
18
|
readonly length: number;
|
|
19
19
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
20
20
|
text(separator?: string | undefined): string;
|
|
21
|
+
lint(start?: number | undefined): Parser.LintError[];
|
|
21
22
|
afterBuild(): void;
|
|
22
23
|
getAttribute<T_1 extends string>(key: T_1): TokenAttributeGetter<T_1>;
|
|
23
24
|
setAttribute<T_2 extends string>(key: T_2, value: TokenAttributeSetter<T_2>): void;
|
package/dist/src/table/trBase.js
CHANGED
|
@@ -20,7 +20,8 @@ class TrBaseToken extends base_1.TableBaseToken {
|
|
|
20
20
|
isArg = (token) => token.type === 'arg',
|
|
21
21
|
/** @ignore */
|
|
22
22
|
isTransclude = (token) => token.type === 'magic-word';
|
|
23
|
-
if (!first
|
|
23
|
+
if (!first
|
|
24
|
+
|| tdPattern.test(String(first))
|
|
24
25
|
|| isArg(first) && tdPattern.test(first.default || '')) {
|
|
25
26
|
return errors;
|
|
26
27
|
}
|
|
@@ -5,7 +5,7 @@ import { AttributesToken } from '../attributes';
|
|
|
5
5
|
import type { LintError } from '../../base';
|
|
6
6
|
declare const ExtToken_base: (abstract new (...args: any[]) => {
|
|
7
7
|
readonly childNodes: Parser.AstNodes[];
|
|
8
|
-
readonly "__#
|
|
8
|
+
readonly "__#7@#attributesChild": Parser.AttributesToken;
|
|
9
9
|
attributes: Record<string, string | true>;
|
|
10
10
|
className: string;
|
|
11
11
|
classList: Set<string>;
|
|
@@ -20,10 +20,8 @@ declare const ExtToken_base: (abstract new (...args: any[]) => {
|
|
|
20
20
|
readonly length: number;
|
|
21
21
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
22
22
|
text(separator?: string | undefined): string;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
* @classdesc `{childNodes: [AttributesToken, Token]}`
|
|
26
|
-
*/
|
|
23
|
+
lint(start?: number | undefined): Parser.LintError[];
|
|
24
|
+
insertAt(token: unknown, i?: number | undefined): unknown;
|
|
27
25
|
afterBuild(): void;
|
|
28
26
|
getAttribute<T extends string>(key: T): TokenAttributeGetter<T>;
|
|
29
27
|
setAttribute<T_1 extends string>(key: T_1, value: TokenAttributeSetter<T_1>): void;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import * as Parser from '../../index';
|
|
2
2
|
import { TagPairToken } from './index';
|
|
3
|
+
import type { LintError } from '../../base';
|
|
3
4
|
import type { AstText, Token } from '../../internal';
|
|
4
5
|
declare const IncludeToken_base: ((abstract new (...args: any[]) => {
|
|
5
6
|
text(): string;
|
|
7
|
+
lint(): Parser.LintError[];
|
|
6
8
|
readonly length: number;
|
|
7
9
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
8
10
|
insertAt(token: unknown, i?: number | undefined): unknown;
|
|
@@ -12,10 +14,7 @@ declare const IncludeToken_base: ((abstract new (...args: any[]) => {
|
|
|
12
14
|
addEventListener(events: string | string[], listener: AstListener): void;
|
|
13
15
|
replaceChildren(...elements: (string | Parser.AstNodes)[]): void;
|
|
14
16
|
}) & {
|
|
15
|
-
readonly hidden: true;
|
|
16
|
-
* `<includeonly>`或`<noinclude>`或`<onlyinclude>`
|
|
17
|
-
* @classdesc `{childNodes: [AstText, AstText]}`
|
|
18
|
-
*/
|
|
17
|
+
readonly hidden: true;
|
|
19
18
|
}) & typeof TagPairToken;
|
|
20
19
|
/**
|
|
21
20
|
* `<includeonly>`或`<noinclude>`或`<onlyinclude>`
|
|
@@ -40,6 +39,8 @@ export declare class IncludeToken extends IncludeToken_base {
|
|
|
40
39
|
*/
|
|
41
40
|
constructor(name: string, attr?: string, inner?: string, closed?: string, config?: Parser.Config, accum?: Token[]);
|
|
42
41
|
/** @override */
|
|
42
|
+
lint(start?: number): LintError[];
|
|
43
|
+
/** @override */
|
|
43
44
|
cloneNode(): this;
|
|
44
45
|
/**
|
|
45
46
|
* @override
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.IncludeToken = void 0;
|
|
4
4
|
const debug_1 = require("../../util/debug");
|
|
5
5
|
const constants_1 = require("../../util/constants");
|
|
6
|
+
const lint_1 = require("../../util/lint");
|
|
6
7
|
const hidden_1 = require("../../mixin/hidden");
|
|
7
8
|
const Parser = require("../../index");
|
|
8
9
|
const index_1 = require("./index");
|
|
@@ -36,6 +37,10 @@ class IncludeToken extends (0, hidden_1.hidden)(index_1.TagPairToken) {
|
|
|
36
37
|
constructor(name, attr = '', inner, closed, config = Parser.getConfig(), accum = []) {
|
|
37
38
|
super(name, attr, inner ?? '', inner === undefined ? closed : closed ?? '', config, accum);
|
|
38
39
|
}
|
|
40
|
+
/** @override */
|
|
41
|
+
lint(start = this.getAbsoluteIndex()) {
|
|
42
|
+
return this.closed ? [] : [(0, lint_1.generateForSelf)(this, { start }, Parser.msg('unclosed $1', `<${this.name}>`))];
|
|
43
|
+
}
|
|
39
44
|
/* NOT FOR BROWSER */
|
|
40
45
|
/** @override */
|
|
41
46
|
cloneNode() {
|
|
@@ -8,6 +8,7 @@ declare const TagPairToken_base: ((abstract new (...args: any[]) => {
|
|
|
8
8
|
readonly length: number;
|
|
9
9
|
toString(omit?: Set<string> | undefined, separator?: string | undefined): string;
|
|
10
10
|
text(separator?: string | undefined): string;
|
|
11
|
+
lint(start?: number | undefined): Parser.LintError[];
|
|
11
12
|
afterBuild(): void;
|
|
12
13
|
getAttribute<T_1 extends string>(key: T_1): TokenAttributeGetter<T_1>;
|
|
13
14
|
setAttribute<T_2 extends string>(key: T_2, value: TokenAttributeSetter<T_2>): void;
|
package/dist/src/transclude.js
CHANGED
|
@@ -116,9 +116,9 @@ class TranscludeToken extends index_1.Token {
|
|
|
116
116
|
return false;
|
|
117
117
|
}
|
|
118
118
|
const magicWord = lcModifier.slice(0, -1).toLowerCase(), isRaw = raw.includes(magicWord), isSubst = subst.includes(magicWord);
|
|
119
|
-
if (this.#raw && isRaw
|
|
120
|
-
|| (
|
|
121
|
-
|
|
119
|
+
if (this.#raw && isRaw
|
|
120
|
+
|| !this.#raw && (isSubst || modifier === '')
|
|
121
|
+
|| (debug_1.Shadow.running || this.length > 1) && (isRaw || isSubst || modifier === '')) {
|
|
122
122
|
this.setAttribute('modifier', modifier);
|
|
123
123
|
this.#raw = isRaw;
|
|
124
124
|
return Boolean(modifier);
|
package/i18n/zh-hans.json
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
"frame": "框架",
|
|
15
15
|
"full-width punctuation": "全角标点",
|
|
16
16
|
"horizontal-alignment": "水平对齐",
|
|
17
|
+
"HTML comment": "HTML注释",
|
|
17
18
|
"HTML tag in table attributes": "表格属性中的HTML标签",
|
|
18
19
|
"illegal attribute name": "非法的属性名",
|
|
19
20
|
"illegal module name": "非法的模块名称",
|
|
@@ -31,13 +32,13 @@
|
|
|
31
32
|
"missing module name": "缺少模块名称",
|
|
32
33
|
"nonzero tabindex": "不为0的tabindex",
|
|
33
34
|
"nothing should be in <$1>": "<$1>标签内不应有任何内容",
|
|
35
|
+
"quotes": "引号",
|
|
34
36
|
"section header in a HTML tag": "HTML标签属性中的段落标题",
|
|
37
|
+
"table": "表格",
|
|
35
38
|
"tag that is both closing and self-closing": "同时闭合和自封闭的标签",
|
|
36
39
|
"template in an internal link target": "内链目标包含模板",
|
|
37
40
|
"unbalanced \"=\" in a section header": "段落标题中不平衡的\"=\"",
|
|
38
|
-
"unclosed
|
|
39
|
-
"unclosed quotes": "未闭合的引号",
|
|
40
|
-
"unclosed table": "未闭合的表格",
|
|
41
|
+
"unclosed $1": "未闭合的$1",
|
|
41
42
|
"unclosed tag": "未闭合的标签",
|
|
42
43
|
"unescaped query string in an anonymous parameter": "匿名参数中未转义的查询参数",
|
|
43
44
|
"unexpected template argument": "未预期的模板参数",
|
package/i18n/zh-hant.json
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
"frame": "框架",
|
|
15
15
|
"full-width punctuation": "全形標點",
|
|
16
16
|
"horizontal-alignment": "水瓶對齊",
|
|
17
|
+
"HTML comment": "HTML註釋",
|
|
17
18
|
"HTML tag in table attributes": "表格屬性中的HTML標籤",
|
|
18
19
|
"illegal attribute name": "非法的屬性名",
|
|
19
20
|
"illegal module name": "非法的模組名稱",
|
|
@@ -31,13 +32,13 @@
|
|
|
31
32
|
"missing module name": "缺少模組名稱",
|
|
32
33
|
"nonzero tabindex": "不為0的tabindex",
|
|
33
34
|
"nothing should be in <$1>": "<$1>標籤內不應有任何內容",
|
|
35
|
+
"quotes": "引號",
|
|
34
36
|
"section header in a HTML tag": "HTML標籤屬性中的段落標題",
|
|
37
|
+
"table": "表格",
|
|
35
38
|
"tag that is both closing and self-closing": "同時閉合和自封閉的標籤",
|
|
36
39
|
"template in an internal link target": "內部連結目標包含模板",
|
|
37
40
|
"unbalanced \"=\" in a section header": "段落標題中不平衡的\"=\"",
|
|
38
|
-
"unclosed
|
|
39
|
-
"unclosed quotes": "未閉合的引號",
|
|
40
|
-
"unclosed table": "未閉合的表格",
|
|
41
|
+
"unclosed $1": "未閉合的$1",
|
|
41
42
|
"unclosed tag": "未閉合的標籤",
|
|
42
43
|
"unescaped query string in an anonymous parameter": "匿名參數中未轉義的查詢參數",
|
|
43
44
|
"unexpected template argument": "未預期的模板參數",
|