mplusfonts-macros 0.3.4

Procedural macros re-exported in the mplusfonts crate
Documentation
mod args;
mod bitmap;
mod charmap;
mod expr;
mod font;
mod source;

use std::collections::BTreeMap;

use bitmap::BitmapFont;
use charmap::Charmap;
use expr::ExprPathExt;
use font::Font;
use proc_macro2::TokenStream;
use quote::ToTokens;
use source::CharSource;

pub use args::Arguments;

pub fn mplus_impl(mut args: Arguments) -> TokenStream {
    let notdef = CharSource::Strings(vec![String::from("\u{FFFD}")]);
    args.sources.push(notdef);

    let mut entries = BTreeMap::new();
    entries.extend(bitmap::from_outline::render(&args, true));
    entries.extend(bitmap::from_outline::render(&args, false));
    entries.extend(bitmap::from_svgpath::render(&args));

    let notdef = entries.remove("\u{FFFD}").expect("expected `\u{FFFD}`");
    let charmap = Charmap::from_iter(entries);
    let positions = args.positions.into_value();
    let bit_depth = args.bit_depth.into_value();
    let size = args.size.into_value();
    let is_code = matches!(args.font.into_value(), Font::MPLUSCode { .. });
    let font = BitmapFont {
        charmap,
        notdef,
        positions,
        bit_depth,
        size,
        is_code,
    };

    font.into_token_stream()
}