archive
/
md-pdf-rs
Archived
1
Fork 0
This repository has been archived on 2023-03-26. You can view files and clone it, but cannot push or open issues or pull requests.
md-pdf-rs/src/build/pandoc.rs

39 lines
1.4 KiB
Rust

use pandoc::{self, Pandoc, PandocOutput, PandocError};
use std::error::Error;
use utils::get_exe_dir;
use config::{Config, References};
fn execute_pandoc(
input: String,
references: Option<References>,
) -> Result<PandocOutput, PandocError> {
let mut renderer = Pandoc::new();
renderer.set_output_format(pandoc::OutputFormat::Html, vec![]);
renderer.set_input_format(pandoc::InputFormat::Markdown, vec![]);
renderer.set_input(pandoc::InputKind::Pipe(input));
renderer.set_output(pandoc::OutputKind::Pipe);
renderer.add_option(pandoc::PandocOption::Smart);
renderer.add_option(pandoc::PandocOption::Standalone);
renderer.add_pandoc_path_hint(&get_exe_dir());
if references.is_some() {
let mut references_data = references.unwrap();
renderer.set_bibliography(&references_data.absolute_bibliography());
renderer.set_csl(&references_data.absolute_csl());
}
return renderer.execute();
}
pub fn render(config: Config, input: String) -> Result<String, String> {
let output = execute_pandoc(input, config.references);
if output.is_err() {
let err = output.err();
println!("{:?}", err);
return Err(err.unwrap().description().into());
}
return match output.unwrap() {
pandoc::PandocOutput::ToBuffer(out) => Ok(out),
_ => Err("Incorrect output type.".into()),
};
}