From 48d550e1fcf0cc969f8753b54eb658e9e0405aaa Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Wed, 27 Sep 2023 19:45:40 -0400 Subject: [PATCH] Remove old implementation of iteration. --- src/parser/document.rs | 8 --- src/parser/mod.rs | 1 - src/parser/token.rs | 135 ----------------------------------------- 3 files changed, 144 deletions(-) delete mode 100644 src/parser/token.rs diff --git a/src/parser/document.rs b/src/parser/document.rs index 11582c5..4d6a64b 100644 --- a/src/parser/document.rs +++ b/src/parser/document.rs @@ -7,8 +7,6 @@ use super::in_buffer_settings::apply_in_buffer_settings; use super::in_buffer_settings::scan_for_in_buffer_settings; use super::org_source::OrgSource; use super::section::zeroth_section; -use super::token::AllTokensIterator; -use super::token::Token; use super::util::get_consumed; use crate::context::parser_with_context; use crate::context::Context; @@ -155,9 +153,3 @@ fn _document<'b, 'g, 'r, 's>( }, )) } - -impl<'s> Document<'s> { - fn iter_tokens<'r>(&'r self) -> impl Iterator> { - AllTokensIterator::new(Token::Document(self)) - } -} diff --git a/src/parser/mod.rs b/src/parser/mod.rs index b19f9ca..8729294 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -43,7 +43,6 @@ mod table; mod target; mod text_markup; mod timestamp; -mod token; mod util; pub use document::parse; pub use document::parse_with_settings; diff --git a/src/parser/token.rs b/src/parser/token.rs deleted file mode 100644 index 8479273..0000000 --- a/src/parser/token.rs +++ /dev/null @@ -1,135 +0,0 @@ -use std::collections::VecDeque; - -use crate::types::Document; -use crate::types::DocumentElement; -use crate::types::Element; -use crate::types::Heading; -use crate::types::NodeProperty; -use crate::types::Object; -use crate::types::PlainListItem; -use crate::types::Section; -use crate::types::TableCell; -use crate::types::TableRow; - -pub(crate) enum Token<'r, 's> { - Document(&'r Document<'s>), - Heading(&'r Heading<'s>), - Section(&'r Section<'s>), - Object(&'r Object<'s>), - Element(&'r Element<'s>), - PlainListItem(&'r PlainListItem<'s>), - TableRow(&'r TableRow<'s>), - TableCell(&'r TableCell<'s>), - NodeProperty(&'r NodeProperty<'s>), -} - -impl<'r, 's> Token<'r, 's> { - fn iter_tokens(&self) -> Box> + '_> { - match self { - Token::Document(document) => Box::new( - document - .zeroth_section - .iter() - .map(Token::Section) - .chain(document.children.iter().map(Token::Heading)), - ), - Token::Heading(heading) => Box::new(heading.title.iter().map(Token::Object).chain( - heading.children.iter().map(|de| match de { - DocumentElement::Heading(ref obj) => Token::Heading(obj), - DocumentElement::Section(ref obj) => Token::Section(obj), - }), - )), - Token::Section(section) => Box::new(section.children.iter().map(Token::Element)), - Token::Object(obj) => match obj { - Object::Bold(inner) => Box::new(inner.children.iter().map(Token::Object)), - Object::Italic(inner) => Box::new(inner.children.iter().map(Token::Object)), - Object::Underline(inner) => Box::new(inner.children.iter().map(Token::Object)), - Object::StrikeThrough(inner) => Box::new(inner.children.iter().map(Token::Object)), - Object::Code(_) => Box::new(std::iter::empty()), - Object::Verbatim(_) => Box::new(std::iter::empty()), - Object::PlainText(_) => Box::new(std::iter::empty()), - Object::RegularLink(_) => Box::new(std::iter::empty()), - Object::RadioLink(inner) => Box::new(inner.children.iter().map(Token::Object)), - Object::RadioTarget(inner) => Box::new(inner.children.iter().map(Token::Object)), - Object::PlainLink(_) => Box::new(std::iter::empty()), - Object::AngleLink(_) => Box::new(std::iter::empty()), - Object::OrgMacro(_) => Box::new(std::iter::empty()), - Object::Entity(_) => Box::new(std::iter::empty()), - Object::LatexFragment(_) => Box::new(std::iter::empty()), - Object::ExportSnippet(_) => Box::new(std::iter::empty()), - Object::FootnoteReference(inner) => { - Box::new(inner.definition.iter().map(Token::Object)) - } - Object::Citation(_) => Box::new(std::iter::empty()), // TODO: Iterate over children - Object::CitationReference(_) => Box::new(std::iter::empty()), // TODO: Iterate over children - Object::InlineBabelCall(_) => Box::new(std::iter::empty()), - Object::InlineSourceBlock(_) => Box::new(std::iter::empty()), - Object::LineBreak(_) => Box::new(std::iter::empty()), - Object::Target(_) => Box::new(std::iter::empty()), - Object::StatisticsCookie(_) => Box::new(std::iter::empty()), - Object::Subscript(_) => Box::new(std::iter::empty()), // TODO: Iterate over children - Object::Superscript(_) => Box::new(std::iter::empty()), // TODO: Iterate over children - Object::Timestamp(_) => Box::new(std::iter::empty()), - }, - Token::Element(elem) => match elem { - Element::Paragraph(inner) => Box::new(inner.children.iter().map(Token::Object)), - Element::PlainList(inner) => { - Box::new(inner.children.iter().map(Token::PlainListItem)) - } - Element::GreaterBlock(inner) => Box::new(inner.children.iter().map(Token::Element)), - Element::DynamicBlock(inner) => Box::new(inner.children.iter().map(Token::Element)), - Element::FootnoteDefinition(inner) => { - Box::new(inner.children.iter().map(Token::Element)) - } - Element::Comment(_) => Box::new(std::iter::empty()), - Element::Drawer(inner) => Box::new(inner.children.iter().map(Token::Element)), - Element::PropertyDrawer(inner) => { - Box::new(inner.children.iter().map(Token::NodeProperty)) - } - Element::Table(inner) => Box::new(inner.children.iter().map(Token::TableRow)), - Element::VerseBlock(inner) => Box::new(inner.children.iter().map(Token::Object)), - Element::CommentBlock(_) => Box::new(std::iter::empty()), - Element::ExampleBlock(_) => Box::new(std::iter::empty()), - Element::ExportBlock(_) => Box::new(std::iter::empty()), - Element::SrcBlock(_) => Box::new(std::iter::empty()), - Element::Clock(_) => Box::new(std::iter::empty()), - Element::DiarySexp(_) => Box::new(std::iter::empty()), - Element::Planning(_) => Box::new(std::iter::empty()), - Element::FixedWidthArea(_) => Box::new(std::iter::empty()), - Element::HorizontalRule(_) => Box::new(std::iter::empty()), - Element::Keyword(_) => Box::new(std::iter::empty()), - Element::BabelCall(_) => Box::new(std::iter::empty()), - Element::LatexEnvironment(_) => Box::new(std::iter::empty()), - }, - Token::PlainListItem(elem) => Box::new(elem.children.iter().map(Token::Element)), - Token::TableRow(elem) => Box::new(elem.children.iter().map(Token::TableCell)), - Token::TableCell(elem) => Box::new(elem.children.iter().map(Token::Object)), - Token::NodeProperty(_) => Box::new(std::iter::empty()), - } - } -} - -pub(crate) struct AllTokensIterator<'r, 's> { - queued_tokens: VecDeque>, -} - -impl<'r, 's> AllTokensIterator<'r, 's> { - pub(crate) fn new(tkn: Token<'r, 's>) -> Self { - let mut queued_tokens = VecDeque::new(); - queued_tokens.push_back(tkn); - AllTokensIterator { queued_tokens } - } -} - -impl<'r, 's> Iterator for AllTokensIterator<'r, 's> { - type Item = Token<'r, 's>; - - fn next(&mut self) -> Option { - let next_token = match self.queued_tokens.pop_front() { - Some(tkn) => tkn, - None => return None, - }; - self.queued_tokens.extend(next_token.iter_tokens()); - Some(next_token) - } -}