diff --git a/src/compare/parse.rs b/src/compare/parse.rs index 89367c7..03e5b52 100644 --- a/src/compare/parse.rs +++ b/src/compare/parse.rs @@ -3,18 +3,16 @@ use std::process::Command; use crate::compare::sexp::sexp; -pub fn emacs_parse_org_document<'a, C>(file_path: C) -> Result> +pub fn compare_parse_org_document<'a, C>(file_path: C) -> Result> where C: AsRef, { - let org_sexp = emacs_parse_org_document_to_sexp(file_path)?; + let org_sexp = emacs_parse_org_document(file_path)?; let parsed_sexp = sexp(org_sexp.as_str()).expect("Parse failure"); todo!() } -fn emacs_parse_org_document_to_sexp<'a, C>( - file_path: C, -) -> Result> +pub fn emacs_parse_org_document<'a, C>(file_path: C) -> Result> where C: AsRef, { diff --git a/src/compare/sexp.rs b/src/compare/sexp.rs index e8cf1fa..4da408d 100644 --- a/src/compare/sexp.rs +++ b/src/compare/sexp.rs @@ -64,7 +64,7 @@ fn atom<'s>(input: &'s str) -> Res<&'s str, Token<'s>> { #[tracing::instrument(ret, level = "debug")] fn unquoted_atom<'s>(input: &'s str) -> Res<&'s str, Token<'s>> { let (remaining, body) = take_till1(|c| match c { - ' ' | '\t' | '\r' | '\n' => true, + ' ' | '\t' | '\r' | '\n' | ')' => true, _ => false, })(input)?; Ok((remaining, Token::Atom(body))) @@ -75,11 +75,11 @@ 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, }), '\\', - one_of(r#"""#), + one_of(r#""n"#), )(remaining)?; let (remaining, _) = tag(r#"""#)(remaining)?; let source = get_consumed(input, remaining); diff --git a/src/org_compare.rs b/src/org_compare.rs index 6a06a0f..0182ce3 100644 --- a/src/org_compare.rs +++ b/src/org_compare.rs @@ -9,8 +9,10 @@ mod init_tracing; fn main() -> Result<(), Box> { init_telemetry()?; - // emacs_parse_org_document("./org_mode_samples/footnote_definition/simple.org")?; - sexp(r#" ("foo" bar baz ) "#)?; + let org_sexp = emacs_parse_org_document("./org_mode_samples/footnote_definition/simple.org")?; + println!("{}", org_sexp); + let parsed_sexp = sexp(org_sexp.as_str()).expect("Parse failure"); + println!("{:#?}", parsed_sexp); shutdown_telemetry()?; Ok(()) }