Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/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):
- data, nbytes = codecs.charmap_encode(input,
- self.errors,
- encoding_map)
- return data
- class InvertCapsIncrementalDecoder(codecs.IncrementalDecoder):
- def decode(self, input, final=False):
- data, nbytes = codecs.charmap_decode(input,
- self.errors,
- decoding_map)
- return data
- # 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 'Encoded "{}" 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)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement