1use crate::{BitOrder, BitmapFont};
6
7pub const SPLEEN_5X8_BITMAP: [u8; 760] = [
9 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x20, 0x00, 0x50, 0x50, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xf8, 0x50, 0x50, 0xf8, 0x50, 0x00, 0x20, 0x70, 0xa0, 0x60, 0x30, 0x30, 0xe0, 0x20, 0x10, 0x90, 0xa0, 0x20, 0x40, 0x50, 0x90, 0x80, 0x20, 0x50, 0x50, 0x60, 0xa8, 0x90, 0x68, 0x00, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, 0x20, 0x10, 0x40, 0x20, 0x10, 0x10, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00, 0x90, 0x60, 0xf0, 0x60, 0x90, 0x00, 0x00, 0x00, 0x20, 0x20, 0xf8, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x60, 0x90, 0xb0, 0xd0, 0x90, 0x60, 0x00, 0x00, 0x20, 0x60, 0x20, 0x20, 0x20, 0x70, 0x00, 0x00, 0x60, 0x90, 0x10, 0x60, 0x80, 0xf0, 0x00, 0x00, 0x60, 0x90, 0x20, 0x10, 0x90, 0x60, 0x00, 0x00, 0x80, 0xa0, 0xa0, 0xf0, 0x20, 0x20, 0x00, 0x00, 0xf0, 0x80, 0xe0, 0x10, 0x10, 0xe0, 0x00, 0x00, 0x60, 0x80, 0xe0, 0x90, 0x90, 0x60, 0x00, 0x00, 0xf0, 0x90, 0x10, 0x20, 0x40, 0x40, 0x00, 0x00, 0x60, 0x90, 0x60, 0x90, 0x90, 0x60, 0x00, 0x00, 0x60, 0x90, 0x90, 0x70, 0x10, 0x60, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x20, 0x40, 0x00, 0x10, 0x20, 0x40, 0x40, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x40, 0x20, 0x10, 0x10, 0x20, 0x40, 0x00, 0x60, 0x90, 0x10, 0x20, 0x40, 0x00, 0x40, 0x00, 0x00, 0x60, 0x90, 0xb0, 0xb0, 0x80, 0x70, 0x00, 0x00, 0x60, 0x90, 0x90, 0xf0, 0x90, 0x90, 0x00, 0x00, 0xe0, 0x90, 0xe0, 0x90, 0x90, 0xe0, 0x00, 0x00, 0x70, 0x80, 0x80, 0x80, 0x80, 0x70, 0x00, 0x00, 0xe0, 0x90, 0x90, 0x90, 0x90, 0xe0, 0x00, 0x00, 0x70, 0x80, 0xe0, 0x80, 0x80, 0x70, 0x00, 0x00, 0x70, 0x80, 0x80, 0xe0, 0x80, 0x80, 0x00, 0x00, 0x70, 0x80, 0xb0, 0x90, 0x90, 0x70, 0x00, 0x00, 0x90, 0x90, 0xf0, 0x90, 0x90, 0x90, 0x00, 0x00, 0x70, 0x20, 0x20, 0x20, 0x20, 0x70, 0x00, 0x00, 0x70, 0x20, 0x20, 0x20, 0x20, 0xc0, 0x00, 0x00, 0x90, 0x90, 0xe0, 0x90, 0x90, 0x90, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x70, 0x00, 0x00, 0x90, 0xf0, 0xf0, 0x90, 0x90, 0x90, 0x00, 0x00, 0x90, 0xd0, 0xd0, 0xb0, 0xb0, 0x90, 0x00, 0x00, 0x60, 0x90, 0x90, 0x90, 0x90, 0x60, 0x00, 0x00, 0xe0, 0x90, 0x90, 0xe0, 0x80, 0x80, 0x00, 0x00, 0x60, 0x90, 0x90, 0x90, 0x90, 0x60, 0x30, 0x00, 0xe0, 0x90, 0x90, 0xe0, 0x90, 0x90, 0x00, 0x00, 0x70, 0x80, 0x60, 0x10, 0x10, 0xe0, 0x00, 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x90, 0x90, 0x90, 0x90, 0x90, 0x70, 0x00, 0x00, 0x90, 0x90, 0x90, 0x90, 0x60, 0x60, 0x00, 0x00, 0x90, 0x90, 0x90, 0xf0, 0xf0, 0x90, 0x00, 0x00, 0x90, 0x90, 0x60, 0x60, 0x90, 0x90, 0x00, 0x00, 0x90, 0x90, 0x90, 0x70, 0x10, 0xe0, 0x00, 0x00, 0xf0, 0x10, 0x20, 0x40, 0x80, 0xf0, 0x00, 0x70, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x70, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x10, 0x70, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x70, 0x00, 0x20, 0x50, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x70, 0x90, 0x70, 0x00, 0x80, 0x80, 0xe0, 0x90, 0x90, 0x90, 0xe0, 0x00, 0x00, 0x00, 0x70, 0x80, 0x80, 0x80, 0x70, 0x00, 0x10, 0x10, 0x70, 0x90, 0x90, 0x90, 0x70, 0x00, 0x00, 0x00, 0x70, 0x90, 0xf0, 0x80, 0x70, 0x00, 0x30, 0x40, 0x40, 0xe0, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x70, 0x90, 0x90, 0x60, 0x10, 0xe0, 0x80, 0x80, 0xe0, 0x90, 0x90, 0x90, 0x90, 0x00, 0x00, 0x20, 0x00, 0x60, 0x20, 0x20, 0x30, 0x00, 0x00, 0x20, 0x00, 0x20, 0x20, 0x20, 0x20, 0xc0, 0x80, 0x80, 0x90, 0xa0, 0xc0, 0xa0, 0x90, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x30, 0x00, 0x00, 0x00, 0x90, 0xf0, 0xf0, 0x90, 0x90, 0x00, 0x00, 0x00, 0xe0, 0x90, 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, 0x60, 0x90, 0x90, 0x90, 0x60, 0x00, 0x00, 0x00, 0xe0, 0x90, 0x90, 0xe0, 0x80, 0x80, 0x00, 0x00, 0x70, 0x90, 0x90, 0x70, 0x10, 0x10, 0x00, 0x00, 0x70, 0x90, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x70, 0x80, 0x60, 0x10, 0xe0, 0x00, 0x40, 0x40, 0xe0, 0x40, 0x40, 0x40, 0x30, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90, 0x90, 0x70, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90, 0x60, 0x60, 0x00, 0x00, 0x00, 0x90, 0x90, 0xf0, 0xf0, 0x90, 0x00, 0x00, 0x00, 0x90, 0x60, 0x60, 0x90, 0x90, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90, 0x70, 0x10, 0xe0, 0x00, 0x00, 0xf0, 0x10, 0x20, 0x40, 0xf0, 0x00, 0x30, 0x40, 0x40, 0xc0, 0xc0, 0x40, 0x40, 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xc0, 0x20, 0x20, 0x30, 0x30, 0x20, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x48, 0xb0, 0x00, 0x00, 0x00, ];
105
106pub const SPLEEN_5X8: BitmapFont = BitmapFont {
108 glyph_w: 5,
109 glyph_h: 8,
110 first_char: 0x0020,
111 glyph_count: 95,
112 bitmap: &SPLEEN_5X8_BITMAP,
113 glyph_advances: None,
114 advance_x: 5,
115 line_height: 8,
116 bit_order: BitOrder::Msb,
117};
118
119const fn italicize_spleen_5x8() -> [u8; 760] {
125 let mut italic = SPLEEN_5X8_BITMAP;
126 let mut glyph = 0;
127 while glyph < 95 {
128 let mut row = 0;
129 while row < 4 {
130 let offset = glyph * 8 + row;
131 italic[offset] >>= 1;
132 row += 1;
133 }
134 glyph += 1;
135 }
136 italic
137}
138
139pub const SPLEEN_5X8_ITALIC_BITMAP: [u8; 760] = italicize_spleen_5x8();
142
143pub const SPLEEN_5X8_ITALIC: BitmapFont = BitmapFont {
146 glyph_w: 6,
147 glyph_h: 8,
148 first_char: 0x0020,
149 glyph_count: 95,
150 bitmap: &SPLEEN_5X8_ITALIC_BITMAP,
151 glyph_advances: None,
152 advance_x: 5,
153 line_height: 8,
154 bit_order: BitOrder::Msb,
155};
156
157#[cfg(test)]
158mod tests {
159 use super::*;
160
161 #[test]
162 fn italic_face_shears_the_upper_half_without_widening_text_metrics() {
163 let h = ('H' as usize - 0x20) * 8;
164 assert_eq!(SPLEEN_5X8_ITALIC_BITMAP[h + 1], SPLEEN_5X8_BITMAP[h + 1] >> 1);
165 assert_eq!(SPLEEN_5X8_ITALIC_BITMAP[h + 4], SPLEEN_5X8_BITMAP[h + 4]);
166 assert_eq!(SPLEEN_5X8_ITALIC.glyph_w, 6);
167 assert_eq!(SPLEEN_5X8_ITALIC.text_width("HORIZON"), 35);
168 }
169}