pub enum Role {
Body,
Heading(u8),
Code,
Link,
Mark(Option<MarkColor>),
ListMarker,
ListIndent,
QuoteGutter,
Rule,
Delimiter,
Image,
Math,
}Expand description
What a glyph is, typographically — the semantic role a frontend maps to its
own presentation. Mutually exclusive per glyph (a glyph is a heading, or a
link, or body text — not two at once); the compositional emphasis a run can
also carry lives in Style’s bold/italic/underline/strikethrough
flags alongside this.
Variants§
Body
Ordinary prose — the surface’s default text.
Heading(u8)
A heading of the given level (1 = top). A GUI scales the font by level; a terminal cycles a color by it.
Code
Code — inline `verbatim` or a fenced block. A GUI renders it in a
monospace family; a terminal tints it.
Link
A hyperlink’s visible text (or bare URL/email).
Mark(Option<MarkColor>)
Highlighted / marked text (==mark==), carrying the colour the author
named if they named one. None is a plain highlight — the only kind
there was before twig grew Obsidian’s ==🔴 red== spelling, and
still the only kind a format without the colour extension can produce.
ListMarker
A list item’s bullet or number — synthetic decoration, not authored text.
ListIndent
The room a list item’s marker takes on the item’s later rows — a
second paragraph, a code block’s second line. Spelled with the
marker’s own characters, so a frontend setting a proportional face
measures it at exactly the marker’s width and the rows line up; drawn
as blank space, never as the marker. [Glyph::drawn] is the character
to put on screen.
QuoteGutter
A block quote’s gutter (│), drawn down its left edge.
Rule
A drawn rule: a thematic break (───) or a table’s borders. A GUI that
draws its own tables ignores the border glyphs; the rule still reaches it.
Delimiter
Raw markup a revealed line is showing: the * around an emphasis, the
# opening a heading, a link’s ](dest). Only ever emitted for the
caret’s line under MarkupMode::Full —
every other line resolves its markup away and has none of these.
A role rather than a Style flag because it is what the glyph is: the
delimiter of an emphasis is not itself emphasised text. A frontend
typically dims it, so the revealed line still reads as prose with its
scaffolding visible rather than as source code. One that doesn’t map it
draws it as body text, which is correct if unsubtle.
Image
A block-level image’s placeholder text (🖼 alt). The glyphs are a
default rendering any surface can paint as-is (a terminal shows the
label); an image-capable frontend skips the placeholder row named by the
map’s MediaInfo rows_span and paints the
real picture in its place — the same skip-the-picture contract
Role::Rule table borders use.
Math
A formula standing in for its picture: the single atom glyph an inline
$…$ renders to on a surface that paints pictures in a line, and the
∑ tex placeholder label a display $$…$$ block renders to on every
surface. Both are default renderings a plain surface paints as-is;
a picture-capable frontend reads the map’s
MathInfo side-table, typesets the TeX
it names, and draws the picture in the glyph’s or the rows’ place —
the Role::Image contract, one glyph narrower.
Never the formula’s source: on the caret’s line a formula reveals to
its TeX in Role::Code, with its delimiters in Role::Delimiter,
in every markup mode — because a formula’s content is not its picture,
and hiding the delimiters alone would leave nothing to edit.