@voithos-labs/aragonite 0.10.3 → 0.10.7
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/README.md +2 -2
- package/dist/a11y-strings.d.ts +12 -5
- package/dist/a11y-strings.js +61 -5
- package/dist/action-contracts.d.ts +242 -155
- package/dist/action-contracts.js +2 -2
- package/dist/active-editor.d.ts +3 -3
- package/dist/active-editor.js +8 -9
- package/dist/ambient/ambient-dom.d.ts +2 -5
- package/dist/ambient/ambient-dom.js +16 -62
- package/dist/assert.js +6 -5
- package/dist/block-component.d.ts +135 -109
- package/dist/block-component.js +30 -22
- package/dist/block-id.d.ts +6 -10
- package/dist/block-id.js +25 -14
- package/dist/bounded-memo.d.ts +5 -5
- package/dist/bounded-memo.js +6 -6
- package/dist/components/BlockDragHandle.svelte +13 -20
- package/dist/components/BlockHost.svelte +56 -134
- package/dist/components/BlockList.svelte +22 -19
- package/dist/components/DecorationOverlay.svelte +9 -10
- package/dist/components/DecorationOverlay.svelte.d.ts +2 -2
- package/dist/components/Editor.svelte +619 -1089
- package/dist/components/Editor.svelte.d.ts +9 -20
- package/dist/components/GapCaret.svelte +26 -59
- package/dist/components/SelectionOverlay.svelte +36 -67
- package/dist/components/SelectionOverlay.svelte.d.ts +6 -4
- package/dist/components/TailInsert.svelte +8 -55
- package/dist/components/TailInsert.svelte.d.ts +4 -6
- package/dist/components/block-content-selector.d.ts +11 -11
- package/dist/components/block-content-selector.js +11 -11
- package/dist/components/block-el-lookup.d.ts +6 -0
- package/dist/components/block-el-lookup.js +27 -0
- package/dist/components/blocks/BlockquoteBlock.svelte +3 -3
- package/dist/components/blocks/ThematicBreakBlock.svelte +22 -63
- package/dist/components/blocks/ThematicBreakBlock.svelte.d.ts +0 -2
- package/dist/components/blocks/code/CodeBlock.svelte +255 -276
- package/dist/components/blocks/code/CodeBlock.svelte.d.ts +2 -3
- package/dist/components/blocks/code/CodeBlockRail.svelte +103 -100
- package/dist/components/blocks/code/CodeBlockRail.svelte.d.ts +9 -4
- package/dist/components/blocks/code/code-beforeinput.d.ts +1 -1
- package/dist/components/blocks/code/code-bootstrap.d.ts +3 -5
- package/dist/components/blocks/code/code-bootstrap.js +35 -28
- package/dist/components/blocks/code/code-context-actions.js +5 -4
- package/dist/components/blocks/code/code-enter.js +2 -2
- package/dist/components/blocks/code/code-fence-boundary.d.ts +29 -46
- package/dist/components/blocks/code/code-fence-boundary.js +40 -66
- package/dist/components/blocks/code/code-fence-exit.d.ts +6 -11
- package/dist/components/blocks/code/code-fence-exit.js +24 -25
- package/dist/components/blocks/code/code-indent.d.ts +2 -2
- package/dist/components/blocks/code/code-indent.js +4 -7
- package/dist/components/blocks/code/code-languages.d.ts +16 -12
- package/dist/components/blocks/code/code-languages.js +58 -32
- package/dist/components/blocks/code/code-paste-surface.d.ts +3 -2
- package/dist/components/blocks/code/code-paste-surface.js +9 -18
- package/dist/components/blocks/code/code-renderer.d.ts +21 -5
- package/dist/components/blocks/code/code-renderer.js +90 -125
- package/dist/components/blocks/directive/DirectiveContainerBlock.svelte +5 -8
- package/dist/components/blocks/directive/activate-directives.d.ts +4 -4
- package/dist/components/blocks/directive/activate-directives.js +18 -13
- package/dist/components/blocks/editable-leaf.d.ts +50 -74
- package/dist/components/blocks/editable-leaf.js +144 -202
- package/dist/components/blocks/editable-surface.d.ts +96 -100
- package/dist/components/blocks/editable-surface.js +101 -109
- package/dist/components/blocks/list/ListBlock.svelte +46 -90
- package/dist/components/blocks/list/ListItemBlock.svelte +99 -144
- package/dist/components/blocks/list/ListItemBlock.svelte.d.ts +3 -0
- package/dist/components/blocks/list/task-checkbox.d.ts +5 -2
- package/dist/components/blocks/list/task-checkbox.js +12 -7
- package/dist/components/blocks/plain-text-backend.d.ts +4 -20
- package/dist/components/blocks/plain-text-backend.js +9 -43
- package/dist/components/blocks/surface-wiring.svelte.d.ts +8 -9
- package/dist/components/blocks/surface-wiring.svelte.js +15 -34
- package/dist/components/blocks/table/TableActionMenu.svelte +19 -18
- package/dist/components/blocks/table/TableActionMenu.svelte.d.ts +3 -1
- package/dist/components/blocks/table/TableBlock.svelte +100 -165
- package/dist/components/blocks/table/TableBlock.svelte.d.ts +3 -3
- package/dist/components/blocks/table/TableCellBlock.svelte +307 -385
- package/dist/components/blocks/table/TableCellBlock.svelte.d.ts +1 -0
- package/dist/components/blocks/table/TableRowBlock.svelte +60 -104
- package/dist/components/blocks/table/TableRowBlock.svelte.d.ts +0 -1
- package/dist/components/blocks/table/cell-keydown-plan.d.ts +4 -9
- package/dist/components/blocks/table/cell-keydown-plan.js +8 -12
- package/dist/components/blocks/table/cell-pointer.d.ts +18 -23
- package/dist/components/blocks/table/cell-pointer.js +49 -71
- package/dist/components/blocks/table/cell-render.d.ts +24 -29
- package/dist/components/blocks/table/cell-render.js +29 -31
- package/dist/components/blocks/table/selected-cells.d.ts +7 -7
- package/dist/components/blocks/table/selected-cells.js +9 -13
- package/dist/components/blocks/table/table-caret-at-point.d.ts +4 -4
- package/dist/components/blocks/table/table-caret-at-point.js +5 -5
- package/dist/components/blocks/table/table-cell-paste.d.ts +5 -11
- package/dist/components/blocks/table/table-cell-paste.js +27 -43
- package/dist/components/blocks/table/table-drag-hit-test.js +2 -1
- package/dist/components/blocks/table/table-menu-model.d.ts +4 -8
- package/dist/components/blocks/table/table-menu-model.js +6 -10
- package/dist/components/blocks/table/table-navigation.js +2 -2
- package/dist/components/blocks/text/TextEditableBlock.svelte +392 -310
- package/dist/components/blocks/text/TextEditableBlock.svelte.d.ts +2 -1
- package/dist/components/blocks/text/auto-pair-record.d.ts +23 -0
- package/dist/components/blocks/text/auto-pair-record.js +51 -0
- package/dist/components/blocks/text/click-snap-guard.d.ts +9 -4
- package/dist/components/blocks/text/click-snap-guard.js +16 -5
- package/dist/components/blocks/text/composition-seat.d.ts +17 -14
- package/dist/components/blocks/text/composition-seat.js +11 -11
- package/dist/components/blocks/text/construct-edge-delete.d.ts +20 -20
- package/dist/components/blocks/text/construct-edge-delete.js +50 -65
- package/dist/components/blocks/text/construct-reveal.d.ts +16 -21
- package/dist/components/blocks/text/construct-reveal.js +13 -14
- package/dist/components/blocks/text/delimiter-autopair.d.ts +51 -34
- package/dist/components/blocks/text/delimiter-autopair.js +87 -103
- package/dist/components/blocks/text/edge-policy-dispatch.d.ts +44 -46
- package/dist/components/blocks/text/edge-policy-dispatch.js +164 -180
- package/dist/components/blocks/text/edge-seat.d.ts +17 -26
- package/dist/components/blocks/text/edge-seat.js +43 -70
- package/dist/components/blocks/text/link-at-point.d.ts +9 -9
- package/dist/components/blocks/text/link-at-point.js +12 -15
- package/dist/components/blocks/text/live-join-seam.d.ts +6 -9
- package/dist/components/blocks/text/live-join-seam.js +75 -112
- package/dist/components/blocks/text/live-selection-edit.d.ts +14 -43
- package/dist/components/blocks/text/live-selection-edit.js +32 -105
- package/dist/components/blocks/text/live-split-rebalance.d.ts +9 -13
- package/dist/components/blocks/text/live-split-rebalance.js +50 -67
- package/dist/components/blocks/text/marker-completion.d.ts +7 -12
- package/dist/components/blocks/text/marker-completion.js +17 -10
- package/dist/components/blocks/text/pending-mark-insert.d.ts +11 -18
- package/dist/components/blocks/text/pending-mark-insert.js +30 -49
- package/dist/components/blocks/text/screen-diff.d.ts +5 -15
- package/dist/components/blocks/text/screen-diff.js +5 -19
- package/dist/components/blocks/text/text-clipboard.d.ts +23 -32
- package/dist/components/blocks/text/text-clipboard.js +27 -32
- package/dist/components/blocks/text/text-keydown.d.ts +20 -30
- package/dist/components/blocks/text/text-keydown.js +54 -51
- package/dist/components/blocks/text/text-render.d.ts +25 -35
- package/dist/components/blocks/text/text-render.js +82 -61
- package/dist/components/blocks/text/widget-adjacency.d.ts +9 -9
- package/dist/components/blocks/text/widget-adjacency.js +17 -17
- package/dist/components/blocks/text/widget-interaction.d.ts +67 -43
- package/dist/components/blocks/text/widget-interaction.js +243 -208
- package/dist/components/blocks/widget-portal.d.ts +20 -29
- package/dist/components/blocks/widget-portal.js +16 -14
- package/dist/components/built-in-blocks.d.ts +3 -4
- package/dist/components/built-in-blocks.js +17 -18
- package/dist/components/drag-handle.d.ts +13 -30
- package/dist/components/drag-handle.js +25 -63
- package/dist/components/editor-built-ins.d.ts +1 -0
- package/dist/components/editor-built-ins.js +16 -0
- package/dist/components/editor-root-clipboard.d.ts +6 -6
- package/dist/components/editor-root-clipboard.js +16 -27
- package/dist/components/editor-root-document-swap.d.ts +49 -0
- package/dist/components/editor-root-document-swap.js +54 -0
- package/dist/components/editor-root-focus.d.ts +5 -4
- package/dist/components/editor-root-focus.js +51 -22
- package/dist/components/editor-root-focused-surface.d.ts +35 -0
- package/dist/components/editor-root-focused-surface.js +65 -0
- package/dist/components/editor-root-geometry.d.ts +15 -24
- package/dist/components/editor-root-geometry.js +27 -31
- package/dist/components/editor-root-gestures.d.ts +39 -0
- package/dist/components/editor-root-gestures.js +189 -0
- package/dist/components/editor-root-keydown.d.ts +10 -25
- package/dist/components/editor-root-keydown.js +19 -43
- package/dist/components/editor-root-listeners.d.ts +22 -31
- package/dist/components/editor-root-listeners.js +49 -46
- package/dist/components/editor-root-menus.d.ts +51 -0
- package/dist/components/editor-root-menus.js +147 -0
- package/dist/components/editor-root-mode-flip.d.ts +16 -11
- package/dist/components/editor-root-mode-flip.js +36 -34
- package/dist/components/editor-root-scroll-host.d.ts +22 -0
- package/dist/components/editor-root-scroll-host.js +34 -0
- package/dist/components/editor-root-test-surface.d.ts +48 -0
- package/dist/components/editor-root-test-surface.js +6 -0
- package/dist/components/image/ImageOverlayHost.svelte +44 -35
- package/dist/components/image/ImageOverlayHost.svelte.d.ts +5 -6
- package/dist/components/image/ImageProperties.svelte +37 -41
- package/dist/components/image/ImageProperties.svelte.d.ts +9 -4
- package/dist/components/image/ImageResizeHandles.svelte +26 -30
- package/dist/components/image/image-crop.d.ts +5 -11
- package/dist/components/image/image-crop.js +5 -11
- package/dist/components/image/image-edit-commit.d.ts +19 -16
- package/dist/components/image/image-edit-commit.js +74 -38
- package/dist/components/image/image-resize.d.ts +2 -5
- package/dist/components/image/image-resize.js +3 -6
- package/dist/components/image/image-widget-editing.d.ts +3 -3
- package/dist/components/image/image-widget-editing.js +9 -9
- package/dist/components/image/widget-dom.d.ts +2 -3
- package/dist/components/image/widget-dom.js +19 -24
- package/dist/components/image/widget-selection-state.svelte.d.ts +10 -11
- package/dist/components/image/widget-selection-state.svelte.js +26 -19
- package/dist/components/kind-cue.svelte.d.ts +21 -0
- package/dist/components/kind-cue.svelte.js +35 -0
- package/dist/components/link-card/LinkCard.svelte +115 -64
- package/dist/components/link-card/LinkCard.svelte.d.ts +7 -5
- package/dist/components/link-card/LinkCardHost.svelte +42 -33
- package/dist/components/link-card/LinkCardHost.svelte.d.ts +10 -8
- package/dist/components/link-card/link-card-commit.d.ts +16 -19
- package/dist/components/link-card/link-card-commit.js +21 -30
- package/dist/components/link-card/link-card-entry.d.ts +13 -23
- package/dist/components/link-card/link-card-entry.js +16 -24
- package/dist/components/link-card/link-card-state.svelte.d.ts +17 -21
- package/dist/components/link-card/link-card-state.svelte.js +2 -2
- package/dist/components/lrd-map-gate.d.ts +4 -11
- package/dist/components/lrd-map-gate.js +5 -11
- package/dist/components/menu/BlockMenu.svelte +20 -81
- package/dist/components/menu/BlockMenu.svelte.d.ts +11 -9
- package/dist/components/menu/InlineMenuHost.svelte +191 -0
- package/dist/components/menu/InlineMenuHost.svelte.d.ts +13 -0
- package/dist/components/menu/MenuIcon.svelte +3 -103
- package/dist/components/menu/MenuIcon.svelte.d.ts +2 -44
- package/dist/components/menu/SelectionToolbar.svelte +380 -0
- package/dist/components/menu/SelectionToolbar.svelte.d.ts +14 -0
- package/dist/components/menu/clipboard-actions.d.ts +3 -4
- package/dist/components/menu/clipboard-actions.js +3 -4
- package/dist/components/menu/default-context-actions.d.ts +4 -13
- package/dist/components/menu/default-context-actions.js +49 -67
- package/dist/components/menu/flyout-placement.d.ts +2 -2
- package/dist/components/menu/flyout-placement.js +2 -2
- package/dist/components/menu/menu-presence.svelte.d.ts +12 -0
- package/dist/components/menu/menu-presence.svelte.js +19 -0
- package/dist/components/paste-image-arm.d.ts +6 -11
- package/dist/components/paste-image-arm.js +11 -18
- package/dist/components/portal.d.ts +2 -5
- package/dist/components/portal.js +4 -7
- package/dist/core/directive/activate.d.ts +4 -5
- package/dist/core/directive/activate.js +8 -9
- package/dist/core/directive/container-opener.js +13 -12
- package/dist/core/directive/grammar.d.ts +2 -5
- package/dist/core/directive/grammar.js +10 -10
- package/dist/core/directive/kinds.d.ts +4 -7
- package/dist/core/directive/kinds.js +14 -16
- package/dist/core/directive/registry.d.ts +12 -9
- package/dist/core/directive/registry.js +19 -20
- package/dist/core/directive/text-recognizer.d.ts +3 -2
- package/dist/core/directive/text-recognizer.js +5 -9
- package/dist/core/escapable.d.ts +1 -5
- package/dist/core/escapable.js +1 -5
- package/dist/core/inline/backticks.d.ts +3 -4
- package/dist/core/inline/backticks.js +3 -4
- package/dist/core/inline/character-refs.js +2 -1
- package/dist/core/inline/destination-bytes.d.ts +6 -3
- package/dist/core/inline/destination-bytes.js +50 -8
- package/dist/core/inline/entity-widget.d.ts +4 -3
- package/dist/core/inline/entity-widget.js +6 -6
- package/dist/core/inline/format-toggle.d.ts +22 -28
- package/dist/core/inline/format-toggle.js +97 -129
- package/dist/core/inline/html-entities.d.ts +2 -3
- package/dist/core/inline/html-entities.js +2 -3
- package/dist/core/inline/html-tag-grammar.js +6 -2
- package/dist/core/inline/image-dimensions.d.ts +2 -0
- package/dist/core/inline/image-dimensions.js +19 -2
- package/dist/core/inline/image-source-bytes.d.ts +11 -0
- package/dist/core/inline/image-source-bytes.js +71 -0
- package/dist/core/inline/index.d.ts +28 -21
- package/dist/core/inline/index.js +56 -34
- package/dist/core/inline/inline-cache.d.ts +12 -15
- package/dist/core/inline/inline-cache.js +11 -14
- package/dist/core/inline/inline-widgets.d.ts +55 -68
- package/dist/core/inline/inline-widgets.js +55 -58
- package/dist/core/inline/link-destination.d.ts +31 -0
- package/dist/core/inline/link-destination.js +129 -0
- package/dist/core/inline/link-reference-resolver.d.ts +8 -6
- package/dist/core/inline/link-reference-resolver.js +10 -6
- package/dist/core/inline/link-source-bytes.d.ts +31 -0
- package/dist/{components/blocks/text → core/inline}/link-source-bytes.js +43 -54
- package/dist/core/inline/live-edit/read-back.d.ts +29 -0
- package/dist/core/inline/live-edit/read-back.js +50 -0
- package/dist/core/inline/picture.d.ts +10 -0
- package/dist/core/inline/picture.js +40 -0
- package/dist/core/inline/scan/autolinks.d.ts +7 -8
- package/dist/core/inline/scan/autolinks.js +80 -59
- package/dist/core/inline/scan/brackets.d.ts +2 -2
- package/dist/core/inline/scan/brackets.js +6 -103
- package/dist/core/inline/scan/code-spans.d.ts +4 -0
- package/dist/core/inline/scan/code-spans.js +8 -0
- package/dist/core/inline/scan/emphasis.js +10 -14
- package/dist/core/inline/scan/index.d.ts +3 -1
- package/dist/core/inline/scan/index.js +32 -33
- package/dist/core/inline/scan/plugin-syntax.d.ts +28 -36
- package/dist/core/inline/scan/plugin-syntax.js +75 -89
- package/dist/core/inline/scan/scan-state.d.ts +2 -0
- package/dist/core/inline/scan/scan-state.js +1 -0
- package/dist/core/inline/scan/simple-nodes.d.ts +2 -5
- package/dist/core/inline/scan/simple-nodes.js +2 -5
- package/dist/core/inline/scan/triggers.d.ts +17 -0
- package/dist/core/inline/scan/triggers.js +26 -0
- package/dist/core/inline/scan/url.js +8 -10
- package/dist/core/inline/transparency.d.ts +2 -1
- package/dist/core/inline/transparency.js +33 -17
- package/dist/core/inline/visibility.d.ts +30 -49
- package/dist/core/inline/visibility.js +31 -49
- package/dist/core/inline/walk.d.ts +4 -10
- package/dist/core/inline/walk.js +4 -10
- package/dist/core/inline-render.d.ts +22 -27
- package/dist/core/inline-render.js +51 -60
- package/dist/core/lines.d.ts +67 -26
- package/dist/core/lines.js +164 -33
- package/dist/core/metadata-parity.d.ts +9 -0
- package/dist/core/metadata-parity.js +25 -0
- package/dist/core/node-views.d.ts +7 -6
- package/dist/core/node-views.js +5 -5
- package/dist/core/nodes.d.ts +34 -44
- package/dist/core/nodes.js +4 -12
- package/dist/core/parser.d.ts +27 -34
- package/dist/core/parser.js +53 -67
- package/dist/core/parsers/blockquote.d.ts +5 -8
- package/dist/core/parsers/blockquote.js +11 -10
- package/dist/core/parsers/built-in-openers.d.ts +2 -5
- package/dist/core/parsers/built-in-openers.js +5 -8
- package/dist/core/parsers/fence-syntax.d.ts +36 -7
- package/dist/core/parsers/fence-syntax.js +61 -11
- package/dist/core/parsers/fenced-code.d.ts +16 -0
- package/dist/core/parsers/fenced-code.js +16 -15
- package/dist/core/parsers/heading.d.ts +19 -2
- package/dist/core/parsers/heading.js +50 -2
- package/dist/core/parsers/html-block.d.ts +3 -6
- package/dist/core/parsers/html-block.js +10 -11
- package/dist/core/parsers/indented-code.d.ts +1 -1
- package/dist/core/parsers/indented-code.js +2 -8
- package/dist/core/parsers/link-reference.d.ts +5 -3
- package/dist/core/parsers/link-reference.js +116 -120
- package/dist/core/parsers/list.d.ts +12 -5
- package/dist/core/parsers/list.js +53 -36
- package/dist/core/parsers/paragraph.d.ts +3 -3
- package/dist/core/parsers/paragraph.js +14 -5
- package/dist/core/parsers/table-completion.d.ts +2 -5
- package/dist/core/parsers/table-completion.js +7 -10
- package/dist/core/parsers/table.d.ts +8 -8
- package/dist/core/parsers/table.js +23 -26
- package/dist/core/parsers/thematic-break.js +15 -14
- package/dist/core/paths.d.ts +13 -0
- package/dist/core/paths.js +31 -0
- package/dist/core/terminator-escalation.d.ts +0 -7
- package/dist/core/terminator-escalation.js +5 -8
- package/dist/core/url-policy.d.ts +2 -5
- package/dist/core/url-policy.js +8 -12
- package/dist/cursor/caret-memory.d.ts +34 -0
- package/dist/cursor/caret-memory.js +82 -0
- package/dist/cursor/coordinate-spaces.d.ts +26 -19
- package/dist/cursor/coordinate-spaces.js +32 -20
- package/dist/cursor/dom-walk.d.ts +7 -13
- package/dist/cursor/dom-walk.js +7 -13
- package/dist/cursor/edge-affinity.d.ts +7 -35
- package/dist/cursor/edge-affinity.js +13 -44
- package/dist/cursor/focused-caret.d.ts +6 -8
- package/dist/cursor/focused-caret.js +7 -16
- package/dist/cursor/height-model.d.ts +3 -3
- package/dist/cursor/height-model.js +5 -5
- package/dist/cursor/height-oracle.d.ts +10 -7
- package/dist/cursor/height-oracle.js +26 -75
- package/dist/cursor/observe-resize.d.ts +13 -0
- package/dist/cursor/observe-resize.js +43 -0
- package/dist/cursor/overlay-rects.d.ts +2 -5
- package/dist/cursor/overlay-rects.js +2 -5
- package/dist/cursor/overlay-remeasure.d.ts +6 -7
- package/dist/cursor/overlay-remeasure.js +10 -14
- package/dist/cursor/pending-marks.d.ts +7 -9
- package/dist/cursor/pending-marks.js +6 -27
- package/dist/cursor/point-offset.d.ts +16 -10
- package/dist/cursor/point-offset.js +60 -25
- package/dist/cursor/reveal-source.d.ts +7 -11
- package/dist/cursor/reveal-source.js +10 -18
- package/dist/cursor/scroll-ancestors.d.ts +9 -20
- package/dist/cursor/scroll-ancestors.js +14 -26
- package/dist/cursor/scroll-owner.d.ts +92 -0
- package/dist/cursor/scroll-owner.js +283 -0
- package/dist/cursor/scrollport.d.ts +16 -8
- package/dist/cursor/scrollport.js +28 -5
- package/dist/cursor/sticky-column.d.ts +6 -29
- package/dist/cursor/sticky-column.js +6 -49
- package/dist/cursor/sticky-measure.d.ts +14 -9
- package/dist/cursor/sticky-measure.js +99 -49
- package/dist/cursor/surface-backend.d.ts +41 -0
- package/dist/cursor/surface-backend.js +78 -0
- package/dist/cursor/typography-estimates.d.ts +3 -3
- package/dist/cursor/typography-estimates.js +3 -3
- package/dist/cursor/visual-lines.d.ts +25 -13
- package/dist/cursor/visual-lines.js +72 -28
- package/dist/cursor/widget-edge-snap.d.ts +23 -0
- package/dist/cursor/widget-edge-snap.js +39 -0
- package/dist/cursor/widget-offset.d.ts +111 -102
- package/dist/cursor/widget-offset.js +352 -177
- package/dist/debug/diagnostics-report.d.ts +6 -6
- package/dist/debug/diagnostics-report.js +5 -5
- package/dist/debug/dump-tree.js +2 -2
- package/dist/debug/editor-diagnostics.d.ts +15 -0
- package/dist/debug/editor-diagnostics.js +33 -0
- package/dist/debug/inspect.d.ts +2 -2
- package/dist/debug/inspect.js +4 -4
- package/dist/debug/interaction-trace.d.ts +14 -15
- package/dist/debug/interaction-trace.js +19 -20
- package/dist/debug/operations-log.d.ts +1 -1
- package/dist/debug/operations-log.js +1 -1
- package/dist/decorations/buckets.d.ts +6 -12
- package/dist/decorations/buckets.js +4 -11
- package/dist/decorations/decoration-state.svelte.d.ts +2 -3
- package/dist/decorations/decoration-state.svelte.js +24 -26
- package/dist/decorations/island-dom.d.ts +10 -18
- package/dist/decorations/island-dom.js +25 -50
- package/dist/decorations/reserved-attrs.d.ts +6 -8
- package/dist/decorations/reserved-attrs.js +31 -17
- package/dist/decorations/types.d.ts +6 -7
- package/dist/decorations/types.js +2 -1
- package/dist/decorations/use-block-decorations.svelte.d.ts +19 -0
- package/dist/decorations/use-block-decorations.svelte.js +71 -0
- package/dist/decorations/widget-dom.d.ts +3 -3
- package/dist/decorations/widget-dom.js +5 -5
- package/dist/dev-warn.d.ts +5 -2
- package/dist/dev-warn.js +16 -4
- package/dist/editor-actions/ancestry-folds.d.ts +9 -14
- package/dist/editor-actions/ancestry-folds.js +13 -18
- package/dist/editor-actions/block-edit-core.d.ts +49 -22
- package/dist/editor-actions/block-edit-core.js +279 -151
- package/dist/editor-actions/block-edit-scope.d.ts +63 -50
- package/dist/editor-actions/block-edit-scope.js +100 -48
- package/dist/editor-actions/block-edit.d.ts +2 -3
- package/dist/editor-actions/block-edit.js +14 -90
- package/dist/editor-actions/commit/history.d.ts +4 -4
- package/dist/editor-actions/commit/history.js +33 -34
- package/dist/editor-actions/commit/reading-write-gate.d.ts +18 -0
- package/dist/editor-actions/commit/reading-write-gate.js +56 -0
- package/dist/editor-actions/commit/text-batch.d.ts +7 -11
- package/dist/editor-actions/commit/text-batch.js +6 -7
- package/dist/editor-actions/commit/undo-controller.d.ts +6 -4
- package/dist/editor-actions/commit/undo-controller.js +346 -216
- package/dist/editor-actions/container-block-component.d.ts +32 -51
- package/dist/editor-actions/container-block-component.js +66 -92
- package/dist/editor-actions/container-edit.d.ts +4 -2
- package/dist/editor-actions/container-edit.js +14 -44
- package/dist/editor-actions/container-exit-overrides.d.ts +6 -4
- package/dist/editor-actions/container-exit-overrides.js +19 -21
- package/dist/editor-actions/deps.d.ts +25 -32
- package/dist/editor-actions/enter-completion.d.ts +12 -15
- package/dist/editor-actions/enter-completion.js +49 -51
- package/dist/editor-actions/focus/focus-dispatch.d.ts +24 -25
- package/dist/editor-actions/focus/focus-dispatch.js +33 -52
- package/dist/editor-actions/focus/focus-landing.d.ts +11 -5
- package/dist/editor-actions/focus/focus-landing.js +29 -14
- package/dist/editor-actions/focus/focus.d.ts +3 -2
- package/dist/editor-actions/focus/focus.js +42 -59
- package/dist/editor-actions/index.d.ts +4 -3
- package/dist/editor-actions/index.js +5 -4
- package/dist/editor-actions/inline-range-commit.d.ts +18 -16
- package/dist/editor-actions/inline-range-commit.js +45 -54
- package/dist/editor-actions/leaf-write.d.ts +11 -0
- package/dist/editor-actions/leaf-write.js +102 -0
- package/dist/editor-actions/list-context.d.ts +9 -10
- package/dist/editor-actions/list-context.js +115 -110
- package/dist/editor-actions/list-overrides.d.ts +13 -5
- package/dist/editor-actions/list-overrides.js +36 -12
- package/dist/editor-actions/merge-fallback.d.ts +10 -16
- package/dist/editor-actions/merge-fallback.js +11 -22
- package/dist/editor-actions/nested/container-actions.d.ts +37 -0
- package/dist/editor-actions/nested/container-actions.js +42 -0
- package/dist/editor-actions/nested/emptied-container.d.ts +5 -0
- package/dist/editor-actions/nested/emptied-container.js +5 -0
- package/dist/editor-actions/nested/nested-actions.d.ts +22 -25
- package/dist/editor-actions/nested/nested-actions.js +17 -15
- package/dist/editor-actions/nested/nested-block-edit.d.ts +3 -4
- package/dist/editor-actions/nested/nested-block-edit.js +40 -134
- package/dist/editor-actions/nested/nested-focus.d.ts +2 -3
- package/dist/editor-actions/nested/nested-focus.js +33 -21
- package/dist/editor-actions/paste-coordinator.d.ts +3 -2
- package/dist/editor-actions/paste-coordinator.js +17 -13
- package/dist/editor-actions/plugin/chrome-leaf.d.ts +11 -9
- package/dist/editor-actions/plugin/chrome-leaf.js +14 -13
- package/dist/editor-actions/plugin/container.d.ts +55 -76
- package/dist/editor-actions/plugin/container.js +105 -186
- package/dist/editor-actions/plugin/directive-container.d.ts +4 -4
- package/dist/editor-actions/plugin/directive-container.js +7 -8
- package/dist/editor-actions/reorder-action.d.ts +7 -12
- package/dist/editor-actions/reorder-action.js +32 -48
- package/dist/editor-actions/reorder-drag.d.ts +12 -8
- package/dist/editor-actions/reorder-drag.js +45 -41
- package/dist/editor-actions/replacement-focus.d.ts +13 -21
- package/dist/editor-actions/replacement-focus.js +32 -33
- package/dist/editor-actions/search-replace.js +71 -67
- package/dist/editor-actions/stored-caret.d.ts +7 -0
- package/dist/editor-actions/stored-caret.js +10 -0
- package/dist/editor-actions/table-context.d.ts +9 -11
- package/dist/editor-actions/table-context.js +70 -93
- package/dist/editor-actions/unwrap-strategies.d.ts +4 -5
- package/dist/editor-actions/unwrap-strategies.js +52 -63
- package/dist/editor-actions/whole-block-focus-surface.d.ts +19 -28
- package/dist/editor-actions/whole-block-focus-surface.js +43 -53
- package/dist/editor-events.d.ts +25 -29
- package/dist/editor-events.js +17 -28
- package/dist/editor-keys.d.ts +96 -104
- package/dist/editor-keys.js +11 -24
- package/dist/editor-props.d.ts +91 -71
- package/dist/editor-rects.d.ts +23 -34
- package/dist/editor-rects.js +9 -77
- package/dist/env.d.ts +6 -4
- package/dist/env.js +8 -4
- package/dist/index.d.ts +6 -2
- package/dist/index.js +5 -2
- package/dist/inline-menu/inline-menu-session.d.ts +37 -0
- package/dist/inline-menu/inline-menu-session.js +98 -0
- package/dist/inline-menu/inline-menu-state.svelte.d.ts +63 -0
- package/dist/inline-menu/inline-menu-state.svelte.js +409 -0
- package/dist/inline-menu/types.d.ts +77 -0
- package/dist/inline-menu/types.js +7 -0
- package/dist/invariants/child-id-parity.d.ts +23 -0
- package/dist/invariants/child-id-parity.js +39 -0
- package/dist/invariants/commit-paths.d.ts +4 -4
- package/dist/invariants/commit-paths.js +4 -4
- package/dist/invariants/commit-scope.d.ts +4 -4
- package/dist/invariants/commit-scope.js +9 -8
- package/dist/invariants/context-keys.d.ts +2 -5
- package/dist/invariants/context-keys.js +3 -6
- package/dist/invariants/descriptor.d.ts +2 -6
- package/dist/invariants/descriptor.js +2 -6
- package/dist/invariants/inline-transitions.d.ts +9 -16
- package/dist/invariants/inline-transitions.js +10 -18
- package/dist/invariants/install.d.ts +18 -27
- package/dist/invariants/install.js +29 -30
- package/dist/invariants/keeps-a-block.d.ts +7 -0
- package/dist/invariants/keeps-a-block.js +14 -0
- package/dist/invariants/landable-caret.d.ts +5 -7
- package/dist/invariants/landable-caret.js +8 -11
- package/dist/invariants/landing-focus-scroll.d.ts +7 -0
- package/dist/invariants/landing-focus-scroll.js +13 -0
- package/dist/invariants/landing-value.d.ts +13 -0
- package/dist/invariants/landing-value.js +27 -0
- package/dist/invariants/marker-css-parity.d.ts +5 -6
- package/dist/invariants/marker-css-parity.js +11 -12
- package/dist/invariants/measures-in-own-list.d.ts +6 -0
- package/dist/invariants/measures-in-own-list.js +13 -0
- package/dist/invariants/node-shape.d.ts +18 -37
- package/dist/invariants/node-shape.js +123 -79
- package/dist/invariants/open-tail.d.ts +7 -0
- package/dist/invariants/open-tail.js +45 -0
- package/dist/invariants/placement-ends-widget.d.ts +8 -0
- package/dist/invariants/placement-ends-widget.js +13 -0
- package/dist/invariants/registry.d.ts +27 -66
- package/dist/invariants/registry.js +61 -137
- package/dist/invariants/render-fidelity.d.ts +4 -4
- package/dist/invariants/render-fidelity.js +5 -5
- package/dist/invariants/selection-endpoints.d.ts +6 -7
- package/dist/invariants/selection-endpoints.js +18 -16
- package/dist/invariants/single-node-sink.d.ts +4 -5
- package/dist/invariants/single-node-sink.js +4 -5
- package/dist/invariants/snapshot-integrity.d.ts +5 -6
- package/dist/invariants/snapshot-integrity.js +1 -1
- package/dist/invariants/structural-descriptor.d.ts +6 -15
- package/dist/invariants/structural-descriptor.js +6 -15
- package/dist/menu-icons.d.ts +47 -0
- package/dist/menu-icons.js +113 -0
- package/dist/perf/instruments.d.ts +20 -5
- package/dist/perf/instruments.js +35 -15
- package/dist/perf/use-mount-gauge.svelte.js +4 -4
- package/dist/plugin.d.ts +38 -8
- package/dist/plugin.js +102 -74
- package/dist/plugins/admonitions/AdmonitionBlock.svelte +14 -11
- package/dist/plugins/admonitions/admonition-kind.js +12 -10
- package/dist/plugins/admonitions/convert-document.d.ts +5 -5
- package/dist/plugins/admonitions/convert-document.js +8 -7
- package/dist/plugins/admonitions/gh-alert.d.ts +8 -1
- package/dist/plugins/admonitions/gh-alert.js +21 -22
- package/dist/plugins/admonitions/github-alert-kind.d.ts +5 -7
- package/dist/plugins/admonitions/github-alert-kind.js +28 -37
- package/dist/plugins/admonitions/index.js +2 -2
- package/dist/plugins/admonitions/kinds.d.ts +1 -1
- package/dist/plugins/admonitions/register.js +11 -2
- package/dist/plugins/details/DetailsBlock.svelte +20 -20
- package/dist/plugins/details/details-disclosure.svelte.d.ts +5 -6
- package/dist/plugins/details/details-disclosure.svelte.js +6 -7
- package/dist/plugins/details/details-kind.d.ts +6 -7
- package/dist/plugins/details/details-kind.js +44 -59
- package/dist/plugins/emoji/emoji-recognizer.d.ts +4 -7
- package/dist/plugins/emoji/emoji-recognizer.js +7 -14
- package/dist/plugins/footnotes/FootnoteDefinition.svelte +33 -16
- package/dist/plugins/footnotes/FootnoteReference.svelte +39 -19
- package/dist/plugins/footnotes/constants.d.ts +2 -0
- package/dist/plugins/footnotes/constants.js +3 -0
- package/dist/plugins/footnotes/footnote-definition.d.ts +8 -6
- package/dist/plugins/footnotes/footnote-definition.js +69 -45
- package/dist/plugins/footnotes/footnote-lookup.d.ts +3 -3
- package/dist/plugins/footnotes/footnote-lookup.js +14 -26
- package/dist/plugins/footnotes/footnote-numbering.d.ts +11 -11
- package/dist/plugins/footnotes/footnote-numbering.js +22 -31
- package/dist/plugins/footnotes/footnote-reference.d.ts +4 -4
- package/dist/plugins/footnotes/footnote-reference.js +8 -13
- package/dist/plugins/footnotes/index.js +2 -3
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.d.ts +5 -8
- package/dist/plugins/highlight-occurrences/highlight-occurrences-plugin.js +8 -3
- package/dist/plugins/highlight-occurrences/occurrence-source.d.ts +10 -12
- package/dist/plugins/highlight-occurrences/occurrence-source.js +21 -18
- package/dist/plugins/highlight-occurrences/occurrences.d.ts +11 -11
- package/dist/plugins/highlight-occurrences/occurrences.js +14 -36
- package/dist/plugins/highlight-occurrences/word-char.d.ts +1 -0
- package/dist/plugins/highlight-occurrences/word-char.js +4 -0
- package/dist/plugins/latex/BlockMath.svelte +58 -75
- package/dist/plugins/latex/BlockMath.svelte.d.ts +2 -4
- package/dist/plugins/latex/MathInline.svelte +10 -9
- package/dist/plugins/latex/flanking.d.ts +1 -0
- package/dist/plugins/latex/flanking.js +3 -0
- package/dist/plugins/latex/index.d.ts +1 -1
- package/dist/plugins/latex/latex-kind.d.ts +4 -4
- package/dist/plugins/latex/latex-kind.js +113 -85
- package/dist/plugins/latex/math-completion.d.ts +1 -1
- package/dist/plugins/latex/math-completion.js +5 -8
- package/dist/plugins/latex/math-layout.d.ts +2 -8
- package/dist/plugins/latex/math-layout.js +0 -9
- package/dist/plugins/latex/math-renderer.d.ts +17 -20
- package/dist/plugins/latex/math-renderer.js +21 -38
- package/dist/plugins/latex/math-source.d.ts +4 -8
- package/dist/plugins/latex/math-source.js +36 -75
- package/dist/plugins/latex/register.d.ts +10 -11
- package/dist/plugins/latex/register.js +24 -10
- package/dist/plugins/latex/renderer.d.ts +9 -10
- package/dist/plugins/latex/renderer.js +9 -24
- package/dist/plugins/mermaid/MermaidBlock.svelte +63 -47
- package/dist/plugins/mermaid/index.js +1 -1
- package/dist/plugins/mermaid/mermaid-kind.d.ts +4 -7
- package/dist/plugins/mermaid/mermaid-kind.js +30 -47
- package/dist/plugins/mermaid/mermaid-renderer.d.ts +9 -16
- package/dist/plugins/mermaid/mermaid-renderer.js +12 -31
- package/dist/plugins/mermaid/register.d.ts +3 -3
- package/dist/plugins/mermaid/register.js +5 -5
- package/dist/plugins/mermaid/renderer.d.ts +5 -5
- package/dist/plugins/mermaid/renderer.js +8 -11
- package/dist/plugins/parrot/ParrotBlock.svelte +18 -7
- package/dist/plugins/parrot/ParrotBlock.svelte.d.ts +2 -2
- package/dist/plugins/parrot/parrot-plugin.js +3 -3
- package/dist/plugins/slash-commands/filter.d.ts +23 -0
- package/dist/plugins/slash-commands/filter.js +31 -0
- package/dist/plugins/slash-commands/index.d.ts +2 -0
- package/dist/plugins/slash-commands/index.js +2 -0
- package/dist/plugins/slash-commands/slash-commands-plugin.d.ts +12 -0
- package/dist/plugins/slash-commands/slash-commands-plugin.js +40 -0
- package/dist/plugins/slash-commands/slash-source.d.ts +36 -0
- package/dist/plugins/slash-commands/slash-source.js +108 -0
- package/dist/plugins/toc/TocBlock.svelte +23 -22
- package/dist/plugins/toc/TocBlock.svelte.d.ts +2 -3
- package/dist/plugins/toc/heading-outline.d.ts +7 -12
- package/dist/plugins/toc/heading-outline.js +22 -36
- package/dist/plugins/toc/navigation-queue.d.ts +2 -4
- package/dist/plugins/toc/toc-plugin.d.ts +5 -5
- package/dist/plugins/toc/toc-plugin.js +20 -13
- package/dist/presentation-mode.d.ts +15 -23
- package/dist/presentation-mode.js +19 -25
- package/dist/reactivity/block-list-state.svelte.d.ts +9 -11
- package/dist/reactivity/block-list-state.svelte.js +8 -9
- package/dist/reactivity/block-window.svelte.d.ts +12 -6
- package/dist/reactivity/block-window.svelte.js +44 -17
- package/dist/reactivity/child-list.d.ts +34 -0
- package/dist/reactivity/child-list.js +48 -0
- package/dist/reactivity/content-version.svelte.d.ts +4 -7
- package/dist/reactivity/content-version.svelte.js +3 -5
- package/dist/reactivity/hold-across.d.ts +39 -0
- package/dist/reactivity/hold-across.js +57 -0
- package/dist/reactivity/layout-state.svelte.d.ts +27 -0
- package/dist/reactivity/layout-state.svelte.js +51 -0
- package/dist/reactivity/list-tree.d.ts +39 -0
- package/dist/reactivity/list-tree.js +132 -0
- package/dist/reactivity/list-windowing.svelte.d.ts +50 -71
- package/dist/reactivity/list-windowing.svelte.js +143 -292
- package/dist/reactivity/measure-batch.d.ts +6 -8
- package/dist/reactivity/measure-batch.js +5 -6
- package/dist/reactivity/publish-ref.svelte.d.ts +16 -41
- package/dist/reactivity/publish-ref.svelte.js +21 -85
- package/dist/reactivity/scope-geometry.d.ts +6 -13
- package/dist/reactivity/scope-geometry.js +7 -14
- package/dist/reactivity/state-registry.d.ts +5 -5
- package/dist/reactivity/state-registry.js +11 -15
- package/dist/reactivity/use-container-windowing.svelte.d.ts +13 -26
- package/dist/reactivity/use-container-windowing.svelte.js +64 -74
- package/dist/reactivity/use-measured-child.svelte.d.ts +10 -0
- package/dist/reactivity/use-measured-child.svelte.js +41 -0
- package/dist/reactivity/use-window-floor.svelte.d.ts +2 -0
- package/dist/reactivity/use-window-floor.svelte.js +27 -0
- package/dist/reactivity/window-slice.d.ts +4 -4
- package/dist/reactivity/window-slice.js +0 -2
- package/dist/renderer-slot.d.ts +48 -0
- package/dist/renderer-slot.js +85 -0
- package/dist/scan-index.d.ts +4 -4
- package/dist/scan-index.js +4 -4
- package/dist/schema/block-commands.d.ts +69 -54
- package/dist/schema/block-commands.js +91 -104
- package/dist/schema/block-completions.d.ts +16 -19
- package/dist/schema/block-completions.js +25 -32
- package/dist/schema/block-component-registry.d.ts +13 -14
- package/dist/schema/block-component-registry.js +19 -17
- package/dist/schema/block-kind-descriptor.d.ts +234 -168
- package/dist/schema/block-kind-descriptor.js +151 -66
- package/dist/schema/block-openers.d.ts +48 -39
- package/dist/schema/block-openers.js +73 -83
- package/dist/schema/built-in-descriptors.d.ts +3 -5
- package/dist/schema/built-in-descriptors.js +96 -80
- package/dist/schema/child-spans.d.ts +12 -10
- package/dist/schema/child-spans.js +68 -34
- package/dist/schema/closure.d.ts +18 -16
- package/dist/schema/closure.js +24 -14
- package/dist/schema/command-id.d.ts +6 -8
- package/dist/schema/command-id.js +20 -25
- package/dist/schema/commands.d.ts +79 -81
- package/dist/schema/commands.js +156 -116
- package/dist/schema/container-raw.d.ts +51 -11
- package/dist/schema/container-raw.js +143 -14
- package/dist/schema/container-rebuilders.d.ts +17 -15
- package/dist/schema/container-rebuilders.js +30 -22
- package/dist/schema/context-actions.d.ts +25 -13
- package/dist/schema/context-actions.js +32 -17
- package/dist/schema/define-plugin-block.d.ts +8 -6
- package/dist/schema/define-plugin-block.js +6 -4
- package/dist/schema/fenced-code-raw.d.ts +30 -17
- package/dist/schema/fenced-code-raw.js +155 -107
- package/dist/schema/global-commands.d.ts +6 -6
- package/dist/schema/global-commands.js +14 -22
- package/dist/schema/height-estimates.d.ts +31 -0
- package/dist/schema/height-estimates.js +64 -0
- package/dist/schema/inline-construct-policy.d.ts +42 -55
- package/dist/schema/inline-construct-policy.js +36 -35
- package/dist/schema/insert-catalogue.d.ts +30 -0
- package/dist/schema/insert-catalogue.js +95 -0
- package/dist/schema/keybinding-overrides.d.ts +9 -11
- package/dist/schema/keybinding-overrides.js +1 -1
- package/dist/schema/keybindings.d.ts +15 -7
- package/dist/schema/keybindings.js +21 -9
- package/dist/schema/merge-rules.d.ts +5 -7
- package/dist/schema/merge-rules.js +7 -9
- package/dist/schema/opener-priorities.d.ts +4 -4
- package/dist/schema/opener-priorities.js +4 -4
- package/dist/schema/operations.d.ts +9 -11
- package/dist/schema/operations.js +3 -3
- package/dist/schema/page-role.d.ts +14 -0
- package/dist/schema/page-role.js +19 -0
- package/dist/schema/plugin-activation.d.ts +4 -6
- package/dist/schema/plugin-activation.js +12 -10
- package/dist/schema/plugin-editor-context.d.ts +25 -10
- package/dist/schema/plugin-editor-context.js +40 -9
- package/dist/schema/plugin-install.d.ts +49 -17
- package/dist/schema/plugin-install.js +51 -25
- package/dist/schema/plugin-kind.d.ts +12 -8
- package/dist/schema/plugin-kind.js +35 -42
- package/dist/schema/plugin-name.js +3 -3
- package/dist/schema/plugin-registry.d.ts +54 -0
- package/dist/schema/plugin-registry.js +70 -0
- package/dist/schema/reading.d.ts +23 -0
- package/dist/schema/reading.js +7 -0
- package/dist/schema/register-once.d.ts +3 -5
- package/dist/schema/register-once.js +7 -16
- package/dist/schema/registration-checks.d.ts +12 -16
- package/dist/schema/registration-checks.js +35 -51
- package/dist/schema/registration-pairs.d.ts +54 -0
- package/dist/schema/registration-pairs.js +48 -0
- package/dist/schema/registration-pending.d.ts +8 -12
- package/dist/schema/registration-pending.js +9 -9
- package/dist/schema/registry-reset.d.ts +8 -4
- package/dist/schema/registry-reset.js +13 -26
- package/dist/schema/registry-view.d.ts +25 -13
- package/dist/schema/registry-view.js +26 -20
- package/dist/schema/reserved-chords.d.ts +9 -10
- package/dist/schema/reserved-chords.js +73 -78
- package/dist/schema/reserved-chrome.d.ts +12 -11
- package/dist/schema/reserved-chrome.js +15 -11
- package/dist/schema/setext-raw.d.ts +13 -0
- package/dist/schema/setext-raw.js +33 -0
- package/dist/schema/stored-as.d.ts +20 -0
- package/dist/schema/stored-as.js +6 -0
- package/dist/schema/table-cell-raw.d.ts +18 -7
- package/dist/schema/table-cell-raw.js +28 -7
- package/dist/schema/whole-block-unit.d.ts +5 -4
- package/dist/schema/whole-block-unit.js +5 -4
- package/dist/search/document-scan.d.ts +3 -3
- package/dist/search/document-scan.js +2 -2
- package/dist/search/matcher.d.ts +1 -1
- package/dist/search/regex-executor.d.ts +5 -6
- package/dist/search/regex-executor.js +6 -8
- package/dist/search/replace.d.ts +2 -5
- package/dist/search/replace.js +2 -5
- package/dist/search/search-state.svelte.d.ts +5 -5
- package/dist/search/search-state.svelte.js +12 -16
- package/dist/selection/autoscroll.d.ts +6 -9
- package/dist/selection/block-hit-test.d.ts +16 -24
- package/dist/selection/block-hit-test.js +29 -22
- package/dist/selection/caret-doors.d.ts +15 -14
- package/dist/selection/caret-doors.js +37 -26
- package/dist/selection/caret-landing.d.ts +62 -0
- package/dist/selection/caret-landing.js +157 -0
- package/dist/selection/caret-restore.d.ts +17 -10
- package/dist/selection/caret-restore.js +10 -22
- package/dist/selection/caret-target.d.ts +30 -0
- package/dist/selection/caret-target.js +84 -0
- package/dist/selection/char-endpoint-snap.d.ts +6 -10
- package/dist/selection/char-endpoint-snap.js +8 -14
- package/dist/selection/clipboard-text.d.ts +5 -12
- package/dist/selection/clipboard-text.js +69 -172
- package/dist/selection/covered-block.d.ts +6 -8
- package/dist/selection/covered-block.js +8 -19
- package/dist/selection/cross-block/clipboard.d.ts +3 -2
- package/dist/selection/cross-block/clipboard.js +13 -4
- package/dist/selection/cross-block/dispatch.d.ts +47 -43
- package/dist/selection/cross-block/dispatch.js +12 -23
- package/dist/selection/cross-block/format-range.d.ts +18 -21
- package/dist/selection/cross-block/format-range.js +104 -103
- package/dist/selection/cross-block/format-toggle.d.ts +10 -15
- package/dist/selection/cross-block/format-toggle.js +28 -33
- package/dist/selection/cross-block/keydown.d.ts +4 -4
- package/dist/selection/cross-block/keydown.js +93 -152
- package/dist/selection/cross-block/ops.d.ts +19 -34
- package/dist/selection/cross-block/ops.js +110 -95
- package/dist/selection/cross-block/paste.d.ts +2 -3
- package/dist/selection/cross-block/paste.js +61 -104
- package/dist/selection/cross-block/pointer.d.ts +17 -15
- package/dist/selection/cross-block/pointer.js +74 -25
- package/dist/selection/cross-block/type-replace.d.ts +4 -6
- package/dist/selection/cross-block/type-replace.js +53 -146
- package/dist/selection/dead-space-caret.d.ts +20 -28
- package/dist/selection/dead-space-caret.js +79 -87
- package/dist/selection/drag-pointer.d.ts +22 -5
- package/dist/selection/drag-pointer.js +63 -31
- package/dist/selection/gap-caret.d.ts +17 -28
- package/dist/selection/gap-caret.js +14 -26
- package/dist/selection/grid-selection.d.ts +12 -0
- package/dist/selection/grid-selection.js +22 -0
- package/dist/selection/keyboard-extend.d.ts +27 -39
- package/dist/selection/keyboard-extend.js +94 -116
- package/dist/selection/multi-click.d.ts +37 -0
- package/dist/selection/multi-click.js +197 -0
- package/dist/selection/native-bridge.d.ts +30 -37
- package/dist/selection/native-bridge.js +80 -100
- package/dist/selection/nearest-block.d.ts +17 -12
- package/dist/selection/nearest-block.js +37 -18
- package/dist/selection/path-lookup.d.ts +31 -14
- package/dist/selection/path-lookup.js +110 -20
- package/dist/selection/path-math.d.ts +9 -11
- package/dist/selection/path-math.js +5 -7
- package/dist/selection/pointer-gesture.d.ts +9 -0
- package/dist/selection/pointer-gesture.js +11 -0
- package/dist/selection/pointer-session.d.ts +10 -16
- package/dist/selection/pointer-session.js +6 -7
- package/dist/selection/primitives.d.ts +64 -33
- package/dist/selection/primitives.js +61 -53
- package/dist/selection/range-coverage.d.ts +94 -0
- package/dist/selection/range-coverage.js +365 -0
- package/dist/selection/range-delete-ceremony.d.ts +28 -74
- package/dist/selection/range-delete-ceremony.js +100 -141
- package/dist/selection/range-delete-chrome.d.ts +20 -33
- package/dist/selection/range-delete-chrome.js +53 -78
- package/dist/selection/range-delete-table-coverage.d.ts +11 -25
- package/dist/selection/range-delete-table-coverage.js +42 -112
- package/dist/selection/range-delete-table.d.ts +14 -12
- package/dist/selection/range-delete-table.js +106 -310
- package/dist/selection/range-delete.d.ts +18 -19
- package/dist/selection/range-delete.js +83 -123
- package/dist/selection/round-trip-restore.d.ts +18 -0
- package/dist/selection/round-trip-restore.js +19 -0
- package/dist/selection/selection-announcer.d.ts +17 -0
- package/dist/selection/selection-announcer.js +25 -0
- package/dist/selection/selection-description.d.ts +4 -3
- package/dist/selection/selection-description.js +5 -4
- package/dist/selection/selection-drop.d.ts +52 -0
- package/dist/selection/selection-drop.js +317 -0
- package/dist/selection/selection-restore.d.ts +20 -33
- package/dist/selection/selection-restore.js +21 -44
- package/dist/selection/selection-state.svelte.d.ts +50 -42
- package/dist/selection/selection-state.svelte.js +144 -98
- package/dist/selection/shared-keydown.d.ts +22 -27
- package/dist/selection/shared-keydown.js +25 -45
- package/dist/selection/table-endpoint-snap.d.ts +17 -41
- package/dist/selection/table-endpoint-snap.js +54 -80
- package/dist/selection/table-rect-extend.d.ts +3 -6
- package/dist/selection/table-rect-extend.js +19 -14
- package/dist/styles/editor-theme.css +75 -53
- package/dist/styles/editor.css +248 -139
- package/dist/testing/conformance-core.d.ts +50 -18
- package/dist/testing/conformance-core.js +88 -50
- package/dist/testing/container-conformance.d.ts +48 -84
- package/dist/testing/container-conformance.js +159 -285
- package/dist/testing/headless-actions.d.ts +34 -19
- package/dist/testing/headless-actions.js +116 -65
- package/dist/testing/headless-block-list.svelte.d.ts +16 -0
- package/dist/testing/headless-block-list.svelte.js +22 -0
- package/dist/testing/inline-conformance.d.ts +15 -22
- package/dist/testing/inline-conformance.js +131 -148
- package/dist/testing/kind-conformance.d.ts +19 -24
- package/dist/testing/kind-conformance.js +204 -117
- package/dist/testing/kit-reading.d.ts +7 -0
- package/dist/testing/kit-reading.js +16 -0
- package/dist/testing/mount-dom-stubs.d.ts +4 -5
- package/dist/testing/mount-dom-stubs.js +8 -5
- package/dist/testing/parse-convergence.d.ts +10 -10
- package/dist/testing/parse-convergence.js +14 -49
- package/dist/testing.d.ts +13 -9
- package/dist/testing.js +28 -38
- package/dist/tree-operations/blockquote.d.ts +8 -14
- package/dist/tree-operations/blockquote.js +25 -45
- package/dist/tree-operations/chain-rebuild.d.ts +34 -25
- package/dist/tree-operations/chain-rebuild.js +115 -52
- package/dist/tree-operations/children.d.ts +5 -9
- package/dist/tree-operations/children.js +7 -11
- package/dist/tree-operations/cleanup.d.ts +6 -7
- package/dist/tree-operations/cleanup.js +14 -11
- package/dist/tree-operations/clone.js +5 -4
- package/dist/tree-operations/container-lift.d.ts +10 -5
- package/dist/tree-operations/container-lift.js +20 -14
- package/dist/tree-operations/container-offsets.d.ts +22 -0
- package/dist/tree-operations/container-offsets.js +89 -0
- package/dist/tree-operations/content-write.d.ts +52 -29
- package/dist/tree-operations/content-write.js +155 -110
- package/dist/tree-operations/index.d.ts +4 -4
- package/dist/tree-operations/index.js +4 -4
- package/dist/tree-operations/keep-one-block.d.ts +10 -0
- package/dist/tree-operations/keep-one-block.js +19 -0
- package/dist/tree-operations/leaf-range.d.ts +33 -0
- package/dist/tree-operations/leaf-range.js +67 -0
- package/dist/tree-operations/list/empty-check.d.ts +2 -3
- package/dist/tree-operations/list/empty-check.js +4 -4
- package/dist/tree-operations/list/exit-replacement.d.ts +4 -6
- package/dist/tree-operations/list/exit-replacement.js +4 -9
- package/dist/tree-operations/list/item-partition.d.ts +2 -2
- package/dist/tree-operations/list/item-partition.js +2 -2
- package/dist/tree-operations/list/list-builders.d.ts +18 -16
- package/dist/tree-operations/list/list-builders.js +59 -30
- package/dist/tree-operations/list/ordered-markers.d.ts +7 -16
- package/dist/tree-operations/list/ordered-markers.js +7 -16
- package/dist/tree-operations/list/reconcile-task.d.ts +16 -7
- package/dist/tree-operations/list/reconcile-task.js +80 -23
- package/dist/tree-operations/list/sublist-separator.d.ts +7 -7
- package/dist/tree-operations/list/sublist-separator.js +20 -27
- package/dist/tree-operations/list/task-paragraph.d.ts +25 -0
- package/dist/tree-operations/list/task-paragraph.js +54 -0
- package/dist/tree-operations/list/unwrap-merge.d.ts +8 -16
- package/dist/tree-operations/list/unwrap-merge.js +44 -79
- package/dist/tree-operations/node-ops.d.ts +30 -52
- package/dist/tree-operations/node-ops.js +152 -218
- package/dist/tree-operations/node-primitives.d.ts +44 -31
- package/dist/tree-operations/node-primitives.js +84 -60
- package/dist/tree-operations/open-tail.d.ts +25 -0
- package/dist/tree-operations/open-tail.js +100 -0
- package/dist/tree-operations/parse-block.d.ts +15 -2
- package/dist/tree-operations/parse-block.js +19 -4
- package/dist/tree-operations/paste/apply.d.ts +7 -8
- package/dist/tree-operations/paste/apply.js +33 -63
- package/dist/tree-operations/paste/body-write.d.ts +8 -6
- package/dist/tree-operations/paste/body-write.js +13 -14
- package/dist/tree-operations/paste/container-match.d.ts +7 -10
- package/dist/tree-operations/paste/container-match.js +76 -58
- package/dist/tree-operations/paste/container-paste.d.ts +3 -3
- package/dist/tree-operations/paste/container-paste.js +3 -3
- package/dist/tree-operations/paste/dispatch.d.ts +26 -29
- package/dist/tree-operations/paste/dispatch.js +68 -53
- package/dist/tree-operations/paste/focus-target.d.ts +11 -14
- package/dist/tree-operations/paste/focus-target.js +13 -18
- package/dist/tree-operations/paste/hooks.d.ts +7 -12
- package/dist/tree-operations/paste/hooks.js +49 -46
- package/dist/tree-operations/paste/line-ending.d.ts +11 -0
- package/dist/tree-operations/paste/line-ending.js +32 -0
- package/dist/tree-operations/paste/list-absorb.d.ts +8 -11
- package/dist/tree-operations/paste/list-absorb.js +17 -19
- package/dist/tree-operations/paste/list-break-out.d.ts +12 -11
- package/dist/tree-operations/paste/list-break-out.js +24 -32
- package/dist/tree-operations/paste/parent-scope.d.ts +8 -12
- package/dist/tree-operations/paste/parent-scope.js +9 -16
- package/dist/tree-operations/paste/paste-deps.d.ts +14 -9
- package/dist/tree-operations/paste/paste-replacement.d.ts +20 -3
- package/dist/tree-operations/paste/paste-replacement.js +73 -42
- package/dist/tree-operations/paste/paste-transforms.d.ts +5 -7
- package/dist/tree-operations/paste/paste-transforms.js +18 -27
- package/dist/tree-operations/paste/replacement-parse.d.ts +19 -0
- package/dist/tree-operations/paste/replacement-parse.js +24 -0
- package/dist/tree-operations/paste/strategy.d.ts +1 -1
- package/dist/tree-operations/paste/strategy.js +1 -1
- package/dist/tree-operations/paste/table-slice.js +15 -10
- package/dist/tree-operations/paste-surfaces.d.ts +18 -29
- package/dist/tree-operations/paste-surfaces.js +14 -10
- package/dist/tree-operations/path-mutate.d.ts +7 -8
- package/dist/tree-operations/path-mutate.js +4 -4
- package/dist/tree-operations/reorder-unit.d.ts +4 -5
- package/dist/tree-operations/reorder-unit.js +5 -6
- package/dist/tree-operations/reorder.d.ts +7 -9
- package/dist/tree-operations/reorder.js +39 -40
- package/dist/tree-operations/settle.d.ts +42 -53
- package/dist/tree-operations/settle.js +241 -162
- package/dist/tree-operations/sharing.d.ts +5 -5
- package/dist/tree-operations/splice-many.d.ts +5 -5
- package/dist/tree-operations/splice-many.js +5 -5
- package/dist/tree-operations/stored-as.d.ts +13 -0
- package/dist/tree-operations/stored-as.js +48 -0
- package/dist/tree-operations/structural-change.d.ts +11 -15
- package/dist/tree-operations/structural-change.js +10 -14
- package/dist/tree-operations/structural-suffix.d.ts +22 -0
- package/dist/tree-operations/structural-suffix.js +61 -0
- package/dist/tree-operations/sub-table-copy.d.ts +7 -0
- package/dist/tree-operations/sub-table-copy.js +40 -36
- package/dist/tree-operations/table-grid-clipboard.d.ts +2 -7
- package/dist/tree-operations/table-grid-clipboard.js +11 -36
- package/dist/tree-operations/table-mutations.d.ts +7 -3
- package/dist/tree-operations/table-mutations.js +45 -9
- package/dist/tree-operations/unshare.d.ts +11 -15
- package/dist/tree-operations/unshare.js +15 -17
- package/dist/undo/manager.js +1 -1
- package/dist/undo/types.d.ts +2 -2
- package/docs/guide/consumer-guide.md +329 -205
- package/docs/guide/directives.md +7 -7
- package/docs/guide/plugin-api.md +267 -183
- package/docs/guide/plugin-guide.md +341 -235
- package/docs/guide/plugin-testing.md +96 -82
- package/package.json +17 -21
- package/dist/ambient/ambient-cursor.d.ts +0 -41
- package/dist/ambient/ambient-cursor.js +0 -120
- package/dist/components/blocks/code/code-paste.d.ts +0 -24
- package/dist/components/blocks/code/code-paste.js +0 -21
- package/dist/components/blocks/table/cell-clipboard.d.ts +0 -33
- package/dist/components/blocks/table/cell-clipboard.js +0 -67
- package/dist/components/blocks/text/hidden-suffix.d.ts +0 -10
- package/dist/components/blocks/text/hidden-suffix.js +0 -15
- package/dist/components/blocks/text/link-source-bytes.d.ts +0 -37
- package/dist/components/image/image-source-bytes.d.ts +0 -15
- package/dist/components/image/image-source-bytes.js +0 -80
- package/dist/cursor/content-offsets.d.ts +0 -29
- package/dist/cursor/content-offsets.js +0 -151
- package/dist/cursor/reveal-anchor.d.ts +0 -30
- package/dist/cursor/reveal-anchor.js +0 -31
- package/dist/invariants/split-landing.d.ts +0 -8
- package/dist/invariants/split-landing.js +0 -15
- package/dist/selection/double-click-trim.d.ts +0 -17
- package/dist/selection/double-click-trim.js +0 -57
- package/dist/tree-operations/list/terminator.d.ts +0 -17
- package/dist/tree-operations/list/terminator.js +0 -60
- package/dist/tree-operations/paste/replace-block-at-parent.d.ts +0 -29
- package/dist/tree-operations/paste/replace-block-at-parent.js +0 -75
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { assertInvariant } from '../../../assert';
|
|
8
8
|
import { appendNode } from './scan-state';
|
|
9
|
+
import { isHighSurrogate, isLowSurrogate } from '../../lines';
|
|
9
10
|
// ── Flanking classification (§6.2 phase 1) ──────────────────────────────────
|
|
10
11
|
/** Unicode punctuation (ASCII punctuation + general category P). */
|
|
11
12
|
function isPunct(ch) {
|
|
@@ -28,10 +29,8 @@ function isWhitespace(ch) {
|
|
|
28
29
|
// Flanking neighbors are read as full code points: a UTF-16 unit read would classify an
|
|
29
30
|
// astral neighbor as a lone surrogate, while the spec defines the classes over code points.
|
|
30
31
|
function codePointBefore(raw, pos) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const high = raw.charCodeAt(pos - 2);
|
|
34
|
-
if (high >= 0xd800 && high <= 0xdbff)
|
|
32
|
+
if (pos >= 2 && isLowSurrogate(raw.charCodeAt(pos - 1))) {
|
|
33
|
+
if (isHighSurrogate(raw.charCodeAt(pos - 2)))
|
|
35
34
|
return raw.slice(pos - 2, pos);
|
|
36
35
|
}
|
|
37
36
|
return raw[pos - 1];
|
|
@@ -91,7 +90,7 @@ export function processEmphasis(ctx, floor) {
|
|
|
91
90
|
const win = openNodeWindow(ctx, delimiters[floor].node);
|
|
92
91
|
const slotOf = mapDelimiterSlots(win, delimiters, floor, top);
|
|
93
92
|
if (slotOf === null) {
|
|
94
|
-
// Warn rather than throw: the state
|
|
93
|
+
// Warn rather than throw: the state should be unreachable, and a false positive must not
|
|
95
94
|
// take a real editor's block to the fallback. The runs left behind stay literal text.
|
|
96
95
|
assertInvariant('emphasis-run-node-live', () => ({
|
|
97
96
|
code: 'emphasis-run-node-missing',
|
|
@@ -166,14 +165,14 @@ export function processEmphasis(ctx, floor) {
|
|
|
166
165
|
delimiters.length = floor;
|
|
167
166
|
}
|
|
168
167
|
const CHAR_BUCKET = { '*': 0, _: 6, '~': 12 };
|
|
169
|
-
/** §6.2 multiple-of-3 rule, on
|
|
168
|
+
/** §6.2 multiple-of-3 rule, on the original run lengths (commonmark.js `origdelims`). */
|
|
170
169
|
function isOddMatch(opener, closer) {
|
|
171
170
|
return ((closer.canOpen || opener.canClose) &&
|
|
172
171
|
closer.origLength % 3 !== 0 &&
|
|
173
172
|
(opener.origLength + closer.origLength) % 3 === 0);
|
|
174
173
|
}
|
|
175
174
|
/**
|
|
176
|
-
* cmark-gfm pairs strikethrough runs only at equal length. A
|
|
175
|
+
* cmark-gfm pairs strikethrough runs only at equal length. A check of its own: the multiple-of-3
|
|
177
176
|
* rule misses the flanking-pure `~a~~` / `~~a~` shapes, and `*`/`_` carry no such rule.
|
|
178
177
|
*/
|
|
179
178
|
function tildeLengthsAgree(opener, closer) {
|
|
@@ -182,8 +181,8 @@ function tildeLengthsAgree(opener, closer) {
|
|
|
182
181
|
function wrapMatch(win, raw, opener, closer, openerSlot, closerSlot) {
|
|
183
182
|
const use = opener.length >= 2 && closer.length >= 2 ? 2 : 1;
|
|
184
183
|
const kind = opener.char === '~' ? 'strikethrough' : use === 2 ? 'strong' : 'emphasis';
|
|
185
|
-
// The NONE
|
|
186
|
-
// is the caller's contract (slots ascend with scan order, relinks skip forward)
|
|
184
|
+
// The `NONE` branch only bounds this walk. What rules out cycling the list `closeNodeWindow`
|
|
185
|
+
// walks is the caller's contract (slots ascend with scan order, relinks skip forward).
|
|
187
186
|
const children = [];
|
|
188
187
|
for (let i = win.next[openerSlot]; i !== closerSlot && i !== NONE; i = win.next[i]) {
|
|
189
188
|
children.push(win.slot[i]);
|
|
@@ -255,11 +254,8 @@ function insertNodeAfter(win, at, node) {
|
|
|
255
254
|
if (after !== NONE)
|
|
256
255
|
win.prev[after] = i;
|
|
257
256
|
}
|
|
258
|
-
/**
|
|
259
|
-
*
|
|
260
|
-
* Null when a run node is missing: the pass's precondition broke upstream, and the caller must
|
|
261
|
-
* drop the pass rather than walk off a linked list that has no end.
|
|
262
|
-
*/
|
|
257
|
+
/** Delimiters and their run nodes share scan order, so one merge walk places them all. Null when
|
|
258
|
+
* a run node is missing: the caller must drop the pass rather than walk a list with no end. */
|
|
263
259
|
function mapDelimiterSlots(win, delimiters, floor, top) {
|
|
264
260
|
const slotOf = new Array(top);
|
|
265
261
|
let s = 0;
|
|
@@ -4,4 +4,6 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { type InlineNode } from '../../nodes';
|
|
6
6
|
import type { LinkReferenceResolver } from '../link-reference-resolver';
|
|
7
|
-
|
|
7
|
+
import type { GrammarView } from '../../../schema/block-openers';
|
|
8
|
+
/** `grammar` is the editor's: a handler whose plugin it leaves out never runs, so its bytes stay text. */
|
|
9
|
+
export declare function scanInline(raw: string, start: number, end: number, resolver: LinkReferenceResolver | undefined, grammar: GrammarView): InlineNode[];
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* from ../index.ts. Contract: InlineNode[] with absolute offsets into raw, covering [start, end).
|
|
4
4
|
*/
|
|
5
5
|
import { isBuiltinInlineKind } from '../../nodes';
|
|
6
|
+
import { resolvesIn } from '../../../schema/plugin-activation';
|
|
6
7
|
import { inlineDescendants } from '../walk';
|
|
7
8
|
import { handleAngle, scanGfmAutolinks } from './autolinks';
|
|
8
9
|
import { handleBang, handleCloseBracket, handleOpenBracket } from './brackets';
|
|
@@ -11,25 +12,26 @@ import { handleDelimiter, processEmphasis } from './emphasis';
|
|
|
11
12
|
import { appendNode, createScanContext, flushPendingText, mergeAdjacentText } from './scan-state';
|
|
12
13
|
import { handleAmpersand, handleBackslash, handleNewline } from './simple-nodes';
|
|
13
14
|
import { getPrefixRungs, getUnreservedRungs, hasInlineSyntax, hasPrefixRungs, hasScanProbeRungs, isScanProbeTrigger } from './plugin-syntax';
|
|
14
|
-
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
import { BUILTIN_TRIGGERS } from './triggers';
|
|
16
|
+
// Every character that always sends a range through the scan loop: the built-in triggers the
|
|
17
|
+
// table marks `always`, plus `@`, which anchors the GFM email lookback without a handler.
|
|
18
|
+
const SPECIAL = new Uint8Array(128);
|
|
19
|
+
for (const [char, { scanned }] of BUILTIN_TRIGGERS) {
|
|
20
|
+
if (scanned === 'always')
|
|
21
|
+
SPECIAL[char.charCodeAt(0)] = 1;
|
|
22
|
+
}
|
|
23
|
+
SPECIAL[0x40] = 1; // @
|
|
24
|
+
// Bare http/www autolinks hold no character above, so `:` counts only before `//` and `w`/`W`
|
|
25
|
+
// only on `www.`; a lookahead past `end` costs one wasted scan, never a node.
|
|
21
26
|
const PROBE_SCHEME = 2;
|
|
22
27
|
const PROBE_WWW = 3;
|
|
23
|
-
const SPECIAL = new Uint8Array(128);
|
|
24
|
-
for (let i = 0; i < SPECIAL_CHARS.length; i++)
|
|
25
|
-
SPECIAL[SPECIAL_CHARS.charCodeAt(i)] = 1;
|
|
26
28
|
SPECIAL[0x3a] = PROBE_SCHEME; // :
|
|
27
29
|
SPECIAL[0x57] = PROBE_WWW; // W
|
|
28
30
|
SPECIAL[0x77] = PROBE_WWW; // w
|
|
29
31
|
/** Fast bail for the per-keystroke hot path: plain prose skips the scan loop. */
|
|
30
32
|
function needsScan(raw, start, end) {
|
|
31
|
-
// Registered plugin triggers are held out of
|
|
32
|
-
//
|
|
33
|
+
// Registered plugin triggers are held out of SPECIAL, so check them only when something
|
|
34
|
+
// is registered; an unregistered scan pays one always-false test per character.
|
|
33
35
|
const probePlugins = hasScanProbeRungs();
|
|
34
36
|
for (let i = start; i < end; i++) {
|
|
35
37
|
const code = raw.charCodeAt(i);
|
|
@@ -64,17 +66,16 @@ function needsScan(raw, start, end) {
|
|
|
64
66
|
}
|
|
65
67
|
return false;
|
|
66
68
|
}
|
|
67
|
-
//
|
|
68
|
-
// recognizer
|
|
69
|
-
|
|
70
|
-
function tryRungs(ctx, rungs) {
|
|
69
|
+
// The first handler whose prefix matches at `ctx.pos`, whose plugin this editor lists and whose
|
|
70
|
+
// recognizer returns a node wins; that node is checked here, once for both dispatch paths.
|
|
71
|
+
function tryRungs(ctx, rungs, grammar) {
|
|
71
72
|
if (!rungs)
|
|
72
73
|
return null;
|
|
73
74
|
const { raw, pos, end } = ctx;
|
|
74
75
|
for (const rung of rungs) {
|
|
75
|
-
if (!raw.startsWith(rung.prefix, pos))
|
|
76
|
+
if (!raw.startsWith(rung.prefix, pos) || !resolvesIn(grammar.activation, rung.owner))
|
|
76
77
|
continue;
|
|
77
|
-
const node = rung.recognizer(raw, pos, end);
|
|
78
|
+
const node = rung.recognizer(raw, pos, end, grammar);
|
|
78
79
|
if (!node)
|
|
79
80
|
continue;
|
|
80
81
|
if (node.start !== pos) {
|
|
@@ -83,48 +84,46 @@ function tryRungs(ctx, rungs) {
|
|
|
83
84
|
if (node.end <= pos) {
|
|
84
85
|
throw new Error(`inline-syntax "${rung.prefix}" did not advance`);
|
|
85
86
|
}
|
|
86
|
-
// A block's scan range is not always its raw (a heading's
|
|
87
|
-
//
|
|
88
|
-
// needs, and the overrun leaves no trace beyond wrong caret offsets. Half-open: ending AT
|
|
89
|
-
// `end` is ordinary, only past it is a fault.
|
|
87
|
+
// A block's scan range is not always its whole raw (a setext heading's stops before its
|
|
88
|
+
// underline), so a recognizer that reads past `end` takes bytes the block still needs.
|
|
90
89
|
if (node.end > end) {
|
|
91
90
|
throw new Error(`inline-syntax "${rung.prefix}" claimed [${node.start}, ${node.end}), past the scan ` +
|
|
92
|
-
`range end ${end}
|
|
91
|
+
`range end ${end}: a recognizer must bound its search by the \`end\` it is given`);
|
|
93
92
|
}
|
|
94
93
|
stampClaim(node, rung);
|
|
95
94
|
return node;
|
|
96
95
|
}
|
|
97
96
|
return null;
|
|
98
97
|
}
|
|
99
|
-
// A
|
|
100
|
-
// editor's
|
|
101
|
-
// into GFM and take the author's syntax with it. Descendants stamp on the same rule; a rung's
|
|
102
|
-
// own kind needs no stamp. Assigned, never merged, so a recognizer cannot name its own claimer.
|
|
98
|
+
// A built-in node a plugin handler created (an `image` over `![[cat.png]]`) is marked with that
|
|
99
|
+
// handler, so the editor's writers re-serialize it in the plugin's syntax rather than GFM.
|
|
103
100
|
function stampClaim(node, claim) {
|
|
104
101
|
for (const inline of inlineDescendants([node])) {
|
|
105
102
|
if (isBuiltinInlineKind(inline.kind))
|
|
106
103
|
inline.syntaxClaim = claim;
|
|
107
104
|
}
|
|
108
105
|
}
|
|
109
|
-
|
|
106
|
+
/** `grammar` is the editor's: a handler whose plugin it leaves out never runs, so its bytes stay text. */
|
|
107
|
+
export function scanInline(raw, start, end, resolver, grammar) {
|
|
110
108
|
if (start >= end)
|
|
111
109
|
return [];
|
|
112
110
|
if (!needsScan(raw, start, end)) {
|
|
113
111
|
return [{ kind: 'text', start, end, text: raw.slice(start, end) }];
|
|
114
112
|
}
|
|
115
113
|
const ctx = createScanContext(raw, start, end, resolver);
|
|
116
|
-
//
|
|
117
|
-
//
|
|
118
|
-
// so the scan never returns to a position the switch has read. Hoisted for the empty registry.
|
|
114
|
+
// Plugin handlers on a built-in trigger run before the switch, whose handler consumes the
|
|
115
|
+
// trigger (`handleBang` eats `![` whole); hoisted so an empty registry costs nothing.
|
|
119
116
|
const consultPrefixRungs = hasPrefixRungs();
|
|
120
117
|
while (ctx.pos < ctx.end) {
|
|
121
118
|
if (consultPrefixRungs) {
|
|
122
|
-
const node = tryRungs(ctx, getPrefixRungs(raw[ctx.pos]));
|
|
119
|
+
const node = tryRungs(ctx, getPrefixRungs(raw[ctx.pos]), grammar);
|
|
123
120
|
if (node) {
|
|
124
121
|
appendNode(ctx, node);
|
|
125
122
|
continue;
|
|
126
123
|
}
|
|
127
124
|
}
|
|
125
|
+
// A switch with direct calls, not a lookup in the trigger table: an indirect call per
|
|
126
|
+
// trigger measured slower. A test holds the cases equal to the table's rows.
|
|
128
127
|
switch (raw[ctx.pos]) {
|
|
129
128
|
case '\\':
|
|
130
129
|
handleBackslash(ctx);
|
|
@@ -157,7 +156,7 @@ export function scanInline(raw, start, end, resolver) {
|
|
|
157
156
|
break;
|
|
158
157
|
default: {
|
|
159
158
|
if (hasInlineSyntax()) {
|
|
160
|
-
const node = tryRungs(ctx, getUnreservedRungs(raw[ctx.pos]));
|
|
159
|
+
const node = tryRungs(ctx, getUnreservedRungs(raw[ctx.pos]), grammar);
|
|
161
160
|
if (node) {
|
|
162
161
|
appendNode(ctx, node);
|
|
163
162
|
break;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Registry for plugin inline syntax: a trigger character plus an optional prefix beginning with
|
|
3
|
+
* it, tried lowest priority first (numbered as `OPENER_PRIORITIES`), so a longer prefix can outrank
|
|
4
|
+
* a built-in trigger (footnotes' `[^` beating `[`). An `InlineRung` is one handler. A reserved
|
|
5
|
+
* trigger is one the scanner handles itself (./triggers.ts); its plugin handlers run first.
|
|
6
6
|
*/
|
|
7
7
|
import type { ImageSyntaxRewriter, InlineNode, InlineSyntaxClaim } from '../../nodes';
|
|
8
|
+
import type { GrammarView } from '../../../schema/block-openers';
|
|
8
9
|
/**
|
|
9
10
|
* Inspect `raw` at `pos` (the trigger) within `[pos, end)`. Return a node with `start === pos`
|
|
10
11
|
* and `pos < node.end <= end` to claim that span (`node.end` is the scan advance), or `null` to
|
|
@@ -12,59 +13,50 @@ import type { ImageSyntaxRewriter, InlineNode, InlineSyntaxClaim } from '../../n
|
|
|
12
13
|
* range may be a slice of it, so a terminator past `end` must decline. Claiming past it throws.
|
|
13
14
|
*/
|
|
14
15
|
export type InlineSyntaxRecognizer = (raw: string, pos: number, end: number) => InlineNode | null;
|
|
15
|
-
/** The priority
|
|
16
|
+
/** The priority numbers registrations use; lower is consulted first. */
|
|
16
17
|
export declare const INLINE_PRIORITIES: {
|
|
17
|
-
/**
|
|
18
|
+
/** Handlers consulted before a reserved trigger's built-in handling. */
|
|
18
19
|
readonly prefixOverride: 40;
|
|
19
|
-
/** The
|
|
20
|
+
/** The built-in handler's own place in the order; not registerable. */
|
|
20
21
|
readonly builtin: 50;
|
|
21
|
-
/** Default
|
|
22
|
+
/** Default for bare-trigger registrations. */
|
|
22
23
|
readonly plugin: 100;
|
|
23
24
|
};
|
|
24
25
|
export interface InlineSyntaxOptions {
|
|
25
|
-
/**
|
|
26
|
-
*
|
|
27
|
-
* ahead of the built-in case, so a prefix that also opens a built-in construct outranks it
|
|
28
|
-
* and the recognizer must decline the overlap itself. Getting that wrong is silent; see the
|
|
29
|
-
* plugin guide's reserved-trigger section.
|
|
30
|
-
*/
|
|
26
|
+
/** Two or more characters starting with the trigger; required for a reserved trigger, where it
|
|
27
|
+
* runs before the built-in handler, so decline a built-in construct it also opens. */
|
|
31
28
|
prefix?: string;
|
|
32
|
-
/**
|
|
29
|
+
/** Lower is consulted first. Defaults to `INLINE_PRIORITIES.plugin`. */
|
|
33
30
|
priority?: number;
|
|
34
|
-
/**
|
|
35
|
-
*
|
|
36
|
-
* declines those edits rather than writing GFM over the claimed bytes. Return `null` for
|
|
37
|
-
* anything your grammar cannot hold: source-identical bytes are dropped silently by the
|
|
38
|
-
* commit's equality guard. See the plugin guide's inline section.
|
|
39
|
-
*/
|
|
31
|
+
/** Re-serializes the `image` nodes this recognizer creates; without it the editor refuses
|
|
32
|
+
* their edits rather than write GFM over your syntax. Return `null` for what it can't hold. */
|
|
40
33
|
rewriteImage?: ImageSyntaxRewriter;
|
|
41
|
-
/**
|
|
42
|
-
*
|
|
43
|
-
* typing it lands its twin after the caret, so the new opener pairs with that twin rather
|
|
44
|
-
* than with a later formula's delimiter (see `delimiter-autopair.ts`). Bare triggers only.
|
|
45
|
-
*/
|
|
34
|
+
/** Typing the trigger (`$…$`) inserts its closer after the caret, so the opener pairs with it
|
|
35
|
+
* rather than a later formula's delimiter (`delimiter-autopair.ts`). Bare triggers only. */
|
|
46
36
|
autoPair?: boolean;
|
|
47
37
|
}
|
|
38
|
+
/** The scan hands its grammar on as a fourth argument, which only the core text directive reads. */
|
|
39
|
+
type ScopedRecognizer = (raw: string, pos: number, end: number, grammar: GrammarView) => InlineNode | null;
|
|
48
40
|
export interface InlineRung extends InlineSyntaxClaim {
|
|
49
|
-
recognizer:
|
|
41
|
+
recognizer: ScopedRecognizer;
|
|
50
42
|
priority: number;
|
|
43
|
+
/** The plugin whose setup registered the handler; null for a core one. */
|
|
44
|
+
owner: string | null;
|
|
51
45
|
}
|
|
52
46
|
export declare function registerInlineSyntax(trigger: string, recognizer: InlineSyntaxRecognizer, options?: InlineSyntaxOptions): void;
|
|
53
|
-
/**
|
|
54
|
-
*
|
|
55
|
-
* BEFORE that arm, so it owes the overlap a decline; the conformance kit refuses it an exemption.
|
|
56
|
-
*/
|
|
47
|
+
/** Whether the built-in scanner handles `trigger` itself. A plugin handler on one runs before the
|
|
48
|
+
* built-in handler, so it must decline the overlap itself. */
|
|
57
49
|
export declare function isReservedInlineTrigger(trigger: string): boolean;
|
|
58
|
-
/**
|
|
50
|
+
/** The handlers for a trigger in dispatch order, from whichever map holds it. Empty when none. */
|
|
59
51
|
export declare function getInlineRungs(trigger: string): readonly InlineRung[];
|
|
60
52
|
export declare function getUnreservedRungs(char: string): InlineRung[] | undefined;
|
|
61
53
|
export declare function getPrefixRungs(char: string): InlineRung[] | undefined;
|
|
62
54
|
export declare function hasInlineSyntax(): boolean;
|
|
63
|
-
/** Read once per scan, so
|
|
55
|
+
/** Read once per scan, so with no probed trigger `needsScan` pays nothing extra per character. */
|
|
64
56
|
export declare function hasScanProbeRungs(): boolean;
|
|
65
57
|
export declare function isScanProbeTrigger(char: string): boolean;
|
|
66
|
-
/** Whether
|
|
67
|
-
export declare function isAutoPairTrigger(char: string): boolean;
|
|
58
|
+
/** Whether any plugin the editor's grammar lists asked for `char` to close itself as it is typed. */
|
|
59
|
+
export declare function isAutoPairTrigger(char: string, grammar: GrammarView): boolean;
|
|
68
60
|
/** False costs the scan loop nothing. */
|
|
69
61
|
export declare function hasPrefixRungs(): boolean;
|
|
70
|
-
export
|
|
62
|
+
export {};
|
|
@@ -1,46 +1,37 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Registry for plugin inline syntax: a trigger character plus an optional prefix beginning with
|
|
3
|
+
* it, tried lowest priority first (numbered as `OPENER_PRIORITIES`), so a longer prefix can outrank
|
|
4
|
+
* a built-in trigger (footnotes' `[^` beating `[`). An `InlineRung` is one handler. A reserved
|
|
5
|
+
* trigger is one the scanner handles itself (./triggers.ts); its plugin handlers run first.
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
8
|
-
|
|
7
|
+
import { resolvesIn } from '../../../schema/plugin-activation';
|
|
8
|
+
import { createPluginRegistry } from '../../../schema/plugin-registry';
|
|
9
|
+
import { BUILTIN_TRIGGERS } from './triggers';
|
|
10
|
+
/** The priority numbers registrations use; lower is consulted first. */
|
|
9
11
|
export const INLINE_PRIORITIES = {
|
|
10
|
-
/**
|
|
12
|
+
/** Handlers consulted before a reserved trigger's built-in handling. */
|
|
11
13
|
prefixOverride: 40,
|
|
12
|
-
/** The
|
|
14
|
+
/** The built-in handler's own place in the order; not registerable. */
|
|
13
15
|
builtin: 50,
|
|
14
|
-
/** Default
|
|
16
|
+
/** Default for bare-trigger registrations. */
|
|
15
17
|
plugin: 100
|
|
16
18
|
};
|
|
17
|
-
/**
|
|
18
|
-
* The characters `scanInline`'s switch claims. A bare registration on one would never fire; it
|
|
19
|
-
* needs a prefix rung priced below `builtin`. Kept in step with `./index.ts` by G4.18.
|
|
20
|
-
*/
|
|
21
|
-
const BUILTIN_TRIGGERS = new Set(['\\', '`', '&', '\n', '*', '_', '~', '[', ']', '!', '<']);
|
|
22
|
-
/**
|
|
23
|
-
* Reserved triggers a registration makes visible to `needsScan` (scan/index.ts) instead, probed
|
|
24
|
-
* only while a rung lives on them. `!` is here rather than in `SPECIAL_CHARS` because making it
|
|
25
|
-
* unconditionally special would drag every prose `"Hello!"` through the full scan loop.
|
|
26
|
-
*/
|
|
27
|
-
const SCAN_PROBED_RESERVED = new Set(['!']);
|
|
28
|
-
/**
|
|
29
|
-
* Reserved triggers with no route to the scan at all, so a prefix rung on one would be accepted
|
|
30
|
-
* yet never consulted: the silent no-op this seam exists to prevent. A construct needing `]`
|
|
31
|
-
* gives it a route first. Pinned against a SPECIAL_CHARS edit by G4.18.
|
|
32
|
-
*/
|
|
33
|
-
const REJECTED_RESERVED = new Set([']']);
|
|
34
19
|
const NO_RUNGS = [];
|
|
35
|
-
//
|
|
36
|
-
|
|
20
|
+
// One entry per (trigger, prefix, priority); the dispatch maps below are derived from it.
|
|
21
|
+
const handlers = createPluginRegistry({
|
|
22
|
+
label: 'registerInlineSyntax',
|
|
23
|
+
isBuiltin: () => false,
|
|
24
|
+
onChange: rebuildDispatch
|
|
25
|
+
});
|
|
26
|
+
// Reserved and unreserved handlers are consulted at different points of the scan, so each
|
|
27
|
+
// point reads one map and its empty check is one `size` read.
|
|
37
28
|
const reservedRegistry = new Map();
|
|
38
29
|
const unreservedRegistry = new Map();
|
|
39
|
-
// Triggers
|
|
40
|
-
//
|
|
41
|
-
const autoPairTriggers = new
|
|
42
|
-
// Triggers the fast bail (`needsScan`, scan/index.ts)
|
|
43
|
-
//
|
|
30
|
+
// Triggers that close themselves as they are typed (`autoPair`), each with every plugin that asked
|
|
31
|
+
// (null for a registration outside a plugin); the built-in backtick is not here.
|
|
32
|
+
const autoPairTriggers = new Map();
|
|
33
|
+
// Triggers the fast bail (`needsScan`, scan/index.ts) checks only while a plugin handler is
|
|
34
|
+
// registered on them; a trigger it always checks is never added.
|
|
44
35
|
const scanProbeTriggers = new Set();
|
|
45
36
|
// ── Registration ───────────────────────────────────────────────────────────────
|
|
46
37
|
export function registerInlineSyntax(trigger, recognizer, options) {
|
|
@@ -52,19 +43,19 @@ export function registerInlineSyntax(trigger, recognizer, options) {
|
|
|
52
43
|
throw new Error(`registerInlineSyntax: prefix ${JSON.stringify(prefix)} must begin with the trigger ` +
|
|
53
44
|
`${JSON.stringify(trigger)} and be at least two characters`);
|
|
54
45
|
}
|
|
55
|
-
const
|
|
56
|
-
if (
|
|
57
|
-
//
|
|
58
|
-
//
|
|
46
|
+
const builtin = BUILTIN_TRIGGERS.get(trigger);
|
|
47
|
+
if (builtin) {
|
|
48
|
+
// A test pins this message verbatim. A reserved trigger is reachable only through a
|
|
49
|
+
// prefix with a priority below `builtin`.
|
|
59
50
|
if (prefix === undefined) {
|
|
60
51
|
throw new Error(`registerInlineSyntax: ${JSON.stringify(trigger)} is claimed by the built-in scanner, ` +
|
|
61
|
-
`which dispatches it before the plugin registry
|
|
52
|
+
`which dispatches it before the plugin registry; the recognizer would never fire`);
|
|
62
53
|
}
|
|
63
|
-
if (
|
|
54
|
+
if (builtin.scanned === 'never') {
|
|
64
55
|
throw new Error(`registerInlineSyntax: reserved trigger ${JSON.stringify(trigger)} is skipped by the ` +
|
|
65
|
-
`scanner's fast bail (
|
|
66
|
-
`
|
|
67
|
-
`
|
|
56
|
+
`scanner's fast bail (it matters only inside "["-bearing ranges), so a prefix ` +
|
|
57
|
+
`inline syntax handler on it would never fire in plain text; make the trigger ` +
|
|
58
|
+
`scan-visible or scan-probed in scan/triggers.ts before registering`);
|
|
68
59
|
}
|
|
69
60
|
if (priority >= INLINE_PRIORITIES.builtin) {
|
|
70
61
|
throw new Error(`registerInlineSyntax: reserved trigger ${JSON.stringify(trigger)} needs a priority ` +
|
|
@@ -77,26 +68,38 @@ export function registerInlineSyntax(trigger, recognizer, options) {
|
|
|
77
68
|
`itself, so it cannot be combined with a prefix`);
|
|
78
69
|
}
|
|
79
70
|
const effectivePrefix = prefix ?? trigger;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
priority,
|
|
88
|
-
rewriteImage
|
|
89
|
-
});
|
|
90
|
-
// A rung on a trigger the fast bail would skip must make the scan visit it,
|
|
91
|
-
// or the recognizer is the silent no-op this seam refuses to accept.
|
|
92
|
-
if (!reserved || SCAN_PROBED_RESERVED.has(trigger))
|
|
93
|
-
scanProbeTriggers.add(trigger);
|
|
94
|
-
if (autoPair)
|
|
95
|
-
autoPairTriggers.add(trigger);
|
|
71
|
+
handlers.register(JSON.stringify([trigger, effectivePrefix, priority]), {
|
|
72
|
+
trigger,
|
|
73
|
+
recognizer,
|
|
74
|
+
prefix: effectivePrefix,
|
|
75
|
+
priority,
|
|
76
|
+
rewriteImage,
|
|
77
|
+
autoPair: autoPair ?? false
|
|
96
78
|
}, `registerInlineSyntax: ${JSON.stringify(trigger)} already registered at prefix ` +
|
|
97
79
|
`${JSON.stringify(effectivePrefix)}, priority ${priority}`);
|
|
98
80
|
}
|
|
99
|
-
|
|
81
|
+
function rebuildDispatch() {
|
|
82
|
+
reservedRegistry.clear();
|
|
83
|
+
unreservedRegistry.clear();
|
|
84
|
+
autoPairTriggers.clear();
|
|
85
|
+
scanProbeTriggers.clear();
|
|
86
|
+
for (const { value, owner } of handlers.records()) {
|
|
87
|
+
const { trigger, autoPair, ...rung } = value;
|
|
88
|
+
const builtin = BUILTIN_TRIGGERS.get(trigger);
|
|
89
|
+
const registry = builtin ? reservedRegistry : unreservedRegistry;
|
|
90
|
+
registry.set(trigger, [...(registry.get(trigger) ?? []), { ...rung, owner }]);
|
|
91
|
+
// A handler on a trigger the fast bail would skip must make the scan check it, or the
|
|
92
|
+
// recognizer is the silent no-op this registry refuses to accept.
|
|
93
|
+
if (!builtin || builtin.scanned === 'when-registered')
|
|
94
|
+
scanProbeTriggers.add(trigger);
|
|
95
|
+
if (autoPair)
|
|
96
|
+
autoPairTriggers.set(trigger, (autoPairTriggers.get(trigger) ?? new Set()).add(owner));
|
|
97
|
+
}
|
|
98
|
+
for (const rungs of [...reservedRegistry.values(), ...unreservedRegistry.values()]) {
|
|
99
|
+
rungs.sort(compareRungs);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Dispatch order is sorted, so it does not depend on registration order.
|
|
100
103
|
function compareRungs(a, b) {
|
|
101
104
|
if (a.priority !== b.priority)
|
|
102
105
|
return a.priority - b.priority;
|
|
@@ -104,30 +107,13 @@ function compareRungs(a, b) {
|
|
|
104
107
|
return b.prefix.length - a.prefix.length;
|
|
105
108
|
return a.prefix < b.prefix ? -1 : a.prefix > b.prefix ? 1 : 0;
|
|
106
109
|
}
|
|
107
|
-
// Overwriting a matching (prefix, priority) rung is the dev-server replace path.
|
|
108
|
-
function upsertRung(registry, trigger, rung) {
|
|
109
|
-
const rungs = registry.get(trigger);
|
|
110
|
-
if (!rungs) {
|
|
111
|
-
registry.set(trigger, [rung]);
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
const at = rungs.findIndex((r) => r.prefix === rung.prefix && r.priority === rung.priority);
|
|
115
|
-
if (at >= 0)
|
|
116
|
-
rungs[at] = rung;
|
|
117
|
-
else {
|
|
118
|
-
rungs.push(rung);
|
|
119
|
-
rungs.sort(compareRungs);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
110
|
// ── Dispatch accessors ───────────────────────────────────────────────────────────
|
|
123
|
-
/**
|
|
124
|
-
*
|
|
125
|
-
* BEFORE that arm, so it owes the overlap a decline; the conformance kit refuses it an exemption.
|
|
126
|
-
*/
|
|
111
|
+
/** Whether the built-in scanner handles `trigger` itself. A plugin handler on one runs before the
|
|
112
|
+
* built-in handler, so it must decline the overlap itself. */
|
|
127
113
|
export function isReservedInlineTrigger(trigger) {
|
|
128
114
|
return BUILTIN_TRIGGERS.has(trigger);
|
|
129
115
|
}
|
|
130
|
-
/**
|
|
116
|
+
/** The handlers for a trigger in dispatch order, from whichever map holds it. Empty when none. */
|
|
131
117
|
export function getInlineRungs(trigger) {
|
|
132
118
|
const registry = BUILTIN_TRIGGERS.has(trigger) ? reservedRegistry : unreservedRegistry;
|
|
133
119
|
return registry.get(trigger) ?? NO_RUNGS;
|
|
@@ -141,24 +127,24 @@ export function getPrefixRungs(char) {
|
|
|
141
127
|
export function hasInlineSyntax() {
|
|
142
128
|
return unreservedRegistry.size > 0;
|
|
143
129
|
}
|
|
144
|
-
/** Read once per scan, so
|
|
130
|
+
/** Read once per scan, so with no probed trigger `needsScan` pays nothing extra per character. */
|
|
145
131
|
export function hasScanProbeRungs() {
|
|
146
132
|
return scanProbeTriggers.size > 0;
|
|
147
133
|
}
|
|
148
134
|
export function isScanProbeTrigger(char) {
|
|
149
135
|
return scanProbeTriggers.has(char);
|
|
150
136
|
}
|
|
151
|
-
/** Whether
|
|
152
|
-
export function isAutoPairTrigger(char) {
|
|
153
|
-
|
|
137
|
+
/** Whether any plugin the editor's grammar lists asked for `char` to close itself as it is typed. */
|
|
138
|
+
export function isAutoPairTrigger(char, grammar) {
|
|
139
|
+
const owners = autoPairTriggers.get(char);
|
|
140
|
+
if (!owners)
|
|
141
|
+
return false;
|
|
142
|
+
for (const owner of owners)
|
|
143
|
+
if (resolvesIn(grammar.activation, owner))
|
|
144
|
+
return true;
|
|
145
|
+
return false;
|
|
154
146
|
}
|
|
155
147
|
/** False costs the scan loop nothing. */
|
|
156
148
|
export function hasPrefixRungs() {
|
|
157
149
|
return reservedRegistry.size > 0;
|
|
158
150
|
}
|
|
159
|
-
export function __resetInlineSyntaxForTests() {
|
|
160
|
-
reservedRegistry.clear();
|
|
161
|
-
unreservedRegistry.clear();
|
|
162
|
-
scanProbeTriggers.clear();
|
|
163
|
-
autoPairTriggers.clear();
|
|
164
|
-
}
|
|
@@ -8,6 +8,8 @@ import type { BacktickRunIndex } from '../backticks';
|
|
|
8
8
|
import type { LinkReferenceResolver } from '../link-reference-resolver';
|
|
9
9
|
export interface ScanContext {
|
|
10
10
|
raw: string;
|
|
11
|
+
/** Where the scan range begins, which GFM's autolink boundary treats as a line start. */
|
|
12
|
+
start: number;
|
|
11
13
|
pos: number;
|
|
12
14
|
end: number;
|
|
13
15
|
/** Working list, flat, offset-ordered; emphasis wraps later. */
|
|
@@ -6,9 +6,6 @@
|
|
|
6
6
|
import { type ScanContext } from './scan-state';
|
|
7
7
|
export declare function handleBackslash(ctx: ScanContext): void;
|
|
8
8
|
export declare function handleAmpersand(ctx: ScanContext): void;
|
|
9
|
-
/**
|
|
10
|
-
*
|
|
11
|
-
* spaces + newline; one space is a softbreak. Lookback is clamped to the pending text run, so
|
|
12
|
-
* spaces inside an already-consumed node cannot count.
|
|
13
|
-
*/
|
|
9
|
+
/** §6.7: two or more spaces before the newline make a hard break covering them and the newline.
|
|
10
|
+
* The lookback stops at the pending text run, so spaces inside an earlier node never count. */
|
|
14
11
|
export declare function handleNewline(ctx: ScanContext): void;
|
|
@@ -29,11 +29,8 @@ export function handleAmpersand(ctx) {
|
|
|
29
29
|
else
|
|
30
30
|
ctx.pos++;
|
|
31
31
|
}
|
|
32
|
-
/**
|
|
33
|
-
*
|
|
34
|
-
* spaces + newline; one space is a softbreak. Lookback is clamped to the pending text run, so
|
|
35
|
-
* spaces inside an already-consumed node cannot count.
|
|
36
|
-
*/
|
|
32
|
+
/** §6.7: two or more spaces before the newline make a hard break covering them and the newline.
|
|
33
|
+
* The lookback stops at the pending text run, so spaces inside an earlier node never count. */
|
|
37
34
|
export function handleNewline(ctx) {
|
|
38
35
|
const { raw, pos, textStart } = ctx;
|
|
39
36
|
let i = pos - 1;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The characters the inline scanner handles itself, one row each: the handler it runs and when
|
|
3
|
+
* the fast bail (`needsScan`, ./index.ts) looks for the character. The fast bail and the plugin
|
|
4
|
+
* registry's reserved triggers (./plugin-syntax.ts) derive from this table, and a test holds the
|
|
5
|
+
* scanner's switch to its rows.
|
|
6
|
+
*/
|
|
7
|
+
import type { ScanContext } from './scan-state';
|
|
8
|
+
/**
|
|
9
|
+
* When the fast bail looks for a trigger: `always`; `when-registered`, only while a plugin
|
|
10
|
+
* handler is registered on it; or `never`, which also refuses a plugin handler on it.
|
|
11
|
+
*/
|
|
12
|
+
export type TriggerScan = 'always' | 'when-registered' | 'never';
|
|
13
|
+
export interface BuiltinTrigger {
|
|
14
|
+
handler: (ctx: ScanContext) => void;
|
|
15
|
+
scanned: TriggerScan;
|
|
16
|
+
}
|
|
17
|
+
export declare const BUILTIN_TRIGGERS: ReadonlyMap<string, BuiltinTrigger>;
|