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

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import os
  5. import tempfile
  6. import re
  7. from calibre.ebooks.rtf2xml import copy
  8.  
  9. class HeadingsToSections:
  10.     
  11.     def __init__(self, in_file, bug_handler, copy = None, run_level = 1):
  12.         self._HeadingsToSections__file = in_file
  13.         self._HeadingsToSections__bug_handler = bug_handler
  14.         self._HeadingsToSections__copy = copy
  15.         self._HeadingsToSections__write_to = tempfile.mktemp()
  16.  
  17.     
  18.     def __initiate_values(self):
  19.         self._HeadingsToSections__state = 'default'
  20.         self._HeadingsToSections__all_sections = []
  21.         self._HeadingsToSections__chunk = ''
  22.         self._HeadingsToSections__state_dict = {
  23.             'default': self._HeadingsToSections__default_func,
  24.             'in_table': self._HeadingsToSections__in_table_func,
  25.             'in_list': self._HeadingsToSections__in_list_func,
  26.             'after_body': self._HeadingsToSections__after_body_func }
  27.         self._HeadingsToSections__list_depth = 0
  28.         self._HeadingsToSections__end_list = [
  29.             'mi<mk<body-close',
  30.             'mi<mk<sect-close',
  31.             'mi<mk<sect-start']
  32.         self._HeadingsToSections__headings = [
  33.             'heading 1',
  34.             'heading 2',
  35.             'heading 3',
  36.             'heading 4',
  37.             'heading 5',
  38.             'heading 6',
  39.             'heading 7',
  40.             'heading 8',
  41.             'heading 9']
  42.         self._HeadingsToSections__section_num = [
  43.             0]
  44.         self._HeadingsToSections__id_regex = re.compile('\\<list-id\\>(\\d+)')
  45.  
  46.     
  47.     def __close_lists(self):
  48.         current_indent = self._HeadingsToSections__left_indent
  49.         self._HeadingsToSections__all_lists.reverse()
  50.         num_levels_closed = 0
  51.         for the_dict in self._HeadingsToSections__all_lists:
  52.             list_indent = the_dict.get('left-indent')
  53.             if current_indent <= list_indent:
  54.                 self._HeadingsToSections__write_end_item()
  55.                 self._HeadingsToSections__write_end_list()
  56.                 num_levels_closed += 1
  57.                 continue
  58.         
  59.         self._HeadingsToSections__all_lists = self._HeadingsToSections__all_lists[num_levels_closed:]
  60.         self._HeadingsToSections__all_lists.reverse()
  61.  
  62.     
  63.     def __close_sections(self, current_level):
  64.         self._HeadingsToSections__all_sections.reverse()
  65.         num_levels_closed = 0
  66.         for level in self._HeadingsToSections__all_sections:
  67.             if current_level <= level:
  68.                 self._HeadingsToSections__write_end_section()
  69.                 num_levels_closed += 1
  70.                 continue
  71.         
  72.         self._HeadingsToSections__all_sections = self._HeadingsToSections__all_sections[num_levels_closed:]
  73.         self._HeadingsToSections__all_sections.reverse()
  74.  
  75.     
  76.     def __write_start_section(self, current_level, name):
  77.         section_num = ''
  78.         for the_num in self._HeadingsToSections__section_num:
  79.             section_num += '%s.' % the_num
  80.         
  81.         section_num = section_num[:-1]
  82.         num_in_level = len(self._HeadingsToSections__all_sections)
  83.         num_in_level = self._HeadingsToSections__section_num[num_in_level]
  84.         level = len(self._HeadingsToSections__all_sections)
  85.         self._HeadingsToSections__write_obj.write('mi<mk<sect-start\n')
  86.         self._HeadingsToSections__write_obj.write('mi<tg<open-att__<section<num>%s<num-in-level>%s<level>%s<type>%s\n' % (section_num, num_in_level, level, name))
  87.  
  88.     
  89.     def __write_end_section(self):
  90.         self._HeadingsToSections__write_obj.write('mi<mk<sect-close\n')
  91.         self._HeadingsToSections__write_obj.write('mi<tg<close_____<section\n')
  92.  
  93.     
  94.     def __default_func(self, line):
  95.         if self._HeadingsToSections__token_info == 'mi<mk<sect-start':
  96.             self._HeadingsToSections__section_num[0] += 1
  97.             self._HeadingsToSections__section_num = self._HeadingsToSections__section_num[0:1]
  98.         
  99.         if self._HeadingsToSections__token_info == 'mi<mk<tabl-start':
  100.             self._HeadingsToSections__state = 'in_table'
  101.         elif self._HeadingsToSections__token_info == 'mi<mk<list_start':
  102.             self._HeadingsToSections__state = 'in_list'
  103.             self._HeadingsToSections__list_depth += 1
  104.         elif self._HeadingsToSections__token_info in self._HeadingsToSections__end_list:
  105.             self._HeadingsToSections__close_sections(0)
  106.         elif self._HeadingsToSections__token_info == 'mi<mk<style-name':
  107.             name = line[17:-1]
  108.             if name in self._HeadingsToSections__headings:
  109.                 self._HeadingsToSections__handle_heading(name)
  110.             
  111.         
  112.         if self._HeadingsToSections__token_info == 'mi<mk<body-close':
  113.             self._HeadingsToSections__state = 'after_body'
  114.         
  115.         self._HeadingsToSections__write_obj.write(line)
  116.  
  117.     
  118.     def __handle_heading(self, name):
  119.         num = self._HeadingsToSections__headings.index(name) + 1
  120.         self._HeadingsToSections__close_sections(num)
  121.         self._HeadingsToSections__all_sections.append(num)
  122.         level_depth = len(self._HeadingsToSections__all_sections) + 1
  123.         self._HeadingsToSections__section_num = self._HeadingsToSections__section_num[:level_depth]
  124.         if len(self._HeadingsToSections__section_num) < level_depth:
  125.             self._HeadingsToSections__section_num.append(1)
  126.         else:
  127.             self._HeadingsToSections__section_num[-1] += 1
  128.         self._HeadingsToSections__write_start_section(num, name)
  129.  
  130.     
  131.     def __in_table_func(self, line):
  132.         if self._HeadingsToSections__token_info == 'mi<mk<table-end_':
  133.             self._HeadingsToSections__state = 'default'
  134.         
  135.         self._HeadingsToSections__write_obj.write(line)
  136.  
  137.     
  138.     def __in_list_func(self, line):
  139.         if self._HeadingsToSections__token_info == 'mi<mk<list_close':
  140.             self._HeadingsToSections__list_depth -= 1
  141.         elif self._HeadingsToSections__token_info == 'mi<mk<list_start':
  142.             self._HeadingsToSections__list_depth += 1
  143.         
  144.         if self._HeadingsToSections__list_depth == 0:
  145.             self._HeadingsToSections__state = 'default'
  146.         
  147.         self._HeadingsToSections__write_obj.write(line)
  148.  
  149.     
  150.     def __after_body_func(self, line):
  151.         self._HeadingsToSections__write_obj.write(line)
  152.  
  153.     
  154.     def make_sections(self):
  155.         self._HeadingsToSections__initiate_values()
  156.         read_obj = open(self._HeadingsToSections__file, 'r')
  157.         self._HeadingsToSections__write_obj = open(self._HeadingsToSections__write_to, 'w')
  158.         line_to_read = 1
  159.         while line_to_read:
  160.             line_to_read = read_obj.readline()
  161.             line = line_to_read
  162.             self._HeadingsToSections__token_info = line[:16]
  163.             action = self._HeadingsToSections__state_dict.get(self._HeadingsToSections__state)
  164.             action(line)
  165.         read_obj.close()
  166.         self._HeadingsToSections__write_obj.close()
  167.         copy_obj = copy.Copy(bug_handler = self._HeadingsToSections__bug_handler)
  168.         if self._HeadingsToSections__copy:
  169.             copy_obj.copy_file(self._HeadingsToSections__write_to, 'sections_to_headings.data')
  170.         
  171.         copy_obj.rename(self._HeadingsToSections__write_to, self._HeadingsToSections__file)
  172.         os.remove(self._HeadingsToSections__write_to)
  173.  
  174.  
  175.