home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_1111 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  4.6 KB  |  124 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import os
  5. import tempfile
  6. from calibre.ebooks.rtf2xml import copy
  7.  
  8. class ListNumbers:
  9.     
  10.     def __init__(self, in_file, bug_handler, copy = None, run_level = 1):
  11.         self._ListNumbers__file = in_file
  12.         self._ListNumbers__bug_handler = bug_handler
  13.         self._ListNumbers__copy = copy
  14.         self._ListNumbers__write_to = tempfile.mktemp()
  15.  
  16.     
  17.     def __initiate_values(self):
  18.         self._ListNumbers__state = 'default'
  19.         self._ListNumbers__list_chunk = ''
  20.         self._ListNumbers__previous_line = ''
  21.         self._ListNumbers__list_text_ob_count = ''
  22.         self._ListNumbers__state_dict = {
  23.             'default': self._ListNumbers__default_func,
  24.             'after_ob': self._ListNumbers__after_ob_func,
  25.             'list_text': self._ListNumbers__list_text_func,
  26.             'after_list_text': self._ListNumbers__after_list_text_func }
  27.  
  28.     
  29.     def __after_ob_func(self, line):
  30.         if self._ListNumbers__token_info == 'cw<ls<list-text_':
  31.             self._ListNumbers__state = 'list_text'
  32.             self._ListNumbers__list_chunk = self._ListNumbers__list_chunk + self._ListNumbers__previous_line + line
  33.             self._ListNumbers__list_text_ob = self._ListNumbers__ob_count
  34.             self._ListNumbers__cb_count = 0
  35.         else:
  36.             self._ListNumbers__write_obj.write(self._ListNumbers__previous_line)
  37.             self._ListNumbers__write_obj.write(line)
  38.             self._ListNumbers__state = 'default'
  39.  
  40.     
  41.     def __after_list_text_func(self, line):
  42.         if line[0:2] == 'ob' or line[0:2] == 'tx':
  43.             self._ListNumbers__state = 'default'
  44.             self._ListNumbers__write_obj.write('mi<mk<lst-txbeg_\n')
  45.             self._ListNumbers__write_obj.write('mi<mk<para-beg__\n')
  46.             self._ListNumbers__write_obj.write('mi<mk<lst-tx-beg\n')
  47.             self._ListNumbers__write_obj.write('mi<tg<open-att__<list-text\n')
  48.             self._ListNumbers__write_obj.write(self._ListNumbers__list_chunk)
  49.             self._ListNumbers__write_obj.write('mi<tg<close_____<list-text\n')
  50.             self._ListNumbers__write_obj.write('mi<mk<lst-tx-end\n')
  51.             self._ListNumbers__list_chunk = ''
  52.         
  53.         self._ListNumbers__write_obj.write(line)
  54.  
  55.     
  56.     def __determine_list_type(self, chunk):
  57.         lines = chunk.split('\n')
  58.         text_string = ''
  59.         for line in lines:
  60.             if line[0:5] == 'tx<hx':
  61.                 if line[17:] == "'B7":
  62.                     return 'unordered'
  63.                 continue
  64.             line[17:] == "'B7"
  65.             if line[0:5] == 'tx<nu':
  66.                 text_string += line[17:]
  67.                 continue
  68.         
  69.         text_string = text_string.replace('.', '')
  70.         text_string = text_string.replace('(', '')
  71.         text_string = text_string.replace(')', '')
  72.         if text_string.isdigit():
  73.             return 'ordered'
  74.         return 'unordered'
  75.  
  76.     
  77.     def __list_text_func(self, line):
  78.         if self._ListNumbers__list_text_ob == self._ListNumbers__cb_count:
  79.             self._ListNumbers__state = 'after_list_text'
  80.             self._ListNumbers__right_after_list_text = 1
  81.             self._ListNumbers__list_type = self._ListNumbers__determine_list_type(self._ListNumbers__list_chunk)
  82.             self._ListNumbers__write_obj.write('mi<mk<list-type_<%s\n' % self._ListNumbers__list_type)
  83.         
  84.         if self._ListNumbers__token_info != 'cw<pf<par-def___':
  85.             self._ListNumbers__list_chunk = self._ListNumbers__list_chunk + line
  86.         
  87.  
  88.     
  89.     def __default_func(self, line):
  90.         if self._ListNumbers__token_info == 'ob<nu<open-brack':
  91.             self._ListNumbers__state = 'after_ob'
  92.             self._ListNumbers__previous_line = line
  93.         else:
  94.             self._ListNumbers__write_obj.write(line)
  95.  
  96.     
  97.     def fix_list_numbers(self):
  98.         self._ListNumbers__initiate_values()
  99.         read_obj = open(self._ListNumbers__file, 'r')
  100.         self._ListNumbers__write_obj = open(self._ListNumbers__write_to, 'w')
  101.         line_to_read = 1
  102.         while line_to_read:
  103.             line_to_read = read_obj.readline()
  104.             line = line_to_read
  105.             self._ListNumbers__token_info = line[:16]
  106.             if self._ListNumbers__token_info == 'ob<nu<open-brack':
  107.                 self._ListNumbers__ob_count = line[-5:-1]
  108.             
  109.             if self._ListNumbers__token_info == 'cb<nu<clos-brack':
  110.                 self._ListNumbers__cb_count = line[-5:-1]
  111.             
  112.             action = self._ListNumbers__state_dict.get(self._ListNumbers__state)
  113.             action(line)
  114.         read_obj.close()
  115.         self._ListNumbers__write_obj.close()
  116.         copy_obj = copy.Copy(bug_handler = self._ListNumbers__bug_handler)
  117.         if self._ListNumbers__copy:
  118.             copy_obj.copy_file(self._ListNumbers__write_to, 'list_numbers.data')
  119.         
  120.         copy_obj.rename(self._ListNumbers__write_to, self._ListNumbers__file)
  121.         os.remove(self._ListNumbers__write_to)
  122.  
  123.  
  124.