123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- # coding: utf-8
- """
- Implementation of the teletex T.61 codec. Exports the following items:
- - register()
- """
- from __future__ import unicode_literals, division, absolute_import, print_function
- import codecs
- class TeletexCodec(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 TeletexIncrementalEncoder(codecs.IncrementalEncoder):
- def encode(self, input_, final=False):
- return codecs.charmap_encode(input_, self.errors, ENCODING_TABLE)[0]
- class TeletexIncrementalDecoder(codecs.IncrementalDecoder):
- def decode(self, input_, final=False):
- return codecs.charmap_decode(input_, self.errors, DECODING_TABLE)[0]
- class TeletexStreamWriter(TeletexCodec, codecs.StreamWriter):
- pass
- class TeletexStreamReader(TeletexCodec, codecs.StreamReader):
- pass
- def teletex_search_function(name):
- """
- Search function for teletex codec that is passed to codecs.register()
- """
- if name != 'teletex':
- return None
- return codecs.CodecInfo(
- name='teletex',
- encode=TeletexCodec().encode,
- decode=TeletexCodec().decode,
- incrementalencoder=TeletexIncrementalEncoder,
- incrementaldecoder=TeletexIncrementalDecoder,
- streamreader=TeletexStreamReader,
- streamwriter=TeletexStreamWriter,
- )
- def register():
- """
- Registers the teletex codec
- """
- codecs.register(teletex_search_function)
- # http://en.wikipedia.org/wiki/ITU_T.61
- DECODING_TABLE = (
- '\u0000'
- '\u0001'
- '\u0002'
- '\u0003'
- '\u0004'
- '\u0005'
- '\u0006'
- '\u0007'
- '\u0008'
- '\u0009'
- '\u000A'
- '\u000B'
- '\u000C'
- '\u000D'
- '\u000E'
- '\u000F'
- '\u0010'
- '\u0011'
- '\u0012'
- '\u0013'
- '\u0014'
- '\u0015'
- '\u0016'
- '\u0017'
- '\u0018'
- '\u0019'
- '\u001A'
- '\u001B'
- '\u001C'
- '\u001D'
- '\u001E'
- '\u001F'
- '\u0020'
- '\u0021'
- '\u0022'
- '\ufffe'
- '\ufffe'
- '\u0025'
- '\u0026'
- '\u0027'
- '\u0028'
- '\u0029'
- '\u002A'
- '\u002B'
- '\u002C'
- '\u002D'
- '\u002E'
- '\u002F'
- '\u0030'
- '\u0031'
- '\u0032'
- '\u0033'
- '\u0034'
- '\u0035'
- '\u0036'
- '\u0037'
- '\u0038'
- '\u0039'
- '\u003A'
- '\u003B'
- '\u003C'
- '\u003D'
- '\u003E'
- '\u003F'
- '\u0040'
- '\u0041'
- '\u0042'
- '\u0043'
- '\u0044'
- '\u0045'
- '\u0046'
- '\u0047'
- '\u0048'
- '\u0049'
- '\u004A'
- '\u004B'
- '\u004C'
- '\u004D'
- '\u004E'
- '\u004F'
- '\u0050'
- '\u0051'
- '\u0052'
- '\u0053'
- '\u0054'
- '\u0055'
- '\u0056'
- '\u0057'
- '\u0058'
- '\u0059'
- '\u005A'
- '\u005B'
- '\ufffe'
- '\u005D'
- '\ufffe'
- '\u005F'
- '\ufffe'
- '\u0061'
- '\u0062'
- '\u0063'
- '\u0064'
- '\u0065'
- '\u0066'
- '\u0067'
- '\u0068'
- '\u0069'
- '\u006A'
- '\u006B'
- '\u006C'
- '\u006D'
- '\u006E'
- '\u006F'
- '\u0070'
- '\u0071'
- '\u0072'
- '\u0073'
- '\u0074'
- '\u0075'
- '\u0076'
- '\u0077'
- '\u0078'
- '\u0079'
- '\u007A'
- '\ufffe'
- '\u007C'
- '\ufffe'
- '\ufffe'
- '\u007F'
- '\u0080'
- '\u0081'
- '\u0082'
- '\u0083'
- '\u0084'
- '\u0085'
- '\u0086'
- '\u0087'
- '\u0088'
- '\u0089'
- '\u008A'
- '\u008B'
- '\u008C'
- '\u008D'
- '\u008E'
- '\u008F'
- '\u0090'
- '\u0091'
- '\u0092'
- '\u0093'
- '\u0094'
- '\u0095'
- '\u0096'
- '\u0097'
- '\u0098'
- '\u0099'
- '\u009A'
- '\u009B'
- '\u009C'
- '\u009D'
- '\u009E'
- '\u009F'
- '\u00A0'
- '\u00A1'
- '\u00A2'
- '\u00A3'
- '\u0024'
- '\u00A5'
- '\u0023'
- '\u00A7'
- '\u00A4'
- '\ufffe'
- '\ufffe'
- '\u00AB'
- '\ufffe'
- '\ufffe'
- '\ufffe'
- '\ufffe'
- '\u00B0'
- '\u00B1'
- '\u00B2'
- '\u00B3'
- '\u00D7'
- '\u00B5'
- '\u00B6'
- '\u00B7'
- '\u00F7'
- '\ufffe'
- '\ufffe'
- '\u00BB'
- '\u00BC'
- '\u00BD'
- '\u00BE'
- '\u00BF'
- '\ufffe'
- '\u0300'
- '\u0301'
- '\u0302'
- '\u0303'
- '\u0304'
- '\u0306'
- '\u0307'
- '\u0308'
- '\ufffe'
- '\u030A'
- '\u0327'
- '\u0332'
- '\u030B'
- '\u0328'
- '\u030C'
- '\ufffe'
- '\ufffe'
- '\ufffe'
- '\ufffe'
- '\ufffe'
- '\ufffe'
- '\ufffe'
- '\ufffe'
- '\ufffe'
- '\ufffe'
- '\ufffe'
- '\ufffe'
- '\ufffe'
- '\ufffe'
- '\ufffe'
- '\ufffe'
- '\u2126'
- '\u00C6'
- '\u00D0'
- '\u00AA'
- '\u0126'
- '\ufffe'
- '\u0132'
- '\u013F'
- '\u0141'
- '\u00D8'
- '\u0152'
- '\u00BA'
- '\u00DE'
- '\u0166'
- '\u014A'
- '\u0149'
- '\u0138'
- '\u00E6'
- '\u0111'
- '\u00F0'
- '\u0127'
- '\u0131'
- '\u0133'
- '\u0140'
- '\u0142'
- '\u00F8'
- '\u0153'
- '\u00DF'
- '\u00FE'
- '\u0167'
- '\u014B'
- '\ufffe'
- )
- ENCODING_TABLE = codecs.charmap_build(DECODING_TABLE)
|