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}