use crate::fontsource::BuiltinFont;
use std::collections::BTreeMap;
use std::fs::File;
use std::io::{self, BufRead};
#[derive(Debug, Hash, PartialEq, Eq, Clone)]
pub struct FontMetrics {
widths: BTreeMap<u8, u16>,
}
impl FontMetrics {
pub fn parse(source: File) -> io::Result<FontMetrics> {
let source = io::BufReader::new(source);
let mut result = FontMetrics {
widths: BTreeMap::new(),
};
for line in source.lines() {
let line = line.unwrap();
let words: Vec<&str> = line.split_whitespace().collect();
if words[0] == "C" && words[3] == "WX" {
if let (Ok(c), Ok(w)) =
(words[1].parse::<u8>(), words[4].parse::<u16>())
{
result.widths.insert(c, w);
}
}
}
Ok(result)
}
fn from_slice(data: &[(u8, u16)]) -> Self {
let mut widths = BTreeMap::new();
for &(c, w) in data {
widths.insert(c, w);
}
FontMetrics { widths }
}
pub fn get_width(&self, char: u8) -> Option<u16> {
self.widths.get(&char).cloned()
}
}
include!(concat!(env!("OUT_DIR"), "/metrics_data.rs"));