Advertisement
Guest User

Untitled

a guest
May 22nd, 2015
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.75 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # encoding: utf-8
  3. #
  4. # Copyright (c) 2010 Doug Hellmann. All rights reserved.
  5. #
  6. """Set up the invertcaps codec.
  7. """
  8. #end_pymotw_header
  9.  
  10. import codecs
  11.  
  12. from codecs_invertcaps_charmap import encoding_map, decoding_map
  13.  
  14. # Stateless encoder/decoder
  15.  
  16. class InvertCapsCodec(codecs.Codec):
  17. def encode(self, input, errors='strict'):
  18. return codecs.charmap_encode(input, errors, encoding_map)
  19.  
  20. def decode(self, input, errors='strict'):
  21. return codecs.charmap_decode(input, errors, decoding_map)
  22.  
  23. # Incremental forms
  24.  
  25. class InvertCapsIncrementalEncoder(codecs.IncrementalEncoder):
  26. def encode(self, input, final=False):
  27. data, nbytes = codecs.charmap_encode(input,
  28. self.errors,
  29. encoding_map)
  30. return data
  31.  
  32. class InvertCapsIncrementalDecoder(codecs.IncrementalDecoder):
  33. def decode(self, input, final=False):
  34. data, nbytes = codecs.charmap_decode(input,
  35. self.errors,
  36. decoding_map)
  37. return data
  38.  
  39. # Stream reader and writer
  40.  
  41. class InvertCapsStreamReader(InvertCapsCodec, codecs.StreamReader):
  42. pass
  43.  
  44. class InvertCapsStreamWriter(InvertCapsCodec, codecs.StreamWriter):
  45. pass
  46.  
  47. # Register the codec search function
  48.  
  49. def find_invertcaps(encoding):
  50. """Return the codec for 'invertcaps'.
  51. """
  52. if encoding == 'invertcaps':
  53. return codecs.CodecInfo(
  54. name='invertcaps',
  55. encode=InvertCapsCodec().encode,
  56. decode=InvertCapsCodec().decode,
  57. incrementalencoder=InvertCapsIncrementalEncoder,
  58. incrementaldecoder=InvertCapsIncrementalDecoder,
  59. streamreader=InvertCapsStreamReader,
  60. streamwriter=InvertCapsStreamWriter,
  61. )
  62. return None
  63.  
  64. codecs.register(find_invertcaps)
  65.  
  66. if __name__ == '__main__':
  67.  
  68. # Stateless encoder/decoder
  69. encoder = codecs.getencoder('invertcaps')
  70. text = 'abc.DEF'
  71. encoded_text, consumed = encoder(text)
  72. print 'Encoded "{}" to "{}", consuming {} characters'.format(
  73. text, encoded_text, consumed)
  74.  
  75. # Stream writer
  76. import sys
  77. writer = codecs.getwriter('invertcaps')(sys.stdout)
  78. print 'StreamWriter for stdout: ',
  79. writer.write('abc.DEF')
  80. print
  81.  
  82. # Incremental decoder
  83. decoder_factory = codecs.getincrementaldecoder('invertcaps')
  84. decoder = decoder_factory()
  85. decoded_text_parts = []
  86. for c in encoded_text:
  87. decoded_text_parts.append(decoder.decode(c, final=False))
  88. decoded_text_parts.append(decoder.decode('', final=True))
  89. decoded_text = ''.join(decoded_text_parts)
  90. print 'IncrementalDecoder converted "{}" to "{}"'.format(
  91. encoded_text, decoded_text)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement