cff

Crates.iocff
lib.rscff
version0.5.0
sourcesrc
created_at2018-05-20 21:14:56.326117
updated_at2019-01-02 09:11:40.841388
descriptionA zero-allocation CFF parser.
homepage
repositoryhttps://github.com/glyph-rs/cff
max_upload_size
id66377
size143,232
Kyle Mayes (KyleMayes)

documentation

https://docs.rs/cff

README

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

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.read_to_end(&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(b"CFF ").unwrap();

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

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

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

    // Parse and collect the operations in the charstring.
    let operations = charstring.operations().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 }),
    ]);
}
Commit count: 0

cargo fmt