wikiparser-node 0.11.0 → 1.0.0-beta.1

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 (252) hide show
  1. package/config/.schema.json +26 -0
  2. package/dist/index.d.ts +61 -113
  3. package/dist/index.js +314 -0
  4. package/dist/lib/element.d.ts +122 -108
  5. package/dist/lib/element.js +656 -0
  6. package/dist/lib/node.d.ts +115 -221
  7. package/dist/lib/node.js +473 -0
  8. package/dist/lib/ranges.d.ts +27 -26
  9. package/dist/lib/ranges.js +130 -0
  10. package/dist/lib/text.d.ts +36 -28
  11. package/dist/lib/text.js +215 -0
  12. package/dist/lib/title.d.ts +26 -12
  13. package/dist/lib/title.js +108 -0
  14. package/dist/mixin/attributesParent.js +90 -0
  15. package/dist/mixin/fixed.js +29 -0
  16. package/dist/mixin/hidden.js +19 -0
  17. package/dist/mixin/singleLine.js +23 -0
  18. package/dist/mixin/sol.js +41 -0
  19. package/dist/parser/brackets.js +118 -0
  20. package/dist/parser/commentAndExt.js +48 -0
  21. package/dist/parser/converter.js +31 -0
  22. package/dist/parser/externalLinks.js +22 -0
  23. package/dist/parser/hrAndDoubleUnderscore.js +35 -0
  24. package/dist/parser/html.js +29 -0
  25. package/dist/parser/links.js +86 -0
  26. package/dist/parser/list.js +51 -0
  27. package/dist/parser/magicLinks.js +32 -0
  28. package/dist/parser/quotes.js +57 -0
  29. package/dist/parser/selector.js +158 -0
  30. package/dist/parser/table.js +108 -0
  31. package/dist/src/arg.d.ts +47 -23
  32. package/dist/src/arg.js +196 -0
  33. package/dist/src/atom.d.ts +12 -0
  34. package/dist/src/atom.js +22 -0
  35. package/dist/src/attribute.d.ts +74 -33
  36. package/dist/src/attribute.js +433 -0
  37. package/dist/src/attributes.d.ts +61 -55
  38. package/dist/src/attributes.js +371 -0
  39. package/dist/src/converter.d.ts +45 -71
  40. package/dist/src/converter.js +135 -0
  41. package/dist/src/converterFlags.d.ts +64 -39
  42. package/dist/src/converterFlags.js +235 -0
  43. package/dist/src/converterRule.d.ts +49 -27
  44. package/dist/src/converterRule.js +255 -0
  45. package/dist/src/extLink.d.ts +41 -38
  46. package/dist/src/extLink.js +154 -0
  47. package/dist/src/gallery.d.ts +59 -18
  48. package/dist/src/gallery.js +132 -0
  49. package/dist/src/heading.d.ts +60 -22
  50. package/dist/src/heading.js +135 -0
  51. package/dist/src/hidden.d.ts +20 -0
  52. package/dist/src/hidden.js +24 -0
  53. package/dist/src/html.d.ts +83 -29
  54. package/dist/src/html.js +242 -0
  55. package/dist/src/imageParameter.d.ts +59 -40
  56. package/dist/src/imageParameter.js +251 -0
  57. package/dist/src/imagemap.d.ts +65 -21
  58. package/dist/src/imagemap.js +169 -0
  59. package/dist/src/imagemapLink.d.ts +46 -14
  60. package/dist/src/imagemapLink.js +38 -0
  61. package/dist/src/index.d.ts +71 -105
  62. package/dist/src/index.js +826 -0
  63. package/dist/src/link/base.d.ts +71 -0
  64. package/dist/src/link/base.js +225 -0
  65. package/dist/src/link/category.d.ts +10 -11
  66. package/dist/src/link/category.js +26 -0
  67. package/dist/src/link/file.d.ts +61 -39
  68. package/dist/src/link/file.js +242 -0
  69. package/dist/src/link/galleryImage.d.ts +34 -12
  70. package/dist/src/link/galleryImage.js +98 -0
  71. package/dist/src/link/index.d.ts +25 -63
  72. package/dist/src/link/index.js +136 -0
  73. package/dist/src/magicLink.d.ts +22 -15
  74. package/dist/src/magicLink.js +126 -0
  75. package/dist/src/nested.d.ts +47 -0
  76. package/dist/src/nested.js +84 -0
  77. package/dist/src/nowiki/base.d.ts +39 -0
  78. package/dist/src/nowiki/base.js +29 -0
  79. package/dist/src/nowiki/comment.d.ts +31 -20
  80. package/dist/src/nowiki/comment.js +61 -0
  81. package/dist/src/nowiki/dd.d.ts +17 -11
  82. package/dist/src/nowiki/dd.js +50 -0
  83. package/dist/src/nowiki/doubleUnderscore.d.ts +28 -13
  84. package/dist/src/nowiki/doubleUnderscore.js +45 -0
  85. package/dist/src/nowiki/hr.d.ts +28 -10
  86. package/dist/src/nowiki/hr.js +33 -0
  87. package/dist/src/nowiki/index.d.ts +17 -23
  88. package/dist/src/nowiki/index.js +21 -0
  89. package/dist/src/nowiki/list.d.ts +15 -7
  90. package/dist/src/nowiki/list.js +11 -0
  91. package/dist/src/nowiki/noinclude.d.ts +20 -7
  92. package/dist/src/nowiki/noinclude.js +22 -0
  93. package/dist/src/nowiki/quote.d.ts +25 -10
  94. package/dist/src/nowiki/quote.js +55 -0
  95. package/dist/src/onlyinclude.d.ts +28 -12
  96. package/dist/src/onlyinclude.js +64 -0
  97. package/dist/src/paramTag/index.d.ts +40 -17
  98. package/dist/src/paramTag/index.js +76 -0
  99. package/dist/src/paramTag/inputbox.d.ts +8 -7
  100. package/dist/src/paramTag/inputbox.js +19 -0
  101. package/dist/src/parameter.d.ts +62 -41
  102. package/dist/src/parameter.js +201 -0
  103. package/dist/src/pre.d.ts +32 -0
  104. package/dist/src/pre.js +39 -0
  105. package/dist/src/syntax.d.ts +17 -14
  106. package/dist/src/syntax.js +65 -0
  107. package/dist/src/table/base.d.ts +55 -0
  108. package/dist/src/table/base.js +77 -0
  109. package/dist/src/table/index.d.ts +123 -156
  110. package/dist/src/table/index.js +811 -0
  111. package/dist/src/table/td.d.ts +90 -67
  112. package/dist/src/table/td.js +276 -0
  113. package/dist/src/table/tr.d.ts +30 -85
  114. package/dist/src/table/tr.js +48 -0
  115. package/dist/src/table/trBase.d.ts +72 -0
  116. package/dist/src/table/trBase.js +153 -0
  117. package/dist/src/tagPair/ext.d.ts +47 -11
  118. package/dist/src/tagPair/ext.js +127 -0
  119. package/dist/src/tagPair/include.d.ts +32 -13
  120. package/dist/src/tagPair/include.js +40 -0
  121. package/dist/src/tagPair/index.d.ts +44 -29
  122. package/dist/src/tagPair/index.js +111 -0
  123. package/dist/src/transclude.d.ts +88 -85
  124. package/dist/src/transclude.js +739 -0
  125. package/dist/util/base.js +26 -0
  126. package/dist/util/debug.js +52 -0
  127. package/dist/util/diff.js +69 -0
  128. package/dist/util/lint.js +38 -0
  129. package/dist/util/string.js +103 -0
  130. package/errors/README +1 -0
  131. package/i18n/zh-hans.json +1 -0
  132. package/i18n/zh-hant.json +1 -0
  133. package/package.json +21 -24
  134. package/printed/README +1 -0
  135. package/dist/mixin/attributeParent.d.ts +0 -9
  136. package/dist/mixin/fixedToken.d.ts +0 -8
  137. package/dist/mixin/hidden.d.ts +0 -8
  138. package/dist/mixin/singleLine.d.ts +0 -8
  139. package/dist/mixin/sol.d.ts +0 -8
  140. package/dist/parser/brackets.d.ts +0 -12
  141. package/dist/parser/commentAndExt.d.ts +0 -8
  142. package/dist/parser/converter.d.ts +0 -7
  143. package/dist/parser/externalLinks.d.ts +0 -7
  144. package/dist/parser/hrAndDoubleUnderscore.d.ts +0 -11
  145. package/dist/parser/html.d.ts +0 -7
  146. package/dist/parser/links.d.ts +0 -7
  147. package/dist/parser/list.d.ts +0 -7
  148. package/dist/parser/magicLinks.d.ts +0 -7
  149. package/dist/parser/quotes.d.ts +0 -7
  150. package/dist/parser/selector.d.ts +0 -12
  151. package/dist/parser/table.d.ts +0 -11
  152. package/dist/src/atom/hidden.d.ts +0 -5
  153. package/dist/src/atom/index.d.ts +0 -15
  154. package/dist/src/charinsert.d.ts +0 -32
  155. package/dist/src/hasNowiki/index.d.ts +0 -14
  156. package/dist/src/hasNowiki/pre.d.ts +0 -13
  157. package/dist/src/nested/choose.d.ts +0 -13
  158. package/dist/src/nested/combobox.d.ts +0 -13
  159. package/dist/src/nested/index.d.ts +0 -18
  160. package/dist/src/nested/references.d.ts +0 -13
  161. package/dist/tool/index.d.ts +0 -420
  162. package/dist/util/base.d.ts +0 -10
  163. package/dist/util/debug.d.ts +0 -20
  164. package/dist/util/diff.d.ts +0 -8
  165. package/dist/util/lint.d.ts +0 -28
  166. package/dist/util/string.d.ts +0 -55
  167. package/index.js +0 -333
  168. package/lib/element.js +0 -618
  169. package/lib/node.js +0 -730
  170. package/lib/ranges.js +0 -130
  171. package/lib/text.js +0 -265
  172. package/lib/title.js +0 -83
  173. package/mixin/attributeParent.js +0 -117
  174. package/mixin/fixedToken.js +0 -40
  175. package/mixin/hidden.js +0 -21
  176. package/mixin/singleLine.js +0 -31
  177. package/mixin/sol.js +0 -54
  178. package/parser/brackets.js +0 -128
  179. package/parser/commentAndExt.js +0 -62
  180. package/parser/converter.js +0 -46
  181. package/parser/externalLinks.js +0 -33
  182. package/parser/hrAndDoubleUnderscore.js +0 -49
  183. package/parser/html.js +0 -42
  184. package/parser/links.js +0 -94
  185. package/parser/list.js +0 -59
  186. package/parser/magicLinks.js +0 -41
  187. package/parser/quotes.js +0 -64
  188. package/parser/selector.js +0 -180
  189. package/parser/table.js +0 -114
  190. package/src/arg.js +0 -207
  191. package/src/atom/hidden.js +0 -13
  192. package/src/atom/index.js +0 -43
  193. package/src/attribute.js +0 -472
  194. package/src/attributes.js +0 -453
  195. package/src/charinsert.js +0 -97
  196. package/src/converter.js +0 -176
  197. package/src/converterFlags.js +0 -284
  198. package/src/converterRule.js +0 -256
  199. package/src/extLink.js +0 -180
  200. package/src/gallery.js +0 -149
  201. package/src/hasNowiki/index.js +0 -44
  202. package/src/hasNowiki/pre.js +0 -40
  203. package/src/heading.js +0 -134
  204. package/src/html.js +0 -254
  205. package/src/imageParameter.js +0 -303
  206. package/src/imagemap.js +0 -199
  207. package/src/imagemapLink.js +0 -41
  208. package/src/index.js +0 -938
  209. package/src/link/category.js +0 -44
  210. package/src/link/file.js +0 -287
  211. package/src/link/galleryImage.js +0 -120
  212. package/src/link/index.js +0 -388
  213. package/src/magicLink.js +0 -151
  214. package/src/nested/choose.js +0 -24
  215. package/src/nested/combobox.js +0 -23
  216. package/src/nested/index.js +0 -96
  217. package/src/nested/references.js +0 -23
  218. package/src/nowiki/comment.js +0 -71
  219. package/src/nowiki/dd.js +0 -59
  220. package/src/nowiki/doubleUnderscore.js +0 -56
  221. package/src/nowiki/hr.js +0 -41
  222. package/src/nowiki/index.js +0 -56
  223. package/src/nowiki/list.js +0 -16
  224. package/src/nowiki/noinclude.js +0 -28
  225. package/src/nowiki/quote.js +0 -69
  226. package/src/onlyinclude.js +0 -64
  227. package/src/paramTag/index.js +0 -89
  228. package/src/paramTag/inputbox.js +0 -35
  229. package/src/parameter.js +0 -239
  230. package/src/syntax.js +0 -91
  231. package/src/table/index.js +0 -985
  232. package/src/table/td.js +0 -343
  233. package/src/table/tr.js +0 -319
  234. package/src/tagPair/ext.js +0 -146
  235. package/src/tagPair/include.js +0 -50
  236. package/src/tagPair/index.js +0 -131
  237. package/src/transclude.js +0 -843
  238. package/tool/index.js +0 -1209
  239. package/typings/api.d.ts +0 -9
  240. package/typings/array.d.ts +0 -29
  241. package/typings/event.d.ts +0 -22
  242. package/typings/index.d.ts +0 -118
  243. package/typings/node.d.ts +0 -35
  244. package/typings/parser.d.ts +0 -12
  245. package/typings/table.d.ts +0 -10
  246. package/typings/token.d.ts +0 -31
  247. package/typings/tool.d.ts +0 -6
  248. package/util/base.js +0 -17
  249. package/util/debug.js +0 -73
  250. package/util/diff.js +0 -76
  251. package/util/lint.js +0 -57
  252. package/util/string.js +0 -126
@@ -1,146 +0,0 @@
1
- 'use strict';
2
-
3
- const {generateForSelf} = require('../../util/lint'),
4
- attributeParent = require('../../mixin/attributeParent'),
5
- Parser = require('../..'),
6
- Token = require('..'),
7
- TagPairToken = require('.'),
8
- AttributesToken = require('../attributes');
9
-
10
- /**
11
- * 扩展标签
12
- * @classdesc `{childNodes: [AttributesToken, NowikiToken|Token]}`
13
- */
14
- class ExtToken extends attributeParent(TagPairToken) {
15
- type = 'ext';
16
- closed = true;
17
-
18
- /**
19
- * @param {string} name 标签名
20
- * @param {string} attr 标签属性
21
- * @param {string} inner 内部wikitext
22
- * @param {string|undefined} closed 是否封闭
23
- * @param {import('../../typings/token').accum} accum
24
- */
25
- constructor(name, attr = '', inner = '', closed = undefined, config = Parser.getConfig(), accum = []) {
26
- attr = !attr || attr.trimStart() !== attr ? attr : ` ${attr}`;
27
- const lcName = name.toLowerCase(),
28
- attrToken = new AttributesToken(attr, 'ext-attrs', lcName, config, accum),
29
- /** @type {import('../../typings/token').ParserConfig} */
30
- newConfig = {...config, excludes: [...config.excludes]},
31
- ext = new Set(newConfig.ext);
32
- let /** @type {Token} */ innerToken;
33
- ext.delete(lcName);
34
- newConfig.ext = [...ext];
35
- switch (lcName) {
36
- case 'tab':
37
- ext.delete('tabs');
38
- newConfig.ext = [...ext];
39
- // fall through
40
- case 'indicator':
41
- case 'poem':
42
- case 'ref':
43
- case 'option':
44
- case 'combooption':
45
- case 'tabs':
46
- case 'poll':
47
- case 'seo':
48
- if (lcName === 'poem') {
49
- newConfig.excludes.push('heading');
50
- }
51
- innerToken = new Token(inner, newConfig, true, accum);
52
- break;
53
- case 'gallery': {
54
- const GalleryToken = require('../gallery');
55
- innerToken = new GalleryToken(inner, newConfig, accum);
56
- break;
57
- }
58
- case 'pre': {
59
- const PreToken = require('../hasNowiki/pre');
60
- innerToken = new PreToken(inner, newConfig, accum);
61
- break;
62
- }
63
- case 'charinsert': {
64
- const CharinsertToken = require('../charinsert');
65
- innerToken = new CharinsertToken(inner, newConfig, accum);
66
- break;
67
- }
68
- case 'references': {
69
- const ReferencesToken = require('../nested/references');
70
- innerToken = new ReferencesToken(inner, newConfig, accum);
71
- break;
72
- }
73
- case 'choose': {
74
- const ChooseToken = require('../nested/choose');
75
- innerToken = new ChooseToken(inner, newConfig, accum);
76
- break;
77
- }
78
- case 'combobox': {
79
- const ComboboxToken = require('../nested/combobox');
80
- innerToken = new ComboboxToken(inner, newConfig, accum);
81
- break;
82
- }
83
- case 'imagemap': {
84
- const ImagemapToken = require('../imagemap');
85
- innerToken = new ImagemapToken(inner, config, accum);
86
- break;
87
- }
88
- case 'dynamicpagelist': {
89
- const ParamTagToken = require('../paramTag');
90
- innerToken = new ParamTagToken(inner, newConfig, accum);
91
- break;
92
- }
93
- case 'inputbox': {
94
- newConfig.excludes.push('heading');
95
- const InputboxToken = require('../paramTag/inputbox');
96
- innerToken = new InputboxToken(inner, newConfig, accum);
97
- break;
98
- }
99
- // 更多定制扩展的代码示例:
100
- // ```
101
- // case 'extensionName': {
102
- // const ExtensionToken = require('../extension');
103
- // innerToken = new ExtensionToken(inner, newConfig, accum);
104
- // break;
105
- // }
106
- // ```
107
- default: {
108
- const NowikiToken = require('../nowiki');
109
- innerToken = new NowikiToken(inner, config);
110
- }
111
- }
112
- innerToken.setAttribute('name', lcName).type = 'ext-inner';
113
- super(name, attrToken, innerToken, closed, config, accum);
114
- }
115
-
116
- /**
117
- * @override
118
- * @param {number} start 起始位置
119
- */
120
- lint(start = this.getAbsoluteIndex()) {
121
- const errors = super.lint(start);
122
- if (this.name !== 'nowiki' && this.closest('html-attrs, table-attrs')) {
123
- const root = this.getRootNode(),
124
- excerpt = String(root).slice(Math.max(0, start - 25), start + 25),
125
- rect = {start, ...root.posFromIndex(start)};
126
- errors.push({...generateForSelf(this, rect, 'extension tag in HTML tag attributes'), excerpt});
127
- }
128
- return errors;
129
- }
130
-
131
- /** @override */
132
- cloneNode() {
133
- const inner = this.lastChild.cloneNode(),
134
- tags = this.getAttribute('tags'),
135
- config = this.getAttribute('config'),
136
- attr = String(this.firstChild);
137
- return Parser.run(() => {
138
- const token = new ExtToken(tags[0], attr, '', this.selfClosing ? undefined : tags[1], config);
139
- token.lastChild.safeReplaceWith(inner);
140
- return token;
141
- });
142
- }
143
- }
144
-
145
- Parser.classes.ExtToken = __filename;
146
- module.exports = ExtToken;
@@ -1,50 +0,0 @@
1
- 'use strict';
2
-
3
- const hidden = require('../../mixin/hidden'),
4
- Parser = require('../..'),
5
- TagPairToken = require('.');
6
-
7
- /**
8
- * `<includeonly>`或`<noinclude>`
9
- * @classdesc `{childNodes: [AstText, AstText]}`
10
- */
11
- class IncludeToken extends hidden(TagPairToken) {
12
- type = 'include';
13
-
14
- /**
15
- * @param {string} name 标签名
16
- * @param {string} attr 标签属性
17
- * @param {string|undefined} inner 内部wikitext
18
- * @param {string|undefined} closed 是否封闭
19
- * @param {import('../../typings/token').accum} accum
20
- */
21
- constructor(name, attr = '', inner = undefined, closed = undefined, config = Parser.getConfig(), accum = []) {
22
- super(name, attr, inner ?? '', inner === undefined ? closed : closed ?? '', config, accum);
23
- }
24
-
25
- /** @override */
26
- cloneNode() {
27
- const tags = this.getAttribute('tags'),
28
- config = this.getAttribute('config'),
29
- inner = this.selfClosing ? undefined : String(this.lastChild),
30
- closing = this.selfClosing || !this.closed ? undefined : tags[1],
31
- token = Parser.run(() => new IncludeToken(tags[0], String(this.firstChild), inner, closing, config));
32
- return token;
33
- }
34
-
35
- /**
36
- * @override
37
- * @param {string} str 新文本
38
- */
39
- setText(str) {
40
- return super.setText(str, 1);
41
- }
42
-
43
- /** 清除标签属性 */
44
- removeAttr() {
45
- super.setText('', 0);
46
- }
47
- }
48
-
49
- Parser.classes.IncludeToken = __filename;
50
- module.exports = IncludeToken;
@@ -1,131 +0,0 @@
1
- 'use strict';
2
-
3
- /**
4
- * @template T
5
- * @typedef {import('../../typings/node').TokenAttribute<T>} TokenAttribute
6
- */
7
-
8
- const Parser = require('../..'),
9
- fixedToken = require('../../mixin/fixedToken'),
10
- Token = require('..');
11
-
12
- /**
13
- * 成对标签
14
- * @classdesc `{childNodes: [AstText|AttributesToken, AstText|Token]}`
15
- */
16
- class TagPairToken extends fixedToken(Token) {
17
- #selfClosing;
18
- #closed;
19
- #tags;
20
-
21
- /** getter */
22
- get closed() {
23
- return this.#closed;
24
- }
25
-
26
- set closed(value) {
27
- this.#closed ||= Boolean(value);
28
- }
29
-
30
- /** getter */
31
- get selfClosing() {
32
- return this.#selfClosing;
33
- }
34
-
35
- set selfClosing(value) {
36
- value = Boolean(value);
37
- if (value !== this.#selfClosing && this.lastChild.text()) {
38
- Parser.warn(`<${this.name}>标签内部的${value ? '文本将被隐藏' : '原有文本将再次可见'}!`);
39
- }
40
- this.#selfClosing = value;
41
- }
42
-
43
- /** 内部wikitext */
44
- get innerText() {
45
- return this.#selfClosing ? undefined : this.lastChild.text();
46
- }
47
-
48
- /**
49
- * @param {string} name 标签名
50
- * @param {string|Token} attr 标签属性
51
- * @param {string|Token} inner 内部wikitext
52
- * @param {string|undefined} closed 是否封闭;约定`undefined`表示自闭合,`''`表示未闭合
53
- * @param {import('../../typings/token').accum} accum
54
- */
55
- constructor(name, attr, inner, closed, config = Parser.getConfig(), accum = []) {
56
- super(undefined, config, true);
57
- this.setAttribute('name', name.toLowerCase());
58
- this.#tags = [name, closed || name];
59
- this.#selfClosing = closed === undefined;
60
- this.#closed = closed !== '';
61
- this.append(attr, inner);
62
- let index = accum.indexOf(attr);
63
- if (index === -1) {
64
- index = accum.indexOf(inner);
65
- }
66
- if (index === -1) {
67
- index = Infinity;
68
- }
69
- accum.splice(index, 0, this);
70
- }
71
-
72
- /**
73
- * @override
74
- * @param {string} selector
75
- */
76
- toString(selector) {
77
- const {firstChild, lastChild, nextSibling, name} = this,
78
- [opening, closing] = this.#tags;
79
- if (selector && this.matches(selector)) {
80
- return '';
81
- } else if (!this.#closed && nextSibling) {
82
- Parser.error(`自动闭合 <${name}>`, lastChild);
83
- this.#closed = true;
84
- }
85
- return this.#selfClosing
86
- ? `<${opening}${String(firstChild)}/>`
87
- : `<${opening}${String(firstChild)}>${String(lastChild)}${this.#closed ? `</${closing}>` : ''}`;
88
- }
89
-
90
- /**
91
- * @override
92
- * @returns {string}
93
- */
94
- text() {
95
- const [opening, closing] = this.#tags;
96
- return this.#selfClosing
97
- ? `<${opening}${this.firstChild.text()}/>`
98
- : `<${opening}${super.text('>')}${this.#closed ? `</${closing}>` : ''}`;
99
- }
100
-
101
- /** @override */
102
- getPadding() {
103
- return this.#tags[0].length + 1;
104
- }
105
-
106
- /** @override */
107
- getGaps() {
108
- return 1;
109
- }
110
-
111
- /** @override */
112
- print() {
113
- const [opening, closing] = this.#tags;
114
- return super.print(this.#selfClosing
115
- ? {pre: `&lt;${opening}`, post: '/&gt;'}
116
- : {pre: `&lt;${opening}`, sep: '&gt;', post: this.#closed ? `&lt;/${closing}&gt;` : ''});
117
- }
118
-
119
- /**
120
- * @override
121
- * @template {string} T
122
- * @param {T} key 属性键
123
- * @returns {TokenAttribute<T>}
124
- */
125
- getAttribute(key) {
126
- return key === 'tags' ? [...this.#tags] : super.getAttribute(key);
127
- }
128
- }
129
-
130
- Parser.classes.TagPairToken = __filename;
131
- module.exports = TagPairToken;