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