[code.view]

[top] / python / PyMOTW / codecs / codecs_invertcaps_register.py

     #!/usr/bin/env python
     # encoding: utf-8
     #
     # Copyright (c) 2010 Doug Hellmann.  All rights reserved.
     #
     """Set up the invertcaps codec.
     """
     #end_pymotw_header
     
     import codecs
     
     from codecs_invertcaps_charmap import encoding_map, decoding_map
     
     # Stateless encoder/decoder
     
     class InvertCapsCodec(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_map)
     
     # Incremental forms
     
     class InvertCapsIncrementalEncoder(codecs.IncrementalEncoder):
         def encode(self, input, final=False):
             return codecs.charmap_encode(input, self.errors, encoding_map)[0]
     
     class InvertCapsIncrementalDecoder(codecs.IncrementalDecoder):
         def decode(self, input, final=False):
             return codecs.charmap_decode(input, self.errors, decoding_map)[0]
     
     # Stream reader and writer
     
     class InvertCapsStreamReader(InvertCapsCodec, codecs.StreamReader):
         pass
     
     class InvertCapsStreamWriter(InvertCapsCodec, codecs.StreamWriter):
         pass
     
     # Register the codec search function
     
     def find_invertcaps(encoding):
         """Return the codec for 'invertcaps'.
         """
         if encoding == 'invertcaps':
             return codecs.CodecInfo(
                 name='invertcaps',
                 encode=InvertCapsCodec().encode,
                 decode=InvertCapsCodec().decode,
                 incrementalencoder=InvertCapsIncrementalEncoder,
                 incrementaldecoder=InvertCapsIncrementalDecoder,
                 streamreader=InvertCapsStreamReader,
                 streamwriter=InvertCapsStreamWriter,
                 )
         return None
     
     codecs.register(find_invertcaps)
     
     if __name__ == '__main__':
     
         # Stateless encoder/decoder
         encoder = codecs.getencoder('invertcaps')
         text = 'abc.DEF'
         encoded_text, consumed = encoder(text)
         print 'Encoder converted "{}" to "{}", consuming {} characters'.format(
             text, encoded_text, consumed)
     
         # Stream writer
         import sys
         writer = codecs.getwriter('invertcaps')(sys.stdout)
         print 'StreamWriter for stdout: ',
         writer.write('abc.DEF')
         print
     
         # Incremental decoder
         decoder_factory = codecs.getincrementaldecoder('invertcaps')
         decoder = decoder_factory()
         decoded_text_parts = []
         for c in encoded_text:
             decoded_text_parts.append(decoder.decode(c, final=False))
         decoded_text_parts.append(decoder.decode('', final=True))
         decoded_text = ''.join(decoded_text_parts)
         print 'IncrementalDecoder converted "{}" to "{}"'.format(
             encoded_text, decoded_text)
     

[top] / python / PyMOTW / codecs / codecs_invertcaps_register.py

contact | logmethods.com