#font #typography #typeface

opentype

The package provides a builder and parser of OpenType fonts

98 releases (35 breaking)

new 0.36.0 May 17, 2024
0.35.2 Feb 16, 2024
0.34.3 Feb 2, 2024
0.29.8 Oct 31, 2023
0.0.2 Nov 21, 2014

#44 in Rendering

Download history 15/week @ 2024-01-22 172/week @ 2024-01-29 97/week @ 2024-02-05 171/week @ 2024-02-12 821/week @ 2024-02-19 227/week @ 2024-02-26 25/week @ 2024-03-04 102/week @ 2024-03-11 57/week @ 2024-03-18 28/week @ 2024-03-25 130/week @ 2024-04-01 186/week @ 2024-04-08 154/week @ 2024-04-15 47/week @ 2024-04-22 30/week @ 2024-04-29 44/week @ 2024-05-06

308 downloads per month
Used in 7 crates (2 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