Expand description
Event types for the streaming document pipeline.
DocSpec documents are streams of typed events. Readers (crate::EventSource)
emit events; writers (crate::EventSink) consume them in document order.
This module defines every event type and the rules for well-formed streams.
For higher-level design decisions, see the Architecture document.
§Error Handling
Events never carry errors; errors flow out-of-band via crate::Result. See
crate::EventSource::next_event for full semantics. Readers recover silently
when possible (missing optional attributes, unrecognized elements, unsupported
features) and return Err only on fatal conditions (malformed structure,
truncated stream, invalid encoding).
§Asset References
Event::Image carries an crate::ImageSource (asset id or URI), not bytes.
Writers resolve bytes lazily via crate::AssetProvider; assets must remain
accessible until Event::EndDocument.
§Well-Formedness Rules
Readers MUST produce well-formed streams; writers MAY assume well-formedness.
- Every
Start*has exactly one matchingEnd*. They nest but never overlap. - Exactly one root:
Event::StartDocument. Empty containers are valid. Event::Textappears only inside containers, never at root.Event::StartLinkappears inside inline-accepting blocks (paragraphs, headings, list items, cells, definition details) and does not nest.- List items (
Event::StartOrderedListItem,Event::StartUnorderedListItem) appear inside block containers and may nest;levelis 0-indexed. Event::StartCaptionappears at most once per table, before any rows.- Each footnote id appears in exactly one
Event::FootnoteRefand oneEvent::StartFootnote. Event::StartTableRowappears only insideEvent::StartTable;Event::StartTableCellandEvent::StartTableHeaderonly insideEvent::StartTableRow.- Readers MUST normalize overlapping source styles into nested
Event::StartTextStylespans via close-and-reopen. - All open
Event::StartTextStylespans MUST close before the enclosing block-end event (Event::EndParagraph,Event::EndHeading,Event::EndOrderedListItem,Event::EndUnorderedListItem,Event::EndTableCell,Event::EndTableHeader,Event::EndCaption,Event::EndDefinitionTerm,Event::EndDefinitionDetail). Event::StartTextStyleandEvent::StartPreformattedMUST NOT nest inside each other.- Inside a link,
Event::StartLinkSHOULD be the outer container andEvent::StartTextStylethe inner. - Empty
Event::StartTextStylespans MUST NOT be emitted: at least oneEvent::Textevent must appear before the matchingEvent::EndTextStyle.
Enums§
- Event
- A streaming document event.
- Text
Style Kind - The kind of text formatting carried by a
Event::StartTextStyleevent.