+++ /dev/null
-"""\r
-Python 'utf-32' Codec\r
-"""\r
-import codecs, sys\r
-\r
-### Codec APIs\r
-\r
-encode = codecs.utf_32_encode\r
-\r
-def decode(input, errors='strict'):\r
- return codecs.utf_32_decode(input, errors, True)\r
-\r
-class IncrementalEncoder(codecs.IncrementalEncoder):\r
- def __init__(self, errors='strict'):\r
- codecs.IncrementalEncoder.__init__(self, errors)\r
- self.encoder = None\r
-\r
- def encode(self, input, final=False):\r
- if self.encoder is None:\r
- result = codecs.utf_32_encode(input, self.errors)[0]\r
- if sys.byteorder == 'little':\r
- self.encoder = codecs.utf_32_le_encode\r
- else:\r
- self.encoder = codecs.utf_32_be_encode\r
- return result\r
- return self.encoder(input, self.errors)[0]\r
-\r
- def reset(self):\r
- codecs.IncrementalEncoder.reset(self)\r
- self.encoder = None\r
-\r
- def getstate(self):\r
- # state info we return to the caller:\r
- # 0: stream is in natural order for this platform\r
- # 2: endianness hasn't been determined yet\r
- # (we're never writing in unnatural order)\r
- return (2 if self.encoder is None else 0)\r
-\r
- def setstate(self, state):\r
- if state:\r
- self.encoder = None\r
- else:\r
- if sys.byteorder == 'little':\r
- self.encoder = codecs.utf_32_le_encode\r
- else:\r
- self.encoder = codecs.utf_32_be_encode\r
-\r
-class IncrementalDecoder(codecs.BufferedIncrementalDecoder):\r
- def __init__(self, errors='strict'):\r
- codecs.BufferedIncrementalDecoder.__init__(self, errors)\r
- self.decoder = None\r
-\r
- def _buffer_decode(self, input, errors, final):\r
- if self.decoder is None:\r
- (output, consumed, byteorder) = \\r
- codecs.utf_32_ex_decode(input, errors, 0, final)\r
- if byteorder == -1:\r
- self.decoder = codecs.utf_32_le_decode\r
- elif byteorder == 1:\r
- self.decoder = codecs.utf_32_be_decode\r
- elif consumed >= 4:\r
- raise UnicodeError("UTF-32 stream does not start with BOM")\r
- return (output, consumed)\r
- return self.decoder(input, self.errors, final)\r
-\r
- def reset(self):\r
- codecs.BufferedIncrementalDecoder.reset(self)\r
- self.decoder = None\r
-\r
- def getstate(self):\r
- # additonal state info from the base class must be None here,\r
- # as it isn't passed along to the caller\r
- state = codecs.BufferedIncrementalDecoder.getstate(self)[0]\r
- # additional state info we pass to the caller:\r
- # 0: stream is in natural order for this platform\r
- # 1: stream is in unnatural order\r
- # 2: endianness hasn't been determined yet\r
- if self.decoder is None:\r
- return (state, 2)\r
- addstate = int((sys.byteorder == "big") !=\r
- (self.decoder is codecs.utf_32_be_decode))\r
- return (state, addstate)\r
-\r
- def setstate(self, state):\r
- # state[1] will be ignored by BufferedIncrementalDecoder.setstate()\r
- codecs.BufferedIncrementalDecoder.setstate(self, state)\r
- state = state[1]\r
- if state == 0:\r
- self.decoder = (codecs.utf_32_be_decode\r
- if sys.byteorder == "big"\r
- else codecs.utf_32_le_decode)\r
- elif state == 1:\r
- self.decoder = (codecs.utf_32_le_decode\r
- if sys.byteorder == "big"\r
- else codecs.utf_32_be_decode)\r
- else:\r
- self.decoder = None\r
-\r
-class StreamWriter(codecs.StreamWriter):\r
- def __init__(self, stream, errors='strict'):\r
- self.encoder = None\r
- codecs.StreamWriter.__init__(self, stream, errors)\r
-\r
- def reset(self):\r
- codecs.StreamWriter.reset(self)\r
- self.encoder = None\r
-\r
- def encode(self, input, errors='strict'):\r
- if self.encoder is None:\r
- result = codecs.utf_32_encode(input, errors)\r
- if sys.byteorder == 'little':\r
- self.encoder = codecs.utf_32_le_encode\r
- else:\r
- self.encoder = codecs.utf_32_be_encode\r
- return result\r
- else:\r
- return self.encoder(input, errors)\r
-\r
-class StreamReader(codecs.StreamReader):\r
-\r
- def reset(self):\r
- codecs.StreamReader.reset(self)\r
- try:\r
- del self.decode\r
- except AttributeError:\r
- pass\r
-\r
- def decode(self, input, errors='strict'):\r
- (object, consumed, byteorder) = \\r
- codecs.utf_32_ex_decode(input, errors, 0, False)\r
- if byteorder == -1:\r
- self.decode = codecs.utf_32_le_decode\r
- elif byteorder == 1:\r
- self.decode = codecs.utf_32_be_decode\r
- elif consumed>=4:\r
- raise UnicodeError,"UTF-32 stream does not start with BOM"\r
- return (object, consumed)\r
-\r
-### encodings module API\r
-\r
-def getregentry():\r
- return codecs.CodecInfo(\r
- name='utf-32',\r
- encode=encode,\r
- decode=decode,\r
- incrementalencoder=IncrementalEncoder,\r
- incrementaldecoder=IncrementalDecoder,\r
- streamreader=StreamReader,\r
- streamwriter=StreamWriter,\r
- )\r