55 lines
1.8 KiB
Rust
55 lines
1.8 KiB
Rust
|
|
//! AST types for nuwiki documents.
|
||
|
|
//!
|
||
|
|
//! Types here are syntax-agnostic — both vimwiki and (eventually) markdown
|
||
|
|
//! produce the same node shapes.
|
||
|
|
|
||
|
|
pub mod block;
|
||
|
|
pub mod inline;
|
||
|
|
pub mod link;
|
||
|
|
pub mod span;
|
||
|
|
pub mod visit;
|
||
|
|
|
||
|
|
pub use block::{
|
||
|
|
BlockNode, BlockquoteNode, CheckboxState, CommentNode, DefinitionItemNode, DefinitionListNode,
|
||
|
|
ErrorNode, HeadingNode, HorizontalRuleNode, ListItemNode, ListNode, ListSymbol, MathBlockNode,
|
||
|
|
ParagraphNode, PreformattedNode, TableAlign, TableCellNode, TableNode, TableRowNode, TagNode,
|
||
|
|
TagScope,
|
||
|
|
};
|
||
|
|
pub use inline::{
|
||
|
|
inline_text, BoldItalicNode, BoldNode, CodeNode, ColorNode, InlineNode, ItalicNode, Keyword,
|
||
|
|
KeywordNode, MathInlineNode, SoftBreakNode, StrikethroughNode, SubscriptNode, SuperscriptNode,
|
||
|
|
TextNode,
|
||
|
|
};
|
||
|
|
pub use link::{
|
||
|
|
ExternalLinkNode, LinkKind, LinkTarget, RawUrlNode, TransclusionNode, WikiLinkNode,
|
||
|
|
};
|
||
|
|
pub use span::{Position, Span};
|
||
|
|
pub use visit::{
|
||
|
|
walk_block, walk_definition_item, walk_document, walk_inline, walk_list, walk_list_item,
|
||
|
|
walk_table, walk_table_row, Visitor,
|
||
|
|
};
|
||
|
|
|
||
|
|
/// Root of an AST.
|
||
|
|
#[derive(Debug, Clone, Default, PartialEq, Eq)]
|
||
|
|
pub struct DocumentNode {
|
||
|
|
pub span: Span,
|
||
|
|
pub children: Vec<BlockNode>,
|
||
|
|
pub metadata: PageMetadata,
|
||
|
|
}
|
||
|
|
|
||
|
|
/// Document-level placeholders parsed from `%title` / `%nohtml` / `%template`
|
||
|
|
/// / `%date` directives, plus the file-level tag accumulator.
|
||
|
|
///
|
||
|
|
/// New fields are added at the bottom; consumers should construct with
|
||
|
|
/// `..Default::default()` to stay forward-compatible.
|
||
|
|
#[derive(Debug, Clone, Default, PartialEq, Eq)]
|
||
|
|
pub struct PageMetadata {
|
||
|
|
pub title: Option<String>,
|
||
|
|
pub nohtml: bool,
|
||
|
|
pub template: Option<String>,
|
||
|
|
pub date: Option<String>,
|
||
|
|
/// File-scope tags parsed by the tag lexer. Convenience
|
||
|
|
/// projection of the `BlockNode::Tag` nodes whose scope is `File`.
|
||
|
|
pub tags: Vec<String>,
|
||
|
|
}
|