fonts 0.2.0

High-performance font parsing and analysis library for Grida Canvas
Documentation
use std::fs;
use std::path::PathBuf;

use fonts::Parser;

fn font_path(rel: &str) -> PathBuf {
    PathBuf::from(env!("CARGO_MANIFEST_DIR"))
        .join("../../fixtures/fonts")
        .join(rel)
}

#[test]
fn parses_variation_axes_and_instances() {
    let path = font_path(
        "Roboto_Flex/RobotoFlex-VariableFont_GRAD,XOPQ,XTRA,YOPQ,YTAS,YTDE,YTFI,YTLC,YTUC,opsz,slnt,wdth,wght.ttf",
    );
    let data = fs::read(path).unwrap();
    let parser = Parser::new(&data).unwrap();
    let fvar = parser.fvar();
    let wght = fvar.axes.get("wght").unwrap();
    assert_eq!(wght.min.round() as i32, 100);
    assert_eq!(wght.max.round() as i32, 1000);
    assert_eq!(wght.def.round() as i32, 400);
    assert_eq!(wght.name, "Weight");
    assert!(!fvar.instances.is_empty());
    let inst = &fvar.instances[0];
    assert!(inst.coordinates.contains_key("wght"));
}

#[test]
fn supports_geist_variable_font() {
    let path = font_path("Geist/Geist-VariableFont_wght.ttf");
    let data = fs::read(path).unwrap();
    let parser = Parser::new(&data).unwrap();
    let fvar = parser.fvar();
    let wght = fvar.axes.get("wght").unwrap();
    assert_eq!(wght.min.round() as i32, 100);
    assert_eq!(wght.max.round() as i32, 900);
    assert_eq!(wght.def.round() as i32, 400);
    assert!(!fvar.instances.is_empty());
}