comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/lib/python3.8/encodings/utf_16.py @ 68:5028fdace37b

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