wikiparser-node 1.19.0 → 1.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/README.md +3 -0
  2. package/bundle/bundle-es7.min.js +24 -31
  3. package/bundle/bundle-lsp.min.js +25 -98
  4. package/bundle/bundle.min.js +25 -32
  5. package/config/default.json +49 -3
  6. package/config/minimum.json +5 -1
  7. package/data/ext/math.json +660 -0
  8. package/dist/addon/table.js +24 -5
  9. package/dist/addon/transclude.js +4 -4
  10. package/dist/base.d.mts +1 -1
  11. package/dist/base.d.ts +1 -1
  12. package/dist/bin/config.js +26 -8
  13. package/dist/index.js +10 -1
  14. package/dist/internal.d.ts +2 -0
  15. package/dist/lib/document.d.ts +1 -0
  16. package/dist/lib/document.js +10 -1
  17. package/dist/lib/element.js +15 -21
  18. package/dist/lib/lsp.js +88 -58
  19. package/dist/lib/node.js +21 -24
  20. package/dist/lib/text.js +3 -4
  21. package/dist/lib/title.js +2 -1
  22. package/dist/mixin/attributesParent.js +1 -1
  23. package/dist/mixin/fixed.d.ts +1 -2
  24. package/dist/mixin/fixed.js +2 -3
  25. package/dist/mixin/gapped.d.ts +4 -0
  26. package/dist/mixin/gapped.js +24 -0
  27. package/dist/mixin/hidden.js +1 -1
  28. package/dist/mixin/multiLine.d.ts +4 -0
  29. package/dist/mixin/multiLine.js +33 -0
  30. package/dist/mixin/noEscape.js +1 -1
  31. package/dist/mixin/padded.d.ts +5 -0
  32. package/dist/mixin/padded.js +24 -0
  33. package/dist/mixin/singleLine.js +1 -1
  34. package/dist/mixin/sol.js +1 -1
  35. package/dist/mixin/syntax.js +3 -3
  36. package/dist/parser/braces.js +8 -12
  37. package/dist/parser/commentAndExt.js +18 -2
  38. package/dist/parser/magicLinks.js +2 -2
  39. package/dist/parser/selector.js +5 -2
  40. package/dist/src/arg.js +10 -13
  41. package/dist/src/atom.js +2 -7
  42. package/dist/src/attribute.js +6 -6
  43. package/dist/src/attributes.js +8 -12
  44. package/dist/src/commented.d.ts +26 -0
  45. package/dist/src/commented.js +52 -0
  46. package/dist/src/converter.js +3 -6
  47. package/dist/src/converterFlags.js +266 -223
  48. package/dist/src/converterRule.d.ts +2 -2
  49. package/dist/src/converterRule.js +2 -2
  50. package/dist/src/extLink.d.ts +2 -3
  51. package/dist/src/extLink.js +222 -175
  52. package/dist/src/gallery.d.ts +4 -5
  53. package/dist/src/gallery.js +177 -144
  54. package/dist/src/heading.js +11 -11
  55. package/dist/src/hidden.js +2 -7
  56. package/dist/src/imageParameter.d.ts +2 -2
  57. package/dist/src/imageParameter.js +6 -5
  58. package/dist/src/imagemap.d.ts +2 -2
  59. package/dist/src/imagemap.js +155 -123
  60. package/dist/src/imagemapLink.d.ts +2 -2
  61. package/dist/src/index.js +44 -20
  62. package/dist/src/link/base.d.ts +2 -3
  63. package/dist/src/link/base.js +13 -15
  64. package/dist/src/link/file.d.ts +2 -3
  65. package/dist/src/link/file.js +3 -3
  66. package/dist/src/link/galleryImage.d.ts +2 -3
  67. package/dist/src/link/galleryImage.js +7 -13
  68. package/dist/src/magicLink.js +7 -9
  69. package/dist/src/nested.d.ts +2 -2
  70. package/dist/src/nested.js +4 -7
  71. package/dist/src/nowiki/comment.js +2 -5
  72. package/dist/src/nowiki/doubleUnderscore.js +2 -5
  73. package/dist/src/nowiki/index.d.ts +2 -2
  74. package/dist/src/nowiki/index.js +2 -1
  75. package/dist/src/onlyinclude.js +6 -13
  76. package/dist/src/paramTag/index.d.ts +2 -2
  77. package/dist/src/paramTag/index.js +102 -66
  78. package/dist/src/parameter.d.ts +4 -5
  79. package/dist/src/parameter.js +13 -13
  80. package/dist/src/pre.d.ts +4 -5
  81. package/dist/src/pre.js +8 -17
  82. package/dist/src/syntax.d.ts +1 -1
  83. package/dist/src/syntax.js +2 -7
  84. package/dist/src/table/base.d.ts +2 -2
  85. package/dist/src/table/base.js +8 -8
  86. package/dist/src/table/index.js +1 -1
  87. package/dist/src/table/td.d.ts +3 -3
  88. package/dist/src/table/td.js +9 -9
  89. package/dist/src/table/tr.d.ts +2 -2
  90. package/dist/src/tagPair/ext.js +35 -30
  91. package/dist/src/tagPair/index.d.ts +1 -1
  92. package/dist/src/tagPair/index.js +2 -5
  93. package/dist/src/tagPair/translate.d.ts +38 -0
  94. package/dist/src/tagPair/translate.js +129 -0
  95. package/dist/src/transclude.js +5 -6
  96. package/dist/util/html.js +16 -1
  97. package/dist/util/lint.js +17 -30
  98. package/dist/util/sharable.js +29 -1
  99. package/dist/util/sharable.mjs +31 -3
  100. package/dist/util/string.js +14 -1
  101. package/extensions/dist/base.js +1 -1
  102. package/extensions/dist/lsp.js +13 -2
  103. package/package.json +4 -3
  104. package/extensions/es7/base.js +0 -320
  105. package/extensions/es7/lint.js +0 -97
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TranslateToken = void 0;
4
+ const index_1 = require("../index");
5
+ const index_2 = require("./index");
6
+ const syntax_1 = require("../syntax");
7
+ const noinclude_1 = require("../nowiki/noinclude");
8
+ /* NOT FOR BROWSER */
9
+ const debug_1 = require("../../util/debug");
10
+ const constants_1 = require("../../util/constants");
11
+ const string_1 = require("../../util/string");
12
+ /* NOT FOR BROWSER END */
13
+ /**
14
+ * `<translate>`
15
+ * @classdesc `{childNodes: [SyntaxToken, Token]}`
16
+ */
17
+ class TranslateToken extends index_2.TagPairToken {
18
+ /* NOT FOR BROWSER END */
19
+ get type() {
20
+ return 'translate';
21
+ }
22
+ /**
23
+ * @param attr 标签属性
24
+ * @param inner 内部wikitext
25
+ */
26
+ constructor(attr, inner, config, accum = []) {
27
+ const attrToken = new syntax_1.SyntaxToken(attr, /^(?: nowrap)?$/u, 'translate-attr', config, accum, { AstText: ':' });
28
+ inner = inner?.replace(/(<tvar\|[^>]+>)([\s\S]*?)(<\/>)/gu, (_, p1, p2, p3) => {
29
+ // @ts-expect-error abstract class
30
+ new noinclude_1.NoincludeToken(p1, config, accum);
31
+ // @ts-expect-error abstract class
32
+ new noinclude_1.NoincludeToken(p3, config, accum);
33
+ return `\0${accum.length - 1}n\x7F${p2}\0${accum.length}n\x7F`;
34
+ }).replace(/(<tvar\s+name\s*=(?:\s*(?:(["'])[\s\S]*?\2|[^"'\s>]+))?\s*>)([\s\S]*?)(<\/tvar\s*>)/giu, (_, p1, __, p3, p4) => {
35
+ // @ts-expect-error abstract class
36
+ new noinclude_1.NoincludeToken(p1, config, accum);
37
+ // @ts-expect-error abstract class
38
+ new noinclude_1.NoincludeToken(p4, config, accum);
39
+ return `\0${accum.length - 1}n\x7F${p3}\0${accum.length}n\x7F`;
40
+ });
41
+ const innerToken = new index_1.Token(inner, config, accum);
42
+ innerToken.type = 'translate-inner';
43
+ super('translate', attrToken, innerToken, 'translate', config, accum);
44
+ /* PRINT ONLY */
45
+ this.seal('closed', true);
46
+ this.seal('selfClosing', true);
47
+ }
48
+ /** @private */
49
+ toString(skip) {
50
+ return skip ? this.lastChild.toString(true) : super.toString();
51
+ }
52
+ /** @private */
53
+ text() {
54
+ return this.lastChild.text();
55
+ }
56
+ /* PRINT ONLY */
57
+ /** 是否有nowrap属性 */
58
+ #isNowrap() {
59
+ return this.firstChild.toString() === ' nowrap';
60
+ }
61
+ /** @private */
62
+ print() {
63
+ return `<span class="wpb-ext">&lt;translate${this.#isNowrap()
64
+ ? '<span class="wpb-ext-attrs"> <span class="wpb-ext-attr">'
65
+ + '<span class="wpb-attr-key">nowrap</span>'
66
+ + '</span></span>'
67
+ : ''}&gt;${this.lastChild.print({ class: 'ext-inner' })}&lt;/translate&gt;</span>`;
68
+ }
69
+ /* PRINT ONLY END */
70
+ /* NOT FOR BROWSER */
71
+ /**
72
+ * 设置nowrap属性
73
+ * @param nowrap 是否nowrap
74
+ */
75
+ #setNowrap(nowrap) {
76
+ this.firstChild.setText(nowrap ? ' nowrap' : '');
77
+ }
78
+ /** @implements */
79
+ getAttr(key) {
80
+ return (0, string_1.trimLc)(key) === 'nowrap' && this.#isNowrap() || undefined;
81
+ }
82
+ /** @implements */
83
+ hasAttr(key) {
84
+ return (0, string_1.trimLc)(key) === 'nowrap' && this.#isNowrap();
85
+ }
86
+ /** @implements */
87
+ setAttr(keyOrProp, value) {
88
+ if (typeof keyOrProp === 'object') {
89
+ for (const [key, val] of Object.entries(keyOrProp)) {
90
+ this.setAttr(key, val);
91
+ }
92
+ }
93
+ else if ((0, string_1.trimLc)(keyOrProp) === 'nowrap') {
94
+ this.#setNowrap(value);
95
+ }
96
+ }
97
+ /** @implements */
98
+ removeAttr(key) {
99
+ if ((0, string_1.trimLc)(key) === 'nowrap') {
100
+ this.firstChild.replaceChildren();
101
+ }
102
+ }
103
+ /** @implements */
104
+ toggleAttr(key, force) {
105
+ if ((0, string_1.trimLc)(key) === 'nowrap') {
106
+ this.#setNowrap(force ?? !this.#isNowrap());
107
+ }
108
+ }
109
+ cloneNode() {
110
+ const inner = this.lastChild.cloneNode(), config = this.getAttribute('config'), attr = this.firstChild.toString() || undefined;
111
+ return debug_1.Shadow.run(() => {
112
+ // @ts-expect-error abstract class
113
+ const token = new TranslateToken(attr, undefined, config);
114
+ token.lastChild.safeReplaceWith(inner);
115
+ return token;
116
+ });
117
+ }
118
+ /** @private */
119
+ toHtmlInternal(opt) {
120
+ for (const { innerText, nextSibling } of this.querySelectorAll('comment')) {
121
+ if (nextSibling?.type === 'text' && /^T:[^_/\n<>~]+$/u.test(innerText) && /^[\n ]/u.test(nextSibling.data)) {
122
+ nextSibling.deleteData(0, 1);
123
+ }
124
+ }
125
+ return this.lastChild.toHtmlInternal(opt);
126
+ }
127
+ }
128
+ exports.TranslateToken = TranslateToken;
129
+ constants_1.classes['TranslateToken'] = __filename;
@@ -43,6 +43,7 @@ const lint_1 = require("../util/lint");
43
43
  const debug_1 = require("../util/debug");
44
44
  const constants_1 = require("../util/constants");
45
45
  const rect_1 = require("../lib/rect");
46
+ const gapped_1 = require("../mixin/gapped");
46
47
  const index_1 = require("./index");
47
48
  const parameter_1 = require("./parameter");
48
49
  const atom_1 = require("./atom");
@@ -58,7 +59,7 @@ const basicMagicWords = new Map([['=', '='], ['!', '|']]);
58
59
  * @classdesc `{childNodes: [AtomToken|SyntaxToken, ...AtomToken[], ...ParameterToken[]]}`
59
60
  */
60
61
  let TranscludeToken = (() => {
61
- let _classDecorators = [noEscape_1.noEscape];
62
+ let _classDecorators = [noEscape_1.noEscape, (0, gapped_1.gapped)()];
62
63
  let _classDescriptor;
63
64
  let _classExtraInitializers = [];
64
65
  let _classThis;
@@ -192,7 +193,9 @@ let TranscludeToken = (() => {
192
193
  // @ts-expect-error abstract class
193
194
  this.insertAt(new parameter_1.ParameterToken(...part, config, accum));
194
195
  }
196
+ /* PRINT ONLY */
195
197
  this.seal('modifier');
198
+ /* PRINT ONLY END */
196
199
  /* NOT FOR BROWSER */
197
200
  this.protectChildren(0);
198
201
  }
@@ -328,10 +331,6 @@ let TranscludeToken = (() => {
328
331
  }
329
332
  }
330
333
  /** @private */
331
- getGaps() {
332
- return 1;
333
- }
334
- /** @private */
335
334
  lint(start = this.getAbsoluteIndex(), re) {
336
335
  const errors = super.lint(start, re);
337
336
  if (!this.isTemplate()) {
@@ -553,7 +552,7 @@ let TranscludeToken = (() => {
553
552
  if (token.length > 1) {
554
553
  token.removeAt(1);
555
554
  }
556
- token.append(...cloned);
555
+ token.safeAppend(cloned);
557
556
  return token;
558
557
  });
559
558
  }
package/dist/util/html.js CHANGED
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  /* NOT FOR BROWSER */
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.html = exports.getCommon = void 0;
4
+ exports.cloneNode = exports.html = exports.getCommon = void 0;
5
+ const debug_1 = require("./debug");
5
6
  /* NOT FOR BROWSER END */
6
7
  /**
7
8
  * get common prefix length
@@ -131,3 +132,17 @@ const html = (childNodes, separator = '', opt) => {
131
132
  return results.join(separator);
132
133
  };
133
134
  exports.html = html;
135
+ /**
136
+ * basic function of `cloneNode`
137
+ * @param token token to clone
138
+ * @param f empty token constructor
139
+ */
140
+ const cloneNode = (token, f) => {
141
+ const cloned = token.cloneChildNodes();
142
+ return debug_1.Shadow.run(() => {
143
+ const newToken = f();
144
+ newToken.safeAppend(cloned);
145
+ return newToken;
146
+ });
147
+ };
148
+ exports.cloneNode = cloneNode;
package/dist/util/lint.js CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.htmlData = exports.cache = exports.generateForSelf = exports.generateForChild = exports.getEndPos = void 0;
6
+ exports.provideValues = exports.cache = exports.generateForSelf = exports.generateForChild = exports.getEndPos = void 0;
7
7
  const debug_1 = require("./debug");
8
8
  const rect_1 = require("../lib/rect");
9
9
  const index_1 = __importDefault(require("../index"));
@@ -65,34 +65,21 @@ const cache = (store, compute, update) => {
65
65
  return result;
66
66
  };
67
67
  exports.cache = cache;
68
- exports.htmlData = (() => {
69
- try {
70
- return require('vscode-html-languageservice')
71
- .getDefaultHTMLDataProvider();
68
+ /**
69
+ * 获取HTML属性值可选列表
70
+ * @param tag 标签名
71
+ * @param attribute 属性名
72
+ */
73
+ const provideValues = (tag, attribute) => {
74
+ if (tag === 'ol' && attribute === 'type') {
75
+ return ['1', 'a', 'A', 'i', 'I'];
72
76
  }
73
- catch {
74
- /**
75
- * 获取HTML属性值可选列表
76
- * @param tag 标签名
77
- * @param attribute 属性名
78
- */
79
- const provideValues = (tag, attribute) => {
80
- if (tag === 'ol' && attribute === 'type') {
81
- return ['1', 'a', 'A', 'i', 'I'];
82
- }
83
- else if (tag === 'th' && attribute === 'scope') {
84
- return ['row', 'col', 'rowgroup', 'colgroup'];
85
- }
86
- else if (attribute === 'dir') {
87
- return ['ltr', 'rtl', 'auto'];
88
- }
89
- return attribute === 'aria-hidden' ? ['true', 'false'] : [];
90
- };
91
- return {
92
- /** @implements */
93
- provideValues(tag, attribute) {
94
- return provideValues(tag, attribute).map(value => ({ name: value }));
95
- },
96
- };
77
+ else if (tag === 'th' && attribute === 'scope') {
78
+ return ['row', 'col', 'rowgroup', 'colgroup'];
97
79
  }
98
- })();
80
+ else if (attribute === 'dir') {
81
+ return ['ltr', 'rtl', 'auto'];
82
+ }
83
+ return attribute === 'aria-hidden' ? ['true', 'false'] : [];
84
+ };
85
+ exports.provideValues = provideValues;
@@ -2,7 +2,20 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.obsoleteAttrs = exports.extAttrs = exports.htmlAttrs = exports.commonHtmlAttrs = void 0;
4
4
  /* eslint-disable unicorn/no-unreadable-iife */
5
- const blockAttrs = new Set(['align']), citeAttrs = new Set(['cite']), citeAndAttrs = new Set(['cite', 'datetime']), widthAttrs = new Set(['width']), obsoleteTdAttrs = new Set(['axis', 'align', 'bgcolor', 'height', 'width', 'valign']), tdAttrs = new Set([...obsoleteTdAttrs, 'abbr', 'headers', 'scope', 'rowspan', 'colspan']), typeAttrs = new Set(['type']), obsoleteTableAttrs = new Set(['summary', 'align', 'bgcolor', 'cellpadding', 'cellspacing', 'frame', 'rules', 'width']), brAttrs = new Set(['clear']), trAttrs = new Set(['bgcolor', 'align', 'valign']), empty = new Set();
5
+ const blockAttrs = new Set(['align']), citeAttrs = new Set(['cite']), citeAndAttrs = new Set(['cite', 'datetime']), widthAttrs = new Set(['width']), obsoleteTdAttrs = new Set(['axis', 'align', 'bgcolor', 'height', 'width', 'valign']), tdAttrs = new Set([...obsoleteTdAttrs, 'abbr', 'headers', 'scope', 'rowspan', 'colspan']), typeAttrs = new Set(['type']), obsoleteTableAttrs = new Set(['summary', 'align', 'bgcolor', 'cellpadding', 'cellspacing', 'frame', 'rules', 'width']), brAttrs = new Set(['clear']), trAttrs = new Set(['bgcolor', 'align', 'valign']), chemAttrs = new Set(['qid', 'forcemathmode', 'type', 'display']), syntaxHighlightAttrs = new Set([
6
+ 'enclose',
7
+ 'inline',
8
+ 'lang',
9
+ 'line',
10
+ 'linelinks',
11
+ 'style',
12
+ 'class',
13
+ 'id',
14
+ 'dir',
15
+ 'copy',
16
+ 'highlight',
17
+ 'start',
18
+ ]), empty = new Set();
6
19
  exports.commonHtmlAttrs = new Set([
7
20
  'id',
8
21
  'class',
@@ -63,6 +76,9 @@ exports.commonHtmlAttrs = new Set([
63
76
  poem: blockAttrs,
64
77
  categorytree: blockAttrs,
65
78
  combooption: blockAttrs,
79
+ math: empty,
80
+ chem: empty,
81
+ ce: empty,
66
82
  }))(), exports.extAttrs = (() => ({
67
83
  gallery: new Set(['mode', 'showfilename', 'caption', 'perrow', 'widths', 'heights', 'showthumbnails']),
68
84
  poem: new Set(['compact']),
@@ -142,6 +158,18 @@ exports.commonHtmlAttrs = new Set([
142
158
  ]),
143
159
  tabs: new Set(['plain', 'class', 'container', 'id', 'title', 'style']),
144
160
  combobox: new Set(['placeholder', 'value', 'id', 'class', 'text', 'dropdown', 'style']),
161
+ math: new Set([...chemAttrs, 'chem']),
162
+ chem: chemAttrs,
163
+ ce: chemAttrs,
164
+ hiero: empty,
165
+ phonos: new Set(['ipa', 'class', 'text', 'lang', 'wikibase', 'file']),
166
+ section: new Set(['begin', 'end']),
167
+ source: syntaxHighlightAttrs,
168
+ syntaxhighlight: syntaxHighlightAttrs,
169
+ templatedata: empty,
170
+ timeline: new Set(['method', 'font']),
171
+ quiz: new Set(['display', 'shuffleanswers', 'points', 'shuffle', 'case']),
172
+ languages: empty,
145
173
  }))(), exports.obsoleteAttrs = (() => ({
146
174
  table: obsoleteTableAttrs,
147
175
  td: new Set([...obsoleteTdAttrs, 'scope']),
@@ -1,6 +1,19 @@
1
1
  const blockAttrs = /* @__PURE__ */ new Set(["align"]), citeAttrs = /* @__PURE__ */ new Set(["cite"]), citeAndAttrs = /* @__PURE__ */ new Set(["cite", "datetime"]), widthAttrs = /* @__PURE__ */ new Set(["width"]), obsoleteTdAttrs = /* @__PURE__ */ new Set(["axis", "align", "bgcolor", "height", "width", "valign"]), tdAttrs = /* @__PURE__ */ new Set([...obsoleteTdAttrs, "abbr", "headers", "scope", "rowspan", "colspan"]), typeAttrs = /* @__PURE__ */ new Set(["type"]), obsoleteTableAttrs = /* @__PURE__ */ new Set(
2
2
  ["summary", "align", "bgcolor", "cellpadding", "cellspacing", "frame", "rules", "width"]
3
- ), brAttrs = /* @__PURE__ */ new Set(["clear"]), trAttrs = /* @__PURE__ */ new Set(["bgcolor", "align", "valign"]), empty = /* @__PURE__ */ new Set();
3
+ ), brAttrs = /* @__PURE__ */ new Set(["clear"]), trAttrs = /* @__PURE__ */ new Set(["bgcolor", "align", "valign"]), chemAttrs = /* @__PURE__ */ new Set(["qid", "forcemathmode", "type", "display"]), syntaxHighlightAttrs = /* @__PURE__ */ new Set([
4
+ "enclose",
5
+ "inline",
6
+ "lang",
7
+ "line",
8
+ "linelinks",
9
+ "style",
10
+ "class",
11
+ "id",
12
+ "dir",
13
+ "copy",
14
+ "highlight",
15
+ "start"
16
+ ]), empty = /* @__PURE__ */ new Set();
4
17
  const commonHtmlAttrs = /* @__PURE__ */ new Set([
5
18
  "id",
6
19
  "class",
@@ -60,7 +73,10 @@ const commonHtmlAttrs = /* @__PURE__ */ new Set([
60
73
  gallery: typeAttrs,
61
74
  poem: blockAttrs,
62
75
  categorytree: blockAttrs,
63
- combooption: blockAttrs
76
+ combooption: blockAttrs,
77
+ math: empty,
78
+ chem: empty,
79
+ ce: empty
64
80
  }))(), extAttrs = /* @__PURE__ */ (() => ({
65
81
  gallery: /* @__PURE__ */ new Set(["mode", "showfilename", "caption", "perrow", "widths", "heights", "showthumbnails"]),
66
82
  poem: /* @__PURE__ */ new Set(["compact"]),
@@ -139,7 +155,19 @@ const commonHtmlAttrs = /* @__PURE__ */ new Set([
139
155
  "title"
140
156
  ]),
141
157
  tabs: /* @__PURE__ */ new Set(["plain", "class", "container", "id", "title", "style"]),
142
- combobox: /* @__PURE__ */ new Set(["placeholder", "value", "id", "class", "text", "dropdown", "style"])
158
+ combobox: /* @__PURE__ */ new Set(["placeholder", "value", "id", "class", "text", "dropdown", "style"]),
159
+ math: /* @__PURE__ */ new Set([...chemAttrs, "chem"]),
160
+ chem: chemAttrs,
161
+ ce: chemAttrs,
162
+ hiero: empty,
163
+ phonos: /* @__PURE__ */ new Set(["ipa", "class", "text", "lang", "wikibase", "file"]),
164
+ section: /* @__PURE__ */ new Set(["begin", "end"]),
165
+ source: syntaxHighlightAttrs,
166
+ syntaxhighlight: syntaxHighlightAttrs,
167
+ templatedata: empty,
168
+ timeline: /* @__PURE__ */ new Set(["method", "font"]),
169
+ quiz: /* @__PURE__ */ new Set(["display", "shuffleanswers", "points", "shuffle", "case"]),
170
+ languages: empty
143
171
  }))(), obsoleteAttrs = /* @__PURE__ */ (() => ({
144
172
  table: obsoleteTableAttrs,
145
173
  td: /* @__PURE__ */ new Set([...obsoleteTdAttrs, "scope"]),
@@ -1,12 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.removeCommentLine = exports.newline = exports.sanitizeAlt = exports.sanitizeId = exports.sanitizeAttr = exports.sanitize = exports.normalizeSpace = exports.encode = exports.print = exports.escape = exports.noWrap = exports.decodeNumber = exports.decodeHtml = exports.decodeHtmlBasic = exports.text = exports.escapeRegExp = exports.removeComment = exports.tidy = exports.extUrlChar = exports.extUrlCharFirst = exports.zs = exports.rawurldecode = void 0;
3
+ exports.removeCommentLine = exports.newline = exports.sanitizeAlt = exports.sanitizeId = exports.sanitizeAttr = exports.sanitize = exports.normalizeSpace = exports.encode = exports.print = exports.escape = exports.noWrap = exports.decodeNumber = exports.decodeHtml = exports.decodeHtmlBasic = exports.text = exports.escapeRegExp = exports.removeComment = exports.tidy = exports.restore = exports.trimLc = exports.extUrlChar = exports.extUrlCharFirst = exports.zs = exports.rawurldecode = void 0;
4
4
  var common_1 = require("@bhsd/common");
5
5
  Object.defineProperty(exports, "rawurldecode", { enumerable: true, get: function () { return common_1.rawurldecode; } });
6
6
  exports.zs = String.raw ` \xA0\u1680\u2000-\u200A\u202F\u205F\u3000`;
7
7
  const commonExtUrlChar = String.raw `[^[\]<>"\0-\x1F\x7F${exports.zs}\uFFFD]`;
8
8
  exports.extUrlCharFirst = String.raw `(?:\[[\da-f:.]+\]|${commonExtUrlChar})`;
9
9
  exports.extUrlChar = String.raw `(?:${commonExtUrlChar}|\0\d+[cn!~]\x7F)*`;
10
+ /**
11
+ * trim and toLowerCase
12
+ * @param s 字符串
13
+ */
14
+ const trimLc = (s) => s.trim().toLowerCase();
15
+ exports.trimLc = trimLc;
16
+ /**
17
+ * 恢复原始字符串
18
+ * @param s 更改后的字符串
19
+ * @param stack 原始字符串片段
20
+ */
21
+ const restore = (s, stack) => s.replace(/\0(\d+)\x7F/gu, (_, p1) => stack[p1]);
22
+ exports.restore = restore;
10
23
  /**
11
24
  * 生成正则替换函数
12
25
  * @param regex 正则表达式
@@ -1,6 +1,6 @@
1
1
  (() => {
2
2
  var _a;
3
- const version = '1.19.0', src = (_a = document.currentScript) === null || _a === void 0 ? void 0 : _a.src, file = /\/extensions\/dist\/base\.(?:min\.)?js$/u, CDN = src && file.test(src)
3
+ const version = '1.20.0', src = (_a = document.currentScript) === null || _a === void 0 ? void 0 : _a.src, file = /\/extensions\/dist\/base\.(?:min\.)?js$/u, CDN = src && file.test(src)
4
4
  ? src.replace(file, '')
5
5
  : `https://testingcf.jsdelivr.net/npm/wikiparser-node@${version}`;
6
6
  const workerJS = () => {
@@ -10,14 +10,17 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
10
10
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
11
11
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
12
12
  };
13
- var _LanguageService_id, _LanguageService_include;
13
+ var _LanguageService_instances, _LanguageService_id, _LanguageService_include, _LanguageService_hasData, _LanguageService_loadData;
14
+ let data;
14
15
  class LanguageService {
15
16
  get include() {
16
17
  return __classPrivateFieldGet(this, _LanguageService_include, "f");
17
18
  }
18
19
  constructor(include = true) {
20
+ _LanguageService_instances.add(this);
19
21
  _LanguageService_id.set(this, void 0);
20
22
  _LanguageService_include.set(this, void 0);
23
+ _LanguageService_hasData.set(this, false);
21
24
  __classPrivateFieldSet(this, _LanguageService_id, wikiparse.id++, "f");
22
25
  __classPrivateFieldSet(this, _LanguageService_include, include, "f");
23
26
  }
@@ -55,9 +58,11 @@ class LanguageService {
55
58
  return wikiparse.provide('diagnostics', __classPrivateFieldGet(this, _LanguageService_id, "f") + 0.9, wikitext, __classPrivateFieldGet(this, _LanguageService_include, "f"), warning);
56
59
  }
57
60
  provideHover(text, position) {
61
+ void __classPrivateFieldGet(this, _LanguageService_instances, "m", _LanguageService_loadData).call(this);
58
62
  return wikiparse.provide('hover', __classPrivateFieldGet(this, _LanguageService_id, "f") + 0.05, text, __classPrivateFieldGet(this, _LanguageService_include, "f"), position);
59
63
  }
60
64
  provideSignatureHelp(text, position) {
65
+ void __classPrivateFieldGet(this, _LanguageService_instances, "m", _LanguageService_loadData).call(this);
61
66
  return wikiparse.provide('signatureHelp', __classPrivateFieldGet(this, _LanguageService_id, "f") + 0.15, text, __classPrivateFieldGet(this, _LanguageService_include, "f"), position);
62
67
  }
63
68
  provideInlayHints(text) {
@@ -67,6 +72,12 @@ class LanguageService {
67
72
  return wikiparse.provide('findStyleTokens', __classPrivateFieldGet(this, _LanguageService_id, "f") + 0.35);
68
73
  }
69
74
  }
70
- _LanguageService_id = new WeakMap(), _LanguageService_include = new WeakMap();
75
+ _LanguageService_id = new WeakMap(), _LanguageService_include = new WeakMap(), _LanguageService_hasData = new WeakMap(), _LanguageService_instances = new WeakSet(), _LanguageService_loadData = async function _LanguageService_loadData() {
76
+ if (!__classPrivateFieldGet(this, _LanguageService_hasData, "f")) {
77
+ __classPrivateFieldSet(this, _LanguageService_hasData, true, "f");
78
+ data !== null && data !== void 0 ? data : (data = (async () => (await fetch(`${wikiparse.CDN}/data/signatures.json`)).json())());
79
+ wikiparse.provide('data', __classPrivateFieldGet(this, _LanguageService_id, "f"), await data, __classPrivateFieldGet(this, _LanguageService_include, "f"));
80
+ }
81
+ };
71
82
  wikiparse.LanguageService = LanguageService;
72
83
  })();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wikiparser-node",
3
- "version": "1.19.0",
3
+ "version": "1.20.0",
4
4
  "description": "A Node.js parser for MediaWiki markup with AST",
5
5
  "keywords": [
6
6
  "mediawiki",
@@ -27,6 +27,7 @@
27
27
  "/printed/README",
28
28
  "/errors/README",
29
29
  "/config/",
30
+ "!/config/mediawikiwiki.json",
30
31
  "/data/",
31
32
  "/i18n/",
32
33
  "/coverage/badge.svg",
@@ -77,7 +78,7 @@
77
78
  ]
78
79
  },
79
80
  "dependencies": {
80
- "@bhsd/common": "^0.9.2",
81
+ "@bhsd/common": "^0.9.3",
81
82
  "vscode-languageserver-types": "^3.17.5"
82
83
  },
83
84
  "optionalDependencies": {
@@ -91,7 +92,7 @@
91
92
  "vscode-json-languageservice": "^5.4.3"
92
93
  },
93
94
  "devDependencies": {
94
- "@codemirror/lint": "^6.8.4",
95
+ "@codemirror/lint": "^6.8.5",
95
96
  "@stylistic/eslint-plugin": "^3.1.0",
96
97
  "@stylistic/stylelint-plugin": "^3.1.2",
97
98
  "@types/color-name": "^2.0.0",