cff

crates.io docs.rs travis-ci.com

A zero-allocation CFF parser.

Released under the Apache License 2.0.

Supported on Rust 1.31.0 and later.

Example

```rust extern crate sfnt;

use std::fs::{File}; use std::io::{Read};

use cff::{Cff}; use cff::glyphs::charstring::{Operation, Point};

use sfnt::{Sfnt};

fn main() { // Read the font file into memory. let mut file = File::open("tests/resources/SourceSansPro-It.otf").unwrap(); let mut bytes = vec![]; file.readtoend(&mut bytes).unwrap();

// Parse the font file and find the CFF table in the font file.
let sfnt = Sfnt::parse(&bytes).unwrap();
let (_, bytes) = sfnt.find("CFF ").unwrap();

// Parse the CFF table.
let cff = Cff::parse(&bytes).unwrap();

// Parse the glyphs for the first font.
let glyphs = cff.glyphs(0).unwrap().unwrap();

// Find the charstring for the ".notdef" glyph.
let (charstring, _) = glyphs.charstring(0).unwrap().unwrap();

// Parse and collect the operations in the charstring.
let operations = charstring.iter().collect::<Result<Vec<_>, _>>().unwrap();

assert_eq!(&operations[..6], &[
    Operation::Width(92),
    Operation::HStem(0, 56),
    Operation::HStem(604, 660),
    Operation::VStem(36, 622),
    Operation::MoveTo(Point { x: 36, y: 0 }),
    Operation::LineTo(Point { x: 492, y: 0 }),
]);

} ```