You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
326 lines
4.2 KiB
326 lines
4.2 KiB
# 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)
|