Add check for name on paragraph.

This commit is contained in:
Tom Alexander 2023-10-04 19:56:39 -04:00
parent 057c8a1387
commit a26640355c
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE
5 changed files with 26 additions and 3 deletions

View File

@ -0,0 +1,2 @@
#+NAME: foo
bar

View File

@ -841,8 +841,18 @@ fn compare_paragraph<'b, 's>(
) -> Result<DiffEntry<'b, 's>, Box<dyn std::error::Error>> { ) -> Result<DiffEntry<'b, 's>, Box<dyn std::error::Error>> {
let children = emacs.as_list()?; let children = emacs.as_list()?;
let mut child_status = Vec::new(); let mut child_status = Vec::new();
let this_status = DiffStatus::Good; let mut this_status = DiffStatus::Good;
let message = None; let mut message = None;
// Compare name
let name = get_property_quoted_string(emacs, ":name")?;
if name.as_ref().map(String::as_str) != rust.name {
this_status = DiffStatus::Bad;
message = Some(format!(
"Name mismatch (emacs != rust) {:?} != {:?}",
name, rust.name
));
}
for (emacs_child, rust_child) in children.iter().skip(2).zip(rust.children.iter()) { for (emacs_child, rust_child) in children.iter().skip(2).zip(rust.children.iter()) {
child_status.push(compare_ast_node(source, emacs_child, rust_child.into())?); child_status.push(compare_ast_node(source, emacs_child, rust_child.into())?);

View File

@ -1,6 +1,8 @@
use nom::branch::alt; use nom::branch::alt;
use nom::combinator::map; use nom::combinator::map;
use nom::combinator::not;
use nom::multi::many0; use nom::multi::many0;
use nom::sequence::tuple;
use super::clock::clock; use super::clock::clock;
use super::comment::comment; use super::comment::comment;
@ -98,7 +100,13 @@ fn _element<'b, 'g, 'r, 's>(
map(horizontal_rule_matcher, Element::HorizontalRule), map(horizontal_rule_matcher, Element::HorizontalRule),
map(latex_environment_matcher, Element::LatexEnvironment), map(latex_environment_matcher, Element::LatexEnvironment),
map(babel_keyword_matcher, Element::BabelCall), map(babel_keyword_matcher, Element::BabelCall),
map(keyword_matcher, Element::Keyword), map(
map(
tuple((not(affiliated_keyword_matcher), keyword_matcher)),
|(_, kw)| kw,
),
Element::Keyword,
),
))(remaining) ))(remaining)
{ {
the_ok @ Ok(_) => the_ok, the_ok @ Ok(_) => the_ok,

View File

@ -47,6 +47,7 @@ pub(crate) fn paragraph<'b, 'g, 'r, 's>(
remaining, remaining,
Paragraph { Paragraph {
source: source.into(), source: source.into(),
name: None, // TODO
children, children,
}, },
)) ))

View File

@ -6,6 +6,7 @@ use super::Timestamp;
#[derive(Debug)] #[derive(Debug)]
pub struct Paragraph<'s> { pub struct Paragraph<'s> {
pub source: &'s str, pub source: &'s str,
pub name: Option<&'s str>,
pub children: Vec<Object<'s>>, pub children: Vec<Object<'s>>,
} }
@ -146,6 +147,7 @@ impl<'s> Paragraph<'s> {
objects.push(Object::PlainText(PlainText { source: input })); objects.push(Object::PlainText(PlainText { source: input }));
Paragraph { Paragraph {
source: input, source: input,
name: None, // TODO
children: objects, children: objects,
} }
} }