wikiparser-node 1.21.1 → 1.21.3
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/README.md +12 -6
- package/bundle/bundle-es8.min.js +25 -25
- package/bundle/bundle-lsp.min.js +26 -26
- package/bundle/bundle.min.js +25 -25
- package/coverage/badge.svg +1 -1
- package/dist/addon/table.js +5 -5
- package/dist/addon/token.js +116 -7
- package/dist/base.d.mts +6 -1
- package/dist/base.d.ts +6 -1
- package/dist/bin/config.js +3 -3
- package/dist/index.d.ts +9 -2
- package/dist/index.js +10 -1
- package/dist/lib/element.d.ts +1 -0
- package/dist/lib/element.js +3 -1
- package/dist/lib/lintConfig.d.ts +13 -0
- package/dist/lib/lintConfig.js +161 -0
- package/dist/lib/lsp.d.ts +2 -0
- package/dist/lib/lsp.js +11 -8
- package/dist/lib/node.d.ts +20 -3
- package/dist/lib/node.js +647 -585
- package/dist/lib/text.d.ts +2 -0
- package/dist/lib/text.js +21 -12
- package/dist/lib/title.d.ts +3 -1
- package/dist/lib/title.js +3 -1
- package/dist/mixin/attributesParent.d.ts +6 -6
- package/dist/mixin/attributesParent.js +4 -4
- package/dist/mixin/cached.d.ts +5 -0
- package/dist/mixin/cached.js +22 -0
- package/dist/mixin/clone.d.ts +5 -0
- package/dist/mixin/clone.js +23 -0
- package/dist/mixin/hidden.js +68 -18
- package/dist/mixin/sol.js +2 -2
- package/dist/parser/commentAndExt.js +1 -1
- package/dist/parser/html.js +3 -3
- package/dist/parser/list.js +6 -3
- package/dist/parser/table.js +4 -4
- package/dist/src/arg.js +14 -8
- package/dist/src/atom.js +76 -31
- package/dist/src/attribute.d.ts +1 -0
- package/dist/src/attribute.js +51 -20
- package/dist/src/attributes.d.ts +7 -7
- package/dist/src/attributes.js +415 -366
- package/dist/src/commented.js +81 -35
- package/dist/src/converter.js +14 -8
- package/dist/src/converterFlags.js +33 -22
- package/dist/src/converterRule.js +263 -216
- package/dist/src/extLink.js +23 -18
- package/dist/src/gallery.d.ts +12 -2
- package/dist/src/gallery.js +30 -10
- package/dist/src/heading.d.ts +6 -1
- package/dist/src/heading.js +73 -59
- package/dist/src/hidden.js +14 -9
- package/dist/src/html.js +29 -10
- package/dist/src/imageParameter.d.ts +1 -0
- package/dist/src/imageParameter.js +15 -7
- package/dist/src/imagemap.js +35 -28
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.js +66 -49
- package/dist/src/link/base.js +17 -12
- package/dist/src/link/file.d.ts +9 -1
- package/dist/src/link/file.js +401 -346
- package/dist/src/link/galleryImage.js +12 -6
- package/dist/src/link/index.js +7 -3
- package/dist/src/link/redirectTarget.d.ts +6 -1
- package/dist/src/link/redirectTarget.js +14 -5
- package/dist/src/magicLink.d.ts +6 -1
- package/dist/src/magicLink.js +30 -16
- package/dist/src/nested.js +122 -74
- package/dist/src/nowiki/base.js +5 -2
- package/dist/src/nowiki/comment.js +6 -2
- package/dist/src/nowiki/index.js +4 -4
- package/dist/src/nowiki/listBase.d.ts +6 -1
- package/dist/src/nowiki/listBase.js +7 -2
- package/dist/src/nowiki/quote.d.ts +6 -1
- package/dist/src/nowiki/quote.js +22 -10
- package/dist/src/onlyinclude.js +17 -9
- package/dist/src/paramTag/index.js +21 -14
- package/dist/src/parameter.js +26 -20
- package/dist/src/pre.js +91 -45
- package/dist/src/redirect.js +1 -1
- package/dist/src/syntax.js +14 -10
- package/dist/src/table/index.js +550 -502
- package/dist/src/table/td.js +66 -59
- package/dist/src/table/trBase.js +179 -129
- package/dist/src/tagPair/ext.js +32 -20
- package/dist/src/tagPair/include.js +5 -5
- package/dist/src/tagPair/translate.js +150 -103
- package/dist/src/transclude.d.ts +21 -8
- package/dist/src/transclude.js +56 -34
- package/dist/util/html.js +45 -43
- package/dist/util/lint.js +10 -7
- package/dist/util/string.js +13 -7
- package/extensions/dist/base.js +2 -2
- package/i18n/zh-hans.json +1 -1
- package/i18n/zh-hant.json +1 -1
- package/package.json +15 -15
|
@@ -33,12 +33,16 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
|
|
|
33
33
|
}
|
|
34
34
|
return useValue ? value : void 0;
|
|
35
35
|
};
|
|
36
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
+
};
|
|
36
39
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
40
|
exports.GalleryImageToken = void 0;
|
|
38
41
|
const lint_1 = require("../../util/lint");
|
|
39
42
|
const constants_1 = require("../../util/constants");
|
|
40
43
|
const padded_1 = require("../../mixin/padded");
|
|
41
|
-
const index_1 = require("
|
|
44
|
+
const index_1 = __importDefault(require("../../index"));
|
|
45
|
+
const index_2 = require("../index");
|
|
42
46
|
const file_1 = require("./file");
|
|
43
47
|
/* NOT FOR BROWSER */
|
|
44
48
|
const debug_1 = require("../../util/debug");
|
|
@@ -89,7 +93,7 @@ let GalleryImageToken = (() => {
|
|
|
89
93
|
let token;
|
|
90
94
|
if (text !== undefined) {
|
|
91
95
|
const { length } = accum;
|
|
92
|
-
token = new
|
|
96
|
+
token = new index_2.Token(text, config, accum);
|
|
93
97
|
for (let n = 1; n < constants_1.MAX_STAGE; n++) {
|
|
94
98
|
token.parseOnce();
|
|
95
99
|
}
|
|
@@ -116,9 +120,9 @@ let GalleryImageToken = (() => {
|
|
|
116
120
|
}
|
|
117
121
|
/** @private */
|
|
118
122
|
lint(start = this.getAbsoluteIndex(), re) {
|
|
119
|
-
const errors = super.lint(start, re);
|
|
120
|
-
if (this.#lint()) {
|
|
121
|
-
const e = (0, lint_1.generateForSelf)(this, { start },
|
|
123
|
+
const errors = super.lint(start, re), rule = 'invalid-gallery', s = index_1.default.lintConfig.getSeverity(rule, 'image');
|
|
124
|
+
if (s && this.#lint()) {
|
|
125
|
+
const e = (0, lint_1.generateForSelf)(this, { start }, rule, 'invalid gallery image', s);
|
|
122
126
|
e.suggestions = [{ desc: 'prefix', range: [start, start], text: 'File:' }];
|
|
123
127
|
errors.push(e);
|
|
124
128
|
}
|
|
@@ -139,7 +143,9 @@ let GalleryImageToken = (() => {
|
|
|
139
143
|
* @throws `TypeError` 不可插入文本节点
|
|
140
144
|
*/
|
|
141
145
|
insertAt(child, i) {
|
|
142
|
-
if (this.type === 'gallery-image'
|
|
146
|
+
if (this.type === 'gallery-image'
|
|
147
|
+
&& child.is('image-parameter')
|
|
148
|
+
&& !imageParameter_1.galleryParams.has(child.name)) {
|
|
143
149
|
child.setAttribute('name', 'invalid');
|
|
144
150
|
}
|
|
145
151
|
return super.insertAt(child, i);
|
package/dist/src/link/index.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.LinkToken = void 0;
|
|
4
7
|
const lint_1 = require("../../util/lint");
|
|
8
|
+
const index_1 = __importDefault(require("../../index"));
|
|
5
9
|
const base_1 = require("./base");
|
|
6
10
|
/* NOT FOR BROWSER */
|
|
7
11
|
const constants_1 = require("../../util/constants");
|
|
@@ -41,9 +45,9 @@ class LinkToken extends base_1.LinkBaseToken {
|
|
|
41
45
|
/* NOT FOR BROWSER END */
|
|
42
46
|
/** @private */
|
|
43
47
|
lint(start = this.getAbsoluteIndex(), re) {
|
|
44
|
-
const errors = super.lint(start, re);
|
|
45
|
-
if (this.closest('ext-link-text')) {
|
|
46
|
-
errors.push((0, lint_1.generateForSelf)(this, { start },
|
|
48
|
+
const errors = super.lint(start, re), rule = 'nested-link', s = index_1.default.lintConfig.getSeverity(rule);
|
|
49
|
+
if (s && this.closest('ext-link-text')) {
|
|
50
|
+
errors.push((0, lint_1.generateForSelf)(this, { start }, rule, 'internal link in an external link', s));
|
|
47
51
|
}
|
|
48
52
|
return errors;
|
|
49
53
|
}
|
|
@@ -17,7 +17,12 @@ export declare abstract class RedirectTargetToken extends LinkBaseToken {
|
|
|
17
17
|
abstract get lastElementChild(): AtomToken | NoincludeToken;
|
|
18
18
|
abstract set link(link: string);
|
|
19
19
|
get type(): 'redirect-target';
|
|
20
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* link text
|
|
22
|
+
*
|
|
23
|
+
* 链接显示文字
|
|
24
|
+
* @since v1.10.0
|
|
25
|
+
*/
|
|
21
26
|
get innerText(): string;
|
|
22
27
|
/**
|
|
23
28
|
* @param link 链接标题
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.RedirectTargetToken = void 0;
|
|
4
7
|
const lint_1 = require("../../util/lint");
|
|
8
|
+
const index_1 = __importDefault(require("../../index"));
|
|
5
9
|
const base_1 = require("./base");
|
|
6
10
|
const noinclude_1 = require("../nowiki/noinclude");
|
|
7
11
|
/* NOT FOR BROWSER */
|
|
@@ -19,7 +23,12 @@ class RedirectTargetToken extends base_1.LinkBaseToken {
|
|
|
19
23
|
return 'redirect-target';
|
|
20
24
|
}
|
|
21
25
|
/* NOT FOR BROWSER */
|
|
22
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* link text
|
|
28
|
+
*
|
|
29
|
+
* 链接显示文字
|
|
30
|
+
* @since v1.10.0
|
|
31
|
+
*/
|
|
23
32
|
get innerText() {
|
|
24
33
|
return this.link.toString(true);
|
|
25
34
|
}
|
|
@@ -45,12 +54,12 @@ class RedirectTargetToken extends base_1.LinkBaseToken {
|
|
|
45
54
|
}
|
|
46
55
|
/** @private */
|
|
47
56
|
lint(start = this.getAbsoluteIndex()) {
|
|
48
|
-
const errors = super.lint(start, false);
|
|
49
|
-
if (this.length === 2) {
|
|
50
|
-
const e = (0, lint_1.generateForChild)(this.lastChild, { start },
|
|
57
|
+
const errors = super.lint(start, false), rule = 'no-ignored', s = index_1.default.lintConfig.getSeverity(rule, 'redirect');
|
|
58
|
+
if (s && this.length === 2) {
|
|
59
|
+
const e = (0, lint_1.generateForChild)(this.lastChild, { start }, rule, 'useless link text', s);
|
|
51
60
|
e.startIndex--;
|
|
52
61
|
e.startCol--;
|
|
53
|
-
e.fix = { range: [e.startIndex, e.endIndex], text: ''
|
|
62
|
+
e.fix = { desc: 'remove', range: [e.startIndex, e.endIndex], text: '' };
|
|
54
63
|
errors.push(e);
|
|
55
64
|
}
|
|
56
65
|
return errors;
|
package/dist/src/magicLink.d.ts
CHANGED
|
@@ -21,7 +21,12 @@ export declare abstract class MagicLinkToken extends Token {
|
|
|
21
21
|
abstract get firstElementChild(): CommentToken | IncludeToken | NoincludeToken | TranscludeToken | undefined;
|
|
22
22
|
abstract get lastElementChild(): CommentToken | IncludeToken | NoincludeToken | TranscludeToken | undefined;
|
|
23
23
|
get type(): ExtLinkTypes;
|
|
24
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* text of the link
|
|
26
|
+
*
|
|
27
|
+
* 链接显示文字
|
|
28
|
+
* @since v1.10.0
|
|
29
|
+
*/
|
|
25
30
|
get innerText(): string;
|
|
26
31
|
/** link / 链接 */
|
|
27
32
|
get link(): string;
|
package/dist/src/magicLink.js
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
3
|
+
var useValue = arguments.length > 2;
|
|
4
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
5
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
6
|
+
}
|
|
7
|
+
return useValue ? value : void 0;
|
|
8
|
+
};
|
|
2
9
|
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
3
10
|
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
4
11
|
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
@@ -26,13 +33,6 @@ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn,
|
|
|
26
33
|
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
27
34
|
done = true;
|
|
28
35
|
};
|
|
29
|
-
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
30
|
-
var useValue = arguments.length > 2;
|
|
31
|
-
for (var i = 0; i < initializers.length; i++) {
|
|
32
|
-
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
33
|
-
}
|
|
34
|
-
return useValue ? value : void 0;
|
|
35
|
-
};
|
|
36
36
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
37
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
38
|
};
|
|
@@ -47,8 +47,9 @@ const index_2 = require("./index");
|
|
|
47
47
|
/* NOT FOR BROWSER */
|
|
48
48
|
const debug_1 = require("../util/debug");
|
|
49
49
|
const constants_1 = require("../util/constants");
|
|
50
|
-
const
|
|
50
|
+
const clone_1 = require("../mixin/clone");
|
|
51
51
|
const syntax_1 = require("../mixin/syntax");
|
|
52
|
+
const cached_1 = require("../mixin/cached");
|
|
52
53
|
const space = String.raw `(?:[${string_1.zs}\t]| |�*160;|&#[xX]0*[aA]0;)`;
|
|
53
54
|
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
54
55
|
/(?:[\p{Zs}\t]| |�*160;|&#[xX]0*[aA]0;)+/gu;
|
|
@@ -76,21 +77,33 @@ let MagicLinkToken = (() => {
|
|
|
76
77
|
let _classExtraInitializers = [];
|
|
77
78
|
let _classThis;
|
|
78
79
|
let _classSuper = index_2.Token;
|
|
80
|
+
let _instanceExtraInitializers = [];
|
|
81
|
+
let _cloneNode_decorators;
|
|
82
|
+
let _toHtmlInternal_decorators;
|
|
79
83
|
var MagicLinkToken = class extends _classSuper {
|
|
80
84
|
static { _classThis = this; }
|
|
81
85
|
static {
|
|
82
86
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
87
|
+
_cloneNode_decorators = [clone_1.clone];
|
|
88
|
+
_toHtmlInternal_decorators = [(0, cached_1.cached)()];
|
|
89
|
+
__esDecorate(this, null, _cloneNode_decorators, { kind: "method", name: "cloneNode", static: false, private: false, access: { has: obj => "cloneNode" in obj, get: obj => obj.cloneNode }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
90
|
+
__esDecorate(this, null, _toHtmlInternal_decorators, { kind: "method", name: "toHtmlInternal", static: false, private: false, access: { has: obj => "toHtmlInternal" in obj, get: obj => obj.toHtmlInternal }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
83
91
|
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
84
92
|
MagicLinkToken = _classThis = _classDescriptor.value;
|
|
85
93
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
86
94
|
__runInitializers(_classThis, _classExtraInitializers);
|
|
87
95
|
}
|
|
88
|
-
#type;
|
|
96
|
+
#type = __runInitializers(this, _instanceExtraInitializers);
|
|
89
97
|
/* NOT FOR BROWSER END */
|
|
90
98
|
get type() {
|
|
91
99
|
return this.#type;
|
|
92
100
|
}
|
|
93
|
-
/**
|
|
101
|
+
/**
|
|
102
|
+
* text of the link
|
|
103
|
+
*
|
|
104
|
+
* 链接显示文字
|
|
105
|
+
* @since v1.10.0
|
|
106
|
+
*/
|
|
94
107
|
get innerText() {
|
|
95
108
|
const map = new Map([['!', '|'], ['=', '=']]);
|
|
96
109
|
let link = (0, string_1.text)(this.childNodes.map(child => {
|
|
@@ -111,7 +124,7 @@ let MagicLinkToken = (() => {
|
|
|
111
124
|
.replace(/x$/u, 'X')}`
|
|
112
125
|
: innerText;
|
|
113
126
|
}
|
|
114
|
-
return (0, string_1.decodeNumber)(innerText);
|
|
127
|
+
return (0, string_1.decodeNumber)(innerText).replace(/\n/gu, '%0A');
|
|
115
128
|
}
|
|
116
129
|
/* NOT FOR BROWSER */
|
|
117
130
|
set link(url) {
|
|
@@ -220,9 +233,8 @@ let MagicLinkToken = (() => {
|
|
|
220
233
|
/* PRINT ONLY END */
|
|
221
234
|
/* NOT FOR BROWSER */
|
|
222
235
|
cloneNode() {
|
|
223
|
-
const token = (0, html_1.cloneNode)(this,
|
|
224
236
|
// @ts-expect-error abstract class
|
|
225
|
-
|
|
237
|
+
const token = new MagicLinkToken(undefined, this.type, this.getAttribute('config'));
|
|
226
238
|
token.setAttribute('pattern', this.pattern);
|
|
227
239
|
return token;
|
|
228
240
|
}
|
|
@@ -265,9 +277,11 @@ let MagicLinkToken = (() => {
|
|
|
265
277
|
url = this.getUrl();
|
|
266
278
|
}
|
|
267
279
|
catch { }
|
|
268
|
-
|
|
269
|
-
? ''
|
|
270
|
-
:
|
|
280
|
+
const attrs = type === 'free-ext-link' || type === 'ext-link-url'
|
|
281
|
+
? ` rel="nofollow" class="external${type === 'free-ext-link' ? ' free' : ''}"${typeof url === 'object' ? ` href="${url.href}"` : ''}`
|
|
282
|
+
: (protocol === 'ISBN' ? '' : ' class="external" rel="nofollow"')
|
|
283
|
+
+ (url === undefined ? '' : ` href="${typeof url === 'string' ? url : url.href}"`);
|
|
284
|
+
return `<a${attrs}>${innerText}</a>`;
|
|
271
285
|
}
|
|
272
286
|
};
|
|
273
287
|
return MagicLinkToken = _classThis;
|
package/dist/src/nested.js
CHANGED
|
@@ -1,4 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
3
|
+
var useValue = arguments.length > 2;
|
|
4
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
5
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
6
|
+
}
|
|
7
|
+
return useValue ? value : void 0;
|
|
8
|
+
};
|
|
9
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
10
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
11
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
12
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
13
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
14
|
+
var _, done = false;
|
|
15
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
16
|
+
var context = {};
|
|
17
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
18
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
19
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
20
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
21
|
+
if (kind === "accessor") {
|
|
22
|
+
if (result === void 0) continue;
|
|
23
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
24
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
25
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
26
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
27
|
+
}
|
|
28
|
+
else if (_ = accept(result)) {
|
|
29
|
+
if (kind === "field") initializers.unshift(_);
|
|
30
|
+
else descriptor[key] = _;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
34
|
+
done = true;
|
|
35
|
+
};
|
|
2
36
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
37
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
38
|
};
|
|
@@ -15,7 +49,7 @@ const noinclude_1 = require("./nowiki/noinclude");
|
|
|
15
49
|
/* NOT FOR BROWSER */
|
|
16
50
|
const debug_1 = require("../util/debug");
|
|
17
51
|
const constants_1 = require("../util/constants");
|
|
18
|
-
const
|
|
52
|
+
const clone_1 = require("../mixin/clone");
|
|
19
53
|
const childTypes = new Set(['comment', 'include', 'arg', 'template', 'magic-word']), lintRegex = [false, true].map(article => {
|
|
20
54
|
const noinclude = article ? 'includeonly' : 'noinclude';
|
|
21
55
|
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
@@ -28,84 +62,98 @@ const childTypes = new Set(['comment', 'include', 'arg', 'template', 'magic-word
|
|
|
28
62
|
* 嵌套式的扩展标签
|
|
29
63
|
* @classdesc `{childNodes: (ExtToken|NoincludeToken|CommentToken)[]}`
|
|
30
64
|
*/
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
*/
|
|
42
|
-
constructor(wikitext, regex, tags, config, accum = []) {
|
|
43
|
-
if (typeof regex === 'boolean') {
|
|
44
|
-
const placeholder = Symbol('InputboxToken'), { length } = accum;
|
|
45
|
-
accum.push(placeholder);
|
|
46
|
-
wikitext &&= (0, commentAndExt_1.parseCommentAndExt)(wikitext, config, accum, regex);
|
|
47
|
-
wikitext &&= (0, braces_1.parseBraces)(wikitext, config, accum);
|
|
48
|
-
accum.splice(length, 1);
|
|
65
|
+
let NestedToken = (() => {
|
|
66
|
+
let _classSuper = index_2.Token;
|
|
67
|
+
let _instanceExtraInitializers = [];
|
|
68
|
+
let _cloneNode_decorators;
|
|
69
|
+
return class NestedToken extends _classSuper {
|
|
70
|
+
static {
|
|
71
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
72
|
+
_cloneNode_decorators = [clone_1.clone];
|
|
73
|
+
__esDecorate(this, null, _cloneNode_decorators, { kind: "method", name: "cloneNode", static: false, private: false, access: { has: obj => "cloneNode" in obj, get: obj => obj.cloneNode }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
74
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
49
75
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
76
|
+
#tags = __runInitializers(this, _instanceExtraInitializers);
|
|
77
|
+
#regex;
|
|
78
|
+
/* NOT FOR BROWSER END */
|
|
79
|
+
get type() {
|
|
80
|
+
return 'ext-inner';
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* @param regex 内层正则
|
|
84
|
+
* @param tags 内层标签名
|
|
85
|
+
*/
|
|
86
|
+
constructor(wikitext, regex, tags, config, accum = []) {
|
|
87
|
+
if (typeof regex === 'boolean') {
|
|
88
|
+
const placeholder = Symbol('InputboxToken'), { length } = accum;
|
|
89
|
+
accum.push(placeholder);
|
|
90
|
+
wikitext &&= (0, commentAndExt_1.parseCommentAndExt)(wikitext, config, accum, regex);
|
|
91
|
+
wikitext &&= (0, braces_1.parseBraces)(wikitext, config, accum);
|
|
92
|
+
accum.splice(length, 1);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
wikitext &&= wikitext.replace(regex, (_, name, attr, inner, closing) => {
|
|
96
|
+
const str = `\0${accum.length + 1}e\x7F`;
|
|
97
|
+
// @ts-expect-error abstract class
|
|
98
|
+
new ext_1.ExtToken(name, attr, inner, closing, config, false, accum);
|
|
99
|
+
return str;
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
wikitext &&= wikitext.replace(/(^|\0\d+.\x7F)([^\0]+)(?=$|\0\d+.\x7F)/gu, (_, lead, substr) => {
|
|
53
103
|
// @ts-expect-error abstract class
|
|
54
|
-
new
|
|
55
|
-
return
|
|
104
|
+
new noinclude_1.NoincludeToken(substr, config, accum);
|
|
105
|
+
return `${lead}\0${accum.length}n\x7F`;
|
|
56
106
|
});
|
|
107
|
+
super(wikitext, config, accum, typeof regex === 'boolean' ? { 'Stage-2': ':', '!HeadingToken': '' } : { NoincludeToken: ':', ExtToken: ':' });
|
|
108
|
+
this.#tags = [...tags];
|
|
109
|
+
this.#regex = regex;
|
|
110
|
+
}
|
|
111
|
+
/** @private */
|
|
112
|
+
lint(start = this.getAbsoluteIndex(), re) {
|
|
113
|
+
const errors = super.lint(start, re), rule = 'no-ignored', s = index_1.default.lintConfig.getSeverity(rule, this.name);
|
|
114
|
+
if (!s) {
|
|
115
|
+
return errors;
|
|
116
|
+
}
|
|
117
|
+
const rect = new rect_1.BoundingRect(this, start), regex = typeof this.#regex === 'boolean' ? lintRegex[this.#regex ? 1 : 0] : /^<!--[\s\S]*-->$/u;
|
|
118
|
+
return [
|
|
119
|
+
...errors,
|
|
120
|
+
...this.childNodes.filter(child => {
|
|
121
|
+
const { type, name } = child;
|
|
122
|
+
if (type === 'ext') {
|
|
123
|
+
return !this.#tags.includes(name);
|
|
124
|
+
}
|
|
125
|
+
else if (childTypes.has(type)) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
const str = child.toString().trim();
|
|
129
|
+
return str && !regex.test(str);
|
|
130
|
+
}).map(child => {
|
|
131
|
+
const e = (0, lint_1.generateForChild)(child, rect, rule, index_1.default.msg('invalid content in <$1>', this.name), s);
|
|
132
|
+
e.suggestions = [
|
|
133
|
+
{ desc: 'remove', range: [e.startIndex, e.endIndex], text: '' },
|
|
134
|
+
{ desc: 'comment', range: [e.startIndex, e.endIndex], text: `<!--${child.toString()}-->` },
|
|
135
|
+
];
|
|
136
|
+
return e;
|
|
137
|
+
}),
|
|
138
|
+
];
|
|
57
139
|
}
|
|
58
|
-
|
|
140
|
+
/* NOT FOR BROWSER */
|
|
141
|
+
/**
|
|
142
|
+
* @override
|
|
143
|
+
* @param token node to be inserted / 待插入的子节点
|
|
144
|
+
* @param i position to be inseted at / 插入位置
|
|
145
|
+
*/
|
|
146
|
+
insertAt(token, i) {
|
|
147
|
+
if (!debug_1.Shadow.running && token.is('ext') && !this.#tags.includes(token.name)) {
|
|
148
|
+
this.constructorError(`can only have ${this.#tags.join(' or ')} tags as child nodes`);
|
|
149
|
+
}
|
|
150
|
+
return super.insertAt(token, i);
|
|
151
|
+
}
|
|
152
|
+
cloneNode() {
|
|
59
153
|
// @ts-expect-error abstract class
|
|
60
|
-
new
|
|
61
|
-
return `${lead}\0${accum.length}n\x7F`;
|
|
62
|
-
});
|
|
63
|
-
super(wikitext, config, accum, typeof regex === 'boolean' ? { 'Stage-2': ':', '!HeadingToken': '' } : { NoincludeToken: ':', ExtToken: ':' });
|
|
64
|
-
this.#tags = [...tags];
|
|
65
|
-
this.#regex = regex;
|
|
66
|
-
}
|
|
67
|
-
/** @private */
|
|
68
|
-
lint(start = this.getAbsoluteIndex(), re) {
|
|
69
|
-
const rect = new rect_1.BoundingRect(this, start), regex = typeof this.#regex === 'boolean' ? lintRegex[this.#regex ? 1 : 0] : /^<!--[\s\S]*-->$/u;
|
|
70
|
-
return [
|
|
71
|
-
...super.lint(start, re),
|
|
72
|
-
...this.childNodes.filter(child => {
|
|
73
|
-
const { type, name } = child;
|
|
74
|
-
if (type === 'ext') {
|
|
75
|
-
return !this.#tags.includes(name);
|
|
76
|
-
}
|
|
77
|
-
else if (childTypes.has(type)) {
|
|
78
|
-
return false;
|
|
79
|
-
}
|
|
80
|
-
const str = child.toString().trim();
|
|
81
|
-
return str && !regex.test(str);
|
|
82
|
-
}).map(child => {
|
|
83
|
-
const e = (0, lint_1.generateForChild)(child, rect, 'no-ignored', index_1.default.msg('invalid content in <$1>', this.name));
|
|
84
|
-
e.suggestions = [
|
|
85
|
-
{ desc: 'remove', range: [e.startIndex, e.endIndex], text: '' },
|
|
86
|
-
{ desc: 'comment', range: [e.startIndex, e.endIndex], text: `<!--${child.toString()}-->` },
|
|
87
|
-
];
|
|
88
|
-
return e;
|
|
89
|
-
}),
|
|
90
|
-
];
|
|
91
|
-
}
|
|
92
|
-
/* NOT FOR BROWSER */
|
|
93
|
-
/**
|
|
94
|
-
* @override
|
|
95
|
-
* @param token node to be inserted / 待插入的子节点
|
|
96
|
-
* @param i position to be inseted at / 插入位置
|
|
97
|
-
*/
|
|
98
|
-
insertAt(token, i) {
|
|
99
|
-
if (!debug_1.Shadow.running && token.type === 'ext' && !this.#tags.includes(token.name)) {
|
|
100
|
-
this.constructorError(`can only have ${this.#tags.join(' or ')} tags as child nodes`);
|
|
154
|
+
return new NestedToken(undefined, this.#regex, this.#tags, this.getAttribute('config'));
|
|
101
155
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
cloneNode() {
|
|
105
|
-
return (0, html_1.cloneNode)(this,
|
|
106
|
-
// @ts-expect-error abstract class
|
|
107
|
-
() => new NestedToken(undefined, this.#regex, this.#tags, this.getAttribute('config')));
|
|
108
|
-
}
|
|
109
|
-
}
|
|
156
|
+
};
|
|
157
|
+
})();
|
|
110
158
|
exports.NestedToken = NestedToken;
|
|
111
159
|
constants_1.classes['NestedToken'] = __filename;
|
package/dist/src/nowiki/base.js
CHANGED
|
@@ -74,8 +74,11 @@ let NowikiBaseToken = (() => {
|
|
|
74
74
|
/* NOT FOR BROWSER */
|
|
75
75
|
cloneNode() {
|
|
76
76
|
return debug_1.Shadow.run(() => {
|
|
77
|
-
const C = this.constructor;
|
|
78
|
-
|
|
77
|
+
const C = this.constructor, token = new C(this.innerText, this.getAttribute('config'));
|
|
78
|
+
if (this.name && !token.name) {
|
|
79
|
+
token.setAttribute('name', this.name);
|
|
80
|
+
}
|
|
81
|
+
return token;
|
|
79
82
|
});
|
|
80
83
|
}
|
|
81
84
|
/**
|
|
@@ -90,8 +90,12 @@ let CommentToken = (() => {
|
|
|
90
90
|
if (this.closed) {
|
|
91
91
|
return [];
|
|
92
92
|
}
|
|
93
|
-
const
|
|
94
|
-
|
|
93
|
+
const rule = 'unclosed-comment', s = index_1.default.lintConfig.getSeverity(rule);
|
|
94
|
+
if (!s) {
|
|
95
|
+
return [];
|
|
96
|
+
}
|
|
97
|
+
const e = (0, lint_1.generateForSelf)(this, { start }, rule, index_1.default.msg('unclosed $1', 'HTML comment'), s);
|
|
98
|
+
e.suggestions = [{ desc: 'close', range: [e.endIndex, e.endIndex], text: '-->' }];
|
|
95
99
|
return [e];
|
|
96
100
|
}
|
|
97
101
|
/** @private */
|
package/dist/src/nowiki/index.js
CHANGED
|
@@ -31,10 +31,10 @@ class NowikiToken extends base_1.NowikiBaseToken {
|
|
|
31
31
|
}
|
|
32
32
|
/** @private */
|
|
33
33
|
lint(start = this.getAbsoluteIndex()) {
|
|
34
|
-
const { name } = this;
|
|
35
|
-
if (this.#lint()) {
|
|
36
|
-
const e = (0, lint_1.generateForSelf)(this, { start },
|
|
37
|
-
e.fix = { range: [start, e.endIndex], text: ''
|
|
34
|
+
const { name } = this, rule = 'void-ext', s = index_1.default.lintConfig.getSeverity(rule, name);
|
|
35
|
+
if (s && this.#lint()) {
|
|
36
|
+
const e = (0, lint_1.generateForSelf)(this, { start }, rule, index_1.default.msg('nothing should be in <$1>', name), s);
|
|
37
|
+
e.fix = { desc: 'empty', range: [start, e.endIndex], text: '' };
|
|
38
38
|
return [e];
|
|
39
39
|
}
|
|
40
40
|
return super.lint(start, getLintRegex(name));
|
|
@@ -11,7 +11,12 @@ export interface ListRangeToken extends Token {
|
|
|
11
11
|
/** `;:*#` */
|
|
12
12
|
export declare abstract class ListBaseToken extends NowikiBaseToken {
|
|
13
13
|
abstract get type(): 'dd' | 'list';
|
|
14
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* number of indentation
|
|
16
|
+
*
|
|
17
|
+
* 缩进数
|
|
18
|
+
* @since v1.16.5
|
|
19
|
+
*/
|
|
15
20
|
get indent(): number;
|
|
16
21
|
/** @throws `Error` not `<dd>` only */
|
|
17
22
|
set indent(indent: number);
|
|
@@ -10,7 +10,12 @@ const index_1 = require("../index");
|
|
|
10
10
|
/** `;:*#` */
|
|
11
11
|
class ListBaseToken extends base_1.NowikiBaseToken {
|
|
12
12
|
/* PRINT ONLY */
|
|
13
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* number of indentation
|
|
15
|
+
*
|
|
16
|
+
* 缩进数
|
|
17
|
+
* @since v1.16.5
|
|
18
|
+
*/
|
|
14
19
|
get indent() {
|
|
15
20
|
return this.innerText.split(':').length - 1;
|
|
16
21
|
}
|
|
@@ -78,7 +83,7 @@ class ListBaseToken extends base_1.NowikiBaseToken {
|
|
|
78
83
|
nDt++;
|
|
79
84
|
}
|
|
80
85
|
}
|
|
81
|
-
else if (nextSibling.
|
|
86
|
+
else if (nextSibling.is('dd')) {
|
|
82
87
|
break;
|
|
83
88
|
}
|
|
84
89
|
({ nextSibling } = nextSibling);
|
|
@@ -12,7 +12,12 @@ export declare abstract class QuoteToken extends NowikiBaseToken {
|
|
|
12
12
|
get type(): 'quote';
|
|
13
13
|
get bold(): boolean;
|
|
14
14
|
get italic(): boolean;
|
|
15
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* whether to be closing quotes
|
|
17
|
+
*
|
|
18
|
+
* 是否闭合
|
|
19
|
+
* @since v1.16.5
|
|
20
|
+
*/
|
|
16
21
|
get closing(): Partial<Font>;
|
|
17
22
|
get font(): Font;
|
|
18
23
|
/** @param closing 是否闭合 */
|