diff --git a/src/compare/compare.rs b/src/compare/compare.rs index d887d24..f57abbc 100644 --- a/src/compare/compare.rs +++ b/src/compare/compare.rs @@ -2,12 +2,10 @@ use std::path::Path; use crate::compare::diff::compare_document; use crate::compare::parse::emacs_parse_anonymous_org_document; -use crate::compare::parse::emacs_parse_anonymous_org_document_with_settings; use crate::compare::parse::emacs_parse_file_org_document; use crate::compare::parse::get_emacs_version; use crate::compare::parse::get_org_mode_version; use crate::compare::sexp::sexp; -use crate::parser::parse; use crate::parser::parse_with_settings; use crate::GlobalSettings; use crate::LocalFileAccessInterface; @@ -15,28 +13,7 @@ use crate::LocalFileAccessInterface; pub fn run_anonymous_compare>( org_contents: P, ) -> Result<(), Box> { - // TODO: This is a work-around to pretend that dos line endings do not exist. It would be better to handle the difference in line endings. - let org_contents = org_contents.as_ref().replace("\r\n", "\n"); - let org_contents = org_contents.as_str(); - eprintln!("Using emacs version: {}", get_emacs_version()?.trim()); - eprintln!("Using org-mode version: {}", get_org_mode_version()?.trim()); - let rust_parsed = parse(org_contents)?; - let org_sexp = emacs_parse_anonymous_org_document(org_contents)?; - let (_remaining, parsed_sexp) = sexp(org_sexp.as_str()).map_err(|e| e.to_string())?; - - println!("{}\n\n\n", org_contents); - println!("{}", org_sexp); - println!("{:#?}", rust_parsed); - - // We do the diffing after printing out both parsed forms in case the diffing panics - let diff_result = compare_document(&parsed_sexp, &rust_parsed)?; - diff_result.print(org_contents)?; - - if diff_result.is_bad() { - Err("Diff results do not match.")?; - } - - Ok(()) + run_anonymous_compare_with_settings(org_contents, &GlobalSettings::default()) } pub fn run_compare_on_file>(org_path: P) -> Result<(), Box> { @@ -87,7 +64,7 @@ pub fn run_anonymous_compare_with_settings>( eprintln!("Using emacs version: {}", get_emacs_version()?.trim()); eprintln!("Using org-mode version: {}", get_org_mode_version()?.trim()); let rust_parsed = parse_with_settings(org_contents, global_settings)?; - let org_sexp = emacs_parse_anonymous_org_document_with_settings(org_contents, global_settings)?; + let org_sexp = emacs_parse_anonymous_org_document(org_contents, global_settings)?; let (_remaining, parsed_sexp) = sexp(org_sexp.as_str()).map_err(|e| e.to_string())?; println!("{}\n\n\n", org_contents); diff --git a/src/compare/parse.rs b/src/compare/parse.rs index f60ef2e..5440749 100644 --- a/src/compare/parse.rs +++ b/src/compare/parse.rs @@ -14,39 +14,7 @@ fn global_settings_elisp(global_settings: &GlobalSettings) -> String { ret } -pub fn emacs_parse_anonymous_org_document( - file_contents: C, -) -> Result> -where - C: AsRef, -{ - let escaped_file_contents = escape_elisp_string(file_contents); - let elisp_script = format!( - r#"(progn - (erase-buffer) - (require 'org) - (defun org-table-align () t) - (insert "{escaped_file_contents}") - (org-mode) - (message "%s" (pp-to-string (org-element-parse-buffer))) -)"#, - escaped_file_contents = escaped_file_contents - ); - let mut cmd = Command::new("emacs"); - let cmd = cmd - .arg("-q") - .arg("--no-site-file") - .arg("--no-splash") - .arg("--batch") - .arg("--eval") - .arg(elisp_script); - let out = cmd.output()?; - out.status.exit_ok()?; - let org_sexp = out.stderr; - Ok(String::from_utf8(org_sexp)?) -} - -pub fn emacs_parse_anonymous_org_document_with_settings( +pub(crate) fn emacs_parse_anonymous_org_document( file_contents: C, global_settings: &GlobalSettings, ) -> Result>