plotive-text 0.1.0

Text shaping and rendering library for plotive
Documentation
use plotive_base::color;
use plotive_text::{self as text, Font, bundled_font_db, font, rich};
use tiny_skia::Transform;
fn main() {
    let db = bundled_font_db();

    const PM_SIZE: (u32, u32) = (600, 500);

    let sans_font = Font::default().with_families(vec![
        font::Family::Named("Noto Sans".to_string()),
        font::Family::Named("DejaVu Sans".to_string()),
        font::Family::SansSerif,
    ]);

    let mut pm = tiny_skia::Pixmap::new(PM_SIZE.0, PM_SIZE.1).unwrap();
    let mut pm_mut = pm.as_mut();
    pm_mut.fill(tiny_skia::Color::WHITE);
    let fmt = concat!(
        "Bode diagram of [bold]RLC[/bold] filter\n",
        "[size=32]with [color=teal]cutoff frequency[/color] at [italic]1.5 kHz[/italic].[/size]\n",
        "[font='Noto Serif','DejaVu Serif','Times';italic;size=24]R = 1 Ω  -  L = 100 μH  -  C = 1 μF[/font;italic]"
    );
    let rich_text = text::parse_rich_text(fmt)
        .unwrap()
        .into_builder(
            rich::TextProps::new(36.0)
                .with_font(sans_font)
                .with_fill(Some(color::BLACK)),
        )
        .with_layout(rich::Layout::Horizontal(
            rich::Align::Center,
            rich::VerAlign::Center,
            Default::default(),
        ))
        .done(&db)
        .unwrap();

    text::render_rich_text(
        &rich_text,
        &db,
        Transform::from_translate(PM_SIZE.0 as f32 / 2.0, PM_SIZE.1 as f32 / 2.0),
        None,
        &mut pm_mut,
    )
    .unwrap();

    pm.save_png("text_rich_parse.png").unwrap();
}