wikiparser-node 0.11.0 → 1.0.0-beta.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 (251) hide show
  1. package/dist/index.d.ts +59 -113
  2. package/dist/index.js +307 -0
  3. package/dist/lib/element.d.ts +122 -108
  4. package/dist/lib/element.js +656 -0
  5. package/dist/lib/node.d.ts +115 -221
  6. package/dist/lib/node.js +473 -0
  7. package/dist/lib/ranges.d.ts +27 -26
  8. package/dist/lib/ranges.js +130 -0
  9. package/dist/lib/text.d.ts +36 -28
  10. package/dist/lib/text.js +215 -0
  11. package/dist/lib/title.d.ts +25 -12
  12. package/dist/lib/title.js +100 -0
  13. package/dist/mixin/attributesParent.js +90 -0
  14. package/dist/mixin/fixed.js +29 -0
  15. package/dist/mixin/hidden.js +19 -0
  16. package/dist/mixin/singleLine.js +23 -0
  17. package/dist/mixin/sol.js +41 -0
  18. package/dist/parser/brackets.js +117 -0
  19. package/dist/parser/commentAndExt.js +48 -0
  20. package/dist/parser/converter.js +31 -0
  21. package/dist/parser/externalLinks.js +22 -0
  22. package/dist/parser/hrAndDoubleUnderscore.js +33 -0
  23. package/dist/parser/html.js +29 -0
  24. package/dist/parser/links.js +86 -0
  25. package/dist/parser/list.js +51 -0
  26. package/dist/parser/magicLinks.js +32 -0
  27. package/dist/parser/quotes.js +57 -0
  28. package/dist/parser/selector.js +158 -0
  29. package/dist/parser/table.js +108 -0
  30. package/dist/src/arg.d.ts +47 -23
  31. package/dist/src/arg.js +196 -0
  32. package/dist/src/atom.d.ts +12 -0
  33. package/dist/src/atom.js +22 -0
  34. package/dist/src/attribute.d.ts +74 -33
  35. package/dist/src/attribute.js +433 -0
  36. package/dist/src/attributes.d.ts +61 -55
  37. package/dist/src/attributes.js +371 -0
  38. package/dist/src/converter.d.ts +45 -71
  39. package/dist/src/converter.js +135 -0
  40. package/dist/src/converterFlags.d.ts +64 -39
  41. package/dist/src/converterFlags.js +235 -0
  42. package/dist/src/converterRule.d.ts +49 -27
  43. package/dist/src/converterRule.js +255 -0
  44. package/dist/src/extLink.d.ts +41 -38
  45. package/dist/src/extLink.js +154 -0
  46. package/dist/src/gallery.d.ts +59 -18
  47. package/dist/src/gallery.js +132 -0
  48. package/dist/src/heading.d.ts +60 -22
  49. package/dist/src/heading.js +135 -0
  50. package/dist/src/hidden.d.ts +20 -0
  51. package/dist/src/hidden.js +24 -0
  52. package/dist/src/html.d.ts +83 -29
  53. package/dist/src/html.js +242 -0
  54. package/dist/src/imageParameter.d.ts +59 -40
  55. package/dist/src/imageParameter.js +251 -0
  56. package/dist/src/imagemap.d.ts +65 -21
  57. package/dist/src/imagemap.js +164 -0
  58. package/dist/src/imagemapLink.d.ts +46 -14
  59. package/dist/src/imagemapLink.js +38 -0
  60. package/dist/src/index.d.ts +71 -105
  61. package/dist/src/index.js +826 -0
  62. package/dist/src/link/base.d.ts +71 -0
  63. package/dist/src/link/base.js +225 -0
  64. package/dist/src/link/category.d.ts +10 -11
  65. package/dist/src/link/category.js +26 -0
  66. package/dist/src/link/file.d.ts +61 -39
  67. package/dist/src/link/file.js +242 -0
  68. package/dist/src/link/galleryImage.d.ts +34 -12
  69. package/dist/src/link/galleryImage.js +98 -0
  70. package/dist/src/link/index.d.ts +25 -63
  71. package/dist/src/link/index.js +136 -0
  72. package/dist/src/magicLink.d.ts +22 -15
  73. package/dist/src/magicLink.js +126 -0
  74. package/dist/src/nested.d.ts +47 -0
  75. package/dist/src/nested.js +84 -0
  76. package/dist/src/nowiki/base.d.ts +39 -0
  77. package/dist/src/nowiki/base.js +29 -0
  78. package/dist/src/nowiki/comment.d.ts +31 -20
  79. package/dist/src/nowiki/comment.js +61 -0
  80. package/dist/src/nowiki/dd.d.ts +17 -11
  81. package/dist/src/nowiki/dd.js +50 -0
  82. package/dist/src/nowiki/doubleUnderscore.d.ts +28 -13
  83. package/dist/src/nowiki/doubleUnderscore.js +45 -0
  84. package/dist/src/nowiki/hr.d.ts +28 -10
  85. package/dist/src/nowiki/hr.js +33 -0
  86. package/dist/src/nowiki/index.d.ts +17 -23
  87. package/dist/src/nowiki/index.js +21 -0
  88. package/dist/src/nowiki/list.d.ts +15 -7
  89. package/dist/src/nowiki/list.js +11 -0
  90. package/dist/src/nowiki/noinclude.d.ts +20 -7
  91. package/dist/src/nowiki/noinclude.js +22 -0
  92. package/dist/src/nowiki/quote.d.ts +25 -10
  93. package/dist/src/nowiki/quote.js +55 -0
  94. package/dist/src/onlyinclude.d.ts +28 -12
  95. package/dist/src/onlyinclude.js +64 -0
  96. package/dist/src/paramTag/index.d.ts +40 -17
  97. package/dist/src/paramTag/index.js +76 -0
  98. package/dist/src/paramTag/inputbox.d.ts +8 -7
  99. package/dist/src/paramTag/inputbox.js +19 -0
  100. package/dist/src/parameter.d.ts +62 -41
  101. package/dist/src/parameter.js +201 -0
  102. package/dist/src/pre.d.ts +32 -0
  103. package/dist/src/pre.js +39 -0
  104. package/dist/src/syntax.d.ts +17 -14
  105. package/dist/src/syntax.js +65 -0
  106. package/dist/src/table/base.d.ts +55 -0
  107. package/dist/src/table/base.js +77 -0
  108. package/dist/src/table/index.d.ts +123 -156
  109. package/dist/src/table/index.js +811 -0
  110. package/dist/src/table/td.d.ts +90 -67
  111. package/dist/src/table/td.js +276 -0
  112. package/dist/src/table/tr.d.ts +30 -85
  113. package/dist/src/table/tr.js +48 -0
  114. package/dist/src/table/trBase.d.ts +72 -0
  115. package/dist/src/table/trBase.js +153 -0
  116. package/dist/src/tagPair/ext.d.ts +47 -11
  117. package/dist/src/tagPair/ext.js +127 -0
  118. package/dist/src/tagPair/include.d.ts +32 -13
  119. package/dist/src/tagPair/include.js +40 -0
  120. package/dist/src/tagPair/index.d.ts +44 -29
  121. package/dist/src/tagPair/index.js +111 -0
  122. package/dist/src/transclude.d.ts +88 -85
  123. package/dist/src/transclude.js +739 -0
  124. package/dist/util/base.js +26 -0
  125. package/dist/util/debug.js +52 -0
  126. package/dist/util/diff.js +69 -0
  127. package/dist/util/lint.js +38 -0
  128. package/dist/util/string.js +103 -0
  129. package/errors/README +1 -0
  130. package/i18n/zh-hans.json +1 -0
  131. package/i18n/zh-hant.json +1 -0
  132. package/package.json +11 -14
  133. package/printed/README +1 -0
  134. package/dist/mixin/attributeParent.d.ts +0 -9
  135. package/dist/mixin/fixedToken.d.ts +0 -8
  136. package/dist/mixin/hidden.d.ts +0 -8
  137. package/dist/mixin/singleLine.d.ts +0 -8
  138. package/dist/mixin/sol.d.ts +0 -8
  139. package/dist/parser/brackets.d.ts +0 -12
  140. package/dist/parser/commentAndExt.d.ts +0 -8
  141. package/dist/parser/converter.d.ts +0 -7
  142. package/dist/parser/externalLinks.d.ts +0 -7
  143. package/dist/parser/hrAndDoubleUnderscore.d.ts +0 -11
  144. package/dist/parser/html.d.ts +0 -7
  145. package/dist/parser/links.d.ts +0 -7
  146. package/dist/parser/list.d.ts +0 -7
  147. package/dist/parser/magicLinks.d.ts +0 -7
  148. package/dist/parser/quotes.d.ts +0 -7
  149. package/dist/parser/selector.d.ts +0 -12
  150. package/dist/parser/table.d.ts +0 -11
  151. package/dist/src/atom/hidden.d.ts +0 -5
  152. package/dist/src/atom/index.d.ts +0 -15
  153. package/dist/src/charinsert.d.ts +0 -32
  154. package/dist/src/hasNowiki/index.d.ts +0 -14
  155. package/dist/src/hasNowiki/pre.d.ts +0 -13
  156. package/dist/src/nested/choose.d.ts +0 -13
  157. package/dist/src/nested/combobox.d.ts +0 -13
  158. package/dist/src/nested/index.d.ts +0 -18
  159. package/dist/src/nested/references.d.ts +0 -13
  160. package/dist/tool/index.d.ts +0 -420
  161. package/dist/util/base.d.ts +0 -10
  162. package/dist/util/debug.d.ts +0 -20
  163. package/dist/util/diff.d.ts +0 -8
  164. package/dist/util/lint.d.ts +0 -28
  165. package/dist/util/string.d.ts +0 -55
  166. package/index.js +0 -333
  167. package/lib/element.js +0 -618
  168. package/lib/node.js +0 -730
  169. package/lib/ranges.js +0 -130
  170. package/lib/text.js +0 -265
  171. package/lib/title.js +0 -83
  172. package/mixin/attributeParent.js +0 -117
  173. package/mixin/fixedToken.js +0 -40
  174. package/mixin/hidden.js +0 -21
  175. package/mixin/singleLine.js +0 -31
  176. package/mixin/sol.js +0 -54
  177. package/parser/brackets.js +0 -128
  178. package/parser/commentAndExt.js +0 -62
  179. package/parser/converter.js +0 -46
  180. package/parser/externalLinks.js +0 -33
  181. package/parser/hrAndDoubleUnderscore.js +0 -49
  182. package/parser/html.js +0 -42
  183. package/parser/links.js +0 -94
  184. package/parser/list.js +0 -59
  185. package/parser/magicLinks.js +0 -41
  186. package/parser/quotes.js +0 -64
  187. package/parser/selector.js +0 -180
  188. package/parser/table.js +0 -114
  189. package/src/arg.js +0 -207
  190. package/src/atom/hidden.js +0 -13
  191. package/src/atom/index.js +0 -43
  192. package/src/attribute.js +0 -472
  193. package/src/attributes.js +0 -453
  194. package/src/charinsert.js +0 -97
  195. package/src/converter.js +0 -176
  196. package/src/converterFlags.js +0 -284
  197. package/src/converterRule.js +0 -256
  198. package/src/extLink.js +0 -180
  199. package/src/gallery.js +0 -149
  200. package/src/hasNowiki/index.js +0 -44
  201. package/src/hasNowiki/pre.js +0 -40
  202. package/src/heading.js +0 -134
  203. package/src/html.js +0 -254
  204. package/src/imageParameter.js +0 -303
  205. package/src/imagemap.js +0 -199
  206. package/src/imagemapLink.js +0 -41
  207. package/src/index.js +0 -938
  208. package/src/link/category.js +0 -44
  209. package/src/link/file.js +0 -287
  210. package/src/link/galleryImage.js +0 -120
  211. package/src/link/index.js +0 -388
  212. package/src/magicLink.js +0 -151
  213. package/src/nested/choose.js +0 -24
  214. package/src/nested/combobox.js +0 -23
  215. package/src/nested/index.js +0 -96
  216. package/src/nested/references.js +0 -23
  217. package/src/nowiki/comment.js +0 -71
  218. package/src/nowiki/dd.js +0 -59
  219. package/src/nowiki/doubleUnderscore.js +0 -56
  220. package/src/nowiki/hr.js +0 -41
  221. package/src/nowiki/index.js +0 -56
  222. package/src/nowiki/list.js +0 -16
  223. package/src/nowiki/noinclude.js +0 -28
  224. package/src/nowiki/quote.js +0 -69
  225. package/src/onlyinclude.js +0 -64
  226. package/src/paramTag/index.js +0 -89
  227. package/src/paramTag/inputbox.js +0 -35
  228. package/src/parameter.js +0 -239
  229. package/src/syntax.js +0 -91
  230. package/src/table/index.js +0 -985
  231. package/src/table/td.js +0 -343
  232. package/src/table/tr.js +0 -319
  233. package/src/tagPair/ext.js +0 -146
  234. package/src/tagPair/include.js +0 -50
  235. package/src/tagPair/index.js +0 -131
  236. package/src/transclude.js +0 -843
  237. package/tool/index.js +0 -1209
  238. package/typings/api.d.ts +0 -9
  239. package/typings/array.d.ts +0 -29
  240. package/typings/event.d.ts +0 -22
  241. package/typings/index.d.ts +0 -118
  242. package/typings/node.d.ts +0 -35
  243. package/typings/parser.d.ts +0 -12
  244. package/typings/table.d.ts +0 -10
  245. package/typings/token.d.ts +0 -31
  246. package/typings/tool.d.ts +0 -6
  247. package/util/base.js +0 -17
  248. package/util/debug.js +0 -73
  249. package/util/diff.js +0 -76
  250. package/util/lint.js +0 -57
  251. package/util/string.js +0 -126
package/dist/index.d.ts CHANGED
@@ -1,114 +1,60 @@
1
- import AstElement = require("./lib/element.js")
2
- import AstNode = require("./lib/node.js")
3
- import Ranges = require("./lib/ranges.js")
4
- import AstText = require("./lib/text.js")
5
- import Title = require("./lib/title.js")
6
- import ArgToken = require("./src/arg.js")
7
- import HiddenToken = require("./src/atom/hidden.js")
8
- import AtomToken = require("./src/atom/index.js")
9
- import AttributeToken = require("./src/attribute.js")
10
- import AttributesToken = require("./src/attributes.js")
11
- import CharinsertToken = require("./src/charinsert.js")
12
- import ConverterToken = require("./src/converter.js")
13
- import ConverterFlagsToken = require("./src/converterFlags.js")
14
- import ConverterRuleToken = require("./src/converterRule.js")
15
- import ExtLinkToken = require("./src/extLink.js")
16
- import GalleryToken = require("./src/gallery.js")
17
- import HasNowikiToken = require("./src/hasNowiki/index.js")
18
- import PreToken = require("./src/hasNowiki/pre.js")
19
- import HeadingToken = require("./src/heading.js")
20
- import HtmlToken = require("./src/html.js")
21
- import ImageParameterToken = require("./src/imageParameter.js")
22
- import ImagemapToken = require("./src/imagemap.js")
23
- import ImagemapLinkToken = require("./src/imagemapLink.js")
24
- import Token = require("./src/index.js")
25
- import CategoryToken = require("./src/link/category.js")
26
- import FileToken = require("./src/link/file.js")
27
- import GalleryImageToken = require("./src/link/galleryImage.js")
28
- import LinkToken = require("./src/link/index.js")
29
- import MagicLinkToken = require("./src/magicLink.js")
30
- import ChooseToken = require("./src/nested/choose.js")
31
- import ComboboxToken = require("./src/nested/combobox.js")
32
- import NestedToken = require("./src/nested/index.js")
33
- import ReferencesToken = require("./src/nested/references.js")
34
- import CommentToken = require("./src/nowiki/comment.js")
35
- import DdToken = require("./src/nowiki/dd.js")
36
- import DoubleUnderscoreToken = require("./src/nowiki/doubleUnderscore.js")
37
- import HrToken = require("./src/nowiki/hr.js")
38
- import NowikiToken = require("./src/nowiki/index.js")
39
- import ListToken = require("./src/nowiki/list.js")
40
- import NoincludeToken = require("./src/nowiki/noinclude.js")
41
- import QuoteToken = require("./src/nowiki/quote.js")
42
- import OnlyincludeToken = require("./src/onlyinclude.js")
43
- import ParamTagToken = require("./src/paramTag/index.js")
44
- import InputboxToken = require("./src/paramTag/inputbox.js")
45
- import ParameterToken = require("./src/parameter.js")
46
- import SyntaxToken = require("./src/syntax.js")
47
- import TableToken = require("./src/table/index.js")
48
- import TdToken = require("./src/table/td.js")
49
- import TrToken = require("./src/table/tr.js")
50
- import ExtToken = require("./src/tagPair/ext.js")
51
- import IncludeToken = require("./src/tagPair/include.js")
52
- import TagPairToken = require("./src/tagPair/index.js")
53
- import TranscludeToken = require("./src/transclude.js")
54
-
55
- export = Parser;
56
- declare const Parser: import('./../typings');
57
-
1
+ declare interface Config {
2
+ ext: string[];
3
+ html: [string[], string[], string[]];
4
+ namespaces: Record<string, string>;
5
+ nsid: Record<string, number>;
6
+ parserFunction: [Record<string, string>, string[], string[], string[]];
7
+ doubleUnderscore: [string[], string[]];
8
+ protocol: string;
9
+ img: Record<string, string>;
10
+ variants: string[];
11
+ interwiki: string[];
12
+ excludes?: string[];
13
+ }
14
+ declare interface LintError {
15
+ message: string;
16
+ severity: 'error' | 'warning';
17
+ startIndex: number;
18
+ endIndex: number;
19
+ startLine: number;
20
+ startCol: number;
21
+ endLine: number;
22
+ endCol: number;
23
+ excerpt: string;
24
+ }
25
+ declare interface Parser {
26
+ /** @browser */
27
+ config: string | Config;
28
+ /** @browser */
29
+ i18n: string | Record<string, string> | undefined;
30
+ conversionTable: Map<string, string>;
31
+ redirects: Map<string, string>;
32
+ /**
33
+ * 规范化页面标题
34
+ * @browser
35
+ * @param title 标题(含或不含命名空间前缀)
36
+ * @param defaultNs 命名空间
37
+ * @param include 是否嵌入
38
+ * @param halfParsed 是否是半解析状态
39
+ * @param decode 是否需要解码
40
+ * @param selfLink 是否允许selfLink
41
+ */
42
+ normalizeTitle(title: string, defaultNs?: number, include?: boolean, config?: Config, halfParsed?: boolean, decode?: boolean, selfLink?: boolean): import('./lib/title');
43
+ /**
44
+ * 解析wikitext
45
+ * @browser
46
+ * @param include 是否嵌入
47
+ * @param maxStage 最大解析层级
48
+ */
49
+ parse(wikitext: string, include?: boolean, maxStage?: number, config?: Config): import('./src');
50
+ /**
51
+ * 是否是跨维基链接
52
+ * @param title 链接标题
53
+ */
54
+ isInterwiki(title: string, config?: Config): [string, string] | null;
55
+ }
56
+ declare const Parser: Parser;
58
57
  declare namespace Parser {
59
- export {
60
- AstElement,
61
- AstNode,
62
- Ranges,
63
- AstText,
64
- Title,
65
- ArgToken,
66
- HiddenToken,
67
- AtomToken,
68
- AttributeToken,
69
- AttributesToken,
70
- CharinsertToken,
71
- ConverterToken,
72
- ConverterFlagsToken,
73
- ConverterRuleToken,
74
- ExtLinkToken,
75
- GalleryToken,
76
- HasNowikiToken,
77
- PreToken,
78
- HeadingToken,
79
- HtmlToken,
80
- ImageParameterToken,
81
- ImagemapToken,
82
- ImagemapLinkToken,
83
- Token,
84
- CategoryToken,
85
- FileToken,
86
- GalleryImageToken,
87
- LinkToken,
88
- MagicLinkToken,
89
- ChooseToken,
90
- ComboboxToken,
91
- NestedToken,
92
- ReferencesToken,
93
- CommentToken,
94
- DdToken,
95
- DoubleUnderscoreToken,
96
- HrToken,
97
- NowikiToken,
98
- ListToken,
99
- NoincludeToken,
100
- QuoteToken,
101
- OnlyincludeToken,
102
- ParamTagToken,
103
- InputboxToken,
104
- ParameterToken,
105
- SyntaxToken,
106
- TableToken,
107
- TdToken,
108
- TrToken,
109
- ExtToken,
110
- IncludeToken,
111
- TagPairToken,
112
- TranscludeToken,
113
- }
114
- }
58
+ export type { Config, LintError, };
59
+ }
60
+ export = Parser;
package/dist/index.js ADDED
@@ -0,0 +1,307 @@
1
+ "use strict";
2
+ const fs = require("fs");
3
+ const path = require("path");
4
+ /**
5
+ * 从根路径require
6
+ * @param file 文件名
7
+ * @param dir 子路径
8
+ */
9
+ const rootRequire = (file, dir = '') => require(`${file.includes('/') ? '' : `../${dir}`}${file}`);
10
+ const Parser = {
11
+ config: 'default',
12
+ i18n: undefined,
13
+ conversionTable: new Map(),
14
+ redirects: new Map(),
15
+ MAX_STAGE: 11,
16
+ warning: true,
17
+ debugging: false,
18
+ running: false,
19
+ classes: {},
20
+ mixins: {},
21
+ parsers: {},
22
+ aliases: [
23
+ ['AstText'],
24
+ ['CommentToken', 'ExtToken', 'IncludeToken', 'NoincludeToken'],
25
+ ['ArgToken', 'TranscludeToken', 'HeadingToken'],
26
+ ['HtmlToken'],
27
+ ['TableToken'],
28
+ ['HrToken', 'DoubleUnderscoreToken'],
29
+ ['LinkToken', 'FileToken', 'CategoryToken'],
30
+ ['QuoteToken'],
31
+ ['ExtLinkToken'],
32
+ ['MagicLinkToken'],
33
+ ['ListToken', 'DdToken'],
34
+ ['ConverterToken'],
35
+ ],
36
+ typeAliases: {
37
+ text: ['string', 'str'],
38
+ plain: ['regular', 'normal'],
39
+ // comment and extension
40
+ onlyinclude: ['only-include'],
41
+ noinclude: ['no-include'],
42
+ include: ['includeonly', 'include-only'],
43
+ comment: undefined,
44
+ ext: ['extension'],
45
+ 'ext-attrs': ['extension-attrs', 'ext-attributes', 'extension-attributes'],
46
+ 'ext-attr-dirty': ['extension-attr-dirty', 'ext-attribute-dirty', 'extension-attribute-dirty'],
47
+ 'ext-attr': ['extension-attr', 'ext-attribute', 'extension-attribute'],
48
+ 'attr-key': ['attribute-key'],
49
+ 'attr-value': ['attribute-value', 'attr-val', 'attribute-val'],
50
+ 'ext-inner': ['extension-inner'],
51
+ // triple brackets
52
+ arg: ['argument'],
53
+ 'arg-name': ['argument-name'],
54
+ 'arg-default': ['argument-default'],
55
+ hidden: ['arg-redundant'],
56
+ // double brackets
57
+ 'magic-word': ['parser-function', 'parser-func'],
58
+ 'magic-word-name': ['parser-function-name', 'parser-func-name'],
59
+ 'invoke-function': ['invoke-func', 'lua-function', 'lua-func', 'module-function', 'module-func'],
60
+ 'invoke-module': ['lua-module'],
61
+ template: undefined,
62
+ 'template-name': undefined,
63
+ parameter: ['param'],
64
+ 'parameter-key': ['param-key'],
65
+ 'parameter-value': ['parameter-val', 'param-value', 'param-val'],
66
+ // heading
67
+ heading: ['header'],
68
+ 'heading-title': ['header-title'],
69
+ 'heading-trail': ['header-trail'],
70
+ // html
71
+ html: undefined,
72
+ 'html-attrs': ['html-attributes'],
73
+ 'html-attr-dirty': ['html-attribute-dirty'],
74
+ 'html-attr': ['html-attribute'],
75
+ // table
76
+ table: undefined,
77
+ tr: ['table-row'],
78
+ td: ['table-cell', 'table-data'],
79
+ 'table-syntax': undefined,
80
+ 'table-attrs': ['tr-attrs', 'td-attrs', 'table-attributes', 'tr-attributes', 'td-attributes'],
81
+ 'table-attr-dirty': ['tr-attr-dirty', 'td-attr-dirty', 'table-attribute-dirty', 'tr-attribute-dirty', 'td-attribute-dirty'],
82
+ 'table-attr': ['tr-attr', 'td-attr', 'table-attribute', 'tr-attribute', 'td-attribute'],
83
+ 'table-inter': undefined,
84
+ 'td-inner': ['table-cell-inner', 'table-data-inner'],
85
+ // hr and double-underscore
86
+ hr: ['horizontal'],
87
+ 'double-underscore': ['underscore', 'behavior-switch', 'behaviour-switch'],
88
+ // link
89
+ link: ['wikilink'],
90
+ 'link-target': ['wikilink-target'],
91
+ 'link-text': ['wikilink-text'],
92
+ category: ['category-link', 'cat', 'cat-link'],
93
+ file: ['file-link', 'image', 'image-link', 'img', 'img-link'],
94
+ 'gallery-image': ['gallery-file', 'gallery-img'],
95
+ 'imagemap-image': ['imagemap-file', 'imagemap-img', 'image-map-image', 'image-map-file', 'image-map-img'],
96
+ 'image-parameter': ['img-parameter', 'image-param', 'img-param'],
97
+ // quotes
98
+ quote: ['quotes', 'quot', 'apostrophe', 'apostrophes', 'apos'],
99
+ // external link
100
+ 'ext-link': ['external-link'],
101
+ 'ext-link-text': ['external-link-text'],
102
+ 'ext-link-url': ['external-link-url'],
103
+ // magic link
104
+ 'free-ext-link': ['free-external-link', 'magic-link'],
105
+ // list
106
+ list: ['ol', 'ordered-list', 'ul', 'unordered-list', 'dl', 'description-list'],
107
+ dd: ['indent', 'indentation'],
108
+ // converter
109
+ converter: ['convert', 'conversion'],
110
+ 'converter-flags': ['convert-flags', 'conversion-flags'],
111
+ 'converter-flag': ['convert-flag', 'conversion-flag'],
112
+ 'converter-rule': ['convert-rule', 'conversion-rule'],
113
+ 'converter-rule-noconvert': ['convert-rule-noconvert', 'conversion-rule-noconvert'],
114
+ 'converter-rule-variant': ['convert-rule-variant', 'conversion-rule-variant'],
115
+ 'converter-rule-to': ['convert-rule-to', 'conversion-rule-to'],
116
+ 'converter-rule-from': ['convert-rule-from', 'conversion-rule-from'],
117
+ // specific extensions
118
+ 'param-line': ['parameter-line'],
119
+ 'charinsert-line': undefined,
120
+ 'imagemap-link': ['image-map-link'],
121
+ },
122
+ promises: [Promise.resolve()],
123
+ /** @implements */
124
+ getConfig() {
125
+ if (typeof this.config === 'string') {
126
+ this.config = rootRequire(this.config, 'config/');
127
+ return this.getConfig();
128
+ }
129
+ return { ...this.config, excludes: [] };
130
+ },
131
+ /** @implements */
132
+ msg(msg, arg = '') {
133
+ if (typeof this.i18n === 'string') {
134
+ this.i18n = rootRequire(this.i18n, 'i18n/');
135
+ return this.msg(msg, arg);
136
+ }
137
+ return (this.i18n?.[msg] ?? msg).replace('$1', arg);
138
+ },
139
+ /** @implements */
140
+ normalizeTitle(title, defaultNs = 0, include = false, config = Parser.getConfig(), halfParsed = false, decode = false, selfLink = false) {
141
+ const Title = require('./lib/title');
142
+ if (halfParsed) {
143
+ return new Title(title, defaultNs, config, decode, selfLink);
144
+ }
145
+ const Token = require('./src');
146
+ const token = this.run(() => new Token(title, config).parseOnce(0, include).parseOnce()), titleObj = new Title(String(token.firstChild), defaultNs, config, decode, selfLink);
147
+ /**
148
+ * 重建部分属性值
149
+ * @param keys 属性键
150
+ */
151
+ const build = (keys) => {
152
+ for (const key of keys) {
153
+ if (titleObj[key]?.includes('\0')) {
154
+ titleObj[key] = token.buildFromStr(titleObj[key], 'text');
155
+ }
156
+ }
157
+ };
158
+ this.run(() => {
159
+ build(['main', 'fragment']);
160
+ });
161
+ titleObj.autoConvert(this.conversionTable);
162
+ titleObj.redirects = this.redirects;
163
+ return titleObj;
164
+ },
165
+ /** @implements */
166
+ parse(wikitext, include, maxStage = Parser.MAX_STAGE, config = Parser.getConfig()) {
167
+ if (typeof wikitext !== 'string') {
168
+ throw new TypeError('待解析的内容应为 String!');
169
+ }
170
+ const Token = require('./src');
171
+ let token;
172
+ this.run(() => {
173
+ token = new Token(wikitext, config);
174
+ try {
175
+ token.parse(maxStage, include);
176
+ }
177
+ catch (e) {
178
+ if (e instanceof Error) {
179
+ const file = path.join(__dirname, '..', 'errors', new Date().toISOString()), stage = token.getAttribute('stage');
180
+ fs.writeFileSync(file, stage === this.MAX_STAGE ? wikitext : String(token));
181
+ fs.writeFileSync(`${file}.err`, e.stack);
182
+ fs.writeFileSync(`${file}.json`, JSON.stringify({
183
+ stage, include: token.getAttribute('include'), config: this.config,
184
+ }, null, '\t'));
185
+ }
186
+ throw e;
187
+ }
188
+ });
189
+ if (this.debugging) {
190
+ let restored = String(token), process = '解析';
191
+ if (restored === wikitext) {
192
+ const entities = { lt: '<', gt: '>', amp: '&' };
193
+ restored = token.print().replace(/<[^<]+?>|&([lg]t|amp);/gu, (_, s) => s ? entities[s] : '');
194
+ process = '渲染HTML';
195
+ }
196
+ if (restored !== wikitext) {
197
+ const diff = require('./util/diff');
198
+ const { promises: { 0: cur, length } } = this;
199
+ this.promises.unshift((async () => {
200
+ await cur;
201
+ this.error(`${process}过程中不可逆地修改了原始文本!`);
202
+ return diff(wikitext, restored, length);
203
+ })());
204
+ }
205
+ }
206
+ return token;
207
+ },
208
+ /** @implements */
209
+ run(callback) {
210
+ const { running } = this;
211
+ this.running = true;
212
+ try {
213
+ const result = callback();
214
+ this.running = running;
215
+ return result;
216
+ }
217
+ catch (e) {
218
+ this.running = running;
219
+ throw e;
220
+ }
221
+ },
222
+ /** @implements */
223
+ warn(msg, ...args) {
224
+ if (this.warning) {
225
+ console.warn('\x1B[33m%s\x1B[0m', msg, ...args);
226
+ }
227
+ },
228
+ /** @implements */
229
+ debug(msg, ...args) {
230
+ if (this.debugging) {
231
+ console.debug('\x1B[34m%s\x1B[0m', msg, ...args);
232
+ }
233
+ },
234
+ /** @implements */
235
+ error(msg, ...args) {
236
+ console.error('\x1B[31m%s\x1B[0m', msg, ...args);
237
+ },
238
+ /** @implements */
239
+ info(msg, ...args) {
240
+ console.info('\x1B[32m%s\x1B[0m', msg, ...args);
241
+ },
242
+ /** @implements */
243
+ log(f) {
244
+ if (typeof f === 'function') {
245
+ console.log(String(f));
246
+ }
247
+ },
248
+ /** @implements */
249
+ clearCache() {
250
+ const entries = [
251
+ ...Object.entries(this.classes),
252
+ ...Object.entries(this.mixins),
253
+ ...Object.entries(this.parsers),
254
+ ];
255
+ for (const [, filePath] of entries) {
256
+ try {
257
+ delete require.cache[require.resolve(filePath)];
258
+ }
259
+ catch { }
260
+ }
261
+ for (const [name, filePath] of entries) {
262
+ if (name in global) {
263
+ global[name] = require(filePath);
264
+ }
265
+ }
266
+ },
267
+ /** @implements */
268
+ isInterwiki(title, { interwiki } = Parser.getConfig()) {
269
+ return new RegExp(`^(${interwiki.join('|')})\\s*:`, 'iu')
270
+ .exec(title.replaceAll('_', ' ').replace(/^\s*:?\s*/u, ''));
271
+ },
272
+ /** @implements */
273
+ reparse(date) {
274
+ const main = fs.readdirSync(path.join(__dirname, '..', 'errors'))
275
+ .find(name => name.startsWith(date) && name.endsWith('Z'));
276
+ if (!main) {
277
+ throw new RangeError(`找不到对应时间戳的错误记录:${date}`);
278
+ }
279
+ const file = path.join(__dirname, '..', 'errors', main), wikitext = fs.readFileSync(file, 'utf8');
280
+ const { stage, include, config } = require(`${file}.json`), Token = require('./src');
281
+ this.config = config;
282
+ return this.run(() => {
283
+ const halfParsed = stage < this.MAX_STAGE, token = new Token(wikitext, this.getConfig(), halfParsed);
284
+ if (halfParsed) {
285
+ token.setAttribute('stage', stage).parseOnce(stage, include);
286
+ }
287
+ else {
288
+ token.parse(undefined, include);
289
+ }
290
+ fs.unlinkSync(file);
291
+ fs.unlinkSync(`${file}.err`);
292
+ fs.unlinkSync(`${file}.json`);
293
+ return token;
294
+ });
295
+ },
296
+ };
297
+ const def = {}, immutable = new Set(['MAX_STAGE', 'aliases', 'typeAliases', 'promises']), enumerable = new Set(['config', 'conversionTable', 'redirects', 'normalizeTitle', 'parse', 'isInterwiki']);
298
+ for (const key in Parser) {
299
+ if (immutable.has(key)) {
300
+ def[key] = { enumerable: false, writable: false };
301
+ }
302
+ else if (!enumerable.has(key)) {
303
+ def[key] = { enumerable: false };
304
+ }
305
+ }
306
+ Object.defineProperties(Parser, def);
307
+ module.exports = Parser;