font_reader/
lib.rs

1extern crate binary_reader;
2
3mod formats;
4pub mod types;
5
6use binary_reader::BinaryReader;
7use formats::{ttc::TTC, ttf::TTF};
8use std::fs::File;
9use std::io::{Error, ErrorKind};
10use std::path::Path;
11use types::Fonts;
12
13pub fn read(path: &str) -> Result<Fonts, Error> {
14  let parsed = Path::new(&path);
15  let ext = parsed.extension().unwrap();
16
17  let mut file = File::open(&path)?;
18  let mut binary = BinaryReader::from_file(&mut file);
19
20  if ext == "ttf" || ext == "otf" {
21    let mut reader = TTF::new(&mut binary, 0);
22
23    match reader.get_data() {
24      Ok(data) => return Ok(data),
25      Err(err) => return Err(err),
26    }
27  } else if ext == "ttc" {
28    let reader = TTC::new(&mut binary);
29
30    match reader.get_data() {
31      Ok(data) => return Ok(data),
32      Err(err) => return Err(err),
33    }
34  }
35
36  Err(Error::new(
37    ErrorKind::InvalidInput,
38    format!("Invalid font file: {}", path),
39  ))
40}