opentype 0.39.1

The package provides a builder and parser of OpenType fonts.
Documentation
#![allow(dead_code, unused_macros)]

use std::fs::File;
use std::io::{Seek, SeekFrom};
use std::path::PathBuf;

macro_rules! ok(($result:expr) => ($result.unwrap()));

macro_rules! setup(
    ($fixture:ident) => (
        crate::support::setup(crate::support::Fixture::$fixture, None)
    );
    ($fixture:ident, $table:expr) => (
        crate::support::setup(crate::support::Fixture::$fixture, Some($table))
    );
);

macro_rules! tags(
    ($($name:expr,)*) => (vec![$(::truetype::Tag(*$name),)*]);
    ($($name:expr),*) => (tags!($($name,)*));
);

pub enum Fixture {
    AdobeVFPrototypeCFF,
    AdobeVFPrototypeTTF,
    CrimsonText,
    KalniaGlaze,
    KaushanScript,
    LondrinaSolid,
    NotoColorEmoji,
    OpenSans,
    SourceSerifPro,
}

impl Fixture {
    pub fn path(&self) -> PathBuf {
        let file_name = match *self {
            Fixture::AdobeVFPrototypeCFF => "AdobeVFPrototype.otf",
            Fixture::AdobeVFPrototypeTTF => "AdobeVFPrototype.ttf",
            Fixture::CrimsonText => "CrimsonText-Regular.ttf",
            Fixture::KalniaGlaze => "KalniaGlaze[wdth,wght].ttf",
            Fixture::KaushanScript => "KaushanScript-Regular.ttf",
            Fixture::LondrinaSolid => "LondrinaSolid-Regular.ttf",
            Fixture::NotoColorEmoji => "NotoColorEmoji-Regular.ttf",
            Fixture::OpenSans => "OpenSans-Italic.ttf",
            Fixture::SourceSerifPro => "SourceSerifPro-Regular.otf",
        };
        PathBuf::from("tests").join("fixtures").join(file_name)
    }

    pub fn offset(&self, table: &str) -> u64 {
        match *self {
            Fixture::AdobeVFPrototypeCFF => match table {
                _ => unreachable!(),
            },
            Fixture::AdobeVFPrototypeTTF => match table {
                "GPOS" => 137912,
                "fvar" => 41556,
                _ => unreachable!(),
            },
            Fixture::CrimsonText => match table {
                "GPOS" => 94952,
                _ => unreachable!(),
            },
            Fixture::KalniaGlaze => match table {
                "CPAL" => 148600,
                _ => unreachable!(),
            },
            Fixture::KaushanScript => match table {
                _ => unreachable!(),
            },
            Fixture::LondrinaSolid => match table {
                "GSUB" => 12236,
                _ => unreachable!(),
            },
            Fixture::NotoColorEmoji => match table {
                "CPAL" => 10976,
                _ => unreachable!(),
            },
            Fixture::OpenSans => match table {
                "GDEF" => 206348,
                _ => unreachable!(),
            },
            Fixture::SourceSerifPro => match table {
                "GPOS" => 60412,
                "GSUB" => 57648,
                _ => unreachable!(),
            },
        }
    }
}

pub fn setup(fixture: Fixture, table: Option<&str>) -> File {
    let mut file = ok!(File::open(fixture.path()));
    ok!(file.seek(SeekFrom::Start(
        table.map(|table| fixture.offset(table)).unwrap_or(0)
    )));
    file
}