From 2ec1d4f8558035034a257b57981beaec69c83d6c Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Fri, 21 Apr 2023 21:33:23 -0400 Subject: [PATCH] Add the code structure for planning. --- src/compare/diff.rs | 25 +++++++++++++++++++++++++ src/parser/element.rs | 3 +++ src/parser/lesser_element.rs | 11 +++++++++++ src/parser/mod.rs | 2 ++ src/parser/planning.rs | 8 ++++++++ 5 files changed, 49 insertions(+) create mode 100644 src/parser/planning.rs diff --git a/src/compare/diff.rs b/src/compare/diff.rs index 0a48752..fb6a51b 100644 --- a/src/compare/diff.rs +++ b/src/compare/diff.rs @@ -18,6 +18,7 @@ use crate::parser::Heading; use crate::parser::Paragraph; use crate::parser::PlainList; use crate::parser::PlainListItem; +use crate::parser::Planning; use crate::parser::PropertyDrawer; use crate::parser::Section; use crate::parser::SrcBlock; @@ -217,6 +218,7 @@ fn compare_element<'s>( Element::SrcBlock(obj) => compare_src_block(source, emacs, obj), Element::Clock(obj) => compare_clock(source, emacs, obj), Element::DiarySexp(obj) => compare_diary_sexp(source, emacs, obj), + Element::Planning(obj) => compare_planning(source, emacs, obj), } } @@ -727,3 +729,26 @@ fn compare_diary_sexp<'s>( children: Vec::new(), }) } + +fn compare_planning<'s>( + source: &'s str, + emacs: &'s Token<'s>, + rust: &'s Planning<'s>, +) -> Result> { + let mut this_status = DiffStatus::Good; + let emacs_name = "planning"; + if assert_name(emacs, emacs_name).is_err() { + this_status = DiffStatus::Bad; + } + + if assert_bounds(source, emacs, rust).is_err() { + this_status = DiffStatus::Bad; + } + + Ok(DiffResult { + status: this_status, + name: emacs_name.to_owned(), + message: None, + children: Vec::new(), + }) +} diff --git a/src/parser/element.rs b/src/parser/element.rs index bfc19d1..e051dd8 100644 --- a/src/parser/element.rs +++ b/src/parser/element.rs @@ -11,6 +11,7 @@ use super::lesser_element::DiarySexp; use super::lesser_element::ExampleBlock; use super::lesser_element::ExportBlock; use super::lesser_element::Paragraph; +use super::lesser_element::Planning; use super::lesser_element::SrcBlock; use super::lesser_element::VerseBlock; use super::source::Source; @@ -34,6 +35,7 @@ pub enum Element<'s> { SrcBlock(SrcBlock<'s>), Clock(Clock<'s>), DiarySexp(DiarySexp<'s>), + Planning(Planning<'s>), } impl<'s> Source<'s> for Element<'s> { @@ -55,6 +57,7 @@ impl<'s> Source<'s> for Element<'s> { Element::SrcBlock(obj) => obj.source, Element::Clock(obj) => obj.source, Element::DiarySexp(obj) => obj.source, + Element::Planning(obj) => obj.source, } } } diff --git a/src/parser/lesser_element.rs b/src/parser/lesser_element.rs index d210b62..55664c9 100644 --- a/src/parser/lesser_element.rs +++ b/src/parser/lesser_element.rs @@ -69,6 +69,11 @@ pub struct DiarySexp<'s> { pub source: &'s str, } +#[derive(Debug)] +pub struct Planning<'s> { + pub source: &'s str, +} + impl<'s> Paragraph<'s> { pub fn of_text(input: &'s str) -> Self { let mut objects = Vec::with_capacity(1); @@ -135,3 +140,9 @@ impl<'s> Source<'s> for DiarySexp<'s> { self.source } } + +impl<'s> Source<'s> for Planning<'s> { + fn get_source(&'s self) -> &'s str { + self.source + } +} diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 76ef01b..e1b5f2b 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -20,6 +20,7 @@ mod parser_context; mod parser_with_context; mod plain_list; mod plain_text; +mod planning; mod property_drawer; pub mod sexp; mod source; @@ -47,6 +48,7 @@ pub use lesser_element::DiarySexp; pub use lesser_element::ExampleBlock; pub use lesser_element::ExportBlock; pub use lesser_element::Paragraph; +pub use lesser_element::Planning; pub use lesser_element::SrcBlock; pub use lesser_element::TableCell; pub use lesser_element::VerseBlock; diff --git a/src/parser/planning.rs b/src/parser/planning.rs new file mode 100644 index 0000000..e616adf --- /dev/null +++ b/src/parser/planning.rs @@ -0,0 +1,8 @@ +use super::Context; +use crate::error::Res; +use crate::parser::lesser_element::Planning; + +#[tracing::instrument(ret, level = "debug")] +pub fn planning<'r, 's>(context: Context<'r, 's>, input: &'s str) -> Res<&'s str, Planning<'s>> { + todo!() +}