NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

uu_codec.py (2238B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\stdlib\encodings\uu_codec.py
      2 import codecs, binascii
      3 
      4 def uu_encode(input, errors = 'strict', filename = '<data>', mode = 438):
      5     from cStringIO import StringIO
      6     from binascii import b2a_uu
      7     infile = StringIO(str(input))
      8     outfile = StringIO()
      9     read = infile.read
     10     write = outfile.write
     11     write('begin %o %s\n' % (mode & 511, filename))
     12     chunk = read(45)
     13     while chunk:
     14         write(b2a_uu(chunk))
     15         chunk = read(45)
     16 
     17     write(' \nend\n')
     18     return (outfile.getvalue(), len(input))
     19 
     20 
     21 def uu_decode(input, errors = 'strict'):
     22     from cStringIO import StringIO
     23     from binascii import a2b_uu
     24     infile = StringIO(str(input))
     25     outfile = StringIO()
     26     readline = infile.readline
     27     write = outfile.write
     28     while 1:
     29         s = readline()
     30         if not s:
     31             raise ValueError, 'Missing "begin" line in input data'
     32         if s[:5] == 'begin':
     33             break
     34 
     35     while 1:
     36         s = readline()
     37         if not s or s == 'end\n':
     38             break
     39         try:
     40             data = a2b_uu(s)
     41         except binascii.Error as v:
     42             nbytes = ((ord(s[0]) - 32 & 63) * 4 + 5) / 3
     43             data = a2b_uu(s[:nbytes])
     44 
     45         write(data)
     46 
     47     if not s:
     48         raise ValueError, 'Truncated input data'
     49     return (outfile.getvalue(), len(input))
     50 
     51 
     52 class Codec(codecs.Codec):
     53 
     54     def encode(self, input, errors = 'strict'):
     55         return uu_encode(input, errors)
     56 
     57     def decode(self, input, errors = 'strict'):
     58         return uu_decode(input, errors)
     59 
     60 
     61 class IncrementalEncoder(codecs.IncrementalEncoder):
     62 
     63     def encode(self, input, final = False):
     64         return uu_encode(input, self.errors)[0]
     65 
     66 
     67 class IncrementalDecoder(codecs.IncrementalDecoder):
     68 
     69     def decode(self, input, final = False):
     70         return uu_decode(input, self.errors)[0]
     71 
     72 
     73 class StreamWriter(Codec, codecs.StreamWriter):
     74     pass
     75 
     76 
     77 class StreamReader(Codec, codecs.StreamReader):
     78     pass
     79 
     80 
     81 def getregentry():
     82     return codecs.CodecInfo(name='uu', encode=uu_encode, decode=uu_decode, incrementalencoder=IncrementalEncoder, incrementaldecoder=IncrementalDecoder, streamreader=StreamReader, streamwriter=StreamWriter)