home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import os
- import tempfile
- import re
- from calibre.ebooks.rtf2xml import copy
-
- class HeadingsToSections:
-
- def __init__(self, in_file, bug_handler, copy = None, run_level = 1):
- self._HeadingsToSections__file = in_file
- self._HeadingsToSections__bug_handler = bug_handler
- self._HeadingsToSections__copy = copy
- self._HeadingsToSections__write_to = tempfile.mktemp()
-
-
- def __initiate_values(self):
- self._HeadingsToSections__state = 'default'
- self._HeadingsToSections__all_sections = []
- self._HeadingsToSections__chunk = ''
- self._HeadingsToSections__state_dict = {
- 'default': self._HeadingsToSections__default_func,
- 'in_table': self._HeadingsToSections__in_table_func,
- 'in_list': self._HeadingsToSections__in_list_func,
- 'after_body': self._HeadingsToSections__after_body_func }
- self._HeadingsToSections__list_depth = 0
- self._HeadingsToSections__end_list = [
- 'mi<mk<body-close',
- 'mi<mk<sect-close',
- 'mi<mk<sect-start']
- self._HeadingsToSections__headings = [
- 'heading 1',
- 'heading 2',
- 'heading 3',
- 'heading 4',
- 'heading 5',
- 'heading 6',
- 'heading 7',
- 'heading 8',
- 'heading 9']
- self._HeadingsToSections__section_num = [
- 0]
- self._HeadingsToSections__id_regex = re.compile('\\<list-id\\>(\\d+)')
-
-
- def __close_lists(self):
- current_indent = self._HeadingsToSections__left_indent
- self._HeadingsToSections__all_lists.reverse()
- num_levels_closed = 0
- for the_dict in self._HeadingsToSections__all_lists:
- list_indent = the_dict.get('left-indent')
- if current_indent <= list_indent:
- self._HeadingsToSections__write_end_item()
- self._HeadingsToSections__write_end_list()
- num_levels_closed += 1
- continue
-
- self._HeadingsToSections__all_lists = self._HeadingsToSections__all_lists[num_levels_closed:]
- self._HeadingsToSections__all_lists.reverse()
-
-
- def __close_sections(self, current_level):
- self._HeadingsToSections__all_sections.reverse()
- num_levels_closed = 0
- for level in self._HeadingsToSections__all_sections:
- if current_level <= level:
- self._HeadingsToSections__write_end_section()
- num_levels_closed += 1
- continue
-
- self._HeadingsToSections__all_sections = self._HeadingsToSections__all_sections[num_levels_closed:]
- self._HeadingsToSections__all_sections.reverse()
-
-
- def __write_start_section(self, current_level, name):
- section_num = ''
- for the_num in self._HeadingsToSections__section_num:
- section_num += '%s.' % the_num
-
- section_num = section_num[:-1]
- num_in_level = len(self._HeadingsToSections__all_sections)
- num_in_level = self._HeadingsToSections__section_num[num_in_level]
- level = len(self._HeadingsToSections__all_sections)
- self._HeadingsToSections__write_obj.write('mi<mk<sect-start\n')
- 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))
-
-
- def __write_end_section(self):
- self._HeadingsToSections__write_obj.write('mi<mk<sect-close\n')
- self._HeadingsToSections__write_obj.write('mi<tg<close_____<section\n')
-
-
- def __default_func(self, line):
- if self._HeadingsToSections__token_info == 'mi<mk<sect-start':
- self._HeadingsToSections__section_num[0] += 1
- self._HeadingsToSections__section_num = self._HeadingsToSections__section_num[0:1]
-
- if self._HeadingsToSections__token_info == 'mi<mk<tabl-start':
- self._HeadingsToSections__state = 'in_table'
- elif self._HeadingsToSections__token_info == 'mi<mk<list_start':
- self._HeadingsToSections__state = 'in_list'
- self._HeadingsToSections__list_depth += 1
- elif self._HeadingsToSections__token_info in self._HeadingsToSections__end_list:
- self._HeadingsToSections__close_sections(0)
- elif self._HeadingsToSections__token_info == 'mi<mk<style-name':
- name = line[17:-1]
- if name in self._HeadingsToSections__headings:
- self._HeadingsToSections__handle_heading(name)
-
-
- if self._HeadingsToSections__token_info == 'mi<mk<body-close':
- self._HeadingsToSections__state = 'after_body'
-
- self._HeadingsToSections__write_obj.write(line)
-
-
- def __handle_heading(self, name):
- num = self._HeadingsToSections__headings.index(name) + 1
- self._HeadingsToSections__close_sections(num)
- self._HeadingsToSections__all_sections.append(num)
- level_depth = len(self._HeadingsToSections__all_sections) + 1
- self._HeadingsToSections__section_num = self._HeadingsToSections__section_num[:level_depth]
- if len(self._HeadingsToSections__section_num) < level_depth:
- self._HeadingsToSections__section_num.append(1)
- else:
- self._HeadingsToSections__section_num[-1] += 1
- self._HeadingsToSections__write_start_section(num, name)
-
-
- def __in_table_func(self, line):
- if self._HeadingsToSections__token_info == 'mi<mk<table-end_':
- self._HeadingsToSections__state = 'default'
-
- self._HeadingsToSections__write_obj.write(line)
-
-
- def __in_list_func(self, line):
- if self._HeadingsToSections__token_info == 'mi<mk<list_close':
- self._HeadingsToSections__list_depth -= 1
- elif self._HeadingsToSections__token_info == 'mi<mk<list_start':
- self._HeadingsToSections__list_depth += 1
-
- if self._HeadingsToSections__list_depth == 0:
- self._HeadingsToSections__state = 'default'
-
- self._HeadingsToSections__write_obj.write(line)
-
-
- def __after_body_func(self, line):
- self._HeadingsToSections__write_obj.write(line)
-
-
- def make_sections(self):
- self._HeadingsToSections__initiate_values()
- read_obj = open(self._HeadingsToSections__file, 'r')
- self._HeadingsToSections__write_obj = open(self._HeadingsToSections__write_to, 'w')
- line_to_read = 1
- while line_to_read:
- line_to_read = read_obj.readline()
- line = line_to_read
- self._HeadingsToSections__token_info = line[:16]
- action = self._HeadingsToSections__state_dict.get(self._HeadingsToSections__state)
- action(line)
- read_obj.close()
- self._HeadingsToSections__write_obj.close()
- copy_obj = copy.Copy(bug_handler = self._HeadingsToSections__bug_handler)
- if self._HeadingsToSections__copy:
- copy_obj.copy_file(self._HeadingsToSections__write_to, 'sections_to_headings.data')
-
- copy_obj.rename(self._HeadingsToSections__write_to, self._HeadingsToSections__file)
- os.remove(self._HeadingsToSections__write_to)
-
-
-