hiero_pack/atlas/
builder.rs1use 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}