@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.
- package/dist/index.cjs +10451 -8402
- package/dist/index.d.cts +313 -337
- package/dist/index.d.ts +313 -337
- package/dist/index.js +10438 -8389
- 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 +19 -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 +53 -0
- package/src/parser/rules/block/module/listpages/url-resolution/value.ts +25 -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
|
@@ -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
|
-
};
|