hiero_pack/atlas/
builder.rs

1use super::*; 
2
3pub trait AtlasBuilder: Sized {
4    type AtlasType;
5    fn with_font_file(self, font: String) -> Result<Self, &'static str>;
6    fn with_pages(self, pages: Vec<Vec<u8>>) -> Self;
7    fn build(self) -> Self::AtlasType;
8}
9
10impl AtlasBuilder for Incomplete<HieroAtlas> {
11    type AtlasType = HieroAtlas;
12
13    fn with_font_file(mut self, fnt_file: String) -> Result<Self, &'static str> {
14        let mut table: Vec<Vec<HieroToken>> = Vec::new();
15        for line in fnt_file.lines() {
16            table.push(HieroTokenizer::tokenize_line(line));
17        }
18        self.inner.info = parse::parse_info(&table)?;
19        self.inner.common = parse::parse_common(&table)?;
20        self.inner.bitmap_table = parse::parse_glyphs(&table)?;
21        self.inner.kerning_table = parse::parse_kerning_table(&table)?;
22        Ok(self)
23    }
24
25    fn with_pages(mut self, pages: Vec<Vec<u8>>) -> Self {
26        self.inner.compressed_pages = pages;
27        self
28    }
29
30    fn build(self) -> Self::AtlasType {
31        self.inner
32    }
33}