Skip to main content

iris/drawing/
font.rs

1/// A simple 5x7 bitmap font for rendering ASCII text.
2/// Each character is represented by 5 columns of 7 pixels each.
3pub const FONT_5X7: [[u8; 5]; 128] = {
4    let mut font = [[0u8; 5]; 128];
5
6    // Space (0x20)
7    font[32] = [0, 0, 0, 0, 0];
8    // !
9    font[33] = [0x00, 0x00, 0x5f, 0x00, 0x00];
10    // "
11    font[34] = [0x00, 0x07, 0x00, 0x07, 0x00];
12    // #
13    font[35] = [0x14, 0x7f, 0x14, 0x7f, 0x14];
14    // $
15    font[36] = [0x24, 0x2a, 0x7f, 0x2a, 0x12];
16    // %
17    font[37] = [0x23, 0x13, 0x08, 0x64, 0x62];
18    // &
19    font[38] = [0x36, 0x49, 0x55, 0x22, 0x50];
20    // '
21    font[39] = [0x00, 0x05, 0x03, 0x00, 0x00];
22    // (
23    font[40] = [0x00, 0x1c, 0x22, 0x41, 0x00];
24    // )
25    font[41] = [0x00, 0x41, 0x22, 0x1c, 0x00];
26    // *
27    font[42] = [0x14, 0x08, 0x3e, 0x08, 0x14];
28    // +
29    font[43] = [0x08, 0x08, 0x3e, 0x08, 0x08];
30    // ,
31    font[44] = [0x00, 0x50, 0x30, 0x00, 0x00];
32    // -
33    font[45] = [0x08, 0x08, 0x08, 0x08, 0x08];
34    // .
35    font[46] = [0x00, 0x60, 0x60, 0x00, 0x00];
36    // /
37    font[47] = [0x20, 0x10, 0x08, 0x04, 0x02];
38
39    // 0
40    font[48] = [0x3e, 0x51, 0x49, 0x45, 0x3e];
41    // 1
42    font[49] = [0x00, 0x42, 0x7f, 0x40, 0x00];
43    // 2
44    font[50] = [0x42, 0x61, 0x51, 0x49, 0x46];
45    // 3
46    font[51] = [0x21, 0x41, 0x45, 0x4b, 0x31];
47    // 4
48    font[52] = [0x18, 0x14, 0x12, 0x7f, 0x10];
49    // 5
50    font[53] = [0x27, 0x45, 0x45, 0x45, 0x39];
51    // 6
52    font[54] = [0x3c, 0x4a, 0x49, 0x49, 0x30];
53    // 7
54    font[55] = [0x01, 0x71, 0x09, 0x05, 0x03];
55    // 8
56    font[56] = [0x36, 0x49, 0x49, 0x49, 0x36];
57    // 9
58    font[57] = [0x06, 0x49, 0x49, 0x29, 0x1e];
59
60    // :
61    font[58] = [0x00, 0x36, 0x36, 0x00, 0x00];
62    // ;
63    font[59] = [0x00, 0x56, 0x36, 0x00, 0x00];
64    // <
65    font[60] = [0x08, 0x14, 0x22, 0x41, 0x00];
66    // =
67    font[61] = [0x24, 0x24, 0x24, 0x24, 0x24];
68    // >
69    font[62] = [0x00, 0x41, 0x22, 0x14, 0x08];
70    // ?
71    font[63] = [0x02, 0x01, 0x51, 0x09, 0x06];
72    // @
73    font[64] = [0x32, 0x49, 0x79, 0x41, 0x3e];
74
75    // A-Z
76    font[65] = [0x7e, 0x11, 0x11, 0x11, 0x7e];
77    font[66] = [0x7f, 0x49, 0x49, 0x49, 0x36];
78    font[67] = [0x3e, 0x41, 0x41, 0x41, 0x22];
79    font[68] = [0x7f, 0x41, 0x41, 0x22, 0x1c];
80    font[69] = [0x7f, 0x49, 0x49, 0x49, 0x41];
81    font[70] = [0x7f, 0x09, 0x09, 0x09, 0x01];
82    font[71] = [0x3e, 0x41, 0x49, 0x49, 0x7a];
83    font[72] = [0x7f, 0x08, 0x08, 0x08, 0x7f];
84    font[73] = [0x00, 0x41, 0x7f, 0x41, 0x00];
85    font[74] = [0x20, 0x40, 0x41, 0x3f, 0x01];
86    font[75] = [0x7f, 0x08, 0x14, 0x22, 0x41];
87    font[76] = [0x7f, 0x40, 0x40, 0x40, 0x40];
88    font[77] = [0x7f, 0x02, 0x0c, 0x02, 0x7f];
89    font[78] = [0x7f, 0x04, 0x08, 0x10, 0x7f];
90    font[79] = [0x3e, 0x41, 0x41, 0x41, 0x3e];
91    font[80] = [0x7f, 0x09, 0x09, 0x09, 0x06];
92    font[81] = [0x3e, 0x41, 0x51, 0x21, 0x5e];
93    font[82] = [0x7f, 0x09, 0x19, 0x29, 0x46];
94    font[83] = [0x46, 0x49, 0x49, 0x49, 0x31];
95    font[84] = [0x01, 0x01, 0x7f, 0x01, 0x01];
96    font[85] = [0x3f, 0x40, 0x40, 0x40, 0x3f];
97    font[86] = [0x1f, 0x20, 0x40, 0x20, 0x1f];
98    font[87] = [0x3f, 0x40, 0x38, 0x40, 0x3f];
99    font[88] = [0x63, 0x14, 0x08, 0x14, 0x63];
100    font[89] = [0x07, 0x08, 0x70, 0x08, 0x07];
101    font[90] = [0x61, 0x51, 0x49, 0x45, 0x43];
102
103    // [ \ ] ^ _ `
104    font[91] = [0x00, 0x7f, 0x41, 0x41, 0x00];
105    font[92] = [0x02, 0x04, 0x08, 0x10, 0x20];
106    font[93] = [0x00, 0x41, 0x41, 0x7f, 0x00];
107    font[94] = [0x04, 0x02, 0x01, 0x02, 0x04];
108    font[95] = [0x40, 0x40, 0x40, 0x40, 0x40];
109    font[96] = [0x00, 0x01, 0x02, 0x04, 0x00];
110
111    // a-z
112    font[97] = [0x20, 0x54, 0x54, 0x54, 0x78];
113    font[98] = [0x7f, 0x48, 0x44, 0x44, 0x38];
114    font[99] = [0x38, 0x44, 0x44, 0x44, 0x20];
115    font[100] = [0x38, 0x44, 0x44, 0x48, 0x7f];
116    font[101] = [0x38, 0x54, 0x54, 0x54, 0x18];
117    font[102] = [0x08, 0x7e, 0x09, 0x01, 0x02];
118    font[103] = [0x0c, 0x52, 0x52, 0x52, 0x3e];
119    font[104] = [0x7f, 0x08, 0x04, 0x04, 0x78];
120    font[105] = [0x00, 0x44, 0x7d, 0x40, 0x00];
121    font[106] = [0x20, 0x40, 0x44, 0x3d, 0x00];
122    font[107] = [0x7f, 0x10, 0x28, 0x44, 0x00];
123    font[108] = [0x00, 0x41, 0x7f, 0x40, 0x00];
124    font[109] = [0x7c, 0x04, 0x18, 0x04, 0x78];
125    font[110] = [0x7c, 0x08, 0x04, 0x04, 0x78];
126    font[111] = [0x38, 0x44, 0x44, 0x44, 0x38];
127    font[112] = [0x7c, 0x14, 0x14, 0x14, 0x08];
128    font[113] = [0x08, 0x14, 0x14, 0x18, 0x7c];
129    font[114] = [0x7c, 0x08, 0x04, 0x04, 0x08];
130    font[115] = [0x48, 0x54, 0x54, 0x54, 0x20];
131    font[116] = [0x04, 0x3f, 0x44, 0x40, 0x20];
132    font[117] = [0x3c, 0x40, 0x40, 0x20, 0x7c];
133    font[118] = [0x1c, 0x20, 0x40, 0x20, 0x1c];
134    font[119] = [0x3c, 0x40, 0x30, 0x40, 0x3c];
135    font[120] = [0x44, 0x28, 0x10, 0x28, 0x44];
136    font[121] = [0x0c, 0x50, 0x50, 0x50, 0x3c];
137    font[122] = [0x44, 0x64, 0x54, 0x4c, 0x44];
138
139    // { | } ~ DEL
140    font[123] = [0x00, 0x08, 0x36, 0x41, 0x00];
141    font[124] = [0x00, 0x00, 0x7f, 0x00, 0x00];
142    font[125] = [0x00, 0x41, 0x36, 0x08, 0x00];
143    font[126] = [0x08, 0x04, 0x08, 0x10, 0x08];
144
145    font
146};
147
148#[cfg(test)]
149mod tests {
150    use super::*;
151
152    #[test]
153    fn test_font_invariants() {
154        assert_eq!(FONT_5X7.len(), 128);
155        // Space character
156        assert_eq!(FONT_5X7[32], [0, 0, 0, 0, 0]);
157        // exclamation point
158        assert_eq!(FONT_5X7[33][2], 0x5f);
159    }
160}