| # coding: utf-8 |
| """ |
| |
| webencodings.x_user_defined |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| An implementation of the x-user-defined encoding. |
| |
| :copyright: Copyright 2012 by Simon Sapin |
| :license: BSD, see LICENSE for details. |
| |
| """ |
| |
| from __future__ import unicode_literals |
| |
| import codecs |
| |
| |
| ### Codec APIs |
| |
| class Codec(codecs.Codec): |
| |
| def encode(self, input, errors='strict'): |
| return codecs.charmap_encode(input, errors, encoding_table) |
| |
| 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_table)[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 |
| |
| codec_info = codecs.CodecInfo( |
| name='x-user-defined', |
| encode=Codec().encode, |
| decode=Codec().decode, |
| incrementalencoder=IncrementalEncoder, |
| incrementaldecoder=IncrementalDecoder, |
| streamreader=StreamReader, |
| streamwriter=StreamWriter, |
| ) |
| |
| |
| ### Decoding Table |
| |
| # Python 3: |
| # for c in range(256): print(' %r' % chr(c if c < 128 else c + 0xF700)) |
| decoding_table = ( |
| '\x00' |
| '\x01' |
| '\x02' |
| '\x03' |
| '\x04' |
| '\x05' |
| '\x06' |
| '\x07' |
| '\x08' |
| '\t' |
| '\n' |
| '\x0b' |
| '\x0c' |
| '\r' |
| '\x0e' |
| '\x0f' |
| '\x10' |
| '\x11' |
| '\x12' |
| '\x13' |
| '\x14' |
| '\x15' |
| '\x16' |
| '\x17' |
| '\x18' |
| '\x19' |
| '\x1a' |
| '\x1b' |
| '\x1c' |
| '\x1d' |
| '\x1e' |
| '\x1f' |
| ' ' |
| '!' |
| '"' |
| '#' |
| '$' |
| '%' |
| '&' |
| "'" |
| '(' |
| ')' |
| '*' |
| '+' |
| ',' |
| '-' |
| '.' |
| '/' |
| '0' |
| '1' |
| '2' |
| '3' |
| '4' |
| '5' |
| '6' |
| '7' |
| '8' |
| '9' |
| ':' |
| ';' |
| '<' |
| '=' |
| '>' |
| '?' |
| '@' |
| 'A' |
| 'B' |
| 'C' |
| 'D' |
| 'E' |
| 'F' |
| 'G' |
| 'H' |
| 'I' |
| 'J' |
| 'K' |
| 'L' |
| 'M' |
| 'N' |
| 'O' |
| 'P' |
| 'Q' |
| 'R' |
| 'S' |
| 'T' |
| 'U' |
| 'V' |
| 'W' |
| 'X' |
| 'Y' |
| 'Z' |
| '[' |
| '\\' |
| ']' |
| '^' |
| '_' |
| '`' |
| 'a' |
| 'b' |
| 'c' |
| 'd' |
| 'e' |
| 'f' |
| 'g' |
| 'h' |
| 'i' |
| 'j' |
| 'k' |
| 'l' |
| 'm' |
| 'n' |
| 'o' |
| 'p' |
| 'q' |
| 'r' |
| 's' |
| 't' |
| 'u' |
| 'v' |
| 'w' |
| 'x' |
| 'y' |
| 'z' |
| '{' |
| '|' |
| '}' |
| '~' |
| '\x7f' |
| '\uf780' |
| '\uf781' |
| '\uf782' |
| '\uf783' |
| '\uf784' |
| '\uf785' |
| '\uf786' |
| '\uf787' |
| '\uf788' |
| '\uf789' |
| '\uf78a' |
| '\uf78b' |
| '\uf78c' |
| '\uf78d' |
| '\uf78e' |
| '\uf78f' |
| '\uf790' |
| '\uf791' |
| '\uf792' |
| '\uf793' |
| '\uf794' |
| '\uf795' |
| '\uf796' |
| '\uf797' |
| '\uf798' |
| '\uf799' |
| '\uf79a' |
| '\uf79b' |
| '\uf79c' |
| '\uf79d' |
| '\uf79e' |
| '\uf79f' |
| '\uf7a0' |
| '\uf7a1' |
| '\uf7a2' |
| '\uf7a3' |
| '\uf7a4' |
| '\uf7a5' |
| '\uf7a6' |
| '\uf7a7' |
| '\uf7a8' |
| '\uf7a9' |
| '\uf7aa' |
| '\uf7ab' |
| '\uf7ac' |
| '\uf7ad' |
| '\uf7ae' |
| '\uf7af' |
| '\uf7b0' |
| '\uf7b1' |
| '\uf7b2' |
| '\uf7b3' |
| '\uf7b4' |
| '\uf7b5' |
| '\uf7b6' |
| '\uf7b7' |
| '\uf7b8' |
| '\uf7b9' |
| '\uf7ba' |
| '\uf7bb' |
| '\uf7bc' |
| '\uf7bd' |
| '\uf7be' |
| '\uf7bf' |
| '\uf7c0' |
| '\uf7c1' |
| '\uf7c2' |
| '\uf7c3' |
| '\uf7c4' |
| '\uf7c5' |
| '\uf7c6' |
| '\uf7c7' |
| '\uf7c8' |
| '\uf7c9' |
| '\uf7ca' |
| '\uf7cb' |
| '\uf7cc' |
| '\uf7cd' |
| '\uf7ce' |
| '\uf7cf' |
| '\uf7d0' |
| '\uf7d1' |
| '\uf7d2' |
| '\uf7d3' |
| '\uf7d4' |
| '\uf7d5' |
| '\uf7d6' |
| '\uf7d7' |
| '\uf7d8' |
| '\uf7d9' |
| '\uf7da' |
| '\uf7db' |
| '\uf7dc' |
| '\uf7dd' |
| '\uf7de' |
| '\uf7df' |
| '\uf7e0' |
| '\uf7e1' |
| '\uf7e2' |
| '\uf7e3' |
| '\uf7e4' |
| '\uf7e5' |
| '\uf7e6' |
| '\uf7e7' |
| '\uf7e8' |
| '\uf7e9' |
| '\uf7ea' |
| '\uf7eb' |
| '\uf7ec' |
| '\uf7ed' |
| '\uf7ee' |
| '\uf7ef' |
| '\uf7f0' |
| '\uf7f1' |
| '\uf7f2' |
| '\uf7f3' |
| '\uf7f4' |
| '\uf7f5' |
| '\uf7f6' |
| '\uf7f7' |
| '\uf7f8' |
| '\uf7f9' |
| '\uf7fa' |
| '\uf7fb' |
| '\uf7fc' |
| '\uf7fd' |
| '\uf7fe' |
| '\uf7ff' |
| ) |
| |
| ### Encoding table |
| encoding_table = codecs.charmap_build(decoding_table) |