Merge branch 'sexp_parser_error' into diary_sexp
This commit is contained in:
commit
f32a1b2cba
@ -2,13 +2,15 @@
|
|||||||
use crate::init_tracing::init_telemetry;
|
use crate::init_tracing::init_telemetry;
|
||||||
use crate::init_tracing::shutdown_telemetry;
|
use crate::init_tracing::shutdown_telemetry;
|
||||||
use ::organic::parser::document;
|
use ::organic::parser::document;
|
||||||
|
use organic::parser::sexp::sexp;
|
||||||
mod init_tracing;
|
mod init_tracing;
|
||||||
|
|
||||||
const TEST_DOC: &'static str = include_str!("../toy_language.txt");
|
const TEST_DOC: &'static str = include_str!("../toy_language.txt");
|
||||||
|
|
||||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
init_telemetry()?;
|
init_telemetry()?;
|
||||||
let parsed = document(TEST_DOC);
|
// let parsed = document(TEST_DOC);
|
||||||
|
let parsed = sexp(TEST_DOC);
|
||||||
println!("{}\n\n\n", TEST_DOC);
|
println!("{}\n\n\n", TEST_DOC);
|
||||||
println!("{:#?}", parsed);
|
println!("{:#?}", parsed);
|
||||||
shutdown_telemetry()?;
|
shutdown_telemetry()?;
|
||||||
|
@ -124,7 +124,7 @@ fn quoted_atom<'s>(input: &'s str) -> Res<&'s str, Token<'s>> {
|
|||||||
let (remaining, _) = tag(r#"""#)(input)?;
|
let (remaining, _) = tag(r#"""#)(input)?;
|
||||||
let (remaining, _) = escaped(
|
let (remaining, _) = escaped(
|
||||||
take_till1(|c| match c {
|
take_till1(|c| match c {
|
||||||
'\\' | '"' | ')' => true,
|
'\\' | '"' => true,
|
||||||
_ => false,
|
_ => false,
|
||||||
}),
|
}),
|
||||||
'\\',
|
'\\',
|
||||||
@ -215,4 +215,40 @@ mod tests {
|
|||||||
r#""foo""#
|
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"#
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
| foo | bar |
|
(org-data nil
|
||||||
|-----+-------|
|
(section
|
||||||
| baz | lorem |
|
(: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))))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user