wikiparser-node 1.30.0 → 1.32.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 (101) hide show
  1. package/README.md +9 -4
  2. package/bundle/bundle-es8.min.js +28 -29
  3. package/bundle/bundle-lsp.min.js +34 -34
  4. package/bundle/bundle.min.js +23 -23
  5. package/dist/addon/attribute.js +166 -0
  6. package/dist/addon/link.js +92 -0
  7. package/dist/addon/table.js +12 -3
  8. package/dist/addon/token.js +5 -316
  9. package/dist/addon/transclude.js +11 -8
  10. package/dist/base.d.mts +13 -4
  11. package/dist/base.d.ts +13 -4
  12. package/dist/base.js +2 -0
  13. package/dist/base.mjs +2 -0
  14. package/dist/bin/config.js +1 -1
  15. package/dist/index.d.ts +34 -5
  16. package/dist/index.js +100 -88
  17. package/dist/internal.d.ts +6 -1
  18. package/dist/lib/document.d.ts +9 -7
  19. package/dist/lib/document.js +91 -66
  20. package/dist/lib/element.d.ts +8 -8
  21. package/dist/lib/element.js +52 -50
  22. package/dist/lib/lintConfig.js +6 -2
  23. package/dist/lib/lsp.js +120 -56
  24. package/dist/lib/node.js +21 -15
  25. package/dist/lib/redirectMap.js +1 -1
  26. package/dist/lib/text.js +17 -14
  27. package/dist/lib/title.d.ts +11 -0
  28. package/dist/lib/title.js +37 -13
  29. package/dist/mixin/elementLike.js +2 -3
  30. package/dist/mixin/syntax.js +13 -7
  31. package/dist/parser/commentAndExt.js +4 -4
  32. package/dist/parser/hrAndDoubleUnderscore.js +11 -9
  33. package/dist/parser/selector.js +16 -41
  34. package/dist/render/expand.js +216 -0
  35. package/dist/render/extension.js +141 -0
  36. package/dist/render/html.js +91 -0
  37. package/dist/render/magicWords.js +768 -0
  38. package/dist/render/syntaxhighlight.js +415 -0
  39. package/dist/src/arg.js +8 -1
  40. package/dist/src/atom.js +2 -0
  41. package/dist/src/attribute.d.ts +5 -0
  42. package/dist/src/attribute.js +59 -104
  43. package/dist/src/attributes.d.ts +5 -0
  44. package/dist/src/attributes.js +17 -51
  45. package/dist/src/converter.js +4 -2
  46. package/dist/src/converterFlags.js +8 -6
  47. package/dist/src/converterRule.js +19 -15
  48. package/dist/src/extLink.js +2 -2
  49. package/dist/src/heading.d.ts +1 -1
  50. package/dist/src/heading.js +5 -3
  51. package/dist/src/imageParameter.d.ts +0 -1
  52. package/dist/src/imageParameter.js +34 -24
  53. package/dist/src/index.d.ts +5 -5
  54. package/dist/src/index.js +37 -27
  55. package/dist/src/link/base.js +26 -36
  56. package/dist/src/link/category.d.ts +8 -1
  57. package/dist/src/link/category.js +104 -38
  58. package/dist/src/link/file.js +21 -8
  59. package/dist/src/link/galleryImage.js +2 -3
  60. package/dist/src/link/index.d.ts +1 -1
  61. package/dist/src/link/index.js +12 -33
  62. package/dist/src/multiLine/index.js +1 -1
  63. package/dist/src/nowiki/comment.js +1 -1
  64. package/dist/src/nowiki/doubleUnderscore.js +4 -2
  65. package/dist/src/nowiki/index.js +34 -31
  66. package/dist/src/nowiki/list.js +3 -1
  67. package/dist/src/nowiki/listBase.d.ts +2 -1
  68. package/dist/src/nowiki/listBase.js +22 -8
  69. package/dist/src/nowiki/quote.d.ts +1 -1
  70. package/dist/src/nowiki/quote.js +3 -3
  71. package/dist/src/onlyinclude.js +1 -1
  72. package/dist/src/paramLine.js +2 -0
  73. package/dist/src/parameter.js +1 -1
  74. package/dist/src/redirect.js +1 -1
  75. package/dist/src/table/base.js +5 -4
  76. package/dist/src/table/index.d.ts +1 -6
  77. package/dist/src/table/index.js +7 -16
  78. package/dist/src/table/td.js +12 -9
  79. package/dist/src/tag/html.js +2 -3
  80. package/dist/src/tag/index.js +8 -6
  81. package/dist/src/tagPair/ext.js +18 -41
  82. package/dist/src/tagPair/index.js +6 -4
  83. package/dist/src/tagPair/translate.d.ts +1 -0
  84. package/dist/src/tagPair/translate.js +10 -3
  85. package/dist/src/transclude.js +18 -21
  86. package/dist/util/constants.js +9 -3
  87. package/dist/util/debug.js +72 -5
  88. package/dist/util/diff.js +17 -15
  89. package/dist/util/html.js +14 -5
  90. package/dist/util/selector.js +37 -0
  91. package/dist/util/sharable.d.mts +4 -1
  92. package/dist/util/sharable.js +7 -7
  93. package/dist/util/sharable.mjs +7 -7
  94. package/dist/util/string.js +51 -20
  95. package/extensions/dist/base.js +2 -2
  96. package/extensions/editor.css +1 -1
  97. package/i18n/en.json +1 -0
  98. package/i18n/zh-hans.json +30 -29
  99. package/i18n/zh-hant.json +31 -30
  100. package/package.json +23 -16
  101. package/dist/addon/magicWords.js +0 -132
@@ -3,87 +3,112 @@ 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.EmbeddedCSSDocument = exports.EmbeddedJSONDocument = exports.stylelint = exports.htmlData = exports.cssLSP = exports.jsonLSP = exports.jsonTags = exports.texvcjs = void 0;
6
+ exports.EmbeddedCSSDocument = exports.EmbeddedJSONDocument = exports.loadStylelint = exports.loadHtmlData = exports.loadCssLSP = exports.loadJsonLSP = exports.jsonTags = exports.loadTexvcjs = void 0;
7
7
  const path_1 = __importDefault(require("path"));
8
8
  const common_1 = require("@bhsd/common");
9
9
  /* NOT FOR BROWSER */
10
10
  const constants_1 = require("../util/constants");
11
- exports.texvcjs = (() => {
11
+ let texcvjs;
12
+ const loadTexvcjs = () => {
12
13
  NPM: {
14
+ if (texcvjs === undefined) {
15
+ try {
16
+ texcvjs = require('mathoid-texvcjs');
17
+ }
18
+ catch {
19
+ /* istanbul ignore next */
20
+ texcvjs = null;
21
+ }
22
+ }
23
+ return texcvjs;
24
+ }
25
+ };
26
+ exports.loadTexvcjs = loadTexvcjs;
27
+ exports.jsonTags = ['templatedata', 'mapframe', 'maplink'];
28
+ let jsonLSP;
29
+ const loadJsonLSP = () => {
30
+ if (jsonLSP === undefined) {
13
31
  try {
14
- return require('mathoid-texvcjs');
32
+ jsonLSP = require('vscode-json-languageservice')
33
+ .getLanguageService({
34
+ /** @implements */
35
+ async schemaRequestService(uri) {
36
+ return (await fetch(uri)).text();
37
+ },
38
+ });
39
+ const dir = path_1.default.join('..', '..', 'data', 'ext');
40
+ jsonLSP.configure({
41
+ schemas: exports.jsonTags.map((tag) => {
42
+ const uri = path_1.default.join(dir, tag);
43
+ try {
44
+ const schema = require(tag === 'maplink' ? path_1.default.join(dir, 'mapframe') : uri);
45
+ return {
46
+ uri,
47
+ fileMatch: [tag],
48
+ schema,
49
+ };
50
+ }
51
+ catch {
52
+ /* istanbul ignore next */
53
+ return false;
54
+ }
55
+ }).filter(schema => schema !== false),
56
+ });
15
57
  }
16
58
  catch {
17
59
  /* istanbul ignore next */
18
- return undefined;
60
+ jsonLSP = null;
19
61
  }
20
62
  }
21
- })();
22
- exports.jsonTags = ['templatedata', 'mapframe', 'maplink'];
23
- exports.jsonLSP = (() => {
24
- try {
25
- const lsp = require('vscode-json-languageservice')
26
- .getLanguageService({
27
- /** @implements */
28
- async schemaRequestService(uri) {
29
- return (await fetch(uri)).text();
30
- },
31
- }), dir = path_1.default.join('..', '..', 'data', 'ext');
32
- lsp.configure({
33
- schemas: exports.jsonTags.map((tag) => {
34
- const uri = path_1.default.join(dir, tag);
35
- try {
36
- const schema = require(tag === 'maplink' ? path_1.default.join(dir, 'mapframe') : uri);
37
- return {
38
- uri,
39
- fileMatch: [tag],
40
- schema,
41
- };
42
- }
43
- catch {
44
- /* istanbul ignore next */
45
- return false;
46
- }
47
- }).filter(Boolean),
48
- });
49
- return lsp;
50
- }
51
- catch {
52
- /* istanbul ignore next */
53
- return undefined;
54
- }
55
- })();
56
- exports.cssLSP = (() => {
57
- try {
58
- return require('vscode-css-languageservice')
59
- .getCSSLanguageService();
60
- }
61
- catch {
62
- /* istanbul ignore next */
63
- return undefined;
64
- }
65
- })();
66
- exports.htmlData = (() => {
67
- try {
68
- return require('vscode-html-languageservice')
69
- .getDefaultHTMLDataProvider();
70
- }
71
- catch {
72
- /* istanbul ignore next */
73
- return undefined;
63
+ return jsonLSP;
64
+ };
65
+ exports.loadJsonLSP = loadJsonLSP;
66
+ let cssLSP;
67
+ const loadCssLSP = () => {
68
+ if (cssLSP === undefined) {
69
+ try {
70
+ cssLSP = require('vscode-css-languageservice')
71
+ .getCSSLanguageService();
72
+ }
73
+ catch {
74
+ /* istanbul ignore next */
75
+ cssLSP = null;
76
+ }
74
77
  }
75
- })();
76
- exports.stylelint = (async () => {
77
- NPM: {
78
+ return cssLSP;
79
+ };
80
+ exports.loadCssLSP = loadCssLSP;
81
+ let htmlData;
82
+ const loadHtmlData = () => {
83
+ if (htmlData === undefined) {
78
84
  try {
79
- return (await import('stylelint')).default;
85
+ htmlData = require('vscode-html-languageservice')
86
+ .getDefaultHTMLDataProvider();
80
87
  }
81
88
  catch {
82
89
  /* istanbul ignore next */
83
- return undefined;
90
+ htmlData = null;
84
91
  }
85
92
  }
86
- })();
93
+ return htmlData;
94
+ };
95
+ exports.loadHtmlData = loadHtmlData;
96
+ let stylelint;
97
+ const loadStylelint = () => {
98
+ NPM: {
99
+ stylelint ??= (async () => {
100
+ try {
101
+ return (await import('stylelint')).default;
102
+ }
103
+ catch {
104
+ /* istanbul ignore next */
105
+ return null;
106
+ }
107
+ })();
108
+ return stylelint;
109
+ }
110
+ };
111
+ exports.loadStylelint = loadStylelint;
87
112
  /** embedded document */
88
113
  class EmbeddedDocument {
89
114
  uri = '';
@@ -136,7 +161,7 @@ class EmbeddedJSONDocument extends EmbeddedDocument {
136
161
  constructor(root, token) {
137
162
  super('json', root, token);
138
163
  this.uri = token.name;
139
- this.jsonDoc = exports.jsonLSP.parseJSONDocument(this);
164
+ this.jsonDoc = (0, exports.loadJsonLSP)().parseJSONDocument(this);
140
165
  }
141
166
  }
142
167
  exports.EmbeddedJSONDocument = EmbeddedJSONDocument;
@@ -149,11 +174,11 @@ class EmbeddedCSSDocument extends EmbeddedDocument {
149
174
  constructor(root, token) {
150
175
  const { type, tag } = token.parentNode;
151
176
  super('css', root, token, `${type === 'ext-attr' ? 'div' : tag}{`, '}');
152
- this.styleSheet = exports.cssLSP.parseStylesheet(this);
177
+ this.styleSheet = (0, exports.loadCssLSP)().parseStylesheet(this);
153
178
  }
154
179
  getContent() {
155
180
  return (0, common_1.sanitizeInlineStyle)(super.getContent());
156
181
  }
157
182
  }
158
183
  exports.EmbeddedCSSDocument = EmbeddedCSSDocument;
159
- constants_1.classes['EmbeddedCSSDocument'] = __filename;
184
+ constants_1.classes['EmbeddedDocument'] = __filename;
@@ -1,5 +1,5 @@
1
1
  import { AstNode } from './node';
2
- import type { LintError, AST } from '../base';
2
+ import type { TokenTypes, LintError, AST } from '../base';
3
3
  import type { ElementLike } from '../mixin/elementLike';
4
4
  import type { AstNodes, AstText, Token, FileToken, LinkToken, RedirectTargetToken, ExtLinkToken, MagicLinkToken, ImageParameterToken, TranscludeToken } from '../internal';
5
5
  declare type LinkTokens = LinkToken | RedirectTargetToken | ExtLinkToken | MagicLinkToken | ImageParameterToken;
@@ -38,12 +38,6 @@ export declare abstract class AstElement extends AstNode {
38
38
  /** all templates and modules / 所有模板和模块 */
39
39
  get embeds(): TranscludeToken[];
40
40
  constructor();
41
- /**
42
- * Merge adjacent text child nodes
43
- *
44
- * 合并相邻的文本子节点
45
- */
46
- normalize(): void;
47
41
  /**
48
42
  * Remove a child node
49
43
  *
@@ -113,13 +107,19 @@ export declare abstract class AstElement extends AstNode {
113
107
  * @param start
114
108
  */
115
109
  json(file?: string, start?: number): AST;
110
+ /**
111
+ * Merge adjacent text child nodes
112
+ *
113
+ * 合并相邻的文本子节点
114
+ */
115
+ normalize(): void;
116
116
  /**
117
117
  * Check if the current element matches the selector
118
118
  *
119
119
  * 检查是否符合选择器
120
120
  * @param selector selector / 选择器
121
121
  */
122
- matches<T>(selector?: string): this is T;
122
+ matches<T>(selector: string): this is T;
123
123
  /**
124
124
  * Insert a batch of child nodes at the start
125
125
  *
@@ -40,7 +40,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
40
40
  exports.AstElement = void 0;
41
41
  const string_1 = require("../util/string");
42
42
  const debug_1 = require("../util/debug");
43
- const selector_1 = require("../parser/selector");
43
+ const selector_1 = require("../util/selector");
44
44
  const node_1 = require("./node");
45
45
  const elementLike_1 = require("../mixin/elementLike");
46
46
  /* NOT FOR BROWSER */
@@ -130,45 +130,6 @@ let AstElement = (() => {
130
130
  text(separator) {
131
131
  return (0, string_1.text)(this.childNodes, separator);
132
132
  }
133
- /**
134
- * Merge adjacent text child nodes
135
- *
136
- * 合并相邻的文本子节点
137
- */
138
- normalize() {
139
- const childNodes = this.getChildNodes();
140
- /**
141
- * 移除子节点
142
- * @param i 移除位置
143
- */
144
- const remove = (i) => {
145
- /* NOT FOR BROWSER */
146
- childNodes[i].setAttribute('parentNode', undefined);
147
- /* NOT FOR BROWSER END */
148
- childNodes.splice(i, 1);
149
- childNodes[i - 1]?.setAttribute('nextSibling', childNodes[i]);
150
- childNodes[i]?.setAttribute('previousSibling', childNodes[i - 1]);
151
- };
152
- for (let i = childNodes.length - 1; i >= 0; i--) {
153
- const { type, data } = childNodes[i];
154
- if (type !== 'text' || childNodes.length === 1 || this.getGaps(i - (i && 1))) {
155
- //
156
- }
157
- else if (data === '') {
158
- remove(i);
159
- /* NOT FOR BROWSER */
160
- }
161
- else {
162
- const prev = childNodes[i - 1];
163
- if (prev?.type === 'text') {
164
- prev.setAttribute('data', prev.data + data);
165
- remove(i);
166
- }
167
- /* NOT FOR BROWSER END */
168
- }
169
- }
170
- this.setAttribute('childNodes', childNodes);
171
- }
172
133
  /**
173
134
  * Remove a child node
174
135
  *
@@ -221,6 +182,10 @@ let AstElement = (() => {
221
182
  }
222
183
  return undefined;
223
184
  }
185
+ /** @private */
186
+ isInside(type) {
187
+ return this.closest(`${type},ext`)?.type === type;
188
+ }
224
189
  /**
225
190
  * Insert a batch of child nodes at the end
226
191
  *
@@ -242,7 +207,7 @@ let AstElement = (() => {
242
207
  for (let i = this.length - 1; i >= 0; i--) {
243
208
  this.removeAt(i);
244
209
  }
245
- this.safeAppend(elements);
210
+ this.safeAppend([...elements]);
246
211
  }
247
212
  }
248
213
  /**
@@ -355,15 +320,17 @@ let AstElement = (() => {
355
320
  }
356
321
  /** @private */
357
322
  print(opt = {}) {
358
- const cl = opt.class;
359
- if (this.toString()) {
360
- return (cl === ''
361
- ? ''
362
- : `<span class="wpb-${cl ?? this.type}${this.getAttribute('invalid') ? ' wpb-invalid' : ''}">`)
363
- + (0, string_1.print)(this.childNodes, opt)
364
- + (cl === '' ? '' : '</span>');
323
+ PRINT: {
324
+ const cl = opt.class;
325
+ if (this.toString()) {
326
+ return (cl === ''
327
+ ? ''
328
+ : `<span class="wpb-${cl ?? this.type}${this.getAttribute('invalid') ? ' wpb-invalid' : ''}">`)
329
+ + (0, string_1.print)(this.childNodes, opt)
330
+ + (cl === '' ? '' : '</span>');
331
+ }
332
+ return '';
365
333
  }
366
- return '';
367
334
  }
368
335
  /**
369
336
  * Save in JSON format
@@ -398,6 +365,41 @@ let AstElement = (() => {
398
365
  }
399
366
  }
400
367
  /* NOT FOR BROWSER */
368
+ /**
369
+ * Merge adjacent text child nodes
370
+ *
371
+ * 合并相邻的文本子节点
372
+ */
373
+ normalize() {
374
+ const childNodes = this.getChildNodes();
375
+ /**
376
+ * 移除子节点
377
+ * @param i 移除位置
378
+ */
379
+ const remove = (i) => {
380
+ childNodes[i].setAttribute('parentNode', undefined);
381
+ childNodes.splice(i, 1);
382
+ childNodes[i - 1]?.setAttribute('nextSibling', childNodes[i]);
383
+ childNodes[i]?.setAttribute('previousSibling', childNodes[i - 1]);
384
+ };
385
+ for (let i = childNodes.length - 1; i >= 0; i--) {
386
+ const { type, data } = childNodes[i];
387
+ if (type !== 'text' || childNodes.length === 1 || this.getGaps(i - (i && 1))) {
388
+ //
389
+ }
390
+ else if (data === '') {
391
+ remove(i);
392
+ }
393
+ else {
394
+ const prev = childNodes[i - 1];
395
+ if (prev?.type === 'text') {
396
+ prev.setAttribute('data', prev.data + data);
397
+ remove(i);
398
+ }
399
+ }
400
+ }
401
+ this.setAttribute('childNodes', childNodes);
402
+ }
401
403
  /**
402
404
  * Check if the current element matches the selector
403
405
  *
@@ -405,7 +407,7 @@ let AstElement = (() => {
405
407
  * @param selector selector / 选择器
406
408
  */
407
409
  matches(selector) {
408
- return selector === undefined || (0, selector_1.getCondition)(selector, this)(this);
410
+ return (0, selector_1.getCondition)(selector, this)(this);
409
411
  }
410
412
  /**
411
413
  * Insert a batch of child nodes at the start
@@ -15,6 +15,7 @@ const dict = new Map([
15
15
  ['error', 'error'],
16
16
  ]);
17
17
  const defaultLintRuleConfig = {
18
+ 'arg-in-ext': 1,
18
19
  'bold-header': [
19
20
  1,
20
21
  {
@@ -271,11 +272,14 @@ const set = (obj, key, value) => {
271
272
  /* istanbul ignore next */
272
273
  throw new RangeError(`Invalid lint config for ${key}: ${JSON.stringify(value)}`);
273
274
  };
275
+ const clone = typeof structuredClone === 'function'
276
+ ? structuredClone
277
+ : /* istanbul ignore next */ (obj) => JSON.parse(JSON.stringify(obj));
274
278
  /** 语法规则设置 */
275
279
  class LintRuleConfiguration {
276
280
  /** @param config 语法规则设置 */
277
281
  constructor(config) {
278
- Object.assign(this, structuredClone(defaultLintRuleConfig));
282
+ Object.assign(this, clone(defaultLintRuleConfig));
279
283
  if (!config) {
280
284
  return;
281
285
  }
@@ -302,9 +306,9 @@ class LintConfiguration {
302
306
  set rules(config) {
303
307
  this.#rules = new Proxy(new LintRuleConfiguration(config), {
304
308
  set,
309
+ /* istanbul ignore next */
305
310
  /** @ignore */
306
311
  deleteProperty() {
307
- /* istanbul ignore next */
308
312
  return false;
309
313
  },
310
314
  });