#opentype #typography #typeface #font #opentype-font #parser

opentype

The package provides a builder and parser of OpenType fonts

102 releases

0.38.1 Dec 20, 2024
0.38.0 Aug 30, 2024
0.37.1 May 23, 2024
0.35.2 Feb 16, 2024
0.0.2 Nov 21, 2014

#3 in #opentype-font

Download history 118/week @ 2024-12-31 66/week @ 2025-01-07 28/week @ 2025-01-14 18/week @ 2025-01-21 76/week @ 2025-01-28 251/week @ 2025-02-04 18/week @ 2025-02-11 122/week @ 2025-02-18 32/week @ 2025-02-25 133/week @ 2025-03-04 20/week @ 2025-03-11 28/week @ 2025-03-18 22/week @ 2025-03-25 9/week @ 2025-04-01 22/week @ 2025-04-08 38/week @ 2025-04-15

92 downloads per month
Used in 8 crates (3 directly)

Apache-2.0/MIT

140KB
3.5K SLoC

OpenType Package Documentation Build

The package provides a builder and parser of OpenType fonts. It might be helpful to have a look at a higher-level abstraction called font, which internally relies on this package.

Example

use opentype::truetype::tables::names::{Names, NameID};
use opentype::truetype::tables::{FontHeader, HorizontalHeader};
use opentype::File;

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

let path = "SourceSerifPro-Regular.otf";
let mut tape = ok!(std::fs::File::open(path));
let File { mut fonts } = ok!(File::read(&mut tape));

let font_header: FontHeader = ok!(ok!(fonts[0].take(&mut tape)));
assert_eq!(font_header.units_per_em, 1000);

let horizontal_header: HorizontalHeader = ok!(ok!(fonts[0].take(&mut tape)));
assert_eq!(horizontal_header.ascender, 918);

let names: Names = ok!(ok!(fonts[0].take(&mut tape)));
let names = names
    .iter()
    .map(|((_, _, _, name_id), value)| (name_id, value))
    .collect::<std::collections::HashMap<_, _>>();
assert_eq!(ok!(names[&NameID::FullFontName].as_ref()), "Source Serif Pro");
assert_eq!(ok!(names[&NameID::DesignerName].as_ref()), "Frank Grießhammer");

Contribution

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.

Dependencies

~235KB