1use crate::FontCharType;
2
3pub fn to_cp437(c: char) -> FontCharType {
5 match c {
6 '☺' => 1,
7 '☻' => 2,
8 '♥' => 3,
9 '♦' => 4,
10 '♣' => 5,
11 '♠' => 6,
12 '•' => 7,
13 '◘' => 8,
14 '○' => 9,
15 '◙' => 10,
16 '♂' => 11,
17 '♀' => 12,
18 '♪' => 13,
19 '♫' => 14,
20 '☼' => 15,
21
22 '►' => 16,
23 '◄' => 17,
24 '↕' => 18,
25 '‼' => 19,
26 '¶' => 20,
27 '§' => 21,
28 '▬' => 22,
29 '↨' => 23,
30 '↑' => 24,
31 '↓' => 25,
32 '→' => 26,
33 '←' => 27,
34 '∟' => 28,
35 '↔' => 29,
36 '▲' => 30,
37 '▼' => 31,
38
39 ' ' => 32,
40 '!' => 33,
41 '"' => 34,
42 '#' => 35,
43 '$' => 36,
44 '%' => 37,
45 '&' => 38,
46 '\'' => 39,
47 '(' => 40,
48 ')' => 41,
49 '*' => 42,
50 '+' => 43,
51 ',' => 44,
52 '-' => 45,
53 '.' => 46,
54 '/' => 47,
55
56 '0' => 48,
57 '1' => 49,
58 '2' => 50,
59 '3' => 51,
60 '4' => 52,
61 '5' => 53,
62 '6' => 54,
63 '7' => 55,
64 '8' => 56,
65 '9' => 57,
66 ':' => 58,
67 ';' => 59,
68 '<' => 60,
69 '=' => 61,
70 '>' => 62,
71 '?' => 63,
72
73 '@' => 64,
74 'A' => 65,
75 'B' => 66,
76 'C' => 67,
77 'D' => 68,
78 'E' => 69,
79 'F' => 70,
80 'G' => 71,
81 'H' => 72,
82 'I' => 73,
83 'J' => 74,
84 'K' => 75,
85 'L' => 76,
86 'M' => 77,
87 'N' => 78,
88 'O' => 79,
89
90 'P' => 80,
91 'Q' => 81,
92 'R' => 82,
93 'S' => 83,
94 'T' => 84,
95 'U' => 85,
96 'V' => 86,
97 'W' => 87,
98 'X' => 88,
99 'Y' => 89,
100 'Z' => 90,
101 '[' => 91,
102 '\\' => 92,
103 ']' => 93,
104 '^' => 94,
105 '_' => 95,
106
107 '`' => 96,
108 'a' => 97,
109 'b' => 98,
110 'c' => 99,
111 'd' => 100,
112 'e' => 101,
113 'f' => 102,
114 'g' => 103,
115 'h' => 104,
116 'i' => 105,
117 'j' => 106,
118 'k' => 107,
119 'l' => 108,
120 'm' => 109,
121 'n' => 110,
122 'o' => 111,
123
124 'p' => 112,
125 'q' => 113,
126 'r' => 114,
127 's' => 115,
128 't' => 116,
129 'u' => 117,
130 'v' => 118,
131 'w' => 119,
132 'x' => 120,
133 'y' => 121,
134 'z' => 122,
135 '{' => 123,
136 '|' => 124,
137 '}' => 125,
138 '~' => 126,
139 '⌂' => 127,
140
141 'Ç' => 128,
142 'ü' => 129,
143 'é' => 130,
144 'â' => 131,
145 'ä' => 132,
146 'à' => 133,
147 'å' => 134,
148 'ç' => 135,
149 'ê' => 136,
150 'ë' => 137,
151 'è' => 138,
152 'ï' => 139,
153 'î' => 140,
154 'ì' => 141,
155 'Ä' => 142,
156 'Å' => 143,
157
158 'É' => 144,
159 'æ' => 145,
160 'Æ' => 146,
161 'ô' => 147,
162 'ö' => 148,
163 'ò' => 149,
164 'û' => 150,
165 'ù' => 151,
166 'ÿ' => 152,
167 'Ö' => 153,
168 'Ü' => 154,
169 '¢' => 155,
170 '£' => 156,
171 '¥' => 157,
172 '₧' => 158,
173 'ƒ' => 159,
174
175 'á' => 160,
176 'í' => 161,
177 'ó' => 162,
178 'ú' => 163,
179 'ñ' => 164,
180 'Ñ' => 165,
181 'ª' => 166,
182 'º' => 167,
183 '¿' => 168,
184 '⌐' => 169,
185 '¬' => 170,
186 '½' => 171,
187 '¼' => 172,
188 '¡' => 173,
189 '«' => 174,
190 '»' => 175,
191
192 '░' => 176,
193 '▒' => 177,
194 '▓' => 178,
195 '│' => 179,
196 '┤' => 180,
197 '╡' => 181,
198 '╢' => 182,
199 '╖' => 183,
200 '╕' => 184,
201 '╣' => 185,
202 '║' => 186,
203 '╗' => 187,
204 '╝' => 188,
205 '╜' => 189,
206 '╛' => 190,
207 '┐' => 191,
208
209 '└' => 192,
210 '┴' => 193,
211 '┬' => 194,
212 '├' => 195,
213 '─' => 196,
214 '┼' => 197,
215 '╞' => 198,
216 '╟' => 199,
217 '╚' => 200,
218 '╔' => 201,
219 '╩' => 202,
220 '╦' => 203,
221 '╠' => 204,
222 '═' => 205,
223 '╬' => 206,
224 '╧' => 207,
225
226 '╨' => 208,
227 '╤' => 209,
228 '╥' => 210,
229 '╙' => 211,
230 '╘' => 212,
231 '╒' => 213,
232 '╓' => 214,
233 '╫' => 215,
234 '╪' => 216,
235 '┘' => 217,
236 '┌' => 218,
237 '█' => 219,
238 '▄' => 220,
239 '▌' => 221,
240 '▐' => 222,
241 '▀' => 223,
242
243 'α' => 224,
244 'ß' => 225,
245 'Γ' => 226,
246 'π' => 227,
247 'Σ' => 228,
248 'σ' => 229,
249 'µ' => 230,
250 'τ' => 231,
251 'Φ' => 232,
252 'Θ' => 233,
253 'Ω' => 234,
254 'δ' => 235,
255 '∞' => 236,
256 'φ' => 237,
257 'ε' => 238,
258 '∩' => 239,
259
260 '≡' => 240,
261 '±' => 241,
262 '≥' => 242,
263 '≤' => 243,
264 '⌠' => 244,
265 '⌡' => 245,
266 '÷' => 246,
267 '≈' => 247,
268 '°' => 248,
269 '∙' => 249,
270 '·' => 250,
271 '√' => 251,
272 'ⁿ' => 252,
273 '²' => 253,
274 '■' => 254,
275
276 _ => 0,
277 }
278}
279
280pub fn to_char(c: u8) -> char {
281 match c {
282 1 => '☺',
283 2 => '☻',
284 3 => '♥',
285 4 => '♦',
286 5 => '♣',
287 6 => '♠',
288 7 => '•',
289 8 => '◘',
290 9 => '○',
291 10 => '◙',
292 11 => '♂',
293 12 => '♀',
294 13 => '♪',
295 14 => '♫',
296 15 => '☼',
297
298 16 => '►',
299 17 => '◄',
300 18 => '↕',
301 19 => '‼',
302 20 => '¶',
303 21 => '§',
304 22 => '▬',
305 23 => '↨',
306 24 => '↑',
307 25 => '↓',
308 26 => '→',
309 27 => '←',
310 28 => '∟',
311 29 => '↔',
312 30 => '▲',
313 31 => '▼',
314
315 32 => ' ',
316 33 => '!',
317 34 => '"',
318 35 => '#',
319 36 => '$',
320 37 => '%',
321 38 => '&',
322 39 => '\'',
323 40 => '(',
324 41 => ')',
325 42 => '*',
326 43 => '+',
327 44 => ',',
328 45 => '-',
329 46 => '.',
330 47 => '/',
331
332 48 => '0',
333 49 => '1',
334 50 => '2',
335 51 => '3',
336 52 => '4',
337 53 => '5',
338 54 => '6',
339 55 => '7',
340 56 => '8',
341 57 => '9',
342 58 => ':',
343 59 => ';',
344 60 => '<',
345 61 => '=',
346 62 => '>',
347 63 => '?',
348
349 64 => '@',
350 65 => 'A',
351 66 => 'B',
352 67 => 'C',
353 68 => 'D',
354 69 => 'E',
355 70 => 'F',
356 71 => 'G',
357 72 => 'H',
358 73 => 'I',
359 74 => 'J',
360 75 => 'K',
361 76 => 'L',
362 77 => 'M',
363 78 => 'N',
364 79 => 'O',
365
366 80 => 'P',
367 81 => 'Q',
368 82 => 'R',
369 83 => 'S',
370 84 => 'T',
371 85 => 'U',
372 86 => 'V',
373 87 => 'W',
374 88 => 'X',
375 89 => 'Y',
376 90 => 'Z',
377 91 => '[',
378 92 => '\\',
379 93 => ']',
380 94 => '^',
381 95 => '_',
382
383 96 => '`',
384 97 => 'a',
385 98 => 'b',
386 99 => 'c',
387 100 => 'd',
388 101 => 'e',
389 102 => 'f',
390 103 => 'g',
391 104 => 'h',
392 105 => 'i',
393 106 => 'j',
394 107 => 'k',
395 108 => 'l',
396 109 => 'm',
397 110 => 'n',
398 111 => 'o',
399
400 112 => 'p',
401 113 => 'q',
402 114 => 'r',
403 115 => 's',
404 116 => 't',
405 117 => 'u',
406 118 => 'v',
407 119 => 'w',
408 120 => 'x',
409 121 => 'y',
410 122 => 'z',
411 123 => '{',
412 124 => '|',
413 125 => '}',
414 126 => '~',
415 127 => '⌂',
416
417 128 => 'Ç',
418 129 => 'ü',
419 130 => 'é',
420 131 => 'â',
421 132 => 'ä',
422 133 => 'à',
423 134 => 'å',
424 135 => 'ç',
425 136 => 'ê',
426 137 => 'ë',
427 138 => 'è',
428 139 => 'ï',
429 140 => 'î',
430 141 => 'ì',
431 142 => 'Ä',
432 143 => 'Å',
433
434 144 => 'É',
435 145 => 'æ',
436 146 => 'Æ',
437 147 => 'ô',
438 148 => 'ö',
439 149 => 'ò',
440 150 => 'û',
441 151 => 'ù',
442 152 => 'ÿ',
443 153 => 'Ö',
444 154 => 'Ü',
445 155 => '¢',
446 156 => '£',
447 157 => '¥',
448 158 => '₧',
449 159 => 'ƒ',
450
451 160 => 'á',
452 161 => 'í',
453 162 => 'ó',
454 163 => 'ú',
455 164 => 'ñ',
456 165 => 'Ñ',
457 166 => 'ª',
458 167 => 'º',
459 168 => '¿',
460 169 => '⌐',
461 170 => '¬',
462 171 => '½',
463 172 => '¼',
464 173 => '¡',
465 174 => '«',
466 175 => '»',
467
468 176 => '░',
469 177 => '▒',
470 178 => '▓',
471 179 => '│',
472 180 => '┤',
473 181 => '╡',
474 182 => '╢',
475 183 => '╖',
476 184 => '╕',
477 185 => '╣',
478 186 => '║',
479 187 => '╗',
480 188 => '╝',
481 189 => '╜',
482 190 => '╛',
483 191 => '┐',
484
485 192 => '└',
486 193 => '┴',
487 194 => '┬',
488 195 => '├',
489 196 => '─',
490 197 => '┼',
491 198 => '╞',
492 199 => '╟',
493 200 => '╚',
494 201 => '╔',
495 202 => '╩',
496 203 => '╦',
497 204 => '╠',
498 205 => '═',
499 206 => '╬',
500 207 => '╧',
501
502 208 => '╨',
503 209 => '╤',
504 210 => '╥',
505 211 => '╙',
506 212 => '╘',
507 213 => '╒',
508 214 => '╓',
509 215 => '╫',
510 216 => '╪',
511 217 => '┘',
512 218 => '┌',
513 219 => '█',
514 220 => '▄',
515 221 => '▌',
516 222 => '▐',
517 223 => '▀',
518
519 224 => 'α',
520 225 => 'ß',
521 226 => 'Γ',
522 227 => 'π',
523 228 => 'Σ',
524 229 => 'σ',
525 230 => 'µ',
526 231 => 'τ',
527 232 => 'Φ',
528 233 => 'Θ',
529 234 => 'Ω',
530 235 => 'δ',
531 236 => '∞',
532 237 => 'φ',
533 238 => 'ε',
534 239 => '∩',
535
536 240 => '≡',
537 241 => '±',
538 242 => '≥',
539 243 => '≤',
540 244 => '⌠',
541 245 => '⌡',
542 246 => '÷',
543 247 => '≈',
544 248 => '°',
545 249 => '∙',
546 250 => '·',
547 251 => '√',
548 252 => 'ⁿ',
549 253 => '²',
550 254 => '■',
551
552 _ => ' ',
553 }
554}
555
556pub fn string_to_cp437<S: AsRef<str>>(input: S) -> Vec<FontCharType> {
558 input.as_ref().chars().map(to_cp437).collect()
559}
560
561#[cfg(test)]
562mod tests {
563 use super::string_to_cp437;
564 use crate::FontCharType;
565
566 #[test]
567 fn test_hello() {
569 let test: Vec<FontCharType> = vec![72, 101, 108, 108, 111];
570 let convert = string_to_cp437("Hello");
571 assert_eq!(test, convert);
572 }
573
574 #[test]
575 fn test_fancy() {
577 let test: Vec<FontCharType> = vec![171, 165, 176, 206, 234, 247];
578 let convert = string_to_cp437("½Ñ░╬Ω≈");
579 assert_eq!(test, convert);
580 }
581
582 #[test]
583 fn test_first_group() {
585 let test: Vec<FontCharType> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
586 let convert = string_to_cp437("☺☻♥♦♣♠•◘○◙♂♀♪♫☼");
587 assert_eq!(test, convert);
588 }
589}