#[non_exhaustive]pub enum Gesture {
Show 25 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,
}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 and nothing block-level, AsciiDoc spells everything but links,
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.