Introduce AstNode and AstNodeIter enums.

This commit is contained in:
Tom Alexander 2023-09-27 14:24:08 -04:00
parent 35f058a354
commit 9111408d83
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE
2 changed files with 167 additions and 0 deletions

View File

@ -1 +1,110 @@
use crate::types::AngleLink;
use crate::types::BabelCall;
use crate::types::Bold;
use crate::types::Citation;
use crate::types::CitationReference;
use crate::types::Clock;
use crate::types::Code;
use crate::types::Comment;
use crate::types::CommentBlock;
use crate::types::DiarySexp;
use crate::types::Document;
use crate::types::Drawer;
use crate::types::DynamicBlock;
use crate::types::Entity;
use crate::types::ExampleBlock;
use crate::types::ExportBlock;
use crate::types::ExportSnippet;
use crate::types::FixedWidthArea;
use crate::types::FootnoteDefinition;
use crate::types::FootnoteReference;
use crate::types::GreaterBlock;
use crate::types::Heading;
use crate::types::HorizontalRule;
use crate::types::InlineBabelCall;
use crate::types::InlineSourceBlock;
use crate::types::Italic;
use crate::types::Keyword;
use crate::types::LatexEnvironment;
use crate::types::LatexFragment;
use crate::types::LineBreak;
use crate::types::OrgMacro;
use crate::types::Paragraph;
use crate::types::PlainLink;
use crate::types::PlainList;
use crate::types::PlainText;
use crate::types::Planning;
use crate::types::PropertyDrawer;
use crate::types::RadioLink;
use crate::types::RadioTarget;
use crate::types::RegularLink;
use crate::types::Section;
use crate::types::SrcBlock;
use crate::types::StatisticsCookie;
use crate::types::StrikeThrough;
use crate::types::Subscript;
use crate::types::Superscript;
use crate::types::Table;
use crate::types::Target;
use crate::types::Timestamp;
use crate::types::Underline;
use crate::types::Verbatim;
use crate::types::VerseBlock;
pub enum AstNode<'r, 's> {
// Document Nodes
Document(&'r Document<'s>),
Heading(&'r Heading<'s>),
Section(&'r Section<'s>),
// Elements
Paragraph(&'r Paragraph<'s>),
PlainList(&'r PlainList<'s>),
GreaterBlock(&'r GreaterBlock<'s>),
DynamicBlock(&'r DynamicBlock<'s>),
FootnoteDefinition(&'r FootnoteDefinition<'s>),
Comment(&'r Comment<'s>),
Drawer(&'r Drawer<'s>),
PropertyDrawer(&'r PropertyDrawer<'s>),
Table(&'r Table<'s>),
VerseBlock(&'r VerseBlock<'s>),
CommentBlock(&'r CommentBlock<'s>),
ExampleBlock(&'r ExampleBlock<'s>),
ExportBlock(&'r ExportBlock<'s>),
SrcBlock(&'r SrcBlock<'s>),
Clock(&'r Clock<'s>),
DiarySexp(&'r DiarySexp<'s>),
Planning(&'r Planning<'s>),
FixedWidthArea(&'r FixedWidthArea<'s>),
HorizontalRule(&'r HorizontalRule<'s>),
Keyword(&'r Keyword<'s>),
BabelCall(&'r BabelCall<'s>),
LatexEnvironment(&'r LatexEnvironment<'s>),
// Objects
Bold(&'r Bold<'s>),
Italic(&'r Italic<'s>),
Underline(&'r Underline<'s>),
StrikeThrough(&'r StrikeThrough<'s>),
Code(&'r Code<'s>),
Verbatim(&'r Verbatim<'s>),
PlainText(&'r PlainText<'s>),
RegularLink(&'r RegularLink<'s>),
RadioLink(&'r RadioLink<'s>),
RadioTarget(&'r RadioTarget<'s>),
PlainLink(&'r PlainLink<'s>),
AngleLink(&'r AngleLink<'s>),
OrgMacro(&'r OrgMacro<'s>),
Entity(&'r Entity<'s>),
LatexFragment(&'r LatexFragment<'s>),
ExportSnippet(&'r ExportSnippet<'s>),
FootnoteReference(&'r FootnoteReference<'s>),
Citation(&'r Citation<'s>),
CitationReference(&'r CitationReference<'s>),
InlineBabelCall(&'r InlineBabelCall<'s>),
InlineSourceBlock(&'r InlineSourceBlock<'s>),
LineBreak(&'r LineBreak<'s>),
Target(&'r Target<'s>),
StatisticsCookie(&'r StatisticsCookie<'s>),
Subscript(&'r Subscript<'s>),
Superscript(&'r Superscript<'s>),
Timestamp(&'r Timestamp<'s>),
}

View File

@ -1,5 +1,63 @@
use crate::types::Object;
pub enum AstNodeIter<'s> {
// Document Nodes
// Document(DocumentIter<'s>),
// Heading(HeadingIter<'s>),
// Section(SectionIter<'s>),
// Elements
// Paragraph(ParagraphIter<'s>),
// PlainList(PlainListIter<'s>),
// GreaterBlock(GreaterBlockIter<'s>),
// DynamicBlock(DynamicBlockIter<'s>),
// FootnoteDefinition(FootnoteDefinitionIter<'s>),
// Comment(CommentIter<'s>),
// Drawer(DrawerIter<'s>),
// PropertyDrawer(PropertyDrawerIter<'s>),
// Table(TableIter<'s>),
// VerseBlock(VerseBlockIter<'s>),
// CommentBlock(CommentBlockIter<'s>),
// ExampleBlock(ExampleBlockIter<'s>),
// ExportBlock(ExportBlockIter<'s>),
// SrcBlock(SrcBlockIter<'s>),
// Clock(ClockIter<'s>),
// DiarySexp(DiarySexpIter<'s>),
// Planning(PlanningIter<'s>),
// FixedWidthArea(FixedWidthAreaIter<'s>),
// HorizontalRule(HorizontalRuleIter<'s>),
// Keyword(KeywordIter<'s>),
// BabelCall(BabelCallIter<'s>),
// LatexEnvironment(LatexEnvironmentIter<'s>),
// Objects
Bold(BoldIter<'s>),
// Italic(ItalicIter<'s>),
// Underline(UnderlineIter<'s>),
// StrikeThrough(StrikeThroughIter<'s>),
// Code(CodeIter<'s>),
// Verbatim(VerbatimIter<'s>),
// PlainText(PlainTextIter<'s>),
// RegularLink(RegularLinkIter<'s>),
// RadioLink(RadioLinkIter<'s>),
// RadioTarget(RadioTargetIter<'s>),
// PlainLink(PlainLinkIter<'s>),
// AngleLink(AngleLinkIter<'s>),
// OrgMacro(OrgMacroIter<'s>),
// Entity(EntityIter<'s>),
// LatexFragment(LatexFragmentIter<'s>),
// ExportSnippet(ExportSnippetIter<'s>),
// FootnoteReference(FootnoteReferenceIter<'s>),
// Citation(CitationIter<'s>),
// CitationReference(CitationReferenceIter<'s>),
// InlineBabelCall(InlineBabelCallIter<'s>),
// InlineSourceBlock(InlineSourceBlockIter<'s>),
// LineBreak(LineBreakIter<'s>),
// Target(TargetIter<'s>),
// StatisticsCookie(StatisticsCookieIter<'s>),
// Subscript(SubscriptIter<'s>),
// Superscript(SuperscriptIter<'s>),
// Timestamp(TimestampIter<'s>),
}
pub struct BoldIter<'s> {
next: std::slice::Iter<'s, Object<'s>>,
}