Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/lib/python3.8/encodings/utf_32.py @ 69:33d812a61356
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 17:55:14 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
67:0e9998148a16 | 69:33d812a61356 |
---|---|
1 """ | |
2 Python 'utf-32' Codec | |
3 """ | |
4 import codecs, sys | |
5 | |
6 ### Codec APIs | |
7 | |
8 encode = codecs.utf_32_encode | |
9 | |
10 def decode(input, errors='strict'): | |
11 return codecs.utf_32_decode(input, errors, True) | |
12 | |
13 class IncrementalEncoder(codecs.IncrementalEncoder): | |
14 def __init__(self, errors='strict'): | |
15 codecs.IncrementalEncoder.__init__(self, errors) | |
16 self.encoder = None | |
17 | |
18 def encode(self, input, final=False): | |
19 if self.encoder is None: | |
20 result = codecs.utf_32_encode(input, self.errors)[0] | |
21 if sys.byteorder == 'little': | |
22 self.encoder = codecs.utf_32_le_encode | |
23 else: | |
24 self.encoder = codecs.utf_32_be_encode | |
25 return result | |
26 return self.encoder(input, self.errors)[0] | |
27 | |
28 def reset(self): | |
29 codecs.IncrementalEncoder.reset(self) | |
30 self.encoder = None | |
31 | |
32 def getstate(self): | |
33 # state info we return to the caller: | |
34 # 0: stream is in natural order for this platform | |
35 # 2: endianness hasn't been determined yet | |
36 # (we're never writing in unnatural order) | |
37 return (2 if self.encoder is None else 0) | |
38 | |
39 def setstate(self, state): | |
40 if state: | |
41 self.encoder = None | |
42 else: | |
43 if sys.byteorder == 'little': | |
44 self.encoder = codecs.utf_32_le_encode | |
45 else: | |
46 self.encoder = codecs.utf_32_be_encode | |
47 | |
48 class IncrementalDecoder(codecs.BufferedIncrementalDecoder): | |
49 def __init__(self, errors='strict'): | |
50 codecs.BufferedIncrementalDecoder.__init__(self, errors) | |
51 self.decoder = None | |
52 | |
53 def _buffer_decode(self, input, errors, final): | |
54 if self.decoder is None: | |
55 (output, consumed, byteorder) = \ | |
56 codecs.utf_32_ex_decode(input, errors, 0, final) | |
57 if byteorder == -1: | |
58 self.decoder = codecs.utf_32_le_decode | |
59 elif byteorder == 1: | |
60 self.decoder = codecs.utf_32_be_decode | |
61 elif consumed >= 4: | |
62 raise UnicodeError("UTF-32 stream does not start with BOM") | |
63 return (output, consumed) | |
64 return self.decoder(input, self.errors, final) | |
65 | |
66 def reset(self): | |
67 codecs.BufferedIncrementalDecoder.reset(self) | |
68 self.decoder = None | |
69 | |
70 def getstate(self): | |
71 # additional state info from the base class must be None here, | |
72 # as it isn't passed along to the caller | |
73 state = codecs.BufferedIncrementalDecoder.getstate(self)[0] | |
74 # additional state info we pass to the caller: | |
75 # 0: stream is in natural order for this platform | |
76 # 1: stream is in unnatural order | |
77 # 2: endianness hasn't been determined yet | |
78 if self.decoder is None: | |
79 return (state, 2) | |
80 addstate = int((sys.byteorder == "big") != | |
81 (self.decoder is codecs.utf_32_be_decode)) | |
82 return (state, addstate) | |
83 | |
84 def setstate(self, state): | |
85 # state[1] will be ignored by BufferedIncrementalDecoder.setstate() | |
86 codecs.BufferedIncrementalDecoder.setstate(self, state) | |
87 state = state[1] | |
88 if state == 0: | |
89 self.decoder = (codecs.utf_32_be_decode | |
90 if sys.byteorder == "big" | |
91 else codecs.utf_32_le_decode) | |
92 elif state == 1: | |
93 self.decoder = (codecs.utf_32_le_decode | |
94 if sys.byteorder == "big" | |
95 else codecs.utf_32_be_decode) | |
96 else: | |
97 self.decoder = None | |
98 | |
99 class StreamWriter(codecs.StreamWriter): | |
100 def __init__(self, stream, errors='strict'): | |
101 self.encoder = None | |
102 codecs.StreamWriter.__init__(self, stream, errors) | |
103 | |
104 def reset(self): | |
105 codecs.StreamWriter.reset(self) | |
106 self.encoder = None | |
107 | |
108 def encode(self, input, errors='strict'): | |
109 if self.encoder is None: | |
110 result = codecs.utf_32_encode(input, errors) | |
111 if sys.byteorder == 'little': | |
112 self.encoder = codecs.utf_32_le_encode | |
113 else: | |
114 self.encoder = codecs.utf_32_be_encode | |
115 return result | |
116 else: | |
117 return self.encoder(input, errors) | |
118 | |
119 class StreamReader(codecs.StreamReader): | |
120 | |
121 def reset(self): | |
122 codecs.StreamReader.reset(self) | |
123 try: | |
124 del self.decode | |
125 except AttributeError: | |
126 pass | |
127 | |
128 def decode(self, input, errors='strict'): | |
129 (object, consumed, byteorder) = \ | |
130 codecs.utf_32_ex_decode(input, errors, 0, False) | |
131 if byteorder == -1: | |
132 self.decode = codecs.utf_32_le_decode | |
133 elif byteorder == 1: | |
134 self.decode = codecs.utf_32_be_decode | |
135 elif consumed>=4: | |
136 raise UnicodeError("UTF-32 stream does not start with BOM") | |
137 return (object, consumed) | |
138 | |
139 ### encodings module API | |
140 | |
141 def getregentry(): | |
142 return codecs.CodecInfo( | |
143 name='utf-32', | |
144 encode=encode, | |
145 decode=decode, | |
146 incrementalencoder=IncrementalEncoder, | |
147 incrementaldecoder=IncrementalDecoder, | |
148 streamreader=StreamReader, | |
149 streamwriter=StreamWriter, | |
150 ) |