1#[derive(Debug)]
11pub struct CodePage {
12 pub name: &'static str,
13 lower: Option<[char; 128]>,
15 upper: [char; 128],
16}
17
18impl CodePage {
19 pub fn decode(&self, b: u8) -> char {
21 match &self.lower {
22 Some(lower) if b < 0x80 => lower[b as usize],
23 None if b < 0x80 => b as char,
24 _ => self.upper[(b - 0x80) as usize],
25 }
26 }
27
28 pub fn encode(&self, c: char) -> Option<u8> {
30 if let Some(lower) = &self.lower {
31 return lower.iter().position(|&l| l == c).map(|i| i as u8);
32 }
33 if (c as u32) < 0x80 {
34 return Some(c as u8);
35 }
36 self.upper.iter().position(|&u| u == c).map(|i| 0x80 + i as u8)
37 }
38
39 pub fn screen_codes(&self) -> bool {
42 self.lower.is_some()
43 }
44
45 pub fn encode_str(&self, s: &str) -> Vec<u8> {
46 s.chars().map(|c| self.encode(c).unwrap_or(b'?')).collect()
47 }
48}
49
50pub fn screen_codes(id: u8) -> Option<&'static CodePage> {
54 match id {
55 32 | 34 => Some(&C64_UPPER),
56 33 | 35 => Some(&C64_LOWER),
57 36 => Some(&ATARI),
58 _ => None,
59 }
60}
61
62pub fn for_font(id: u8) -> Option<&'static CodePage> {
64 Some(match id {
65 1 | 20 => &CP1251,
66 2 | 12 | 22 => &KOI8_R,
67 3 => &ISO_8859_2,
68 4 | 11 | 13 | 23 => &ISO_8859_4,
69 5 | 25 | 27 => &CP866,
70 6 => &ISO_8859_9,
71 8 => &ISO_8859_8,
72 9 => &KOI8_U,
73 10 | 16 => &ISO_8859_15,
74 14 => &ISO_8859_5,
75 17 | 18 => &CP850,
76 19 | 28 => &CP865,
77 21 => &ISO_8859_7,
78 24 | 30 => &ISO_8859_1,
79 29 => &CP866U,
80 7 => &HAIK8,
81 15 => &ARMSCII_8,
82 31 => &CP1131,
83 _ => return None,
84 })
85}
86
87static CP1251: CodePage = CodePage {
88 name: "Windows-1251, Cyrillic",
89 lower: None,
90 upper: [
91 '\u{402}', '\u{403}', '\u{201a}', '\u{453}', '\u{201e}', '\u{2026}', '\u{2020}', '\u{2021}', '\u{20ac}',
92 '\u{2030}', '\u{409}', '\u{2039}', '\u{40a}', '\u{40c}', '\u{40b}', '\u{40f}', '\u{452}', '\u{2018}',
93 '\u{2019}', '\u{201c}', '\u{201d}', '\u{2022}', '\u{2013}', '\u{2014}', '\u{fffd}', '\u{2122}', '\u{459}',
94 '\u{203a}', '\u{45a}', '\u{45c}', '\u{45b}', '\u{45f}', '\u{a0}', '\u{40e}', '\u{45e}', '\u{408}', '\u{a4}',
95 '\u{490}', '\u{a6}', '\u{a7}', '\u{401}', '\u{a9}', '\u{404}', '\u{ab}', '\u{ac}', '\u{ad}', '\u{ae}',
96 '\u{407}', '\u{b0}', '\u{b1}', '\u{406}', '\u{456}', '\u{491}', '\u{b5}', '\u{b6}', '\u{b7}', '\u{451}',
97 '\u{2116}', '\u{454}', '\u{bb}', '\u{458}', '\u{405}', '\u{455}', '\u{457}', '\u{410}', '\u{411}', '\u{412}',
98 '\u{413}', '\u{414}', '\u{415}', '\u{416}', '\u{417}', '\u{418}', '\u{419}', '\u{41a}', '\u{41b}', '\u{41c}',
99 '\u{41d}', '\u{41e}', '\u{41f}', '\u{420}', '\u{421}', '\u{422}', '\u{423}', '\u{424}', '\u{425}', '\u{426}',
100 '\u{427}', '\u{428}', '\u{429}', '\u{42a}', '\u{42b}', '\u{42c}', '\u{42d}', '\u{42e}', '\u{42f}', '\u{430}',
101 '\u{431}', '\u{432}', '\u{433}', '\u{434}', '\u{435}', '\u{436}', '\u{437}', '\u{438}', '\u{439}', '\u{43a}',
102 '\u{43b}', '\u{43c}', '\u{43d}', '\u{43e}', '\u{43f}', '\u{440}', '\u{441}', '\u{442}', '\u{443}', '\u{444}',
103 '\u{445}', '\u{446}', '\u{447}', '\u{448}', '\u{449}', '\u{44a}', '\u{44b}', '\u{44c}', '\u{44d}', '\u{44e}',
104 '\u{44f}',
105 ],
106};
107
108static KOI8_R: CodePage = CodePage {
109 name: "KOI8-R, Russian",
110 lower: None,
111 upper: [
112 '\u{2500}', '\u{2502}', '\u{250c}', '\u{2510}', '\u{2514}', '\u{2518}', '\u{251c}', '\u{2524}', '\u{252c}',
113 '\u{2534}', '\u{253c}', '\u{2580}', '\u{2584}', '\u{2588}', '\u{258c}', '\u{2590}', '\u{2591}', '\u{2592}',
114 '\u{2593}', '\u{2320}', '\u{25a0}', '\u{2219}', '\u{221a}', '\u{2248}', '\u{2264}', '\u{2265}', '\u{a0}',
115 '\u{2321}', '\u{b0}', '\u{b2}', '\u{b7}', '\u{f7}', '\u{2550}', '\u{2551}', '\u{2552}', '\u{451}', '\u{2553}',
116 '\u{2554}', '\u{2555}', '\u{2556}', '\u{2557}', '\u{2558}', '\u{2559}', '\u{255a}', '\u{255b}', '\u{255c}',
117 '\u{255d}', '\u{255e}', '\u{255f}', '\u{2560}', '\u{2561}', '\u{401}', '\u{2562}', '\u{2563}', '\u{2564}',
118 '\u{2565}', '\u{2566}', '\u{2567}', '\u{2568}', '\u{2569}', '\u{256a}', '\u{256b}', '\u{256c}', '\u{a9}',
119 '\u{44e}', '\u{430}', '\u{431}', '\u{446}', '\u{434}', '\u{435}', '\u{444}', '\u{433}', '\u{445}', '\u{438}',
120 '\u{439}', '\u{43a}', '\u{43b}', '\u{43c}', '\u{43d}', '\u{43e}', '\u{43f}', '\u{44f}', '\u{440}', '\u{441}',
121 '\u{442}', '\u{443}', '\u{436}', '\u{432}', '\u{44c}', '\u{44b}', '\u{437}', '\u{448}', '\u{44d}', '\u{449}',
122 '\u{447}', '\u{44a}', '\u{42e}', '\u{410}', '\u{411}', '\u{426}', '\u{414}', '\u{415}', '\u{424}', '\u{413}',
123 '\u{425}', '\u{418}', '\u{419}', '\u{41a}', '\u{41b}', '\u{41c}', '\u{41d}', '\u{41e}', '\u{41f}', '\u{42f}',
124 '\u{420}', '\u{421}', '\u{422}', '\u{423}', '\u{416}', '\u{412}', '\u{42c}', '\u{42b}', '\u{417}', '\u{428}',
125 '\u{42d}', '\u{429}', '\u{427}', '\u{42a}',
126 ],
127};
128
129static ISO_8859_2: CodePage = CodePage {
130 name: "ISO-8859-2, Central European",
131 lower: None,
132 upper: [
133 '\u{80}', '\u{81}', '\u{82}', '\u{83}', '\u{84}', '\u{85}', '\u{86}', '\u{87}', '\u{88}', '\u{89}', '\u{8a}',
134 '\u{8b}', '\u{8c}', '\u{8d}', '\u{8e}', '\u{8f}', '\u{90}', '\u{91}', '\u{92}', '\u{93}', '\u{94}', '\u{95}',
135 '\u{96}', '\u{97}', '\u{98}', '\u{99}', '\u{9a}', '\u{9b}', '\u{9c}', '\u{9d}', '\u{9e}', '\u{9f}', '\u{a0}',
136 '\u{104}', '\u{2d8}', '\u{141}', '\u{a4}', '\u{13d}', '\u{15a}', '\u{a7}', '\u{a8}', '\u{160}', '\u{15e}',
137 '\u{164}', '\u{179}', '\u{ad}', '\u{17d}', '\u{17b}', '\u{b0}', '\u{105}', '\u{2db}', '\u{142}', '\u{b4}',
138 '\u{13e}', '\u{15b}', '\u{2c7}', '\u{b8}', '\u{161}', '\u{15f}', '\u{165}', '\u{17a}', '\u{2dd}', '\u{17e}',
139 '\u{17c}', '\u{154}', '\u{c1}', '\u{c2}', '\u{102}', '\u{c4}', '\u{139}', '\u{106}', '\u{c7}', '\u{10c}',
140 '\u{c9}', '\u{118}', '\u{cb}', '\u{11a}', '\u{cd}', '\u{ce}', '\u{10e}', '\u{110}', '\u{143}', '\u{147}',
141 '\u{d3}', '\u{d4}', '\u{150}', '\u{d6}', '\u{d7}', '\u{158}', '\u{16e}', '\u{da}', '\u{170}', '\u{dc}',
142 '\u{dd}', '\u{162}', '\u{df}', '\u{155}', '\u{e1}', '\u{e2}', '\u{103}', '\u{e4}', '\u{13a}', '\u{107}',
143 '\u{e7}', '\u{10d}', '\u{e9}', '\u{119}', '\u{eb}', '\u{11b}', '\u{ed}', '\u{ee}', '\u{10f}', '\u{111}',
144 '\u{144}', '\u{148}', '\u{f3}', '\u{f4}', '\u{151}', '\u{f6}', '\u{f7}', '\u{159}', '\u{16f}', '\u{fa}',
145 '\u{171}', '\u{fc}', '\u{fd}', '\u{163}', '\u{2d9}',
146 ],
147};
148
149static ISO_8859_4: CodePage = CodePage {
150 name: "ISO-8859-4, Baltic",
151 lower: None,
152 upper: [
153 '\u{80}', '\u{81}', '\u{82}', '\u{83}', '\u{84}', '\u{85}', '\u{86}', '\u{87}', '\u{88}', '\u{89}', '\u{8a}',
154 '\u{8b}', '\u{8c}', '\u{8d}', '\u{8e}', '\u{8f}', '\u{90}', '\u{91}', '\u{92}', '\u{93}', '\u{94}', '\u{95}',
155 '\u{96}', '\u{97}', '\u{98}', '\u{99}', '\u{9a}', '\u{9b}', '\u{9c}', '\u{9d}', '\u{9e}', '\u{9f}', '\u{a0}',
156 '\u{104}', '\u{138}', '\u{156}', '\u{a4}', '\u{128}', '\u{13b}', '\u{a7}', '\u{a8}', '\u{160}', '\u{112}',
157 '\u{122}', '\u{166}', '\u{ad}', '\u{17d}', '\u{af}', '\u{b0}', '\u{105}', '\u{2db}', '\u{157}', '\u{b4}',
158 '\u{129}', '\u{13c}', '\u{2c7}', '\u{b8}', '\u{161}', '\u{113}', '\u{123}', '\u{167}', '\u{14a}', '\u{17e}',
159 '\u{14b}', '\u{100}', '\u{c1}', '\u{c2}', '\u{c3}', '\u{c4}', '\u{c5}', '\u{c6}', '\u{12e}', '\u{10c}',
160 '\u{c9}', '\u{118}', '\u{cb}', '\u{116}', '\u{cd}', '\u{ce}', '\u{12a}', '\u{110}', '\u{145}', '\u{14c}',
161 '\u{136}', '\u{d4}', '\u{d5}', '\u{d6}', '\u{d7}', '\u{d8}', '\u{172}', '\u{da}', '\u{db}', '\u{dc}',
162 '\u{168}', '\u{16a}', '\u{df}', '\u{101}', '\u{e1}', '\u{e2}', '\u{e3}', '\u{e4}', '\u{e5}', '\u{e6}',
163 '\u{12f}', '\u{10d}', '\u{e9}', '\u{119}', '\u{eb}', '\u{117}', '\u{ed}', '\u{ee}', '\u{12b}', '\u{111}',
164 '\u{146}', '\u{14d}', '\u{137}', '\u{f4}', '\u{f5}', '\u{f6}', '\u{f7}', '\u{f8}', '\u{173}', '\u{fa}',
165 '\u{fb}', '\u{fc}', '\u{169}', '\u{16b}', '\u{2d9}',
166 ],
167};
168
169static CP866: CodePage = CodePage {
170 name: "CP866, Russian",
171 lower: None,
172 upper: [
173 '\u{410}', '\u{411}', '\u{412}', '\u{413}', '\u{414}', '\u{415}', '\u{416}', '\u{417}', '\u{418}', '\u{419}',
174 '\u{41a}', '\u{41b}', '\u{41c}', '\u{41d}', '\u{41e}', '\u{41f}', '\u{420}', '\u{421}', '\u{422}', '\u{423}',
175 '\u{424}', '\u{425}', '\u{426}', '\u{427}', '\u{428}', '\u{429}', '\u{42a}', '\u{42b}', '\u{42c}', '\u{42d}',
176 '\u{42e}', '\u{42f}', '\u{430}', '\u{431}', '\u{432}', '\u{433}', '\u{434}', '\u{435}', '\u{436}', '\u{437}',
177 '\u{438}', '\u{439}', '\u{43a}', '\u{43b}', '\u{43c}', '\u{43d}', '\u{43e}', '\u{43f}', '\u{2591}', '\u{2592}',
178 '\u{2593}', '\u{2502}', '\u{2524}', '\u{2561}', '\u{2562}', '\u{2556}', '\u{2555}', '\u{2563}', '\u{2551}',
179 '\u{2557}', '\u{255d}', '\u{255c}', '\u{255b}', '\u{2510}', '\u{2514}', '\u{2534}', '\u{252c}', '\u{251c}',
180 '\u{2500}', '\u{253c}', '\u{255e}', '\u{255f}', '\u{255a}', '\u{2554}', '\u{2569}', '\u{2566}', '\u{2560}',
181 '\u{2550}', '\u{256c}', '\u{2567}', '\u{2568}', '\u{2564}', '\u{2565}', '\u{2559}', '\u{2558}', '\u{2552}',
182 '\u{2553}', '\u{256b}', '\u{256a}', '\u{2518}', '\u{250c}', '\u{2588}', '\u{2584}', '\u{258c}', '\u{2590}',
183 '\u{2580}', '\u{440}', '\u{441}', '\u{442}', '\u{443}', '\u{444}', '\u{445}', '\u{446}', '\u{447}', '\u{448}',
184 '\u{449}', '\u{44a}', '\u{44b}', '\u{44c}', '\u{44d}', '\u{44e}', '\u{44f}', '\u{401}', '\u{451}', '\u{404}',
185 '\u{454}', '\u{407}', '\u{457}', '\u{40e}', '\u{45e}', '\u{b0}', '\u{2219}', '\u{b7}', '\u{221a}', '\u{2116}',
186 '\u{a4}', '\u{25a0}', '\u{a0}',
187 ],
188};
189
190static ISO_8859_9: CodePage = CodePage {
191 name: "ISO-8859-9, Turkish",
192 lower: None,
193 upper: [
194 '\u{80}', '\u{81}', '\u{82}', '\u{83}', '\u{84}', '\u{85}', '\u{86}', '\u{87}', '\u{88}', '\u{89}', '\u{8a}',
195 '\u{8b}', '\u{8c}', '\u{8d}', '\u{8e}', '\u{8f}', '\u{90}', '\u{91}', '\u{92}', '\u{93}', '\u{94}', '\u{95}',
196 '\u{96}', '\u{97}', '\u{98}', '\u{99}', '\u{9a}', '\u{9b}', '\u{9c}', '\u{9d}', '\u{9e}', '\u{9f}', '\u{a0}',
197 '\u{a1}', '\u{a2}', '\u{a3}', '\u{a4}', '\u{a5}', '\u{a6}', '\u{a7}', '\u{a8}', '\u{a9}', '\u{aa}', '\u{ab}',
198 '\u{ac}', '\u{ad}', '\u{ae}', '\u{af}', '\u{b0}', '\u{b1}', '\u{b2}', '\u{b3}', '\u{b4}', '\u{b5}', '\u{b6}',
199 '\u{b7}', '\u{b8}', '\u{b9}', '\u{ba}', '\u{bb}', '\u{bc}', '\u{bd}', '\u{be}', '\u{bf}', '\u{c0}', '\u{c1}',
200 '\u{c2}', '\u{c3}', '\u{c4}', '\u{c5}', '\u{c6}', '\u{c7}', '\u{c8}', '\u{c9}', '\u{ca}', '\u{cb}', '\u{cc}',
201 '\u{cd}', '\u{ce}', '\u{cf}', '\u{11e}', '\u{d1}', '\u{d2}', '\u{d3}', '\u{d4}', '\u{d5}', '\u{d6}', '\u{d7}',
202 '\u{d8}', '\u{d9}', '\u{da}', '\u{db}', '\u{dc}', '\u{130}', '\u{15e}', '\u{df}', '\u{e0}', '\u{e1}', '\u{e2}',
203 '\u{e3}', '\u{e4}', '\u{e5}', '\u{e6}', '\u{e7}', '\u{e8}', '\u{e9}', '\u{ea}', '\u{eb}', '\u{ec}', '\u{ed}',
204 '\u{ee}', '\u{ef}', '\u{11f}', '\u{f1}', '\u{f2}', '\u{f3}', '\u{f4}', '\u{f5}', '\u{f6}', '\u{f7}', '\u{f8}',
205 '\u{f9}', '\u{fa}', '\u{fb}', '\u{fc}', '\u{131}', '\u{15f}', '\u{ff}',
206 ],
207};
208
209static ISO_8859_8: CodePage = CodePage {
210 name: "ISO-8859-8, Hebrew",
211 lower: None,
212 upper: [
213 '\u{80}', '\u{81}', '\u{82}', '\u{83}', '\u{84}', '\u{85}', '\u{86}', '\u{87}', '\u{88}', '\u{89}', '\u{8a}',
214 '\u{8b}', '\u{8c}', '\u{8d}', '\u{8e}', '\u{8f}', '\u{90}', '\u{91}', '\u{92}', '\u{93}', '\u{94}', '\u{95}',
215 '\u{96}', '\u{97}', '\u{98}', '\u{99}', '\u{9a}', '\u{9b}', '\u{9c}', '\u{9d}', '\u{9e}', '\u{9f}', '\u{a0}',
216 '\u{fffd}', '\u{a2}', '\u{a3}', '\u{a4}', '\u{a5}', '\u{a6}', '\u{a7}', '\u{a8}', '\u{a9}', '\u{d7}', '\u{ab}',
217 '\u{ac}', '\u{ad}', '\u{ae}', '\u{af}', '\u{b0}', '\u{b1}', '\u{b2}', '\u{b3}', '\u{b4}', '\u{b5}', '\u{b6}',
218 '\u{b7}', '\u{b8}', '\u{b9}', '\u{f7}', '\u{bb}', '\u{bc}', '\u{bd}', '\u{be}', '\u{fffd}', '\u{fffd}',
219 '\u{fffd}', '\u{fffd}', '\u{fffd}', '\u{fffd}', '\u{fffd}', '\u{fffd}', '\u{fffd}', '\u{fffd}', '\u{fffd}',
220 '\u{fffd}', '\u{fffd}', '\u{fffd}', '\u{fffd}', '\u{fffd}', '\u{fffd}', '\u{fffd}', '\u{fffd}', '\u{fffd}',
221 '\u{fffd}', '\u{fffd}', '\u{fffd}', '\u{fffd}', '\u{fffd}', '\u{fffd}', '\u{fffd}', '\u{fffd}', '\u{fffd}',
222 '\u{fffd}', '\u{fffd}', '\u{fffd}', '\u{2017}', '\u{5d0}', '\u{5d1}', '\u{5d2}', '\u{5d3}', '\u{5d4}',
223 '\u{5d5}', '\u{5d6}', '\u{5d7}', '\u{5d8}', '\u{5d9}', '\u{5da}', '\u{5db}', '\u{5dc}', '\u{5dd}', '\u{5de}',
224 '\u{5df}', '\u{5e0}', '\u{5e1}', '\u{5e2}', '\u{5e3}', '\u{5e4}', '\u{5e5}', '\u{5e6}', '\u{5e7}', '\u{5e8}',
225 '\u{5e9}', '\u{5ea}', '\u{fffd}', '\u{fffd}', '\u{200e}', '\u{200f}', '\u{fffd}',
226 ],
227};
228
229static KOI8_U: CodePage = CodePage {
230 name: "KOI8-U, Ukrainian",
231 lower: None,
232 upper: [
233 '\u{2500}', '\u{2502}', '\u{250c}', '\u{2510}', '\u{2514}', '\u{2518}', '\u{251c}', '\u{2524}', '\u{252c}',
234 '\u{2534}', '\u{253c}', '\u{2580}', '\u{2584}', '\u{2588}', '\u{258c}', '\u{2590}', '\u{2591}', '\u{2592}',
235 '\u{2593}', '\u{2320}', '\u{25a0}', '\u{2219}', '\u{221a}', '\u{2248}', '\u{2264}', '\u{2265}', '\u{a0}',
236 '\u{2321}', '\u{b0}', '\u{b2}', '\u{b7}', '\u{f7}', '\u{2550}', '\u{2551}', '\u{2552}', '\u{451}', '\u{454}',
237 '\u{2554}', '\u{456}', '\u{457}', '\u{2557}', '\u{2558}', '\u{2559}', '\u{255a}', '\u{255b}', '\u{491}',
238 '\u{255d}', '\u{255e}', '\u{255f}', '\u{2560}', '\u{2561}', '\u{401}', '\u{404}', '\u{2563}', '\u{406}',
239 '\u{407}', '\u{2566}', '\u{2567}', '\u{2568}', '\u{2569}', '\u{256a}', '\u{490}', '\u{256c}', '\u{a9}',
240 '\u{44e}', '\u{430}', '\u{431}', '\u{446}', '\u{434}', '\u{435}', '\u{444}', '\u{433}', '\u{445}', '\u{438}',
241 '\u{439}', '\u{43a}', '\u{43b}', '\u{43c}', '\u{43d}', '\u{43e}', '\u{43f}', '\u{44f}', '\u{440}', '\u{441}',
242 '\u{442}', '\u{443}', '\u{436}', '\u{432}', '\u{44c}', '\u{44b}', '\u{437}', '\u{448}', '\u{44d}', '\u{449}',
243 '\u{447}', '\u{44a}', '\u{42e}', '\u{410}', '\u{411}', '\u{426}', '\u{414}', '\u{415}', '\u{424}', '\u{413}',
244 '\u{425}', '\u{418}', '\u{419}', '\u{41a}', '\u{41b}', '\u{41c}', '\u{41d}', '\u{41e}', '\u{41f}', '\u{42f}',
245 '\u{420}', '\u{421}', '\u{422}', '\u{423}', '\u{416}', '\u{412}', '\u{42c}', '\u{42b}', '\u{417}', '\u{428}',
246 '\u{42d}', '\u{429}', '\u{427}', '\u{42a}',
247 ],
248};
249
250static ISO_8859_15: CodePage = CodePage {
251 name: "ISO-8859-15, West European",
252 lower: None,
253 upper: [
254 '\u{80}', '\u{81}', '\u{82}', '\u{83}', '\u{84}', '\u{85}', '\u{86}', '\u{87}', '\u{88}', '\u{89}', '\u{8a}',
255 '\u{8b}', '\u{8c}', '\u{8d}', '\u{8e}', '\u{8f}', '\u{90}', '\u{91}', '\u{92}', '\u{93}', '\u{94}', '\u{95}',
256 '\u{96}', '\u{97}', '\u{98}', '\u{99}', '\u{9a}', '\u{9b}', '\u{9c}', '\u{9d}', '\u{9e}', '\u{9f}', '\u{a0}',
257 '\u{a1}', '\u{a2}', '\u{a3}', '\u{20ac}', '\u{a5}', '\u{160}', '\u{a7}', '\u{161}', '\u{a9}', '\u{aa}',
258 '\u{ab}', '\u{ac}', '\u{ad}', '\u{ae}', '\u{af}', '\u{b0}', '\u{b1}', '\u{b2}', '\u{b3}', '\u{17d}', '\u{b5}',
259 '\u{b6}', '\u{b7}', '\u{17e}', '\u{b9}', '\u{ba}', '\u{bb}', '\u{152}', '\u{153}', '\u{178}', '\u{bf}',
260 '\u{c0}', '\u{c1}', '\u{c2}', '\u{c3}', '\u{c4}', '\u{c5}', '\u{c6}', '\u{c7}', '\u{c8}', '\u{c9}', '\u{ca}',
261 '\u{cb}', '\u{cc}', '\u{cd}', '\u{ce}', '\u{cf}', '\u{d0}', '\u{d1}', '\u{d2}', '\u{d3}', '\u{d4}', '\u{d5}',
262 '\u{d6}', '\u{d7}', '\u{d8}', '\u{d9}', '\u{da}', '\u{db}', '\u{dc}', '\u{dd}', '\u{de}', '\u{df}', '\u{e0}',
263 '\u{e1}', '\u{e2}', '\u{e3}', '\u{e4}', '\u{e5}', '\u{e6}', '\u{e7}', '\u{e8}', '\u{e9}', '\u{ea}', '\u{eb}',
264 '\u{ec}', '\u{ed}', '\u{ee}', '\u{ef}', '\u{f0}', '\u{f1}', '\u{f2}', '\u{f3}', '\u{f4}', '\u{f5}', '\u{f6}',
265 '\u{f7}', '\u{f8}', '\u{f9}', '\u{fa}', '\u{fb}', '\u{fc}', '\u{fd}', '\u{fe}', '\u{ff}',
266 ],
267};
268
269static ISO_8859_5: CodePage = CodePage {
270 name: "ISO-8859-5, Cyrillic",
271 lower: None,
272 upper: [
273 '\u{80}', '\u{81}', '\u{82}', '\u{83}', '\u{84}', '\u{85}', '\u{86}', '\u{87}', '\u{88}', '\u{89}', '\u{8a}',
274 '\u{8b}', '\u{8c}', '\u{8d}', '\u{8e}', '\u{8f}', '\u{90}', '\u{91}', '\u{92}', '\u{93}', '\u{94}', '\u{95}',
275 '\u{96}', '\u{97}', '\u{98}', '\u{99}', '\u{9a}', '\u{9b}', '\u{9c}', '\u{9d}', '\u{9e}', '\u{9f}', '\u{a0}',
276 '\u{401}', '\u{402}', '\u{403}', '\u{404}', '\u{405}', '\u{406}', '\u{407}', '\u{408}', '\u{409}', '\u{40a}',
277 '\u{40b}', '\u{40c}', '\u{ad}', '\u{40e}', '\u{40f}', '\u{410}', '\u{411}', '\u{412}', '\u{413}', '\u{414}',
278 '\u{415}', '\u{416}', '\u{417}', '\u{418}', '\u{419}', '\u{41a}', '\u{41b}', '\u{41c}', '\u{41d}', '\u{41e}',
279 '\u{41f}', '\u{420}', '\u{421}', '\u{422}', '\u{423}', '\u{424}', '\u{425}', '\u{426}', '\u{427}', '\u{428}',
280 '\u{429}', '\u{42a}', '\u{42b}', '\u{42c}', '\u{42d}', '\u{42e}', '\u{42f}', '\u{430}', '\u{431}', '\u{432}',
281 '\u{433}', '\u{434}', '\u{435}', '\u{436}', '\u{437}', '\u{438}', '\u{439}', '\u{43a}', '\u{43b}', '\u{43c}',
282 '\u{43d}', '\u{43e}', '\u{43f}', '\u{440}', '\u{441}', '\u{442}', '\u{443}', '\u{444}', '\u{445}', '\u{446}',
283 '\u{447}', '\u{448}', '\u{449}', '\u{44a}', '\u{44b}', '\u{44c}', '\u{44d}', '\u{44e}', '\u{44f}', '\u{2116}',
284 '\u{451}', '\u{452}', '\u{453}', '\u{454}', '\u{455}', '\u{456}', '\u{457}', '\u{458}', '\u{459}', '\u{45a}',
285 '\u{45b}', '\u{45c}', '\u{a7}', '\u{45e}', '\u{45f}',
286 ],
287};
288
289static CP850: CodePage = CodePage {
290 name: "CP850, Latin I",
291 lower: None,
292 upper: [
293 '\u{c7}', '\u{fc}', '\u{e9}', '\u{e2}', '\u{e4}', '\u{e0}', '\u{e5}', '\u{e7}', '\u{ea}', '\u{eb}', '\u{e8}',
294 '\u{ef}', '\u{ee}', '\u{ec}', '\u{c4}', '\u{c5}', '\u{c9}', '\u{e6}', '\u{c6}', '\u{f4}', '\u{f6}', '\u{f2}',
295 '\u{fb}', '\u{f9}', '\u{ff}', '\u{d6}', '\u{dc}', '\u{f8}', '\u{a3}', '\u{d8}', '\u{d7}', '\u{192}', '\u{e1}',
296 '\u{ed}', '\u{f3}', '\u{fa}', '\u{f1}', '\u{d1}', '\u{aa}', '\u{ba}', '\u{bf}', '\u{ae}', '\u{ac}', '\u{bd}',
297 '\u{bc}', '\u{a1}', '\u{ab}', '\u{bb}', '\u{2591}', '\u{2592}', '\u{2593}', '\u{2502}', '\u{2524}', '\u{c1}',
298 '\u{c2}', '\u{c0}', '\u{a9}', '\u{2563}', '\u{2551}', '\u{2557}', '\u{255d}', '\u{a2}', '\u{a5}', '\u{2510}',
299 '\u{2514}', '\u{2534}', '\u{252c}', '\u{251c}', '\u{2500}', '\u{253c}', '\u{e3}', '\u{c3}', '\u{255a}',
300 '\u{2554}', '\u{2569}', '\u{2566}', '\u{2560}', '\u{2550}', '\u{256c}', '\u{a4}', '\u{f0}', '\u{d0}', '\u{ca}',
301 '\u{cb}', '\u{c8}', '\u{131}', '\u{cd}', '\u{ce}', '\u{cf}', '\u{2518}', '\u{250c}', '\u{2588}', '\u{2584}',
302 '\u{a6}', '\u{cc}', '\u{2580}', '\u{d3}', '\u{df}', '\u{d4}', '\u{d2}', '\u{f5}', '\u{d5}', '\u{b5}', '\u{fe}',
303 '\u{de}', '\u{da}', '\u{db}', '\u{d9}', '\u{fd}', '\u{dd}', '\u{af}', '\u{b4}', '\u{ad}', '\u{b1}', '\u{2017}',
304 '\u{be}', '\u{b6}', '\u{a7}', '\u{f7}', '\u{b8}', '\u{b0}', '\u{a8}', '\u{b7}', '\u{b9}', '\u{b3}', '\u{b2}',
305 '\u{25a0}', '\u{a0}',
306 ],
307};
308
309static CP865: CodePage = CodePage {
310 name: "CP865, Nordic",
311 lower: None,
312 upper: [
313 '\u{c7}', '\u{fc}', '\u{e9}', '\u{e2}', '\u{e4}', '\u{e0}', '\u{e5}', '\u{e7}', '\u{ea}', '\u{eb}', '\u{e8}',
314 '\u{ef}', '\u{ee}', '\u{ec}', '\u{c4}', '\u{c5}', '\u{c9}', '\u{e6}', '\u{c6}', '\u{f4}', '\u{f6}', '\u{f2}',
315 '\u{fb}', '\u{f9}', '\u{ff}', '\u{d6}', '\u{dc}', '\u{f8}', '\u{a3}', '\u{d8}', '\u{20a7}', '\u{192}',
316 '\u{e1}', '\u{ed}', '\u{f3}', '\u{fa}', '\u{f1}', '\u{d1}', '\u{aa}', '\u{ba}', '\u{bf}', '\u{2310}', '\u{ac}',
317 '\u{bd}', '\u{bc}', '\u{a1}', '\u{ab}', '\u{a4}', '\u{2591}', '\u{2592}', '\u{2593}', '\u{2502}', '\u{2524}',
318 '\u{2561}', '\u{2562}', '\u{2556}', '\u{2555}', '\u{2563}', '\u{2551}', '\u{2557}', '\u{255d}', '\u{255c}',
319 '\u{255b}', '\u{2510}', '\u{2514}', '\u{2534}', '\u{252c}', '\u{251c}', '\u{2500}', '\u{253c}', '\u{255e}',
320 '\u{255f}', '\u{255a}', '\u{2554}', '\u{2569}', '\u{2566}', '\u{2560}', '\u{2550}', '\u{256c}', '\u{2567}',
321 '\u{2568}', '\u{2564}', '\u{2565}', '\u{2559}', '\u{2558}', '\u{2552}', '\u{2553}', '\u{256b}', '\u{256a}',
322 '\u{2518}', '\u{250c}', '\u{2588}', '\u{2584}', '\u{258c}', '\u{2590}', '\u{2580}', '\u{3b1}', '\u{df}',
323 '\u{393}', '\u{3c0}', '\u{3a3}', '\u{3c3}', '\u{b5}', '\u{3c4}', '\u{3a6}', '\u{398}', '\u{3a9}', '\u{3b4}',
324 '\u{221e}', '\u{3c6}', '\u{3b5}', '\u{2229}', '\u{2261}', '\u{b1}', '\u{2265}', '\u{2264}', '\u{2320}',
325 '\u{2321}', '\u{f7}', '\u{2248}', '\u{b0}', '\u{2219}', '\u{b7}', '\u{221a}', '\u{207f}', '\u{b2}', '\u{25a0}',
326 '\u{a0}',
327 ],
328};
329
330static ISO_8859_7: CodePage = CodePage {
331 name: "ISO-8859-7, Greek",
332 lower: None,
333 upper: [
334 '\u{80}', '\u{81}', '\u{82}', '\u{83}', '\u{84}', '\u{85}', '\u{86}', '\u{87}', '\u{88}', '\u{89}', '\u{8a}',
335 '\u{8b}', '\u{8c}', '\u{8d}', '\u{8e}', '\u{8f}', '\u{90}', '\u{91}', '\u{92}', '\u{93}', '\u{94}', '\u{95}',
336 '\u{96}', '\u{97}', '\u{98}', '\u{99}', '\u{9a}', '\u{9b}', '\u{9c}', '\u{9d}', '\u{9e}', '\u{9f}', '\u{a0}',
337 '\u{2018}', '\u{2019}', '\u{a3}', '\u{20ac}', '\u{20af}', '\u{a6}', '\u{a7}', '\u{a8}', '\u{a9}', '\u{37a}',
338 '\u{ab}', '\u{ac}', '\u{ad}', '\u{fffd}', '\u{2015}', '\u{b0}', '\u{b1}', '\u{b2}', '\u{b3}', '\u{384}',
339 '\u{385}', '\u{386}', '\u{b7}', '\u{388}', '\u{389}', '\u{38a}', '\u{bb}', '\u{38c}', '\u{bd}', '\u{38e}',
340 '\u{38f}', '\u{390}', '\u{391}', '\u{392}', '\u{393}', '\u{394}', '\u{395}', '\u{396}', '\u{397}', '\u{398}',
341 '\u{399}', '\u{39a}', '\u{39b}', '\u{39c}', '\u{39d}', '\u{39e}', '\u{39f}', '\u{3a0}', '\u{3a1}', '\u{fffd}',
342 '\u{3a3}', '\u{3a4}', '\u{3a5}', '\u{3a6}', '\u{3a7}', '\u{3a8}', '\u{3a9}', '\u{3aa}', '\u{3ab}', '\u{3ac}',
343 '\u{3ad}', '\u{3ae}', '\u{3af}', '\u{3b0}', '\u{3b1}', '\u{3b2}', '\u{3b3}', '\u{3b4}', '\u{3b5}', '\u{3b6}',
344 '\u{3b7}', '\u{3b8}', '\u{3b9}', '\u{3ba}', '\u{3bb}', '\u{3bc}', '\u{3bd}', '\u{3be}', '\u{3bf}', '\u{3c0}',
345 '\u{3c1}', '\u{3c2}', '\u{3c3}', '\u{3c4}', '\u{3c5}', '\u{3c6}', '\u{3c7}', '\u{3c8}', '\u{3c9}', '\u{3ca}',
346 '\u{3cb}', '\u{3cc}', '\u{3cd}', '\u{3ce}', '\u{fffd}',
347 ],
348};
349
350static ISO_8859_1: CodePage = CodePage {
351 name: "ISO-8859-1, West European",
352 lower: None,
353 upper: [
354 '\u{80}', '\u{81}', '\u{82}', '\u{83}', '\u{84}', '\u{85}', '\u{86}', '\u{87}', '\u{88}', '\u{89}', '\u{8a}',
355 '\u{8b}', '\u{8c}', '\u{8d}', '\u{8e}', '\u{8f}', '\u{90}', '\u{91}', '\u{92}', '\u{93}', '\u{94}', '\u{95}',
356 '\u{96}', '\u{97}', '\u{98}', '\u{99}', '\u{9a}', '\u{9b}', '\u{9c}', '\u{9d}', '\u{9e}', '\u{9f}', '\u{a0}',
357 '\u{a1}', '\u{a2}', '\u{a3}', '\u{a4}', '\u{a5}', '\u{a6}', '\u{a7}', '\u{a8}', '\u{a9}', '\u{aa}', '\u{ab}',
358 '\u{ac}', '\u{ad}', '\u{ae}', '\u{af}', '\u{b0}', '\u{b1}', '\u{b2}', '\u{b3}', '\u{b4}', '\u{b5}', '\u{b6}',
359 '\u{b7}', '\u{b8}', '\u{b9}', '\u{ba}', '\u{bb}', '\u{bc}', '\u{bd}', '\u{be}', '\u{bf}', '\u{c0}', '\u{c1}',
360 '\u{c2}', '\u{c3}', '\u{c4}', '\u{c5}', '\u{c6}', '\u{c7}', '\u{c8}', '\u{c9}', '\u{ca}', '\u{cb}', '\u{cc}',
361 '\u{cd}', '\u{ce}', '\u{cf}', '\u{d0}', '\u{d1}', '\u{d2}', '\u{d3}', '\u{d4}', '\u{d5}', '\u{d6}', '\u{d7}',
362 '\u{d8}', '\u{d9}', '\u{da}', '\u{db}', '\u{dc}', '\u{dd}', '\u{de}', '\u{df}', '\u{e0}', '\u{e1}', '\u{e2}',
363 '\u{e3}', '\u{e4}', '\u{e5}', '\u{e6}', '\u{e7}', '\u{e8}', '\u{e9}', '\u{ea}', '\u{eb}', '\u{ec}', '\u{ed}',
364 '\u{ee}', '\u{ef}', '\u{f0}', '\u{f1}', '\u{f2}', '\u{f3}', '\u{f4}', '\u{f5}', '\u{f6}', '\u{f7}', '\u{f8}',
365 '\u{f9}', '\u{fa}', '\u{fb}', '\u{fc}', '\u{fd}', '\u{fe}', '\u{ff}',
366 ],
367};
368
369static CP866U: CodePage = CodePage {
370 name: "CP866U (CP1125), Ukrainian",
371 lower: None,
372 upper: [
373 '\u{410}', '\u{411}', '\u{412}', '\u{413}', '\u{414}', '\u{415}', '\u{416}', '\u{417}', '\u{418}', '\u{419}',
374 '\u{41a}', '\u{41b}', '\u{41c}', '\u{41d}', '\u{41e}', '\u{41f}', '\u{420}', '\u{421}', '\u{422}', '\u{423}',
375 '\u{424}', '\u{425}', '\u{426}', '\u{427}', '\u{428}', '\u{429}', '\u{42a}', '\u{42b}', '\u{42c}', '\u{42d}',
376 '\u{42e}', '\u{42f}', '\u{430}', '\u{431}', '\u{432}', '\u{433}', '\u{434}', '\u{435}', '\u{436}', '\u{437}',
377 '\u{438}', '\u{439}', '\u{43a}', '\u{43b}', '\u{43c}', '\u{43d}', '\u{43e}', '\u{43f}', '\u{2591}', '\u{2592}',
378 '\u{2593}', '\u{2502}', '\u{2524}', '\u{2561}', '\u{2562}', '\u{2556}', '\u{2555}', '\u{2563}', '\u{2551}',
379 '\u{2557}', '\u{255d}', '\u{255c}', '\u{255b}', '\u{2510}', '\u{2514}', '\u{2534}', '\u{252c}', '\u{251c}',
380 '\u{2500}', '\u{253c}', '\u{255e}', '\u{255f}', '\u{255a}', '\u{2554}', '\u{2569}', '\u{2566}', '\u{2560}',
381 '\u{2550}', '\u{256c}', '\u{2567}', '\u{2568}', '\u{2564}', '\u{2565}', '\u{2559}', '\u{2558}', '\u{2552}',
382 '\u{2553}', '\u{256b}', '\u{256a}', '\u{2518}', '\u{250c}', '\u{2588}', '\u{2584}', '\u{258c}', '\u{2590}',
383 '\u{2580}', '\u{440}', '\u{441}', '\u{442}', '\u{443}', '\u{444}', '\u{445}', '\u{446}', '\u{447}', '\u{448}',
384 '\u{449}', '\u{44a}', '\u{44b}', '\u{44c}', '\u{44d}', '\u{44e}', '\u{44f}', '\u{401}', '\u{451}', '\u{490}',
385 '\u{491}', '\u{404}', '\u{454}', '\u{406}', '\u{456}', '\u{407}', '\u{457}', '\u{b7}', '\u{221a}', '\u{2116}',
386 '\u{a4}', '\u{25a0}', '\u{a0}',
387 ],
388};
389
390static HAIK8: CodePage = CodePage {
391 name: "haik8, Armenian",
392 lower: None,
393 upper: [
394 '\u{a0}', '\u{58e}', '\u{a7}', '\u{589}', '\u{29}', '\u{2a}', '\u{bb}', '\u{ab}', '\u{2014}', '\u{2e}',
395 '\u{55d}', '\u{2c}', '\u{2013}', '\u{58a}', '\u{2026}', '\u{55c}', '\u{55b}', '\u{55e}', '\u{531}', '\u{561}',
396 '\u{532}', '\u{562}', '\u{533}', '\u{563}', '\u{534}', '\u{564}', '\u{535}', '\u{565}', '\u{536}', '\u{566}',
397 '\u{537}', '\u{567}', '\u{538}', '\u{568}', '\u{539}', '\u{569}', '\u{53a}', '\u{56a}', '\u{53b}', '\u{56b}',
398 '\u{53c}', '\u{56c}', '\u{53d}', '\u{56d}', '\u{53e}', '\u{56e}', '\u{53f}', '\u{56f}', '\u{540}', '\u{570}',
399 '\u{541}', '\u{571}', '\u{542}', '\u{572}', '\u{543}', '\u{573}', '\u{544}', '\u{574}', '\u{545}', '\u{575}',
400 '\u{546}', '\u{576}', '\u{547}', '\u{577}', '\u{2514}', '\u{2534}', '\u{252c}', '\u{251c}', '\u{2500}',
401 '\u{253c}', '\u{255e}', '\u{255f}', '\u{255a}', '\u{2554}', '\u{2569}', '\u{2566}', '\u{2560}', '\u{2550}',
402 '\u{256c}', '\u{2567}', '\u{2568}', '\u{2564}', '\u{2565}', '\u{2559}', '\u{2558}', '\u{2552}', '\u{2553}',
403 '\u{256b}', '\u{256a}', '\u{2518}', '\u{250c}', '\u{2588}', '\u{2584}', '\u{258c}', '\u{2590}', '\u{2580}',
404 '\u{548}', '\u{578}', '\u{549}', '\u{579}', '\u{54a}', '\u{57a}', '\u{54b}', '\u{57b}', '\u{54c}', '\u{57c}',
405 '\u{54d}', '\u{57d}', '\u{54e}', '\u{57e}', '\u{54f}', '\u{57f}', '\u{550}', '\u{580}', '\u{551}', '\u{581}',
406 '\u{552}', '\u{582}', '\u{553}', '\u{583}', '\u{554}', '\u{584}', '\u{555}', '\u{585}', '\u{556}', '\u{586}',
407 '\u{2bc}', '\u{a0}',
408 ],
409};
410
411static ARMSCII_8: CodePage = CodePage {
412 name: "ARMSCII-8, Armenian",
413 lower: None,
414 upper: [
415 '\u{c7}', '\u{fc}', '\u{e9}', '\u{e2}', '\u{e4}', '\u{e0}', '\u{e5}', '\u{e7}', '\u{ea}', '\u{eb}', '\u{e8}',
416 '\u{ef}', '\u{ee}', '\u{ec}', '\u{c4}', '\u{c5}', '\u{c9}', '\u{e6}', '\u{c6}', '\u{f4}', '\u{f6}', '\u{f2}',
417 '\u{fb}', '\u{f9}', '\u{ff}', '\u{d6}', '\u{dc}', '\u{a2}', '\u{a3}', '\u{a5}', '\u{20a7}', '\u{192}',
418 '\u{a0}', '\u{58e}', '\u{a7}', '\u{589}', '\u{29}', '\u{2a}', '\u{bb}', '\u{ab}', '\u{2014}', '\u{2e}',
419 '\u{55d}', '\u{2c}', '\u{2013}', '\u{58a}', '\u{2026}', '\u{55c}', '\u{55b}', '\u{55e}', '\u{531}', '\u{561}',
420 '\u{532}', '\u{562}', '\u{533}', '\u{563}', '\u{534}', '\u{564}', '\u{535}', '\u{565}', '\u{536}', '\u{566}',
421 '\u{537}', '\u{567}', '\u{538}', '\u{568}', '\u{539}', '\u{569}', '\u{53a}', '\u{56a}', '\u{53b}', '\u{56b}',
422 '\u{53c}', '\u{56c}', '\u{53d}', '\u{56d}', '\u{53e}', '\u{56e}', '\u{53f}', '\u{56f}', '\u{540}', '\u{570}',
423 '\u{541}', '\u{571}', '\u{542}', '\u{572}', '\u{543}', '\u{573}', '\u{544}', '\u{574}', '\u{545}', '\u{575}',
424 '\u{546}', '\u{576}', '\u{547}', '\u{577}', '\u{548}', '\u{578}', '\u{549}', '\u{579}', '\u{54a}', '\u{57a}',
425 '\u{54b}', '\u{57b}', '\u{54c}', '\u{57c}', '\u{54d}', '\u{57d}', '\u{54e}', '\u{57e}', '\u{54f}', '\u{57f}',
426 '\u{550}', '\u{580}', '\u{551}', '\u{581}', '\u{552}', '\u{582}', '\u{553}', '\u{583}', '\u{554}', '\u{584}',
427 '\u{555}', '\u{585}', '\u{556}', '\u{586}', '\u{2bc}', '\u{a0}',
428 ],
429};
430
431static CP1131: CodePage = CodePage {
432 name: "CP1131, Belarusian",
433 lower: None,
434 upper: [
435 '\u{410}', '\u{411}', '\u{412}', '\u{413}', '\u{414}', '\u{415}', '\u{416}', '\u{417}', '\u{418}', '\u{419}',
436 '\u{41a}', '\u{41b}', '\u{41c}', '\u{41d}', '\u{41e}', '\u{41f}', '\u{420}', '\u{421}', '\u{422}', '\u{423}',
437 '\u{424}', '\u{425}', '\u{426}', '\u{427}', '\u{428}', '\u{429}', '\u{42a}', '\u{42b}', '\u{42c}', '\u{42d}',
438 '\u{42e}', '\u{42f}', '\u{430}', '\u{431}', '\u{432}', '\u{433}', '\u{434}', '\u{435}', '\u{436}', '\u{437}',
439 '\u{438}', '\u{439}', '\u{43a}', '\u{43b}', '\u{43c}', '\u{43d}', '\u{43e}', '\u{43f}', '\u{2591}', '\u{2592}',
440 '\u{2593}', '\u{2502}', '\u{2524}', '\u{2561}', '\u{2562}', '\u{2556}', '\u{2555}', '\u{2563}', '\u{2551}',
441 '\u{2557}', '\u{255d}', '\u{255c}', '\u{255b}', '\u{2510}', '\u{2514}', '\u{2534}', '\u{252c}', '\u{251c}',
442 '\u{2500}', '\u{253c}', '\u{255e}', '\u{255f}', '\u{255a}', '\u{2554}', '\u{2569}', '\u{2566}', '\u{2560}',
443 '\u{2550}', '\u{256c}', '\u{2567}', '\u{2568}', '\u{2564}', '\u{2565}', '\u{2559}', '\u{2558}', '\u{2552}',
444 '\u{2553}', '\u{256b}', '\u{256a}', '\u{2518}', '\u{250c}', '\u{2588}', '\u{2584}', '\u{258c}', '\u{2590}',
445 '\u{2580}', '\u{440}', '\u{441}', '\u{442}', '\u{443}', '\u{444}', '\u{445}', '\u{446}', '\u{447}', '\u{448}',
446 '\u{449}', '\u{44a}', '\u{44b}', '\u{44c}', '\u{44d}', '\u{44e}', '\u{44f}', '\u{401}', '\u{451}', '\u{404}',
447 '\u{454}', '\u{407}', '\u{457}', '\u{40e}', '\u{45e}', '\u{406}', '\u{456}', '\u{b7}', '\u{221a}', '\u{490}',
448 '\u{491}', '\u{2219}', '\u{a0}',
449 ],
450};
451
452static C64_UPPER: CodePage = CodePage {
455 name: "Commodore 64, upper case and graphics",
456 lower: Some([
457 '\u{40}',
458 '\u{41}',
459 '\u{42}',
460 '\u{43}',
461 '\u{44}',
462 '\u{45}',
463 '\u{46}',
464 '\u{47}',
465 '\u{48}',
466 '\u{49}',
467 '\u{4a}',
468 '\u{4b}',
469 '\u{4c}',
470 '\u{4d}',
471 '\u{4e}',
472 '\u{4f}',
473 '\u{50}',
474 '\u{51}',
475 '\u{52}',
476 '\u{53}',
477 '\u{54}',
478 '\u{55}',
479 '\u{56}',
480 '\u{57}',
481 '\u{58}',
482 '\u{59}',
483 '\u{5a}',
484 '\u{5b}',
485 '\u{a3}',
486 '\u{5d}',
487 '\u{2191}',
488 '\u{2190}',
489 '\u{20}',
490 '\u{21}',
491 '\u{22}',
492 '\u{23}',
493 '\u{24}',
494 '\u{25}',
495 '\u{26}',
496 '\u{27}',
497 '\u{28}',
498 '\u{29}',
499 '\u{2a}',
500 '\u{2b}',
501 '\u{2c}',
502 '\u{2d}',
503 '\u{2e}',
504 '\u{2f}',
505 '\u{30}',
506 '\u{31}',
507 '\u{32}',
508 '\u{33}',
509 '\u{34}',
510 '\u{35}',
511 '\u{36}',
512 '\u{37}',
513 '\u{38}',
514 '\u{39}',
515 '\u{3a}',
516 '\u{3b}',
517 '\u{3c}',
518 '\u{3d}',
519 '\u{3e}',
520 '\u{3f}',
521 '\u{2500}',
522 '\u{2660}',
523 '\u{1fb72}',
524 '\u{1fb78}',
525 '\u{1fb77}',
526 '\u{1fb76}',
527 '\u{1fb7a}',
528 '\u{1fb71}',
529 '\u{1fb74}',
530 '\u{256e}',
531 '\u{2570}',
532 '\u{256f}',
533 '\u{1fb7c}',
534 '\u{2572}',
535 '\u{2571}',
536 '\u{1fb7d}',
537 '\u{1fb7e}',
538 '\u{25cf}',
539 '\u{1fb7b}',
540 '\u{2665}',
541 '\u{1fb70}',
542 '\u{256d}',
543 '\u{2573}',
544 '\u{25cb}',
545 '\u{2663}',
546 '\u{1fb75}',
547 '\u{2666}',
548 '\u{253c}',
549 '\u{1fb8c}',
550 '\u{2502}',
551 '\u{3c0}',
552 '\u{25e5}',
553 '\u{a0}',
554 '\u{258c}',
555 '\u{2584}',
556 '\u{2594}',
557 '\u{2581}',
558 '\u{258f}',
559 '\u{2592}',
560 '\u{2595}',
561 '\u{1fb8f}',
562 '\u{25e4}',
563 '\u{1fb87}',
564 '\u{251c}',
565 '\u{2597}',
566 '\u{2514}',
567 '\u{2510}',
568 '\u{2582}',
569 '\u{250c}',
570 '\u{2534}',
571 '\u{252c}',
572 '\u{2524}',
573 '\u{258e}',
574 '\u{258d}',
575 '\u{1fb88}',
576 '\u{1fb82}',
577 '\u{1fb83}',
578 '\u{2583}',
579 '\u{1fb7f}',
580 '\u{2596}',
581 '\u{259d}',
582 '\u{2518}',
583 '\u{2598}',
584 '\u{259a}',
585 ]),
586 upper: [
587 '\u{40}',
588 '\u{41}',
589 '\u{42}',
590 '\u{43}',
591 '\u{44}',
592 '\u{45}',
593 '\u{46}',
594 '\u{47}',
595 '\u{48}',
596 '\u{49}',
597 '\u{4a}',
598 '\u{4b}',
599 '\u{4c}',
600 '\u{4d}',
601 '\u{4e}',
602 '\u{4f}',
603 '\u{50}',
604 '\u{51}',
605 '\u{52}',
606 '\u{53}',
607 '\u{54}',
608 '\u{55}',
609 '\u{56}',
610 '\u{57}',
611 '\u{58}',
612 '\u{59}',
613 '\u{5a}',
614 '\u{5b}',
615 '\u{a3}',
616 '\u{5d}',
617 '\u{2191}',
618 '\u{2190}',
619 '\u{20}',
620 '\u{21}',
621 '\u{22}',
622 '\u{23}',
623 '\u{24}',
624 '\u{25}',
625 '\u{26}',
626 '\u{27}',
627 '\u{28}',
628 '\u{29}',
629 '\u{2a}',
630 '\u{2b}',
631 '\u{2c}',
632 '\u{2d}',
633 '\u{2e}',
634 '\u{2f}',
635 '\u{30}',
636 '\u{31}',
637 '\u{32}',
638 '\u{33}',
639 '\u{34}',
640 '\u{35}',
641 '\u{36}',
642 '\u{37}',
643 '\u{38}',
644 '\u{39}',
645 '\u{3a}',
646 '\u{3b}',
647 '\u{3c}',
648 '\u{3d}',
649 '\u{3e}',
650 '\u{3f}',
651 '\u{2500}',
652 '\u{2660}',
653 '\u{1fb72}',
654 '\u{1fb78}',
655 '\u{1fb77}',
656 '\u{1fb76}',
657 '\u{1fb7a}',
658 '\u{1fb71}',
659 '\u{1fb74}',
660 '\u{256e}',
661 '\u{2570}',
662 '\u{256f}',
663 '\u{1fb7c}',
664 '\u{2572}',
665 '\u{2571}',
666 '\u{1fb7d}',
667 '\u{1fb7e}',
668 '\u{25cf}',
669 '\u{1fb7b}',
670 '\u{2665}',
671 '\u{1fb70}',
672 '\u{256d}',
673 '\u{2573}',
674 '\u{25cb}',
675 '\u{2663}',
676 '\u{1fb75}',
677 '\u{2666}',
678 '\u{253c}',
679 '\u{1fb8c}',
680 '\u{2502}',
681 '\u{3c0}',
682 '\u{25e5}',
683 '\u{a0}',
684 '\u{258c}',
685 '\u{2584}',
686 '\u{2594}',
687 '\u{2581}',
688 '\u{258f}',
689 '\u{2592}',
690 '\u{2595}',
691 '\u{1fb8f}',
692 '\u{25e4}',
693 '\u{1fb87}',
694 '\u{251c}',
695 '\u{2597}',
696 '\u{2514}',
697 '\u{2510}',
698 '\u{2582}',
699 '\u{250c}',
700 '\u{2534}',
701 '\u{252c}',
702 '\u{2524}',
703 '\u{258e}',
704 '\u{258d}',
705 '\u{1fb88}',
706 '\u{1fb82}',
707 '\u{1fb83}',
708 '\u{2583}',
709 '\u{1fb7f}',
710 '\u{2596}',
711 '\u{259d}',
712 '\u{2518}',
713 '\u{2598}',
714 '\u{259a}',
715 ],
716};
717
718static C64_LOWER: CodePage = CodePage {
721 name: "Commodore 64, lower and upper case",
722 lower: Some([
723 '\u{40}',
724 '\u{61}',
725 '\u{62}',
726 '\u{63}',
727 '\u{64}',
728 '\u{65}',
729 '\u{66}',
730 '\u{67}',
731 '\u{68}',
732 '\u{69}',
733 '\u{6a}',
734 '\u{6b}',
735 '\u{6c}',
736 '\u{6d}',
737 '\u{6e}',
738 '\u{6f}',
739 '\u{70}',
740 '\u{71}',
741 '\u{72}',
742 '\u{73}',
743 '\u{74}',
744 '\u{75}',
745 '\u{76}',
746 '\u{77}',
747 '\u{78}',
748 '\u{79}',
749 '\u{7a}',
750 '\u{5b}',
751 '\u{a3}',
752 '\u{5d}',
753 '\u{2191}',
754 '\u{2190}',
755 '\u{20}',
756 '\u{21}',
757 '\u{22}',
758 '\u{23}',
759 '\u{24}',
760 '\u{25}',
761 '\u{26}',
762 '\u{27}',
763 '\u{28}',
764 '\u{29}',
765 '\u{2a}',
766 '\u{2b}',
767 '\u{2c}',
768 '\u{2d}',
769 '\u{2e}',
770 '\u{2f}',
771 '\u{30}',
772 '\u{31}',
773 '\u{32}',
774 '\u{33}',
775 '\u{34}',
776 '\u{35}',
777 '\u{36}',
778 '\u{37}',
779 '\u{38}',
780 '\u{39}',
781 '\u{3a}',
782 '\u{3b}',
783 '\u{3c}',
784 '\u{3d}',
785 '\u{3e}',
786 '\u{3f}',
787 '\u{2500}',
788 '\u{41}',
789 '\u{42}',
790 '\u{43}',
791 '\u{44}',
792 '\u{45}',
793 '\u{46}',
794 '\u{47}',
795 '\u{48}',
796 '\u{49}',
797 '\u{4a}',
798 '\u{4b}',
799 '\u{4c}',
800 '\u{4d}',
801 '\u{4e}',
802 '\u{4f}',
803 '\u{50}',
804 '\u{51}',
805 '\u{52}',
806 '\u{53}',
807 '\u{54}',
808 '\u{55}',
809 '\u{56}',
810 '\u{57}',
811 '\u{58}',
812 '\u{59}',
813 '\u{5a}',
814 '\u{253c}',
815 '\u{1fb8c}',
816 '\u{2502}',
817 '\u{1fb96}',
818 '\u{1fb98}',
819 '\u{a0}',
820 '\u{258c}',
821 '\u{2584}',
822 '\u{2594}',
823 '\u{2581}',
824 '\u{258f}',
825 '\u{2592}',
826 '\u{2595}',
827 '\u{1fb8f}',
828 '\u{1fb99}',
829 '\u{1fb87}',
830 '\u{251c}',
831 '\u{2597}',
832 '\u{2514}',
833 '\u{2510}',
834 '\u{2582}',
835 '\u{250c}',
836 '\u{2534}',
837 '\u{252c}',
838 '\u{2524}',
839 '\u{258e}',
840 '\u{258d}',
841 '\u{1fb88}',
842 '\u{1fb82}',
843 '\u{1fb83}',
844 '\u{2583}',
845 '\u{2713}',
846 '\u{2596}',
847 '\u{259d}',
848 '\u{2518}',
849 '\u{2598}',
850 '\u{259a}',
851 ]),
852 upper: [
853 '\u{40}',
854 '\u{61}',
855 '\u{62}',
856 '\u{63}',
857 '\u{64}',
858 '\u{65}',
859 '\u{66}',
860 '\u{67}',
861 '\u{68}',
862 '\u{69}',
863 '\u{6a}',
864 '\u{6b}',
865 '\u{6c}',
866 '\u{6d}',
867 '\u{6e}',
868 '\u{6f}',
869 '\u{70}',
870 '\u{71}',
871 '\u{72}',
872 '\u{73}',
873 '\u{74}',
874 '\u{75}',
875 '\u{76}',
876 '\u{77}',
877 '\u{78}',
878 '\u{79}',
879 '\u{7a}',
880 '\u{5b}',
881 '\u{a3}',
882 '\u{5d}',
883 '\u{2191}',
884 '\u{2190}',
885 '\u{20}',
886 '\u{21}',
887 '\u{22}',
888 '\u{23}',
889 '\u{24}',
890 '\u{25}',
891 '\u{26}',
892 '\u{27}',
893 '\u{28}',
894 '\u{29}',
895 '\u{2a}',
896 '\u{2b}',
897 '\u{2c}',
898 '\u{2d}',
899 '\u{2e}',
900 '\u{2f}',
901 '\u{30}',
902 '\u{31}',
903 '\u{32}',
904 '\u{33}',
905 '\u{34}',
906 '\u{35}',
907 '\u{36}',
908 '\u{37}',
909 '\u{38}',
910 '\u{39}',
911 '\u{3a}',
912 '\u{3b}',
913 '\u{3c}',
914 '\u{3d}',
915 '\u{3e}',
916 '\u{3f}',
917 '\u{2500}',
918 '\u{41}',
919 '\u{42}',
920 '\u{43}',
921 '\u{44}',
922 '\u{45}',
923 '\u{46}',
924 '\u{47}',
925 '\u{48}',
926 '\u{49}',
927 '\u{4a}',
928 '\u{4b}',
929 '\u{4c}',
930 '\u{4d}',
931 '\u{4e}',
932 '\u{4f}',
933 '\u{50}',
934 '\u{51}',
935 '\u{52}',
936 '\u{53}',
937 '\u{54}',
938 '\u{55}',
939 '\u{56}',
940 '\u{57}',
941 '\u{58}',
942 '\u{59}',
943 '\u{5a}',
944 '\u{253c}',
945 '\u{1fb8c}',
946 '\u{2502}',
947 '\u{1fb96}',
948 '\u{1fb98}',
949 '\u{a0}',
950 '\u{258c}',
951 '\u{2584}',
952 '\u{2594}',
953 '\u{2581}',
954 '\u{258f}',
955 '\u{2592}',
956 '\u{2595}',
957 '\u{1fb8f}',
958 '\u{1fb99}',
959 '\u{1fb87}',
960 '\u{251c}',
961 '\u{2597}',
962 '\u{2514}',
963 '\u{2510}',
964 '\u{2582}',
965 '\u{250c}',
966 '\u{2534}',
967 '\u{252c}',
968 '\u{2524}',
969 '\u{258e}',
970 '\u{258d}',
971 '\u{1fb88}',
972 '\u{1fb82}',
973 '\u{1fb83}',
974 '\u{2583}',
975 '\u{2713}',
976 '\u{2596}',
977 '\u{259d}',
978 '\u{2518}',
979 '\u{2598}',
980 '\u{259a}',
981 ],
982};
983
984static ATARI: CodePage = CodePage {
987 name: "Atari 8-bit (ATASCII)",
988 lower: Some([
989 '\u{2665}',
990 '\u{251c}',
991 '\u{1fb87}',
992 '\u{2518}',
993 '\u{2524}',
994 '\u{2510}',
995 '\u{2571}',
996 '\u{2572}',
997 '\u{25e2}',
998 '\u{2597}',
999 '\u{25e3}',
1000 '\u{259d}',
1001 '\u{2598}',
1002 '\u{1fb82}',
1003 '\u{2582}',
1004 '\u{2596}',
1005 '\u{2663}',
1006 '\u{250c}',
1007 '\u{2500}',
1008 '\u{253c}',
1009 '\u{25cf}',
1010 '\u{2584}',
1011 '\u{258e}',
1012 '\u{252c}',
1013 '\u{2534}',
1014 '\u{258c}',
1015 '\u{2514}',
1016 '\u{241b}',
1017 '\u{2191}',
1018 '\u{2193}',
1019 '\u{2190}',
1020 '\u{2192}',
1021 '\u{20}',
1022 '\u{21}',
1023 '\u{22}',
1024 '\u{23}',
1025 '\u{24}',
1026 '\u{25}',
1027 '\u{26}',
1028 '\u{27}',
1029 '\u{28}',
1030 '\u{29}',
1031 '\u{2a}',
1032 '\u{2b}',
1033 '\u{2c}',
1034 '\u{2d}',
1035 '\u{2e}',
1036 '\u{2f}',
1037 '\u{30}',
1038 '\u{31}',
1039 '\u{32}',
1040 '\u{33}',
1041 '\u{34}',
1042 '\u{35}',
1043 '\u{36}',
1044 '\u{37}',
1045 '\u{38}',
1046 '\u{39}',
1047 '\u{3a}',
1048 '\u{3b}',
1049 '\u{3c}',
1050 '\u{3d}',
1051 '\u{3e}',
1052 '\u{3f}',
1053 '\u{40}',
1054 '\u{41}',
1055 '\u{42}',
1056 '\u{43}',
1057 '\u{44}',
1058 '\u{45}',
1059 '\u{46}',
1060 '\u{47}',
1061 '\u{48}',
1062 '\u{49}',
1063 '\u{4a}',
1064 '\u{4b}',
1065 '\u{4c}',
1066 '\u{4d}',
1067 '\u{4e}',
1068 '\u{4f}',
1069 '\u{50}',
1070 '\u{51}',
1071 '\u{52}',
1072 '\u{53}',
1073 '\u{54}',
1074 '\u{55}',
1075 '\u{56}',
1076 '\u{57}',
1077 '\u{58}',
1078 '\u{59}',
1079 '\u{5a}',
1080 '\u{5b}',
1081 '\u{5c}',
1082 '\u{5d}',
1083 '\u{5e}',
1084 '\u{5f}',
1085 '\u{2666}',
1086 '\u{61}',
1087 '\u{62}',
1088 '\u{63}',
1089 '\u{64}',
1090 '\u{65}',
1091 '\u{66}',
1092 '\u{67}',
1093 '\u{68}',
1094 '\u{69}',
1095 '\u{6a}',
1096 '\u{6b}',
1097 '\u{6c}',
1098 '\u{6d}',
1099 '\u{6e}',
1100 '\u{6f}',
1101 '\u{70}',
1102 '\u{71}',
1103 '\u{72}',
1104 '\u{73}',
1105 '\u{74}',
1106 '\u{75}',
1107 '\u{76}',
1108 '\u{77}',
1109 '\u{78}',
1110 '\u{79}',
1111 '\u{7a}',
1112 '\u{2660}',
1113 '\u{7c}',
1114 '\u{1f8b0}',
1115 '\u{25c0}',
1116 '\u{25b6}',
1117 ]),
1118 upper: [
1119 '\u{2665}',
1120 '\u{251c}',
1121 '\u{1fb87}',
1122 '\u{2518}',
1123 '\u{2524}',
1124 '\u{2510}',
1125 '\u{2571}',
1126 '\u{2572}',
1127 '\u{25e2}',
1128 '\u{2597}',
1129 '\u{25e3}',
1130 '\u{259d}',
1131 '\u{2598}',
1132 '\u{1fb82}',
1133 '\u{2582}',
1134 '\u{2596}',
1135 '\u{2663}',
1136 '\u{250c}',
1137 '\u{2500}',
1138 '\u{253c}',
1139 '\u{25cf}',
1140 '\u{2584}',
1141 '\u{258e}',
1142 '\u{252c}',
1143 '\u{2534}',
1144 '\u{258c}',
1145 '\u{2514}',
1146 '\u{241b}',
1147 '\u{2191}',
1148 '\u{2193}',
1149 '\u{2190}',
1150 '\u{2192}',
1151 '\u{20}',
1152 '\u{21}',
1153 '\u{22}',
1154 '\u{23}',
1155 '\u{24}',
1156 '\u{25}',
1157 '\u{26}',
1158 '\u{27}',
1159 '\u{28}',
1160 '\u{29}',
1161 '\u{2a}',
1162 '\u{2b}',
1163 '\u{2c}',
1164 '\u{2d}',
1165 '\u{2e}',
1166 '\u{2f}',
1167 '\u{30}',
1168 '\u{31}',
1169 '\u{32}',
1170 '\u{33}',
1171 '\u{34}',
1172 '\u{35}',
1173 '\u{36}',
1174 '\u{37}',
1175 '\u{38}',
1176 '\u{39}',
1177 '\u{3a}',
1178 '\u{3b}',
1179 '\u{3c}',
1180 '\u{3d}',
1181 '\u{3e}',
1182 '\u{3f}',
1183 '\u{40}',
1184 '\u{41}',
1185 '\u{42}',
1186 '\u{43}',
1187 '\u{44}',
1188 '\u{45}',
1189 '\u{46}',
1190 '\u{47}',
1191 '\u{48}',
1192 '\u{49}',
1193 '\u{4a}',
1194 '\u{4b}',
1195 '\u{4c}',
1196 '\u{4d}',
1197 '\u{4e}',
1198 '\u{4f}',
1199 '\u{50}',
1200 '\u{51}',
1201 '\u{52}',
1202 '\u{53}',
1203 '\u{54}',
1204 '\u{55}',
1205 '\u{56}',
1206 '\u{57}',
1207 '\u{58}',
1208 '\u{59}',
1209 '\u{5a}',
1210 '\u{5b}',
1211 '\u{5c}',
1212 '\u{5d}',
1213 '\u{5e}',
1214 '\u{5f}',
1215 '\u{2666}',
1216 '\u{61}',
1217 '\u{62}',
1218 '\u{63}',
1219 '\u{64}',
1220 '\u{65}',
1221 '\u{66}',
1222 '\u{67}',
1223 '\u{68}',
1224 '\u{69}',
1225 '\u{6a}',
1226 '\u{6b}',
1227 '\u{6c}',
1228 '\u{6d}',
1229 '\u{6e}',
1230 '\u{6f}',
1231 '\u{70}',
1232 '\u{71}',
1233 '\u{72}',
1234 '\u{73}',
1235 '\u{74}',
1236 '\u{75}',
1237 '\u{76}',
1238 '\u{77}',
1239 '\u{78}',
1240 '\u{79}',
1241 '\u{7a}',
1242 '\u{2660}',
1243 '\u{7c}',
1244 '\u{1f8b0}',
1245 '\u{25c0}',
1246 '\u{25b6}',
1247 ],
1248};
1249
1250#[cfg(test)]
1251mod tests {
1252 use super::*;
1253
1254 #[test]
1255 fn cyrillic_both_ways() {
1256 let cp866 = for_font(25).unwrap();
1257 assert_eq!(cp866.encode_str("Привет!"), [0x8F, 0xE0, 0xA8, 0xA2, 0xA5, 0xE2, b'!']);
1258 assert_eq!(cp866.decode(0x8F), 'П');
1259 let koi = for_font(2).unwrap();
1260 assert_eq!(koi.encode_str("Да"), [0xE4, 0xC1]);
1261 assert_eq!(koi.decode(0xC1), 'а');
1262 assert_eq!(for_font(21).unwrap().encode_str("Ω€Ж"), [0xD9, 0xA4, b'?']);
1264 assert!(for_font(0).is_none());
1265 let arm = for_font(15).unwrap();
1267 assert_eq!(arm.encode_str("Բարեւ"), [0xB4, 0xB3, 0xF1, 0xBB, 0xF5]);
1268 assert_eq!(for_font(7).unwrap().decode(0xC4), '─');
1269 let up = screen_codes(32).unwrap();
1271 assert_eq!((up.decode(0x08), up.decode(0x88), up.decode(0x41)), ('H', 'H', '\u{2660}'));
1272 let low = screen_codes(33).unwrap();
1273 assert_eq!((low.decode(0x08), low.decode(0x48)), ('h', 'H'));
1274 let by = for_font(31).unwrap();
1275 assert_eq!(by.encode_str("Ўў"), [0xF6, 0xF7]);
1276 }
1277}