pub const GLYPH_WIDTH: u32 = 5;
pub const GLYPH_HEIGHT: u32 = 7;
pub const GLYPH_ADVANCE: u32 = 6;
pub const MISSING: [u8; 7] = [0x1f, 0x11, 0x11, 0x11, 0x11, 0x11, 0x1f];
const GLYPHS: [[u8; 7]; 95] = [
[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], [0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x04], [0x0a, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00], [0x0a, 0x0a, 0x1f, 0x0a, 0x1f, 0x0a, 0x0a], [0x04, 0x0f, 0x14, 0x0e, 0x05, 0x1e, 0x04], [0x18, 0x19, 0x02, 0x04, 0x08, 0x13, 0x03], [0x0c, 0x12, 0x14, 0x08, 0x15, 0x12, 0x0d], [0x04, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00], [0x02, 0x04, 0x08, 0x08, 0x08, 0x04, 0x02], [0x08, 0x04, 0x02, 0x02, 0x02, 0x04, 0x08], [0x00, 0x04, 0x15, 0x0e, 0x15, 0x04, 0x00], [0x00, 0x04, 0x04, 0x1f, 0x04, 0x04, 0x00], [0x00, 0x00, 0x00, 0x00, 0x0c, 0x04, 0x08], [0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c], [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x00], [0x0e, 0x11, 0x13, 0x15, 0x19, 0x11, 0x0e], [0x04, 0x0c, 0x04, 0x04, 0x04, 0x04, 0x0e], [0x0e, 0x11, 0x01, 0x02, 0x04, 0x08, 0x1f], [0x1f, 0x02, 0x04, 0x02, 0x01, 0x11, 0x0e], [0x02, 0x06, 0x0a, 0x12, 0x1f, 0x02, 0x02], [0x1f, 0x10, 0x1e, 0x01, 0x01, 0x11, 0x0e], [0x06, 0x08, 0x10, 0x1e, 0x11, 0x11, 0x0e], [0x1f, 0x01, 0x02, 0x04, 0x08, 0x08, 0x08], [0x0e, 0x11, 0x11, 0x0e, 0x11, 0x11, 0x0e], [0x0e, 0x11, 0x11, 0x0f, 0x01, 0x02, 0x0c], [0x00, 0x0c, 0x0c, 0x00, 0x0c, 0x0c, 0x00], [0x00, 0x0c, 0x0c, 0x00, 0x0c, 0x04, 0x08], [0x02, 0x04, 0x08, 0x10, 0x08, 0x04, 0x02], [0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x00], [0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08], [0x0e, 0x11, 0x01, 0x02, 0x04, 0x00, 0x04], [0x0e, 0x11, 0x01, 0x0d, 0x15, 0x15, 0x0e], [0x0e, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x11], [0x1e, 0x11, 0x11, 0x1e, 0x11, 0x11, 0x1e], [0x0e, 0x11, 0x10, 0x10, 0x10, 0x11, 0x0e], [0x1c, 0x12, 0x11, 0x11, 0x11, 0x12, 0x1c], [0x1f, 0x10, 0x10, 0x1e, 0x10, 0x10, 0x1f], [0x1f, 0x10, 0x10, 0x1e, 0x10, 0x10, 0x10], [0x0e, 0x11, 0x10, 0x17, 0x11, 0x11, 0x0f], [0x11, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x11], [0x0e, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0e], [0x07, 0x02, 0x02, 0x02, 0x02, 0x12, 0x0c], [0x11, 0x12, 0x14, 0x18, 0x14, 0x12, 0x11], [0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f], [0x11, 0x1b, 0x15, 0x15, 0x11, 0x11, 0x11], [0x11, 0x11, 0x19, 0x15, 0x13, 0x11, 0x11], [0x0e, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0e], [0x1e, 0x11, 0x11, 0x1e, 0x10, 0x10, 0x10], [0x0e, 0x11, 0x11, 0x11, 0x15, 0x12, 0x0d], [0x1e, 0x11, 0x11, 0x1e, 0x14, 0x12, 0x11], [0x0f, 0x10, 0x10, 0x0e, 0x01, 0x01, 0x1e], [0x1f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04], [0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0e], [0x11, 0x11, 0x11, 0x11, 0x11, 0x0a, 0x04], [0x11, 0x11, 0x11, 0x15, 0x15, 0x15, 0x0a], [0x11, 0x11, 0x0a, 0x04, 0x0a, 0x11, 0x11], [0x11, 0x11, 0x0a, 0x04, 0x04, 0x04, 0x04], [0x1f, 0x01, 0x02, 0x04, 0x08, 0x10, 0x1f], [0x0e, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0e], [0x00, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00], [0x0e, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0e], [0x04, 0x0a, 0x11, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f], [0x08, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00], [0x00, 0x00, 0x0e, 0x01, 0x0f, 0x11, 0x0f], [0x10, 0x10, 0x16, 0x19, 0x11, 0x11, 0x1e], [0x00, 0x00, 0x0e, 0x10, 0x10, 0x11, 0x0e], [0x01, 0x01, 0x0d, 0x13, 0x11, 0x11, 0x0f], [0x00, 0x00, 0x0e, 0x11, 0x1f, 0x10, 0x0e], [0x06, 0x09, 0x08, 0x1c, 0x08, 0x08, 0x08], [0x00, 0x0f, 0x11, 0x11, 0x0f, 0x01, 0x0e], [0x10, 0x10, 0x16, 0x19, 0x11, 0x11, 0x11], [0x04, 0x00, 0x0c, 0x04, 0x04, 0x04, 0x0e], [0x02, 0x00, 0x06, 0x02, 0x02, 0x12, 0x0c], [0x10, 0x10, 0x12, 0x14, 0x18, 0x14, 0x12], [0x0c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0e], [0x00, 0x00, 0x1a, 0x15, 0x15, 0x11, 0x11], [0x00, 0x00, 0x16, 0x19, 0x11, 0x11, 0x11], [0x00, 0x00, 0x0e, 0x11, 0x11, 0x11, 0x0e], [0x00, 0x00, 0x1e, 0x11, 0x1e, 0x10, 0x10], [0x00, 0x00, 0x0d, 0x13, 0x0f, 0x01, 0x01], [0x00, 0x00, 0x16, 0x19, 0x10, 0x10, 0x10], [0x00, 0x00, 0x0e, 0x10, 0x0e, 0x01, 0x1e], [0x08, 0x08, 0x1c, 0x08, 0x08, 0x09, 0x06], [0x00, 0x00, 0x11, 0x11, 0x11, 0x13, 0x0d], [0x00, 0x00, 0x11, 0x11, 0x11, 0x0a, 0x04], [0x00, 0x00, 0x11, 0x11, 0x15, 0x15, 0x0a], [0x00, 0x00, 0x11, 0x0a, 0x04, 0x0a, 0x11], [0x00, 0x00, 0x11, 0x11, 0x0f, 0x01, 0x0e], [0x00, 0x00, 0x1f, 0x02, 0x04, 0x08, 0x1f], [0x02, 0x04, 0x04, 0x08, 0x04, 0x04, 0x02], [0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04], [0x08, 0x04, 0x04, 0x02, 0x04, 0x04, 0x08], [0x00, 0x00, 0x08, 0x15, 0x02, 0x00, 0x00], ];
pub fn glyph(character: char) -> Option<[u8; 7]> {
let code = character as u32;
(0x20..0x7f)
.contains(&code)
.then(|| GLYPHS[(code - 0x20) as usize])
}
pub fn lit(rows: &[u8; 7], x: u32, y: u32) -> bool {
x < GLYPH_WIDTH
&& (y as usize) < rows.len()
&& rows[y as usize] & (1 << (GLYPH_WIDTH - 1 - x)) != 0
}
pub(crate) fn glyph_or_box(character: char) -> [u8; 7] {
glyph(character).unwrap_or(MISSING)
}