xref: /aosp_15_r20/prebuilts/build-tools/common/py3-stdlib/encodings/rot_13.py (revision cda5da8d549138a6648c5ee6d7a49cf8f4a657be)
1*cda5da8dSAndroid Build Coastguard Worker#!/usr/bin/env python
2*cda5da8dSAndroid Build Coastguard Worker""" Python Character Mapping Codec for ROT13.
3*cda5da8dSAndroid Build Coastguard Worker
4*cda5da8dSAndroid Build Coastguard WorkerThis codec de/encodes from str to str.
5*cda5da8dSAndroid Build Coastguard Worker
6*cda5da8dSAndroid Build Coastguard WorkerWritten by Marc-Andre Lemburg ([email protected]).
7*cda5da8dSAndroid Build Coastguard Worker"""
8*cda5da8dSAndroid Build Coastguard Worker
9*cda5da8dSAndroid Build Coastguard Workerimport codecs
10*cda5da8dSAndroid Build Coastguard Worker
11*cda5da8dSAndroid Build Coastguard Worker### Codec APIs
12*cda5da8dSAndroid Build Coastguard Worker
13*cda5da8dSAndroid Build Coastguard Workerclass Codec(codecs.Codec):
14*cda5da8dSAndroid Build Coastguard Worker    def encode(self, input, errors='strict'):
15*cda5da8dSAndroid Build Coastguard Worker        return (str.translate(input, rot13_map), len(input))
16*cda5da8dSAndroid Build Coastguard Worker
17*cda5da8dSAndroid Build Coastguard Worker    def decode(self, input, errors='strict'):
18*cda5da8dSAndroid Build Coastguard Worker        return (str.translate(input, rot13_map), len(input))
19*cda5da8dSAndroid Build Coastguard Worker
20*cda5da8dSAndroid Build Coastguard Workerclass IncrementalEncoder(codecs.IncrementalEncoder):
21*cda5da8dSAndroid Build Coastguard Worker    def encode(self, input, final=False):
22*cda5da8dSAndroid Build Coastguard Worker        return str.translate(input, rot13_map)
23*cda5da8dSAndroid Build Coastguard Worker
24*cda5da8dSAndroid Build Coastguard Workerclass IncrementalDecoder(codecs.IncrementalDecoder):
25*cda5da8dSAndroid Build Coastguard Worker    def decode(self, input, final=False):
26*cda5da8dSAndroid Build Coastguard Worker        return str.translate(input, rot13_map)
27*cda5da8dSAndroid Build Coastguard Worker
28*cda5da8dSAndroid Build Coastguard Workerclass StreamWriter(Codec,codecs.StreamWriter):
29*cda5da8dSAndroid Build Coastguard Worker    pass
30*cda5da8dSAndroid Build Coastguard Worker
31*cda5da8dSAndroid Build Coastguard Workerclass StreamReader(Codec,codecs.StreamReader):
32*cda5da8dSAndroid Build Coastguard Worker    pass
33*cda5da8dSAndroid Build Coastguard Worker
34*cda5da8dSAndroid Build Coastguard Worker### encodings module API
35*cda5da8dSAndroid Build Coastguard Worker
36*cda5da8dSAndroid Build Coastguard Workerdef getregentry():
37*cda5da8dSAndroid Build Coastguard Worker    return codecs.CodecInfo(
38*cda5da8dSAndroid Build Coastguard Worker        name='rot-13',
39*cda5da8dSAndroid Build Coastguard Worker        encode=Codec().encode,
40*cda5da8dSAndroid Build Coastguard Worker        decode=Codec().decode,
41*cda5da8dSAndroid Build Coastguard Worker        incrementalencoder=IncrementalEncoder,
42*cda5da8dSAndroid Build Coastguard Worker        incrementaldecoder=IncrementalDecoder,
43*cda5da8dSAndroid Build Coastguard Worker        streamwriter=StreamWriter,
44*cda5da8dSAndroid Build Coastguard Worker        streamreader=StreamReader,
45*cda5da8dSAndroid Build Coastguard Worker        _is_text_encoding=False,
46*cda5da8dSAndroid Build Coastguard Worker    )
47*cda5da8dSAndroid Build Coastguard Worker
48*cda5da8dSAndroid Build Coastguard Worker### Map
49*cda5da8dSAndroid Build Coastguard Worker
50*cda5da8dSAndroid Build Coastguard Workerrot13_map = codecs.make_identity_dict(range(256))
51*cda5da8dSAndroid Build Coastguard Workerrot13_map.update({
52*cda5da8dSAndroid Build Coastguard Worker   0x0041: 0x004e,
53*cda5da8dSAndroid Build Coastguard Worker   0x0042: 0x004f,
54*cda5da8dSAndroid Build Coastguard Worker   0x0043: 0x0050,
55*cda5da8dSAndroid Build Coastguard Worker   0x0044: 0x0051,
56*cda5da8dSAndroid Build Coastguard Worker   0x0045: 0x0052,
57*cda5da8dSAndroid Build Coastguard Worker   0x0046: 0x0053,
58*cda5da8dSAndroid Build Coastguard Worker   0x0047: 0x0054,
59*cda5da8dSAndroid Build Coastguard Worker   0x0048: 0x0055,
60*cda5da8dSAndroid Build Coastguard Worker   0x0049: 0x0056,
61*cda5da8dSAndroid Build Coastguard Worker   0x004a: 0x0057,
62*cda5da8dSAndroid Build Coastguard Worker   0x004b: 0x0058,
63*cda5da8dSAndroid Build Coastguard Worker   0x004c: 0x0059,
64*cda5da8dSAndroid Build Coastguard Worker   0x004d: 0x005a,
65*cda5da8dSAndroid Build Coastguard Worker   0x004e: 0x0041,
66*cda5da8dSAndroid Build Coastguard Worker   0x004f: 0x0042,
67*cda5da8dSAndroid Build Coastguard Worker   0x0050: 0x0043,
68*cda5da8dSAndroid Build Coastguard Worker   0x0051: 0x0044,
69*cda5da8dSAndroid Build Coastguard Worker   0x0052: 0x0045,
70*cda5da8dSAndroid Build Coastguard Worker   0x0053: 0x0046,
71*cda5da8dSAndroid Build Coastguard Worker   0x0054: 0x0047,
72*cda5da8dSAndroid Build Coastguard Worker   0x0055: 0x0048,
73*cda5da8dSAndroid Build Coastguard Worker   0x0056: 0x0049,
74*cda5da8dSAndroid Build Coastguard Worker   0x0057: 0x004a,
75*cda5da8dSAndroid Build Coastguard Worker   0x0058: 0x004b,
76*cda5da8dSAndroid Build Coastguard Worker   0x0059: 0x004c,
77*cda5da8dSAndroid Build Coastguard Worker   0x005a: 0x004d,
78*cda5da8dSAndroid Build Coastguard Worker   0x0061: 0x006e,
79*cda5da8dSAndroid Build Coastguard Worker   0x0062: 0x006f,
80*cda5da8dSAndroid Build Coastguard Worker   0x0063: 0x0070,
81*cda5da8dSAndroid Build Coastguard Worker   0x0064: 0x0071,
82*cda5da8dSAndroid Build Coastguard Worker   0x0065: 0x0072,
83*cda5da8dSAndroid Build Coastguard Worker   0x0066: 0x0073,
84*cda5da8dSAndroid Build Coastguard Worker   0x0067: 0x0074,
85*cda5da8dSAndroid Build Coastguard Worker   0x0068: 0x0075,
86*cda5da8dSAndroid Build Coastguard Worker   0x0069: 0x0076,
87*cda5da8dSAndroid Build Coastguard Worker   0x006a: 0x0077,
88*cda5da8dSAndroid Build Coastguard Worker   0x006b: 0x0078,
89*cda5da8dSAndroid Build Coastguard Worker   0x006c: 0x0079,
90*cda5da8dSAndroid Build Coastguard Worker   0x006d: 0x007a,
91*cda5da8dSAndroid Build Coastguard Worker   0x006e: 0x0061,
92*cda5da8dSAndroid Build Coastguard Worker   0x006f: 0x0062,
93*cda5da8dSAndroid Build Coastguard Worker   0x0070: 0x0063,
94*cda5da8dSAndroid Build Coastguard Worker   0x0071: 0x0064,
95*cda5da8dSAndroid Build Coastguard Worker   0x0072: 0x0065,
96*cda5da8dSAndroid Build Coastguard Worker   0x0073: 0x0066,
97*cda5da8dSAndroid Build Coastguard Worker   0x0074: 0x0067,
98*cda5da8dSAndroid Build Coastguard Worker   0x0075: 0x0068,
99*cda5da8dSAndroid Build Coastguard Worker   0x0076: 0x0069,
100*cda5da8dSAndroid Build Coastguard Worker   0x0077: 0x006a,
101*cda5da8dSAndroid Build Coastguard Worker   0x0078: 0x006b,
102*cda5da8dSAndroid Build Coastguard Worker   0x0079: 0x006c,
103*cda5da8dSAndroid Build Coastguard Worker   0x007a: 0x006d,
104*cda5da8dSAndroid Build Coastguard Worker})
105*cda5da8dSAndroid Build Coastguard Worker
106*cda5da8dSAndroid Build Coastguard Worker### Filter API
107*cda5da8dSAndroid Build Coastguard Worker
108*cda5da8dSAndroid Build Coastguard Workerdef rot13(infile, outfile):
109*cda5da8dSAndroid Build Coastguard Worker    outfile.write(codecs.encode(infile.read(), 'rot-13'))
110*cda5da8dSAndroid Build Coastguard Worker
111*cda5da8dSAndroid Build Coastguard Workerif __name__ == '__main__':
112*cda5da8dSAndroid Build Coastguard Worker    import sys
113*cda5da8dSAndroid Build Coastguard Worker    rot13(sys.stdin, sys.stdout)
114