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

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import sys
  5. import os
  6. import tempfile
  7. import re
  8. from calibre.ebooks.rtf2xml import copy
  9.  
  10. class MakeLists:
  11.     
  12.     def __init__(self, in_file, bug_handler, headings_to_sections, list_of_lists, copy = None, run_level = 1, no_headings_as_list = 1, write_list_info = 0):
  13.         self._MakeLists__file = in_file
  14.         self._MakeLists__bug_handler = bug_handler
  15.         self._MakeLists__run_level = run_level
  16.         self._MakeLists__no_headings_as_list = no_headings_as_list
  17.         self._MakeLists__headings_to_sections = headings_to_sections
  18.         self._MakeLists__copy = copy
  19.         self._MakeLists__write_to = tempfile.mktemp()
  20.         self._MakeLists__list_of_lists = list_of_lists
  21.         self._MakeLists__write_list_info = write_list_info
  22.  
  23.     
  24.     def __initiate_values(self):
  25.         self._MakeLists__state = 'default'
  26.         self._MakeLists__left_indent = 0
  27.         self._MakeLists__list_type = 'not-defined'
  28.         self._MakeLists__pard_def = ''
  29.         self._MakeLists__all_lists = []
  30.         self._MakeLists__level = 0
  31.         self._MakeLists__list_chunk = ''
  32.         self._MakeLists__state_dict = {
  33.             'default': self._MakeLists__default_func,
  34.             'in_pard': self._MakeLists__in_pard_func,
  35.             'after_pard': self._MakeLists__after_pard_func }
  36.         self._MakeLists__headings = [
  37.             'heading 1',
  38.             'heading 2',
  39.             'heading 3',
  40.             'heading 4',
  41.             'heading 5',
  42.             'heading 6',
  43.             'heading 7',
  44.             'heading 8',
  45.             'heading 9']
  46.         self._MakeLists__allow_levels = [
  47.             '0',
  48.             '1',
  49.             '2',
  50.             '3',
  51.             '4',
  52.             '5',
  53.             '6',
  54.             '7',
  55.             '8',
  56.             '9']
  57.         self._MakeLists__style_name = ''
  58.         self._MakeLists__end_list = [
  59.             'mi<mk<body-close',
  60.             'mi<mk<par-in-fld',
  61.             'cw<tb<cell______',
  62.             'cw<tb<row-def___',
  63.             'cw<tb<row_______',
  64.             'mi<mk<sect-close',
  65.             'mi<mk<sect-start',
  66.             'mi<mk<header-beg',
  67.             'mi<mk<header-end',
  68.             'mi<mk<head___clo',
  69.             'mi<mk<fldbk-end_',
  70.             'mi<mk<close_cell',
  71.             'mi<mk<footnt-ope',
  72.             'mi<mk<foot___clo',
  73.             'mi<mk<tabl-start']
  74.         self._MakeLists__end_lines = [
  75.             'mi<tg<close_____<cell\n']
  76.         self._MakeLists__id_regex = re.compile('\\<list-id\\>(\\d+)')
  77.         self._MakeLists__lv_regex = re.compile('\\<list-level\\>(\\d+)')
  78.         self._MakeLists__found_appt = 0
  79.         self._MakeLists__line_num = 0
  80.  
  81.     
  82.     def __in_pard_func(self, line):
  83.         if self._MakeLists__token_info == 'mi<mk<pard-end__':
  84.             self._MakeLists__state = 'after_pard'
  85.         
  86.         self._MakeLists__write_obj.write(line)
  87.  
  88.     
  89.     def __after_pard_func(self, line):
  90.         if self._MakeLists__token_info == 'mi<tg<open-att__' and line[17:37] == 'paragraph-definition':
  91.             is_heading = self._MakeLists__is_a_heading()
  92.             search_obj = re.search(self._MakeLists__id_regex, line)
  93.             if search_obj and not is_heading:
  94.                 search_obj_lv = re.search(self._MakeLists__lv_regex, line)
  95.                 if search_obj_lv:
  96.                     self._MakeLists__level = search_obj_lv.group(1)
  97.                 
  98.                 num = search_obj.group(1)
  99.                 self._MakeLists__list_after_par_def_func(line, num)
  100.                 self._MakeLists__write_obj.write(line)
  101.                 self._MakeLists__state = 'in_pard'
  102.             elif is_heading:
  103.                 self._MakeLists__left_indent = -1000
  104.                 self._MakeLists__close_lists()
  105.                 self._MakeLists__write_obj.write(self._MakeLists__list_chunk)
  106.                 self._MakeLists__list_chunk = ''
  107.                 self._MakeLists__state = 'default'
  108.                 self._MakeLists__write_obj.write(line)
  109.             else:
  110.                 self._MakeLists__close_lists()
  111.                 self._MakeLists__write_obj.write(self._MakeLists__list_chunk)
  112.                 self._MakeLists__list_chunk = ''
  113.                 self._MakeLists__write_obj.write(line)
  114.                 if len(self._MakeLists__all_lists) == 0:
  115.                     self._MakeLists__state = 'default'
  116.                 else:
  117.                     self._MakeLists__state = 'in_pard'
  118.         elif self._MakeLists__token_info in self._MakeLists__end_list:
  119.             self._MakeLists__left_indent = -1000
  120.             self._MakeLists__close_lists()
  121.             self._MakeLists__write_obj.write(self._MakeLists__list_chunk)
  122.             self._MakeLists__list_chunk = ''
  123.             self._MakeLists__state = 'default'
  124.             self._MakeLists__write_obj.write(line)
  125.         else:
  126.             self._MakeLists__list_chunk += line
  127.  
  128.     
  129.     def __list_after_par_def_func(self, line, id):
  130.         last_list_id = self._MakeLists__all_lists[-1]['id']
  131.         if id != last_list_id:
  132.             self._MakeLists__close_lists()
  133.             self._MakeLists__write_obj.write(self._MakeLists__list_chunk)
  134.             self._MakeLists__write_start_list(id)
  135.             self._MakeLists__list_chunk = ''
  136.         else:
  137.             last_list_indent = self._MakeLists__all_lists[-1]['left-indent']
  138.             if self._MakeLists__left_indent > last_list_indent:
  139.                 self._MakeLists__write_obj.write(self._MakeLists__list_chunk)
  140.                 self._MakeLists__write_start_list(id)
  141.             else:
  142.                 self._MakeLists__write_end_item()
  143.                 self._MakeLists__write_obj.write(self._MakeLists__list_chunk)
  144.                 self._MakeLists__write_start_item()
  145.             self._MakeLists__list_chunk = ''
  146.  
  147.     
  148.     def __close_lists(self):
  149.         if self._MakeLists__line_num < 25 and self._MakeLists__found_appt:
  150.             sys.stderr.write('in closing out lists\n')
  151.             sys.stderr.write('current_indent is "%s"\n' % self._MakeLists__left_indent)
  152.         
  153.         current_indent = self._MakeLists__left_indent
  154.         self._MakeLists__all_lists.reverse()
  155.         num_levels_closed = 0
  156.         for the_dict in self._MakeLists__all_lists:
  157.             list_indent = the_dict.get('left-indent')
  158.             if self._MakeLists__line_num < 25 and self._MakeLists__found_appt:
  159.                 sys.stderr.write('last indent is "%s"' % list_indent)
  160.             
  161.             if current_indent <= list_indent:
  162.                 self._MakeLists__write_end_item()
  163.                 self._MakeLists__write_end_list()
  164.                 num_levels_closed += 1
  165.                 continue
  166.         
  167.         self._MakeLists__all_lists = self._MakeLists__all_lists[num_levels_closed:]
  168.         self._MakeLists__all_lists.reverse()
  169.  
  170.     
  171.     def __write_end_list(self):
  172.         self._MakeLists__write_obj.write('mi<tg<close_____<list\n')
  173.         self._MakeLists__write_obj.write('mi<mk<list_close\n')
  174.  
  175.     
  176.     def __write_start_list(self, id):
  177.         the_dict = { }
  178.         the_dict['left-indent'] = self._MakeLists__left_indent
  179.         the_dict['id'] = id
  180.         self._MakeLists__all_lists.append(the_dict)
  181.         self._MakeLists__write_obj.write('mi<mk<list_start\n')
  182.         if str(self._MakeLists__level) not in self._MakeLists__allow_levels:
  183.             lev_num = '0'
  184.         else:
  185.             lev_num = self._MakeLists__level
  186.         self._MakeLists__write_obj.write('mi<tg<open-att__<list<list-id>%s<level>%s' % (id, lev_num))
  187.         list_dict = { }
  188.         if self._MakeLists__list_of_lists:
  189.             index_of_list = self._MakeLists__get_index_of_list(id)
  190.             if index_of_list != None:
  191.                 list_dict = self._MakeLists__list_of_lists[index_of_list][0]
  192.                 level = int(self._MakeLists__level) + 1
  193.                 level_dict = self._MakeLists__list_of_lists[index_of_list][level][0]
  194.                 list_type = level_dict.get('numbering-type')
  195.                 if list_type == 'bullet':
  196.                     list_type = 'unordered'
  197.                 else:
  198.                     list_type = 'ordered'
  199.                 self._MakeLists__write_obj.write('<list-type>%s' % list_type)
  200.             else:
  201.                 self._MakeLists__write_obj.write('<list-type>%s' % self._MakeLists__list_type)
  202.         else:
  203.             self._MakeLists__write_obj.write('<list-type>%s' % self._MakeLists__list_type)
  204.         if self._MakeLists__list_of_lists and self._MakeLists__write_list_info and list_dict:
  205.             not_allow = [
  206.                 'list-id']
  207.             the_keys_list = list_dict.keys()
  208.             for the_key in the_keys_list:
  209.                 if the_key in not_allow:
  210.                     continue
  211.                 
  212.                 self._MakeLists__write_obj.write('<%s>%s' % (the_key, list_dict[the_key]))
  213.             
  214.             the_keys_level = level_dict.keys()
  215.             for the_key in the_keys_level:
  216.                 self._MakeLists__write_obj.write('<%s>%s' % (the_key, level_dict[the_key]))
  217.             
  218.         
  219.         self._MakeLists__write_obj.write('\n')
  220.         self._MakeLists__write_obj.write('mi<mk<liststart_\n')
  221.         self._MakeLists__write_start_item()
  222.  
  223.     
  224.     def __get_index_of_list(self, id):
  225.         if id == '0':
  226.             return None
  227.         the_index = 0
  228.         for list in self._MakeLists__list_of_lists:
  229.             the_dict = list[0]
  230.             id_in_list = the_dict.get('list-id')
  231.             if id in id_in_list:
  232.                 return the_index
  233.             the_index += 1
  234.         
  235.  
  236.     
  237.     def __write_start_item(self):
  238.         self._MakeLists__write_obj.write('mi<mk<item_start\n')
  239.         self._MakeLists__write_obj.write('mi<tg<open______<item\n')
  240.         self._MakeLists__write_obj.write('mi<mk<itemstart_\n')
  241.  
  242.     
  243.     def __write_end_item(self):
  244.         self._MakeLists__write_obj.write('mi<tg<item_end__\n')
  245.         self._MakeLists__write_obj.write('mi<tg<close_____<item\n')
  246.         self._MakeLists__write_obj.write('mi<tg<item__end_\n')
  247.  
  248.     
  249.     def __default_func(self, line):
  250.         if self._MakeLists__token_info == 'mi<tg<open-att__' and line[17:37] == 'paragraph-definition':
  251.             is_a_heading = self._MakeLists__is_a_heading()
  252.             if not is_a_heading:
  253.                 search_obj = re.search(self._MakeLists__id_regex, line)
  254.                 if search_obj:
  255.                     num = search_obj.group(1)
  256.                     self._MakeLists__state = 'in_pard'
  257.                     search_obj_lv = re.search(self._MakeLists__lv_regex, line)
  258.                     if search_obj_lv:
  259.                         self._MakeLists__level = search_obj_lv.group(1)
  260.                     
  261.                     self._MakeLists__write_start_list(num)
  262.                 
  263.             
  264.         
  265.         self._MakeLists__write_obj.write(line)
  266.  
  267.     
  268.     def __is_a_heading(self):
  269.         if self._MakeLists__style_name in self._MakeLists__headings:
  270.             if self._MakeLists__headings_to_sections:
  271.                 return 1
  272.             if self._MakeLists__no_headings_as_list:
  273.                 return 1
  274.             return 0
  275.         self._MakeLists__style_name in self._MakeLists__headings
  276.         return 0
  277.  
  278.     
  279.     def __get_indent(self, line):
  280.         if self._MakeLists__token_info == 'mi<mk<left_inden':
  281.             self._MakeLists__left_indent = float(line[17:-1])
  282.         
  283.  
  284.     
  285.     def __get_list_type(self, line):
  286.         if self._MakeLists__token_info == 'mi<mk<list-type_':
  287.             self._MakeLists__list_type = line[17:-1]
  288.             if self._MakeLists__list_type == 'item':
  289.                 self._MakeLists__list_type = 'unordered'
  290.             
  291.         
  292.  
  293.     
  294.     def __get_style_name(self, line):
  295.         if self._MakeLists__token_info == 'mi<mk<style-name':
  296.             self._MakeLists__style_name = line[17:-1]
  297.         
  298.  
  299.     
  300.     def make_lists(self):
  301.         self._MakeLists__initiate_values()
  302.         read_obj = open(self._MakeLists__file, 'r')
  303.         self._MakeLists__write_obj = open(self._MakeLists__write_to, 'w')
  304.         line_to_read = 1
  305.         while line_to_read:
  306.             line_to_read = read_obj.readline()
  307.             line = line_to_read
  308.             self._MakeLists__token_info = line[:16]
  309.             self._MakeLists__get_indent(line)
  310.             self._MakeLists__get_list_type(line)
  311.             self._MakeLists__get_style_name(line)
  312.             action = self._MakeLists__state_dict.get(self._MakeLists__state)
  313.             action(line)
  314.         read_obj.close()
  315.         self._MakeLists__write_obj.close()
  316.         copy_obj = copy.Copy(bug_handler = self._MakeLists__bug_handler)
  317.         if self._MakeLists__copy:
  318.             copy_obj.copy_file(self._MakeLists__write_to, 'make_lists.data')
  319.         
  320.         copy_obj.rename(self._MakeLists__write_to, self._MakeLists__file)
  321.         os.remove(self._MakeLists__write_to)
  322.  
  323.  
  324.