home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import sys
- import os
- import tempfile
- import re
- from calibre.ebooks.rtf2xml import copy
-
- class MakeLists:
-
- 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):
- self._MakeLists__file = in_file
- self._MakeLists__bug_handler = bug_handler
- self._MakeLists__run_level = run_level
- self._MakeLists__no_headings_as_list = no_headings_as_list
- self._MakeLists__headings_to_sections = headings_to_sections
- self._MakeLists__copy = copy
- self._MakeLists__write_to = tempfile.mktemp()
- self._MakeLists__list_of_lists = list_of_lists
- self._MakeLists__write_list_info = write_list_info
-
-
- def __initiate_values(self):
- self._MakeLists__state = 'default'
- self._MakeLists__left_indent = 0
- self._MakeLists__list_type = 'not-defined'
- self._MakeLists__pard_def = ''
- self._MakeLists__all_lists = []
- self._MakeLists__level = 0
- self._MakeLists__list_chunk = ''
- self._MakeLists__state_dict = {
- 'default': self._MakeLists__default_func,
- 'in_pard': self._MakeLists__in_pard_func,
- 'after_pard': self._MakeLists__after_pard_func }
- self._MakeLists__headings = [
- 'heading 1',
- 'heading 2',
- 'heading 3',
- 'heading 4',
- 'heading 5',
- 'heading 6',
- 'heading 7',
- 'heading 8',
- 'heading 9']
- self._MakeLists__allow_levels = [
- '0',
- '1',
- '2',
- '3',
- '4',
- '5',
- '6',
- '7',
- '8',
- '9']
- self._MakeLists__style_name = ''
- self._MakeLists__end_list = [
- 'mi<mk<body-close',
- 'mi<mk<par-in-fld',
- 'cw<tb<cell______',
- 'cw<tb<row-def___',
- 'cw<tb<row_______',
- 'mi<mk<sect-close',
- 'mi<mk<sect-start',
- 'mi<mk<header-beg',
- 'mi<mk<header-end',
- 'mi<mk<head___clo',
- 'mi<mk<fldbk-end_',
- 'mi<mk<close_cell',
- 'mi<mk<footnt-ope',
- 'mi<mk<foot___clo',
- 'mi<mk<tabl-start']
- self._MakeLists__end_lines = [
- 'mi<tg<close_____<cell\n']
- self._MakeLists__id_regex = re.compile('\\<list-id\\>(\\d+)')
- self._MakeLists__lv_regex = re.compile('\\<list-level\\>(\\d+)')
- self._MakeLists__found_appt = 0
- self._MakeLists__line_num = 0
-
-
- def __in_pard_func(self, line):
- if self._MakeLists__token_info == 'mi<mk<pard-end__':
- self._MakeLists__state = 'after_pard'
-
- self._MakeLists__write_obj.write(line)
-
-
- def __after_pard_func(self, line):
- if self._MakeLists__token_info == 'mi<tg<open-att__' and line[17:37] == 'paragraph-definition':
- is_heading = self._MakeLists__is_a_heading()
- search_obj = re.search(self._MakeLists__id_regex, line)
- if search_obj and not is_heading:
- search_obj_lv = re.search(self._MakeLists__lv_regex, line)
- if search_obj_lv:
- self._MakeLists__level = search_obj_lv.group(1)
-
- num = search_obj.group(1)
- self._MakeLists__list_after_par_def_func(line, num)
- self._MakeLists__write_obj.write(line)
- self._MakeLists__state = 'in_pard'
- elif is_heading:
- self._MakeLists__left_indent = -1000
- self._MakeLists__close_lists()
- self._MakeLists__write_obj.write(self._MakeLists__list_chunk)
- self._MakeLists__list_chunk = ''
- self._MakeLists__state = 'default'
- self._MakeLists__write_obj.write(line)
- else:
- self._MakeLists__close_lists()
- self._MakeLists__write_obj.write(self._MakeLists__list_chunk)
- self._MakeLists__list_chunk = ''
- self._MakeLists__write_obj.write(line)
- if len(self._MakeLists__all_lists) == 0:
- self._MakeLists__state = 'default'
- else:
- self._MakeLists__state = 'in_pard'
- elif self._MakeLists__token_info in self._MakeLists__end_list:
- self._MakeLists__left_indent = -1000
- self._MakeLists__close_lists()
- self._MakeLists__write_obj.write(self._MakeLists__list_chunk)
- self._MakeLists__list_chunk = ''
- self._MakeLists__state = 'default'
- self._MakeLists__write_obj.write(line)
- else:
- self._MakeLists__list_chunk += line
-
-
- def __list_after_par_def_func(self, line, id):
- last_list_id = self._MakeLists__all_lists[-1]['id']
- if id != last_list_id:
- self._MakeLists__close_lists()
- self._MakeLists__write_obj.write(self._MakeLists__list_chunk)
- self._MakeLists__write_start_list(id)
- self._MakeLists__list_chunk = ''
- else:
- last_list_indent = self._MakeLists__all_lists[-1]['left-indent']
- if self._MakeLists__left_indent > last_list_indent:
- self._MakeLists__write_obj.write(self._MakeLists__list_chunk)
- self._MakeLists__write_start_list(id)
- else:
- self._MakeLists__write_end_item()
- self._MakeLists__write_obj.write(self._MakeLists__list_chunk)
- self._MakeLists__write_start_item()
- self._MakeLists__list_chunk = ''
-
-
- def __close_lists(self):
- if self._MakeLists__line_num < 25 and self._MakeLists__found_appt:
- sys.stderr.write('in closing out lists\n')
- sys.stderr.write('current_indent is "%s"\n' % self._MakeLists__left_indent)
-
- current_indent = self._MakeLists__left_indent
- self._MakeLists__all_lists.reverse()
- num_levels_closed = 0
- for the_dict in self._MakeLists__all_lists:
- list_indent = the_dict.get('left-indent')
- if self._MakeLists__line_num < 25 and self._MakeLists__found_appt:
- sys.stderr.write('last indent is "%s"' % list_indent)
-
- if current_indent <= list_indent:
- self._MakeLists__write_end_item()
- self._MakeLists__write_end_list()
- num_levels_closed += 1
- continue
-
- self._MakeLists__all_lists = self._MakeLists__all_lists[num_levels_closed:]
- self._MakeLists__all_lists.reverse()
-
-
- def __write_end_list(self):
- self._MakeLists__write_obj.write('mi<tg<close_____<list\n')
- self._MakeLists__write_obj.write('mi<mk<list_close\n')
-
-
- def __write_start_list(self, id):
- the_dict = { }
- the_dict['left-indent'] = self._MakeLists__left_indent
- the_dict['id'] = id
- self._MakeLists__all_lists.append(the_dict)
- self._MakeLists__write_obj.write('mi<mk<list_start\n')
- if str(self._MakeLists__level) not in self._MakeLists__allow_levels:
- lev_num = '0'
- else:
- lev_num = self._MakeLists__level
- self._MakeLists__write_obj.write('mi<tg<open-att__<list<list-id>%s<level>%s' % (id, lev_num))
- list_dict = { }
- if self._MakeLists__list_of_lists:
- index_of_list = self._MakeLists__get_index_of_list(id)
- if index_of_list != None:
- list_dict = self._MakeLists__list_of_lists[index_of_list][0]
- level = int(self._MakeLists__level) + 1
- level_dict = self._MakeLists__list_of_lists[index_of_list][level][0]
- list_type = level_dict.get('numbering-type')
- if list_type == 'bullet':
- list_type = 'unordered'
- else:
- list_type = 'ordered'
- self._MakeLists__write_obj.write('<list-type>%s' % list_type)
- else:
- self._MakeLists__write_obj.write('<list-type>%s' % self._MakeLists__list_type)
- else:
- self._MakeLists__write_obj.write('<list-type>%s' % self._MakeLists__list_type)
- if self._MakeLists__list_of_lists and self._MakeLists__write_list_info and list_dict:
- not_allow = [
- 'list-id']
- the_keys_list = list_dict.keys()
- for the_key in the_keys_list:
- if the_key in not_allow:
- continue
-
- self._MakeLists__write_obj.write('<%s>%s' % (the_key, list_dict[the_key]))
-
- the_keys_level = level_dict.keys()
- for the_key in the_keys_level:
- self._MakeLists__write_obj.write('<%s>%s' % (the_key, level_dict[the_key]))
-
-
- self._MakeLists__write_obj.write('\n')
- self._MakeLists__write_obj.write('mi<mk<liststart_\n')
- self._MakeLists__write_start_item()
-
-
- def __get_index_of_list(self, id):
- if id == '0':
- return None
- the_index = 0
- for list in self._MakeLists__list_of_lists:
- the_dict = list[0]
- id_in_list = the_dict.get('list-id')
- if id in id_in_list:
- return the_index
- the_index += 1
-
-
-
- def __write_start_item(self):
- self._MakeLists__write_obj.write('mi<mk<item_start\n')
- self._MakeLists__write_obj.write('mi<tg<open______<item\n')
- self._MakeLists__write_obj.write('mi<mk<itemstart_\n')
-
-
- def __write_end_item(self):
- self._MakeLists__write_obj.write('mi<tg<item_end__\n')
- self._MakeLists__write_obj.write('mi<tg<close_____<item\n')
- self._MakeLists__write_obj.write('mi<tg<item__end_\n')
-
-
- def __default_func(self, line):
- if self._MakeLists__token_info == 'mi<tg<open-att__' and line[17:37] == 'paragraph-definition':
- is_a_heading = self._MakeLists__is_a_heading()
- if not is_a_heading:
- search_obj = re.search(self._MakeLists__id_regex, line)
- if search_obj:
- num = search_obj.group(1)
- self._MakeLists__state = 'in_pard'
- search_obj_lv = re.search(self._MakeLists__lv_regex, line)
- if search_obj_lv:
- self._MakeLists__level = search_obj_lv.group(1)
-
- self._MakeLists__write_start_list(num)
-
-
-
- self._MakeLists__write_obj.write(line)
-
-
- def __is_a_heading(self):
- if self._MakeLists__style_name in self._MakeLists__headings:
- if self._MakeLists__headings_to_sections:
- return 1
- if self._MakeLists__no_headings_as_list:
- return 1
- return 0
- self._MakeLists__style_name in self._MakeLists__headings
- return 0
-
-
- def __get_indent(self, line):
- if self._MakeLists__token_info == 'mi<mk<left_inden':
- self._MakeLists__left_indent = float(line[17:-1])
-
-
-
- def __get_list_type(self, line):
- if self._MakeLists__token_info == 'mi<mk<list-type_':
- self._MakeLists__list_type = line[17:-1]
- if self._MakeLists__list_type == 'item':
- self._MakeLists__list_type = 'unordered'
-
-
-
-
- def __get_style_name(self, line):
- if self._MakeLists__token_info == 'mi<mk<style-name':
- self._MakeLists__style_name = line[17:-1]
-
-
-
- def make_lists(self):
- self._MakeLists__initiate_values()
- read_obj = open(self._MakeLists__file, 'r')
- self._MakeLists__write_obj = open(self._MakeLists__write_to, 'w')
- line_to_read = 1
- while line_to_read:
- line_to_read = read_obj.readline()
- line = line_to_read
- self._MakeLists__token_info = line[:16]
- self._MakeLists__get_indent(line)
- self._MakeLists__get_list_type(line)
- self._MakeLists__get_style_name(line)
- action = self._MakeLists__state_dict.get(self._MakeLists__state)
- action(line)
- read_obj.close()
- self._MakeLists__write_obj.close()
- copy_obj = copy.Copy(bug_handler = self._MakeLists__bug_handler)
- if self._MakeLists__copy:
- copy_obj.copy_file(self._MakeLists__write_to, 'make_lists.data')
-
- copy_obj.rename(self._MakeLists__write_to, self._MakeLists__file)
- os.remove(self._MakeLists__write_to)
-
-
-