opentype 0.39.1

The package provides a builder and parser of OpenType fonts.
Documentation
#[macro_use]
mod support;

use opentype::File;

#[test]
fn cff_regular() {
    use opentype::postscript::compact1::FontSet;

    let mut tape = setup!(SourceSerifPro);
    let file = ok!(File::read(&mut tape));
    let _ = ok!(ok!(file[0].take::<_, FontSet>(&mut tape)));
}

#[test]
fn cff_variable() {
    use opentype::tables::GlyphSubstitution;

    let mut tape = setup!(AdobeVFPrototypeCFF);
    let file = ok!(File::read(&mut tape));
    let _ = ok!(ok!(file[0].take::<_, GlyphSubstitution>(&mut tape)));
}

#[test]
#[cfg_attr(not(feature = "ignore-invalid-checksums"), should_panic)]
fn ttf_corrupted() {
    use opentype::truetype::tables::FontHeader;

    let mut tape = setup!(KaushanScript);
    let file = ok!(File::read(&mut tape));
    let _ = ok!(ok!(file[0].take::<_, FontHeader>(&mut tape)));
}

#[test]
fn ttf_regular() {
    use opentype::truetype::tables::{FontHeader, GlyphData, GlyphMapping, MaximumProfile};

    let mut tape = setup!(OpenSans);
    let file = ok!(File::read(&mut tape));
    let font_header = ok!(ok!(file[0].take::<_, FontHeader>(&mut tape)));
    let maximum_profile = ok!(ok!(file[0].take::<_, MaximumProfile>(&mut tape)));
    let glyph_mapping = ok!(ok!(
        file[0].take_given::<_, GlyphMapping>(&mut tape, (&font_header, &maximum_profile))
    ));
    let _ = ok!(ok!(
        file[0].take_given::<_, GlyphData>(&mut tape, &glyph_mapping)
    ));
}

#[test]
fn ttf_variable() {
    use opentype::tables::GlyphSubstitution;

    let mut tape = setup!(AdobeVFPrototypeTTF);
    let file = ok!(File::read(&mut tape));
    let _ = ok!(ok!(file[0].take::<_, GlyphSubstitution>(&mut tape)));
}