]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/python/contrib/Lib/encodings/rot_13.py
Inital import
[l4.git] / l4 / pkg / python / contrib / Lib / encodings / rot_13.py
1 #!/usr/bin/env python
2 """ Python Character Mapping Codec for ROT13.
3
4     See http://ucsub.colorado.edu/~kominek/rot13/ for details.
5
6     Written by Marc-Andre Lemburg (mal@lemburg.com).
7
8 """#"
9
10 import codecs
11
12 ### Codec APIs
13
14 class Codec(codecs.Codec):
15
16     def encode(self,input,errors='strict'):
17         return codecs.charmap_encode(input,errors,encoding_map)
18
19     def decode(self,input,errors='strict'):
20         return codecs.charmap_decode(input,errors,decoding_map)
21
22 class IncrementalEncoder(codecs.IncrementalEncoder):
23     def encode(self, input, final=False):
24         return codecs.charmap_encode(input,self.errors,encoding_map)[0]
25
26 class IncrementalDecoder(codecs.IncrementalDecoder):
27     def decode(self, input, final=False):
28         return codecs.charmap_decode(input,self.errors,decoding_map)[0]
29
30 class StreamWriter(Codec,codecs.StreamWriter):
31     pass
32
33 class StreamReader(Codec,codecs.StreamReader):
34     pass
35
36 ### encodings module API
37
38 def getregentry():
39     return codecs.CodecInfo(
40         name='rot-13',
41         encode=Codec().encode,
42         decode=Codec().decode,
43         incrementalencoder=IncrementalEncoder,
44         incrementaldecoder=IncrementalDecoder,
45         streamwriter=StreamWriter,
46         streamreader=StreamReader,
47     )
48
49 ### Decoding Map
50
51 decoding_map = codecs.make_identity_dict(range(256))
52 decoding_map.update({
53    0x0041: 0x004e,
54    0x0042: 0x004f,
55    0x0043: 0x0050,
56    0x0044: 0x0051,
57    0x0045: 0x0052,
58    0x0046: 0x0053,
59    0x0047: 0x0054,
60    0x0048: 0x0055,
61    0x0049: 0x0056,
62    0x004a: 0x0057,
63    0x004b: 0x0058,
64    0x004c: 0x0059,
65    0x004d: 0x005a,
66    0x004e: 0x0041,
67    0x004f: 0x0042,
68    0x0050: 0x0043,
69    0x0051: 0x0044,
70    0x0052: 0x0045,
71    0x0053: 0x0046,
72    0x0054: 0x0047,
73    0x0055: 0x0048,
74    0x0056: 0x0049,
75    0x0057: 0x004a,
76    0x0058: 0x004b,
77    0x0059: 0x004c,
78    0x005a: 0x004d,
79    0x0061: 0x006e,
80    0x0062: 0x006f,
81    0x0063: 0x0070,
82    0x0064: 0x0071,
83    0x0065: 0x0072,
84    0x0066: 0x0073,
85    0x0067: 0x0074,
86    0x0068: 0x0075,
87    0x0069: 0x0076,
88    0x006a: 0x0077,
89    0x006b: 0x0078,
90    0x006c: 0x0079,
91    0x006d: 0x007a,
92    0x006e: 0x0061,
93    0x006f: 0x0062,
94    0x0070: 0x0063,
95    0x0071: 0x0064,
96    0x0072: 0x0065,
97    0x0073: 0x0066,
98    0x0074: 0x0067,
99    0x0075: 0x0068,
100    0x0076: 0x0069,
101    0x0077: 0x006a,
102    0x0078: 0x006b,
103    0x0079: 0x006c,
104    0x007a: 0x006d,
105 })
106
107 ### Encoding Map
108
109 encoding_map = codecs.make_encoding_map(decoding_map)
110
111 ### Filter API
112
113 def rot13(infile, outfile):
114     outfile.write(infile.read().encode('rot-13'))
115
116 if __name__ == '__main__':
117     import sys
118     rot13(sys.stdin, sys.stdout)