#[non_exhaustive]pub enum Gesture {
Show 24 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,
}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 three, 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.