@wdprlib/parser 3.2.0 → 4.1.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 +10471 -8406
  2. package/dist/index.d.cts +313 -337
  3. package/dist/index.d.ts +313 -337
  4. package/dist/index.js +10457 -8392
  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 +30 -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 +62 -0
  195. package/src/parser/rules/block/module/listpages/url-resolution/value.ts +34 -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
@@ -0,0 +1,202 @@
1
+ import { scanIncludeDirectives } from "../scanner";
2
+ import { createIncludeReference } from "../references";
3
+ import { replaceOneInclude, replaceOneIncludeAsync } from "./replace";
4
+ import type {
5
+ AsyncIncludeFetcher,
6
+ IncludeDependency,
7
+ IncludeFetcher,
8
+ IncludeReference,
9
+ ResolveIncludesTraceResult,
10
+ } from "./types";
11
+
12
+ const MAYBE_INCLUDE_PATTERN = /\[\[include\s/i;
13
+
14
+ /**
15
+ * Iteratively expand all `[[include]]` directives in source text.
16
+ *
17
+ * Each iteration replaces every include directive in the current source
18
+ * with its fetched content after variable substitution. No recursion
19
+ * into individual includes: the next iteration handles nested includes.
20
+ */
21
+ export function expandIterative(
22
+ source: string,
23
+ fetcher: IncludeFetcher,
24
+ maxIterations: number,
25
+ ): string {
26
+ let current = source;
27
+ const replacementCache = new Map<string, string>();
28
+ for (let i = 0; i < maxIterations; i++) {
29
+ const expanded = expandOneIteration(current, fetcher, replacementCache);
30
+ if (expanded === null || expanded === current) break;
31
+ current = expanded;
32
+ }
33
+ return current;
34
+ }
35
+
36
+ /**
37
+ * Trace-enabled version of {@link expandIterative}.
38
+ *
39
+ * The expansion behavior is identical to the normal sync path; this function
40
+ * additionally records directives seen at each iteration so callers can build
41
+ * dependency graphs and debug max-iteration leftovers.
42
+ */
43
+ export function expandIterativeWithTrace(
44
+ source: string,
45
+ fetcher: IncludeFetcher,
46
+ maxIterations: number,
47
+ ): ResolveIncludesTraceResult {
48
+ let current = source;
49
+ const replacementCache = new Map<string, string>();
50
+ const dependencies: IncludeDependency[] = [];
51
+ const iterations: ResolveIncludesTraceResult["iterations"] = [];
52
+
53
+ for (let i = 0; i < maxIterations; i++) {
54
+ const expanded = expandOneIterationWithTrace(current, fetcher, replacementCache, i);
55
+ if (expanded === null) break;
56
+
57
+ dependencies.push(...expanded.dependencies);
58
+ iterations.push({
59
+ iteration: i,
60
+ directives: expanded.references,
61
+ changed: expanded.source !== current,
62
+ });
63
+
64
+ // Stable self-includes can keep scanning as directives forever; Wikidot-style
65
+ // expansion stops when a whole iteration no longer changes the source.
66
+ if (expanded.source === current) break;
67
+ current = expanded.source;
68
+ }
69
+
70
+ return {
71
+ source: current,
72
+ dependencies,
73
+ iterations,
74
+ // Hitting the cap only matters when the final source still contains a
75
+ // recognizable include directive. A fully expanded document can use exactly
76
+ // maxIterations passes without leaving work behind.
77
+ reachedMaxIterations:
78
+ iterations.length === maxIterations && scanIncludeDirectives(current).length > 0,
79
+ };
80
+ }
81
+
82
+ /**
83
+ * Async iterative expansion of `[[include]]` directives.
84
+ *
85
+ * Each iteration scans the current source for include directives, fetches
86
+ * sibling includes concurrently, and builds the replacement string in source
87
+ * order. Nested includes introduced by replacements are still handled by the
88
+ * next iteration.
89
+ */
90
+ export async function expandIterativeAsync(
91
+ source: string,
92
+ fetcher: AsyncIncludeFetcher,
93
+ maxIterations: number,
94
+ ): Promise<string> {
95
+ let current = source;
96
+ const replacementCache = new Map<string, Promise<string>>();
97
+ for (let i = 0; i < maxIterations; i++) {
98
+ const expanded = await expandOneIterationAsync(current, fetcher, replacementCache);
99
+ if (expanded === null || expanded === current) break;
100
+ current = expanded;
101
+ }
102
+ return current;
103
+ }
104
+
105
+ function expandOneIteration(
106
+ source: string,
107
+ fetcher: IncludeFetcher,
108
+ replacementCache: Map<string, string>,
109
+ ): string | null {
110
+ if (!MAYBE_INCLUDE_PATTERN.test(source)) return null;
111
+
112
+ const directives = scanIncludeDirectives(source);
113
+ if (directives.length === 0) return null;
114
+
115
+ const parts: string[] = [];
116
+ let lastPos = 0;
117
+ for (const { start, end, inner } of directives) {
118
+ parts.push(source.slice(lastPos, start), replaceCached(inner, fetcher, replacementCache));
119
+ lastPos = end;
120
+ }
121
+ parts.push(source.slice(lastPos));
122
+ return parts.join("");
123
+ }
124
+
125
+ function expandOneIterationWithTrace(
126
+ source: string,
127
+ fetcher: IncludeFetcher,
128
+ replacementCache: Map<string, string>,
129
+ iteration: number,
130
+ ): {
131
+ source: string;
132
+ references: IncludeReference[];
133
+ dependencies: IncludeDependency[];
134
+ } | null {
135
+ if (!MAYBE_INCLUDE_PATTERN.test(source)) return null;
136
+
137
+ const directives = scanIncludeDirectives(source);
138
+ if (directives.length === 0) return null;
139
+
140
+ const references = directives.map(createIncludeReference);
141
+ const dependencies = references.map((reference) => ({ ...reference, iteration }));
142
+ const parts: string[] = [];
143
+ let lastPos = 0;
144
+ for (const { start, end, inner } of directives) {
145
+ parts.push(source.slice(lastPos, start), replaceCached(inner, fetcher, replacementCache));
146
+ lastPos = end;
147
+ }
148
+ parts.push(source.slice(lastPos));
149
+
150
+ return {
151
+ source: parts.join(""),
152
+ references,
153
+ dependencies,
154
+ };
155
+ }
156
+
157
+ async function expandOneIterationAsync(
158
+ source: string,
159
+ fetcher: AsyncIncludeFetcher,
160
+ replacementCache: Map<string, Promise<string>>,
161
+ ): Promise<string | null> {
162
+ if (!MAYBE_INCLUDE_PATTERN.test(source)) return null;
163
+
164
+ const directives = scanIncludeDirectives(source);
165
+ if (directives.length === 0) return null;
166
+
167
+ const replacements = await Promise.all(
168
+ directives.map(({ inner }) => replaceCachedAsync(inner, fetcher, replacementCache)),
169
+ );
170
+
171
+ const parts: string[] = [];
172
+ let lastPos = 0;
173
+ for (let i = 0; i < directives.length; i++) {
174
+ const { start, end } = directives[i]!;
175
+ parts.push(source.slice(lastPos, start), replacements[i]!);
176
+ lastPos = end;
177
+ }
178
+ parts.push(source.slice(lastPos));
179
+ return parts.join("");
180
+ }
181
+
182
+ function replaceCached(inner: string, fetcher: IncludeFetcher, cache: Map<string, string>): string {
183
+ const cached = cache.get(inner);
184
+ if (cached !== undefined) return cached;
185
+
186
+ const replacement = replaceOneInclude(inner, fetcher);
187
+ cache.set(inner, replacement);
188
+ return replacement;
189
+ }
190
+
191
+ function replaceCachedAsync(
192
+ inner: string,
193
+ fetcher: AsyncIncludeFetcher,
194
+ cache: Map<string, Promise<string>>,
195
+ ): Promise<string> {
196
+ const cached = cache.get(inner);
197
+ if (cached) return cached;
198
+
199
+ const replacement = replaceOneIncludeAsync(inner, fetcher);
200
+ cache.set(inner, replacement);
201
+ return replacement;
202
+ }
@@ -0,0 +1,31 @@
1
+ import { parseIncludeDirective, substituteVariables } from "../directive";
2
+ import type { AsyncIncludeFetcher, IncludeFetcher } from "./types";
3
+
4
+ /**
5
+ * Replace a single include match with its fetched + variable-substituted content.
6
+ * Returns the replacement text for a single directive's `inner` content.
7
+ */
8
+ export function replaceOneInclude(inner: string, fetcher: IncludeFetcher): string {
9
+ const { location, assignments } = parseIncludeDirective(inner);
10
+ const content = fetcher(location);
11
+ if (content === null) {
12
+ return missingIncludeError(location.page);
13
+ }
14
+ return substituteVariables(content, assignments);
15
+ }
16
+
17
+ export async function replaceOneIncludeAsync(
18
+ inner: string,
19
+ fetcher: AsyncIncludeFetcher,
20
+ ): Promise<string> {
21
+ const { location, assignments } = parseIncludeDirective(inner);
22
+ const content = await fetcher(location);
23
+ if (content === null) {
24
+ return missingIncludeError(location.page);
25
+ }
26
+ return substituteVariables(content, assignments);
27
+ }
28
+
29
+ function missingIncludeError(page: string): string {
30
+ return `[[div class="error-block"]]\nPage to be included "${page}" cannot be found!\n[[/div]]`;
31
+ }
@@ -0,0 +1,105 @@
1
+ import type { PageRef, WikitextSettings } from "@wdprlib/ast";
2
+ import type { IncludeAssignment } from "../directive";
3
+
4
+ /**
5
+ * Callback to fetch page content for include resolution.
6
+ * Returns the wikitext source of the page, or null if the page does not exist.
7
+ *
8
+ * @security The fetcher is called with user-provided page references.
9
+ * Implementations should validate and sanitize page references before
10
+ * using them in database queries or file system access.
11
+ */
12
+ export type IncludeFetcher = (pageRef: PageRef) => string | null;
13
+
14
+ /**
15
+ * Async callback to fetch page content for include resolution.
16
+ * Returns a promise of the wikitext source, or null if the page does not exist.
17
+ *
18
+ * @security The fetcher is called with user-provided page references.
19
+ * Implementations should validate and sanitize page references before
20
+ * using them in database queries or file system access.
21
+ */
22
+ export type AsyncIncludeFetcher = (pageRef: PageRef) => Promise<string | null>;
23
+
24
+ /**
25
+ * Options for resolveIncludes / resolveIncludesAsync.
26
+ */
27
+ export interface ResolveIncludesOptions {
28
+ /**
29
+ * Maximum number of expansion iterations (default: 10).
30
+ *
31
+ * Each iteration replaces all `[[include]]` directives in the current
32
+ * source with fetched content. Iteration stops when the source is
33
+ * unchanged or this limit is reached.
34
+ */
35
+ maxIterations?: number;
36
+ /** Wikitext settings. If enablePageSyntax is false, includes are not expanded. */
37
+ settings?: WikitextSettings;
38
+ }
39
+
40
+ /**
41
+ * A single include directive found in raw source text.
42
+ *
43
+ * This represents the directive as it existed during the include expansion
44
+ * phase. It does not imply that the target exists, and it does not include
45
+ * nested dependencies introduced by the target source.
46
+ */
47
+ export interface IncludeReference {
48
+ /** Target page reference parsed from the directive. */
49
+ location: PageRef;
50
+ /** Variable assignments parsed from the directive, preserving source order. */
51
+ assignments: IncludeAssignment[];
52
+ /** Index of the opening `[[`. */
53
+ start: number;
54
+ /** Index just past the closing `]]`. */
55
+ end: number;
56
+ /** Text between `[[include ` and the closing `]]`. */
57
+ inner: string;
58
+ }
59
+
60
+ /**
61
+ * Include dependency observed during iterative expansion.
62
+ *
63
+ * Unlike `IncludeReference`, this is collected after a fetchable include layer
64
+ * has actually been expanded. If an included page introduces another include,
65
+ * that nested directive appears as a later `IncludeDependency` with a higher
66
+ * `iteration`.
67
+ */
68
+ export interface IncludeDependency extends IncludeReference {
69
+ /** Zero-based expansion iteration where this directive was observed. */
70
+ iteration: number;
71
+ }
72
+
73
+ /**
74
+ * Trace data for one include expansion iteration.
75
+ *
76
+ * `directives` is the scan result before replacements for that iteration.
77
+ * `changed` is false for stable self-includes where replacing the directive
78
+ * produces the same source again; the resolver stops at that point.
79
+ */
80
+ export interface IncludeIterationTrace {
81
+ /** Zero-based expansion iteration. */
82
+ iteration: number;
83
+ /** Include directives found in the source for this iteration. */
84
+ directives: IncludeReference[];
85
+ /** Whether replacing the directives changed the source. */
86
+ changed: boolean;
87
+ }
88
+
89
+ /**
90
+ * Result returned by trace-enabled include expansion.
91
+ *
92
+ * The `source` field is intended to be byte-for-byte equivalent to
93
+ * `resolveIncludes(source, fetcher, options)` for the same inputs. The rest of
94
+ * the object is diagnostic data for dependency collection and cache planning.
95
+ */
96
+ export interface ResolveIncludesTraceResult {
97
+ /** Final expanded source. */
98
+ source: string;
99
+ /** Include dependencies observed across all expansion iterations. */
100
+ dependencies: IncludeDependency[];
101
+ /** Per-iteration include scan and change information. */
102
+ iterations: IncludeIterationTrace[];
103
+ /** True when expansion stopped with directives still present after hitting the iteration cap. */
104
+ reachedMaxIterations: boolean;
105
+ }
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Matches the opening `[[include` token at the start of a line.
3
+ *
4
+ * The `m` flag makes `^` match at line boundaries, enforcing the Wikidot
5
+ * rule that `[[include]]` must appear at the start of a line. The trailing
6
+ * `\s` separates the directive name from its arguments. The actual extent
7
+ * of each directive is found by scanIncludeDirectives, which balances nested
8
+ * `[[ ... ]]` so that block markup inside a parameter value does not terminate
9
+ * the directive at the first `]]`.
10
+ */
11
+ const INCLUDE_OPEN_PATTERN = /^\[\[include\s/gim;
12
+ const OPEN_BRACKET = 91;
13
+ const CLOSE_BRACKET = 93;
14
+
15
+ /** A located `[[include ...]]` directive with bracket-balanced extent. */
16
+ export interface IncludeDirectiveMatch {
17
+ /** Index of the opening `[[`. */
18
+ start: number;
19
+ /** Index just past the closing `]]`. */
20
+ end: number;
21
+ /** Text between `[[include ` and the closing `]]`. */
22
+ inner: string;
23
+ }
24
+
25
+ /**
26
+ * Find all `[[include ...]]` directives in `source`, choosing each
27
+ * closing `]]` so that block markup inside a parameter value does not
28
+ * end the directive prematurely.
29
+ */
30
+ export function scanIncludeDirectives(source: string): IncludeDirectiveMatch[] {
31
+ const matches: IncludeDirectiveMatch[] = [];
32
+ const opener = INCLUDE_OPEN_PATTERN;
33
+ opener.lastIndex = 0;
34
+ let match: RegExpExecArray | null;
35
+
36
+ while ((match = opener.exec(source)) !== null) {
37
+ const start = match.index;
38
+ const contentStart = start + match[0].length;
39
+ const firstNewline = source.indexOf("\n", start);
40
+
41
+ let depth = 0;
42
+ let linkDepth = 0;
43
+ let i = start;
44
+ let closeEnd = -1;
45
+
46
+ while (i < source.length) {
47
+ const ch = source.charCodeAt(i);
48
+ const next = source.charCodeAt(i + 1);
49
+ const nextNext = source.charCodeAt(i + 2);
50
+
51
+ if (ch === OPEN_BRACKET && next === OPEN_BRACKET && nextNext === OPEN_BRACKET) {
52
+ linkDepth++;
53
+ i += 3;
54
+ } else if (
55
+ linkDepth > 0 &&
56
+ ch === CLOSE_BRACKET &&
57
+ next === CLOSE_BRACKET &&
58
+ nextNext === CLOSE_BRACKET
59
+ ) {
60
+ linkDepth--;
61
+ i += 3;
62
+ } else if (linkDepth > 0) {
63
+ i++;
64
+ } else if (ch === OPEN_BRACKET && next === OPEN_BRACKET) {
65
+ depth++;
66
+ i += 2;
67
+ } else if (ch === CLOSE_BRACKET && next === CLOSE_BRACKET) {
68
+ const closeStart = i;
69
+ depth--;
70
+ i += 2;
71
+
72
+ if (depth <= 0) {
73
+ const innerSoFar = source.slice(contentStart, closeStart);
74
+ if (hasAttributes(innerSoFar)) {
75
+ while (i < source.length && source[i] === "]") {
76
+ i++;
77
+ }
78
+ }
79
+ const onOpenerLine = firstNewline === -1 || closeStart < firstNewline;
80
+ if (onOpenerLine || isRestOfLineBlank(source, i)) {
81
+ closeEnd = i;
82
+ break;
83
+ }
84
+ }
85
+ } else {
86
+ i++;
87
+ }
88
+ }
89
+
90
+ if (closeEnd === -1) {
91
+ opener.lastIndex = start + 2;
92
+ continue;
93
+ }
94
+
95
+ matches.push({ start, end: closeEnd, inner: source.slice(contentStart, closeEnd - 2) });
96
+ opener.lastIndex = closeEnd;
97
+ }
98
+
99
+ return matches;
100
+ }
101
+
102
+ /**
103
+ * Returns true when the directive's inner content carries an attribute section,
104
+ * either pipe-delimited (`|key=value`) or space-separated after the page name.
105
+ */
106
+ function hasAttributes(innerSoFar: string): boolean {
107
+ if (innerSoFar.includes("|")) return true;
108
+ const trimmed = innerSoFar.trimStart();
109
+ const whitespaceIndex = trimmed.search(/\s/);
110
+ if (whitespaceIndex === -1) return false;
111
+ return trimmed.slice(whitespaceIndex).trim().length > 0;
112
+ }
113
+
114
+ function isRestOfLineBlank(source: string, pos: number): boolean {
115
+ for (let i = pos; i < source.length; i++) {
116
+ const ch = source[i];
117
+ if (ch === "\n") return true;
118
+ if (ch !== " " && ch !== "\t" && ch !== "\r") return false;
119
+ }
120
+ return true;
121
+ }
@@ -22,6 +22,7 @@
22
22
  // Module rule types and registry
23
23
  export type { ModuleRule } from "./types";
24
24
  export { MODULE_RULES, getModuleRuleByName } from "./mapping";
25
+ export { moduleRule } from "./rule";
25
26
 
26
27
  // Module parsers
27
28
  export { rateModuleRule } from "./rate/index";
@@ -95,7 +96,18 @@ export {
95
96
 
96
97
  // Include module
97
98
  export type { IncludeFetcher, AsyncIncludeFetcher, ResolveIncludesOptions } from "./include";
98
- export { resolveIncludes, resolveIncludesAsync } from "./include";
99
+ export type {
100
+ IncludeReference,
101
+ IncludeDependency,
102
+ IncludeIterationTrace,
103
+ ResolveIncludesTraceResult,
104
+ } from "./include";
105
+ export {
106
+ extractIncludeReferences,
107
+ resolveIncludes,
108
+ resolveIncludesAsync,
109
+ resolveIncludesWithTrace,
110
+ } from "./include";
99
111
 
100
112
  // ListUsers module
101
113
  export type {
@@ -117,6 +129,6 @@ export {
117
129
  } from "./listusers";
118
130
 
119
131
  // Module resolver
120
- export type { ResolveOptions } from "./resolve";
132
+ export type { ModuleSourceTransform, ResolveOptions } from "./resolve";
121
133
  export { resolveModules } from "./resolve";
122
134
  export { STYLE_SLOT_PREFIX } from "@wdprlib/ast";