wikiparser-node 1.11.0 → 1.11.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 (172) hide show
  1. package/bundle/bundle.min.js +38 -0
  2. package/config/enwiki.json +1 -814
  3. package/config/llwiki.json +1 -35
  4. package/config/moegirl.json +1 -44
  5. package/config/zhwiki.json +1 -466
  6. package/extensions/dist/base.js +64 -0
  7. package/extensions/dist/editor.js +159 -0
  8. package/extensions/dist/highlight.js +56 -0
  9. package/extensions/dist/lint.js +72 -0
  10. package/extensions/editor.css +64 -0
  11. package/extensions/ui.css +144 -0
  12. package/package.json +28 -35
  13. package/config/.schema.json +0 -186
  14. package/dist/addon/table.js +0 -486
  15. package/dist/addon/token.js +0 -304
  16. package/dist/addon/transclude.js +0 -184
  17. package/dist/base.d.ts +0 -81
  18. package/dist/base.js +0 -39
  19. package/dist/index.d.ts +0 -33
  20. package/dist/index.js +0 -235
  21. package/dist/internal.d.ts +0 -46
  22. package/dist/lib/element.d.ts +0 -125
  23. package/dist/lib/element.js +0 -375
  24. package/dist/lib/node.d.ts +0 -173
  25. package/dist/lib/node.js +0 -478
  26. package/dist/lib/range.d.ts +0 -105
  27. package/dist/lib/range.js +0 -406
  28. package/dist/lib/ranges.d.ts +0 -28
  29. package/dist/lib/ranges.js +0 -126
  30. package/dist/lib/rect.d.ts +0 -18
  31. package/dist/lib/rect.js +0 -34
  32. package/dist/lib/text.d.ts +0 -58
  33. package/dist/lib/text.js +0 -400
  34. package/dist/lib/title.d.ts +0 -42
  35. package/dist/lib/title.js +0 -208
  36. package/dist/mixin/attributesParent.d.ts +0 -49
  37. package/dist/mixin/attributesParent.js +0 -79
  38. package/dist/mixin/fixed.d.ts +0 -5
  39. package/dist/mixin/fixed.js +0 -32
  40. package/dist/mixin/flagsParent.d.ts +0 -43
  41. package/dist/mixin/flagsParent.js +0 -64
  42. package/dist/mixin/hidden.d.ts +0 -7
  43. package/dist/mixin/hidden.js +0 -37
  44. package/dist/mixin/magicLinkParent.d.ts +0 -19
  45. package/dist/mixin/magicLinkParent.js +0 -43
  46. package/dist/mixin/singleLine.d.ts +0 -5
  47. package/dist/mixin/singleLine.js +0 -25
  48. package/dist/mixin/sol.d.ts +0 -6
  49. package/dist/mixin/sol.js +0 -45
  50. package/dist/mixin/syntax.d.ts +0 -8
  51. package/dist/mixin/syntax.js +0 -46
  52. package/dist/parser/braces.js +0 -150
  53. package/dist/parser/commentAndExt.js +0 -79
  54. package/dist/parser/converter.js +0 -39
  55. package/dist/parser/externalLinks.js +0 -37
  56. package/dist/parser/hrAndDoubleUnderscore.js +0 -42
  57. package/dist/parser/html.js +0 -38
  58. package/dist/parser/links.js +0 -101
  59. package/dist/parser/list.js +0 -114
  60. package/dist/parser/magicLinks.js +0 -52
  61. package/dist/parser/quotes.js +0 -67
  62. package/dist/parser/redirect.js +0 -26
  63. package/dist/parser/selector.js +0 -394
  64. package/dist/parser/table.js +0 -123
  65. package/dist/src/arg.d.ts +0 -51
  66. package/dist/src/arg.js +0 -214
  67. package/dist/src/atom.d.ts +0 -14
  68. package/dist/src/atom.js +0 -52
  69. package/dist/src/attribute.d.ts +0 -64
  70. package/dist/src/attribute.js +0 -480
  71. package/dist/src/attributes.d.ts +0 -101
  72. package/dist/src/attributes.js +0 -381
  73. package/dist/src/converter.d.ts +0 -28
  74. package/dist/src/converter.js +0 -148
  75. package/dist/src/converterFlags.d.ts +0 -80
  76. package/dist/src/converterFlags.js +0 -239
  77. package/dist/src/converterRule.d.ts +0 -71
  78. package/dist/src/converterRule.js +0 -216
  79. package/dist/src/extLink.d.ts +0 -36
  80. package/dist/src/extLink.js +0 -218
  81. package/dist/src/gallery.d.ts +0 -47
  82. package/dist/src/gallery.js +0 -143
  83. package/dist/src/heading.d.ts +0 -40
  84. package/dist/src/heading.js +0 -192
  85. package/dist/src/hidden.d.ts +0 -9
  86. package/dist/src/hidden.js +0 -80
  87. package/dist/src/html.d.ts +0 -61
  88. package/dist/src/html.js +0 -343
  89. package/dist/src/imageParameter.d.ts +0 -60
  90. package/dist/src/imageParameter.js +0 -260
  91. package/dist/src/imagemap.d.ts +0 -47
  92. package/dist/src/imagemap.js +0 -146
  93. package/dist/src/imagemapLink.d.ts +0 -31
  94. package/dist/src/imagemapLink.js +0 -97
  95. package/dist/src/index.d.ts +0 -136
  96. package/dist/src/index.js +0 -834
  97. package/dist/src/link/base.d.ts +0 -52
  98. package/dist/src/link/base.js +0 -256
  99. package/dist/src/link/category.d.ts +0 -22
  100. package/dist/src/link/category.js +0 -34
  101. package/dist/src/link/file.d.ts +0 -102
  102. package/dist/src/link/file.js +0 -333
  103. package/dist/src/link/galleryImage.d.ts +0 -29
  104. package/dist/src/link/galleryImage.js +0 -132
  105. package/dist/src/link/index.d.ts +0 -39
  106. package/dist/src/link/index.js +0 -98
  107. package/dist/src/link/redirectTarget.d.ts +0 -27
  108. package/dist/src/link/redirectTarget.js +0 -69
  109. package/dist/src/magicLink.d.ts +0 -58
  110. package/dist/src/magicLink.js +0 -256
  111. package/dist/src/nested.d.ts +0 -40
  112. package/dist/src/nested.js +0 -106
  113. package/dist/src/nowiki/base.d.ts +0 -28
  114. package/dist/src/nowiki/base.js +0 -89
  115. package/dist/src/nowiki/comment.d.ts +0 -14
  116. package/dist/src/nowiki/comment.js +0 -121
  117. package/dist/src/nowiki/dd.d.ts +0 -8
  118. package/dist/src/nowiki/dd.js +0 -72
  119. package/dist/src/nowiki/doubleUnderscore.d.ts +0 -15
  120. package/dist/src/nowiki/doubleUnderscore.js +0 -97
  121. package/dist/src/nowiki/hr.d.ts +0 -5
  122. package/dist/src/nowiki/hr.js +0 -70
  123. package/dist/src/nowiki/index.d.ts +0 -14
  124. package/dist/src/nowiki/index.js +0 -28
  125. package/dist/src/nowiki/list.d.ts +0 -5
  126. package/dist/src/nowiki/list.js +0 -65
  127. package/dist/src/nowiki/listBase.d.ts +0 -23
  128. package/dist/src/nowiki/listBase.js +0 -99
  129. package/dist/src/nowiki/noinclude.d.ts +0 -6
  130. package/dist/src/nowiki/noinclude.js +0 -75
  131. package/dist/src/nowiki/quote.d.ts +0 -14
  132. package/dist/src/nowiki/quote.js +0 -140
  133. package/dist/src/onlyinclude.d.ts +0 -13
  134. package/dist/src/onlyinclude.js +0 -58
  135. package/dist/src/paramTag/index.d.ts +0 -28
  136. package/dist/src/paramTag/index.js +0 -78
  137. package/dist/src/paramTag/inputbox.d.ts +0 -8
  138. package/dist/src/paramTag/inputbox.js +0 -22
  139. package/dist/src/parameter.d.ts +0 -60
  140. package/dist/src/parameter.js +0 -264
  141. package/dist/src/pre.d.ts +0 -28
  142. package/dist/src/pre.js +0 -60
  143. package/dist/src/redirect.d.ts +0 -30
  144. package/dist/src/redirect.js +0 -126
  145. package/dist/src/syntax.d.ts +0 -17
  146. package/dist/src/syntax.js +0 -87
  147. package/dist/src/table/base.d.ts +0 -28
  148. package/dist/src/table/base.js +0 -81
  149. package/dist/src/table/index.d.ts +0 -230
  150. package/dist/src/table/index.js +0 -506
  151. package/dist/src/table/td.d.ts +0 -72
  152. package/dist/src/table/td.js +0 -370
  153. package/dist/src/table/tr.d.ts +0 -30
  154. package/dist/src/table/tr.js +0 -59
  155. package/dist/src/table/trBase.d.ts +0 -49
  156. package/dist/src/table/trBase.js +0 -164
  157. package/dist/src/tagPair/ext.d.ts +0 -29
  158. package/dist/src/tagPair/ext.js +0 -220
  159. package/dist/src/tagPair/include.d.ts +0 -33
  160. package/dist/src/tagPair/include.js +0 -130
  161. package/dist/src/tagPair/index.d.ts +0 -23
  162. package/dist/src/tagPair/index.js +0 -128
  163. package/dist/src/transclude.d.ts +0 -159
  164. package/dist/src/transclude.js +0 -587
  165. package/dist/util/constants.js +0 -25
  166. package/dist/util/debug.js +0 -95
  167. package/dist/util/diff.js +0 -83
  168. package/dist/util/html.js +0 -143
  169. package/dist/util/lint.js +0 -32
  170. package/dist/util/string.js +0 -87
  171. package/errors/README +0 -3
  172. 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,143 +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
- */
84
- const html = (childNodes, separator = '', nowrap) => {
85
- let lastPrefix = '';
86
- const results = [], state = { dt: [] };
87
- for (let j = 0; j < childNodes.length; j++) {
88
- const child = childNodes[j];
89
- let result = child.toHtmlInternal(nowrap);
90
- if (child.is('list-range')) {
91
- result = result.trim();
92
- const { previousSibling: { firstChild: { data } } } = child, prefix = data.trim(), prefix2 = prefix.replaceAll(';', ':'), commonPrefixLength = (0, exports.getCommon)(prefix2, lastPrefix);
93
- let pre = closeList(lastPrefix.slice(commonPrefixLength), state);
94
- if (prefix.length === commonPrefixLength) {
95
- pre += nextItem(prefix.slice(-1), state);
96
- }
97
- else {
98
- if (state.dt[0] && prefix[commonPrefixLength - 1] === ':') {
99
- pre += nextItem(':', state);
100
- }
101
- if (lastPrefix) {
102
- pre += '\n';
103
- }
104
- pre += openList(prefix.slice(commonPrefixLength), state);
105
- }
106
- result = pre + result;
107
- let { nextSibling } = child;
108
- while (nextSibling?.type === 'dd') {
109
- const next = nextSibling.nextSibling;
110
- for (let i = 0; i < nextSibling.indent; i++) {
111
- result += nextItem(':', state);
112
- }
113
- result += next.toHtmlInternal(nowrap).trim();
114
- ({ nextSibling } = next);
115
- j += 2;
116
- }
117
- if (nextSibling?.type === 'text'
118
- && nextSibling.data === '\n'
119
- && nextSibling.nextVisibleSibling?.type === 'list') {
120
- j += 2;
121
- lastPrefix = prefix2;
122
- }
123
- else {
124
- lastPrefix = '';
125
- result += closeList(prefix2, state);
126
- }
127
- }
128
- results.push(result);
129
- }
130
- return results.join(separator);
131
- };
132
- exports.html = html;
133
- /**
134
- * wrap text with <b> and <i> tags
135
- * @param node
136
- * @param str
137
- */
138
- const font = (node, str) => {
139
- const { font: { bold, italic } } = node, i = str.indexOf('\n');
140
- const wrap = /** @ignore */ (s) => s && (bold ? '<b>' : '') + (italic ? '<i>' : '') + s + (italic ? '</i>' : '') + (bold ? '</b>' : '');
141
- return i === -1 ? wrap(str) : wrap(str.slice(0, i)) + str.slice(i);
142
- };
143
- 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,87 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.newline = exports.sanitizeAlt = exports.sanitizeAttr = exports.sanitize = exports.normalizeSpace = exports.encode = exports.print = exports.escape = exports.noWrap = exports.decodeHtml = exports.text = exports.trimPHP = 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+[c!~]\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+c\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
- /** PHP的`trim`函数的JavaScript实现 */
26
- exports.trimPHP = factory(/^[ \t\n\0\v]+|([^ \t\n\0\v])[ \t\n\0\v]+$/gu, '$1');
27
- /**
28
- * extract effective wikitext
29
- * @param childNodes a Token's contents
30
- * @param separator delimiter between nodes
31
- */
32
- const text = (childNodes, separator = '') => childNodes.map(child => typeof child === 'string' ? child : child.text()).join(separator);
33
- exports.text = text;
34
- const names = { lt: '<', gt: '>', lbrack: '[', rbrack: ']', lbrace: '{', rbrace: '}', nbsp: ' ' };
35
- /** decode HTML entities */
36
- exports.decodeHtml = factory(/&(?:#(\d+|x[\da-fA-F]+)|([lLgG][tT]|[lr]brac[ke]|nbsp));/gu, (_, code, name) => code
37
- ? String.fromCodePoint(Number((/^x/iu.test(code) ? '0' : '') + code))
38
- : names[name.toLowerCase()]);
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(/[<>]/gu);
78
- /** escape HTML entities in attributes */
79
- exports.sanitizeAttr = replaceEntities(/[<>"\n]/gu);
80
- /**
81
- * sanitize selected HTML attributes
82
- * @param str attribute value
83
- */
84
- const sanitizeAlt = (str) => str?.replace(/<\/?[a-z].*?>/gu, '').trim().replace(/\s+/gu, ' ').replaceAll('"', '&quot;');
85
- exports.sanitizeAlt = sanitizeAlt;
86
- /** escape newline */
87
- exports.newline = factory(/\n/gu, '&#10;');
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.