PageRenderTime 827ms CodeModel.GetById 654ms app.highlight 8ms RepoModel.GetById 163ms app.codeStats 0ms

/Lib/encodings/rot_13.py

http://unladen-swallow.googlecode.com/
Python | 118 lines | 88 code | 18 blank | 12 comment | 1 complexity | c2194f109f5936c23f68156d29ccf6ee MD5 | raw file
  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
 10import codecs
 11
 12### Codec APIs
 13
 14class 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
 22class IncrementalEncoder(codecs.IncrementalEncoder):
 23    def encode(self, input, final=False):
 24        return codecs.charmap_encode(input,self.errors,encoding_map)[0]
 25
 26class IncrementalDecoder(codecs.IncrementalDecoder):
 27    def decode(self, input, final=False):
 28        return codecs.charmap_decode(input,self.errors,decoding_map)[0]
 29
 30class StreamWriter(Codec,codecs.StreamWriter):
 31    pass
 32
 33class StreamReader(Codec,codecs.StreamReader):
 34    pass
 35
 36### encodings module API
 37
 38def 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
 51decoding_map = codecs.make_identity_dict(range(256))
 52decoding_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
109encoding_map = codecs.make_encoding_map(decoding_map)
110
111### Filter API
112
113def rot13(infile, outfile):
114    outfile.write(infile.read().encode('rot-13'))
115
116if __name__ == '__main__':
117    import sys
118    rot13(sys.stdin, sys.stdout)