Skip to main content

Gesture

Enum Gesture 

Source
#[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, so Editor::table_insert_row and 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, so Editor::split_block reported success over an unchanged document.
  • Gesture::RenumberOrderedLists. A textual N. 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
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

WrapRange(InlineKind)

§

ToggleInline(InlineKind)

§

SetBlock

§

ToggleBlockContainer(BlockContainerKind)

§

InsertThematicBreak

§

ToggleCodeBlock

§

SetCodeLanguage

§

ToggleTaskItem

§

SetTaskChecked

§

ToggleTaskChecked

§

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.

Trait Implementations§

Source§

impl Clone for Gesture

Source§

fn clone(&self) -> Gesture

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for Gesture

Source§

impl Debug for Gesture

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Eq for Gesture

Source§

impl PartialEq for Gesture

Source§

fn eq(&self, other: &Gesture) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for Gesture

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.