The package provides a parser for OpenType fonts. It might be helpful to have a
look at a higher-level parser called font
, which internally relies on
this package.
```rust extern crate opentype;
use std::collections::HashMap;
use opentype::Font; use opentype::truetype::{FontHeader, HorizontalHeader}; use opentype::truetype::naming_table::{NameID, NamingTable};
macro_rules! ok(($result:expr) => ($result.unwrap()));
let path = "SourceSerifPro-Regular.otf"; let mut reader = ok!(std::fs::File::open(path)); let font = ok!(Font::read(&mut reader));
let fontheader: FontHeader = ok!(ok!(font.take(&mut reader))); asserteq!(fontheader.unitsper_em, 1000);
let horizontalheader: HorizontalHeader = ok!(ok!(font.take(&mut reader))); asserteq!(horizontal_header.ascender, 918);
let namingtable: NamingTable = ok!(ok!(font.take(&mut reader))); let names: Vec<_> = namingtable.collect(); let names: HashMap<_, _> = names .iter() .map(|((nameid, _), value)| (*nameid, value.asderef())) .collect(); asserteq!(ok!(names[&NameID::FullFontName]), "Source Serif Pro"); assert_eq!(ok!(names[&NameID::DesignerName]), "Frank Grießhammer"); ```
Your contribution is highly appreciated. Do not hesitate to open an issue or a pull request. Note that any contribution submitted for inclusion in the project will be licensed according to the terms given in LICENSE.md.