pub mod block;
mod emit;
mod layout;
pub mod report;
mod table;
mod wrap;
use std::path::PathBuf;
pub use block::{Block, CellAlign, ListItem, Run};
pub use pdfboss_style::{StyleError, Theme};
pub use pdfboss_write::{PageSize, Pdf};
pub use report::Report;
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("{path}: {message}")]
Image {
path: String,
message: String,
},
#[error(transparent)]
Write(#[from] pdfboss_write::Error),
}
pub struct Options {
pub theme: Theme,
pub page_size: PageSize,
pub base_dir: PathBuf,
}
impl Default for Options {
fn default() -> Options {
Options {
theme: Theme::default_theme(),
page_size: PageSize::A4,
base_dir: PathBuf::from("."),
}
}
}
pub fn to_pdf(markdown: &str, options: &Options) -> Result<(Pdf, Report), Error> {
let (blocks, skipped_html) = block::parse_blocks(markdown);
let mut report = Report {
skipped_html,
..Report::default()
};
let laid = layout::layout(
&blocks,
&options.theme,
options.page_size,
&options.base_dir,
&mut report,
)?;
let pages = emit::emit(laid, options.page_size)?;
Ok((
Pdf {
pages,
..Pdf::default()
},
report,
))
}