home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / lib / python2.6 / encodings / utf_8_sig.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-04-20  |  4.6 KB  |  123 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. """ Python 'utf-8-sig' Codec
  5. This work similar to UTF-8 with the following changes:
  6.  
  7. * On encoding/writing a UTF-8 encoded BOM will be prepended/written as the
  8.   first three bytes.
  9.  
  10. * On decoding/reading if the first three bytes are a UTF-8 encoded BOM, these
  11.   bytes will be skipped.
  12. """
  13. import codecs
  14.  
  15. def encode(input, errors = 'strict'):
  16.     return (codecs.BOM_UTF8 + codecs.utf_8_encode(input, errors)[0], len(input))
  17.  
  18.  
  19. def decode(input, errors = 'strict'):
  20.     prefix = 0
  21.     if input[:3] == codecs.BOM_UTF8:
  22.         input = input[3:]
  23.         prefix = 3
  24.     
  25.     (output, consumed) = codecs.utf_8_decode(input, errors, True)
  26.     return (output, consumed + prefix)
  27.  
  28.  
  29. class IncrementalEncoder(codecs.IncrementalEncoder):
  30.     
  31.     def __init__(self, errors = 'strict'):
  32.         codecs.IncrementalEncoder.__init__(self, errors)
  33.         self.first = True
  34.  
  35.     
  36.     def encode(self, input, final = False):
  37.         if self.first:
  38.             self.first = False
  39.             return codecs.BOM_UTF8 + codecs.utf_8_encode(input, self.errors)[0]
  40.         return codecs.utf_8_encode(input, self.errors)[0]
  41.  
  42.     
  43.     def reset(self):
  44.         codecs.IncrementalEncoder.reset(self)
  45.         self.first = True
  46.  
  47.  
  48.  
  49. class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
  50.     
  51.     def __init__(self, errors = 'strict'):
  52.         codecs.BufferedIncrementalDecoder.__init__(self, errors)
  53.         self.first = True
  54.  
  55.     
  56.     def _buffer_decode(self, input, errors, final):
  57.         if self.first:
  58.             if len(input) < 3:
  59.                 if codecs.BOM_UTF8.startswith(input):
  60.                     return (u'', 0)
  61.                 self.first = None
  62.             else:
  63.                 self.first = None
  64.                 if input[:3] == codecs.BOM_UTF8:
  65.                     (output, consumed) = codecs.utf_8_decode(input[3:], errors, final)
  66.                     return (output, consumed + 3)
  67.         
  68.         return codecs.utf_8_decode(input, errors, final)
  69.  
  70.     
  71.     def reset(self):
  72.         codecs.BufferedIncrementalDecoder.reset(self)
  73.         self.first = True
  74.  
  75.  
  76.  
  77. class StreamWriter(codecs.StreamWriter):
  78.     
  79.     def reset(self):
  80.         codecs.StreamWriter.reset(self)
  81.         
  82.         try:
  83.             del self.encode
  84.         except AttributeError:
  85.             pass
  86.  
  87.  
  88.     
  89.     def encode(self, input, errors = 'strict'):
  90.         self.encode = codecs.utf_8_encode
  91.         return encode(input, errors)
  92.  
  93.  
  94.  
  95. class StreamReader(codecs.StreamReader):
  96.     
  97.     def reset(self):
  98.         codecs.StreamReader.reset(self)
  99.         
  100.         try:
  101.             del self.decode
  102.         except AttributeError:
  103.             pass
  104.  
  105.  
  106.     
  107.     def decode(self, input, errors = 'strict'):
  108.         if len(input) < 3:
  109.             if codecs.BOM_UTF8.startswith(input):
  110.                 return (u'', 0)
  111.         elif input[:3] == codecs.BOM_UTF8:
  112.             self.decode = codecs.utf_8_decode
  113.             (output, consumed) = codecs.utf_8_decode(input[3:], errors)
  114.             return (output, consumed + 3)
  115.         self.decode = codecs.utf_8_decode
  116.         return codecs.utf_8_decode(input, errors)
  117.  
  118.  
  119.  
  120. def getregentry():
  121.     return codecs.CodecInfo(name = 'utf-8-sig', encode = encode, decode = decode, incrementalencoder = IncrementalEncoder, incrementaldecoder = IncrementalDecoder, streamreader = StreamReader, streamwriter = StreamWriter)
  122.  
  123.