#[non_exhaustive]pub enum Gesture {
Show 29 variants
WrapRange(InlineKind),
ToggleInline(InlineKind),
SetBlock,
ToggleBlockContainer(BlockContainerKind),
InsertThematicBreak,
ToggleCodeBlock,
SetCodeLanguage,
ToggleTaskItem,
SetTaskChecked,
ToggleTaskChecked,
InsertLink,
InsertImage,
InsertFootnote,
InsertLiteral,
InsertLineBreak,
SplitBlock,
RenumberOrderedLists,
TableInsertRow,
TableDeleteRow,
TableInsertColumn,
TableDeleteColumn,
TableSetAlignment,
TableMoveRow,
TableMoveColumn,
SetMarkColor,
InsertTable,
InsertDirective,
SetBlockAttrs,
WrapRangeAttrs,
}Expand description
One authoring gesture, named with whatever kind it takes — the question
Format::supports answers.
Twig’s formats are ragged: Djot spells all eight inline marks and
Markdown four (a fifth with MarkdownExtensions::highlight), HTML spells
marks, headings, quotes, lists, code blocks, links and images but no task
box, footnote or table edit, AsciiDoc spells everything but footnotes and
tables, XML nothing. Every Editor
method already reports that as
Error::UnsupportedFormat — but only once called, which is too late for a
UI that wants to disable the button rather than let it fail.
A variant carries a kind exactly where the Editor method takes one, so
the query is spelled with the same value as the call:
if Format::Markdown.supports(Gesture::ToggleInline(InlineKind::Mark)) {
// never runs: `==mark==` is emit-only in Markdown.
}Only the gestures with a format-level gate appear — which, since the last nine were added, is every gesture the editor has. Those nine read no format spelling at all until an HTML document showed what that cost:
- The
Table*variants. HTML’s parser lowers<table>/<tr>/<td>to the same nodes a pipe table produces, soEditor::table_insert_rowand its siblings extracted the grid and wrote pipe text over the elements. HTML reparses that as a paragraph — a document that still parses, so nothing rolled it back and no error was returned. The table was simply gone. Gesture::SplitBlock. The blank line it writes means “two blocks” only where blank lines separate blocks; inside a<p>it is whitespace, soEditor::split_blockreported success over an unchanged document.Gesture::RenumberOrderedLists. A textualN.rewrite finds nothing in an<ol>, whose numbering is in the tag, and called the no-op a success.
#[non_exhaustive] for the reason Format is: the gesture list grows with
the editor surface, and a caller matching on this should not need a rebuild.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
WrapRange(InlineKind)
ToggleInline(InlineKind)
SetBlock
ToggleBlockContainer(BlockContainerKind)
InsertThematicBreak
ToggleCodeBlock
SetCodeLanguage
ToggleTaskItem
SetTaskChecked
ToggleTaskChecked
InsertLink
InsertImage
InsertFootnote
InsertLiteral
InsertLineBreak
SplitBlock
RenumberOrderedLists
TableInsertRow
TableDeleteRow
TableInsertColumn
TableDeleteColumn
TableSetAlignment
TableMoveRow
TableMoveColumn
SetMarkColor
Colour the highlight the caret is in — Editor::set_mark_color.
The one gesture whose support is a fact about the parse extensions
rather than about the format: it needs
MarkdownExtensions::highlight_colors, so ask
Format::supports_with rather than Format::supports, which
answers for default options and so always answers false here.
InsertTable
Mint a fresh table — Editor::insert_table. Behind the same gate as
the seven table edits: a format that can re-spell a table can write one.
InsertDirective
Write a leaf directive — Editor::insert_directive. Supported where
the format’s parser reads a printed named container back as one, which
for Markdown means MarkdownExtensions::directives: ask
Format::supports_with rather than Format::supports, which
answers for default options and so answers false there.
SetBlockAttrs
Replace a block’s attribute set — Editor::set_block_attrs.
Supported where the format’s parser reads a block’s printed attributes
back, which for Markdown means MarkdownExtensions::html_elements:
ask Format::supports_with rather than Format::supports.
WrapRangeAttrs
Wrap a range in an attributed span — Editor::wrap_range_attrs.
Supported where the format reads the printed span back: djot and HTML,
and Markdown under MarkdownExtensions::html_elements; not AsciiDoc.