| # 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) |