wikiparser-node 1.0.0-beta.2 → 1.0.0-beta.4
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/config/minimum.json +136 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +4 -4
- package/dist/internal.d.ts +1 -1
- package/dist/lib/element.d.ts +12 -8
- package/dist/lib/element.js +72 -57
- package/dist/lib/node.js +4 -5
- package/dist/lib/range.js +5 -8
- package/dist/lib/ranges.js +2 -2
- package/dist/lib/text.d.ts +2 -2
- package/dist/lib/text.js +5 -5
- package/dist/lib/title.d.ts +3 -2
- package/dist/lib/title.js +11 -10
- package/dist/mixin/attributesParent.js +2 -2
- package/dist/mixin/fixed.js +3 -3
- package/dist/mixin/hidden.js +2 -2
- package/dist/mixin/singleLine.js +4 -4
- package/dist/mixin/sol.js +6 -6
- package/dist/parser/braces.js +4 -9
- package/dist/parser/commentAndExt.js +24 -18
- package/dist/parser/converter.js +8 -7
- package/dist/parser/externalLinks.js +3 -4
- package/dist/parser/hrAndDoubleUnderscore.js +4 -7
- package/dist/parser/html.js +4 -7
- package/dist/parser/links.js +4 -5
- package/dist/parser/list.js +3 -6
- package/dist/parser/magicLinks.js +3 -3
- package/dist/parser/quotes.js +4 -5
- package/dist/parser/selector.js +4 -7
- package/dist/parser/table.js +6 -15
- package/dist/src/arg.d.ts +6 -5
- package/dist/src/arg.js +31 -27
- package/dist/src/atom.d.ts +2 -1
- package/dist/src/atom.js +4 -4
- package/dist/src/attribute.d.ts +14 -13
- package/dist/src/attribute.js +41 -31
- package/dist/src/attributes.d.ts +4 -3
- package/dist/src/attributes.js +15 -21
- package/dist/src/converter.d.ts +4 -3
- package/dist/src/converter.js +10 -17
- package/dist/src/converterFlags.d.ts +9 -8
- package/dist/src/converterFlags.js +14 -15
- package/dist/src/converterRule.d.ts +4 -3
- package/dist/src/converterRule.js +20 -22
- package/dist/src/extLink.d.ts +5 -4
- package/dist/src/extLink.js +16 -17
- package/dist/src/gallery.d.ts +7 -5
- package/dist/src/gallery.js +15 -19
- package/dist/src/heading.d.ts +12 -10
- package/dist/src/heading.js +17 -18
- package/dist/src/hidden.d.ts +4 -3
- package/dist/src/hidden.js +4 -4
- package/dist/src/html.d.ts +17 -15
- package/dist/src/html.js +25 -23
- package/dist/src/imageParameter.d.ts +5 -4
- package/dist/src/imageParameter.js +22 -23
- package/dist/src/imagemap.d.ts +7 -5
- package/dist/src/imagemap.js +14 -19
- package/dist/src/imagemapLink.d.ts +8 -7
- package/dist/src/imagemapLink.js +4 -8
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.js +48 -46
- package/dist/src/link/base.d.ts +5 -4
- package/dist/src/link/base.js +26 -28
- package/dist/src/link/category.d.ts +1 -1
- package/dist/src/link/category.js +3 -2
- package/dist/src/link/file.d.ts +5 -4
- package/dist/src/link/file.js +22 -20
- package/dist/src/link/galleryImage.d.ts +5 -5
- package/dist/src/link/galleryImage.js +11 -10
- package/dist/src/link/index.d.ts +1 -1
- package/dist/src/link/index.js +8 -6
- package/dist/src/magicLink.d.ts +3 -2
- package/dist/src/magicLink.js +10 -11
- package/dist/src/nested.d.ts +4 -2
- package/dist/src/nested.js +5 -9
- package/dist/src/nowiki/base.d.ts +6 -5
- package/dist/src/nowiki/base.js +4 -4
- package/dist/src/nowiki/comment.d.ts +6 -5
- package/dist/src/nowiki/comment.js +8 -10
- package/dist/src/nowiki/dd.d.ts +1 -1
- package/dist/src/nowiki/dd.js +3 -2
- package/dist/src/nowiki/doubleUnderscore.d.ts +8 -6
- package/dist/src/nowiki/doubleUnderscore.js +13 -13
- package/dist/src/nowiki/hr.d.ts +2 -8
- package/dist/src/nowiki/hr.js +4 -11
- package/dist/src/nowiki/index.d.ts +2 -1
- package/dist/src/nowiki/index.js +6 -5
- package/dist/src/nowiki/list.d.ts +4 -4
- package/dist/src/nowiki/list.js +3 -2
- package/dist/src/nowiki/noinclude.d.ts +2 -2
- package/dist/src/nowiki/noinclude.js +3 -2
- package/dist/src/nowiki/quote.d.ts +1 -8
- package/dist/src/nowiki/quote.js +25 -17
- package/dist/src/onlyinclude.d.ts +5 -4
- package/dist/src/onlyinclude.js +13 -13
- package/dist/src/paramTag/index.d.ts +5 -3
- package/dist/src/paramTag/index.js +7 -7
- package/dist/src/paramTag/inputbox.d.ts +3 -2
- package/dist/src/paramTag/inputbox.js +6 -5
- package/dist/src/parameter.d.ts +11 -10
- package/dist/src/parameter.js +29 -30
- package/dist/src/pre.d.ts +4 -2
- package/dist/src/pre.js +19 -14
- package/dist/src/syntax.d.ts +2 -1
- package/dist/src/syntax.js +7 -7
- package/dist/src/table/base.d.ts +6 -5
- package/dist/src/table/base.js +6 -8
- package/dist/src/table/index.d.ts +9 -8
- package/dist/src/table/index.js +23 -24
- package/dist/src/table/td.d.ts +12 -10
- package/dist/src/table/td.js +19 -20
- package/dist/src/table/tr.d.ts +3 -2
- package/dist/src/table/tr.js +4 -3
- package/dist/src/table/trBase.d.ts +3 -3
- package/dist/src/table/trBase.js +10 -10
- package/dist/src/tagPair/ext.d.ts +7 -6
- package/dist/src/tagPair/ext.js +5 -17
- package/dist/src/tagPair/include.d.ts +5 -5
- package/dist/src/tagPair/include.js +4 -5
- package/dist/src/tagPair/index.d.ts +7 -7
- package/dist/src/tagPair/index.js +13 -19
- package/dist/src/transclude.d.ts +10 -9
- package/dist/src/transclude.js +41 -46
- package/dist/util/lint.js +14 -4
- package/dist/util/string.js +21 -20
- package/package.json +11 -9
package/dist/src/attributes.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.AttributesToken = void 0;
|
|
4
4
|
const lint_1 = require("../util/lint");
|
|
5
5
|
const string_1 = require("../util/string");
|
|
6
|
-
const
|
|
6
|
+
const Parser = require("../index");
|
|
7
7
|
const _1 = require(".");
|
|
8
8
|
const atom_1 = require("./atom");
|
|
9
9
|
const attribute_1 = require("./attribute");
|
|
@@ -47,7 +47,7 @@ class AttributesToken extends _1.Token {
|
|
|
47
47
|
* @param type 标签类型
|
|
48
48
|
* @param name 标签名
|
|
49
49
|
*/
|
|
50
|
-
constructor(attr, type, name, config =
|
|
50
|
+
constructor(attr, type, name, config = Parser.getConfig(), accum = []) {
|
|
51
51
|
super(undefined, config, true, accum, {
|
|
52
52
|
AtomToken: ':', AttributeToken: ':',
|
|
53
53
|
});
|
|
@@ -72,9 +72,7 @@ class AttributesToken extends _1.Token {
|
|
|
72
72
|
const { index, 0: full, 1: key, 2: equal, 3: quoteStart, 4: quoted, 5: quoteEnd, 6: unquoted, } = mt;
|
|
73
73
|
out += attr.slice(lastIndex, index);
|
|
74
74
|
if (/^(?:[\w:]|\0\d+[t!~{}+-]\x7F)(?:[\w:.-]|\0\d+[t!~{}+-]\x7F)*$/u.test((0, string_1.removeComment)(key).trim())) {
|
|
75
|
-
const value = quoted ?? unquoted, quotes = [quoteStart, quoteEnd],
|
|
76
|
-
// @ts-expect-error abstract class
|
|
77
|
-
token = new attribute_1.AttributeToken(type.slice(0, -1), name, key, equal, value, quotes, config, accum);
|
|
75
|
+
const value = quoted ?? unquoted, quotes = [quoteStart, quoteEnd], token = new attribute_1.AttributeToken(type.slice(0, -1), name, key, equal, value, quotes, config, accum);
|
|
78
76
|
insertDirty();
|
|
79
77
|
super.insertAt(token);
|
|
80
78
|
}
|
|
@@ -109,8 +107,7 @@ class AttributesToken extends _1.Token {
|
|
|
109
107
|
* @param key 属性名
|
|
110
108
|
*/
|
|
111
109
|
getAttrToken(key) {
|
|
112
|
-
|
|
113
|
-
return tokens.at(-1);
|
|
110
|
+
return this.getAttrTokens(key).at(-1);
|
|
114
111
|
}
|
|
115
112
|
/**
|
|
116
113
|
* 获取标签属性
|
|
@@ -154,7 +151,7 @@ class AttributesToken extends _1.Token {
|
|
|
154
151
|
if (duplicated.size > 0) {
|
|
155
152
|
rect ??= { start, ...this.getRootNode().posFromIndex(start) };
|
|
156
153
|
for (const key of duplicated) {
|
|
157
|
-
errors.push(...attrs.get(key).map(attr => (0, lint_1.generateForChild)(attr, rect,
|
|
154
|
+
errors.push(...attrs.get(key).map(attr => (0, lint_1.generateForChild)(attr, rect, Parser.msg('duplicated $1 attribute', key))));
|
|
158
155
|
}
|
|
159
156
|
}
|
|
160
157
|
return errors;
|
|
@@ -178,15 +175,14 @@ class AttributesToken extends _1.Token {
|
|
|
178
175
|
this.removeAt(i);
|
|
179
176
|
}
|
|
180
177
|
}
|
|
181
|
-
if (!
|
|
182
|
-
|
|
178
|
+
if (!Parser.running && dirty) {
|
|
179
|
+
Parser.warn(`${this.constructor.name}.sanitize 方法将清理无效属性!`);
|
|
183
180
|
}
|
|
184
181
|
}
|
|
185
182
|
/** @override */
|
|
186
183
|
cloneNode() {
|
|
187
184
|
const cloned = this.cloneChildNodes();
|
|
188
|
-
return
|
|
189
|
-
// @ts-expect-error abstract class
|
|
185
|
+
return Parser.run(() => {
|
|
190
186
|
const token = new AttributesToken(undefined, this.type, this.name, this.getAttribute('config'));
|
|
191
187
|
token.append(...cloned);
|
|
192
188
|
return token;
|
|
@@ -224,10 +220,10 @@ class AttributesToken extends _1.Token {
|
|
|
224
220
|
super.insertAt(token, i);
|
|
225
221
|
const { previousVisibleSibling, nextVisibleSibling } = token, type = `${this.type.slice(0, -1)}-dirty`, config = this.getAttribute('config'), acceptable = { [`Stage-${stages[this.type]}`]: ':' };
|
|
226
222
|
if (nextVisibleSibling && !/^\s/u.test(String(nextVisibleSibling))) {
|
|
227
|
-
super.insertAt(
|
|
223
|
+
super.insertAt(Parser.run(() => new atom_1.AtomToken(' ', type, config, [], acceptable)), i + 1);
|
|
228
224
|
}
|
|
229
225
|
if (previousVisibleSibling && !/\s$/u.test(String(previousVisibleSibling))) {
|
|
230
|
-
super.insertAt(
|
|
226
|
+
super.insertAt(Parser.run(() => new atom_1.AtomToken(' ', type, config, [], acceptable)), i);
|
|
231
227
|
}
|
|
232
228
|
return token;
|
|
233
229
|
}
|
|
@@ -252,13 +248,11 @@ class AttributesToken extends _1.Token {
|
|
|
252
248
|
}
|
|
253
249
|
const config = this.getAttribute('config'), include = this.getAttribute('include'), parsedKey = this.type === 'ext-attrs'
|
|
254
250
|
? k
|
|
255
|
-
:
|
|
251
|
+
: Parser.run(() => String(new _1.Token(k, config).parseOnce(0, include).parseOnce()));
|
|
256
252
|
if (!/^(?:[\w:]|\0\d+[t!~{}+-]\x7F)(?:[\w:.-]|\0\d+[t!~{}+-]\x7F)*$/u.test(parsedKey)) {
|
|
257
253
|
throw new RangeError(`无效的属性名:${k}!`);
|
|
258
254
|
}
|
|
259
|
-
|
|
260
|
-
const newAttr = index_1.default.run(() => new attribute_1.AttributeToken(this.type.slice(0, -1), this.name, k, value === true ? '' : '=', value === true ? '' : value, ['"', '"'], config));
|
|
261
|
-
this.insertAt(newAttr);
|
|
255
|
+
this.insertAt(Parser.run(() => new attribute_1.AttributeToken(this.type.slice(0, -1), this.name, k, value === true ? '' : '=', value === true ? '' : value, ['"', '"'], config)));
|
|
262
256
|
}
|
|
263
257
|
/** @private */
|
|
264
258
|
matchesAttr(key, equal, val = '', i) {
|
|
@@ -342,11 +336,11 @@ class AttributesToken extends _1.Token {
|
|
|
342
336
|
return str && type !== 'table-attrs' && !leadingRegex[type].test(str) ? ' ' : '';
|
|
343
337
|
}
|
|
344
338
|
/** @override */
|
|
345
|
-
toString(
|
|
339
|
+
toString(omit) {
|
|
346
340
|
if (this.type === 'table-attrs') {
|
|
347
341
|
(0, string_1.normalizeSpace)(this);
|
|
348
342
|
}
|
|
349
|
-
const str = super.toString(
|
|
343
|
+
const str = super.toString(omit);
|
|
350
344
|
return `${this.#leadingSpace(str)}${str}`;
|
|
351
345
|
}
|
|
352
346
|
/** @private */
|
|
@@ -363,4 +357,4 @@ class AttributesToken extends _1.Token {
|
|
|
363
357
|
}
|
|
364
358
|
}
|
|
365
359
|
exports.AttributesToken = AttributesToken;
|
|
366
|
-
|
|
360
|
+
Parser.classes['AttributesToken'] = __filename;
|
package/dist/src/converter.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as Parser from '../index';
|
|
1
2
|
import { Token } from '.';
|
|
2
3
|
import { ConverterFlagsToken } from './converterFlags';
|
|
3
4
|
import { ConverterRuleToken } from './converterRule';
|
|
@@ -5,7 +6,7 @@ import { ConverterRuleToken } from './converterRule';
|
|
|
5
6
|
* 转换
|
|
6
7
|
* @classdesc `{childNodes: [ConverterFlagsToken, ...ConverterRuleToken]}`
|
|
7
8
|
*/
|
|
8
|
-
export declare
|
|
9
|
+
export declare class ConverterToken extends Token {
|
|
9
10
|
/** @browser */
|
|
10
11
|
readonly type = "converter";
|
|
11
12
|
childNodes: [ConverterFlagsToken, ...ConverterRuleToken[]];
|
|
@@ -23,12 +24,12 @@ export declare abstract class ConverterToken extends Token {
|
|
|
23
24
|
* @param flags 转换类型标记
|
|
24
25
|
* @param rules 转换规则
|
|
25
26
|
*/
|
|
26
|
-
constructor(flags: string[], rules: [string, ...string[]], config?:
|
|
27
|
+
constructor(flags: string[], rules: [string, ...string[]], config?: Parser.Config, accum?: Token[]);
|
|
27
28
|
/**
|
|
28
29
|
* @override
|
|
29
30
|
* @browser
|
|
30
31
|
*/
|
|
31
|
-
toString(
|
|
32
|
+
toString(omit?: Set<string>): string;
|
|
32
33
|
/**
|
|
33
34
|
* @override
|
|
34
35
|
* @browser
|
package/dist/src/converter.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ConverterToken = void 0;
|
|
4
4
|
const string_1 = require("../util/string");
|
|
5
|
-
const
|
|
5
|
+
const Parser = require("../index");
|
|
6
6
|
const _1 = require(".");
|
|
7
7
|
const converterFlags_1 = require("./converterFlags");
|
|
8
8
|
const converterRule_1 = require("./converterRule");
|
|
@@ -26,21 +26,15 @@ class ConverterToken extends _1.Token {
|
|
|
26
26
|
* @param flags 转换类型标记
|
|
27
27
|
* @param rules 转换规则
|
|
28
28
|
*/
|
|
29
|
-
constructor(flags, rules, config =
|
|
29
|
+
constructor(flags, rules, config = Parser.getConfig(), accum = []) {
|
|
30
30
|
super(undefined, config, true, accum);
|
|
31
|
-
// @ts-expect-error abstract class
|
|
32
31
|
this.append(new converterFlags_1.ConverterFlagsToken(flags, config, accum));
|
|
33
|
-
const [firstRule] = rules, hasColon = firstRule.includes(':'),
|
|
34
|
-
// @ts-expect-error abstract class
|
|
35
|
-
firstRuleToken = new converterRule_1.ConverterRuleToken(firstRule, hasColon, config, accum);
|
|
32
|
+
const [firstRule] = rules, hasColon = firstRule.includes(':'), firstRuleToken = new converterRule_1.ConverterRuleToken(firstRule, hasColon, config, accum);
|
|
36
33
|
if (hasColon && firstRuleToken.length === 1) {
|
|
37
|
-
// @ts-expect-error abstract class
|
|
38
34
|
this.insertAt(new converterRule_1.ConverterRuleToken(rules.join(';'), false, config, accum));
|
|
39
35
|
}
|
|
40
36
|
else {
|
|
41
|
-
this.append(firstRuleToken,
|
|
42
|
-
// @ts-expect-error abstract class
|
|
43
|
-
...rules.slice(1).map(rule => new converterRule_1.ConverterRuleToken(rule, true, config, accum)));
|
|
37
|
+
this.append(firstRuleToken, ...rules.slice(1).map(rule => new converterRule_1.ConverterRuleToken(rule, true, config, accum)));
|
|
44
38
|
}
|
|
45
39
|
this.protectChildren(0);
|
|
46
40
|
}
|
|
@@ -48,11 +42,11 @@ class ConverterToken extends _1.Token {
|
|
|
48
42
|
* @override
|
|
49
43
|
* @browser
|
|
50
44
|
*/
|
|
51
|
-
toString(
|
|
45
|
+
toString(omit) {
|
|
52
46
|
const { childNodes: [flags, ...rules] } = this;
|
|
53
|
-
return
|
|
47
|
+
return omit && this.matchesTypes(omit)
|
|
54
48
|
? ''
|
|
55
|
-
: `-{${flags.toString(
|
|
49
|
+
: `-{${flags.toString(omit)}${flags.length > 0 ? '|' : ''}${rules.map(rule => rule.toString(omit)).join(';')}}-`;
|
|
56
50
|
}
|
|
57
51
|
/**
|
|
58
52
|
* @override
|
|
@@ -81,9 +75,8 @@ class ConverterToken extends _1.Token {
|
|
|
81
75
|
/** @override */
|
|
82
76
|
cloneNode() {
|
|
83
77
|
const [flags, ...rules] = this.cloneChildNodes();
|
|
84
|
-
return
|
|
85
|
-
|
|
86
|
-
const token = new ConverterToken([], [], this.getAttribute('config'));
|
|
78
|
+
return Parser.run(() => {
|
|
79
|
+
const token = new ConverterToken([], [''], this.getAttribute('config'));
|
|
87
80
|
token.firstChild.safeReplaceWith(flags);
|
|
88
81
|
token.append(...rules);
|
|
89
82
|
return token;
|
|
@@ -138,4 +131,4 @@ class ConverterToken extends _1.Token {
|
|
|
138
131
|
}
|
|
139
132
|
}
|
|
140
133
|
exports.ConverterToken = ConverterToken;
|
|
141
|
-
|
|
134
|
+
Parser.classes['ConverterToken'] = __filename;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as Parser from '../index';
|
|
1
2
|
import { Token } from '.';
|
|
2
3
|
import { AtomToken } from './atom';
|
|
3
4
|
import type { LintError } from '../index';
|
|
@@ -6,7 +7,7 @@ import type { ConverterToken, ConverterRuleToken } from '../internal';
|
|
|
6
7
|
* 转换flags
|
|
7
8
|
* @classdesc `{childNodes: ...AtomToken}`
|
|
8
9
|
*/
|
|
9
|
-
export declare
|
|
10
|
+
export declare class ConverterFlagsToken extends Token {
|
|
10
11
|
#private;
|
|
11
12
|
/** @browser */
|
|
12
13
|
readonly type = "converter-flags";
|
|
@@ -26,22 +27,17 @@ export declare abstract class ConverterFlagsToken extends Token {
|
|
|
26
27
|
* @browser
|
|
27
28
|
* @param flags 转换类型标记
|
|
28
29
|
*/
|
|
29
|
-
constructor(flags: string[], config?:
|
|
30
|
+
constructor(flags: string[], config?: Parser.Config, accum?: Token[]);
|
|
30
31
|
/**
|
|
31
32
|
* @override
|
|
32
33
|
* @browser
|
|
33
34
|
*/
|
|
34
|
-
toString(
|
|
35
|
+
toString(omit?: Set<string>): string;
|
|
35
36
|
/**
|
|
36
37
|
* @override
|
|
37
38
|
* @browser
|
|
38
39
|
*/
|
|
39
40
|
text(): string;
|
|
40
|
-
/**
|
|
41
|
-
* @override
|
|
42
|
-
* @browser
|
|
43
|
-
*/
|
|
44
|
-
print(): string;
|
|
45
41
|
/**
|
|
46
42
|
* 获取未知的转换类型标记
|
|
47
43
|
* @browser
|
|
@@ -57,6 +53,11 @@ export declare abstract class ConverterFlagsToken extends Token {
|
|
|
57
53
|
* @browser
|
|
58
54
|
*/
|
|
59
55
|
lint(start?: number): LintError[];
|
|
56
|
+
/**
|
|
57
|
+
* @override
|
|
58
|
+
* @browser
|
|
59
|
+
*/
|
|
60
|
+
print(): string;
|
|
60
61
|
/** @override */
|
|
61
62
|
cloneNode(): this;
|
|
62
63
|
/**
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ConverterFlagsToken = void 0;
|
|
4
4
|
const lint_1 = require("../util/lint");
|
|
5
|
-
const
|
|
5
|
+
const Parser = require("../index");
|
|
6
6
|
const _1 = require(".");
|
|
7
7
|
const atom_1 = require("./atom");
|
|
8
8
|
const definedFlags = new Set(['A', 'T', 'R', 'D', '-', 'H', 'N']);
|
|
@@ -19,7 +19,7 @@ class ConverterFlagsToken extends _1.Token {
|
|
|
19
19
|
* @browser
|
|
20
20
|
* @param flags 转换类型标记
|
|
21
21
|
*/
|
|
22
|
-
constructor(flags, config =
|
|
22
|
+
constructor(flags, config = Parser.getConfig(), accum = []) {
|
|
23
23
|
super(undefined, config, true, accum, {
|
|
24
24
|
AtomToken: ':',
|
|
25
25
|
});
|
|
@@ -39,8 +39,8 @@ class ConverterFlagsToken extends _1.Token {
|
|
|
39
39
|
* @override
|
|
40
40
|
* @browser
|
|
41
41
|
*/
|
|
42
|
-
toString(
|
|
43
|
-
return super.toString(
|
|
42
|
+
toString(omit) {
|
|
43
|
+
return super.toString(omit, ';');
|
|
44
44
|
}
|
|
45
45
|
/**
|
|
46
46
|
* @override
|
|
@@ -53,13 +53,6 @@ class ConverterFlagsToken extends _1.Token {
|
|
|
53
53
|
getGaps(i) {
|
|
54
54
|
return i < this.length - 1 ? 1 : 0;
|
|
55
55
|
}
|
|
56
|
-
/**
|
|
57
|
-
* @override
|
|
58
|
-
* @browser
|
|
59
|
-
*/
|
|
60
|
-
print() {
|
|
61
|
-
return super.print({ sep: ';' });
|
|
62
|
-
}
|
|
63
56
|
/**
|
|
64
57
|
* 获取未知的转换类型标记
|
|
65
58
|
* @browser
|
|
@@ -95,11 +88,17 @@ class ConverterFlagsToken extends _1.Token {
|
|
|
95
88
|
}
|
|
96
89
|
return errors;
|
|
97
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* @override
|
|
93
|
+
* @browser
|
|
94
|
+
*/
|
|
95
|
+
print() {
|
|
96
|
+
return super.print({ sep: ';' });
|
|
97
|
+
}
|
|
98
98
|
/** @override */
|
|
99
99
|
cloneNode() {
|
|
100
100
|
const cloned = this.cloneChildNodes();
|
|
101
|
-
return
|
|
102
|
-
// @ts-expect-error abstract class
|
|
101
|
+
return Parser.run(() => {
|
|
103
102
|
const token = new ConverterFlagsToken([], this.getAttribute('config'));
|
|
104
103
|
token.append(...cloned);
|
|
105
104
|
token.afterBuild();
|
|
@@ -209,7 +208,7 @@ class ConverterFlagsToken extends _1.Token {
|
|
|
209
208
|
* @param flag 转换类型标记
|
|
210
209
|
*/
|
|
211
210
|
#newFlag(flag) {
|
|
212
|
-
const token =
|
|
211
|
+
const token = Parser.run(() => new atom_1.AtomToken(flag, 'converter-flag', this.getAttribute('config')));
|
|
213
212
|
this.insertAt(token);
|
|
214
213
|
}
|
|
215
214
|
/**
|
|
@@ -235,4 +234,4 @@ class ConverterFlagsToken extends _1.Token {
|
|
|
235
234
|
}
|
|
236
235
|
}
|
|
237
236
|
exports.ConverterFlagsToken = ConverterFlagsToken;
|
|
238
|
-
|
|
237
|
+
Parser.classes['ConverterFlagsToken'] = __filename;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as Parser from '../index';
|
|
1
2
|
import { Token } from '.';
|
|
2
3
|
import { AtomToken } from './atom';
|
|
3
4
|
import type { ConverterToken, ConverterFlagsToken } from '../internal';
|
|
@@ -5,7 +6,7 @@ import type { ConverterToken, ConverterFlagsToken } from '../internal';
|
|
|
5
6
|
* 转换规则
|
|
6
7
|
* @classdesc `{childNodes: ...AtomToken}`
|
|
7
8
|
*/
|
|
8
|
-
export declare
|
|
9
|
+
export declare class ConverterRuleToken extends Token {
|
|
9
10
|
/** @browser */
|
|
10
11
|
readonly type = "converter-rule";
|
|
11
12
|
childNodes: [AtomToken] | [AtomToken, AtomToken] | [AtomToken, AtomToken, AtomToken];
|
|
@@ -36,12 +37,12 @@ export declare abstract class ConverterRuleToken extends Token {
|
|
|
36
37
|
* @param rule 转换规则
|
|
37
38
|
* @param hasColon 是否带有":"
|
|
38
39
|
*/
|
|
39
|
-
constructor(rule: string, hasColon?: boolean, config?:
|
|
40
|
+
constructor(rule: string, hasColon?: boolean, config?: Parser.Config, accum?: Token[]);
|
|
40
41
|
/**
|
|
41
42
|
* @override
|
|
42
43
|
* @browser
|
|
43
44
|
*/
|
|
44
|
-
toString(
|
|
45
|
+
toString(omit?: Set<string>): string;
|
|
45
46
|
/**
|
|
46
47
|
* @override
|
|
47
48
|
* @browser
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ConverterRuleToken = void 0;
|
|
4
4
|
const debug_1 = require("../util/debug");
|
|
5
5
|
const string_1 = require("../util/string");
|
|
6
|
-
const
|
|
6
|
+
const Parser = require("../index");
|
|
7
7
|
const _1 = require(".");
|
|
8
8
|
const atom_1 = require("./atom");
|
|
9
9
|
/**
|
|
@@ -59,7 +59,7 @@ class ConverterRuleToken extends _1.Token {
|
|
|
59
59
|
* @param rule 转换规则
|
|
60
60
|
* @param hasColon 是否带有":"
|
|
61
61
|
*/
|
|
62
|
-
constructor(rule, hasColon = true, config =
|
|
62
|
+
constructor(rule, hasColon = true, config = Parser.getConfig(), accum = []) {
|
|
63
63
|
super(undefined, config, true, accum);
|
|
64
64
|
if (hasColon) {
|
|
65
65
|
const i = rule.indexOf(':'), j = rule.slice(0, i).indexOf('=>'), v = j === -1 ? rule.slice(0, i) : rule.slice(j + 2, i);
|
|
@@ -83,13 +83,13 @@ class ConverterRuleToken extends _1.Token {
|
|
|
83
83
|
* @override
|
|
84
84
|
* @browser
|
|
85
85
|
*/
|
|
86
|
-
toString(
|
|
86
|
+
toString(omit) {
|
|
87
87
|
const { childNodes } = this;
|
|
88
|
-
if (childNodes.length === 3 && !(
|
|
88
|
+
if (childNodes.length === 3 && !(omit && this.matchesTypes(omit))) {
|
|
89
89
|
const [from, variant, to] = childNodes;
|
|
90
|
-
return `${from.toString(
|
|
90
|
+
return `${from.toString(omit)}=>${variant.toString(omit)}:${to.toString(omit)}`;
|
|
91
91
|
}
|
|
92
|
-
return super.toString(
|
|
92
|
+
return super.toString(omit, ':');
|
|
93
93
|
}
|
|
94
94
|
/**
|
|
95
95
|
* @override
|
|
@@ -105,8 +105,7 @@ class ConverterRuleToken extends _1.Token {
|
|
|
105
105
|
}
|
|
106
106
|
/** @private */
|
|
107
107
|
getGaps(i) {
|
|
108
|
-
|
|
109
|
-
return i === 0 && length === 3 ? 2 : 1;
|
|
108
|
+
return i === 0 && this.length === 3 ? 2 : 1;
|
|
110
109
|
}
|
|
111
110
|
/**
|
|
112
111
|
* @override
|
|
@@ -123,9 +122,8 @@ class ConverterRuleToken extends _1.Token {
|
|
|
123
122
|
/** @override */
|
|
124
123
|
cloneNode() {
|
|
125
124
|
const cloned = this.cloneChildNodes(), placeholders = ['', 'zh:', '=>zh:'], placeholder = placeholders[cloned.length - 1];
|
|
126
|
-
return
|
|
127
|
-
|
|
128
|
-
const token = new ConverterRuleToken(placeholder, placeholder, this.getAttribute('config'));
|
|
125
|
+
return Parser.run(() => {
|
|
126
|
+
const token = new ConverterRuleToken(placeholder, Boolean(placeholder), this.getAttribute('config'));
|
|
129
127
|
for (let i = 0; i < cloned.length; i++) {
|
|
130
128
|
token.childNodes[i].safeReplaceWith(cloned[i]);
|
|
131
129
|
}
|
|
@@ -182,17 +180,17 @@ class ConverterRuleToken extends _1.Token {
|
|
|
182
180
|
* @throws `SyntaxError` 非法的转换目标
|
|
183
181
|
*/
|
|
184
182
|
setTo(to) {
|
|
185
|
-
const config = this.getAttribute('config'), include = this.getAttribute('include'), root =
|
|
183
|
+
const config = this.getAttribute('config'), include = this.getAttribute('include'), root = Parser.parse(`-{|${config.variants[0] ?? 'zh'}:${to}}-`, include, undefined, config), { length, firstChild: converter } = root;
|
|
186
184
|
if (length !== 1 || converter.type !== 'converter') {
|
|
187
185
|
throw new SyntaxError(`非法的转换目标:${(0, string_1.noWrap)(to)}`);
|
|
188
186
|
}
|
|
189
187
|
const { lastChild: converterRule } = converter;
|
|
190
|
-
if (converter.length
|
|
191
|
-
|
|
192
|
-
converterRule.destroy();
|
|
193
|
-
this.lastChild.safeReplaceWith(lastChild);
|
|
188
|
+
if (converter.length !== 2 || converterRule.length !== 2) {
|
|
189
|
+
throw new SyntaxError(`非法的转换目标:${(0, string_1.noWrap)(to)}`);
|
|
194
190
|
}
|
|
195
|
-
|
|
191
|
+
const { lastChild } = converterRule;
|
|
192
|
+
converterRule.destroy();
|
|
193
|
+
this.lastChild.safeReplaceWith(lastChild);
|
|
196
194
|
}
|
|
197
195
|
/**
|
|
198
196
|
* 设置语言变体
|
|
@@ -205,7 +203,7 @@ class ConverterRuleToken extends _1.Token {
|
|
|
205
203
|
throw new RangeError(`无效的语言变体:${v}`);
|
|
206
204
|
}
|
|
207
205
|
else if (this.length === 1) {
|
|
208
|
-
super.insertAt(
|
|
206
|
+
super.insertAt(Parser.run(() => new atom_1.AtomToken(variant, 'converter-rule-variant', config)), 0);
|
|
209
207
|
}
|
|
210
208
|
else {
|
|
211
209
|
this.childNodes.at(-2).setText(variant);
|
|
@@ -218,11 +216,11 @@ class ConverterRuleToken extends _1.Token {
|
|
|
218
216
|
* @throws `SyntaxError` 非法的转换原文
|
|
219
217
|
*/
|
|
220
218
|
setFrom(from) {
|
|
221
|
-
const { variant, unidirectional } = this;
|
|
219
|
+
const { variant, unidirectional, firstChild } = this;
|
|
222
220
|
if (!variant) {
|
|
223
221
|
throw new Error('请先指定语言变体!');
|
|
224
222
|
}
|
|
225
|
-
const config = this.getAttribute('config'), root =
|
|
223
|
+
const config = this.getAttribute('config'), root = Parser.parse(`-{|${from}=>${variant}:}-`, this.getAttribute('include'), undefined, config), { length, firstChild: converter } = root;
|
|
226
224
|
if (length !== 1 || converter.type !== 'converter') {
|
|
227
225
|
throw new SyntaxError(`非法的转换原文:${(0, string_1.noWrap)(from)}`);
|
|
228
226
|
}
|
|
@@ -231,7 +229,7 @@ class ConverterRuleToken extends _1.Token {
|
|
|
231
229
|
throw new SyntaxError(`非法的转换原文:${(0, string_1.noWrap)(from)}`);
|
|
232
230
|
}
|
|
233
231
|
else if (unidirectional) {
|
|
234
|
-
|
|
232
|
+
firstChild.safeReplaceWith(converterRule.firstChild);
|
|
235
233
|
}
|
|
236
234
|
else {
|
|
237
235
|
super.insertAt(converterRule.firstChild, 0);
|
|
@@ -252,4 +250,4 @@ class ConverterRuleToken extends _1.Token {
|
|
|
252
250
|
}
|
|
253
251
|
}
|
|
254
252
|
exports.ConverterRuleToken = ConverterRuleToken;
|
|
255
|
-
|
|
253
|
+
Parser.classes['ConverterRuleToken'] = __filename;
|
package/dist/src/extLink.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import * as Parser from '../index';
|
|
1
2
|
import { Token } from '.';
|
|
2
3
|
import { MagicLinkToken } from './magicLink';
|
|
3
4
|
/**
|
|
4
5
|
* 外链
|
|
5
6
|
* @classdesc `{childNodes: [MagicLinkToken, ?Token]}`
|
|
6
7
|
*/
|
|
7
|
-
export declare
|
|
8
|
+
export declare class ExtLinkToken extends Token {
|
|
8
9
|
#private;
|
|
9
10
|
/** @browser */
|
|
10
11
|
readonly type = "ext-link";
|
|
@@ -28,12 +29,12 @@ export declare abstract class ExtLinkToken extends Token {
|
|
|
28
29
|
* @param space 空白字符
|
|
29
30
|
* @param text 链接文字
|
|
30
31
|
*/
|
|
31
|
-
constructor(url
|
|
32
|
+
constructor(url?: string, space?: string, text?: string, config?: Parser.Config, accum?: Token[]);
|
|
32
33
|
/**
|
|
33
34
|
* @override
|
|
34
35
|
* @browser
|
|
35
36
|
*/
|
|
36
|
-
toString(
|
|
37
|
+
toString(omit?: Set<string>): string;
|
|
37
38
|
/**
|
|
38
39
|
* @override
|
|
39
40
|
* @browser
|
|
@@ -53,7 +54,7 @@ export declare abstract class ExtLinkToken extends Token {
|
|
|
53
54
|
* @param url 网址
|
|
54
55
|
* @throws `SyntaxError` 非法的外链目标
|
|
55
56
|
*/
|
|
56
|
-
setTarget(url: string
|
|
57
|
+
setTarget(url: string): void;
|
|
57
58
|
/**
|
|
58
59
|
* 设置链接显示文字
|
|
59
60
|
* @param str 链接显示文字
|
package/dist/src/extLink.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ExtLinkToken = void 0;
|
|
4
4
|
const string_1 = require("../util/string");
|
|
5
|
-
const
|
|
5
|
+
const Parser = require("../index");
|
|
6
6
|
const _1 = require(".");
|
|
7
7
|
const magicLink_1 = require("./magicLink");
|
|
8
8
|
/**
|
|
@@ -40,7 +40,7 @@ class ExtLinkToken extends _1.Token {
|
|
|
40
40
|
* @param space 空白字符
|
|
41
41
|
* @param text 链接文字
|
|
42
42
|
*/
|
|
43
|
-
constructor(url, space = '', text = '', config =
|
|
43
|
+
constructor(url, space = '', text = '', config = Parser.getConfig(), accum = []) {
|
|
44
44
|
super(undefined, config, true, accum, {
|
|
45
45
|
MagicLinkToken: 0, Token: 1,
|
|
46
46
|
});
|
|
@@ -51,7 +51,7 @@ class ExtLinkToken extends _1.Token {
|
|
|
51
51
|
'Stage-7': ':', ConverterToken: ':',
|
|
52
52
|
});
|
|
53
53
|
inner.type = 'ext-link-text';
|
|
54
|
-
this.insertAt(inner.setAttribute('stage',
|
|
54
|
+
this.insertAt(inner.setAttribute('stage', Parser.MAX_STAGE - 1));
|
|
55
55
|
}
|
|
56
56
|
this.protectChildren(0);
|
|
57
57
|
}
|
|
@@ -59,16 +59,16 @@ class ExtLinkToken extends _1.Token {
|
|
|
59
59
|
* @override
|
|
60
60
|
* @browser
|
|
61
61
|
*/
|
|
62
|
-
toString(
|
|
63
|
-
if (
|
|
62
|
+
toString(omit) {
|
|
63
|
+
if (omit && this.matchesTypes(omit)) {
|
|
64
64
|
return '';
|
|
65
65
|
}
|
|
66
66
|
else if (this.length === 1) {
|
|
67
|
-
return `[${super.toString(
|
|
67
|
+
return `[${super.toString(omit)}${this.#space}]`;
|
|
68
68
|
}
|
|
69
69
|
this.#correct();
|
|
70
70
|
(0, string_1.normalizeSpace)(this.lastChild);
|
|
71
|
-
return `[${super.toString(
|
|
71
|
+
return `[${super.toString(omit, this.#space)}]`;
|
|
72
72
|
}
|
|
73
73
|
/**
|
|
74
74
|
* @override
|
|
@@ -97,8 +97,7 @@ class ExtLinkToken extends _1.Token {
|
|
|
97
97
|
/** @override */
|
|
98
98
|
cloneNode() {
|
|
99
99
|
const [url, text] = this.cloneChildNodes();
|
|
100
|
-
return
|
|
101
|
-
// @ts-expect-error abstract class
|
|
100
|
+
return Parser.run(() => {
|
|
102
101
|
const token = new ExtLinkToken(undefined, '', '', this.getAttribute('config'));
|
|
103
102
|
token.firstChild.safeReplaceWith(url);
|
|
104
103
|
if (text) {
|
|
@@ -125,13 +124,13 @@ class ExtLinkToken extends _1.Token {
|
|
|
125
124
|
* @throws `SyntaxError` 非法的外链目标
|
|
126
125
|
*/
|
|
127
126
|
setTarget(url) {
|
|
128
|
-
const
|
|
129
|
-
if (length
|
|
130
|
-
|
|
131
|
-
extLink.destroy();
|
|
132
|
-
this.firstChild.safeReplaceWith(firstChild);
|
|
127
|
+
const root = Parser.parse(`[${url}]`, this.getAttribute('include'), 8, this.getAttribute('config')), { length, firstChild: extLink } = root;
|
|
128
|
+
if (length !== 1 || !(extLink instanceof ExtLinkToken) || extLink.length !== 1) {
|
|
129
|
+
throw new SyntaxError(`非法的外链目标:${url}`);
|
|
133
130
|
}
|
|
134
|
-
|
|
131
|
+
const { firstChild } = extLink;
|
|
132
|
+
extLink.destroy();
|
|
133
|
+
this.firstChild.safeReplaceWith(firstChild);
|
|
135
134
|
}
|
|
136
135
|
/**
|
|
137
136
|
* 设置链接显示文字
|
|
@@ -139,7 +138,7 @@ class ExtLinkToken extends _1.Token {
|
|
|
139
138
|
* @throws `SyntaxError` 非法的链接显示文字
|
|
140
139
|
*/
|
|
141
140
|
setLinkText(str) {
|
|
142
|
-
const root =
|
|
141
|
+
const root = Parser.parse(`[//url ${str}]`, this.getAttribute('include'), 8, this.getAttribute('config')), { length, firstChild: extLink } = root;
|
|
143
142
|
if (length !== 1 || !(extLink instanceof ExtLinkToken) || extLink.length !== 2) {
|
|
144
143
|
throw new SyntaxError(`非法的外链文字:${(0, string_1.noWrap)(str)}`);
|
|
145
144
|
}
|
|
@@ -154,4 +153,4 @@ class ExtLinkToken extends _1.Token {
|
|
|
154
153
|
}
|
|
155
154
|
}
|
|
156
155
|
exports.ExtLinkToken = ExtLinkToken;
|
|
157
|
-
|
|
156
|
+
Parser.classes['ExtLinkToken'] = __filename;
|
package/dist/src/gallery.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as Parser from '../index';
|
|
1
2
|
import { Token } from '.';
|
|
2
3
|
import { GalleryImageToken } from './link/galleryImage';
|
|
3
4
|
import { HiddenToken } from './hidden';
|
|
@@ -7,9 +8,10 @@ import type { AstNodes, AstText, AttributesToken, ExtToken } from '../internal';
|
|
|
7
8
|
* gallery标签
|
|
8
9
|
* @classdesc `{childNodes: ...(GalleryImageToken|HiddenToken|AstText)}`
|
|
9
10
|
*/
|
|
10
|
-
export declare
|
|
11
|
+
export declare class GalleryToken extends Token {
|
|
11
12
|
/** @browser */
|
|
12
13
|
readonly type = "ext-inner";
|
|
14
|
+
name: 'gallery';
|
|
13
15
|
childNodes: (GalleryImageToken | HiddenToken | AstText)[];
|
|
14
16
|
abstract get children(): (GalleryImageToken | HiddenToken)[];
|
|
15
17
|
abstract get firstChild(): GalleryImageToken | HiddenToken | AstText | undefined;
|
|
@@ -28,12 +30,12 @@ export declare abstract class GalleryToken extends Token {
|
|
|
28
30
|
* @browser
|
|
29
31
|
* @param inner 标签内部wikitext
|
|
30
32
|
*/
|
|
31
|
-
constructor(inner?: string, config?:
|
|
33
|
+
constructor(inner?: string, config?: Parser.Config, accum?: Token[]);
|
|
32
34
|
/**
|
|
33
35
|
* @override
|
|
34
36
|
* @browser
|
|
35
37
|
*/
|
|
36
|
-
toString(
|
|
38
|
+
toString(omit?: Set<string>): string;
|
|
37
39
|
/**
|
|
38
40
|
* @override
|
|
39
41
|
* @browser
|
|
@@ -43,12 +45,12 @@ export declare abstract class GalleryToken extends Token {
|
|
|
43
45
|
* @override
|
|
44
46
|
* @browser
|
|
45
47
|
*/
|
|
46
|
-
|
|
48
|
+
lint(start?: number): LintError[];
|
|
47
49
|
/**
|
|
48
50
|
* @override
|
|
49
51
|
* @browser
|
|
50
52
|
*/
|
|
51
|
-
|
|
53
|
+
print(): string;
|
|
52
54
|
/** @override */
|
|
53
55
|
cloneNode(): this;
|
|
54
56
|
/**
|