/*
* Copyright (c) Huawei Technologies Co., Ltd. 2022-2024. All rights reserved.
*/
package zip4cj.headers
let encode_arr: Array<Rune> = [
r'\u{00}', // 0x0000 -> NULL
r'\u{01}', // 0x0001 -> START OF HEADING
r'\u{02}', // 0x0002 -> START OF TEXT
r'\u{03}', // 0x0003 -> END OF TEXT
r'\u{04}', // 0x0004 -> END OF TRANSMISSION
r'\u{05}', // 0x0005 -> ENQUIRY
r'\u{06}', // 0x0006 -> ACKNOWLEDGE
r'\u{07}', // 0x0007 -> BELL
r'\u{08}', // 0x0008 -> BACKSPACE
r'\t', // 0x0009 -> HORIZONTAL TABULATION
r'\n', // 0x000a -> LINE FEED
r'\u{0b}', // 0x000b -> VERTICAL TABULATION
r'\u{0c}', // 0x000c -> FORM FEED
r'\r', // 0x000d -> CARRIAGE RETURN
r'\u{0e}', // 0x000e -> SHIFT OUT
r'\u{0f}', // 0x000f -> SHIFT IN
r'\u{10}', // 0x0010 -> DATA LINK ESCAPE
r'\u{11}', // 0x0011 -> DEVICE CONTROL ONE
r'\u{12}', // 0x0012 -> DEVICE CONTROL TWO
r'\u{13}', // 0x0013 -> DEVICE CONTROL THREE
r'\u{14}', // 0x0014 -> DEVICE CONTROL FOUR
r'\u{15}', // 0x0015 -> NEGATIVE ACKNOWLEDGE
r'\u{16}', // 0x0016 -> SYNCHRONOUS IDLE
r'\u{17}', // 0x0017 -> END OF TRANSMISSION BLOCK
r'\u{18}', // 0x0018 -> CANCEL
r'\u{19}', // 0x0019 -> END OF MEDIUM
r'\u{1a}', // 0x001a -> SUBSTITUTE
r'\u{1b}', // 0x001b -> ESCAPE
r'\u{1c}', // 0x001c -> FILE SEPARATOR
r'\u{1d}', // 0x001d -> GROUP SEPARATOR
r'\u{1e}', // 0x001e -> RECORD SEPARATOR
r'\u{1f}', // 0x001f -> UNIT SEPARATOR
r' ', // 0x0020 -> SPACE
r'!', // 0x0021 -> EXCLAMATION MARK
r'"', // 0x0022 -> QUOTATION MARK
r'#', // 0x0023 -> NUMBER SIGN
r'$', // 0x0024 -> DOLLAR SIGN
r'%', // 0x0025 -> PERCENT SIGN
r'&', // 0x0026 -> AMPERSAND
r'\'', // 0x0027 -> APOSTROPHE
r'(', // 0x0028 -> LEFT PARENTHESIS
r')', // 0x0029 -> RIGHT PARENTHESIS
r'*', // 0x002a -> ASTERISK
r'+', // 0x002b -> PLUS SIGN
r',', // 0x002c -> COMMA
r'-', // 0x002d -> HYPHEN-MINUS
r'.', // 0x002e -> FULL STOP
r'/', // 0x002f -> SOLIDUS
r'0', // 0x0030 -> DIGIT ZERO
r'1', // 0x0031 -> DIGIT ONE
r'2', // 0x0032 -> DIGIT TWO
r'3', // 0x0033 -> DIGIT THREE
r'4', // 0x0034 -> DIGIT FOUR
r'5', // 0x0035 -> DIGIT FIVE
r'6', // 0x0036 -> DIGIT SIX
r'7', // 0x0037 -> DIGIT SEVEN
r'8', // 0x0038 -> DIGIT EIGHT
r'9', // 0x0039 -> DIGIT NINE
r':', // 0x003a -> COLON
r';', // 0x003b -> SEMICOLON
r'<', // 0x003c -> LESS-THAN SIGN
r'=', // 0x003d -> EQUALS SIGN
r'>', // 0x003e -> GREATER-THAN SIGN
r'?', // 0x003f -> QUESTION MARK
r'@', // 0x0040 -> COMMERCIAL AT
r'A', // 0x0041 -> LATIN CAPITAL LETTER A
r'B', // 0x0042 -> LATIN CAPITAL LETTER B
r'C', // 0x0043 -> LATIN CAPITAL LETTER C
r'D', // 0x0044 -> LATIN CAPITAL LETTER D
r'E', // 0x0045 -> LATIN CAPITAL LETTER E
r'F', // 0x0046 -> LATIN CAPITAL LETTER F
r'G', // 0x0047 -> LATIN CAPITAL LETTER G
r'H', // 0x0048 -> LATIN CAPITAL LETTER H
r'I', // 0x0049 -> LATIN CAPITAL LETTER I
r'J', // 0x004a -> LATIN CAPITAL LETTER J
r'K', // 0x004b -> LATIN CAPITAL LETTER K
r'L', // 0x004c -> LATIN CAPITAL LETTER L
r'M', // 0x004d -> LATIN CAPITAL LETTER M
r'N', // 0x004e -> LATIN CAPITAL LETTER N
r'O', // 0x004f -> LATIN CAPITAL LETTER O
r'P', // 0x0050 -> LATIN CAPITAL LETTER P
r'Q', // 0x0051 -> LATIN CAPITAL LETTER Q
r'R', // 0x0052 -> LATIN CAPITAL LETTER R
r'S', // 0x0053 -> LATIN CAPITAL LETTER S
r'T', // 0x0054 -> LATIN CAPITAL LETTER T
r'U', // 0x0055 -> LATIN CAPITAL LETTER U
r'V', // 0x0056 -> LATIN CAPITAL LETTER V
r'W', // 0x0057 -> LATIN CAPITAL LETTER W
r'X', // 0x0058 -> LATIN CAPITAL LETTER X
r'Y', // 0x0059 -> LATIN CAPITAL LETTER Y
r'Z', // 0x005a -> LATIN CAPITAL LETTER Z
r'[', // 0x005b -> LEFT SQUARE BRACKET
r'\\', // 0x005c -> REVERSE SOLIDUS
r']', // 0x005d -> RIGHT SQUARE BRACKET
r'^', // 0x005e -> CIRCUMFLEX ACCENT
r'_', // 0x005f -> LOW LINE
r'`', // 0x0060 -> GRAVE ACCENT
r'a', // 0x0061 -> LATIN SMALL LETTER A
r'b', // 0x0062 -> LATIN SMALL LETTER B
r'c', // 0x0063 -> LATIN SMALL LETTER C
r'd', // 0x0064 -> LATIN SMALL LETTER D
r'e', // 0x0065 -> LATIN SMALL LETTER E
r'f', // 0x0066 -> LATIN SMALL LETTER F
r'g', // 0x0067 -> LATIN SMALL LETTER G
r'h', // 0x0068 -> LATIN SMALL LETTER H
r'i', // 0x0069 -> LATIN SMALL LETTER I
r'j', // 0x006a -> LATIN SMALL LETTER J
r'k', // 0x006b -> LATIN SMALL LETTER K
r'l', // 0x006c -> LATIN SMALL LETTER L
r'm', // 0x006d -> LATIN SMALL LETTER M
r'n', // 0x006e -> LATIN SMALL LETTER N
r'o', // 0x006f -> LATIN SMALL LETTER O
r'p', // 0x0070 -> LATIN SMALL LETTER P
r'q', // 0x0071 -> LATIN SMALL LETTER Q
r'r', // 0x0072 -> LATIN SMALL LETTER R
r's', // 0x0073 -> LATIN SMALL LETTER S
r't', // 0x0074 -> LATIN SMALL LETTER T
r'u', // 0x0075 -> LATIN SMALL LETTER U
r'v', // 0x0076 -> LATIN SMALL LETTER V
r'w', // 0x0077 -> LATIN SMALL LETTER W
r'x', // 0x0078 -> LATIN SMALL LETTER X
r'y', // 0x0079 -> LATIN SMALL LETTER Y
r'z', // 0x007a -> LATIN SMALL LETTER Z
r'{', // 0x007b -> LEFT CURLY BRACKET
r'|', // 0x007c -> VERTICAL LINE
r'}', // 0x007d -> RIGHT CURLY BRACKET
r'~', // 0x007e -> TILDE
r'\u{7f}', // 0x007f -> DELETE
r'\u{c7}', // 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA
r'\u{fc}', // 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS
r'\u{e9}', // 0x0082 -> LATIN SMALL LETTER E WITH ACUTE
r'\u{e2}', // 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX
r'\u{e4}', // 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS
r'\u{e0}', // 0x0085 -> LATIN SMALL LETTER A WITH GRAVE
r'\u{e5}', // 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE
r'\u{e7}', // 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA
r'\u{ea}', // 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX
r'\u{eb}', // 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS
r'\u{e8}', // 0x008a -> LATIN SMALL LETTER E WITH GRAVE
r'\u{ef}', // 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS
r'\u{ee}', // 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX
r'\u{ec}', // 0x008d -> LATIN SMALL LETTER I WITH GRAVE
r'\u{c4}', // 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS
r'\u{c5}', // 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE
r'\u{c9}', // 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE
r'\u{e6}', // 0x0091 -> LATIN SMALL LIGATURE AE
r'\u{c6}', // 0x0092 -> LATIN CAPITAL LIGATURE AE
r'\u{f4}', // 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX
r'\u{f6}', // 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS
r'\u{f2}', // 0x0095 -> LATIN SMALL LETTER O WITH GRAVE
r'\u{fb}', // 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX
r'\u{f9}', // 0x0097 -> LATIN SMALL LETTER U WITH GRAVE
r'\u{ff}', // 0x0098 -> LATIN SMALL LETTER Y WITH DIAERESIS
r'\u{d6}', // 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS
r'\u{dc}', // 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS
r'\u{a2}', // 0x009b -> CENT SIGN
r'\u{a3}', // 0x009c -> POUND SIGN
r'\u{a5}', // 0x009d -> YEN SIGN
r'\u{20a7}', // 0x009e -> PESETA SIGN
r'\u{0192}', // 0x009f -> LATIN SMALL LETTER F WITH HOOK
r'\u{e1}', // 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE
r'\u{ed}', // 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE
r'\u{f3}', // 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE
r'\u{fa}', // 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE
r'\u{f1}', // 0x00a4 -> LATIN SMALL LETTER N WITH TILDE
r'\u{d1}', // 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE
r'\u{aa}', // 0x00a6 -> FEMININE ORDINAL INDICATOR
r'\u{ba}', // 0x00a7 -> MASCULINE ORDINAL INDICATOR
r'\u{bf}', // 0x00a8 -> INVERTED QUESTION MARK
r'\u{2310}', // 0x00a9 -> REVERSED NOT SIGN
r'\u{ac}', // 0x00aa -> NOT SIGN
r'\u{bd}', // 0x00ab -> VULGAR FRACTION ONE HALF
r'\u{bc}', // 0x00ac -> VULGAR FRACTION ONE QUARTER
r'\u{a1}', // 0x00ad -> INVERTED EXCLAMATION MARK
r'\u{ab}', // 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
r'\u{bb}', // 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
r'\u{2591}', // 0x00b0 -> LIGHT SHADE
r'\u{2592}', // 0x00b1 -> MEDIUM SHADE
r'\u{2593}', // 0x00b2 -> DARK SHADE
r'\u{2502}', // 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL
r'\u{2524}', // 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT
r'\u{2561}', // 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
r'\u{2562}', // 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
r'\u{2556}', // 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
r'\u{2555}', // 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
r'\u{2563}', // 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT
r'\u{2551}', // 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL
r'\u{2557}', // 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT
r'\u{255d}', // 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT
r'\u{255c}', // 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
r'\u{255b}', // 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
r'\u{2510}', // 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT
r'\u{2514}', // 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT
r'\u{2534}', // 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL
r'\u{252c}', // 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
r'\u{251c}', // 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT
r'\u{2500}', // 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL
r'\u{253c}', // 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
r'\u{255e}', // 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
r'\u{255f}', // 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
r'\u{255a}', // 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT
r'\u{2554}', // 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT
r'\u{2569}', // 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL
r'\u{2566}', // 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
r'\u{2560}', // 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
r'\u{2550}', // 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL
r'\u{256c}', // 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
r'\u{2567}', // 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
r'\u{2568}', // 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
r'\u{2564}', // 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
r'\u{2565}', // 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
r'\u{2559}', // 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
r'\u{2558}', // 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
r'\u{2552}', // 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
r'\u{2553}', // 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
r'\u{256b}', // 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
r'\u{256a}', // 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
r'\u{2518}', // 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT
r'\u{250c}', // 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT
r'\u{2588}', // 0x00db -> FULL BLOCK
r'\u{2584}', // 0x00dc -> LOWER HALF BLOCK
r'\u{258c}', // 0x00dd -> LEFT HALF BLOCK
r'\u{2590}', // 0x00de -> RIGHT HALF BLOCK
r'\u{2580}', // 0x00df -> UPPER HALF BLOCK
r'\u{03b1}', // 0x00e0 -> GREEK SMALL LETTER ALPHA
r'\u{df}', // 0x00e1 -> LATIN SMALL LETTER SHARP S
r'\u{0393}', // 0x00e2 -> GREEK CAPITAL LETTER GAMMA
r'\u{03c0}', // 0x00e3 -> GREEK SMALL LETTER PI
r'\u{03a3}', // 0x00e4 -> GREEK CAPITAL LETTER SIGMA
r'\u{03c3}', // 0x00e5 -> GREEK SMALL LETTER SIGMA
r'\u{b5}', // 0x00e6 -> MICRO SIGN
r'\u{03c4}', // 0x00e7 -> GREEK SMALL LETTER TAU
r'\u{03a6}', // 0x00e8 -> GREEK CAPITAL LETTER PHI
r'\u{0398}', // 0x00e9 -> GREEK CAPITAL LETTER THETA
r'\u{03a9}', // 0x00ea -> GREEK CAPITAL LETTER OMEGA
r'\u{03b4}', // 0x00eb -> GREEK SMALL LETTER DELTA
r'\u{221e}', // 0x00ec -> INFINITY
r'\u{03c6}', // 0x00ed -> GREEK SMALL LETTER PHI
r'\u{03b5}', // 0x00ee -> GREEK SMALL LETTER EPSILON
r'\u{2229}', // 0x00ef -> INTERSECTION
r'\u{2261}', // 0x00f0 -> IDENTICAL TO
r'\u{b1}', // 0x00f1 -> PLUS-MINUS SIGN
r'\u{2265}', // 0x00f2 -> GREATER-THAN OR EQUAL TO
r'\u{2264}', // 0x00f3 -> LESS-THAN OR EQUAL TO
r'\u{2320}', // 0x00f4 -> TOP HALF INTEGRAL
r'\u{2321}', // 0x00f5 -> BOTTOM HALF INTEGRAL
r'\u{f7}', // 0x00f6 -> DIVISION SIGN
r'\u{2248}', // 0x00f7 -> ALMOST EQUAL TO
r'\u{b0}', // 0x00f8 -> DEGREE SIGN
r'\u{2219}', // 0x00f9 -> BULLET OPERATOR
r'\u{b7}', // 0x00fa -> MIDDLE DOT
r'\u{221a}', // 0x00fb -> SQUARE ROOT
r'\u{207f}', // 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N
r'\u{b2}', // 0x00fd -> SUPERSCRIPT TWO
r'\u{25a0}', // 0x00fe -> BLACK SQUARE
r'\u{a0}' // 0x00ff -> NO-BREAK SPACE
]
let encode_map: HashMap<Int64, Rune> = HashMap<Int64, Rune>(
[
(0x0080, r'\u{00c7}'), // LATIN CAPITAL LETTER C WITH CEDILLA
(0x0081, r'\u{00fc}'), // LATIN SMALL LETTER U WITH DIAERESIS
(0x0082, r'\u{00e9}'), // LATIN SMALL LETTER E WITH ACUTE
(0x0083, r'\u{00e2}'), // LATIN SMALL LETTER A WITH CIRCUMFLEX
(0x0084, r'\u{00e4}'), // LATIN SMALL LETTER A WITH DIAERESIS
(0x0085, r'\u{00e0}'), // LATIN SMALL LETTER A WITH GRAVE
(0x0086, r'\u{00e5}'), // LATIN SMALL LETTER A WITH RING ABOVE
(0x0087, r'\u{00e7}'), // LATIN SMALL LETTER C WITH CEDILLA
(0x0088, r'\u{00ea}'), // LATIN SMALL LETTER E WITH CIRCUMFLEX
(0x0089, r'\u{00eb}'), // LATIN SMALL LETTER E WITH DIAERESIS
(0x008a, r'\u{00e8}'), // LATIN SMALL LETTER E WITH GRAVE
(0x008b, r'\u{00ef}'), // LATIN SMALL LETTER I WITH DIAERESIS
(0x008c, r'\u{00ee}'), // LATIN SMALL LETTER I WITH CIRCUMFLEX
(0x008d, r'\u{00ec}'), // LATIN SMALL LETTER I WITH GRAVE
(0x008e, r'\u{00c4}'), // LATIN CAPITAL LETTER A WITH DIAERESIS
(0x008f, r'\u{00c5}'), // LATIN CAPITAL LETTER A WITH RING ABOVE
(0x0090, r'\u{00c9}'), // LATIN CAPITAL LETTER E WITH ACUTE
(0x0091, r'\u{00e6}'), // LATIN SMALL LIGATURE AE
(0x0092, r'\u{00c6}'), // LATIN CAPITAL LIGATURE AE
(0x0093, r'\u{00f4}'), // LATIN SMALL LETTER O WITH CIRCUMFLEX
(0x0094, r'\u{00f6}'), // LATIN SMALL LETTER O WITH DIAERESIS
(0x0095, r'\u{00f2}'), // LATIN SMALL LETTER O WITH GRAVE
(0x0096, r'\u{00fb}'), // LATIN SMALL LETTER U WITH CIRCUMFLEX
(0x0097, r'\u{00f9}'), // LATIN SMALL LETTER U WITH GRAVE
(0x0098, r'\u{00ff}'), // LATIN SMALL LETTER Y WITH DIAERESIS
(0x0099, r'\u{00d6}'), // LATIN CAPITAL LETTER O WITH DIAERESIS
(0x009a, r'\u{00dc}'), // LATIN CAPITAL LETTER U WITH DIAERESIS
(0x009b, r'\u{00a2}'), // CENT SIGN
(0x009c, r'\u{00a3}'), // POUND SIGN
(0x009d, r'\u{00a5}'), // YEN SIGN
(0x009e, r'\u{20a7}'), // PESETA SIGN
(0x009f, r'\u{0192}'), // LATIN SMALL LETTER F WITH HOOK
(0x00a0, r'\u{00e1}'), // LATIN SMALL LETTER A WITH ACUTE
(0x00a1, r'\u{00ed}'), // LATIN SMALL LETTER I WITH ACUTE
(0x00a2, r'\u{00f3}'), // LATIN SMALL LETTER O WITH ACUTE
(0x00a3, r'\u{00fa}'), // LATIN SMALL LETTER U WITH ACUTE
(0x00a4, r'\u{00f1}'), // LATIN SMALL LETTER N WITH TILDE
(0x00a5, r'\u{00d1}'), // LATIN CAPITAL LETTER N WITH TILDE
(0x00a6, r'\u{00aa}'), // FEMININE ORDINAL INDICATOR
(0x00a7, r'\u{00ba}'), // MASCULINE ORDINAL INDICATOR
(0x00a8, r'\u{00bf}'), // INVERTED QUESTION MARK
(0x00a9, r'\u{2310}'), // REVERSED NOT SIGN
(0x00aa, r'\u{00ac}'), // NOT SIGN
(0x00ab, r'\u{00bd}'), // VULGAR FRACTION ONE HALF
(0x00ac, r'\u{00bc}'), // VULGAR FRACTION ONE QUARTER
(0x00ad, r'\u{00a1}'), // INVERTED EXCLAMATION MARK
(0x00ae, r'\u{00ab}'), // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
(0x00af, r'\u{00bb}'), // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
(0x00b0, r'\u{2591}'), // LIGHT SHADE
(0x00b1, r'\u{2592}'), // MEDIUM SHADE
(0x00b2, r'\u{2593}'), // DARK SHADE
(0x00b3, r'\u{2502}'), // BOX DRAWINGS LIGHT VERTICAL
(0x00b4, r'\u{2524}'), // BOX DRAWINGS LIGHT VERTICAL AND LEFT
(0x00b5, r'\u{2561}'), // BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
(0x00b6, r'\u{2562}'), // BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
(0x00b7, r'\u{2556}'), // BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
(0x00b8, r'\u{2555}'), // BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
(0x00b9, r'\u{2563}'), // BOX DRAWINGS DOUBLE VERTICAL AND LEFT
(0x00ba, r'\u{2551}'), // BOX DRAWINGS DOUBLE VERTICAL
(0x00bb, r'\u{2557}'), // BOX DRAWINGS DOUBLE DOWN AND LEFT
(0x00bc, r'\u{255d}'), // BOX DRAWINGS DOUBLE UP AND LEFT
(0x00bd, r'\u{255c}'), // BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
(0x00be, r'\u{255b}'), // BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
(0x00bf, r'\u{2510}'), // BOX DRAWINGS LIGHT DOWN AND LEFT
(0x00c0, r'\u{2514}'), // BOX DRAWINGS LIGHT UP AND RIGHT
(0x00c1, r'\u{2534}'), // BOX DRAWINGS LIGHT UP AND HORIZONTAL
(0x00c2, r'\u{252c}'), // BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
(0x00c3, r'\u{251c}'), // BOX DRAWINGS LIGHT VERTICAL AND RIGHT
(0x00c4, r'\u{2500}'), // BOX DRAWINGS LIGHT HORIZONTAL
(0x00c5, r'\u{253c}'), // BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
(0x00c6, r'\u{255e}'), // BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
(0x00c7, r'\u{255f}'), // BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
(0x00c8, r'\u{255a}'), // BOX DRAWINGS DOUBLE UP AND RIGHT
(0x00c9, r'\u{2554}'), // BOX DRAWINGS DOUBLE DOWN AND RIGHT
(0x00ca, r'\u{2569}'), // BOX DRAWINGS DOUBLE UP AND HORIZONTAL
(0x00cb, r'\u{2566}'), // BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
(0x00cc, r'\u{2560}'), // BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
(0x00cd, r'\u{2550}'), // BOX DRAWINGS DOUBLE HORIZONTAL
(0x00ce, r'\u{256c}'), // BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
(0x00cf, r'\u{2567}'), // BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
(0x00d0, r'\u{2568}'), // BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
(0x00d1, r'\u{2564}'), // BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
(0x00d2, r'\u{2565}'), // BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
(0x00d3, r'\u{2559}'), // BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
(0x00d4, r'\u{2558}'), // BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
(0x00d5, r'\u{2552}'), // BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
(0x00d6, r'\u{2553}'), // BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
(0x00d7, r'\u{256b}'), // BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
(0x00d8, r'\u{256a}'), // BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
(0x00d9, r'\u{2518}'), // BOX DRAWINGS LIGHT UP AND LEFT
(0x00da, r'\u{250c}'), // BOX DRAWINGS LIGHT DOWN AND RIGHT
(0x00db, r'\u{2588}'), // FULL BLOCK
(0x00dc, r'\u{2584}'), // LOWER HALF BLOCK
(0x00dd, r'\u{258c}'), // LEFT HALF BLOCK
(0x00de, r'\u{2590}'), // RIGHT HALF BLOCK
(0x00df, r'\u{2580}'), // UPPER HALF BLOCK
(0x00e0, r'\u{03b1}'), // GREEK SMALL LETTER ALPHA
(0x00e1, r'\u{00df}'), // LATIN SMALL LETTER SHARP S
(0x00e2, r'\u{0393}'), // GREEK CAPITAL LETTER GAMMA
(0x00e3, r'\u{03c0}'), // GREEK SMALL LETTER PI
(0x00e4, r'\u{03a3}'), // GREEK CAPITAL LETTER SIGMA
(0x00e5, r'\u{03c3}'), // GREEK SMALL LETTER SIGMA
(0x00e6, r'\u{00b5}'), // MICRO SIGN
(0x00e7, r'\u{03c4}'), // GREEK SMALL LETTER TAU
(0x00e8, r'\u{03a6}'), // GREEK CAPITAL LETTER PHI
(0x00e9, r'\u{0398}'), // GREEK CAPITAL LETTER THETA
(0x00ea, r'\u{03a9}'), // GREEK CAPITAL LETTER OMEGA
(0x00eb, r'\u{03b4}'), // GREEK SMALL LETTER DELTA
(0x00ec, r'\u{221e}'), // INFINITY
(0x00ed, r'\u{03c6}'), // GREEK SMALL LETTER PHI
(0x00ee, r'\u{03b5}'), // GREEK SMALL LETTER EPSILON
(0x00ef, r'\u{2229}'), // INTERSECTION
(0x00f0, r'\u{2261}'), // IDENTICAL TO
(0x00f1, r'\u{00b1}'), // PLUS-MINUS SIGN
(0x00f2, r'\u{2265}'), // GREATER-THAN OR EQUAL TO
(0x00f3, r'\u{2264}'), // LESS-THAN OR EQUAL TO
(0x00f4, r'\u{2320}'), // TOP HALF INTEGRAL
(0x00f5, r'\u{2321}'), // BOTTOM HALF INTEGRAL
(0x00f6, r'\u{00f7}'), // DIVISION SIGN
(0x00f7, r'\u{2248}'), // ALMOST EQUAL TO
(0x00f8, r'\u{00b0}'), // DEGREE SIGN
(0x00f9, r'\u{2219}'), // BULLET OPERATOR
(0x00fa, r'\u{00b7}'), // MIDDLE DOT
(0x00fb, r'\u{221a}'), // SQUARE ROOT
(0x00fc, r'\u{207f}'), // SUPERSCRIPT LATIN SMALL LETTER N
(0x00fd, r'\u{00b2}'), // SUPERSCRIPT TWO
(0x00fe, r'\u{25a0}'), // BLACK SQUARE
(0x00ff, r'\u{00a0}') // NO-BREAK SPACE
]
)
let decode_map = HashMap<Rune, Rune>(
[
(r'\u{0000}', r'\u{0000}'), // NULL
(r'\u{0001}', r'\u{0001}'), // START OF HEADING
(r'\u{0002}', r'\u{0002}'), // START OF TEXT
(r'\u{0003}', r'\u{0003}'), // END OF TEXT
(r'\u{0004}', r'\u{0004}'), // END OF TRANSMISSION
(r'\u{0005}', r'\u{0005}'), // ENQUIRY
(r'\u{0006}', r'\u{0006}'), // ACKNOWLEDGE
(r'\u{0007}', r'\u{0007}'), // BELL
(r'\u{0008}', r'\u{0008}'), // BACKSPACE
(r'\u{0009}', r'\u{0009}'), // HORIZONTAL TABULATION
(r'\u{000a}', r'\u{000a}'), // LINE FEED
(r'\u{000b}', r'\u{000b}'), // VERTICAL TABULATION
(r'\u{000c}', r'\u{000c}'), // FORM FEED
(r'\u{000d}', r'\u{000d}'), // CARRIAGE RETURN
(r'\u{000e}', r'\u{000e}'), // SHIFT OUT
(r'\u{000f}', r'\u{000f}'), // SHIFT IN
(r'\u{0010}', r'\u{0010}'), // DATA LINK ESCAPE
(r'\u{0011}', r'\u{0011}'), // DEVICE CONTROL ONE
(r'\u{0012}', r'\u{0012}'), // DEVICE CONTROL TWO
(r'\u{0013}', r'\u{0013}'), // DEVICE CONTROL THREE
(r'\u{0014}', r'\u{0014}'), // DEVICE CONTROL FOUR
(r'\u{0015}', r'\u{0015}'), // NEGATIVE ACKNOWLEDGE
(r'\u{0016}', r'\u{0016}'), // SYNCHRONOUS IDLE
(r'\u{0017}', r'\u{0017}'), // END OF TRANSMISSION BLOCK
(r'\u{0018}', r'\u{0018}'), // CANCEL
(r'\u{0019}', r'\u{0019}'), // END OF MEDIUM
(r'\u{001a}', r'\u{001a}'), // SUBSTITUTE
(r'\u{001b}', r'\u{001b}'), // ESCAPE
(r'\u{001c}', r'\u{001c}'), // FILE SEPARATOR
(r'\u{001d}', r'\u{001d}'), // GROUP SEPARATOR
(r'\u{001e}', r'\u{001e}'), // RECORD SEPARATOR
(r'\u{001f}', r'\u{001f}'), // UNIT SEPARATOR
(r'\u{0020}', r'\u{0020}'), // SPACE
(r'\u{0021}', r'\u{0021}'), // EXCLAMATION MARK
(r'\u{0022}', r'\u{0022}'), // QUOTATION MARK
(r'\u{0023}', r'\u{0023}'), // NUMBER SIGN
(r'\u{0024}', r'\u{0024}'), // DOLLAR SIGN
(r'\u{0025}', r'\u{0025}'), // PERCENT SIGN
(r'\u{0026}', r'\u{0026}'), // AMPERSAND
(r'\u{0027}', r'\u{0027}'), // APOSTROPHE
(r'\u{0028}', r'\u{0028}'), // LEFT PARENTHESIS
(r'\u{0029}', r'\u{0029}'), // RIGHT PARENTHESIS
(r'\u{002a}', r'\u{002a}'), // ASTERISK
(r'\u{002b}', r'\u{002b}'), // PLUS SIGN
(r'\u{002c}', r'\u{002c}'), // COMMA
(r'\u{002d}', r'\u{002d}'), // HYPHEN-MINUS
(r'\u{002e}', r'\u{002e}'), // FULL STOP
(r'\u{002f}', r'\u{002f}'), // SOLIDUS
(r'\u{0030}', r'\u{0030}'), // DIGIT ZERO
(r'\u{0031}', r'\u{0031}'), // DIGIT ONE
(r'\u{0032}', r'\u{0032}'), // DIGIT TWO
(r'\u{0033}', r'\u{0033}'), // DIGIT THREE
(r'\u{0034}', r'\u{0034}'), // DIGIT FOUR
(r'\u{0035}', r'\u{0035}'), // DIGIT FIVE
(r'\u{0036}', r'\u{0036}'), // DIGIT SIX
(r'\u{0037}', r'\u{0037}'), // DIGIT SEVEN
(r'\u{0038}', r'\u{0038}'), // DIGIT EIGHT
(r'\u{0039}', r'\u{0039}'), // DIGIT NINE
(r'\u{003a}', r'\u{003a}'), // COLON
(r'\u{003b}', r'\u{003b}'), // SEMICOLON
(r'\u{003c}', r'\u{003c}'), // LESS-THAN SIGN
(r'\u{003d}', r'\u{003d}'), // EQUALS SIGN
(r'\u{003e}', r'\u{003e}'), // GREATER-THAN SIGN
(r'\u{003f}', r'\u{003f}'), // QUESTION MARK
(r'\u{0040}', r'\u{0040}'), // COMMERCIAL AT
(r'\u{0041}', r'\u{0041}'), // LATIN CAPITAL LETTER A
(r'\u{0042}', r'\u{0042}'), // LATIN CAPITAL LETTER B
(r'\u{0043}', r'\u{0043}'), // LATIN CAPITAL LETTER C
(r'\u{0044}', r'\u{0044}'), // LATIN CAPITAL LETTER D
(r'\u{0045}', r'\u{0045}'), // LATIN CAPITAL LETTER E
(r'\u{0046}', r'\u{0046}'), // LATIN CAPITAL LETTER F
(r'\u{0047}', r'\u{0047}'), // LATIN CAPITAL LETTER G
(r'\u{0048}', r'\u{0048}'), // LATIN CAPITAL LETTER H
(r'\u{0049}', r'\u{0049}'), // LATIN CAPITAL LETTER I
(r'\u{004a}', r'\u{004a}'), // LATIN CAPITAL LETTER J
(r'\u{004b}', r'\u{004b}'), // LATIN CAPITAL LETTER K
(r'\u{004c}', r'\u{004c}'), // LATIN CAPITAL LETTER L
(r'\u{004d}', r'\u{004d}'), // LATIN CAPITAL LETTER M
(r'\u{004e}', r'\u{004e}'), // LATIN CAPITAL LETTER N
(r'\u{004f}', r'\u{004f}'), // LATIN CAPITAL LETTER O
(r'\u{0050}', r'\u{0050}'), // LATIN CAPITAL LETTER P
(r'\u{0051}', r'\u{0051}'), // LATIN CAPITAL LETTER Q
(r'\u{0052}', r'\u{0052}'), // LATIN CAPITAL LETTER R
(r'\u{0053}', r'\u{0053}'), // LATIN CAPITAL LETTER S
(r'\u{0054}', r'\u{0054}'), // LATIN CAPITAL LETTER T
(r'\u{0055}', r'\u{0055}'), // LATIN CAPITAL LETTER U
(r'\u{0056}', r'\u{0056}'), // LATIN CAPITAL LETTER V
(r'\u{0057}', r'\u{0057}'), // LATIN CAPITAL LETTER W
(r'\u{0058}', r'\u{0058}'), // LATIN CAPITAL LETTER X
(r'\u{0059}', r'\u{0059}'), // LATIN CAPITAL LETTER Y
(r'\u{005a}', r'\u{005a}'), // LATIN CAPITAL LETTER Z
(r'\u{005b}', r'\u{005b}'), // LEFT SQUARE BRACKET
(r'\u{005c}', r'\u{005c}'), // REVERSE SOLIDUS
(r'\u{005d}', r'\u{005d}'), // RIGHT SQUARE BRACKET
(r'\u{005e}', r'\u{005e}'), // CIRCUMFLEX ACCENT
(r'\u{005f}', r'\u{005f}'), // LOW LINE
(r'\u{0060}', r'\u{0060}'), // GRAVE ACCENT
(r'\u{0061}', r'\u{0061}'), // LATIN SMALL LETTER A
(r'\u{0062}', r'\u{0062}'), // LATIN SMALL LETTER B
(r'\u{0063}', r'\u{0063}'), // LATIN SMALL LETTER C
(r'\u{0064}', r'\u{0064}'), // LATIN SMALL LETTER D
(r'\u{0065}', r'\u{0065}'), // LATIN SMALL LETTER E
(r'\u{0066}', r'\u{0066}'), // LATIN SMALL LETTER F
(r'\u{0067}', r'\u{0067}'), // LATIN SMALL LETTER G
(r'\u{0068}', r'\u{0068}'), // LATIN SMALL LETTER H
(r'\u{0069}', r'\u{0069}'), // LATIN SMALL LETTER I
(r'\u{006a}', r'\u{006a}'), // LATIN SMALL LETTER J
(r'\u{006b}', r'\u{006b}'), // LATIN SMALL LETTER K
(r'\u{006c}', r'\u{006c}'), // LATIN SMALL LETTER L
(r'\u{006d}', r'\u{006d}'), // LATIN SMALL LETTER M
(r'\u{006e}', r'\u{006e}'), // LATIN SMALL LETTER N
(r'\u{006f}', r'\u{006f}'), // LATIN SMALL LETTER O
(r'\u{0070}', r'\u{0070}'), // LATIN SMALL LETTER P
(r'\u{0071}', r'\u{0071}'), // LATIN SMALL LETTER Q
(r'\u{0072}', r'\u{0072}'), // LATIN SMALL LETTER R
(r'\u{0073}', r'\u{0073}'), // LATIN SMALL LETTER S
(r'\u{0074}', r'\u{0074}'), // LATIN SMALL LETTER T
(r'\u{0075}', r'\u{0075}'), // LATIN SMALL LETTER U
(r'\u{0076}', r'\u{0076}'), // LATIN SMALL LETTER V
(r'\u{0077}', r'\u{0077}'), // LATIN SMALL LETTER W
(r'\u{0078}', r'\u{0078}'), // LATIN SMALL LETTER X
(r'\u{0079}', r'\u{0079}'), // LATIN SMALL LETTER Y
(r'\u{007a}', r'\u{007a}'), // LATIN SMALL LETTER Z
(r'\u{007b}', r'\u{007b}'), // LEFT CURLY BRACKET
(r'\u{007c}', r'\u{007c}'), // VERTICAL LINE
(r'\u{007d}', r'\u{007d}'), // RIGHT CURLY BRACKET
(r'\u{007e}', r'\u{007e}'), // TILDE
(r'\u{007f}', r'\u{007f}'), // DELETE
(r'\u{00a0}', r'\u{00ff}'), // NO-BREAK SPACE
(r'\u{00a1}', r'\u{00ad}'), // INVERTED EXCLAMATION MARK
(r'\u{00a2}', r'\u{009b}'), // CENT SIGN
(r'\u{00a3}', r'\u{009c}'), // POUND SIGN
(r'\u{00a5}', r'\u{009d}'), // YEN SIGN
(r'\u{00aa}', r'\u{00a6}'), // FEMININE ORDINAL INDICATOR
(r'\u{00ab}', r'\u{00ae}'), // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
(r'\u{00ac}', r'\u{00aa}'), // NOT SIGN
(r'\u{00b0}', r'\u{00f8}'), // DEGREE SIGN
(r'\u{00b1}', r'\u{00f1}'), // PLUS-MINUS SIGN
(r'\u{00b2}', r'\u{00fd}'), // SUPERSCRIPT TWO
(r'\u{00b5}', r'\u{00e6}'), // MICRO SIGN
(r'\u{00b7}', r'\u{00fa}'), // MIDDLE DOT
(r'\u{00ba}', r'\u{00a7}'), // MASCULINE ORDINAL INDICATOR
(r'\u{00bb}', r'\u{00af}'), // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
(r'\u{00bc}', r'\u{00ac}'), // VULGAR FRACTION ONE QUARTER
(r'\u{00bd}', r'\u{00ab}'), // VULGAR FRACTION ONE HALF
(r'\u{00bf}', r'\u{00a8}'), // INVERTED QUESTION MARK
(r'\u{00c4}', r'\u{008e}'), // LATIN CAPITAL LETTER A WITH DIAERESIS
(r'\u{00c5}', r'\u{008f}'), // LATIN CAPITAL LETTER A WITH RING ABOVE
(r'\u{00c6}', r'\u{0092}'), // LATIN CAPITAL LIGATURE AE
(r'\u{00c7}', r'\u{0080}'), // LATIN CAPITAL LETTER C WITH CEDILLA
(r'\u{00c9}', r'\u{0090}'), // LATIN CAPITAL LETTER E WITH ACUTE
(r'\u{00d1}', r'\u{00a5}'), // LATIN CAPITAL LETTER N WITH TILDE
(r'\u{00d6}', r'\u{0099}'), // LATIN CAPITAL LETTER O WITH DIAERESIS
(r'\u{00dc}', r'\u{009a}'), // LATIN CAPITAL LETTER U WITH DIAERESIS
(r'\u{00df}', r'\u{00e1}'), // LATIN SMALL LETTER SHARP S
(r'\u{00e0}', r'\u{0085}'), // LATIN SMALL LETTER A WITH GRAVE
(r'\u{00e1}', r'\u{00a0}'), // LATIN SMALL LETTER A WITH ACUTE
(r'\u{00e2}', r'\u{0083}'), // LATIN SMALL LETTER A WITH CIRCUMFLEX
(r'\u{00e4}', r'\u{0084}'), // LATIN SMALL LETTER A WITH DIAERESIS
(r'\u{00e5}', r'\u{0086}'), // LATIN SMALL LETTER A WITH RING ABOVE
(r'\u{00e6}', r'\u{0091}'), // LATIN SMALL LIGATURE AE
(r'\u{00e7}', r'\u{0087}'), // LATIN SMALL LETTER C WITH CEDILLA
(r'\u{00e8}', r'\u{008a}'), // LATIN SMALL LETTER E WITH GRAVE
(r'\u{00e9}', r'\u{0082}'), // LATIN SMALL LETTER E WITH ACUTE
(r'\u{00ea}', r'\u{0088}'), // LATIN SMALL LETTER E WITH CIRCUMFLEX
(r'\u{00eb}', r'\u{0089}'), // LATIN SMALL LETTER E WITH DIAERESIS
(r'\u{00ec}', r'\u{008d}'), // LATIN SMALL LETTER I WITH GRAVE
(r'\u{00ed}', r'\u{00a1}'), // LATIN SMALL LETTER I WITH ACUTE
(r'\u{00ee}', r'\u{008c}'), // LATIN SMALL LETTER I WITH CIRCUMFLEX
(r'\u{00ef}', r'\u{008b}'), // LATIN SMALL LETTER I WITH DIAERESIS
(r'\u{00f1}', r'\u{00a4}'), // LATIN SMALL LETTER N WITH TILDE
(r'\u{00f2}', r'\u{0095}'), // LATIN SMALL LETTER O WITH GRAVE
(r'\u{00f3}', r'\u{00a2}'), // LATIN SMALL LETTER O WITH ACUTE
(r'\u{00f4}', r'\u{0093}'), // LATIN SMALL LETTER O WITH CIRCUMFLEX
(r'\u{00f6}', r'\u{0094}'), // LATIN SMALL LETTER O WITH DIAERESIS
(r'\u{00f7}', r'\u{00f6}'), // DIVISION SIGN
(r'\u{00f9}', r'\u{0097}'), // LATIN SMALL LETTER U WITH GRAVE
(r'\u{00fa}', r'\u{00a3}'), // LATIN SMALL LETTER U WITH ACUTE
(r'\u{00fb}', r'\u{0096}'), // LATIN SMALL LETTER U WITH CIRCUMFLEX
(r'\u{00fc}', r'\u{0081}'), // LATIN SMALL LETTER U WITH DIAERESIS
(r'\u{00ff}', r'\u{0098}'), // LATIN SMALL LETTER Y WITH DIAERESIS
(r'\u{0192}', r'\u{009f}'), // LATIN SMALL LETTER F WITH HOOK
(r'\u{0393}', r'\u{00e2}'), // GREEK CAPITAL LETTER GAMMA
(r'\u{0398}', r'\u{00e9}'), // GREEK CAPITAL LETTER THETA
(r'\u{03a3}', r'\u{00e4}'), // GREEK CAPITAL LETTER SIGMA
(r'\u{03a6}', r'\u{00e8}'), // GREEK CAPITAL LETTER PHI
(r'\u{03a9}', r'\u{00ea}'), // GREEK CAPITAL LETTER OMEGA
(r'\u{03b1}', r'\u{00e0}'), // GREEK SMALL LETTER ALPHA
(r'\u{03b4}', r'\u{00eb}'), // GREEK SMALL LETTER DELTA
(r'\u{03b5}', r'\u{00ee}'), // GREEK SMALL LETTER EPSILON
(r'\u{03c0}', r'\u{00e3}'), // GREEK SMALL LETTER PI
(r'\u{03c3}', r'\u{00e5}'), // GREEK SMALL LETTER SIGMA
(r'\u{03c4}', r'\u{00e7}'), // GREEK SMALL LETTER TAU
(r'\u{03c6}', r'\u{00ed}'), // GREEK SMALL LETTER PHI
(r'\u{207f}', r'\u{00fc}'), // SUPERSCRIPT LATIN SMALL LETTER N
(r'\u{20a7}', r'\u{009e}'), // PESETA SIGN
(r'\u{2219}', r'\u{00f9}'), // BULLET OPERATOR
(r'\u{221a}', r'\u{00fb}'), // SQUARE ROOT
(r'\u{221e}', r'\u{00ec}'), // INFINITY
(r'\u{2229}', r'\u{00ef}'), // INTERSECTION
(r'\u{2248}', r'\u{00f7}'), // ALMOST EQUAL TO
(r'\u{2261}', r'\u{00f0}'), // IDENTICAL TO
(r'\u{2264}', r'\u{00f3}'), // LESS-THAN OR EQUAL TO
(r'\u{2265}', r'\u{00f2}'), // GREATER-THAN OR EQUAL TO
(r'\u{2310}', r'\u{00a9}'), // REVERSED NOT SIGN
(r'\u{2320}', r'\u{00f4}'), // TOP HALF INTEGRAL
(r'\u{2321}', r'\u{00f5}'), // BOTTOM HALF INTEGRAL
(r'\u{2500}', r'\u{00c4}'), // BOX DRAWINGS LIGHT HORIZONTAL
(r'\u{2502}', r'\u{00b3}'), // BOX DRAWINGS LIGHT VERTICAL
(r'\u{250c}', r'\u{00da}'), // BOX DRAWINGS LIGHT DOWN AND RIGHT
(r'\u{2510}', r'\u{00bf}'), // BOX DRAWINGS LIGHT DOWN AND LEFT
(r'\u{2514}', r'\u{00c0}'), // BOX DRAWINGS LIGHT UP AND RIGHT
(r'\u{2518}', r'\u{00d9}'), // BOX DRAWINGS LIGHT UP AND LEFT
(r'\u{251c}', r'\u{00c3}'), // BOX DRAWINGS LIGHT VERTICAL AND RIGHT
(r'\u{2524}', r'\u{00b4}'), // BOX DRAWINGS LIGHT VERTICAL AND LEFT
(r'\u{252c}', r'\u{00c2}'), // BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
(r'\u{2534}', r'\u{00c1}'), // BOX DRAWINGS LIGHT UP AND HORIZONTAL
(r'\u{253c}', r'\u{00c5}'), // BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
(r'\u{2550}', r'\u{00cd}'), // BOX DRAWINGS DOUBLE HORIZONTAL
(r'\u{2551}', r'\u{00ba}'), // BOX DRAWINGS DOUBLE VERTICAL
(r'\u{2552}', r'\u{00d5}'), // BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
(r'\u{2553}', r'\u{00d6}'), // BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
(r'\u{2554}', r'\u{00c9}'), // BOX DRAWINGS DOUBLE DOWN AND RIGHT
(r'\u{2555}', r'\u{00b8}'), // BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
(r'\u{2556}', r'\u{00b7}'), // BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
(r'\u{2557}', r'\u{00bb}'), // BOX DRAWINGS DOUBLE DOWN AND LEFT
(r'\u{2558}', r'\u{00d4}'), // BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
(r'\u{2559}', r'\u{00d3}'), // BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
(r'\u{255a}', r'\u{00c8}'), // BOX DRAWINGS DOUBLE UP AND RIGHT
(r'\u{255b}', r'\u{00be}'), // BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
(r'\u{255c}', r'\u{00bd}'), // BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
(r'\u{255d}', r'\u{00bc}'), // BOX DRAWINGS DOUBLE UP AND LEFT
(r'\u{255e}', r'\u{00c6}'), // BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
(r'\u{255f}', r'\u{00c7}'), // BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
(r'\u{2560}', r'\u{00cc}'), // BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
(r'\u{2561}', r'\u{00b5}'), // BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
(r'\u{2562}', r'\u{00b6}'), // BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
(r'\u{2563}', r'\u{00b9}'), // BOX DRAWINGS DOUBLE VERTICAL AND LEFT
(r'\u{2564}', r'\u{00d1}'), // BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
(r'\u{2565}', r'\u{00d2}'), // BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
(r'\u{2566}', r'\u{00cb}'), // BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
(r'\u{2567}', r'\u{00cf}'), // BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
(r'\u{2568}', r'\u{00d0}'), // BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
(r'\u{2569}', r'\u{00ca}'), // BOX DRAWINGS DOUBLE UP AND HORIZONTAL
(r'\u{256a}', r'\u{00d8}'), // BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
(r'\u{256b}', r'\u{00d7}'), // BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
(r'\u{256c}', r'\u{00ce}'), // BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
(r'\u{2580}', r'\u{00df}'), // UPPER HALF BLOCK
(r'\u{2584}', r'\u{00dc}'), // LOWER HALF BLOCK
(r'\u{2588}', r'\u{00db}'), // FULL BLOCK
(r'\u{258c}', r'\u{00dd}'), // LEFT HALF BLOCK
(r'\u{2590}', r'\u{00de}'), // RIGHT HALF BLOCK
(r'\u{2591}', r'\u{00b0}'), // LIGHT SHADE
(r'\u{2592}', r'\u{00b1}'), // MEDIUM SHADE
(r'\u{2593}', r'\u{00b2}'), // DARK SHADE
(r'\u{25a0}', r'\u{00fe}') // BLACK SQUARE
]
)
public func decodeCp437(arr: Array<Byte>): String {
var sb = StringBuilder()
for (i in 0..arr.size) {
let a = arr[i]
if (a <= 127) {
sb.append(encode_arr[Int64(a)])
} else if (encode_map.contains(Int64(a))) {
sb.append(encode_map[Int64(a)])
} else {
throw ZipException("Cannot convert.")
}
}
return sb.toString()
}
public func encodeCp437(str: String): Array<Byte> {
let runs = str.toRuneArray()
let ll = Array<Byte>(runs.size, repeat: 0)
for (i in 0..runs.size) {
ll[i] = UInt8(UInt32(decode_map[runs[i]]))
}
ll
}