Crates.io | cff |
lib.rs | cff |
version | 0.5.0 |
source | src |
created_at | 2018-05-20 21:14:56.326117 |
updated_at | 2019-01-02 09:11:40.841388 |
description | A zero-allocation CFF parser. |
homepage | |
repository | https://github.com/glyph-rs/cff |
max_upload_size | |
id | 66377 |
size | 143,232 |
A zero-allocation CFF parser.
Released under the Apache License 2.0.
Supported on Rust 1.31.0 and later.
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 }),
]);
}