17db96d56Sopenharmony_ci#!/usr/bin/env python 27db96d56Sopenharmony_ci""" Python Character Mapping Codec for ROT13. 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ciThis codec de/encodes from str to str. 57db96d56Sopenharmony_ci 67db96d56Sopenharmony_ciWritten by Marc-Andre Lemburg (mal@lemburg.com). 77db96d56Sopenharmony_ci""" 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_ciimport codecs 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ci### Codec APIs 127db96d56Sopenharmony_ci 137db96d56Sopenharmony_ciclass Codec(codecs.Codec): 147db96d56Sopenharmony_ci def encode(self, input, errors='strict'): 157db96d56Sopenharmony_ci return (str.translate(input, rot13_map), len(input)) 167db96d56Sopenharmony_ci 177db96d56Sopenharmony_ci def decode(self, input, errors='strict'): 187db96d56Sopenharmony_ci return (str.translate(input, rot13_map), len(input)) 197db96d56Sopenharmony_ci 207db96d56Sopenharmony_ciclass IncrementalEncoder(codecs.IncrementalEncoder): 217db96d56Sopenharmony_ci def encode(self, input, final=False): 227db96d56Sopenharmony_ci return str.translate(input, rot13_map) 237db96d56Sopenharmony_ci 247db96d56Sopenharmony_ciclass IncrementalDecoder(codecs.IncrementalDecoder): 257db96d56Sopenharmony_ci def decode(self, input, final=False): 267db96d56Sopenharmony_ci return str.translate(input, rot13_map) 277db96d56Sopenharmony_ci 287db96d56Sopenharmony_ciclass StreamWriter(Codec,codecs.StreamWriter): 297db96d56Sopenharmony_ci pass 307db96d56Sopenharmony_ci 317db96d56Sopenharmony_ciclass StreamReader(Codec,codecs.StreamReader): 327db96d56Sopenharmony_ci pass 337db96d56Sopenharmony_ci 347db96d56Sopenharmony_ci### encodings module API 357db96d56Sopenharmony_ci 367db96d56Sopenharmony_cidef getregentry(): 377db96d56Sopenharmony_ci return codecs.CodecInfo( 387db96d56Sopenharmony_ci name='rot-13', 397db96d56Sopenharmony_ci encode=Codec().encode, 407db96d56Sopenharmony_ci decode=Codec().decode, 417db96d56Sopenharmony_ci incrementalencoder=IncrementalEncoder, 427db96d56Sopenharmony_ci incrementaldecoder=IncrementalDecoder, 437db96d56Sopenharmony_ci streamwriter=StreamWriter, 447db96d56Sopenharmony_ci streamreader=StreamReader, 457db96d56Sopenharmony_ci _is_text_encoding=False, 467db96d56Sopenharmony_ci ) 477db96d56Sopenharmony_ci 487db96d56Sopenharmony_ci### Map 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_cirot13_map = codecs.make_identity_dict(range(256)) 517db96d56Sopenharmony_cirot13_map.update({ 527db96d56Sopenharmony_ci 0x0041: 0x004e, 537db96d56Sopenharmony_ci 0x0042: 0x004f, 547db96d56Sopenharmony_ci 0x0043: 0x0050, 557db96d56Sopenharmony_ci 0x0044: 0x0051, 567db96d56Sopenharmony_ci 0x0045: 0x0052, 577db96d56Sopenharmony_ci 0x0046: 0x0053, 587db96d56Sopenharmony_ci 0x0047: 0x0054, 597db96d56Sopenharmony_ci 0x0048: 0x0055, 607db96d56Sopenharmony_ci 0x0049: 0x0056, 617db96d56Sopenharmony_ci 0x004a: 0x0057, 627db96d56Sopenharmony_ci 0x004b: 0x0058, 637db96d56Sopenharmony_ci 0x004c: 0x0059, 647db96d56Sopenharmony_ci 0x004d: 0x005a, 657db96d56Sopenharmony_ci 0x004e: 0x0041, 667db96d56Sopenharmony_ci 0x004f: 0x0042, 677db96d56Sopenharmony_ci 0x0050: 0x0043, 687db96d56Sopenharmony_ci 0x0051: 0x0044, 697db96d56Sopenharmony_ci 0x0052: 0x0045, 707db96d56Sopenharmony_ci 0x0053: 0x0046, 717db96d56Sopenharmony_ci 0x0054: 0x0047, 727db96d56Sopenharmony_ci 0x0055: 0x0048, 737db96d56Sopenharmony_ci 0x0056: 0x0049, 747db96d56Sopenharmony_ci 0x0057: 0x004a, 757db96d56Sopenharmony_ci 0x0058: 0x004b, 767db96d56Sopenharmony_ci 0x0059: 0x004c, 777db96d56Sopenharmony_ci 0x005a: 0x004d, 787db96d56Sopenharmony_ci 0x0061: 0x006e, 797db96d56Sopenharmony_ci 0x0062: 0x006f, 807db96d56Sopenharmony_ci 0x0063: 0x0070, 817db96d56Sopenharmony_ci 0x0064: 0x0071, 827db96d56Sopenharmony_ci 0x0065: 0x0072, 837db96d56Sopenharmony_ci 0x0066: 0x0073, 847db96d56Sopenharmony_ci 0x0067: 0x0074, 857db96d56Sopenharmony_ci 0x0068: 0x0075, 867db96d56Sopenharmony_ci 0x0069: 0x0076, 877db96d56Sopenharmony_ci 0x006a: 0x0077, 887db96d56Sopenharmony_ci 0x006b: 0x0078, 897db96d56Sopenharmony_ci 0x006c: 0x0079, 907db96d56Sopenharmony_ci 0x006d: 0x007a, 917db96d56Sopenharmony_ci 0x006e: 0x0061, 927db96d56Sopenharmony_ci 0x006f: 0x0062, 937db96d56Sopenharmony_ci 0x0070: 0x0063, 947db96d56Sopenharmony_ci 0x0071: 0x0064, 957db96d56Sopenharmony_ci 0x0072: 0x0065, 967db96d56Sopenharmony_ci 0x0073: 0x0066, 977db96d56Sopenharmony_ci 0x0074: 0x0067, 987db96d56Sopenharmony_ci 0x0075: 0x0068, 997db96d56Sopenharmony_ci 0x0076: 0x0069, 1007db96d56Sopenharmony_ci 0x0077: 0x006a, 1017db96d56Sopenharmony_ci 0x0078: 0x006b, 1027db96d56Sopenharmony_ci 0x0079: 0x006c, 1037db96d56Sopenharmony_ci 0x007a: 0x006d, 1047db96d56Sopenharmony_ci}) 1057db96d56Sopenharmony_ci 1067db96d56Sopenharmony_ci### Filter API 1077db96d56Sopenharmony_ci 1087db96d56Sopenharmony_cidef rot13(infile, outfile): 1097db96d56Sopenharmony_ci outfile.write(codecs.encode(infile.read(), 'rot-13')) 1107db96d56Sopenharmony_ci 1117db96d56Sopenharmony_ciif __name__ == '__main__': 1127db96d56Sopenharmony_ci import sys 1137db96d56Sopenharmony_ci rot13(sys.stdin, sys.stdout) 114