vga_framebuffer/
charset.rs

1/// This MS-DOS CodePage 850. It offers a compromise between the box
2/// characters of CodePage 437 and the accents of ISO 8859-1 / Latin-1.
3#[repr(u8)]
4#[derive(Copy, Clone)]
5pub enum Char {
6    Null,                                   // Char 000 ' ' = REPLACEMENT CHARACTER
7    SOH,                                    // Char 001 '☺' = WHITE SMILING FACE
8    STX,                                    // Char 002 '☻' = BLACK SMILING FACE
9    ETX,                                    // Char 003 '♥' = BLACK HEART SUIT
10    EOT,                                    // Char 004 '♦' = BLACK DIAMOND SUIT
11    ENQ,                                    // Char 005 '♣' = BLACK CLUB SUIT
12    ACK,                                    // Char 006 '♠' = BLACK SPADE SUIT
13    BEL,                                    // Char 007 '•' = BULLET
14    BS,                                     // Char 008 '◘' = INVERSE BULLET
15    HT,                                     // Char 009 '○' = WHITE CIRCLE
16    LF,                                     // Char 010 '◙' = INVERSE WHITE CIRCLE
17    VT,                                     // Char 011 '♂' = MALE SIGN
18    FF,                                     // Char 012 '♀' = FEMALE SIGN
19    CR,                                     // Char 013 '♪' = EIGHTH NOTE
20    SO,                                     // Char 014 '♫' = BEAMED EIGHTH NOTES
21    SI,                                     // Char 015 '☼' = WHITE SUN WITH RAYS
22    DLE,                                    // Char 016 '►' = BLACK RIGHT-POINTING ARROW
23    DC1,                                    // Char 017 '◄' = BLACK LEFT-POINTING ARROW
24    DC2,                                    // Char 018 '↕' = UP DOWN ARROW
25    DC3,                                    // Char 019 '‼' = DOUBLE EXCLAMATION MARK
26    DC4,                                    // Char 020 '¶' = PILCROW SIGN
27    NAK,                                    // Char 021 '§' = SECTION SIGN
28    SYN,                                    // Char 022 '▬' = BLACK RECTANGLE
29    ETB,                                    // Char 023 '↨' = UP DOWN ARROW WITH BASE
30    CAN,                                    // Char 024 '↑' = UPWARDS ARROW
31    EM,                                     // Char 025 '↓' = DOWNWARDS ARROW
32    SUB,                                    // Char 026 '→' = RIGHTWARDS ARROW
33    Escape,                                 // Char 027 '←' = LEFTWARDS ARROW
34    FS,                                     // Char 028 '∟' = RIGHT ANDLE
35    GS,                                     // Char 029 '↔' = LEFT RIGHT ARROW
36    RS,                                     // Char 030 '▲' = BLACK UP POINTING ARROW
37    US,                                     // Char 031 '▼' = BLACK DOWN POINTING ARROW
38    Space,                                  // Char 032 ' ' = SPACE
39    ExclamationMark,                        // Char 033 '!' = EXCLAMATION MARK
40    QuotationMark,                          // Char 034 '"' = QUOTATION MARK
41    NumberSign,                             // Char 035 '#' = NUMBER SIGN
42    DollarSign,                             // Char 036 '$' = DOLLAR SIGN
43    PercentSign,                            // Char 037 '%' = PERCENT SIGN
44    Ampersand,                              // Char 038 '&' = AMPERSAND
45    Apostrophe,                             // Char 039 "'" = APOSTROPHE
46    LeftParenthesis,                        // Char 040 '(' = LEFT PARENTHESIS
47    RightParenthesis,                       // Char 041 ')' = RIGHT PARENTHESIS
48    Asterisk,                               // Char 042 '*' = ASTERISK
49    PlusSign,                               // Char 043 '+' = PLUS SIGN
50    Comma,                                  // Char 044 ',' = COMMA
51    HyphenMinus,                            // Char 045 '-' = HYPHEN-MINUS
52    FullStop,                               // Char 046 '.' = FULL STOP
53    Solidus,                                // Char 047 '/' = SOLIDUS
54    DigitZero,                              // Char 048 '0' = DIGIT ZERO
55    DigitOne,                               // Char 049 '1' = DIGIT ONE
56    DigitTwo,                               // Char 050 '2' = DIGIT TWO
57    DigitThree,                             // Char 051 '3' = DIGIT THREE
58    DigitFour,                              // Char 052 '4' = DIGIT FOUR
59    DigitFive,                              // Char 053 '5' = DIGIT FIVE
60    DigitSix,                               // Char 054 '6' = DIGIT SIX
61    DigitSeven,                             // Char 055 '7' = DIGIT SEVEN
62    DigitEight,                             // Char 056 '8' = DIGIT EIGHT
63    DigitNine,                              // Char 057 '9' = DIGIT NINE
64    Colon,                                  // Char 058 ':' = COLON
65    Semicolon,                              // Char 059 ';' = SEMICOLON
66    LessThanSign,                           // Char 060 '<' = LESS-THAN SIGN
67    EqualsSign,                             // Char 061 '=' = EQUALS SIGN
68    GreaterThanSign,                        // Char 062 '>' = GREATER-THAN SIGN
69    QuestionMark,                           // Char 063 '?' = QUESTION MARK
70    CommercialAt,                           // Char 064 '@' = COMMERCIAL AT
71    LatinCapitalLetterA,                    // Char 065 'A' = LATIN CAPITAL LETTER A
72    LatinCapitalLetterB,                    // Char 066 'B' = LATIN CAPITAL LETTER B
73    LatinCapitalLetterC,                    // Char 067 'C' = LATIN CAPITAL LETTER C
74    LatinCapitalLetterD,                    // Char 068 'D' = LATIN CAPITAL LETTER D
75    LatinCapitalLetterE,                    // Char 069 'E' = LATIN CAPITAL LETTER E
76    LatinCapitalLetterF,                    // Char 070 'F' = LATIN CAPITAL LETTER F
77    LatinCapitalLetterG,                    // Char 071 'G' = LATIN CAPITAL LETTER G
78    LatinCapitalLetterH,                    // Char 072 'H' = LATIN CAPITAL LETTER H
79    LatinCapitalLetterI,                    // Char 073 'I' = LATIN CAPITAL LETTER I
80    LatinCapitalLetterJ,                    // Char 074 'J' = LATIN CAPITAL LETTER J
81    LatinCapitalLetterK,                    // Char 075 'K' = LATIN CAPITAL LETTER K
82    LatinCapitalLetterL,                    // Char 076 'L' = LATIN CAPITAL LETTER L
83    LatinCapitalLetterM,                    // Char 077 'M' = LATIN CAPITAL LETTER M
84    LatinCapitalLetterN,                    // Char 078 'N' = LATIN CAPITAL LETTER N
85    LatinCapitalLetterO,                    // Char 079 'O' = LATIN CAPITAL LETTER O
86    LatinCapitalLetterP,                    // Char 080 'P' = LATIN CAPITAL LETTER P
87    LatinCapitalLetterQ,                    // Char 081 'Q' = LATIN CAPITAL LETTER Q
88    LatinCapitalLetterR,                    // Char 082 'R' = LATIN CAPITAL LETTER R
89    LatinCapitalLetterS,                    // Char 083 'S' = LATIN CAPITAL LETTER S
90    LatinCapitalLetterT,                    // Char 084 'T' = LATIN CAPITAL LETTER T
91    LatinCapitalLetterU,                    // Char 085 'U' = LATIN CAPITAL LETTER U
92    LatinCapitalLetterV,                    // Char 086 'V' = LATIN CAPITAL LETTER V
93    LatinCapitalLetterW,                    // Char 087 'W' = LATIN CAPITAL LETTER W
94    LatinCapitalLetterX,                    // Char 088 'X' = LATIN CAPITAL LETTER X
95    LatinCapitalLetterY,                    // Char 089 'Y' = LATIN CAPITAL LETTER Y
96    LatinCapitalLetterZ,                    // Char 090 'Z' = LATIN CAPITAL LETTER Z
97    LeftSquareBracket,                      // Char 091 '[' = LEFT SQUARE BRACKET
98    ReverseSolidus,                         // Char 092 '\\' = REVERSE SOLIDUS
99    RightSquareBracket,                     // Char 093 ']' = RIGHT SQUARE BRACKET
100    CircumflexAccent,                       // Char 094 '^' = CIRCUMFLEX ACCENT
101    LowLine,                                // Char 095 '_' = LOW LINE
102    GraveAccent,                            // Char 096 '`' = GRAVE ACCENT
103    LatinSmallLetterA,                      // Char 097 'a' = LATIN SMALL LETTER A
104    LatinSmallLetterB,                      // Char 098 'b' = LATIN SMALL LETTER B
105    LatinSmallLetterC,                      // Char 099 'c' = LATIN SMALL LETTER C
106    LatinSmallLetterD,                      // Char 100 'd' = LATIN SMALL LETTER D
107    LatinSmallLetterE,                      // Char 101 'e' = LATIN SMALL LETTER E
108    LatinSmallLetterF,                      // Char 102 'f' = LATIN SMALL LETTER F
109    LatinSmallLetterG,                      // Char 103 'g' = LATIN SMALL LETTER G
110    LatinSmallLetterH,                      // Char 104 'h' = LATIN SMALL LETTER H
111    LatinSmallLetterI,                      // Char 105 'i' = LATIN SMALL LETTER I
112    LatinSmallLetterJ,                      // Char 106 'j' = LATIN SMALL LETTER J
113    LatinSmallLetterK,                      // Char 107 'k' = LATIN SMALL LETTER K
114    LatinSmallLetterL,                      // Char 108 'l' = LATIN SMALL LETTER L
115    LatinSmallLetterM,                      // Char 109 'm' = LATIN SMALL LETTER M
116    LatinSmallLetterN,                      // Char 110 'n' = LATIN SMALL LETTER N
117    LatinSmallLetterO,                      // Char 111 'o' = LATIN SMALL LETTER O
118    LatinSmallLetterP,                      // Char 112 'p' = LATIN SMALL LETTER P
119    LatinSmallLetterQ,                      // Char 113 'q' = LATIN SMALL LETTER Q
120    LatinSmallLetterR,                      // Char 114 'r' = LATIN SMALL LETTER R
121    LatinSmallLetterS,                      // Char 115 's' = LATIN SMALL LETTER S
122    LatinSmallLetterT,                      // Char 116 't' = LATIN SMALL LETTER T
123    LatinSmallLetterU,                      // Char 117 'u' = LATIN SMALL LETTER U
124    LatinSmallLetterV,                      // Char 118 'v' = LATIN SMALL LETTER V
125    LatinSmallLetterW,                      // Char 119 'w' = LATIN SMALL LETTER W
126    LatinSmallLetterX,                      // Char 120 'x' = LATIN SMALL LETTER X
127    LatinSmallLetterY,                      // Char 121 'y' = LATIN SMALL LETTER Y
128    LatinSmallLetterZ,                      // Char 122 'z' = LATIN SMALL LETTER Z
129    LeftCurlyBracket,                       // Char 123 '{' = LEFT CURLY BRACKET
130    VerticalLine,                           // Char 124 '|' = VERTICAL LINE
131    RightCurlyBracket,                      // Char 125 '}' = RIGHT CURLY BRACKET
132    Tilde,                                  // Char 126 '~' = TILDE
133    Delete,                                 // Char 127 '\x7f' = DELETE
134    LatinCapitalLetterCWithCedilla,         // Char 128 'Ç' = LATIN CAPITAL LETTER C WITH CEDILLA
135    LatinSmallLetterUWithDiaeresis,         // Char 129 'ü' = LATIN SMALL LETTER U WITH DIAERESIS
136    LatinSmallLetterEWithAcute,             // Char 130 'é' = LATIN SMALL LETTER E WITH ACUTE
137    LatinSmallLetterAWithCircumflex,        // Char 131 'â' = LATIN SMALL LETTER A WITH CIRCUMFLEX
138    LatinSmallLetterAWithDiaeresis,         // Char 132 'ä' = LATIN SMALL LETTER A WITH DIAERESIS
139    LatinSmallLetterAWithGrave,             // Char 133 'à' = LATIN SMALL LETTER A WITH GRAVE
140    LatinSmallLetterAWithRingAbove,         // Char 134 'å' = LATIN SMALL LETTER A WITH RING ABOVE
141    LatinSmallLetterCWithCedilla,           // Char 135 'ç' = LATIN SMALL LETTER C WITH CEDILLA
142    LatinSmallLetterEWithCircumflex,        // Char 136 'ê' = LATIN SMALL LETTER E WITH CIRCUMFLEX
143    LatinSmallLetterEWithDiaeresis,         // Char 137 'ë' = LATIN SMALL LETTER E WITH DIAERESIS
144    LatinSmallLetterEWithGrave,             // Char 138 'è' = LATIN SMALL LETTER E WITH GRAVE
145    LatinSmallLetterIWithDiaeresis,         // Char 139 'ï' = LATIN SMALL LETTER I WITH DIAERESIS
146    LatinSmallLetterIWithCircumflex,        // Char 140 'î' = LATIN SMALL LETTER I WITH CIRCUMFLEX
147    LatinSmallLetterIWithGrave,             // Char 141 'ì' = LATIN SMALL LETTER I WITH GRAVE
148    LatinCapitalLetterAWithDiaeresis,       // Char 142 'Ä' = LATIN CAPITAL LETTER A WITH DIAERESIS
149    LatinCapitalLetterAWithRingAbove,       // Char 143 'Å' = LATIN CAPITAL LETTER A WITH RING ABOVE
150    LatinCapitalLetterEWithAcute,           // Char 144 'É' = LATIN CAPITAL LETTER E WITH ACUTE
151    LatinSmallLetterAe,                     // Char 145 'æ' = LATIN SMALL LETTER AE
152    LatinCapitalLetterAe,                   // Char 146 'Æ' = LATIN CAPITAL LETTER AE
153    LatinSmallLetterOWithCircumflex,        // Char 147 'ô' = LATIN SMALL LETTER O WITH CIRCUMFLEX
154    LatinSmallLetterOWithDiaeresis,         // Char 148 'ö' = LATIN SMALL LETTER O WITH DIAERESIS
155    LatinSmallLetterOWithGrave,             // Char 149 'ò' = LATIN SMALL LETTER O WITH GRAVE
156    LatinSmallLetterUWithCircumflex,        // Char 150 'û' = LATIN SMALL LETTER U WITH CIRCUMFLEX
157    LatinSmallLetterUWithGrave,             // Char 151 'ù' = LATIN SMALL LETTER U WITH GRAVE
158    LatinSmallLetterYWithDiaeresis,         // Char 152 'ÿ' = LATIN SMALL LETTER Y WITH DIAERESIS
159    LatinCapitalLetterOWithDiaeresis,       // Char 153 'Ö' = LATIN CAPITAL LETTER O WITH DIAERESIS
160    LatinCapitalLetterUWithDiaeresis,       // Char 154 'Ü' = LATIN CAPITAL LETTER U WITH DIAERESIS
161    LatinSmallLetterOWithStroke,            // Char 155 'ø' = LATIN SMALL LETTER O WITH STROKE
162    PoundSign,                              // Char 156 '£' = POUND SIGN
163    LatinCapitalLetterOWithStroke,          // Char 157 'Ø' = LATIN CAPITAL LETTER O WITH STROKE
164    MultiplicationSign,                     // Char 158 '×' = MULTIPLICATION SIGN
165    LatinSmallLetterFWithHook,              // Char 159 'ƒ' = LATIN SMALL LETTER F WITH HOOK
166    LatinSmallLetterAWithAcute,             // Char 160 'á' = LATIN SMALL LETTER A WITH ACUTE
167    LatinSmallLetterIWithAcute,             // Char 161 'í' = LATIN SMALL LETTER I WITH ACUTE
168    LatinSmallLetterOWithAcute,             // Char 162 'ó' = LATIN SMALL LETTER O WITH ACUTE
169    LatinSmallLetterUWithAcute,             // Char 163 'ú' = LATIN SMALL LETTER U WITH ACUTE
170    LatinSmallLetterNWithTilde,             // Char 164 'ñ' = LATIN SMALL LETTER N WITH TILDE
171    LatinCapitalLetterNWithTilde,           // Char 165 'Ñ' = LATIN CAPITAL LETTER N WITH TILDE
172    FeminineOrdinalIndicator,               // Char 166 'ª' = FEMININE ORDINAL INDICATOR
173    MasculineOrdinalIndicator,              // Char 167 'º' = MASCULINE ORDINAL INDICATOR
174    InvertedQuestionMark,                   // Char 168 '¿' = INVERTED QUESTION MARK
175    RegisteredSign,                         // Char 169 '®' = REGISTERED SIGN
176    NotSign,                                // Char 170 '¬' = NOT SIGN
177    VulgarFractionOneHalf,                  // Char 171 '½' = VULGAR FRACTION ONE HALF
178    VulgarFractionOneQuarter,               // Char 172 '¼' = VULGAR FRACTION ONE QUARTER
179    InvertedExclamationMark,                // Char 173 '¡' = INVERTED EXCLAMATION MARK
180    LeftPointingDoubleAngleQuotationMark, // Char 174 '«' = LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
181    RightPointingDoubleAngleQuotationMark, // Char 175 '»' = RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
182    LightShade,                            // Char 176 '░' = LIGHT SHADE
183    MediumShade,                           // Char 177 '▒' = MEDIUM SHADE
184    DarkShade,                             // Char 178 '▓' = DARK SHADE
185    BoxDrawingsLightVertical,              // Char 179 '│' = BOX DRAWINGS LIGHT VERTICAL
186    BoxDrawingsLightVerticalAndLeft,       // Char 180 '┤' = BOX DRAWINGS LIGHT VERTICAL AND LEFT
187    LatinCapitalLetterAWithAcute,          // Char 181 'Á' = LATIN CAPITAL LETTER A WITH ACUTE
188    LatinCapitalLetterAWithCircumflex,     // Char 182 'Â' = LATIN CAPITAL LETTER A WITH CIRCUMFLEX
189    LatinCapitalLetterAWithGrave,          // Char 183 'À' = LATIN CAPITAL LETTER A WITH GRAVE
190    CopyrightSign,                         // Char 184 '©' = COPYRIGHT SIGN
191    BoxDrawingsDoubleVerticalAndLeft,      // Char 185 '╣' = BOX DRAWINGS DOUBLE VERTICAL AND LEFT
192    BoxDrawingsDoubleVertical,             // Char 186 '║' = BOX DRAWINGS DOUBLE VERTICAL
193    BoxDrawingsDoubleDownAndLeft,          // Char 187 '╗' = BOX DRAWINGS DOUBLE DOWN AND LEFT
194    BoxDrawingsDoubleUpAndLeft,            // Char 188 '╝' = BOX DRAWINGS DOUBLE UP AND LEFT
195    CentSign,                              // Char 189 '¢' = CENT SIGN
196    YenSign,                               // Char 190 '¥' = YEN SIGN
197    BoxDrawingsLightDownAndLeft,           // Char 191 '┐' = BOX DRAWINGS LIGHT DOWN AND LEFT
198    BoxDrawingsLightUpAndRight,            // Char 192 '└' = BOX DRAWINGS LIGHT UP AND RIGHT
199    BoxDrawingsLightUpAndHorizontal,       // Char 193 '┴' = BOX DRAWINGS LIGHT UP AND HORIZONTAL
200    BoxDrawingsLightDownAndHorizontal,     // Char 194 '┬' = BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
201    BoxDrawingsLightVerticalAndRight,      // Char 195 '├' = BOX DRAWINGS LIGHT VERTICAL AND RIGHT
202    BoxDrawingsLightHorizontal,            // Char 196 '─' = BOX DRAWINGS LIGHT HORIZONTAL
203    BoxDrawingsLightVerticalAndHorizontal, // Char 197 '┼' = BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
204    LatinSmallLetterAWithTilde,            // Char 198 'ã' = LATIN SMALL LETTER A WITH TILDE
205    LatinCapitalLetterAWithTilde,          // Char 199 'Ã' = LATIN CAPITAL LETTER A WITH TILDE
206    BoxDrawingsDoubleUpAndRight,           // Char 200 '╚' = BOX DRAWINGS DOUBLE UP AND RIGHT
207    BoxDrawingsDoubleDownAndRight,         // Char 201 '╔' = BOX DRAWINGS DOUBLE DOWN AND RIGHT
208    BoxDrawingsDoubleUpAndHorizontal,      // Char 202 '╩' = BOX DRAWINGS DOUBLE UP AND HORIZONTAL
209    BoxDrawingsDoubleDownAndHorizontal,    // Char 203 '╦' = BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
210    BoxDrawingsDoubleVerticalAndRight,     // Char 204 '╠' = BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
211    BoxDrawingsDoubleHorizontal,           // Char 205 '═' = BOX DRAWINGS DOUBLE HORIZONTAL
212    BoxDrawingsDoubleVerticalAndHorizontal, // Char 206 '╬' = BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
213    CurrencySign,                           // Char 207 '¤' = CURRENCY SIGN
214    LatinSmallLetterEth,                    // Char 208 'ð' = LATIN SMALL LETTER ETH
215    LatinCapitalLetterEth,                  // Char 209 'Ð' = LATIN CAPITAL LETTER ETH
216    LatinCapitalLetterEWithCircumflex,      // Char 210 'Ê' = LATIN CAPITAL LETTER E WITH CIRCUMFLEX
217    LatinCapitalLetterEWithDiaeresis,       // Char 211 'Ë' = LATIN CAPITAL LETTER E WITH DIAERESIS
218    LatinCapitalLetterEWithGrave,           // Char 212 'È' = LATIN CAPITAL LETTER E WITH GRAVE
219    LatinSmallLetterDotlessI,               // Char 213 'ı' = LATIN SMALL LETTER DOTLESS I
220    LatinCapitalLetterIWithAcute,           // Char 214 'Í' = LATIN CAPITAL LETTER I WITH ACUTE
221    LatinCapitalLetterIWithCircumflex,      // Char 215 'Î' = LATIN CAPITAL LETTER I WITH CIRCUMFLEX
222    LatinCapitalLetterIWithDiaeresis,       // Char 216 'Ï' = LATIN CAPITAL LETTER I WITH DIAERESIS
223    BoxDrawingsLightUpAndLeft,              // Char 217 '┘' = BOX DRAWINGS LIGHT UP AND LEFT
224    BoxDrawingsLightDownAndRight,           // Char 218 '┌' = BOX DRAWINGS LIGHT DOWN AND RIGHT
225    FullBlock,                              // Char 219 '█' = FULL BLOCK
226    LowerHalfBlock,                         // Char 220 '▄' = LOWER HALF BLOCK
227    BrokenBar,                              // Char 221 '¦' = BROKEN BAR
228    LatinCapitalLetterIWithGrave,           // Char 222 'Ì' = LATIN CAPITAL LETTER I WITH GRAVE
229    UpperHalfBlock,                         // Char 223 '▀' = UPPER HALF BLOCK
230    LatinCapitalLetterOWithAcute,           // Char 224 'Ó' = LATIN CAPITAL LETTER O WITH ACUTE
231    LatinSmallLetterSharpS,                 // Char 225 'ß' = LATIN SMALL LETTER SHARP S
232    LatinCapitalLetterOWithCircumflex,      // Char 226 'Ô' = LATIN CAPITAL LETTER O WITH CIRCUMFLEX
233    LatinCapitalLetterOWithGrave,           // Char 227 'Ò' = LATIN CAPITAL LETTER O WITH GRAVE
234    LatinSmallLetterOWithTilde,             // Char 228 'õ' = LATIN SMALL LETTER O WITH TILDE
235    LatinCapitalLetterOWithTilde,           // Char 229 'Õ' = LATIN CAPITAL LETTER O WITH TILDE
236    MicroSign,                              // Char 230 'µ' = MICRO SIGN
237    LatinSmallLetterThorn,                  // Char 231 'þ' = LATIN SMALL LETTER THORN
238    LatinCapitalLetterThorn,                // Char 232 'Þ' = LATIN CAPITAL LETTER THORN
239    LatinCapitalLetterUWithAcute,           // Char 233 'Ú' = LATIN CAPITAL LETTER U WITH ACUTE
240    LatinCapitalLetterUWithCircumflex,      // Char 234 'Û' = LATIN CAPITAL LETTER U WITH CIRCUMFLEX
241    LatinCapitalLetterUWithGrave,           // Char 235 'Ù' = LATIN CAPITAL LETTER U WITH GRAVE
242    LatinSmallLetterYWithAcute,             // Char 236 'ý' = LATIN SMALL LETTER Y WITH ACUTE
243    LatinCapitalLetterYWithAcute,           // Char 237 'Ý' = LATIN CAPITAL LETTER Y WITH ACUTE
244    Macron,                                 // Char 238 '¯' = MACRON
245    AcuteAccent,                            // Char 239 '´' = ACUTE ACCENT
246    SoftHyphen,                             // Char 240 '-' = SOFT HYPHEN
247    PlusMinusSign,                          // Char 241 '±' = PLUS-MINUS SIGN
248    DoubleLowLine,                          // Char 242 '‗' = DOUBLE LOW LINE
249    VulgarFractionThreeQuarters,            // Char 243 '¾' = VULGAR FRACTION THREE QUARTERS
250    PilcrowSign,                            // Char 244 '¶' = PILCROW SIGN
251    SectionSign,                            // Char 245 '§' = SECTION SIGN
252    DivisionSign,                           // Char 246 '÷' = DIVISION SIGN
253    Cedilla,                                // Char 247 '¸' = CEDILLA
254    DegreeSign,                             // Char 248 '°' = DEGREE SIGN
255    Diaeresis,                              // Char 249 '¨' = DIAERESIS
256    MiddleDot,                              // Char 250 '·' = MIDDLE DOT
257    SuperscriptOne,                         // Char 251 '¹' = SUPERSCRIPT ONE
258    SuperscriptThree,                       // Char 252 '³' = SUPERSCRIPT THREE
259    SuperscriptTwo,                         // Char 253 '²' = SUPERSCRIPT TWO
260    BlackSquare,                            // Char 254 '■' = BLACK SQUARE
261    NoBreakSpace,                           // Char 255 '\xa0' = NO-BREAK SPACE
262}
263
264impl ::core::default::Default for Char {
265    fn default() -> Char {
266        Char::Space
267    }
268}
269
270impl Char {
271    /// Convert a Unicode scalar value into an 8-bit Code Page 850 character.
272    /// Characters that can't be mapped are set to '?' (Char::QuestionMark).
273    /// Both the Unicode control characters and the relevant Unicode symbols
274    /// (like BLACK HEART SUIT) are mapped into the 0..31 range, so this is
275    /// not a 1:1 mapping.
276    pub fn map_char(ch: char) -> Char {
277        match ch {
278            '\u{0000}' => Char::Null,
279            '\u{0001}' => Char::SOH,
280            '\u{0002}' => Char::STX,
281            '\u{0003}' => Char::ETX,
282            '\u{0004}' => Char::EOT,
283            '\u{0005}' => Char::ENQ,
284            '\u{0006}' => Char::ACK,
285            '\u{0007}' => Char::BEL,
286            '\u{0008}' => Char::BS,
287            '\t' => Char::HT,
288            '\n' => Char::LF,
289            '\u{000b}' => Char::VT,
290            '\u{000c}' => Char::FF,
291            '\r' => Char::CR,
292            '\u{000e}' => Char::SO,
293            '\u{000f}' => Char::SI,
294            '\u{0010}' => Char::DLE,
295            '\u{0011}' => Char::DC1,
296            '\u{0012}' => Char::DC2,
297            '\u{0013}' => Char::DC3,
298            '\u{0014}' => Char::DC4,
299            '\u{0015}' => Char::NAK,
300            '\u{0016}' => Char::SYN,
301            '\u{0017}' => Char::ETB,
302            '\u{0018}' => Char::CAN,
303            '\u{0019}' => Char::EM,
304            '\u{001a}' => Char::SUB,
305            '\u{001b}' => Char::Escape,
306            '\u{001c}' => Char::FS,
307            '\u{001d}' => Char::GS,
308            '\u{001e}' => Char::RS,
309            '\u{001f}' => Char::US,
310            ' ' => Char::Space,
311            '!' => Char::ExclamationMark,
312            '"' => Char::QuotationMark,
313            '#' => Char::NumberSign,
314            '$' => Char::DollarSign,
315            '%' => Char::PercentSign,
316            '&' => Char::Ampersand,
317            '\'' => Char::Apostrophe,
318            '(' => Char::LeftParenthesis,
319            ')' => Char::RightParenthesis,
320            '*' => Char::Asterisk,
321            '+' => Char::PlusSign,
322            ',' => Char::Comma,
323            '-' => Char::HyphenMinus,
324            '.' => Char::FullStop,
325            '/' => Char::Solidus,
326            '0' => Char::DigitZero,
327            '1' => Char::DigitOne,
328            '2' => Char::DigitTwo,
329            '3' => Char::DigitThree,
330            '4' => Char::DigitFour,
331            '5' => Char::DigitFive,
332            '6' => Char::DigitSix,
333            '7' => Char::DigitSeven,
334            '8' => Char::DigitEight,
335            '9' => Char::DigitNine,
336            ':' => Char::Colon,
337            ';' => Char::Semicolon,
338            '<' => Char::LessThanSign,
339            '=' => Char::EqualsSign,
340            '>' => Char::GreaterThanSign,
341            '?' => Char::QuestionMark,
342            '@' => Char::CommercialAt,
343            'A' => Char::LatinCapitalLetterA,
344            'B' => Char::LatinCapitalLetterB,
345            'C' => Char::LatinCapitalLetterC,
346            'D' => Char::LatinCapitalLetterD,
347            'E' => Char::LatinCapitalLetterE,
348            'F' => Char::LatinCapitalLetterF,
349            'G' => Char::LatinCapitalLetterG,
350            'H' => Char::LatinCapitalLetterH,
351            'I' => Char::LatinCapitalLetterI,
352            'J' => Char::LatinCapitalLetterJ,
353            'K' => Char::LatinCapitalLetterK,
354            'L' => Char::LatinCapitalLetterL,
355            'M' => Char::LatinCapitalLetterM,
356            'N' => Char::LatinCapitalLetterN,
357            'O' => Char::LatinCapitalLetterO,
358            'P' => Char::LatinCapitalLetterP,
359            'Q' => Char::LatinCapitalLetterQ,
360            'R' => Char::LatinCapitalLetterR,
361            'S' => Char::LatinCapitalLetterS,
362            'T' => Char::LatinCapitalLetterT,
363            'U' => Char::LatinCapitalLetterU,
364            'V' => Char::LatinCapitalLetterV,
365            'W' => Char::LatinCapitalLetterW,
366            'X' => Char::LatinCapitalLetterX,
367            'Y' => Char::LatinCapitalLetterY,
368            'Z' => Char::LatinCapitalLetterZ,
369            '[' => Char::LeftSquareBracket,
370            '\\' => Char::ReverseSolidus,
371            ']' => Char::RightSquareBracket,
372            '^' => Char::CircumflexAccent,
373            '_' => Char::LowLine,
374            '`' => Char::GraveAccent,
375            'a' => Char::LatinSmallLetterA,
376            'b' => Char::LatinSmallLetterB,
377            'c' => Char::LatinSmallLetterC,
378            'd' => Char::LatinSmallLetterD,
379            'e' => Char::LatinSmallLetterE,
380            'f' => Char::LatinSmallLetterF,
381            'g' => Char::LatinSmallLetterG,
382            'h' => Char::LatinSmallLetterH,
383            'i' => Char::LatinSmallLetterI,
384            'j' => Char::LatinSmallLetterJ,
385            'k' => Char::LatinSmallLetterK,
386            'l' => Char::LatinSmallLetterL,
387            'm' => Char::LatinSmallLetterM,
388            'n' => Char::LatinSmallLetterN,
389            'o' => Char::LatinSmallLetterO,
390            'p' => Char::LatinSmallLetterP,
391            'q' => Char::LatinSmallLetterQ,
392            'r' => Char::LatinSmallLetterR,
393            's' => Char::LatinSmallLetterS,
394            't' => Char::LatinSmallLetterT,
395            'u' => Char::LatinSmallLetterU,
396            'v' => Char::LatinSmallLetterV,
397            'w' => Char::LatinSmallLetterW,
398            'x' => Char::LatinSmallLetterX,
399            'y' => Char::LatinSmallLetterY,
400            'z' => Char::LatinSmallLetterZ,
401            '{' => Char::LeftCurlyBracket,
402            '|' => Char::VerticalLine,
403            '}' => Char::RightCurlyBracket,
404            '~' => Char::Tilde,
405            '\u{007f}' => Char::Delete,
406            'Ç' => Char::LatinCapitalLetterCWithCedilla,
407            'ü' => Char::LatinSmallLetterUWithDiaeresis,
408            'é' => Char::LatinSmallLetterEWithAcute,
409            'â' => Char::LatinSmallLetterAWithCircumflex,
410            'ä' => Char::LatinSmallLetterAWithDiaeresis,
411            'à' => Char::LatinSmallLetterAWithGrave,
412            'å' => Char::LatinSmallLetterAWithRingAbove,
413            'ç' => Char::LatinSmallLetterCWithCedilla,
414            'ê' => Char::LatinSmallLetterEWithCircumflex,
415            'ë' => Char::LatinSmallLetterEWithDiaeresis,
416            'è' => Char::LatinSmallLetterEWithGrave,
417            'ï' => Char::LatinSmallLetterIWithDiaeresis,
418            'î' => Char::LatinSmallLetterIWithCircumflex,
419            'ì' => Char::LatinSmallLetterIWithGrave,
420            'Ä' => Char::LatinCapitalLetterAWithDiaeresis,
421            'Å' => Char::LatinCapitalLetterAWithRingAbove,
422            'É' => Char::LatinCapitalLetterEWithAcute,
423            'æ' => Char::LatinSmallLetterAe,
424            'Æ' => Char::LatinCapitalLetterAe,
425            'ô' => Char::LatinSmallLetterOWithCircumflex,
426            'ö' => Char::LatinSmallLetterOWithDiaeresis,
427            'ò' => Char::LatinSmallLetterOWithGrave,
428            'û' => Char::LatinSmallLetterUWithCircumflex,
429            'ù' => Char::LatinSmallLetterUWithGrave,
430            'ÿ' => Char::LatinSmallLetterYWithDiaeresis,
431            'Ö' => Char::LatinCapitalLetterOWithDiaeresis,
432            'Ü' => Char::LatinCapitalLetterUWithDiaeresis,
433            'ø' => Char::LatinSmallLetterOWithStroke,
434            '£' => Char::PoundSign,
435            'Ø' => Char::LatinCapitalLetterOWithStroke,
436            '×' => Char::MultiplicationSign,
437            'ƒ' => Char::LatinSmallLetterFWithHook,
438            'á' => Char::LatinSmallLetterAWithAcute,
439            'í' => Char::LatinSmallLetterIWithAcute,
440            'ó' => Char::LatinSmallLetterOWithAcute,
441            'ú' => Char::LatinSmallLetterUWithAcute,
442            'ñ' => Char::LatinSmallLetterNWithTilde,
443            'Ñ' => Char::LatinCapitalLetterNWithTilde,
444            'ª' => Char::FeminineOrdinalIndicator,
445            'º' => Char::MasculineOrdinalIndicator,
446            '¿' => Char::InvertedQuestionMark,
447            '®' => Char::RegisteredSign,
448            '¬' => Char::NotSign,
449            '½' => Char::VulgarFractionOneHalf,
450            '¼' => Char::VulgarFractionOneQuarter,
451            '¡' => Char::InvertedExclamationMark,
452            '«' => Char::LeftPointingDoubleAngleQuotationMark,
453            '»' => Char::RightPointingDoubleAngleQuotationMark,
454            '░' => Char::LightShade,
455            '▒' => Char::MediumShade,
456            '▓' => Char::DarkShade,
457            '│' => Char::BoxDrawingsLightVertical,
458            '┤' => Char::BoxDrawingsLightVerticalAndLeft,
459            'Á' => Char::LatinCapitalLetterAWithAcute,
460            'Â' => Char::LatinCapitalLetterAWithCircumflex,
461            'À' => Char::LatinCapitalLetterAWithGrave,
462            '©' => Char::CopyrightSign,
463            '╣' => Char::BoxDrawingsDoubleVerticalAndLeft,
464            '║' => Char::BoxDrawingsDoubleVertical,
465            '╗' => Char::BoxDrawingsDoubleDownAndLeft,
466            '╝' => Char::BoxDrawingsDoubleUpAndLeft,
467            '¢' => Char::CentSign,
468            '¥' => Char::YenSign,
469            '┐' => Char::BoxDrawingsLightDownAndLeft,
470            '└' => Char::BoxDrawingsLightUpAndRight,
471            '┴' => Char::BoxDrawingsLightUpAndHorizontal,
472            '┬' => Char::BoxDrawingsLightDownAndHorizontal,
473            '├' => Char::BoxDrawingsLightVerticalAndRight,
474            '─' => Char::BoxDrawingsLightHorizontal,
475            '┼' => Char::BoxDrawingsLightVerticalAndHorizontal,
476            'ã' => Char::LatinSmallLetterAWithTilde,
477            'Ã' => Char::LatinCapitalLetterAWithTilde,
478            '╚' => Char::BoxDrawingsDoubleUpAndRight,
479            '╔' => Char::BoxDrawingsDoubleDownAndRight,
480            '╩' => Char::BoxDrawingsDoubleUpAndHorizontal,
481            '╦' => Char::BoxDrawingsDoubleDownAndHorizontal,
482            '╠' => Char::BoxDrawingsDoubleVerticalAndRight,
483            '═' => Char::BoxDrawingsDoubleHorizontal,
484            '╬' => Char::BoxDrawingsDoubleVerticalAndHorizontal,
485            '¤' => Char::CurrencySign,
486            'ð' => Char::LatinSmallLetterEth,
487            'Ð' => Char::LatinCapitalLetterEth,
488            'Ê' => Char::LatinCapitalLetterEWithCircumflex,
489            'Ë' => Char::LatinCapitalLetterEWithDiaeresis,
490            'È' => Char::LatinCapitalLetterEWithGrave,
491            'ı' => Char::LatinSmallLetterDotlessI,
492            'Í' => Char::LatinCapitalLetterIWithAcute,
493            'Î' => Char::LatinCapitalLetterIWithCircumflex,
494            'Ï' => Char::LatinCapitalLetterIWithDiaeresis,
495            '┘' => Char::BoxDrawingsLightUpAndLeft,
496            '┌' => Char::BoxDrawingsLightDownAndRight,
497            '█' => Char::FullBlock,
498            '▄' => Char::LowerHalfBlock,
499            '¦' => Char::BrokenBar,
500            'Ì' => Char::LatinCapitalLetterIWithGrave,
501            '▀' => Char::UpperHalfBlock,
502            'Ó' => Char::LatinCapitalLetterOWithAcute,
503            'ß' => Char::LatinSmallLetterSharpS,
504            'Ô' => Char::LatinCapitalLetterOWithCircumflex,
505            'Ò' => Char::LatinCapitalLetterOWithGrave,
506            'õ' => Char::LatinSmallLetterOWithTilde,
507            'Õ' => Char::LatinCapitalLetterOWithTilde,
508            'µ' => Char::MicroSign,
509            'þ' => Char::LatinSmallLetterThorn,
510            'Þ' => Char::LatinCapitalLetterThorn,
511            'Ú' => Char::LatinCapitalLetterUWithAcute,
512            'Û' => Char::LatinCapitalLetterUWithCircumflex,
513            'Ù' => Char::LatinCapitalLetterUWithGrave,
514            'ý' => Char::LatinSmallLetterYWithAcute,
515            'Ý' => Char::LatinCapitalLetterYWithAcute,
516            '¯' => Char::Macron,
517            '´' => Char::AcuteAccent,
518            '\u{00ad}' => Char::SoftHyphen,
519            '±' => Char::PlusMinusSign,
520            '‗' => Char::DoubleLowLine,
521            '¾' => Char::VulgarFractionThreeQuarters,
522            '¶' => Char::PilcrowSign,
523            '§' => Char::SectionSign,
524            '÷' => Char::DivisionSign,
525            '¸' => Char::Cedilla,
526            '°' => Char::DegreeSign,
527            '¨' => Char::Diaeresis,
528            '·' => Char::MiddleDot,
529            '¹' => Char::SuperscriptOne,
530            '³' => Char::SuperscriptThree,
531            '²' => Char::SuperscriptTwo,
532            '■' => Char::BlackSquare,
533            '\u{00a0}' => Char::NoBreakSpace,
534            '☺' => Char::SOH,
535            '☻' => Char::STX,
536            '♥' => Char::ETX,
537            '♦' => Char::EOT,
538            '♣' => Char::ENQ,
539            '♠' => Char::ACK,
540            '•' => Char::BEL,
541            '◘' => Char::BS,
542            '○' => Char::HT,
543            '◙' => Char::LF,
544            '♂' => Char::VT,
545            '♀' => Char::FF,
546            '♪' => Char::CR,
547            '♫' => Char::SO,
548            '☼' => Char::SI,
549            '►' => Char::DLE,
550            '◄' => Char::DC1,
551            '↕' => Char::DC2,
552            '‼' => Char::DC3,
553            '▬' => Char::SYN,
554            '↨' => Char::ETB,
555            '↑' => Char::CAN,
556            '↓' => Char::EM,
557            '→' => Char::SUB,
558            '←' => Char::Escape,
559            '∟' => Char::FS,
560            '↔' => Char::GS,
561            '▲' => Char::RS,
562            '▼' => Char::US,
563            _ => Char::QuestionMark,
564        }
565    }
566
567    /// Convert an 8-bit integer into a `Char` (assumes input is in CodePage
568    /// 850).
569    pub fn from_byte(byte: u8) -> Char {
570        unsafe { ::core::mem::transmute(byte) }
571    }
572
573    /// Convert to an 8-bit integer.
574    pub fn to_byte(self) -> u8 {
575        unsafe { ::core::mem::transmute(self) }
576    }
577}
578
579// End of file