1# coding: utf-8
2
3"""
4Implementation of the teletex T.61 codec. Exports the following items:
5
6 - register()
7"""
8
9from __future__ import unicode_literals, division, absolute_import, print_function
10
11import codecs
12
13
14class TeletexCodec(codecs.Codec):
15
16 def encode(self, input_, errors='strict'):
17 return codecs.charmap_encode(input_, errors, ENCODING_TABLE)
18
19 def decode(self, input_, errors='strict'):
20 return codecs.charmap_decode(input_, errors, DECODING_TABLE)
21
22
23class TeletexIncrementalEncoder(codecs.IncrementalEncoder):
24
25 def encode(self, input_, final=False):
26 return codecs.charmap_encode(input_, self.errors, ENCODING_TABLE)[0]
27
28
29class TeletexIncrementalDecoder(codecs.IncrementalDecoder):
30
31 def decode(self, input_, final=False):
32 return codecs.charmap_decode(input_, self.errors, DECODING_TABLE)[0]
33
34
35class TeletexStreamWriter(TeletexCodec, codecs.StreamWriter):
36
37 pass
38
39
40class TeletexStreamReader(TeletexCodec, codecs.StreamReader):
41
42 pass
43
44
45def teletex_search_function(name):
46 """
47 Search function for teletex codec that is passed to codecs.register()
48 """
49
50 if name != 'teletex':
51 return None
52
53 return codecs.CodecInfo(
54 name='teletex',
55 encode=TeletexCodec().encode,
56 decode=TeletexCodec().decode,
57 incrementalencoder=TeletexIncrementalEncoder,
58 incrementaldecoder=TeletexIncrementalDecoder,
59 streamreader=TeletexStreamReader,
60 streamwriter=TeletexStreamWriter,
61 )
62
63
64def register():
65 """
66 Registers the teletex codec
67 """
68
69 codecs.register(teletex_search_function)
70
71
72# http://en.wikipedia.org/wiki/ITU_T.61
73DECODING_TABLE = (
74 '\u0000'
75 '\u0001'
76 '\u0002'
77 '\u0003'
78 '\u0004'
79 '\u0005'
80 '\u0006'
81 '\u0007'
82 '\u0008'
83 '\u0009'
84 '\u000A'
85 '\u000B'
86 '\u000C'
87 '\u000D'
88 '\u000E'
89 '\u000F'
90 '\u0010'
91 '\u0011'
92 '\u0012'
93 '\u0013'
94 '\u0014'
95 '\u0015'
96 '\u0016'
97 '\u0017'
98 '\u0018'
99 '\u0019'
100 '\u001A'
101 '\u001B'
102 '\u001C'
103 '\u001D'
104 '\u001E'
105 '\u001F'
106 '\u0020'
107 '\u0021'
108 '\u0022'
109 '\ufffe'
110 '\ufffe'
111 '\u0025'
112 '\u0026'
113 '\u0027'
114 '\u0028'
115 '\u0029'
116 '\u002A'
117 '\u002B'
118 '\u002C'
119 '\u002D'
120 '\u002E'
121 '\u002F'
122 '\u0030'
123 '\u0031'
124 '\u0032'
125 '\u0033'
126 '\u0034'
127 '\u0035'
128 '\u0036'
129 '\u0037'
130 '\u0038'
131 '\u0039'
132 '\u003A'
133 '\u003B'
134 '\u003C'
135 '\u003D'
136 '\u003E'
137 '\u003F'
138 '\u0040'
139 '\u0041'
140 '\u0042'
141 '\u0043'
142 '\u0044'
143 '\u0045'
144 '\u0046'
145 '\u0047'
146 '\u0048'
147 '\u0049'
148 '\u004A'
149 '\u004B'
150 '\u004C'
151 '\u004D'
152 '\u004E'
153 '\u004F'
154 '\u0050'
155 '\u0051'
156 '\u0052'
157 '\u0053'
158 '\u0054'
159 '\u0055'
160 '\u0056'
161 '\u0057'
162 '\u0058'
163 '\u0059'
164 '\u005A'
165 '\u005B'
166 '\ufffe'
167 '\u005D'
168 '\ufffe'
169 '\u005F'
170 '\ufffe'
171 '\u0061'
172 '\u0062'
173 '\u0063'
174 '\u0064'
175 '\u0065'
176 '\u0066'
177 '\u0067'
178 '\u0068'
179 '\u0069'
180 '\u006A'
181 '\u006B'
182 '\u006C'
183 '\u006D'
184 '\u006E'
185 '\u006F'
186 '\u0070'
187 '\u0071'
188 '\u0072'
189 '\u0073'
190 '\u0074'
191 '\u0075'
192 '\u0076'
193 '\u0077'
194 '\u0078'
195 '\u0079'
196 '\u007A'
197 '\ufffe'
198 '\u007C'
199 '\ufffe'
200 '\ufffe'
201 '\u007F'
202 '\u0080'
203 '\u0081'
204 '\u0082'
205 '\u0083'
206 '\u0084'
207 '\u0085'
208 '\u0086'
209 '\u0087'
210 '\u0088'
211 '\u0089'
212 '\u008A'
213 '\u008B'
214 '\u008C'
215 '\u008D'
216 '\u008E'
217 '\u008F'
218 '\u0090'
219 '\u0091'
220 '\u0092'
221 '\u0093'
222 '\u0094'
223 '\u0095'
224 '\u0096'
225 '\u0097'
226 '\u0098'
227 '\u0099'
228 '\u009A'
229 '\u009B'
230 '\u009C'
231 '\u009D'
232 '\u009E'
233 '\u009F'
234 '\u00A0'
235 '\u00A1'
236 '\u00A2'
237 '\u00A3'
238 '\u0024'
239 '\u00A5'
240 '\u0023'
241 '\u00A7'
242 '\u00A4'
243 '\ufffe'
244 '\ufffe'
245 '\u00AB'
246 '\ufffe'
247 '\ufffe'
248 '\ufffe'
249 '\ufffe'
250 '\u00B0'
251 '\u00B1'
252 '\u00B2'
253 '\u00B3'
254 '\u00D7'
255 '\u00B5'
256 '\u00B6'
257 '\u00B7'
258 '\u00F7'
259 '\ufffe'
260 '\ufffe'
261 '\u00BB'
262 '\u00BC'
263 '\u00BD'
264 '\u00BE'
265 '\u00BF'
266 '\ufffe'
267 '\u0300'
268 '\u0301'
269 '\u0302'
270 '\u0303'
271 '\u0304'
272 '\u0306'
273 '\u0307'
274 '\u0308'
275 '\ufffe'
276 '\u030A'
277 '\u0327'
278 '\u0332'
279 '\u030B'
280 '\u0328'
281 '\u030C'
282 '\ufffe'
283 '\ufffe'
284 '\ufffe'
285 '\ufffe'
286 '\ufffe'
287 '\ufffe'
288 '\ufffe'
289 '\ufffe'
290 '\ufffe'
291 '\ufffe'
292 '\ufffe'
293 '\ufffe'
294 '\ufffe'
295 '\ufffe'
296 '\ufffe'
297 '\ufffe'
298 '\u2126'
299 '\u00C6'
300 '\u00D0'
301 '\u00AA'
302 '\u0126'
303 '\ufffe'
304 '\u0132'
305 '\u013F'
306 '\u0141'
307 '\u00D8'
308 '\u0152'
309 '\u00BA'
310 '\u00DE'
311 '\u0166'
312 '\u014A'
313 '\u0149'
314 '\u0138'
315 '\u00E6'
316 '\u0111'
317 '\u00F0'
318 '\u0127'
319 '\u0131'
320 '\u0133'
321 '\u0140'
322 '\u0142'
323 '\u00F8'
324 '\u0153'
325 '\u00DF'
326 '\u00FE'
327 '\u0167'
328 '\u014B'
329 '\ufffe'
330)
331ENCODING_TABLE = codecs.charmap_build(DECODING_TABLE)