wikiparser-node 1.13.0 → 1.13.1-b

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 (176) hide show
  1. package/bundle/bundle.min.js +37 -0
  2. package/config/default.json +32 -41
  3. package/config/enwiki.json +17 -839
  4. package/config/llwiki.json +21 -56
  5. package/config/moegirl.json +21 -65
  6. package/config/zhwiki.json +32 -498
  7. package/extensions/dist/base.js +163 -0
  8. package/extensions/dist/codejar.js +53 -0
  9. package/extensions/dist/editor.js +159 -0
  10. package/extensions/dist/highlight.js +30 -0
  11. package/extensions/dist/lint.js +72 -0
  12. package/extensions/editor.css +59 -0
  13. package/extensions/ui.css +162 -0
  14. package/i18n/zh-hans.json +1 -0
  15. package/i18n/zh-hant.json +1 -0
  16. package/package.json +29 -22
  17. package/config/.schema.json +0 -203
  18. package/dist/addon/table.js +0 -494
  19. package/dist/addon/token.js +0 -392
  20. package/dist/addon/transclude.js +0 -184
  21. package/dist/base.d.ts +0 -109
  22. package/dist/base.js +0 -67
  23. package/dist/index.d.ts +0 -33
  24. package/dist/index.js +0 -279
  25. package/dist/internal.d.ts +0 -47
  26. package/dist/lib/element.d.ts +0 -125
  27. package/dist/lib/element.js +0 -364
  28. package/dist/lib/node.d.ts +0 -173
  29. package/dist/lib/node.js +0 -478
  30. package/dist/lib/range.d.ts +0 -105
  31. package/dist/lib/range.js +0 -406
  32. package/dist/lib/ranges.d.ts +0 -28
  33. package/dist/lib/ranges.js +0 -126
  34. package/dist/lib/rect.d.ts +0 -18
  35. package/dist/lib/rect.js +0 -36
  36. package/dist/lib/text.d.ts +0 -58
  37. package/dist/lib/text.js +0 -414
  38. package/dist/lib/title.d.ts +0 -49
  39. package/dist/lib/title.js +0 -251
  40. package/dist/mixin/attributesParent.d.ts +0 -49
  41. package/dist/mixin/attributesParent.js +0 -80
  42. package/dist/mixin/fixed.d.ts +0 -5
  43. package/dist/mixin/fixed.js +0 -32
  44. package/dist/mixin/flagsParent.d.ts +0 -43
  45. package/dist/mixin/flagsParent.js +0 -64
  46. package/dist/mixin/hidden.d.ts +0 -7
  47. package/dist/mixin/hidden.js +0 -39
  48. package/dist/mixin/magicLinkParent.d.ts +0 -19
  49. package/dist/mixin/magicLinkParent.js +0 -43
  50. package/dist/mixin/singleLine.d.ts +0 -5
  51. package/dist/mixin/singleLine.js +0 -25
  52. package/dist/mixin/sol.d.ts +0 -6
  53. package/dist/mixin/sol.js +0 -45
  54. package/dist/mixin/syntax.d.ts +0 -8
  55. package/dist/mixin/syntax.js +0 -46
  56. package/dist/parser/braces.js +0 -152
  57. package/dist/parser/commentAndExt.js +0 -84
  58. package/dist/parser/converter.js +0 -41
  59. package/dist/parser/externalLinks.js +0 -39
  60. package/dist/parser/hrAndDoubleUnderscore.js +0 -44
  61. package/dist/parser/html.js +0 -40
  62. package/dist/parser/links.js +0 -103
  63. package/dist/parser/list.js +0 -116
  64. package/dist/parser/magicLinks.js +0 -55
  65. package/dist/parser/quotes.js +0 -69
  66. package/dist/parser/redirect.js +0 -28
  67. package/dist/parser/selector.js +0 -443
  68. package/dist/parser/table.js +0 -125
  69. package/dist/src/arg.d.ts +0 -49
  70. package/dist/src/arg.js +0 -220
  71. package/dist/src/atom.d.ts +0 -14
  72. package/dist/src/atom.js +0 -54
  73. package/dist/src/attribute.d.ts +0 -64
  74. package/dist/src/attribute.js +0 -482
  75. package/dist/src/attributes.d.ts +0 -103
  76. package/dist/src/attributes.js +0 -383
  77. package/dist/src/converter.d.ts +0 -28
  78. package/dist/src/converter.js +0 -153
  79. package/dist/src/converterFlags.d.ts +0 -80
  80. package/dist/src/converterFlags.js +0 -241
  81. package/dist/src/converterRule.d.ts +0 -71
  82. package/dist/src/converterRule.js +0 -218
  83. package/dist/src/extLink.d.ts +0 -36
  84. package/dist/src/extLink.js +0 -223
  85. package/dist/src/gallery.d.ts +0 -51
  86. package/dist/src/gallery.js +0 -166
  87. package/dist/src/heading.d.ts +0 -44
  88. package/dist/src/heading.js +0 -222
  89. package/dist/src/hidden.d.ts +0 -9
  90. package/dist/src/hidden.js +0 -82
  91. package/dist/src/html.d.ts +0 -61
  92. package/dist/src/html.js +0 -344
  93. package/dist/src/imageParameter.d.ts +0 -60
  94. package/dist/src/imageParameter.js +0 -262
  95. package/dist/src/imagemap.d.ts +0 -47
  96. package/dist/src/imagemap.js +0 -148
  97. package/dist/src/imagemapLink.d.ts +0 -35
  98. package/dist/src/imagemapLink.js +0 -99
  99. package/dist/src/index.d.ts +0 -136
  100. package/dist/src/index.js +0 -790
  101. package/dist/src/link/base.d.ts +0 -52
  102. package/dist/src/link/base.js +0 -258
  103. package/dist/src/link/category.d.ts +0 -22
  104. package/dist/src/link/category.js +0 -36
  105. package/dist/src/link/file.d.ts +0 -102
  106. package/dist/src/link/file.js +0 -345
  107. package/dist/src/link/galleryImage.d.ts +0 -29
  108. package/dist/src/link/galleryImage.js +0 -133
  109. package/dist/src/link/index.d.ts +0 -39
  110. package/dist/src/link/index.js +0 -100
  111. package/dist/src/link/redirectTarget.d.ts +0 -27
  112. package/dist/src/link/redirectTarget.js +0 -71
  113. package/dist/src/magicLink.d.ts +0 -57
  114. package/dist/src/magicLink.js +0 -261
  115. package/dist/src/nested.d.ts +0 -40
  116. package/dist/src/nested.js +0 -108
  117. package/dist/src/nowiki/base.d.ts +0 -28
  118. package/dist/src/nowiki/base.js +0 -90
  119. package/dist/src/nowiki/comment.d.ts +0 -14
  120. package/dist/src/nowiki/comment.js +0 -123
  121. package/dist/src/nowiki/dd.d.ts +0 -8
  122. package/dist/src/nowiki/dd.js +0 -74
  123. package/dist/src/nowiki/doubleUnderscore.d.ts +0 -15
  124. package/dist/src/nowiki/doubleUnderscore.js +0 -101
  125. package/dist/src/nowiki/hr.d.ts +0 -5
  126. package/dist/src/nowiki/hr.js +0 -72
  127. package/dist/src/nowiki/index.d.ts +0 -14
  128. package/dist/src/nowiki/index.js +0 -30
  129. package/dist/src/nowiki/list.d.ts +0 -5
  130. package/dist/src/nowiki/list.js +0 -67
  131. package/dist/src/nowiki/listBase.d.ts +0 -23
  132. package/dist/src/nowiki/listBase.js +0 -100
  133. package/dist/src/nowiki/noinclude.d.ts +0 -6
  134. package/dist/src/nowiki/noinclude.js +0 -77
  135. package/dist/src/nowiki/quote.d.ts +0 -14
  136. package/dist/src/nowiki/quote.js +0 -149
  137. package/dist/src/onlyinclude.d.ts +0 -13
  138. package/dist/src/onlyinclude.js +0 -60
  139. package/dist/src/paramTag/index.d.ts +0 -28
  140. package/dist/src/paramTag/index.js +0 -80
  141. package/dist/src/paramTag/inputbox.d.ts +0 -8
  142. package/dist/src/paramTag/inputbox.js +0 -24
  143. package/dist/src/parameter.d.ts +0 -60
  144. package/dist/src/parameter.js +0 -267
  145. package/dist/src/pre.d.ts +0 -28
  146. package/dist/src/pre.js +0 -62
  147. package/dist/src/redirect.d.ts +0 -30
  148. package/dist/src/redirect.js +0 -128
  149. package/dist/src/syntax.d.ts +0 -15
  150. package/dist/src/syntax.js +0 -87
  151. package/dist/src/table/base.d.ts +0 -28
  152. package/dist/src/table/base.js +0 -81
  153. package/dist/src/table/index.d.ts +0 -230
  154. package/dist/src/table/index.js +0 -506
  155. package/dist/src/table/td.d.ts +0 -72
  156. package/dist/src/table/td.js +0 -375
  157. package/dist/src/table/tr.d.ts +0 -30
  158. package/dist/src/table/tr.js +0 -61
  159. package/dist/src/table/trBase.d.ts +0 -49
  160. package/dist/src/table/trBase.js +0 -165
  161. package/dist/src/tagPair/ext.d.ts +0 -29
  162. package/dist/src/tagPair/ext.js +0 -229
  163. package/dist/src/tagPair/include.d.ts +0 -33
  164. package/dist/src/tagPair/include.js +0 -132
  165. package/dist/src/tagPair/index.d.ts +0 -23
  166. package/dist/src/tagPair/index.js +0 -130
  167. package/dist/src/transclude.d.ts +0 -159
  168. package/dist/src/transclude.js +0 -598
  169. package/dist/util/constants.js +0 -26
  170. package/dist/util/debug.js +0 -95
  171. package/dist/util/diff.js +0 -83
  172. package/dist/util/html.js +0 -146
  173. package/dist/util/lint.js +0 -32
  174. package/dist/util/string.js +0 -107
  175. package/errors/README +0 -3
  176. package/printed/README +0 -3
@@ -1,95 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.undo = exports.mixin = exports.emptyArray = exports.setChildNodes = exports.isToken = exports.Shadow = void 0;
4
- exports.Shadow = {
5
- running: false,
6
- /** @private */
7
- run(callback) {
8
- const { running } = this;
9
- this.running = true;
10
- try {
11
- const { Token: AnyToken } = require('../src/index');
12
- const result = callback();
13
- if (result instanceof AnyToken && !result.getAttribute('built')) {
14
- result.afterBuild();
15
- }
16
- this.running = running;
17
- return result;
18
- }
19
- catch (e) {
20
- this.running = running;
21
- throw e;
22
- }
23
- },
24
- rev: 0,
25
- };
26
- /**
27
- * 是否是某一特定类型的节点
28
- * @param type 节点类型
29
- */
30
- const isToken = (type) => (node) => node.type === type;
31
- exports.isToken = isToken;
32
- /**
33
- * 更新chldNodes
34
- * @param parent 父节点
35
- * @param position 子节点位置
36
- * @param deleteCount 移除的子节点数量
37
- * @param inserted 插入的子节点
38
- */
39
- const setChildNodes = (parent, position, deleteCount, inserted = []) => {
40
- const childNodes = [...parent.childNodes], removed = childNodes.splice(position, deleteCount, ...inserted);
41
- parent.setAttribute('childNodes', childNodes);
42
- for (const node of inserted) {
43
- node.setAttribute('parentNode', parent);
44
- }
45
- /* NOT FOR BROWSER */
46
- for (const node of removed) {
47
- node.setAttribute('parentNode', undefined);
48
- }
49
- /* NOT FOR BROWSER END */
50
- return removed;
51
- };
52
- exports.setChildNodes = setChildNodes;
53
- /**
54
- * 生成一个指定长度的空数组
55
- * @param n 数组长度
56
- * @param callback 回调函数
57
- */
58
- const emptyArray = (n, callback) => new Array(n).fill(undefined).map((_, i) => callback(i));
59
- exports.emptyArray = emptyArray;
60
- /**
61
- * 同步混入的类名
62
- * @param target 混入的目标
63
- * @param source 混入的源
64
- */
65
- const mixin = (target, source) => {
66
- Object.defineProperty(target, 'name', { value: source.name });
67
- };
68
- exports.mixin = mixin;
69
- /* NOT FOR BROWSER */
70
- /**
71
- * 撤销最近一次Mutation
72
- * @param e 事件
73
- * @param data 事件数据
74
- * @throws `RangeError` 无法撤销的事件类型
75
- */
76
- const undo = (e, data) => {
77
- const { target, type } = e;
78
- switch (data.type) {
79
- case 'remove':
80
- (0, exports.setChildNodes)(target, data.position, 0, [data.removed]);
81
- break;
82
- case 'insert':
83
- (0, exports.setChildNodes)(target, data.position, 1);
84
- break;
85
- case 'replace':
86
- (0, exports.setChildNodes)(target.parentNode, data.position, 1, [data.oldToken]);
87
- break;
88
- case 'text':
89
- target.replaceData(data.oldText);
90
- break;
91
- default:
92
- throw new RangeError(`Unable to undo events with an unknown type: ${type}`);
93
- }
94
- };
95
- exports.undo = undo;
package/dist/util/diff.js DELETED
@@ -1,83 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.info = exports.error = exports.diff = exports.cmd = void 0;
4
- const fs = require("fs/promises");
5
- const child_process_1 = require("child_process");
6
- const chalk = require("chalk");
7
- process.on('unhandledRejection', e => {
8
- console.error(e);
9
- });
10
- /**
11
- * 将shell命令转化为Promise对象
12
- * @param command shell指令
13
- * @param args shell输入参数
14
- */
15
- const cmd = (command, args) => new Promise(resolve => {
16
- let timer, shell;
17
- /**
18
- * 清除进程并返回
19
- * @param val 返回值
20
- */
21
- const r = (val) => {
22
- clearTimeout(timer);
23
- shell?.kill('SIGINT');
24
- resolve(val);
25
- };
26
- try {
27
- shell = (0, child_process_1.spawn)(command, args);
28
- timer = setTimeout(() => {
29
- shell.kill('SIGINT');
30
- }, 60 * 1000);
31
- let buf = '';
32
- shell.stdout.on('data', data => {
33
- buf += String(data);
34
- });
35
- shell.stdout.on('end', () => {
36
- r(buf);
37
- });
38
- shell.on('exit', () => {
39
- r(shell.killed ? undefined : '');
40
- });
41
- shell.on('error', () => {
42
- r(undefined);
43
- });
44
- }
45
- catch {
46
- r(undefined);
47
- }
48
- });
49
- exports.cmd = cmd;
50
- /**
51
- * 比较两个文件
52
- * @param oldStr 旧文本
53
- * @param newStr 新文本
54
- * @param uid 唯一标识
55
- */
56
- const diff = async (oldStr, newStr, uid) => {
57
- if (oldStr === newStr) {
58
- return;
59
- }
60
- const oldFile = `diffOld${uid}`, newFile = `diffNew${uid}`;
61
- await Promise.all([fs.writeFile(oldFile, oldStr), fs.writeFile(newFile, newStr)]);
62
- const stdout = await (0, exports.cmd)('git', [
63
- 'diff',
64
- '--color-words=[\xC0-\xFF][\x80-\xBF]+|<?/?\\w+/?>?|[^[:space:]]',
65
- '-U0',
66
- '--no-index',
67
- oldFile,
68
- newFile,
69
- ]);
70
- console.log(stdout?.split('\n').slice(4).join('\n'));
71
- await Promise.all([fs.unlink(oldFile), fs.unlink(newFile)]);
72
- };
73
- exports.diff = diff;
74
- /** @implements */
75
- const error = (msg, ...args) => {
76
- console.error(chalk.red(msg), ...args);
77
- };
78
- exports.error = error;
79
- /** @implements */
80
- const info = (msg, ...args) => {
81
- console.info(chalk.green(msg), ...args);
82
- };
83
- exports.info = info;
package/dist/util/html.js DELETED
@@ -1,146 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.font = exports.html = exports.getCommon = void 0;
4
- /**
5
- * get common prefix length
6
- * @param prefix
7
- * @param lastPrefix
8
- */
9
- const getCommon = (prefix, lastPrefix) => prefix.startsWith(lastPrefix) ? lastPrefix.length : [...lastPrefix].findIndex((ch, i) => ch !== prefix[i]);
10
- exports.getCommon = getCommon;
11
- /**
12
- * get next list item
13
- * @param char list syntax
14
- * @param state
15
- * @param state.dt whether a <dt> tag is open
16
- */
17
- const nextItem = (char, state) => {
18
- if (char === '*' || char === '#') {
19
- return '</li>\n<li>';
20
- }
21
- const close = state.dt[0] ? '</dt>\n' : '</dd>\n';
22
- if (char === ';') {
23
- state.dt[0] = true;
24
- return `${close}<dt>`;
25
- }
26
- state.dt[0] = false;
27
- return `${close}<dd>`;
28
- };
29
- /**
30
- * close list item
31
- * @param chars list syntax
32
- * @param state
33
- * @param state.dt whether a <dt> tag is open
34
- */
35
- const closeList = (chars, state) => {
36
- let result = '';
37
- for (let i = chars.length - 1; i >= 0; i--) {
38
- const char = chars[i];
39
- switch (char) {
40
- case '*':
41
- case '#':
42
- result += `</li></${char === '*' ? 'ul' : 'ol'}>`;
43
- break;
44
- case ':':
45
- result += `</${state.dt.shift() ? 'dt' : 'dd'}></dl>`;
46
- break;
47
- default:
48
- //
49
- }
50
- }
51
- return result;
52
- };
53
- /**
54
- * open list item
55
- * @param chars list syntax
56
- * @param state
57
- * @param state.dt whether a <dt> tag is open
58
- */
59
- const openList = (chars, state) => {
60
- let result = '';
61
- for (const char of chars) {
62
- switch (char) {
63
- case '*':
64
- case '#':
65
- result += `<${char === '*' ? 'ul' : 'ol'}><li>`;
66
- break;
67
- case ':':
68
- state.dt.unshift(false);
69
- result += '<dl><dd>';
70
- break;
71
- default:
72
- state.dt.unshift(true);
73
- result += '<dl><dt>';
74
- }
75
- }
76
- return result;
77
- };
78
- /**
79
- * convert to HTML
80
- * @param childNodes a Token's contents
81
- * @param separator delimiter between nodes
82
- * @param nowrap whether to normalize newlines
83
- * @param nocc whether to perform language conversion
84
- */
85
- const html = (childNodes, separator = '', nowrap, nocc) => {
86
- let lastPrefix = '';
87
- const results = [], state = { dt: [] };
88
- for (let j = 0; j < childNodes.length; j++) {
89
- const child = childNodes[j];
90
- let result = child.toHtmlInternal(nowrap, nocc);
91
- if (child.is('list-range')) {
92
- result = result.trim();
93
- const { previousSibling: { firstChild: { data } } } = child, prefix = data.trim(), prefix2 = prefix.replaceAll(';', ':'), commonPrefixLength = (0, exports.getCommon)(prefix2, lastPrefix);
94
- let pre = closeList(lastPrefix.slice(commonPrefixLength), state);
95
- if (prefix.length === commonPrefixLength) {
96
- pre += nextItem(prefix.slice(-1), state);
97
- }
98
- else {
99
- if (state.dt[0] && prefix[commonPrefixLength - 1] === ':') {
100
- pre += nextItem(':', state);
101
- }
102
- if (lastPrefix) {
103
- pre += '\n';
104
- }
105
- pre += openList(prefix.slice(commonPrefixLength), state);
106
- }
107
- result = pre + result;
108
- let { nextSibling } = child;
109
- while (nextSibling?.type === 'dd') {
110
- const next = nextSibling.nextSibling;
111
- for (let i = 0; i < nextSibling.indent; i++) {
112
- result += nextItem(':', state);
113
- }
114
- result += next.toHtmlInternal(nowrap).trim();
115
- ({ nextSibling } = next);
116
- j += 2;
117
- }
118
- if (nextSibling?.type === 'text'
119
- && nextSibling.data === '\n'
120
- && nextSibling.nextVisibleSibling?.type === 'list') {
121
- j += 2;
122
- lastPrefix = prefix2;
123
- }
124
- else {
125
- lastPrefix = '';
126
- result += closeList(prefix2, state);
127
- }
128
- }
129
- results.push(result);
130
- }
131
- return results.join(separator);
132
- };
133
- exports.html = html;
134
- /**
135
- * wrap text with <b> and <i> tags
136
- * @param node
137
- * @param strOrOmit
138
- */
139
- const font = (node, strOrOmit) => {
140
- const { font: { bold, italic } } = node, str = strOrOmit ?? '', i = str.indexOf('\n');
141
- const wrap = /** @ignore */ (s) => s === ''
142
- ? ''
143
- : (italic ? '<i>' : '') + (bold ? '<b>' : '') + (s ?? '') + (bold ? '</b>' : '') + (italic ? '</i>' : '');
144
- return i === -1 ? wrap(strOrOmit) : wrap(str.slice(0, i)) + str.slice(i);
145
- };
146
- exports.font = font;
package/dist/util/lint.js DELETED
@@ -1,32 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateForSelf = exports.generateForChild = void 0;
4
- const rect_1 = require("../lib/rect");
5
- const index_1 = require("../index");
6
- /**
7
- * 生成lint函数
8
- * @param func lint函数
9
- */
10
- const factory = (func) => (token, rect, rule, msg, severity = 'error') => {
11
- const { start } = rect, { top, left } = rect instanceof rect_1.BoundingRect ? rect : new rect_1.BoundingRect(token, start), { offsetHeight, offsetWidth } = token, { startIndex, startLine, startCol } = func(token, start, top, left);
12
- return {
13
- rule,
14
- message: index_1.default.msg(msg),
15
- severity,
16
- startIndex,
17
- endIndex: startIndex + token.toString().length,
18
- startLine,
19
- endLine: startLine + offsetHeight - 1,
20
- startCol,
21
- endCol: offsetHeight === 1 ? startCol + offsetWidth : offsetWidth,
22
- };
23
- };
24
- exports.generateForChild = factory((child, start, line, col) => {
25
- const index = child.getRelativeIndex(), { top, left } = child.parentNode.posFromIndex(index);
26
- return {
27
- startIndex: start + index,
28
- startLine: line + top,
29
- startCol: top ? left : col + left,
30
- };
31
- });
32
- exports.generateForSelf = factory((_, startIndex, startLine, startCol) => ({ startIndex, startLine, startCol }));
@@ -1,107 +0,0 @@
1
- "use strict";
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.text = exports.rawurldecode = exports.escapeRegExp = exports.removeComment = exports.tidy = exports.extUrlChar = exports.extUrlCharFirst = void 0;
4
- const commonExtUrlChar = String.raw `[^[\]<>"\0-\x1F\x7F\p{Zs}\uFFFD]`;
5
- exports.extUrlCharFirst = String.raw `(?:\[[\da-f:.]+\]|${commonExtUrlChar})`;
6
- exports.extUrlChar = String.raw `(?:${commonExtUrlChar}|\0\d+[cn!~]\x7F)*`;
7
- /**
8
- * 生成正则替换函数
9
- * @param regex 正则表达式
10
- * @param replace 替换字符串或函数
11
- */
12
- const factory = (regex, replace) => (str) => str.replace(regex, replace);
13
- /** 清理解析专用的不可见字符 */
14
- exports.tidy = factory(/[\0\x7F]|\r$/gmu, '');
15
- /** remove half-parsed comment-like tokens */
16
- exports.removeComment = factory(/\0\d+[cn]\x7F/gu, '');
17
- /** escape special chars for RegExp constructor */
18
- exports.escapeRegExp = factory(/[\\{}()|.?*+^$[\]]/gu, String.raw `\$&`);
19
- /**
20
- * PHP的`rawurldecode`函数的JavaScript实现
21
- * @param str 要解码的字符串
22
- */
23
- const rawurldecode = (str) => decodeURIComponent(str.replace(/%(?![\da-f]{2})/giu, '%25'));
24
- exports.rawurldecode = rawurldecode;
25
- /**
26
- * extract effective wikitext
27
- * @param childNodes a Token's contents
28
- * @param separator delimiter between nodes
29
- */
30
- const text = (childNodes, separator = '') => childNodes.map(child => typeof child === 'string' ? child : child.text()).join(separator);
31
- exports.text = text;
32
- const names = { lt: '<', gt: '>', lbrack: '[', rbrack: ']', lbrace: '{', rbrace: '}', nbsp: ' ', amp: '&', quot: '"' };
33
- /** decode HTML entities */
34
- exports.decodeHtml = factory(/&(?:#(\d+|[Xx][\da-fA-F]+)|([lLgG][tT]|[lr]brac[ke]|nbsp|amp|AMP|quot|QUOT));/gu, (_, code, name) => code
35
- ? String.fromCodePoint(Number((/^x/iu.test(code) ? '0' : '') + code))
36
- : names[name.toLowerCase()]);
37
- /** decode numbered HTML entities */
38
- exports.decodeNumber = factory(/&#(\d+|x[\da-f]+);/giu, (_, code) => String.fromCodePoint(Number((/^x/iu.test(code) ? '0' : '') + code)));
39
- /** escape newlines */
40
- exports.noWrap = factory(/\n/gu, String.raw `\n`);
41
- const entities = { '&': 'amp', '<': 'lt', '>': 'gt', '"': 'quot', '\n': '#10' };
42
- /**
43
- * replace by HTML entities
44
- * @param re regex
45
- */
46
- const replaceEntities = (re) => factory(re, p => `&${entities[p]};`);
47
- /** escape HTML entities */
48
- exports.escape = replaceEntities(/[&<>]/gu);
49
- /**
50
- * 以HTML格式打印
51
- * @param childNodes 子节点
52
- * @param opt 选项
53
- */
54
- const print = (childNodes, opt = {}) => {
55
- const { pre = '', post = '', sep = '' } = opt;
56
- return pre + childNodes.map(child => child.print()).join(sep) + post;
57
- };
58
- exports.print = print;
59
- /* NOT FOR BROWSER */
60
- /** encode URI */
61
- exports.encode = factory(/[<>[\]#|=]+/gu, encodeURIComponent);
62
- /**
63
- * convert newline in text nodes to single whitespace
64
- * @param token 父节点
65
- */
66
- const normalizeSpace = (token) => {
67
- if (token) {
68
- for (const child of token.childNodes) {
69
- if (child.type === 'text') {
70
- child.replaceData(child.data.replace(/\n+/gu, ' '));
71
- }
72
- }
73
- }
74
- };
75
- exports.normalizeSpace = normalizeSpace;
76
- /** escape HTML entities */
77
- exports.sanitize = replaceEntities(/[<>]|&(?=amp(?!;))/giu);
78
- /** escape HTML entities in attributes */
79
- exports.sanitizeAttr = replaceEntities(/[<>"]/gu);
80
- /** escape HTML entities in heading id */
81
- exports.sanitizeId = replaceEntities(/["&]/gu);
82
- /**
83
- * sanitize selected HTML attributes
84
- * @param str attribute value
85
- */
86
- const sanitizeAlt = (str) => str?.replace(/<\/?[a-z].*?>/gu, '').trim().replace(/\s+/gu, ' ').replaceAll('"', '&quot;');
87
- exports.sanitizeAlt = sanitizeAlt;
88
- /** escape newline */
89
- exports.newline = factory(/\n/gu, '&#10;');
90
- /**
91
- * remove lines that only contain comments
92
- * @param str
93
- * @param standalone whether for a standalone document
94
- */
95
- const removeCommentLine = (str, standalone) => {
96
- const lines = str.split('\n'), { length } = lines;
97
- if (!standalone && length < 3) {
98
- return (0, exports.removeComment)(str);
99
- }
100
- const offset = standalone ? 0 : 1, end = length - offset;
101
- return (0, exports.removeComment)([
102
- ...lines.slice(0, offset),
103
- ...lines.slice(offset, end).filter(line => !/^(?!\s*$)(?:\s|\0\d+c\x7F)*$/u.test(line)),
104
- ...lines.slice(end),
105
- ].join('\n'));
106
- };
107
- exports.removeCommentLine = removeCommentLine;
package/errors/README DELETED
@@ -1,3 +0,0 @@
1
- 这里记录解析失败时处于半解析状态的维基文本以及错误信息。
2
-
3
- When parsing fails, the half-parsed wikitext and the error message are recorded here.
package/printed/README DELETED
@@ -1,3 +0,0 @@
1
- 这里存放以 JSON 格式打印的 AST。
2
-
3
- AST as JSON files are saved here.