home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2012 January / maximum-cd-2012-01.iso / DiscContents / digsby_setup.exe / lib / distutils / text_file.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-10-05  |  5.8 KB  |  211 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. __revision__ = '$Id: text_file.py 60923 2008-02-21 18:18:37Z guido.van.rossum $'
  5. from types import *
  6. import sys
  7. import os
  8. import string
  9.  
  10. class TextFile:
  11.     default_options = {
  12.         'strip_comments': 1,
  13.         'skip_blanks': 1,
  14.         'lstrip_ws': 0,
  15.         'rstrip_ws': 1,
  16.         'join_lines': 0,
  17.         'collapse_join': 0 }
  18.     
  19.     def __init__(self, filename = None, file = None, **options):
  20.         if filename is None and file is None:
  21.             raise RuntimeError, "you must supply either or both of 'filename' and 'file'"
  22.         file is None
  23.         for opt in self.default_options.keys():
  24.             if opt in options:
  25.                 setattr(self, opt, options[opt])
  26.                 continue
  27.             setattr(self, opt, self.default_options[opt])
  28.         
  29.         for opt in options.keys():
  30.             if opt not in self.default_options:
  31.                 raise KeyError, "invalid TextFile option '%s'" % opt
  32.             opt not in self.default_options
  33.         
  34.         if file is None:
  35.             self.open(filename)
  36.         else:
  37.             self.filename = filename
  38.             self.file = file
  39.             self.current_line = 0
  40.         self.linebuf = []
  41.  
  42.     
  43.     def open(self, filename):
  44.         self.filename = filename
  45.         self.file = open(self.filename, 'r')
  46.         self.current_line = 0
  47.  
  48.     
  49.     def close(self):
  50.         self.file.close()
  51.         self.file = None
  52.         self.filename = None
  53.         self.current_line = None
  54.  
  55.     
  56.     def gen_error(self, msg, line = None):
  57.         outmsg = []
  58.         if line is None:
  59.             line = self.current_line
  60.         
  61.         outmsg.append(self.filename + ', ')
  62.         if type(line) in (ListType, TupleType):
  63.             outmsg.append('lines %d-%d: ' % tuple(line))
  64.         else:
  65.             outmsg.append('line %d: ' % line)
  66.         outmsg.append(str(msg))
  67.         return string.join(outmsg, '')
  68.  
  69.     
  70.     def error(self, msg, line = None):
  71.         raise ValueError, 'error: ' + self.gen_error(msg, line)
  72.  
  73.     
  74.     def warn(self, msg, line = None):
  75.         sys.stderr.write('warning: ' + self.gen_error(msg, line) + '\n')
  76.  
  77.     
  78.     def readline(self):
  79.         if self.linebuf:
  80.             line = self.linebuf[-1]
  81.             del self.linebuf[-1]
  82.             return line
  83.         buildup_line = ''
  84.         while None:
  85.             line = self.file.readline()
  86.             if line == '':
  87.                 line = None
  88.             
  89.             if self.strip_comments and line:
  90.                 pos = string.find(line, '#')
  91.                 if pos == -1:
  92.                     pass
  93.                 elif pos == 0 or line[pos - 1] != '\\':
  94.                     if not line[-1] == '\n' or '\n':
  95.                         pass
  96.                     eol = ''
  97.                     line = line[0:pos] + eol
  98.                     if string.strip(line) == '':
  99.                         continue
  100.                     
  101.                 else:
  102.                     line = string.replace(line, '\\#', '#')
  103.             
  104.             if self.join_lines and buildup_line:
  105.                 if line is None:
  106.                     self.warn('continuation line immediately precedes end-of-file')
  107.                     return buildup_line
  108.                 if self.collapse_join:
  109.                     line = string.lstrip(line)
  110.                 
  111.                 line = buildup_line + line
  112.                 if type(self.current_line) is ListType:
  113.                     self.current_line[1] = self.current_line[1] + 1
  114.                 else:
  115.                     self.current_line = [
  116.                         self.current_line,
  117.                         self.current_line + 1]
  118.             elif line is None:
  119.                 return None
  120.             if type(self.current_line) is ListType:
  121.                 self.current_line = self.current_line[1] + 1
  122.             else:
  123.                 self.current_line = self.current_line + 1
  124.             if self.lstrip_ws and self.rstrip_ws:
  125.                 line = string.strip(line)
  126.             elif self.lstrip_ws:
  127.                 line = string.lstrip(line)
  128.             elif self.rstrip_ws:
  129.                 line = string.rstrip(line)
  130.             
  131.             if (line == '' or line == '\n') and self.skip_blanks:
  132.                 continue
  133.             
  134.             if self.join_lines:
  135.                 if line[-1] == '\\':
  136.                     buildup_line = line[:-1]
  137.                     continue
  138.                 
  139.                 if line[-2:] == '\\\n':
  140.                     buildup_line = line[0:-2] + '\n'
  141.                     continue
  142.                 
  143.             
  144.             return line
  145.             return None
  146.  
  147.     
  148.     def readlines(self):
  149.         lines = []
  150.         while None:
  151.             line = self.readline()
  152.             if line is None:
  153.                 return lines
  154.             continue
  155.             return None
  156.  
  157.     
  158.     def unreadline(self, line):
  159.         self.linebuf.append(line)
  160.  
  161.  
  162. if __name__ == '__main__':
  163.     test_data = '# test file\n\nline 3 \\\n# intervening comment\n  continues on next line\n'
  164.     result1 = map((lambda x: x + '\n'), string.split(test_data, '\n')[0:-1])
  165.     result2 = [
  166.         '\n',
  167.         'line 3 \\\n',
  168.         '  continues on next line\n']
  169.     result3 = [
  170.         '# test file\n',
  171.         'line 3 \\\n',
  172.         '# intervening comment\n',
  173.         '  continues on next line\n']
  174.     result4 = [
  175.         'line 3 \\',
  176.         '  continues on next line']
  177.     result5 = [
  178.         'line 3   continues on next line']
  179.     result6 = [
  180.         'line 3 continues on next line']
  181.     
  182.     def test_input(count, description, file, expected_result):
  183.         result = file.readlines()
  184.         if result == expected_result:
  185.             print 'ok %d (%s)' % (count, description)
  186.         else:
  187.             print 'not ok %d (%s):' % (count, description)
  188.             print '** expected:'
  189.             print expected_result
  190.             print '** received:'
  191.             print result
  192.  
  193.     filename = 'test.txt'
  194.     out_file = open(filename, 'w')
  195.     out_file.write(test_data)
  196.     out_file.close()
  197.     in_file = TextFile(filename, strip_comments = 0, skip_blanks = 0, lstrip_ws = 0, rstrip_ws = 0)
  198.     test_input(1, 'no processing', in_file, result1)
  199.     in_file = TextFile(filename, strip_comments = 1, skip_blanks = 0, lstrip_ws = 0, rstrip_ws = 0)
  200.     test_input(2, 'strip comments', in_file, result2)
  201.     in_file = TextFile(filename, strip_comments = 0, skip_blanks = 1, lstrip_ws = 0, rstrip_ws = 0)
  202.     test_input(3, 'strip blanks', in_file, result3)
  203.     in_file = TextFile(filename)
  204.     test_input(4, 'default processing', in_file, result4)
  205.     in_file = TextFile(filename, strip_comments = 1, skip_blanks = 1, join_lines = 1, rstrip_ws = 1)
  206.     test_input(5, 'join lines without collapsing', in_file, result5)
  207.     in_file = TextFile(filename, strip_comments = 1, skip_blanks = 1, join_lines = 1, rstrip_ws = 1, collapse_join = 1)
  208.     test_input(6, 'join lines with collapsing', in_file, result6)
  209.     os.remove(filename)
  210.  
  211.