webtype 0.19.0

The package provides a parser for fonts in Web Open Font Format.
Documentation
#[macro_use]
mod support;

mod noto_naskh_arabic {
    use std::io::Cursor;

    use webtype::opentype::truetype::tables::FontHeader;
    use webtype::opentype::Font;
    use webtype::value::Read as ValueRead;
    use webtype::version2::{FileHeader, TableDirectory};
    use webtype::walue::Read as WalueRead;

    #[test]
    fn read() {
        let mut tape = setup!(NotoNaskhArabic);
        let file_header = ok!(FileHeader::read(&mut tape));
        let table = ok!(TableDirectory::read(&mut tape, &file_header));
        let tags = table
            .records
            .iter()
            .map(|record| record.tag())
            .collect::<Vec<_>>();
        let tags = tags.iter().map(|tag| ok!(tag.as_str())).collect::<Vec<_>>();
        assert_eq!(
            tags,
            &[
                "GDEF", "GPOS", "GSUB", "OS/2", "cmap", "cvt ", "fpgm", "gasp", "glyf", "loca",
                "head", "hhea", "hmtx", "maxp", "name", "post", "prep",
            ]
        );
        assert!(table
            .records
            .iter()
            .all(|record| record.transformation() == 0));
    }

    #[test]
    fn decompress() {
        let mut tape = setup!(NotoNaskhArabic);
        let file_header = ok!(FileHeader::read(&mut tape));
        let table = ok!(TableDirectory::read(&mut tape, &file_header));
        let data = ok!(table.decompress(&mut tape, &file_header));
        let mut tape = Cursor::new(&data);
        let font = Font {
            offsets: table.as_offsets(&file_header),
        };
        let table = ok!(ok!(font.take::<_, FontHeader>(&mut tape)));
        assert_eq!(table.major_version, 1);
        assert_eq!(table.minor_version, 0);
    }
}