Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions eg-font-converter/src/eg_bdf_font.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::{fs, io, path::Path};

use anyhow::{bail, Result};
use anyhow::Result;
use bdf_parser::{BoundingBox, Encoding};
use bitvec::{prelude::*, vec::BitVec};
use eg_bdf::{BdfFont, BdfGlyph};
Expand Down Expand Up @@ -45,10 +45,12 @@ impl EgBdfOutput {
let bounding_box = bounding_box_to_rectangle(&glyph.bounding_box);

// TODO: assumes unicode
// TODO: improved error handling
let character = match glyph.encoding {
Encoding::Standard(index) => char::from_u32(index).unwrap(),
_ => bail!("invalid encoding"),
_ => {
// TODO: add warning about skipped glyphs
continue;
}
};

glyphs.push(BdfGlyph {
Expand Down
35 changes: 20 additions & 15 deletions eg-font-converter/src/mono_font.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ pub struct MonoFontOutput {
underline: DecorationDimensions,
strikethrough: DecorationDimensions,

glyphs: Vec<Glyph>,
mapping: Option<Mapping>,
}

Expand Down Expand Up @@ -68,7 +69,14 @@ impl MonoFontOutput {
})
.collect::<Vec<_>>()
} else {
bdf.font.glyphs.clone()
// Filter out all non standard glyphs.
// TODO: add a warning
bdf.font
.glyphs
.iter()
.filter(|g| matches!(g.encoding, Encoding::Standard(_)))
.cloned()
.collect()
};

for (i, glyph) in glyphs.iter().enumerate() {
Expand All @@ -78,7 +86,7 @@ impl MonoFontOutput {
// TODO: assumes unicode
let c = match glyph.encoding {
Encoding::Standard(index) => char::from_u32(index).unwrap(),
_ => bail!("invalid encoding"),
_ => bail!("invalid encoding: '{:?}'", glyph.encoding),
};

Text::with_baseline(&String::from(c), Point::new(x, y), style, Baseline::Top)
Expand All @@ -97,6 +105,7 @@ impl MonoFontOutput {
baseline,
underline,
strikethrough,
glyphs,
mapping,
})
}
Expand Down Expand Up @@ -135,14 +144,12 @@ impl MonoFontOutput {
let mime = format_ident!("{}", mapping.mime());
quote!(::embedded_graphics::mono_font::mapping::#mime)
} else {
let str_mapping = glyphs_to_str_mapping(self.font.glyphs.iter().map(|glyph| {
let str_mapping = glyphs_to_str_mapping(self.glyphs.iter().map(|glyph| {
// TODO: assumes unicode
let c = match glyph.encoding {
match glyph.encoding {
Encoding::Standard(index) => char::from_u32(index).unwrap(),
_ => panic!("invalid encoding"),
};

c
_ => unreachable!(),
}
}));
let replacement = self.font.replacement_character;
quote!(::embedded_graphics::mono_font::mapping::StrGlyphMapping::new(#str_mapping, #replacement))
Expand Down Expand Up @@ -256,14 +263,12 @@ fn glyphs_to_mapping(glyphs: &[Glyph]) -> Option<Mapping> {
.iter()
.map(|glyph| {
// TODO: assumes unicode
let c = match glyph.encoding {
Encoding::Standard(index) => char::from_u32(index).unwrap(),
_ => panic!("invalid encoding"),
};

c
match glyph.encoding {
Encoding::Standard(index) => char::from_u32(index),
_ => None,
}
})
.eq(chars.iter().copied())
.eq(chars.iter().map(|c| Some(*c)))
{
return Some(mapping);
}
Expand Down