use crate::render::template::Render;
use crate::strings;
#[derive(Debug, Clone, Copy)]
pub struct PostProcessor;
impl PostProcessor {
pub fn run<O>(renders: Vec<&mut Render>, options: O)
where
O: Into<PostProcessOptions>,
{
let options: PostProcessOptions = options.into();
for render in renders {
if options.trim_blocks {
Self::trim_blocks(render);
}
if let Some(width) = options.wrap_text {
Self::wrap_text(render, width);
}
}
}
fn trim_blocks(render: &mut Render) {
render.contents = strings::trim_blocks(&render.contents);
}
fn wrap_text(render: &mut Render, width: usize) {
let options = textwrap::Options::new(width).break_words(false);
render.contents = textwrap::fill(&render.contents, options);
}
}
#[derive(Debug, Default, Clone, Copy)]
pub struct PostProcessOptions {
pub trim_blocks: bool,
pub wrap_text: Option<usize>,
}