@wdprlib/parser 3.2.0 → 4.0.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 (433) hide show
  1. package/dist/index.cjs +10451 -8402
  2. package/dist/index.d.cts +313 -337
  3. package/dist/index.d.ts +313 -337
  4. package/dist/index.js +10438 -8389
  5. package/package.json +1 -1
  6. package/src/index.ts +7 -0
  7. package/src/lexer/anchor.ts +48 -0
  8. package/src/lexer/index.ts +3 -2
  9. package/src/lexer/lexer.ts +73 -559
  10. package/src/lexer/options.ts +19 -0
  11. package/src/lexer/punctuation.ts +70 -0
  12. package/src/lexer/quoted-string.ts +16 -0
  13. package/src/lexer/runs.ts +85 -0
  14. package/src/lexer/spacing-actions.ts +24 -0
  15. package/src/lexer/state.ts +103 -0
  16. package/src/lexer/syntax-actions.ts +80 -0
  17. package/src/lexer/text-actions.ts +41 -0
  18. package/src/lexer/token-actions.ts +136 -0
  19. package/src/lexer/token-factory.ts +62 -0
  20. package/src/lexer/tokenize.ts +18 -0
  21. package/src/parser/constants.ts +2 -0
  22. package/src/parser/depth/index.ts +111 -0
  23. package/src/parser/depth/stack.ts +82 -0
  24. package/src/parser/parse/block.ts +42 -0
  25. package/src/parser/parse/context.ts +26 -0
  26. package/src/parser/parse/footnotes.ts +25 -0
  27. package/src/parser/parse/index.ts +42 -0
  28. package/src/parser/parse/options.ts +34 -0
  29. package/src/parser/parse/parser.ts +79 -0
  30. package/src/parser/parse/plain-non-ascii.ts +129 -0
  31. package/src/parser/parse/result.ts +57 -0
  32. package/src/parser/parse/source.ts +11 -0
  33. package/src/parser/postprocess/divAdjacentParagraph.ts +1 -1
  34. package/src/parser/postprocess/spanStrip/clean-element.ts +168 -0
  35. package/src/parser/postprocess/spanStrip/cleanup.ts +25 -0
  36. package/src/parser/postprocess/spanStrip/empty-spans.ts +36 -0
  37. package/src/parser/postprocess/spanStrip/escaped.ts +78 -0
  38. package/src/parser/postprocess/spanStrip/factory.ts +23 -0
  39. package/src/parser/postprocess/spanStrip/index.ts +8 -0
  40. package/src/parser/postprocess/spanStrip/merge.ts +117 -0
  41. package/src/parser/postprocess/spanStrip/predicates.ts +59 -0
  42. package/src/parser/postprocess/spanStrip/split.ts +67 -0
  43. package/src/parser/preprocess/expr/chars.ts +15 -0
  44. package/src/parser/preprocess/expr/evaluate.ts +22 -0
  45. package/src/parser/preprocess/expr/index.ts +45 -0
  46. package/src/parser/preprocess/expr/kind.ts +19 -0
  47. package/src/parser/preprocess/expr/parse.ts +103 -0
  48. package/src/parser/preprocess/expr/scan.ts +34 -0
  49. package/src/parser/preprocess/expr/types.ts +14 -0
  50. package/src/parser/preprocess/typography.ts +70 -5
  51. package/src/parser/preprocess/utils/bracket-depths.ts +98 -0
  52. package/src/parser/preprocess/utils/index.ts +13 -0
  53. package/src/parser/preprocess/utils/raw-regions.ts +153 -0
  54. package/src/parser/preprocess/whitespace/detection.ts +39 -0
  55. package/src/parser/preprocess/whitespace/index.ts +79 -0
  56. package/src/parser/preprocess/whitespace/leading-spaces.ts +11 -0
  57. package/src/parser/preprocess/whitespace/patterns.ts +23 -0
  58. package/src/parser/rules/block/align/body.ts +46 -0
  59. package/src/parser/rules/block/align/element.ts +13 -0
  60. package/src/parser/rules/block/align/index.ts +90 -0
  61. package/src/parser/rules/block/align/syntax.ts +113 -0
  62. package/src/parser/rules/block/bibliography/body.ts +81 -0
  63. package/src/parser/rules/block/bibliography/entries.ts +49 -0
  64. package/src/parser/rules/block/bibliography/entry-content.ts +73 -0
  65. package/src/parser/rules/block/bibliography/entry-key.ts +83 -0
  66. package/src/parser/rules/block/bibliography/index.ts +90 -0
  67. package/src/parser/rules/block/bibliography/open.ts +53 -0
  68. package/src/parser/rules/block/block-list/bare-content.ts +105 -0
  69. package/src/parser/rules/block/block-list/bare-paragraph.ts +60 -0
  70. package/src/parser/rules/block/block-list/index.ts +51 -0
  71. package/src/parser/rules/block/block-list/item-content.ts +132 -0
  72. package/src/parser/rules/block/block-list/li-content.ts +107 -0
  73. package/src/parser/rules/block/block-list/li-item.ts +77 -0
  74. package/src/parser/rules/block/block-list/list-block.ts +100 -0
  75. package/src/parser/rules/block/block-list/open.ts +51 -0
  76. package/src/parser/rules/block/block-list/tags.ts +50 -0
  77. package/src/parser/rules/block/blockquote/build.ts +62 -0
  78. package/src/parser/rules/block/blockquote/index.ts +80 -0
  79. package/src/parser/rules/block/blockquote/line.ts +79 -0
  80. package/src/parser/rules/block/blockquote/lines.ts +39 -0
  81. package/src/parser/rules/block/{center.ts → center/index.ts} +7 -22
  82. package/src/parser/rules/block/center/open.ts +27 -0
  83. package/src/parser/rules/block/{clear-float.ts → clear-float/index.ts} +6 -30
  84. package/src/parser/rules/block/clear-float/syntax.ts +43 -0
  85. package/src/parser/rules/block/code/attributes.ts +30 -0
  86. package/src/parser/rules/block/code/content.ts +57 -0
  87. package/src/parser/rules/block/code/index.ts +100 -0
  88. package/src/parser/rules/block/collapsible/attributes.ts +95 -0
  89. package/src/parser/rules/block/collapsible/body.ts +69 -0
  90. package/src/parser/rules/block/collapsible/index.ts +117 -0
  91. package/src/parser/rules/block/collapsible/open.ts +51 -0
  92. package/src/parser/rules/block/collapsible/orphans.ts +31 -0
  93. package/src/parser/rules/block/collapsible/tags.ts +17 -0
  94. package/src/parser/rules/block/comment/consume.ts +37 -0
  95. package/src/parser/rules/block/{comment.ts → comment/index.ts} +12 -38
  96. package/src/parser/rules/block/{content-separator.ts → content-separator/index.ts} +5 -35
  97. package/src/parser/rules/block/content-separator/syntax.ts +33 -0
  98. package/src/parser/rules/block/definition-list/collect.ts +40 -0
  99. package/src/parser/rules/block/definition-list/index.ts +63 -0
  100. package/src/parser/rules/block/definition-list/item-key.ts +95 -0
  101. package/src/parser/rules/block/definition-list/item-value.ts +56 -0
  102. package/src/parser/rules/block/definition-list/items.ts +54 -0
  103. package/src/parser/rules/block/div/body.ts +41 -0
  104. package/src/parser/rules/block/div/close.ts +41 -0
  105. package/src/parser/rules/block/div/failed.ts +117 -0
  106. package/src/parser/rules/block/div/index.ts +112 -0
  107. package/src/parser/rules/block/div/nesting.ts +37 -0
  108. package/src/parser/rules/block/div/open.ts +59 -0
  109. package/src/parser/rules/block/div/paragraph-strip.ts +44 -0
  110. package/src/parser/rules/block/embed-block/content.ts +53 -0
  111. package/src/parser/rules/block/embed-block/index.ts +91 -0
  112. package/src/parser/rules/block/embed-block/open.ts +52 -0
  113. package/src/parser/rules/block/embed-block/tags.ts +5 -0
  114. package/src/parser/rules/block/footnoteblock/attributes.ts +73 -0
  115. package/src/parser/rules/block/footnoteblock/index.ts +82 -0
  116. package/src/parser/rules/block/footnoteblock/open.ts +53 -0
  117. package/src/parser/rules/block/heading/index.ts +87 -0
  118. package/src/parser/rules/block/heading/open.ts +50 -0
  119. package/src/parser/rules/block/heading/toc-text.ts +26 -0
  120. package/src/parser/rules/block/{horizontal-rule.ts → horizontal-rule/index.ts} +4 -21
  121. package/src/parser/rules/block/horizontal-rule/syntax.ts +21 -0
  122. package/src/parser/rules/block/html/body.ts +114 -0
  123. package/src/parser/rules/block/html/diagnostics.ts +11 -0
  124. package/src/parser/rules/block/html/index.ts +95 -0
  125. package/src/parser/rules/block/html/open.ts +36 -0
  126. package/src/parser/rules/block/iframe/attributes.ts +106 -0
  127. package/src/parser/rules/block/iframe/index.ts +73 -0
  128. package/src/parser/rules/block/iframe/open.ts +58 -0
  129. package/src/parser/rules/block/iframe/source.ts +24 -0
  130. package/src/parser/rules/block/iframe/url.ts +38 -0
  131. package/src/parser/rules/block/iftags/body.ts +48 -0
  132. package/src/parser/rules/block/iftags/condition.ts +24 -0
  133. package/src/parser/rules/block/{iftags.ts → iftags/index.ts} +16 -58
  134. package/src/parser/rules/block/include/arguments.ts +48 -0
  135. package/src/parser/rules/block/include/index.ts +75 -0
  136. package/src/parser/rules/block/include/location.ts +24 -0
  137. package/src/parser/rules/block/include/variables.ts +37 -0
  138. package/src/parser/rules/block/list/index.ts +73 -0
  139. package/src/parser/rules/block/list/line.ts +77 -0
  140. package/src/parser/rules/block/list/native.ts +89 -0
  141. package/src/parser/rules/block/math/content.ts +54 -0
  142. package/src/parser/rules/block/math/index.ts +106 -0
  143. package/src/parser/rules/block/math/name.ts +35 -0
  144. package/src/parser/rules/block/module/body.ts +92 -0
  145. package/src/parser/rules/block/module/element.ts +33 -0
  146. package/src/parser/rules/block/module/include/directive.ts +91 -0
  147. package/src/parser/rules/block/module/include/index.ts +11 -2
  148. package/src/parser/rules/block/module/include/references.ts +42 -0
  149. package/src/parser/rules/block/module/include/resolve/cache.ts +44 -0
  150. package/src/parser/rules/block/module/include/resolve/index.ts +106 -0
  151. package/src/parser/rules/block/module/include/resolve/iterate.ts +202 -0
  152. package/src/parser/rules/block/module/include/resolve/replace.ts +31 -0
  153. package/src/parser/rules/block/module/include/resolve/types.ts +105 -0
  154. package/src/parser/rules/block/module/include/scanner.ts +121 -0
  155. package/src/parser/rules/block/module/index.ts +14 -2
  156. package/src/parser/rules/block/module/listpages/compiler.ts +12 -392
  157. package/src/parser/rules/block/module/listpages/extract.ts +25 -359
  158. package/src/parser/rules/block/module/listpages/extraction/listpages.ts +42 -0
  159. package/src/parser/rules/block/module/listpages/extraction/listusers.ts +30 -0
  160. package/src/parser/rules/block/module/listpages/extraction/query.ts +51 -0
  161. package/src/parser/rules/block/module/listpages/extraction/result.ts +18 -0
  162. package/src/parser/rules/block/module/listpages/extraction/template.ts +96 -0
  163. package/src/parser/rules/block/module/listpages/extraction/variables.ts +58 -0
  164. package/src/parser/rules/block/module/listpages/normalization/date-selector.ts +53 -0
  165. package/src/parser/rules/block/module/listpages/normalization/numeric-selector.ts +32 -0
  166. package/src/parser/rules/block/module/listpages/normalization/order-parent.ts +82 -0
  167. package/src/parser/rules/block/module/listpages/normalization/selectors.ts +2 -0
  168. package/src/parser/rules/block/module/listpages/normalization/tags-category.ts +86 -0
  169. package/src/parser/rules/block/module/listpages/normalize.ts +8 -324
  170. package/src/parser/rules/block/module/listpages/resolution/items.ts +43 -0
  171. package/src/parser/rules/block/module/listpages/resolution/wrapper.ts +42 -0
  172. package/src/parser/rules/block/module/listpages/resolve.ts +5 -75
  173. package/src/parser/rules/block/module/listpages/template/format/content.ts +41 -0
  174. package/src/parser/rules/block/module/listpages/template/format/date.ts +116 -0
  175. package/src/parser/rules/block/module/listpages/template/format/index.ts +4 -0
  176. package/src/parser/rules/block/module/listpages/template/format/tags.ts +7 -0
  177. package/src/parser/rules/block/module/listpages/template/format/user.ts +9 -0
  178. package/src/parser/rules/block/module/listpages/template/getters/index.ts +36 -0
  179. package/src/parser/rules/block/module/listpages/template/getters/parameterized.ts +60 -0
  180. package/src/parser/rules/block/module/listpages/template/getters/simple.ts +65 -0
  181. package/src/parser/rules/block/module/listpages/template/getters/types.ts +3 -0
  182. package/src/parser/rules/block/module/listpages/template/syntax.ts +97 -0
  183. package/src/parser/rules/block/module/listpages/types/data-fetcher.ts +15 -0
  184. package/src/parser/rules/block/module/listpages/types/data-requirements.ts +52 -0
  185. package/src/parser/rules/block/module/listpages/types/external-data.ts +77 -0
  186. package/src/parser/rules/block/module/listpages/types/index.ts +17 -0
  187. package/src/parser/rules/block/module/listpages/types/normalized-query.ts +120 -0
  188. package/src/parser/rules/block/module/listpages/types/query.ts +67 -0
  189. package/src/parser/rules/block/module/listpages/types/template.ts +17 -0
  190. package/src/parser/rules/block/module/listpages/types/variables.ts +69 -0
  191. package/src/parser/rules/block/module/listpages/url-resolution/fields.ts +48 -0
  192. package/src/parser/rules/block/module/listpages/url-resolution/params.ts +19 -0
  193. package/src/parser/rules/block/module/listpages/url-resolution/query.ts +24 -0
  194. package/src/parser/rules/block/module/listpages/url-resolution/resolve.ts +53 -0
  195. package/src/parser/rules/block/module/listpages/url-resolution/value.ts +25 -0
  196. package/src/parser/rules/block/module/listpages/url-resolver.ts +3 -160
  197. package/src/parser/rules/block/module/listusers/compiler.ts +4 -25
  198. package/src/parser/rules/block/module/listusers/extract.ts +4 -9
  199. package/src/parser/rules/block/module/listusers/getters.ts +21 -0
  200. package/src/parser/rules/block/module/listusers/variables.ts +15 -0
  201. package/src/parser/rules/block/module/open.ts +57 -0
  202. package/src/parser/rules/block/module/resolution/contexts.ts +78 -0
  203. package/src/parser/rules/block/module/resolution/data-maps.ts +39 -0
  204. package/src/parser/rules/block/module/resolution/dynamic-modules.ts +93 -0
  205. package/src/parser/rules/block/module/resolution/styles.ts +53 -0
  206. package/src/parser/rules/block/module/resolution/walk-resolve.ts +107 -0
  207. package/src/parser/rules/block/module/resolve.ts +79 -292
  208. package/src/parser/rules/block/module/rule.ts +56 -0
  209. package/src/parser/rules/block/module/types-common.ts +11 -0
  210. package/src/parser/rules/block/module/walk/children.ts +35 -0
  211. package/src/parser/rules/block/module/walk/index.ts +9 -0
  212. package/src/parser/rules/block/module/walk/map/index.ts +2 -0
  213. package/src/parser/rules/block/module/walk/map/stateful-definition-list.ts +25 -0
  214. package/src/parser/rules/block/module/walk/map/stateful-list.ts +40 -0
  215. package/src/parser/rules/block/module/walk/map/stateful-table.ts +23 -0
  216. package/src/parser/rules/block/module/walk/map/stateful-tabs.ts +19 -0
  217. package/src/parser/rules/block/module/walk/map/stateful.ts +71 -0
  218. package/src/parser/rules/block/module/walk/map/stateless-definition-list.ts +12 -0
  219. package/src/parser/rules/block/module/walk/map/stateless-list.ts +29 -0
  220. package/src/parser/rules/block/module/walk/map/stateless-table.ts +11 -0
  221. package/src/parser/rules/block/module/walk/map/stateless-tabs.ts +5 -0
  222. package/src/parser/rules/block/module/walk/map/stateless.ts +51 -0
  223. package/src/parser/rules/block/module/walk/map/types.ts +6 -0
  224. package/src/parser/rules/block/module/walk/traverse.ts +65 -0
  225. package/src/parser/rules/block/orphan-li/content.ts +60 -0
  226. package/src/parser/rules/block/orphan-li/index.ts +75 -0
  227. package/src/parser/rules/block/orphan-li/open.ts +25 -0
  228. package/src/parser/rules/block/orphan-li/tags.ts +40 -0
  229. package/src/parser/rules/block/paragraph/content.ts +12 -0
  230. package/src/parser/rules/block/paragraph/index.ts +60 -0
  231. package/src/parser/rules/block/paragraph/normalize.ts +52 -0
  232. package/src/parser/rules/block/paragraph/span-markers.ts +52 -0
  233. package/src/parser/rules/block/parsing/attributes/index.ts +32 -0
  234. package/src/parser/rules/block/parsing/attributes/names.ts +93 -0
  235. package/src/parser/rules/block/parsing/attributes/scanner.ts +75 -0
  236. package/src/parser/rules/block/parsing/attributes/values.ts +26 -0
  237. package/src/parser/rules/block/parsing/block-item.ts +29 -0
  238. package/src/parser/rules/block/parsing/content.ts +127 -0
  239. package/src/parser/rules/block/parsing/end-condition.ts +51 -0
  240. package/src/parser/rules/block/parsing/inline-content.ts +105 -0
  241. package/src/parser/rules/block/parsing/inline-newline.ts +41 -0
  242. package/src/parser/rules/block/parsing/non-boundary.ts +24 -0
  243. package/src/parser/rules/block/parsing/rule-dispatch.ts +44 -0
  244. package/src/parser/rules/block/table/index.ts +80 -0
  245. package/src/parser/rules/block/table/pipe/cell-start.ts +69 -0
  246. package/src/parser/rules/block/table/pipe/cell.ts +106 -0
  247. package/src/parser/rules/block/table/pipe/index.ts +2 -0
  248. package/src/parser/rules/block/table/pipe/row.ts +88 -0
  249. package/src/parser/rules/block/table/pipe/tokens.ts +14 -0
  250. package/src/parser/rules/block/table/pipe/trim.ts +50 -0
  251. package/src/parser/rules/block/table-block/body.ts +79 -0
  252. package/src/parser/rules/block/table-block/cell-attributes.ts +33 -0
  253. package/src/parser/rules/block/table-block/cell-boundary.ts +99 -0
  254. package/src/parser/rules/block/table-block/cell-content/index.ts +88 -0
  255. package/src/parser/rules/block/table-block/cell-content/segments.ts +134 -0
  256. package/src/parser/rules/block/table-block/cell-newline.ts +47 -0
  257. package/src/parser/rules/block/table-block/cell.ts +64 -0
  258. package/src/parser/rules/block/table-block/index.ts +113 -0
  259. package/src/parser/rules/block/table-block/row-boundary.ts +75 -0
  260. package/src/parser/rules/block/table-block/structure.ts +80 -0
  261. package/src/parser/rules/block/tabview/body.ts +64 -0
  262. package/src/parser/rules/block/tabview/index.ts +90 -0
  263. package/src/parser/rules/block/tabview/open.ts +50 -0
  264. package/src/parser/rules/block/tabview/tab.ts +92 -0
  265. package/src/parser/rules/block/tabview/tags.ts +30 -0
  266. package/src/parser/rules/block/toc/element.ts +11 -0
  267. package/src/parser/rules/block/toc/index.ts +44 -0
  268. package/src/parser/rules/block/toc/open.ts +84 -0
  269. package/src/parser/rules/block/utils.ts +10 -610
  270. package/src/parser/rules/{utils.ts → common/attribute-safety.ts} +3 -49
  271. package/src/parser/rules/common/block-name.ts +33 -0
  272. package/src/parser/rules/common/index.ts +2 -0
  273. package/src/parser/rules/contracts/index.ts +3 -0
  274. package/src/parser/rules/contracts/parse-context.ts +38 -0
  275. package/src/parser/rules/contracts/rule.ts +43 -0
  276. package/src/parser/rules/contracts/scope.ts +31 -0
  277. package/src/parser/rules/inline/anchor/attributes.ts +54 -0
  278. package/src/parser/rules/inline/anchor/child.ts +26 -0
  279. package/src/parser/rules/inline/anchor/close.ts +34 -0
  280. package/src/parser/rules/inline/anchor/content.ts +59 -0
  281. package/src/parser/rules/inline/anchor/index.ts +103 -0
  282. package/src/parser/rules/inline/anchor/newline.ts +26 -0
  283. package/src/parser/rules/inline/anchor/open.ts +47 -0
  284. package/src/parser/rules/inline/anchor/paragraph-strip.ts +14 -0
  285. package/src/parser/rules/inline/anchor/syntax.ts +40 -0
  286. package/src/parser/rules/inline/anchor-name/index.ts +38 -0
  287. package/src/parser/rules/inline/anchor-name/name.ts +39 -0
  288. package/src/parser/rules/inline/anchor-name/syntax.ts +46 -0
  289. package/src/parser/rules/inline/bibcite/element.ts +14 -0
  290. package/src/parser/rules/inline/bibcite/index.ts +34 -0
  291. package/src/parser/rules/inline/bibcite/syntax.ts +64 -0
  292. package/src/parser/rules/inline/bold.ts +2 -39
  293. package/src/parser/rules/inline/color/index.ts +35 -0
  294. package/src/parser/rules/inline/color/syntax.ts +69 -0
  295. package/src/parser/rules/inline/comment/consume.ts +31 -0
  296. package/src/parser/rules/inline/{comment.ts → comment/index.ts} +10 -36
  297. package/src/parser/rules/inline/equation-ref/element.ts +8 -0
  298. package/src/parser/rules/inline/equation-ref/index.ts +34 -0
  299. package/src/parser/rules/inline/equation-ref/syntax.ts +45 -0
  300. package/src/parser/rules/inline/expr/branch.ts +104 -0
  301. package/src/parser/rules/inline/expr/conditional-branch.ts +27 -0
  302. package/src/parser/rules/inline/expr/conditional.ts +80 -0
  303. package/src/parser/rules/inline/expr/depth.ts +25 -0
  304. package/src/parser/rules/inline/expr/elements.ts +39 -0
  305. package/src/parser/rules/inline/expr/index.ts +84 -0
  306. package/src/parser/rules/inline/expr/syntax.ts +45 -0
  307. package/src/parser/rules/inline/footnote/child.ts +22 -0
  308. package/src/parser/rules/inline/footnote/close.ts +33 -0
  309. package/src/parser/rules/inline/footnote/content.ts +54 -0
  310. package/src/parser/rules/inline/footnote/elements.ts +38 -0
  311. package/src/parser/rules/inline/footnote/index.ts +54 -0
  312. package/src/parser/rules/inline/footnote/newline.ts +27 -0
  313. package/src/parser/rules/inline/footnote/open.ts +38 -0
  314. package/src/parser/rules/inline/formatting/container.ts +50 -0
  315. package/src/parser/rules/inline/{guillemet.ts → guillemet/index.ts} +5 -13
  316. package/src/parser/rules/inline/guillemet/text.ts +11 -0
  317. package/src/parser/rules/inline/html/gate.ts +64 -0
  318. package/src/parser/rules/inline/{html.ts → html/index.ts} +9 -60
  319. package/src/parser/rules/inline/html/open.ts +37 -0
  320. package/src/parser/rules/inline/image/attributes.ts +22 -0
  321. package/src/parser/rules/inline/image/body.ts +36 -0
  322. package/src/parser/rules/inline/image/index.ts +89 -0
  323. package/src/parser/rules/inline/image/open.ts +56 -0
  324. package/src/parser/rules/inline/image/source.ts +62 -0
  325. package/src/parser/rules/inline/image/syntax.ts +76 -0
  326. package/src/parser/rules/inline/italic.ts +2 -30
  327. package/src/parser/rules/inline/line-break/backslash.ts +58 -0
  328. package/src/parser/rules/inline/line-break/elements.ts +9 -0
  329. package/src/parser/rules/inline/line-break/index.ts +3 -0
  330. package/src/parser/rules/inline/line-break/newline.ts +82 -0
  331. package/src/parser/rules/inline/line-break/underscore.ts +45 -0
  332. package/src/parser/rules/inline/link-anchor.ts +6 -81
  333. package/src/parser/rules/inline/link-bracket/anchor.ts +3 -0
  334. package/src/parser/rules/inline/link-bracket/direct-url.ts +5 -0
  335. package/src/parser/rules/inline/link-bracket/parsed.ts +81 -0
  336. package/src/parser/rules/inline/link-bracket/parts.ts +64 -0
  337. package/src/parser/rules/inline/link-bracket/prefix.ts +15 -0
  338. package/src/parser/rules/inline/link-single.ts +7 -98
  339. package/src/parser/rules/inline/link-star.ts +7 -69
  340. package/src/parser/rules/inline/link-triple/fallback.ts +10 -0
  341. package/src/parser/rules/inline/link-triple/index.ts +62 -0
  342. package/src/parser/rules/inline/link-triple/interwiki.ts +11 -0
  343. package/src/parser/rules/inline/link-triple/label.ts +35 -0
  344. package/src/parser/rules/inline/link-triple/syntax.ts +72 -0
  345. package/src/parser/rules/inline/link-triple/target.ts +36 -0
  346. package/src/parser/rules/inline/math-inline/index.ts +40 -0
  347. package/src/parser/rules/inline/math-inline/syntax.ts +55 -0
  348. package/src/parser/rules/inline/monospace.ts +2 -30
  349. package/src/parser/rules/inline/parsing/block-boundary.ts +42 -0
  350. package/src/parser/rules/inline/parsing/block-start-predicates.ts +117 -0
  351. package/src/parser/rules/inline/parsing/collect.ts +23 -0
  352. package/src/parser/rules/inline/parsing/inline-content.ts +115 -0
  353. package/src/parser/rules/inline/parsing/paragraph-boundary.ts +47 -0
  354. package/src/parser/rules/inline/parsing/plain-text.ts +69 -0
  355. package/src/parser/rules/inline/parsing/preserved-line-break.ts +11 -0
  356. package/src/parser/rules/inline/parsing/rules.ts +34 -0
  357. package/src/parser/rules/inline/parsing/simple-token.ts +26 -0
  358. package/src/parser/rules/inline/raw/angle.ts +40 -0
  359. package/src/parser/rules/inline/raw/double-at.ts +78 -0
  360. package/src/parser/rules/inline/raw/index.ts +26 -0
  361. package/src/parser/rules/inline/raw/result.ts +26 -0
  362. package/src/parser/rules/inline/size/content.ts +65 -0
  363. package/src/parser/rules/inline/size/index.ts +55 -0
  364. package/src/parser/rules/inline/size/open.ts +43 -0
  365. package/src/parser/rules/inline/size/value.ts +45 -0
  366. package/src/parser/rules/inline/span/content.ts +97 -0
  367. package/src/parser/rules/inline/span/elements.ts +108 -0
  368. package/src/parser/rules/inline/span/index.ts +79 -0
  369. package/src/parser/rules/inline/span/newline.ts +50 -0
  370. package/src/parser/rules/inline/span/syntax.ts +70 -0
  371. package/src/parser/rules/inline/{strikethrough.ts → strikethrough/index.ts} +5 -60
  372. package/src/parser/rules/inline/strikethrough/parse.ts +14 -0
  373. package/src/parser/rules/inline/strikethrough/syntax.ts +24 -0
  374. package/src/parser/rules/inline/subscript.ts +2 -39
  375. package/src/parser/rules/inline/superscript.ts +4 -39
  376. package/src/parser/rules/inline/text/element.ts +5 -0
  377. package/src/parser/rules/inline/{text.ts → text/index.ts} +5 -4
  378. package/src/parser/rules/inline/underline/child.ts +26 -0
  379. package/src/parser/rules/inline/underline/content.ts +29 -0
  380. package/src/parser/rules/inline/{underline.ts → underline/index.ts} +6 -49
  381. package/src/parser/rules/inline/user/element.ts +11 -0
  382. package/src/parser/rules/inline/user/index.ts +34 -0
  383. package/src/parser/rules/inline/user/syntax.ts +67 -0
  384. package/src/parser/rules/inline/utils.ts +4 -344
  385. package/src/parser/rules/tokens.ts +106 -0
  386. package/src/parser/rules/types.ts +9 -252
  387. package/src/parser/depth.ts +0 -251
  388. package/src/parser/parse.ts +0 -315
  389. package/src/parser/postprocess/spanStrip.ts +0 -697
  390. package/src/parser/preprocess/expr.ts +0 -265
  391. package/src/parser/preprocess/utils.ts +0 -250
  392. package/src/parser/preprocess/whitespace.ts +0 -111
  393. package/src/parser/rules/block/align.ts +0 -282
  394. package/src/parser/rules/block/bibliography.ts +0 -359
  395. package/src/parser/rules/block/block-list.ts +0 -689
  396. package/src/parser/rules/block/blockquote.ts +0 -238
  397. package/src/parser/rules/block/code.ts +0 -187
  398. package/src/parser/rules/block/collapsible.ts +0 -337
  399. package/src/parser/rules/block/definition-list.ts +0 -270
  400. package/src/parser/rules/block/div.ts +0 -400
  401. package/src/parser/rules/block/embed-block.ts +0 -153
  402. package/src/parser/rules/block/footnoteblock.ts +0 -200
  403. package/src/parser/rules/block/heading.ts +0 -142
  404. package/src/parser/rules/block/html.ts +0 -222
  405. package/src/parser/rules/block/iframe.ts +0 -239
  406. package/src/parser/rules/block/include.ts +0 -179
  407. package/src/parser/rules/block/list.ts +0 -244
  408. package/src/parser/rules/block/math.ts +0 -183
  409. package/src/parser/rules/block/module/include/resolve.ts +0 -556
  410. package/src/parser/rules/block/module/listpages/types.ts +0 -513
  411. package/src/parser/rules/block/module/walk.ts +0 -380
  412. package/src/parser/rules/block/module.ts +0 -164
  413. package/src/parser/rules/block/orphan-li.ts +0 -177
  414. package/src/parser/rules/block/paragraph.ts +0 -157
  415. package/src/parser/rules/block/table-block.ts +0 -726
  416. package/src/parser/rules/block/table.ts +0 -441
  417. package/src/parser/rules/block/tabview.ts +0 -331
  418. package/src/parser/rules/block/toc.ts +0 -129
  419. package/src/parser/rules/inline/anchor-name.ts +0 -154
  420. package/src/parser/rules/inline/anchor.ts +0 -327
  421. package/src/parser/rules/inline/bibcite.ts +0 -153
  422. package/src/parser/rules/inline/color.ts +0 -140
  423. package/src/parser/rules/inline/equation-ref.ts +0 -115
  424. package/src/parser/rules/inline/expr.ts +0 -526
  425. package/src/parser/rules/inline/footnote.ts +0 -223
  426. package/src/parser/rules/inline/image.ts +0 -328
  427. package/src/parser/rules/inline/line-break.ts +0 -326
  428. package/src/parser/rules/inline/link-triple.ts +0 -267
  429. package/src/parser/rules/inline/math-inline.ts +0 -126
  430. package/src/parser/rules/inline/raw.ts +0 -262
  431. package/src/parser/rules/inline/size.ts +0 -244
  432. package/src/parser/rules/inline/span.ts +0 -424
  433. package/src/parser/rules/inline/user.ts +0 -147
@@ -1,380 +0,0 @@
1
- /**
2
- *
3
- * AST element traversal and transformation utilities.
4
- *
5
- * Provides shared logic for recursively visiting and transforming child elements
6
- * across all AST node types that contain nested elements. The AST has several
7
- * "special" structures (list, table, definition-list, tab-view) that store
8
- * children in type-specific locations, plus a generic pattern where elements
9
- * are stored in `data.elements`. These utilities abstract over those differences
10
- * so callers can focus on their transformation logic.
11
- *
12
- * Three main functions are provided:
13
- * - `walkElements` - Read-only traversal (visitor pattern)
14
- * - `mapElementChildren` - Stateless transformation of child arrays
15
- * - `mapElementChildrenWithState` - Stateful transformation with threaded state
16
- *
17
- * Used by the ListPages extraction, module resolution, and include resolution systems.
18
- *
19
- * @module
20
- */
21
-
22
- import type {
23
- Element,
24
- ListData,
25
- ListItem,
26
- TableData,
27
- TableRow,
28
- TableCell,
29
- DefinitionListItem,
30
- TabData,
31
- } from "@wdprlib/ast";
32
-
33
- /**
34
- * Walk all elements recursively in depth-first order, calling a callback for each.
35
- *
36
- * The callback is invoked for every element in the tree, including elements nested
37
- * inside lists, tables, definition lists, tab views, and any element with a
38
- * `data.elements` array. The callback is called before descending into children
39
- * (pre-order traversal).
40
- *
41
- * This is a read-only traversal; the callback cannot modify the tree structure.
42
- * Use `mapElementChildren` or `mapElementChildrenWithState` for transformations.
43
- *
44
- * @param elements - Array of elements to traverse
45
- * @param callback - Function called for each element encountered
46
- */
47
- export function walkElements(elements: Element[], callback: (element: Element) => void): void {
48
- for (const element of elements) {
49
- callback(element);
50
-
51
- // List
52
- if (element.element === "list") {
53
- const listData = element.data as ListData;
54
- for (const item of listData.items) {
55
- if (item["item-type"] === "elements") {
56
- walkElements(item.elements, callback);
57
- } else if (item["item-type"] === "sub-list") {
58
- walkElements([{ element: "list", data: item.data } as Element], callback);
59
- }
60
- }
61
- continue;
62
- }
63
-
64
- // Table
65
- if (element.element === "table") {
66
- const tableData = element.data as TableData;
67
- for (const row of tableData.rows) {
68
- for (const cell of row.cells) {
69
- walkElements(cell.elements, callback);
70
- }
71
- }
72
- continue;
73
- }
74
-
75
- // Definition list
76
- if (element.element === "definition-list") {
77
- const defListData = element.data as DefinitionListItem[];
78
- for (const item of defListData) {
79
- walkElements(item.key, callback);
80
- walkElements(item.value, callback);
81
- }
82
- continue;
83
- }
84
-
85
- // Tab view
86
- if (element.element === "tab-view") {
87
- const tabData = element.data as TabData[];
88
- for (const tab of tabData) {
89
- walkElements(tab.elements, callback);
90
- }
91
- continue;
92
- }
93
-
94
- // Generic elements with data.elements
95
- if ("data" in element && element.data && typeof element.data === "object") {
96
- const data = element.data as Record<string, unknown>;
97
- if ("elements" in data && Array.isArray(data.elements)) {
98
- walkElements(data.elements as Element[], callback);
99
- }
100
- }
101
- }
102
- }
103
-
104
- /**
105
- * Create a new element with all child element arrays transformed by a function.
106
- *
107
- * This is a structural mapper that knows how to find child element arrays in all
108
- * AST node types (list items, table cells, definition list keys/values, tab panels,
109
- * and generic `data.elements`). The transform function receives each child array
110
- * and returns a new array; the original element is not mutated.
111
- *
112
- * If the element has no children, it is returned unchanged (same reference).
113
- *
114
- * @param element - The element whose children should be transformed
115
- * @param transform - Function that receives a child element array and returns a transformed array
116
- * @returns A new element with transformed children, or the original element if it has no children
117
- */
118
- export function mapElementChildren(
119
- element: Element,
120
- transform: (elements: Element[]) => Element[],
121
- ): Element {
122
- // List
123
- if (element.element === "list") {
124
- const listData = element.data as ListData;
125
- const newItems: ListItem[] = [];
126
-
127
- for (const item of listData.items) {
128
- if (item["item-type"] === "elements") {
129
- newItems.push({
130
- "item-type": "elements",
131
- attributes: item.attributes,
132
- elements: transform(item.elements),
133
- });
134
- } else if (item["item-type"] === "sub-list") {
135
- const subListResult = transform([{ element: "list", data: item.data } as Element]);
136
- const resolvedList = subListResult[0];
137
- if (resolvedList?.element === "list") {
138
- newItems.push({
139
- "item-type": "sub-list",
140
- element: "list",
141
- data: resolvedList.data as ListData,
142
- });
143
- } else {
144
- newItems.push(item);
145
- }
146
- }
147
- }
148
-
149
- return {
150
- element: "list",
151
- data: { ...listData, items: newItems },
152
- } as Element;
153
- }
154
-
155
- // Table
156
- if (element.element === "table") {
157
- const tableData = element.data as TableData;
158
- const newRows: TableRow[] = [];
159
-
160
- for (const row of tableData.rows) {
161
- const newCells: TableCell[] = [];
162
- for (const cell of row.cells) {
163
- newCells.push({ ...cell, elements: transform(cell.elements) });
164
- }
165
- newRows.push({ ...row, cells: newCells });
166
- }
167
-
168
- return {
169
- element: "table",
170
- data: { ...tableData, rows: newRows },
171
- } as Element;
172
- }
173
-
174
- // Definition list
175
- if (element.element === "definition-list") {
176
- const defListData = element.data as DefinitionListItem[];
177
- const newItems: DefinitionListItem[] = [];
178
-
179
- for (const item of defListData) {
180
- newItems.push({
181
- key_string: item.key_string,
182
- key: transform(item.key),
183
- value: transform(item.value),
184
- });
185
- }
186
-
187
- return {
188
- element: "definition-list",
189
- data: newItems,
190
- } as Element;
191
- }
192
-
193
- // Tab view
194
- if (element.element === "tab-view") {
195
- const tabData = element.data as TabData[];
196
- const newTabs: TabData[] = [];
197
-
198
- for (const tab of tabData) {
199
- newTabs.push({ ...tab, elements: transform(tab.elements) });
200
- }
201
-
202
- return {
203
- element: "tab-view",
204
- data: newTabs,
205
- } as Element;
206
- }
207
-
208
- // Generic elements with data.elements
209
- if ("data" in element && element.data && typeof element.data === "object") {
210
- const data = element.data as Record<string, unknown>;
211
- if ("elements" in data && Array.isArray(data.elements)) {
212
- return {
213
- ...element,
214
- data: {
215
- ...data,
216
- elements: transform(data.elements as Element[]),
217
- },
218
- } as Element;
219
- }
220
- }
221
-
222
- // No children
223
- return element;
224
- }
225
-
226
- /**
227
- * Create a new element with all child arrays transformed by a stateful function.
228
- *
229
- * Like `mapElementChildren`, but the transform function also receives and returns
230
- * a state value. State is threaded sequentially through each child group: the output
231
- * state from one group becomes the input state for the next. This is useful when
232
- * the transformation needs to track information across sibling groups, such as
233
- * maintaining a monotonically increasing ID counter.
234
- *
235
- * @typeParam S - The type of the threaded state
236
- * @param element - The element whose children should be transformed
237
- * @param state - Initial state value
238
- * @param transform - Function that receives a child array and current state,
239
- * returning transformed elements and updated state
240
- * @returns Object with the new element and final state value
241
- */
242
- export function mapElementChildrenWithState<S>(
243
- element: Element,
244
- state: S,
245
- transform: (elements: Element[], state: S) => { elements: Element[]; state: S },
246
- ): { element: Element; state: S } {
247
- // List
248
- if (element.element === "list") {
249
- const listData = element.data as ListData;
250
- const newItems: ListItem[] = [];
251
- let currentState = state;
252
-
253
- for (const item of listData.items) {
254
- if (item["item-type"] === "elements") {
255
- const result = transform(item.elements, currentState);
256
- newItems.push({
257
- "item-type": "elements",
258
- attributes: item.attributes,
259
- elements: result.elements,
260
- });
261
- currentState = result.state;
262
- } else if (item["item-type"] === "sub-list") {
263
- const result = transform([{ element: "list", data: item.data } as Element], currentState);
264
- const resolvedList = result.elements[0];
265
- if (resolvedList?.element === "list") {
266
- newItems.push({
267
- "item-type": "sub-list",
268
- element: "list",
269
- data: resolvedList.data as ListData,
270
- });
271
- } else {
272
- newItems.push(item);
273
- }
274
- currentState = result.state;
275
- }
276
- }
277
-
278
- return {
279
- element: {
280
- element: "list",
281
- data: { ...listData, items: newItems },
282
- } as Element,
283
- state: currentState,
284
- };
285
- }
286
-
287
- // Table
288
- if (element.element === "table") {
289
- const tableData = element.data as TableData;
290
- const newRows: TableRow[] = [];
291
- let currentState = state;
292
-
293
- for (const row of tableData.rows) {
294
- const newCells: TableCell[] = [];
295
- for (const cell of row.cells) {
296
- const result = transform(cell.elements, currentState);
297
- newCells.push({ ...cell, elements: result.elements });
298
- currentState = result.state;
299
- }
300
- newRows.push({ ...row, cells: newCells });
301
- }
302
-
303
- return {
304
- element: {
305
- element: "table",
306
- data: { ...tableData, rows: newRows },
307
- } as Element,
308
- state: currentState,
309
- };
310
- }
311
-
312
- // Definition list
313
- if (element.element === "definition-list") {
314
- const defListData = element.data as DefinitionListItem[];
315
- const newItems: DefinitionListItem[] = [];
316
- let currentState = state;
317
-
318
- for (const item of defListData) {
319
- const keyResult = transform(item.key, currentState);
320
- currentState = keyResult.state;
321
- const valueResult = transform(item.value, currentState);
322
- currentState = valueResult.state;
323
- newItems.push({
324
- key_string: item.key_string,
325
- key: keyResult.elements,
326
- value: valueResult.elements,
327
- });
328
- }
329
-
330
- return {
331
- element: {
332
- element: "definition-list",
333
- data: newItems,
334
- } as Element,
335
- state: currentState,
336
- };
337
- }
338
-
339
- // Tab view
340
- if (element.element === "tab-view") {
341
- const tabData = element.data as TabData[];
342
- const newTabs: TabData[] = [];
343
- let currentState = state;
344
-
345
- for (const tab of tabData) {
346
- const result = transform(tab.elements, currentState);
347
- newTabs.push({ ...tab, elements: result.elements });
348
- currentState = result.state;
349
- }
350
-
351
- return {
352
- element: {
353
- element: "tab-view",
354
- data: newTabs,
355
- } as Element,
356
- state: currentState,
357
- };
358
- }
359
-
360
- // Generic elements with data.elements
361
- if ("data" in element && element.data && typeof element.data === "object") {
362
- const data = element.data as Record<string, unknown>;
363
- if ("elements" in data && Array.isArray(data.elements)) {
364
- const result = transform(data.elements as Element[], state);
365
- return {
366
- element: {
367
- ...element,
368
- data: {
369
- ...data,
370
- elements: result.elements,
371
- },
372
- } as Element,
373
- state: result.state,
374
- };
375
- }
376
- }
377
-
378
- // No children
379
- return { element, state };
380
- }
@@ -1,164 +0,0 @@
1
- import type { Element } from "@wdprlib/ast";
2
- import type { BlockRule, ParseContext, RuleResult } from "../types";
3
- import { currentToken } from "../types";
4
- import { parseBlockName } from "../utils";
5
- import { parseAttributesRaw } from "./utils";
6
- import { getModuleRuleByName } from "./module/mapping";
7
-
8
- export const moduleRule: BlockRule = {
9
- name: "module",
10
- startTokens: ["BLOCK_OPEN"],
11
- requiresLineStart: false,
12
-
13
- parse(ctx: ParseContext): RuleResult<Element> {
14
- const openToken = currentToken(ctx);
15
- if (openToken.type !== "BLOCK_OPEN") {
16
- return { success: false };
17
- }
18
-
19
- let pos = ctx.pos + 1;
20
- let consumed = 1;
21
-
22
- const nameResult = parseBlockName(ctx, pos);
23
- if (!nameResult || (nameResult.name !== "module" && nameResult.name !== "module654")) {
24
- return { success: false };
25
- }
26
-
27
- // Page syntax disabled (e.g., forum-post mode)
28
- if (!ctx.settings.enablePageSyntax) {
29
- return { success: false };
30
- }
31
-
32
- pos += nameResult.consumed;
33
- consumed += nameResult.consumed;
34
-
35
- // Skip whitespace
36
- while (ctx.tokens[pos]?.type === "WHITESPACE") {
37
- pos++;
38
- consumed++;
39
- }
40
-
41
- // Get module name (next TEXT or IDENTIFIER token)
42
- let moduleName = "";
43
- const nameToken = ctx.tokens[pos];
44
- if (nameToken?.type === "TEXT" || nameToken?.type === "IDENTIFIER") {
45
- moduleName = nameToken.value;
46
- pos++;
47
- consumed++;
48
- }
49
-
50
- // Parse remaining attributes
51
- const attrResult = parseAttributesRaw(ctx, pos);
52
- pos += attrResult.consumed;
53
- consumed += attrResult.consumed;
54
-
55
- // Expect ]]
56
- if (ctx.tokens[pos]?.type !== "BLOCK_CLOSE") {
57
- return { success: false };
58
- }
59
- pos++;
60
- consumed++;
61
-
62
- // Dispatch to specific module parser
63
- const moduleParseRule = getModuleRuleByName(moduleName);
64
-
65
- // Check for body based on module rule's hasBody flag
66
- // For unknown modules, default to no body (they will be parsed as bodyless)
67
- let body: string | undefined;
68
- const moduleHasBody = moduleParseRule?.hasBody ?? false;
69
-
70
- if (moduleHasBody && ctx.tokens[pos]?.type === "NEWLINE") {
71
- pos++;
72
- consumed++;
73
-
74
- let bodyContent = "";
75
- let foundClose = false;
76
- while (pos < ctx.tokens.length) {
77
- const token = ctx.tokens[pos];
78
- if (!token || token.type === "EOF") {
79
- break;
80
- }
81
-
82
- if (token.type === "BLOCK_END_OPEN") {
83
- const closeNameResult = parseBlockName(ctx, pos + 1);
84
- if (
85
- closeNameResult &&
86
- (closeNameResult.name === "module" || closeNameResult.name === "module654")
87
- ) {
88
- foundClose = true;
89
- pos++;
90
- consumed++;
91
- pos += closeNameResult.consumed;
92
- consumed += closeNameResult.consumed;
93
- if (ctx.tokens[pos]?.type === "BLOCK_CLOSE") {
94
- pos++;
95
- consumed++;
96
- }
97
- if (ctx.tokens[pos]?.type === "NEWLINE") {
98
- pos++;
99
- consumed++;
100
- }
101
- break;
102
- }
103
- }
104
-
105
- bodyContent += token.value;
106
- pos++;
107
- consumed++;
108
- }
109
-
110
- if (!foundClose) {
111
- ctx.diagnostics.push({
112
- severity: "warning",
113
- code: "unclosed-block",
114
- message: "Missing closing tag [[/module]] for [[module]]",
115
- position: openToken.position,
116
- });
117
- }
118
-
119
- if (bodyContent.trim()) {
120
- body = bodyContent.trim();
121
- }
122
- }
123
-
124
- if (moduleParseRule) {
125
- const result = moduleParseRule.parse(ctx, pos, attrResult.attrs, body);
126
-
127
- // Element を直接返すモジュール(CSS等)
128
- if ("element" in result) {
129
- return {
130
- success: true,
131
- elements: [result as Element],
132
- consumed,
133
- };
134
- }
135
-
136
- return {
137
- success: true,
138
- elements: [
139
- {
140
- element: "module",
141
- data: result,
142
- },
143
- ],
144
- consumed,
145
- };
146
- }
147
-
148
- return {
149
- success: true,
150
- elements: [
151
- {
152
- element: "module",
153
- data: {
154
- module: "unknown",
155
- name: moduleName,
156
- arguments: attrResult.attrs,
157
- body,
158
- },
159
- },
160
- ],
161
- consumed,
162
- };
163
- },
164
- };