home *** CD-ROM | disk | FTP | other *** search
/ Freelog 116 / FreelogNo116-JuilletSeptembre2013.iso / GestionFichiers / metamorphose / metamorphose2_0.8.2_setup.exe / metamorphose2.exe / quopri.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2011-01-12  |  5KB  |  248 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. __all__ = [
  5.     'encode',
  6.     'decode',
  7.     'encodestring',
  8.     'decodestring']
  9. ESCAPE = '='
  10. MAXLINESIZE = 76
  11. HEX = '0123456789ABCDEF'
  12. EMPTYSTRING = ''
  13.  
  14. try:
  15.     from binascii import a2b_qp, b2a_qp
  16. except ImportError:
  17.     a2b_qp = None
  18.     b2a_qp = None
  19.  
  20.  
  21. def needsquoting(c, quotetabs, header):
  22.     if c in ' \t':
  23.         return quotetabs
  24.     return c in ' \t' if c == '_' else not c == '_' if c <= c else c <= '~'
  25.  
  26.  
  27. def quote(c):
  28.     i = ord(c)
  29.     return ESCAPE + HEX[i // 16] + HEX[i % 16]
  30.  
  31.  
  32. def encode(input, output, quotetabs, header = 0):
  33.     if b2a_qp is not None:
  34.         data = input.read()
  35.         odata = b2a_qp(data, quotetabs = quotetabs, header = header)
  36.         output.write(odata)
  37.         return None
  38.     
  39.     def write(s, output = output, lineEnd = '\n'):
  40.         if s and s[-1:] in ' \t':
  41.             output.write(s[:-1] + quote(s[-1]) + lineEnd)
  42.         elif s == '.':
  43.             output.write(quote(s) + lineEnd)
  44.         else:
  45.             output.write(s + lineEnd)
  46.  
  47.     prevline = None
  48.     while None:
  49.         line = input.readline()
  50.         if not line:
  51.             break
  52.         
  53.         outline = []
  54.         stripped = ''
  55.         if line[-1:] == '\n':
  56.             line = line[:-1]
  57.             stripped = '\n'
  58.         
  59.         for c in line:
  60.             if needsquoting(c, quotetabs, header):
  61.                 c = quote(c)
  62.             
  63.             if header and c == ' ':
  64.                 outline.append('_')
  65.                 continue
  66.             outline.append(c)
  67.         
  68.         if prevline is not None:
  69.             write(prevline)
  70.         
  71.         thisline = EMPTYSTRING.join(outline)
  72.         while len(thisline) > MAXLINESIZE:
  73.             write(thisline[:MAXLINESIZE - 1], lineEnd = '=\n')
  74.             thisline = thisline[MAXLINESIZE - 1:]
  75.         prevline = thisline
  76.         continue
  77.         if prevline is not None:
  78.             write(prevline, lineEnd = stripped)
  79.         
  80.  
  81.  
  82. def encodestring(s, quotetabs = 0, header = 0):
  83.     if b2a_qp is not None:
  84.         return b2a_qp(s, quotetabs = quotetabs, header = header)
  85.     StringIO = StringIO
  86.     import cStringIO
  87.     infp = StringIO(s)
  88.     outfp = StringIO()
  89.     encode(infp, outfp, quotetabs, header)
  90.     return outfp.getvalue()
  91.  
  92.  
  93. def decode(input, output, header = 0):
  94.     if a2b_qp is not None:
  95.         data = input.read()
  96.         odata = a2b_qp(data, header = header)
  97.         output.write(odata)
  98.         return None
  99.     new = ''
  100.     while None:
  101.         line = input.readline()
  102.         if not line:
  103.             break
  104.         
  105.         i = 0
  106.         n = len(line)
  107.         if n > 0 and line[n - 1] == '\n':
  108.             partial = 0
  109.             n = n - 1
  110.             while n > 0 and line[n - 1] in ' \t\r':
  111.                 n = n - 1
  112.         else:
  113.             partial = 1
  114.         while i < n:
  115.             c = line[i]
  116.             if c == '_' and header:
  117.                 new = new + ' '
  118.                 i = i + 1
  119.                 continue
  120.             if c != ESCAPE:
  121.                 new = new + c
  122.                 i = i + 1
  123.                 continue
  124.             if i + 1 == n and not partial:
  125.                 partial = 1
  126.                 break
  127.                 continue
  128.             if i + 1 < n and line[i + 1] == ESCAPE:
  129.                 new = new + ESCAPE
  130.                 i = i + 2
  131.                 continue
  132.             if i + 2 < n and ishex(line[i + 1]) and ishex(line[i + 2]):
  133.                 new = new + chr(unhex(line[i + 1:i + 3]))
  134.                 i = i + 3
  135.                 continue
  136.             new = new + c
  137.             i = i + 1
  138.         if not partial:
  139.             output.write(new + '\n')
  140.             new = ''
  141.             continue
  142.         continue
  143.         if new:
  144.             output.write(new)
  145.         
  146.  
  147.  
  148. def decodestring(s, header = 0):
  149.     if a2b_qp is not None:
  150.         return a2b_qp(s, header = header)
  151.     StringIO = StringIO
  152.     import cStringIO
  153.     infp = StringIO(s)
  154.     outfp = StringIO()
  155.     decode(infp, outfp, header = header)
  156.     return outfp.getvalue()
  157.  
  158.  
  159. def ishex(c):
  160.     return None if c <= c else 'A' if c <= c else c
  161.  
  162.  
  163. def unhex(s):
  164.     bits = 0
  165.     for c in s:
  166.         if c <= c:
  167.             pass
  168.         elif c <= '9':
  169.             i = ord('0')
  170.         elif c <= c:
  171.             pass
  172.         elif c <= 'f':
  173.             i = ord('a') - 10
  174.         elif c <= c:
  175.             pass
  176.         elif c <= 'F':
  177.             i = ord('A') - 10
  178.         else:
  179.             break
  180.         bits = bits * 16 + (ord(c) - i)
  181.     
  182.     return bits
  183.  
  184.  
  185. def main():
  186.     import sys as sys
  187.     import getopt as getopt
  188.     
  189.     try:
  190.         (opts, args) = getopt.getopt(sys.argv[1:], 'td')
  191.     except getopt.error:
  192.         msg = None
  193.         sys.stdout = sys.stderr
  194.         print msg
  195.         print 'usage: quopri [-t | -d] [file] ...'
  196.         print '-t: quote tabs'
  197.         print '-d: decode; default encode'
  198.         sys.exit(2)
  199.  
  200.     deco = 0
  201.     tabs = 0
  202.     for o, a in opts:
  203.         if o == '-t':
  204.             tabs = 1
  205.         
  206.         if o == '-d':
  207.             deco = 1
  208.             continue
  209.     
  210.     if tabs and deco:
  211.         sys.stdout = sys.stderr
  212.         print '-t and -d are mutually exclusive'
  213.         sys.exit(2)
  214.     
  215.     if not args:
  216.         args = [
  217.             '-']
  218.     
  219.     sts = 0
  220.     for file in args:
  221.         if file == '-':
  222.             fp = sys.stdin
  223.         else:
  224.             
  225.             try:
  226.                 fp = open(file)
  227.             except IOError:
  228.                 msg = None
  229.                 sys.stderr.write("%s: can't open (%s)\n" % (file, msg))
  230.                 sts = 1
  231.                 continue
  232.  
  233.         if deco:
  234.             decode(fp, sys.stdout)
  235.         else:
  236.             encode(fp, sys.stdout, tabs)
  237.         if fp is not sys.stdin:
  238.             fp.close()
  239.             continue
  240.     
  241.     if sts:
  242.         sys.exit(sts)
  243.     
  244.  
  245. if __name__ == '__main__':
  246.     main()
  247.  
  248.