Merge branch 'sexp_parser_error' into diary_sexp

This commit is contained in:
Tom Alexander 2023-04-21 21:16:06 -04:00
commit f32a1b2cba
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE
3 changed files with 45 additions and 5 deletions

View File

@ -2,13 +2,15 @@
use crate::init_tracing::init_telemetry;
use crate::init_tracing::shutdown_telemetry;
use ::organic::parser::document;
use organic::parser::sexp::sexp;
mod init_tracing;
const TEST_DOC: &'static str = include_str!("../toy_language.txt");
fn main() -> Result<(), Box<dyn std::error::Error>> {
init_telemetry()?;
let parsed = document(TEST_DOC);
// let parsed = document(TEST_DOC);
let parsed = sexp(TEST_DOC);
println!("{}\n\n\n", TEST_DOC);
println!("{:#?}", parsed);
shutdown_telemetry()?;

View File

@ -124,7 +124,7 @@ fn quoted_atom<'s>(input: &'s str) -> Res<&'s str, Token<'s>> {
let (remaining, _) = tag(r#"""#)(input)?;
let (remaining, _) = escaped(
take_till1(|c| match c {
'\\' | '"' | ')' => true,
'\\' | '"' => true,
_ => false,
}),
'\\',
@ -215,4 +215,40 @@ mod tests {
r#""foo""#
)
}
#[test]
fn quoted_containing_paren() {
let input = r#" (foo "b(a)r" baz ) "#;
let (remaining, parsed) = sexp_with_padding(input).expect("Parse the input");
assert_eq!(remaining, "");
assert!(match parsed {
Token::List(_) => true,
_ => false,
});
let children = match parsed {
Token::List(children) => children,
_ => panic!("Should be a list."),
};
assert_eq!(
match children.first() {
Some(Token::Atom(body)) => *body,
_ => panic!("First child should be an atom."),
},
r#"foo"#
);
assert_eq!(
match children.iter().nth(1) {
Some(Token::Atom(body)) => *body,
_ => panic!("Second child should be an atom."),
},
r#""b(a)r""#
);
assert_eq!(
match children.iter().nth(2) {
Some(Token::Atom(body)) => *body,
_ => panic!("Third child should be an atom."),
},
r#"baz"#
);
}
}

View File

@ -1,3 +1,5 @@
| foo | bar |
|-----+-------|
| baz | lorem |
(org-data nil
(section
(:begin 1 :end 9 :contents-begin 1 :contents-end 9 :post-blank 0 :post-affiliated 1 :parent #0)
(diary-sexp
(:value "%%(foo)" :begin 1 :end 9 :post-blank 0 :post-affiliated 1 :parent #1))))