use std::env;
use std::path::Path;
use std::process::ExitCode;
use mdkit::Engine;
fn main() -> ExitCode {
let Some(path) = env::args().nth(1) else {
eprintln!("usage: extract <path-to-document>");
return ExitCode::FAILURE;
};
let (engine, errors) = Engine::with_defaults_diagnostic();
for (backend, err) in &errors {
eprintln!("[mdkit] backend `{backend}` not registered: {err}");
}
if errors.is_empty() {
eprintln!("[mdkit] all backends registered cleanly");
}
eprintln!();
match engine.extract(Path::new(&path)) {
Ok(doc) => {
print_doc(&doc);
ExitCode::SUCCESS
}
Err(e) => {
eprintln!("error: {e}");
ExitCode::FAILURE
}
}
}
fn print_doc(doc: &mdkit::Document) {
if let Some(title) = &doc.title {
println!("# {title}");
println!();
}
if !doc.metadata.is_empty() {
let mut keys: Vec<&String> = doc.metadata.keys().collect();
keys.sort();
for key in keys {
println!("<!-- {key}: {} -->", doc.metadata[key]);
}
println!();
}
print!("{}", doc.markdown);
if !doc.markdown.ends_with('\n') {
println!();
}
}