@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,238 +0,0 @@
1
- /**
2
- *
3
- * Block rule for Wikidot-style blockquotes using `>` markers.
4
- *
5
- * Wikidot blockquotes are written with one or more `>` characters at the
6
- * start of a line, followed by a mandatory space and then the content:
7
- *
8
- * ```
9
- * > First level
10
- * >> Second level
11
- * > Back to first
12
- * ```
13
- *
14
- * Key behaviours:
15
- * - The depth is determined by the number of consecutive `>` characters.
16
- * - A space after the `>` markers is required; lines like `>No space` are
17
- * consumed but silently discarded from output.
18
- * - An empty line (just `> `) within the same depth acts as a paragraph
19
- * separator inside the blockquote.
20
- * - Nesting is handled by the generic {@link processDepths} utility, which
21
- * converts flat depth-annotated rows into a recursive tree structure.
22
- * - Maximum depth is capped at `MAX_BLOCKQUOTE_DEPTH` (30) to guard
23
- * against pathological input.
24
- *
25
- * @module
26
- */
27
- import type { Element } from "@wdprlib/ast";
28
- import type { BlockRule, ParseContext, RuleResult } from "../types";
29
- import { currentToken } from "../types";
30
- import { parseInlineUntil } from "../inline/utils";
31
- import { processDepths, type DepthList } from "../../depth";
32
-
33
- /**
34
- * Safety limit for blockquote nesting depth.
35
- * Lines exceeding this depth are not parsed, preventing stack issues
36
- * on deeply nested or malicious input.
37
- */
38
- const MAX_BLOCKQUOTE_DEPTH = 30;
39
-
40
- /**
41
- * Block rule for `>` prefix blockquotes.
42
- *
43
- * Parsing strategy:
44
- * 1. Collect consecutive lines that begin with BLOCKQUOTE_MARKER at line start.
45
- * 2. For each line, record the depth (number of `>` chars, zero-indexed)
46
- * and parse the inline content after the mandatory space.
47
- * 3. Lines missing the required space are consumed but produce no output.
48
- * 4. Feed the flat depth list into {@link processDepths} to build a nested tree.
49
- * 5. Recursively convert the tree into nested blockquote container elements
50
- * via `buildBlockquoteElement()`.
51
- */
52
- export const blockquoteRule: BlockRule = {
53
- name: "blockquote",
54
- startTokens: ["BLOCKQUOTE_MARKER"],
55
- requiresLineStart: true,
56
-
57
- parse(ctx: ParseContext): RuleResult<Element> {
58
- const firstToken = currentToken(ctx);
59
-
60
- if (!firstToken.lineStart) {
61
- return { success: false };
62
- }
63
-
64
- // Collect depth-annotated lines
65
- const depths: Array<{
66
- depth: number;
67
- ltype: null;
68
- value: { elements: Element[]; hasLineBreak: boolean };
69
- }> = [];
70
- let pos = ctx.pos;
71
- let consumed = 0;
72
-
73
- while (pos < ctx.tokens.length) {
74
- const markerToken = ctx.tokens[pos];
75
- if (!markerToken || !markerToken.lineStart || markerToken.type !== "BLOCKQUOTE_MARKER") {
76
- break;
77
- }
78
-
79
- // Depth is determined by the number of > characters
80
- // Token value is like ">", ">>", ">>>", etc.
81
- const depth = markerToken.value.length;
82
-
83
- // Check maximum depth to prevent DOS
84
- if (depth > MAX_BLOCKQUOTE_DEPTH) {
85
- break;
86
- }
87
-
88
- // Skip marker
89
- pos++;
90
- consumed++;
91
-
92
- // Wikidot requires a space after > markers
93
- // Lines without space (e.g. ">No") are consumed but not output
94
- if (ctx.tokens[pos]?.type !== "WHITESPACE") {
95
- // Consume rest of line silently
96
- while (pos < ctx.tokens.length && ctx.tokens[pos]?.type !== "NEWLINE") {
97
- pos++;
98
- consumed++;
99
- }
100
- if (ctx.tokens[pos]?.type === "NEWLINE") {
101
- pos++;
102
- consumed++;
103
- }
104
- continue;
105
- }
106
-
107
- // Skip whitespace after marker
108
- while (ctx.tokens[pos]?.type === "WHITESPACE") {
109
- pos++;
110
- consumed++;
111
- }
112
-
113
- // Parse inline content until newline or paragraph break
114
- const inlineCtx: ParseContext = { ...ctx, pos };
115
- const inlineResult = parseInlineUntil(inlineCtx, "NEWLINE");
116
- const inlineChildren: Element[] = inlineResult.elements;
117
- consumed += inlineResult.consumed;
118
- pos += inlineResult.consumed;
119
-
120
- // Check if there's a line break
121
- let hasLineBreak = false;
122
- if (ctx.tokens[pos]?.type === "NEWLINE") {
123
- hasLineBreak = true;
124
- pos++;
125
- consumed++;
126
- }
127
-
128
- // Append depth item (depth is 0-indexed, so subtract 1)
129
- depths.push({
130
- depth: depth - 1,
131
- ltype: null,
132
- value: { elements: inlineChildren, hasLineBreak },
133
- });
134
- }
135
-
136
- // No rows parsed
137
- if (depths.length === 0) {
138
- // If we consumed tokens (e.g. lines without space after >), return empty success
139
- if (consumed > 0) {
140
- return { success: true, elements: [], consumed };
141
- }
142
- return { success: false };
143
- }
144
-
145
- // Process depths to build nested structure
146
- const depthTrees = processDepths<null, { elements: Element[]; hasLineBreak: boolean }>(
147
- null,
148
- depths,
149
- );
150
-
151
- // Convert depth trees to blockquote elements
152
- const blockquotes = depthTrees.map(({ list }) => buildBlockquoteElement(list));
153
-
154
- // Return first blockquote (should usually be only one)
155
- if (blockquotes.length === 0) {
156
- return { success: false };
157
- }
158
-
159
- return {
160
- success: true,
161
- elements: blockquotes,
162
- consumed,
163
- };
164
- },
165
- };
166
-
167
- /**
168
- * Recursively converts a depth-tree (produced by `processDepths()`) into
169
- * a blockquote container element.
170
- *
171
- * Leaf items are accumulated into paragraph containers. An empty-content
172
- * item acts as a paragraph separator. When a nested sub-list is encountered,
173
- * the current paragraph is flushed and a child blockquote is created.
174
- *
175
- * @param list - The depth list to convert.
176
- * @returns A container element with `type: "blockquote"`.
177
- */
178
- function buildBlockquoteElement(
179
- list: DepthList<null, { elements: Element[]; hasLineBreak: boolean }>,
180
- ): Element {
181
- const children: Element[] = [];
182
- let currentParagraphChildren: Element[] = [];
183
-
184
- function flushParagraph() {
185
- if (currentParagraphChildren.length > 0) {
186
- // Remove trailing line break from paragraph
187
- while (
188
- currentParagraphChildren.length > 0 &&
189
- currentParagraphChildren[currentParagraphChildren.length - 1]?.element === "line-break"
190
- ) {
191
- currentParagraphChildren.pop();
192
- }
193
- if (currentParagraphChildren.length > 0) {
194
- children.push({
195
- element: "container",
196
- data: {
197
- type: "paragraph",
198
- attributes: {},
199
- elements: currentParagraphChildren,
200
- },
201
- });
202
- }
203
- currentParagraphChildren = [];
204
- }
205
- }
206
-
207
- for (const item of list) {
208
- if (item.kind === "item") {
209
- // Empty content line (e.g. "> ") acts as paragraph separator
210
- if (item.value.elements.length === 0) {
211
- flushParagraph();
212
- continue;
213
- }
214
- // Add elements to current paragraph
215
- currentParagraphChildren.push(...item.value.elements);
216
- // Add line break after this line
217
- if (item.value.hasLineBreak) {
218
- currentParagraphChildren.push({ element: "line-break" });
219
- }
220
- } else {
221
- // Nested blockquote - flush current paragraph and add nested blockquote
222
- flushParagraph();
223
- children.push(buildBlockquoteElement(item.children));
224
- }
225
- }
226
-
227
- // Flush remaining paragraph content
228
- flushParagraph();
229
-
230
- return {
231
- element: "container",
232
- data: {
233
- type: "blockquote",
234
- attributes: {},
235
- elements: children,
236
- },
237
- };
238
- }
@@ -1,187 +0,0 @@
1
- /**
2
- *
3
- * Block rule for the Wikidot code block: `[[code]]...[[/code]]`.
4
- *
5
- * A code block captures its body as raw text (no inline parsing) and
6
- * supports two optional attributes:
7
- * - `type` -- the programming language for syntax highlighting (e.g.
8
- * `type="python"`).
9
- * - `name` -- a label or filename displayed alongside the code.
10
- *
11
- * The content between the tags is collected verbatim, with a single
12
- * trailing newline stripped. The parsed block is also pushed into
13
- * `ctx.codeBlocks` so higher-level consumers can enumerate all code
14
- * blocks in the document.
15
- *
16
- * Edge case: when a quoted attribute value swallows the `]]` and even
17
- * the `[[/code]]` (e.g. `[[code type="css]][[/code]]`), the parser
18
- * detects this by inspecting the QUOTED_STRING token and truncates the
19
- * value at the first `]]`. If `[[/code]]` is also inside the quoted
20
- * string, the body is treated as empty.
21
- *
22
- * @module
23
- */
24
- import type { Element, CodeBlockData } from "@wdprlib/ast";
25
- import type { BlockRule, ParseContext, RuleResult } from "../types";
26
- import { currentToken } from "../types";
27
- import { parseBlockName } from "../utils";
28
- import { parseAttributesRaw } from "./utils";
29
-
30
- /**
31
- * Block rule for `[[code type="..." name="..."]]...[[/code]]`.
32
- *
33
- * Body content is stored as-is (not parsed for inline markup). The rule
34
- * also registers the code block in `ctx.codeBlocks` for document-level
35
- * introspection.
36
- */
37
- export const codeBlockRule: BlockRule = {
38
- name: "code",
39
- startTokens: ["BLOCK_OPEN"],
40
- requiresLineStart: false,
41
-
42
- parse(ctx: ParseContext): RuleResult<Element> {
43
- const openToken = currentToken(ctx);
44
- if (openToken.type !== "BLOCK_OPEN") {
45
- return { success: false };
46
- }
47
-
48
- let pos = ctx.pos + 1;
49
- let consumed = 1;
50
-
51
- // Parse block name
52
- const nameResult = parseBlockName(ctx, pos);
53
- if (!nameResult) {
54
- return { success: false };
55
- }
56
-
57
- if (nameResult.name !== "code") {
58
- return { success: false };
59
- }
60
-
61
- pos += nameResult.consumed;
62
- consumed += nameResult.consumed;
63
-
64
- // Parse attributes
65
- const attrResult = parseAttributesRaw(ctx, pos);
66
- pos += attrResult.consumed;
67
- consumed += attrResult.consumed;
68
-
69
- // Expect ]]
70
- let closingSwallowed = false;
71
- if (ctx.tokens[pos]?.type !== "BLOCK_CLOSE") {
72
- // Handle unclosed quoted string that swallowed ]]
73
- // e.g. [[code type="css]][[/code]] → QUOTED_STRING consumed both ]] and [[/code]]
74
- const prevToken = ctx.tokens[pos - 1];
75
- if (prevToken?.type === "QUOTED_STRING" && prevToken.value.includes("]]")) {
76
- const rawValue = prevToken.value;
77
- const bracketIdx = rawValue.indexOf("]]");
78
- const truncatedValue = rawValue.startsWith('"')
79
- ? rawValue.slice(1, bracketIdx)
80
- : rawValue.slice(0, bracketIdx);
81
- // Update the attr that was assigned this malformed value
82
- for (const key of Object.keys(attrResult.attrs)) {
83
- const stored = attrResult.attrs[key]!;
84
- if (
85
- stored === rawValue ||
86
- stored === rawValue.slice(1, -1) ||
87
- stored === rawValue.slice(1)
88
- ) {
89
- attrResult.attrs[key] = truncatedValue;
90
- break;
91
- }
92
- }
93
- // If [[/code]] is also inside the quoted string, content is empty
94
- if (rawValue.includes("[[/code]]")) {
95
- closingSwallowed = true;
96
- }
97
- } else {
98
- return { success: false };
99
- }
100
- } else {
101
- pos++;
102
- consumed++;
103
- }
104
-
105
- // Skip newline after opening tag if present
106
- if (ctx.tokens[pos]?.type === "NEWLINE") {
107
- pos++;
108
- consumed++;
109
- }
110
-
111
- // Collect raw content until [[/code]]
112
- let codeContent = "";
113
- let foundClose = closingSwallowed;
114
-
115
- while (!closingSwallowed && pos < ctx.tokens.length) {
116
- const token = ctx.tokens[pos];
117
- if (!token || token.type === "EOF") {
118
- break;
119
- }
120
-
121
- // Check for [[/code]]
122
- if (token.type === "BLOCK_END_OPEN") {
123
- const closeNameResult = parseBlockName(ctx, pos + 1);
124
- if (closeNameResult && closeNameResult.name === "code") {
125
- foundClose = true;
126
- // Skip [[/code]]
127
- pos++; // [[/
128
- consumed++;
129
- pos += closeNameResult.consumed; // code
130
- consumed += closeNameResult.consumed;
131
- // Skip ]]
132
- if (ctx.tokens[pos]?.type === "BLOCK_CLOSE") {
133
- pos++;
134
- consumed++;
135
- }
136
- // Skip trailing newline
137
- if (ctx.tokens[pos]?.type === "NEWLINE") {
138
- pos++;
139
- consumed++;
140
- }
141
- break;
142
- }
143
- }
144
-
145
- // Collect raw content (don't parse)
146
- codeContent += token.value;
147
- pos++;
148
- consumed++;
149
- }
150
-
151
- // Diagnostic for missing close tag
152
- if (!foundClose) {
153
- ctx.diagnostics.push({
154
- severity: "warning",
155
- code: "unclosed-block",
156
- message: "Missing closing tag [[/code]] for [[code]]",
157
- position: openToken.position,
158
- });
159
- }
160
-
161
- // Trim trailing newline from content
162
- codeContent = codeContent.replace(/\n$/, "");
163
-
164
- // Store code block in context
165
- const codeBlockData: CodeBlockData = {
166
- contents: codeContent,
167
- language: attrResult.attrs.type ?? null,
168
- name: attrResult.attrs.name ?? null,
169
- };
170
- ctx.codeBlocks.push(codeBlockData);
171
-
172
- return {
173
- success: true,
174
- elements: [
175
- {
176
- element: "code",
177
- data: {
178
- contents: codeContent,
179
- language: attrResult.attrs.type ?? null,
180
- name: attrResult.attrs.name ?? null,
181
- },
182
- },
183
- ],
184
- consumed,
185
- };
186
- },
187
- };