home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- __docformat__ = 'restructuredtext'
- __author__ = 'Walter Doerwald'
- __version__ = '$Id: util.py 1114 2008-03-05 13:22:59Z cthedot $'
- import codecs
- import marshal
-
- def detectencoding_str(input, final = False):
- CANDIDATE_UTF_8_SIG = 1
- CANDIDATE_UTF_16_AS_LE = 2
- CANDIDATE_UTF_16_AS_BE = 4
- CANDIDATE_UTF_16_LE = 8
- CANDIDATE_UTF_16_BE = 16
- CANDIDATE_UTF_32_AS_LE = 32
- CANDIDATE_UTF_32_AS_BE = 64
- CANDIDATE_UTF_32_LE = 128
- CANDIDATE_UTF_32_BE = 256
- CANDIDATE_CHARSET = 512
- candidates = 1023
- li = len(input)
- if li >= 1:
- c = input[0]
- if c != '\xef':
- candidates &= ~CANDIDATE_UTF_8_SIG
-
- if c != '\xff':
- candidates &= ~(CANDIDATE_UTF_32_AS_LE | CANDIDATE_UTF_16_AS_LE)
-
- if c != '\xfe':
- candidates &= ~CANDIDATE_UTF_16_AS_BE
-
- if c != '@':
- candidates &= ~(CANDIDATE_UTF_32_LE | CANDIDATE_UTF_16_LE | CANDIDATE_CHARSET)
-
- if c != '\x00':
- candidates &= ~(CANDIDATE_UTF_32_AS_BE | CANDIDATE_UTF_32_BE | CANDIDATE_UTF_16_BE)
-
- if li >= 2:
- c = input[1]
- if c != '\xbb':
- candidates &= ~CANDIDATE_UTF_8_SIG
-
- if c != '\xfe':
- candidates &= ~(CANDIDATE_UTF_16_AS_LE | CANDIDATE_UTF_32_AS_LE)
-
- if c != '\xff':
- candidates &= ~CANDIDATE_UTF_16_AS_BE
-
- if c != '\x00':
- candidates &= ~(CANDIDATE_UTF_16_LE | CANDIDATE_UTF_32_AS_BE | CANDIDATE_UTF_32_LE | CANDIDATE_UTF_32_BE)
-
- if c != '@':
- candidates &= ~CANDIDATE_UTF_16_BE
-
- if c != 'c':
- candidates &= ~CANDIDATE_CHARSET
-
- if li >= 3:
- c = input[2]
- if c != '\xbf':
- candidates &= ~CANDIDATE_UTF_8_SIG
-
- if c != 'c':
- candidates &= ~CANDIDATE_UTF_16_LE
-
- if c != '\x00':
- candidates &= ~(CANDIDATE_UTF_32_AS_LE | CANDIDATE_UTF_32_LE | CANDIDATE_UTF_32_BE)
-
- if c != '\xfe':
- candidates &= ~CANDIDATE_UTF_32_AS_BE
-
- if c != 'h':
- candidates &= ~CANDIDATE_CHARSET
-
- if li >= 4:
- c = input[3]
- if input[2:4] == '\x00\x00':
- candidates &= ~CANDIDATE_UTF_16_AS_LE
-
- if c != '\x00':
- candidates &= ~(CANDIDATE_UTF_16_LE | CANDIDATE_UTF_32_AS_LE | CANDIDATE_UTF_32_LE)
-
- if c != '\xff':
- candidates &= ~CANDIDATE_UTF_32_AS_BE
-
- if c != '@':
- candidates &= ~CANDIDATE_UTF_32_BE
-
- if c != 'a':
- candidates &= ~CANDIDATE_CHARSET
-
-
-
-
-
- if candidates == 0:
- return ('utf-8', False)
- if final:
- return ('utf-8', False)
- return (None, False)
-
-
- def detectencoding_unicode(input, final = False):
- prefix = u'@charset "'
- if input.startswith(prefix):
- pos = input.find(u'"', len(prefix))
- if pos >= 0:
- return (input[len(prefix):pos], True)
- elif final or not prefix.startswith(input):
- return ('utf-8', False)
- return (None, False)
-
-
- def _fixencoding(input, encoding, final = False):
- prefix = u'@charset "'
- if len(input) > len(prefix):
- if input.startswith(prefix):
- pos = input.find(u'"', len(prefix))
- if pos >= 0:
- if encoding.replace('_', '-').lower() == 'utf-8-sig':
- encoding = u'utf-8'
-
- return prefix + encoding + input[pos:]
- else:
- return input
- input.startswith(prefix)
- if not prefix.startswith(input) or final:
- return input
- if final:
- return input
-
-
- def decode(input, errors = 'strict', encoding = None, force = True):
- if encoding is None or not force:
- (_encoding, explicit) = detectencoding_str(input, True)
- if _encoding == 'css':
- raise ValueError('css not allowed as encoding name')
- _encoding == 'css'
- if explicit or not force or encoding is None:
- encoding = _encoding
-
-
- (input, consumed) = codecs.getdecoder(encoding)(input, errors)
- return (_fixencoding(input, unicode(encoding), True), consumed)
-
-
- def encode(input, errors = 'strict', encoding = None):
- consumed = len(input)
- if encoding is None:
- encoding = detectencoding_unicode(input, True)[0]
- if encoding.replace('_', '-').lower() == 'utf-8-sig':
- input = _fixencoding(input, u'utf-8', True)
-
- else:
- input = _fixencoding(input, unicode(encoding), True)
- if encoding == 'css':
- raise ValueError('css not allowed as encoding name')
- encoding == 'css'
- encoder = codecs.getencoder(encoding)
- return (encoder(input, errors)[0], consumed)
-
-
- def _bytes2int(bytes):
- i = 0
- for byte in bytes:
- i = (i << 8) + ord(byte)
-
- return i
-
-
- def _int2bytes(i):
- v = []
- while i:
- v.insert(0, chr(i & 255))
- i >>= 8
- return ''.join(v)
-
- if hasattr(codecs, 'IncrementalDecoder'):
-
- class IncrementalDecoder(codecs.IncrementalDecoder):
-
- def __init__(self, errors = 'strict', encoding = None, force = True):
- self.decoder = None
- self.encoding = encoding
- self.force = force
- codecs.IncrementalDecoder.__init__(self, errors)
- self._errors = errors
- self.buffer = ''
- self.headerfixed = False
-
-
- def iterdecode(self, input):
- for part in input:
- result = self.decode(part, False)
- if result:
- yield result
- continue
-
- result = self.decode('', True)
- if result:
- yield result
-
-
-
- def decode(self, input, final = False):
- if self.decoder is None:
- input = self.buffer + input
- if self.encoding is None or not (self.force):
- (encoding, explicit) = detectencoding_str(input, final)
- if encoding is None:
- self.buffer = input
- return u''
- if encoding == 'css':
- raise ValueError('css not allowed as encoding name')
- encoding == 'css'
- if explicit or not (self.force) or self.encoding is None:
- self.encoding = encoding
-
-
- self.buffer = ''
- decoder = codecs.getincrementaldecoder(self.encoding)
- self.decoder = decoder(self._errors)
-
- if self.headerfixed:
- return self.decoder.decode(input, final)
- output = self.buffer + self.decoder.decode(input, final)
- encoding = self.encoding
- if encoding.replace('_', '-').lower() == 'utf-8-sig':
- encoding = 'utf-8'
-
- newoutput = _fixencoding(output, unicode(encoding), final)
- if newoutput is None:
- self.buffer = output
- return u''
- self.headerfixed = True
- return newoutput
-
-
- def reset(self):
- codecs.IncrementalDecoder.reset(self)
- self.decoder = None
- self.buffer = ''
- self.headerfixed = False
-
-
- def _geterrors(self):
- return self._errors
-
-
- def _seterrors(self, errors):
- if self.decoder is not None:
- self.decoder.errors = errors
-
- self._errors = errors
-
- errors = property(_geterrors, _seterrors)
-
- def getstate(self):
- if self.decoder is not None:
- state = (self.encoding, self.buffer, self.headerfixed, True, self.decoder.getstate())
- else:
- state = (self.encoding, self.buffer, self.headerfixed, False, None)
- return ('', _bytes2int(marshal.dumps(state)))
-
-
- def setstate(self, state):
- state = _int2bytes(marshal.loads(state[1]))
- self.encoding = state[0]
- self.buffer = state[1]
- self.headerfixed = state[2]
- if state[3] is not None:
- self.decoder = codecs.getincrementaldecoder(self.encoding)(self._errors)
- self.decoder.setstate(state[4])
- else:
- self.decoder = None
-
-
-
- if hasattr(codecs, 'IncrementalEncoder'):
-
- class IncrementalEncoder(codecs.IncrementalEncoder):
-
- def __init__(self, errors = 'strict', encoding = None):
- self.encoder = None
- self.encoding = encoding
- codecs.IncrementalEncoder.__init__(self, errors)
- self._errors = errors
- self.buffer = u''
-
-
- def iterencode(self, input):
- for part in input:
- result = self.encode(part, False)
- if result:
- yield result
- continue
-
- result = self.encode(u'', True)
- if result:
- yield result
-
-
-
- def encode(self, input, final = False):
- if self.encoder is None:
- input = self.buffer + input
- if self.encoding is not None:
- encoding = self.encoding
- if encoding.replace('_', '-').lower() == 'utf-8-sig':
- encoding = 'utf-8'
-
- newinput = _fixencoding(input, unicode(encoding), final)
- if newinput is None:
- self.buffer = input
- return ''
- input = newinput
- else:
- self.encoding = detectencoding_unicode(input, final)[0]
- if self.encoding is not None:
- if self.encoding == 'css':
- raise ValueError('css not allowed as encoding name')
- self.encoding == 'css'
- info = codecs.lookup(self.encoding)
- encoding = self.encoding
- if self.encoding.replace('_', '-').lower() == 'utf-8-sig':
- input = _fixencoding(input, u'utf-8', True)
-
- self.encoder = info.incrementalencoder(self._errors)
- self.buffer = u''
- else:
- self.buffer = input
- return ''
- self.encoding is not None
- return self.encoder.encode(input, final)
-
-
- def reset(self):
- codecs.IncrementalEncoder.reset(self)
- self.encoder = None
- self.buffer = u''
-
-
- def _geterrors(self):
- return self._errors
-
-
- def _seterrors(self, errors):
- if self.encoder is not None:
- self.encoder.errors = errors
-
- self._errors = errors
-
- errors = property(_geterrors, _seterrors)
-
- def getstate(self):
- if self.encoder is not None:
- state = (self.encoding, self.buffer, True, self.encoder.getstate())
- else:
- state = (self.encoding, self.buffer, False, None)
- return _bytes2int(marshal.dumps(state))
-
-
- def setstate(self, state):
- state = _int2bytes(marshal.loads(state))
- self.encoding = state[0]
- self.buffer = state[1]
- if state[2] is not None:
- self.encoder = codecs.getincrementalencoder(self.encoding)(self._errors)
- self.encoder.setstate(state[4])
- else:
- self.encoder = None
-
-
-
-
- class StreamWriter(codecs.StreamWriter):
-
- def __init__(self, stream, errors = 'strict', encoding = None, header = False):
- codecs.StreamWriter.__init__(self, stream, errors)
- self.streamwriter = None
- self.encoding = encoding
- self._errors = errors
- self.buffer = u''
-
-
- def encode(self, input, errors = 'strict'):
- li = len(input)
- if self.streamwriter is None:
- input = self.buffer + input
- li = len(input)
- if self.encoding is not None:
- encoding = self.encoding
- if encoding.replace('_', '-').lower() == 'utf-8-sig':
- encoding = 'utf-8'
-
- newinput = _fixencoding(input, unicode(encoding), False)
- if newinput is None:
- self.buffer = input
- return ('', 0)
- input = newinput
- else:
- self.encoding = detectencoding_unicode(input, False)[0]
- if self.encoding is not None:
- if self.encoding == 'css':
- raise ValueError('css not allowed as encoding name')
- self.encoding == 'css'
- self.streamwriter = codecs.getwriter(self.encoding)(self.stream, self._errors)
- encoding = self.encoding
- if self.encoding.replace('_', '-').lower() == 'utf-8-sig':
- input = _fixencoding(input, u'utf-8', True)
-
- self.buffer = u''
- else:
- self.buffer = input
- return ('', 0)
- self.encoding is not None
- return (self.streamwriter.encode(input, errors)[0], li)
-
-
- def _geterrors(self):
- return self._errors
-
-
- def _seterrors(self, errors):
- if self.streamwriter is not None:
- self.streamwriter.errors = errors
-
- self._errors = errors
-
- errors = property(_geterrors, _seterrors)
-
-
- class StreamReader(codecs.StreamReader):
-
- def __init__(self, stream, errors = 'strict', encoding = None, force = True):
- codecs.StreamReader.__init__(self, stream, errors)
- self.streamreader = None
- self.encoding = encoding
- self.force = force
- self._errors = errors
-
-
- def decode(self, input, errors = 'strict'):
- if self.streamreader is None:
- if self.encoding is None or not (self.force):
- (encoding, explicit) = detectencoding_str(input, False)
- if encoding is None:
- return (u'', 0)
- if encoding == 'css':
- raise ValueError('css not allowed as encoding name')
- encoding == 'css'
- if explicit or not (self.force) or self.encoding is None:
- self.encoding = encoding
-
-
- streamreader = codecs.getreader(self.encoding)
- streamreader = streamreader(self.stream, self._errors)
- (output, consumed) = streamreader.decode(input, errors)
- encoding = self.encoding
- if encoding.replace('_', '-').lower() == 'utf-8-sig':
- encoding = 'utf-8'
-
- newoutput = _fixencoding(output, unicode(encoding), False)
- if newoutput is not None:
- self.streamreader = streamreader
- return (newoutput, consumed)
- return (u'', 0)
- return self.streamreader.decode(input, errors)
-
-
- def _geterrors(self):
- return self._errors
-
-
- def _seterrors(self, errors):
- if self.streamreader is not None:
- self.streamreader.errors = errors
-
- self._errors = errors
-
- errors = property(_geterrors, _seterrors)
-
- if hasattr(codecs, 'CodecInfo'):
-
- def search_function(name):
- if name == 'css':
- return codecs.CodecInfo(name = 'css', encode = encode, decode = decode, incrementalencoder = IncrementalEncoder, incrementaldecoder = IncrementalDecoder, streamwriter = StreamWriter, streamreader = StreamReader)
-
- else:
-
- def utf8sig_encode(input, errors = 'strict'):
- return (codecs.BOM_UTF8 + codecs.utf_8_encode(input, errors)[0], len(input))
-
-
- def utf8sig_decode(input, errors = 'strict'):
- prefix = 0
- if input[:3] == codecs.BOM_UTF8:
- input = input[3:]
- prefix = 3
-
- (output, consumed) = codecs.utf_8_decode(input, errors, True)
- return (output, consumed + prefix)
-
-
- class UTF8SigStreamWriter(codecs.StreamWriter):
-
- def reset(self):
- codecs.StreamWriter.reset(self)
-
- try:
- del self.encode
- except AttributeError:
- pass
-
-
-
- def encode(self, input, errors = 'strict'):
- self.encode = codecs.utf_8_encode
- return utf8sig_encode(input, errors)
-
-
-
- class UTF8SigStreamReader(codecs.StreamReader):
-
- def reset(self):
- codecs.StreamReader.reset(self)
-
- try:
- del self.decode
- except AttributeError:
- pass
-
-
-
- def decode(self, input, errors = 'strict'):
- if len(input) < 3 and codecs.BOM_UTF8.startswith(input):
- return (u'', 0)
- self.decode = codecs.utf_8_decode
- return utf8sig_decode(input, errors)
-
-
-
- def search_function(name):
- import encodings
- name = encodings.normalize_encoding(name)
- if name == 'css':
- return (encode, decode, StreamReader, StreamWriter)
- if name == 'utf_8_sig':
- return (utf8sig_encode, utf8sig_decode, UTF8SigStreamReader, UTF8SigStreamWriter)
-
- codecs.register(search_function)
-
- def cssescape(exc):
- if not isinstance(exc, UnicodeEncodeError):
- raise TypeError("don't know how to handle %r" % exc)
- isinstance(exc, UnicodeEncodeError)
- return (u''.join((lambda .0: for c in .0:
- u'\\%06x' % ord(c))(exc.object[exc.start:exc.end])), exc.end)
-
- codecs.register_error('cssescape', cssescape)
-