@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.
- package/dist/index.cjs +10471 -8406
- package/dist/index.d.cts +313 -337
- package/dist/index.d.ts +313 -337
- package/dist/index.js +10457 -8392
- package/package.json +1 -1
- package/src/index.ts +7 -0
- package/src/lexer/anchor.ts +48 -0
- package/src/lexer/index.ts +3 -2
- package/src/lexer/lexer.ts +73 -559
- package/src/lexer/options.ts +19 -0
- package/src/lexer/punctuation.ts +70 -0
- package/src/lexer/quoted-string.ts +16 -0
- package/src/lexer/runs.ts +85 -0
- package/src/lexer/spacing-actions.ts +24 -0
- package/src/lexer/state.ts +103 -0
- package/src/lexer/syntax-actions.ts +80 -0
- package/src/lexer/text-actions.ts +41 -0
- package/src/lexer/token-actions.ts +136 -0
- package/src/lexer/token-factory.ts +62 -0
- package/src/lexer/tokenize.ts +18 -0
- package/src/parser/constants.ts +2 -0
- package/src/parser/depth/index.ts +111 -0
- package/src/parser/depth/stack.ts +82 -0
- package/src/parser/parse/block.ts +42 -0
- package/src/parser/parse/context.ts +26 -0
- package/src/parser/parse/footnotes.ts +25 -0
- package/src/parser/parse/index.ts +42 -0
- package/src/parser/parse/options.ts +34 -0
- package/src/parser/parse/parser.ts +79 -0
- package/src/parser/parse/plain-non-ascii.ts +129 -0
- package/src/parser/parse/result.ts +57 -0
- package/src/parser/parse/source.ts +11 -0
- package/src/parser/postprocess/divAdjacentParagraph.ts +1 -1
- package/src/parser/postprocess/spanStrip/clean-element.ts +168 -0
- package/src/parser/postprocess/spanStrip/cleanup.ts +25 -0
- package/src/parser/postprocess/spanStrip/empty-spans.ts +36 -0
- package/src/parser/postprocess/spanStrip/escaped.ts +78 -0
- package/src/parser/postprocess/spanStrip/factory.ts +23 -0
- package/src/parser/postprocess/spanStrip/index.ts +8 -0
- package/src/parser/postprocess/spanStrip/merge.ts +117 -0
- package/src/parser/postprocess/spanStrip/predicates.ts +59 -0
- package/src/parser/postprocess/spanStrip/split.ts +67 -0
- package/src/parser/preprocess/expr/chars.ts +15 -0
- package/src/parser/preprocess/expr/evaluate.ts +22 -0
- package/src/parser/preprocess/expr/index.ts +45 -0
- package/src/parser/preprocess/expr/kind.ts +19 -0
- package/src/parser/preprocess/expr/parse.ts +103 -0
- package/src/parser/preprocess/expr/scan.ts +34 -0
- package/src/parser/preprocess/expr/types.ts +14 -0
- package/src/parser/preprocess/typography.ts +70 -5
- package/src/parser/preprocess/utils/bracket-depths.ts +98 -0
- package/src/parser/preprocess/utils/index.ts +13 -0
- package/src/parser/preprocess/utils/raw-regions.ts +153 -0
- package/src/parser/preprocess/whitespace/detection.ts +39 -0
- package/src/parser/preprocess/whitespace/index.ts +79 -0
- package/src/parser/preprocess/whitespace/leading-spaces.ts +11 -0
- package/src/parser/preprocess/whitespace/patterns.ts +23 -0
- package/src/parser/rules/block/align/body.ts +46 -0
- package/src/parser/rules/block/align/element.ts +13 -0
- package/src/parser/rules/block/align/index.ts +90 -0
- package/src/parser/rules/block/align/syntax.ts +113 -0
- package/src/parser/rules/block/bibliography/body.ts +81 -0
- package/src/parser/rules/block/bibliography/entries.ts +49 -0
- package/src/parser/rules/block/bibliography/entry-content.ts +73 -0
- package/src/parser/rules/block/bibliography/entry-key.ts +83 -0
- package/src/parser/rules/block/bibliography/index.ts +90 -0
- package/src/parser/rules/block/bibliography/open.ts +53 -0
- package/src/parser/rules/block/block-list/bare-content.ts +105 -0
- package/src/parser/rules/block/block-list/bare-paragraph.ts +60 -0
- package/src/parser/rules/block/block-list/index.ts +51 -0
- package/src/parser/rules/block/block-list/item-content.ts +132 -0
- package/src/parser/rules/block/block-list/li-content.ts +107 -0
- package/src/parser/rules/block/block-list/li-item.ts +77 -0
- package/src/parser/rules/block/block-list/list-block.ts +100 -0
- package/src/parser/rules/block/block-list/open.ts +51 -0
- package/src/parser/rules/block/block-list/tags.ts +50 -0
- package/src/parser/rules/block/blockquote/build.ts +62 -0
- package/src/parser/rules/block/blockquote/index.ts +80 -0
- package/src/parser/rules/block/blockquote/line.ts +79 -0
- package/src/parser/rules/block/blockquote/lines.ts +39 -0
- package/src/parser/rules/block/{center.ts → center/index.ts} +7 -22
- package/src/parser/rules/block/center/open.ts +27 -0
- package/src/parser/rules/block/{clear-float.ts → clear-float/index.ts} +6 -30
- package/src/parser/rules/block/clear-float/syntax.ts +43 -0
- package/src/parser/rules/block/code/attributes.ts +30 -0
- package/src/parser/rules/block/code/content.ts +57 -0
- package/src/parser/rules/block/code/index.ts +100 -0
- package/src/parser/rules/block/collapsible/attributes.ts +95 -0
- package/src/parser/rules/block/collapsible/body.ts +69 -0
- package/src/parser/rules/block/collapsible/index.ts +117 -0
- package/src/parser/rules/block/collapsible/open.ts +51 -0
- package/src/parser/rules/block/collapsible/orphans.ts +31 -0
- package/src/parser/rules/block/collapsible/tags.ts +17 -0
- package/src/parser/rules/block/comment/consume.ts +37 -0
- package/src/parser/rules/block/{comment.ts → comment/index.ts} +12 -38
- package/src/parser/rules/block/{content-separator.ts → content-separator/index.ts} +5 -35
- package/src/parser/rules/block/content-separator/syntax.ts +33 -0
- package/src/parser/rules/block/definition-list/collect.ts +40 -0
- package/src/parser/rules/block/definition-list/index.ts +63 -0
- package/src/parser/rules/block/definition-list/item-key.ts +95 -0
- package/src/parser/rules/block/definition-list/item-value.ts +56 -0
- package/src/parser/rules/block/definition-list/items.ts +54 -0
- package/src/parser/rules/block/div/body.ts +41 -0
- package/src/parser/rules/block/div/close.ts +41 -0
- package/src/parser/rules/block/div/failed.ts +117 -0
- package/src/parser/rules/block/div/index.ts +112 -0
- package/src/parser/rules/block/div/nesting.ts +37 -0
- package/src/parser/rules/block/div/open.ts +59 -0
- package/src/parser/rules/block/div/paragraph-strip.ts +44 -0
- package/src/parser/rules/block/embed-block/content.ts +53 -0
- package/src/parser/rules/block/embed-block/index.ts +91 -0
- package/src/parser/rules/block/embed-block/open.ts +52 -0
- package/src/parser/rules/block/embed-block/tags.ts +5 -0
- package/src/parser/rules/block/footnoteblock/attributes.ts +73 -0
- package/src/parser/rules/block/footnoteblock/index.ts +82 -0
- package/src/parser/rules/block/footnoteblock/open.ts +53 -0
- package/src/parser/rules/block/heading/index.ts +87 -0
- package/src/parser/rules/block/heading/open.ts +50 -0
- package/src/parser/rules/block/heading/toc-text.ts +26 -0
- package/src/parser/rules/block/{horizontal-rule.ts → horizontal-rule/index.ts} +4 -21
- package/src/parser/rules/block/horizontal-rule/syntax.ts +21 -0
- package/src/parser/rules/block/html/body.ts +114 -0
- package/src/parser/rules/block/html/diagnostics.ts +11 -0
- package/src/parser/rules/block/html/index.ts +95 -0
- package/src/parser/rules/block/html/open.ts +36 -0
- package/src/parser/rules/block/iframe/attributes.ts +106 -0
- package/src/parser/rules/block/iframe/index.ts +73 -0
- package/src/parser/rules/block/iframe/open.ts +58 -0
- package/src/parser/rules/block/iframe/source.ts +24 -0
- package/src/parser/rules/block/iframe/url.ts +38 -0
- package/src/parser/rules/block/iftags/body.ts +48 -0
- package/src/parser/rules/block/iftags/condition.ts +24 -0
- package/src/parser/rules/block/{iftags.ts → iftags/index.ts} +16 -58
- package/src/parser/rules/block/include/arguments.ts +48 -0
- package/src/parser/rules/block/include/index.ts +75 -0
- package/src/parser/rules/block/include/location.ts +24 -0
- package/src/parser/rules/block/include/variables.ts +37 -0
- package/src/parser/rules/block/list/index.ts +73 -0
- package/src/parser/rules/block/list/line.ts +77 -0
- package/src/parser/rules/block/list/native.ts +89 -0
- package/src/parser/rules/block/math/content.ts +54 -0
- package/src/parser/rules/block/math/index.ts +106 -0
- package/src/parser/rules/block/math/name.ts +35 -0
- package/src/parser/rules/block/module/body.ts +92 -0
- package/src/parser/rules/block/module/element.ts +33 -0
- package/src/parser/rules/block/module/include/directive.ts +91 -0
- package/src/parser/rules/block/module/include/index.ts +11 -2
- package/src/parser/rules/block/module/include/references.ts +42 -0
- package/src/parser/rules/block/module/include/resolve/cache.ts +44 -0
- package/src/parser/rules/block/module/include/resolve/index.ts +106 -0
- package/src/parser/rules/block/module/include/resolve/iterate.ts +202 -0
- package/src/parser/rules/block/module/include/resolve/replace.ts +31 -0
- package/src/parser/rules/block/module/include/resolve/types.ts +105 -0
- package/src/parser/rules/block/module/include/scanner.ts +121 -0
- package/src/parser/rules/block/module/index.ts +14 -2
- package/src/parser/rules/block/module/listpages/compiler.ts +12 -392
- package/src/parser/rules/block/module/listpages/extract.ts +25 -359
- package/src/parser/rules/block/module/listpages/extraction/listpages.ts +42 -0
- package/src/parser/rules/block/module/listpages/extraction/listusers.ts +30 -0
- package/src/parser/rules/block/module/listpages/extraction/query.ts +51 -0
- package/src/parser/rules/block/module/listpages/extraction/result.ts +18 -0
- package/src/parser/rules/block/module/listpages/extraction/template.ts +96 -0
- package/src/parser/rules/block/module/listpages/extraction/variables.ts +58 -0
- package/src/parser/rules/block/module/listpages/normalization/date-selector.ts +53 -0
- package/src/parser/rules/block/module/listpages/normalization/numeric-selector.ts +32 -0
- package/src/parser/rules/block/module/listpages/normalization/order-parent.ts +82 -0
- package/src/parser/rules/block/module/listpages/normalization/selectors.ts +2 -0
- package/src/parser/rules/block/module/listpages/normalization/tags-category.ts +86 -0
- package/src/parser/rules/block/module/listpages/normalize.ts +8 -324
- package/src/parser/rules/block/module/listpages/resolution/items.ts +43 -0
- package/src/parser/rules/block/module/listpages/resolution/wrapper.ts +42 -0
- package/src/parser/rules/block/module/listpages/resolve.ts +5 -75
- package/src/parser/rules/block/module/listpages/template/format/content.ts +41 -0
- package/src/parser/rules/block/module/listpages/template/format/date.ts +116 -0
- package/src/parser/rules/block/module/listpages/template/format/index.ts +4 -0
- package/src/parser/rules/block/module/listpages/template/format/tags.ts +7 -0
- package/src/parser/rules/block/module/listpages/template/format/user.ts +9 -0
- package/src/parser/rules/block/module/listpages/template/getters/index.ts +36 -0
- package/src/parser/rules/block/module/listpages/template/getters/parameterized.ts +60 -0
- package/src/parser/rules/block/module/listpages/template/getters/simple.ts +65 -0
- package/src/parser/rules/block/module/listpages/template/getters/types.ts +3 -0
- package/src/parser/rules/block/module/listpages/template/syntax.ts +97 -0
- package/src/parser/rules/block/module/listpages/types/data-fetcher.ts +15 -0
- package/src/parser/rules/block/module/listpages/types/data-requirements.ts +52 -0
- package/src/parser/rules/block/module/listpages/types/external-data.ts +77 -0
- package/src/parser/rules/block/module/listpages/types/index.ts +17 -0
- package/src/parser/rules/block/module/listpages/types/normalized-query.ts +120 -0
- package/src/parser/rules/block/module/listpages/types/query.ts +67 -0
- package/src/parser/rules/block/module/listpages/types/template.ts +17 -0
- package/src/parser/rules/block/module/listpages/types/variables.ts +69 -0
- package/src/parser/rules/block/module/listpages/url-resolution/fields.ts +48 -0
- package/src/parser/rules/block/module/listpages/url-resolution/params.ts +30 -0
- package/src/parser/rules/block/module/listpages/url-resolution/query.ts +24 -0
- package/src/parser/rules/block/module/listpages/url-resolution/resolve.ts +62 -0
- package/src/parser/rules/block/module/listpages/url-resolution/value.ts +34 -0
- package/src/parser/rules/block/module/listpages/url-resolver.ts +3 -160
- package/src/parser/rules/block/module/listusers/compiler.ts +4 -25
- package/src/parser/rules/block/module/listusers/extract.ts +4 -9
- package/src/parser/rules/block/module/listusers/getters.ts +21 -0
- package/src/parser/rules/block/module/listusers/variables.ts +15 -0
- package/src/parser/rules/block/module/open.ts +57 -0
- package/src/parser/rules/block/module/resolution/contexts.ts +78 -0
- package/src/parser/rules/block/module/resolution/data-maps.ts +39 -0
- package/src/parser/rules/block/module/resolution/dynamic-modules.ts +93 -0
- package/src/parser/rules/block/module/resolution/styles.ts +53 -0
- package/src/parser/rules/block/module/resolution/walk-resolve.ts +107 -0
- package/src/parser/rules/block/module/resolve.ts +79 -292
- package/src/parser/rules/block/module/rule.ts +56 -0
- package/src/parser/rules/block/module/types-common.ts +11 -0
- package/src/parser/rules/block/module/walk/children.ts +35 -0
- package/src/parser/rules/block/module/walk/index.ts +9 -0
- package/src/parser/rules/block/module/walk/map/index.ts +2 -0
- package/src/parser/rules/block/module/walk/map/stateful-definition-list.ts +25 -0
- package/src/parser/rules/block/module/walk/map/stateful-list.ts +40 -0
- package/src/parser/rules/block/module/walk/map/stateful-table.ts +23 -0
- package/src/parser/rules/block/module/walk/map/stateful-tabs.ts +19 -0
- package/src/parser/rules/block/module/walk/map/stateful.ts +71 -0
- package/src/parser/rules/block/module/walk/map/stateless-definition-list.ts +12 -0
- package/src/parser/rules/block/module/walk/map/stateless-list.ts +29 -0
- package/src/parser/rules/block/module/walk/map/stateless-table.ts +11 -0
- package/src/parser/rules/block/module/walk/map/stateless-tabs.ts +5 -0
- package/src/parser/rules/block/module/walk/map/stateless.ts +51 -0
- package/src/parser/rules/block/module/walk/map/types.ts +6 -0
- package/src/parser/rules/block/module/walk/traverse.ts +65 -0
- package/src/parser/rules/block/orphan-li/content.ts +60 -0
- package/src/parser/rules/block/orphan-li/index.ts +75 -0
- package/src/parser/rules/block/orphan-li/open.ts +25 -0
- package/src/parser/rules/block/orphan-li/tags.ts +40 -0
- package/src/parser/rules/block/paragraph/content.ts +12 -0
- package/src/parser/rules/block/paragraph/index.ts +60 -0
- package/src/parser/rules/block/paragraph/normalize.ts +52 -0
- package/src/parser/rules/block/paragraph/span-markers.ts +52 -0
- package/src/parser/rules/block/parsing/attributes/index.ts +32 -0
- package/src/parser/rules/block/parsing/attributes/names.ts +93 -0
- package/src/parser/rules/block/parsing/attributes/scanner.ts +75 -0
- package/src/parser/rules/block/parsing/attributes/values.ts +26 -0
- package/src/parser/rules/block/parsing/block-item.ts +29 -0
- package/src/parser/rules/block/parsing/content.ts +127 -0
- package/src/parser/rules/block/parsing/end-condition.ts +51 -0
- package/src/parser/rules/block/parsing/inline-content.ts +105 -0
- package/src/parser/rules/block/parsing/inline-newline.ts +41 -0
- package/src/parser/rules/block/parsing/non-boundary.ts +24 -0
- package/src/parser/rules/block/parsing/rule-dispatch.ts +44 -0
- package/src/parser/rules/block/table/index.ts +80 -0
- package/src/parser/rules/block/table/pipe/cell-start.ts +69 -0
- package/src/parser/rules/block/table/pipe/cell.ts +106 -0
- package/src/parser/rules/block/table/pipe/index.ts +2 -0
- package/src/parser/rules/block/table/pipe/row.ts +88 -0
- package/src/parser/rules/block/table/pipe/tokens.ts +14 -0
- package/src/parser/rules/block/table/pipe/trim.ts +50 -0
- package/src/parser/rules/block/table-block/body.ts +79 -0
- package/src/parser/rules/block/table-block/cell-attributes.ts +33 -0
- package/src/parser/rules/block/table-block/cell-boundary.ts +99 -0
- package/src/parser/rules/block/table-block/cell-content/index.ts +88 -0
- package/src/parser/rules/block/table-block/cell-content/segments.ts +134 -0
- package/src/parser/rules/block/table-block/cell-newline.ts +47 -0
- package/src/parser/rules/block/table-block/cell.ts +64 -0
- package/src/parser/rules/block/table-block/index.ts +113 -0
- package/src/parser/rules/block/table-block/row-boundary.ts +75 -0
- package/src/parser/rules/block/table-block/structure.ts +80 -0
- package/src/parser/rules/block/tabview/body.ts +64 -0
- package/src/parser/rules/block/tabview/index.ts +90 -0
- package/src/parser/rules/block/tabview/open.ts +50 -0
- package/src/parser/rules/block/tabview/tab.ts +92 -0
- package/src/parser/rules/block/tabview/tags.ts +30 -0
- package/src/parser/rules/block/toc/element.ts +11 -0
- package/src/parser/rules/block/toc/index.ts +44 -0
- package/src/parser/rules/block/toc/open.ts +84 -0
- package/src/parser/rules/block/utils.ts +10 -610
- package/src/parser/rules/{utils.ts → common/attribute-safety.ts} +3 -49
- package/src/parser/rules/common/block-name.ts +33 -0
- package/src/parser/rules/common/index.ts +2 -0
- package/src/parser/rules/contracts/index.ts +3 -0
- package/src/parser/rules/contracts/parse-context.ts +38 -0
- package/src/parser/rules/contracts/rule.ts +43 -0
- package/src/parser/rules/contracts/scope.ts +31 -0
- package/src/parser/rules/inline/anchor/attributes.ts +54 -0
- package/src/parser/rules/inline/anchor/child.ts +26 -0
- package/src/parser/rules/inline/anchor/close.ts +34 -0
- package/src/parser/rules/inline/anchor/content.ts +59 -0
- package/src/parser/rules/inline/anchor/index.ts +103 -0
- package/src/parser/rules/inline/anchor/newline.ts +26 -0
- package/src/parser/rules/inline/anchor/open.ts +47 -0
- package/src/parser/rules/inline/anchor/paragraph-strip.ts +14 -0
- package/src/parser/rules/inline/anchor/syntax.ts +40 -0
- package/src/parser/rules/inline/anchor-name/index.ts +38 -0
- package/src/parser/rules/inline/anchor-name/name.ts +39 -0
- package/src/parser/rules/inline/anchor-name/syntax.ts +46 -0
- package/src/parser/rules/inline/bibcite/element.ts +14 -0
- package/src/parser/rules/inline/bibcite/index.ts +34 -0
- package/src/parser/rules/inline/bibcite/syntax.ts +64 -0
- package/src/parser/rules/inline/bold.ts +2 -39
- package/src/parser/rules/inline/color/index.ts +35 -0
- package/src/parser/rules/inline/color/syntax.ts +69 -0
- package/src/parser/rules/inline/comment/consume.ts +31 -0
- package/src/parser/rules/inline/{comment.ts → comment/index.ts} +10 -36
- package/src/parser/rules/inline/equation-ref/element.ts +8 -0
- package/src/parser/rules/inline/equation-ref/index.ts +34 -0
- package/src/parser/rules/inline/equation-ref/syntax.ts +45 -0
- package/src/parser/rules/inline/expr/branch.ts +104 -0
- package/src/parser/rules/inline/expr/conditional-branch.ts +27 -0
- package/src/parser/rules/inline/expr/conditional.ts +80 -0
- package/src/parser/rules/inline/expr/depth.ts +25 -0
- package/src/parser/rules/inline/expr/elements.ts +39 -0
- package/src/parser/rules/inline/expr/index.ts +84 -0
- package/src/parser/rules/inline/expr/syntax.ts +45 -0
- package/src/parser/rules/inline/footnote/child.ts +22 -0
- package/src/parser/rules/inline/footnote/close.ts +33 -0
- package/src/parser/rules/inline/footnote/content.ts +54 -0
- package/src/parser/rules/inline/footnote/elements.ts +38 -0
- package/src/parser/rules/inline/footnote/index.ts +54 -0
- package/src/parser/rules/inline/footnote/newline.ts +27 -0
- package/src/parser/rules/inline/footnote/open.ts +38 -0
- package/src/parser/rules/inline/formatting/container.ts +50 -0
- package/src/parser/rules/inline/{guillemet.ts → guillemet/index.ts} +5 -13
- package/src/parser/rules/inline/guillemet/text.ts +11 -0
- package/src/parser/rules/inline/html/gate.ts +64 -0
- package/src/parser/rules/inline/{html.ts → html/index.ts} +9 -60
- package/src/parser/rules/inline/html/open.ts +37 -0
- package/src/parser/rules/inline/image/attributes.ts +22 -0
- package/src/parser/rules/inline/image/body.ts +36 -0
- package/src/parser/rules/inline/image/index.ts +89 -0
- package/src/parser/rules/inline/image/open.ts +56 -0
- package/src/parser/rules/inline/image/source.ts +62 -0
- package/src/parser/rules/inline/image/syntax.ts +76 -0
- package/src/parser/rules/inline/italic.ts +2 -30
- package/src/parser/rules/inline/line-break/backslash.ts +58 -0
- package/src/parser/rules/inline/line-break/elements.ts +9 -0
- package/src/parser/rules/inline/line-break/index.ts +3 -0
- package/src/parser/rules/inline/line-break/newline.ts +82 -0
- package/src/parser/rules/inline/line-break/underscore.ts +45 -0
- package/src/parser/rules/inline/link-anchor.ts +6 -81
- package/src/parser/rules/inline/link-bracket/anchor.ts +3 -0
- package/src/parser/rules/inline/link-bracket/direct-url.ts +5 -0
- package/src/parser/rules/inline/link-bracket/parsed.ts +81 -0
- package/src/parser/rules/inline/link-bracket/parts.ts +64 -0
- package/src/parser/rules/inline/link-bracket/prefix.ts +15 -0
- package/src/parser/rules/inline/link-single.ts +7 -98
- package/src/parser/rules/inline/link-star.ts +7 -69
- package/src/parser/rules/inline/link-triple/fallback.ts +10 -0
- package/src/parser/rules/inline/link-triple/index.ts +62 -0
- package/src/parser/rules/inline/link-triple/interwiki.ts +11 -0
- package/src/parser/rules/inline/link-triple/label.ts +35 -0
- package/src/parser/rules/inline/link-triple/syntax.ts +72 -0
- package/src/parser/rules/inline/link-triple/target.ts +36 -0
- package/src/parser/rules/inline/math-inline/index.ts +40 -0
- package/src/parser/rules/inline/math-inline/syntax.ts +55 -0
- package/src/parser/rules/inline/monospace.ts +2 -30
- package/src/parser/rules/inline/parsing/block-boundary.ts +42 -0
- package/src/parser/rules/inline/parsing/block-start-predicates.ts +117 -0
- package/src/parser/rules/inline/parsing/collect.ts +23 -0
- package/src/parser/rules/inline/parsing/inline-content.ts +115 -0
- package/src/parser/rules/inline/parsing/paragraph-boundary.ts +47 -0
- package/src/parser/rules/inline/parsing/plain-text.ts +69 -0
- package/src/parser/rules/inline/parsing/preserved-line-break.ts +11 -0
- package/src/parser/rules/inline/parsing/rules.ts +34 -0
- package/src/parser/rules/inline/parsing/simple-token.ts +26 -0
- package/src/parser/rules/inline/raw/angle.ts +40 -0
- package/src/parser/rules/inline/raw/double-at.ts +78 -0
- package/src/parser/rules/inline/raw/index.ts +26 -0
- package/src/parser/rules/inline/raw/result.ts +26 -0
- package/src/parser/rules/inline/size/content.ts +65 -0
- package/src/parser/rules/inline/size/index.ts +55 -0
- package/src/parser/rules/inline/size/open.ts +43 -0
- package/src/parser/rules/inline/size/value.ts +45 -0
- package/src/parser/rules/inline/span/content.ts +97 -0
- package/src/parser/rules/inline/span/elements.ts +108 -0
- package/src/parser/rules/inline/span/index.ts +79 -0
- package/src/parser/rules/inline/span/newline.ts +50 -0
- package/src/parser/rules/inline/span/syntax.ts +70 -0
- package/src/parser/rules/inline/{strikethrough.ts → strikethrough/index.ts} +5 -60
- package/src/parser/rules/inline/strikethrough/parse.ts +14 -0
- package/src/parser/rules/inline/strikethrough/syntax.ts +24 -0
- package/src/parser/rules/inline/subscript.ts +2 -39
- package/src/parser/rules/inline/superscript.ts +4 -39
- package/src/parser/rules/inline/text/element.ts +5 -0
- package/src/parser/rules/inline/{text.ts → text/index.ts} +5 -4
- package/src/parser/rules/inline/underline/child.ts +26 -0
- package/src/parser/rules/inline/underline/content.ts +29 -0
- package/src/parser/rules/inline/{underline.ts → underline/index.ts} +6 -49
- package/src/parser/rules/inline/user/element.ts +11 -0
- package/src/parser/rules/inline/user/index.ts +34 -0
- package/src/parser/rules/inline/user/syntax.ts +67 -0
- package/src/parser/rules/inline/utils.ts +4 -344
- package/src/parser/rules/tokens.ts +106 -0
- package/src/parser/rules/types.ts +9 -252
- package/src/parser/depth.ts +0 -251
- package/src/parser/parse.ts +0 -315
- package/src/parser/postprocess/spanStrip.ts +0 -697
- package/src/parser/preprocess/expr.ts +0 -265
- package/src/parser/preprocess/utils.ts +0 -250
- package/src/parser/preprocess/whitespace.ts +0 -111
- package/src/parser/rules/block/align.ts +0 -282
- package/src/parser/rules/block/bibliography.ts +0 -359
- package/src/parser/rules/block/block-list.ts +0 -689
- package/src/parser/rules/block/blockquote.ts +0 -238
- package/src/parser/rules/block/code.ts +0 -187
- package/src/parser/rules/block/collapsible.ts +0 -337
- package/src/parser/rules/block/definition-list.ts +0 -270
- package/src/parser/rules/block/div.ts +0 -400
- package/src/parser/rules/block/embed-block.ts +0 -153
- package/src/parser/rules/block/footnoteblock.ts +0 -200
- package/src/parser/rules/block/heading.ts +0 -142
- package/src/parser/rules/block/html.ts +0 -222
- package/src/parser/rules/block/iframe.ts +0 -239
- package/src/parser/rules/block/include.ts +0 -179
- package/src/parser/rules/block/list.ts +0 -244
- package/src/parser/rules/block/math.ts +0 -183
- package/src/parser/rules/block/module/include/resolve.ts +0 -556
- package/src/parser/rules/block/module/listpages/types.ts +0 -513
- package/src/parser/rules/block/module/walk.ts +0 -380
- package/src/parser/rules/block/module.ts +0 -164
- package/src/parser/rules/block/orphan-li.ts +0 -177
- package/src/parser/rules/block/paragraph.ts +0 -157
- package/src/parser/rules/block/table-block.ts +0 -726
- package/src/parser/rules/block/table.ts +0 -441
- package/src/parser/rules/block/tabview.ts +0 -331
- package/src/parser/rules/block/toc.ts +0 -129
- package/src/parser/rules/inline/anchor-name.ts +0 -154
- package/src/parser/rules/inline/anchor.ts +0 -327
- package/src/parser/rules/inline/bibcite.ts +0 -153
- package/src/parser/rules/inline/color.ts +0 -140
- package/src/parser/rules/inline/equation-ref.ts +0 -115
- package/src/parser/rules/inline/expr.ts +0 -526
- package/src/parser/rules/inline/footnote.ts +0 -223
- package/src/parser/rules/inline/image.ts +0 -328
- package/src/parser/rules/inline/line-break.ts +0 -326
- package/src/parser/rules/inline/link-triple.ts +0 -267
- package/src/parser/rules/inline/math-inline.ts +0 -126
- package/src/parser/rules/inline/raw.ts +0 -262
- package/src/parser/rules/inline/size.ts +0 -244
- package/src/parser/rules/inline/span.ts +0 -424
- package/src/parser/rules/inline/user.ts +0 -147
package/src/parser/parse.ts
DELETED
|
@@ -1,315 +0,0 @@
|
|
|
1
|
-
import type { Token } from "../lexer";
|
|
2
|
-
import { tokenize } from "../lexer";
|
|
3
|
-
import { preprocess } from "./preprocess";
|
|
4
|
-
import type { Element, SyntaxTree, WikitextSettings, ParseResult } from "@wdprlib/ast";
|
|
5
|
-
import { DEFAULT_SETTINGS } from "@wdprlib/ast";
|
|
6
|
-
import { blockRules, blockFallbackRule, inlineRules, type ParseContext } from "./rules";
|
|
7
|
-
import { canApplyBlockRule } from "./rules/block/utils";
|
|
8
|
-
import {
|
|
9
|
-
mergeSpanStripParagraphs,
|
|
10
|
-
cleanInternalFlags,
|
|
11
|
-
suppressDivAdjacentParagraphs,
|
|
12
|
-
} from "./postprocess";
|
|
13
|
-
import { buildTableOfContents } from "./toc";
|
|
14
|
-
import { walkElements } from "./rules/block/module/walk";
|
|
15
|
-
import { preprocessIftags } from "./rules/block/module/iftags/preprocess";
|
|
16
|
-
import { preprocessExpr } from "./preprocess/expr";
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Configuration for the {@link Parser} and the {@link parse} function.
|
|
20
|
-
*
|
|
21
|
-
* All fields are optional; sensible defaults are applied when omitted.
|
|
22
|
-
*
|
|
23
|
-
* @group Parser
|
|
24
|
-
*/
|
|
25
|
-
export interface ParserOptions {
|
|
26
|
-
/** Markup dialect. Currently only `"wikidot"` is supported. */
|
|
27
|
-
version?: "wikidot";
|
|
28
|
-
/**
|
|
29
|
-
* Propagate source-position data into every AST node.
|
|
30
|
-
* Defaults to `true`. Set to `false` for smaller output when positions
|
|
31
|
-
* are not needed.
|
|
32
|
-
*/
|
|
33
|
-
trackPositions?: boolean;
|
|
34
|
-
/**
|
|
35
|
-
* Context-dependent feature flags (page vs. forum-post, etc.).
|
|
36
|
-
* Defaults to {@link DEFAULT_SETTINGS} (full page mode).
|
|
37
|
-
*/
|
|
38
|
-
settings?: WikitextSettings;
|
|
39
|
-
/**
|
|
40
|
-
* Page tags consulted when expanding `[[iftags]]` directives that are
|
|
41
|
-
* embedded inside another block's opener — e.g.
|
|
42
|
-
* `[[div_ class="x" [[iftags +foo]]style="..."[[/iftags]]]]`. Such
|
|
43
|
-
* iftags must be collapsed at text level *before* tokenization;
|
|
44
|
-
* otherwise the outer opener loses its well-formed structure and the
|
|
45
|
-
* whole `[[div_ ... ]]` line is emitted as raw text.
|
|
46
|
-
*
|
|
47
|
-
* Values:
|
|
48
|
-
* - omitted / `undefined`: no preprocess pass. Existing behaviour;
|
|
49
|
-
* opener-embedded iftags will still break the surrounding opener.
|
|
50
|
-
* - `null`: opener-embedded iftags only, evaluated as if the page has
|
|
51
|
-
* no tags (lossy fallback that keeps tokenization working when real
|
|
52
|
-
* tags are unknown). Block-level iftags remain in the AST for
|
|
53
|
-
* `resolveModules` to evaluate later via `getPageTags`.
|
|
54
|
-
* - `string[]`: every iftags block is evaluated against the given
|
|
55
|
-
* tags eagerly; no `if-tags` nodes survive in the AST.
|
|
56
|
-
*/
|
|
57
|
-
pageTags?: string[] | null;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Converts a token stream into a Wikidot {@link SyntaxTree}.
|
|
62
|
-
*
|
|
63
|
-
* The parser consumes tokens produced by the `Lexer` and emits a
|
|
64
|
-
* tree of {@link Element} nodes. Block-level rules are tried in priority
|
|
65
|
-
* order; when none match, the fallback paragraph rule collects inline
|
|
66
|
-
* tokens until the next blank line.
|
|
67
|
-
*
|
|
68
|
-
* After the main parse pass, two post-processing steps run:
|
|
69
|
-
*
|
|
70
|
-
* 1. **Span-strip merging** — `[[span_]]` elements that set
|
|
71
|
-
* `_paragraphStrip` are merged with adjacent paragraphs.
|
|
72
|
-
* 2. **Internal-flag cleanup** — all `_`-prefixed bookkeeping fields
|
|
73
|
-
* are removed from the final AST.
|
|
74
|
-
*
|
|
75
|
-
* For most use-cases the standalone {@link parse} function is simpler
|
|
76
|
-
* than constructing a `Parser` directly.
|
|
77
|
-
*
|
|
78
|
-
* @group Parser
|
|
79
|
-
*/
|
|
80
|
-
export class Parser {
|
|
81
|
-
private ctx: ParseContext;
|
|
82
|
-
|
|
83
|
-
constructor(tokens: Token[], options: ParserOptions = {}) {
|
|
84
|
-
this.ctx = {
|
|
85
|
-
tokens,
|
|
86
|
-
pos: 0,
|
|
87
|
-
version: options.version ?? "wikidot",
|
|
88
|
-
trackPositions: options.trackPositions ?? true,
|
|
89
|
-
settings: options.settings ?? DEFAULT_SETTINGS,
|
|
90
|
-
// Collections for SyntaxTree output (populated during parsing)
|
|
91
|
-
footnotes: [],
|
|
92
|
-
tocEntries: [],
|
|
93
|
-
codeBlocks: [],
|
|
94
|
-
htmlBlocks: [],
|
|
95
|
-
bibcites: [],
|
|
96
|
-
// Diagnostics
|
|
97
|
-
diagnostics: [],
|
|
98
|
-
// Rules (injected to avoid circular dependency)
|
|
99
|
-
blockRules,
|
|
100
|
-
blockFallbackRule,
|
|
101
|
-
inlineRules,
|
|
102
|
-
// Per-scope state — defaults; child contexts replace the whole
|
|
103
|
-
// `scope` object when they want to override a field.
|
|
104
|
-
scope: {
|
|
105
|
-
footnoteBlockParsed: false,
|
|
106
|
-
},
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Parse tokens into a {@link ParseResult} containing the AST and
|
|
112
|
-
* any diagnostics emitted during parsing.
|
|
113
|
-
*
|
|
114
|
-
* @since 2.0.0
|
|
115
|
-
*/
|
|
116
|
-
parse(): ParseResult {
|
|
117
|
-
const children: Element[] = [];
|
|
118
|
-
|
|
119
|
-
while (!this.isAtEnd()) {
|
|
120
|
-
const blocks = this.parseBlock();
|
|
121
|
-
children.push(...blocks);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
// Post-process: merge paragraphs that contain span_ (paragraph strip mode)
|
|
125
|
-
const mergedChildren = mergeSpanStripParagraphs(children);
|
|
126
|
-
|
|
127
|
-
// Wikidot: paragraphs directly adjacent to div blocks lose <p> wrapping
|
|
128
|
-
const divProcessed = suppressDivAdjacentParagraphs(mergedChildren);
|
|
129
|
-
|
|
130
|
-
// Clean internal flags from AST
|
|
131
|
-
const cleanedChildren = cleanInternalFlags(divProcessed);
|
|
132
|
-
|
|
133
|
-
// Add a default footnote-block at the document end if no explicit
|
|
134
|
-
// `[[footnoteblock]]` exists anywhere in the final AST.
|
|
135
|
-
//
|
|
136
|
-
// We scan the post-parse, post-postprocess tree rather than relying
|
|
137
|
-
// on a parser-state flag because:
|
|
138
|
-
// - `ctx.footnoteBlockParsed` is a per-scope primitive that does
|
|
139
|
-
// not propagate up through `parseBlocksUntil`'s `{ ...ctx, pos }`
|
|
140
|
-
// spreads (so an explicit `[[footnoteblock]]` inside a collapsible
|
|
141
|
-
// would be invisible at the top level), and
|
|
142
|
-
// - speculative parses (e.g. `[[tabview]]` falling back to
|
|
143
|
-
// `success: false` after parsing tab bodies) would leave a shared
|
|
144
|
-
// "we saw a footnoteblock" flag set even though those parsed
|
|
145
|
-
// elements were discarded.
|
|
146
|
-
//
|
|
147
|
-
// The walk uses the existing `walkElements` so we do not duplicate
|
|
148
|
-
// the per-AST-shape descent rules.
|
|
149
|
-
if (!containsFootnoteBlock(cleanedChildren)) {
|
|
150
|
-
cleanedChildren.push({
|
|
151
|
-
element: "footnote-block",
|
|
152
|
-
data: { title: null, hide: false },
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
// Build table of contents from collected entries
|
|
157
|
-
const tableOfContents = buildTableOfContents(this.ctx.tocEntries);
|
|
158
|
-
|
|
159
|
-
// Build result, omitting empty optional fields
|
|
160
|
-
const result: SyntaxTree = {
|
|
161
|
-
elements: cleanedChildren,
|
|
162
|
-
};
|
|
163
|
-
|
|
164
|
-
if (tableOfContents.length > 0) {
|
|
165
|
-
result["table-of-contents"] = tableOfContents;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
if (this.ctx.footnotes.length > 0) {
|
|
169
|
-
result.footnotes = this.ctx.footnotes;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
if (this.ctx.codeBlocks.length > 0) {
|
|
173
|
-
result["code-blocks"] = this.ctx.codeBlocks;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
if (this.ctx.htmlBlocks.length > 0) {
|
|
177
|
-
result["html-blocks"] = this.ctx.htmlBlocks;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
return { ast: result, diagnostics: this.ctx.diagnostics };
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/**
|
|
184
|
-
* Check if at end of tokens
|
|
185
|
-
*/
|
|
186
|
-
private isAtEnd(): boolean {
|
|
187
|
-
return this.ctx.pos >= this.ctx.tokens.length || this.currentToken().type === "EOF";
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
* Get current token
|
|
192
|
-
*/
|
|
193
|
-
private currentToken(): Token {
|
|
194
|
-
return this.ctx.tokens[this.ctx.pos] ?? this.eofToken();
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
/**
|
|
198
|
-
* Create EOF token
|
|
199
|
-
*/
|
|
200
|
-
private eofToken(): Token {
|
|
201
|
-
return {
|
|
202
|
-
type: "EOF",
|
|
203
|
-
value: "",
|
|
204
|
-
position: {
|
|
205
|
-
start: { line: 0, column: 0, offset: 0 },
|
|
206
|
-
end: { line: 0, column: 0, offset: 0 },
|
|
207
|
-
},
|
|
208
|
-
lineStart: false,
|
|
209
|
-
};
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
/**
|
|
213
|
-
* Skip whitespace tokens
|
|
214
|
-
*/
|
|
215
|
-
private skipWhitespace(): void {
|
|
216
|
-
while (this.currentToken().type === "WHITESPACE") {
|
|
217
|
-
this.ctx.pos++;
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
/**
|
|
222
|
-
* Parse block element(s)
|
|
223
|
-
* Returns an array because some rules (like list) may return multiple elements
|
|
224
|
-
*/
|
|
225
|
-
private parseBlock(): Element[] {
|
|
226
|
-
this.skipWhitespace();
|
|
227
|
-
|
|
228
|
-
if (this.isAtEnd()) {
|
|
229
|
-
return [];
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
const token = this.currentToken();
|
|
233
|
-
|
|
234
|
-
// Skip empty lines
|
|
235
|
-
if (token.type === "NEWLINE") {
|
|
236
|
-
this.ctx.pos++;
|
|
237
|
-
return [];
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
// Try each block rule
|
|
241
|
-
for (const rule of this.ctx.blockRules) {
|
|
242
|
-
if (canApplyBlockRule(rule, token)) {
|
|
243
|
-
const result = rule.parse(this.ctx);
|
|
244
|
-
if (result.success) {
|
|
245
|
-
this.ctx.pos += result.consumed;
|
|
246
|
-
return result.elements;
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
// Fallback to paragraph
|
|
252
|
-
const result = this.ctx.blockFallbackRule.parse(this.ctx);
|
|
253
|
-
if (result.success && result.elements.length > 0) {
|
|
254
|
-
this.ctx.pos += result.consumed;
|
|
255
|
-
return result.elements;
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
// Should never reach here, but skip token to avoid infinite loop
|
|
259
|
-
this.ctx.pos++;
|
|
260
|
-
return [];
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
/**
|
|
265
|
-
* Parse a Wikidot markup string into an AST with diagnostics.
|
|
266
|
-
*
|
|
267
|
-
* @example
|
|
268
|
-
* ```ts
|
|
269
|
-
* import { parse } from "@wdprlib/parser";
|
|
270
|
-
*
|
|
271
|
-
* const { ast, diagnostics } = parse("**bold** and //italic//");
|
|
272
|
-
* ```
|
|
273
|
-
*
|
|
274
|
-
* @since 2.0.0
|
|
275
|
-
*/
|
|
276
|
-
export function parse(source: string, options?: ParserOptions): ParseResult {
|
|
277
|
-
// Collapse opener-embedded `[[#if cond | then | else ]]` text-level so
|
|
278
|
-
// the embedded conditional does not break an outer block's opener.
|
|
279
|
-
// Runs unconditionally — the condition is part of the source itself,
|
|
280
|
-
// no external context is needed. Unresolvable directives are left as-is.
|
|
281
|
-
const ifProcessed = preprocessExpr(source);
|
|
282
|
-
|
|
283
|
-
// Collapse opener-embedded [[iftags]] before tokenization. Only run when
|
|
284
|
-
// the caller explicitly opted in via the `pageTags` option (key present).
|
|
285
|
-
// `undefined` is treated as "key not given" to keep backward compat for
|
|
286
|
-
// callers that destructure or build options dynamically.
|
|
287
|
-
const iftagsProcessed =
|
|
288
|
-
options?.pageTags !== undefined ? preprocessIftags(ifProcessed, options.pageTags) : ifProcessed;
|
|
289
|
-
const preprocessed = preprocess(iftagsProcessed);
|
|
290
|
-
const tokens = tokenize(preprocessed, { trackPositions: options?.trackPositions });
|
|
291
|
-
return new Parser(tokens, options).parse();
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
/**
|
|
295
|
-
* Return `true` when an explicit `footnote-block` element exists anywhere
|
|
296
|
-
* in the tree.
|
|
297
|
-
*
|
|
298
|
-
* Reuses the parser's general-purpose {@link walkElements} so descent
|
|
299
|
-
* into containers, collapsibles, list items, table cells, tab panels,
|
|
300
|
-
* definition lists, etc. matches the rest of the parser exactly.
|
|
301
|
-
*
|
|
302
|
-
* Note on `[[iftags]]`: the walker also descends into iftags bodies, so
|
|
303
|
-
* a `[[footnoteblock]]` that only renders conditionally still suppresses
|
|
304
|
-
* the auto-append. This matches the previous behaviour for unresolved
|
|
305
|
-
* iftags but means the implicit block does not reappear if the iftags
|
|
306
|
-
* condition evaluates to false during `resolveModules`. Tracked as a
|
|
307
|
-
* known limitation; iftags preprocessing (Task 6) would fix it.
|
|
308
|
-
*/
|
|
309
|
-
function containsFootnoteBlock(elements: Element[]): boolean {
|
|
310
|
-
let found = false;
|
|
311
|
-
walkElements(elements, (el) => {
|
|
312
|
-
if (el.element === "footnote-block") found = true;
|
|
313
|
-
});
|
|
314
|
-
return found;
|
|
315
|
-
}
|