]> git.proxmox.com Git - mirror_edk2.git/blobdiff - AppPkg/Applications/Python/Python-2.7.10/Lib/encodings/utf_32.py
AppPkg/Applications/Python/Python-2.7.10: Initial Checkin part 4/5.
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.10 / Lib / encodings / utf_32.py
diff --git a/AppPkg/Applications/Python/Python-2.7.10/Lib/encodings/utf_32.py b/AppPkg/Applications/Python/Python-2.7.10/Lib/encodings/utf_32.py
new file mode 100644 (file)
index 0000000..9d836ea
--- /dev/null
@@ -0,0 +1,150 @@
+"""\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