home *** CD-ROM | disk | FTP | other *** search
Wrap
# Source Generated with Decompyle++ # File: in.pyc (Python 2.6) import sys import os import tempfile from calibre.ebooks.rtf2xml import copy, border_parse class Table: def __init__(self, in_file, bug_handler, copy = None, run_level = 1): self._Table__file = in_file self._Table__bug_handler = bug_handler self._Table__copy = copy self._Table__run_level = run_level self._Table__write_to = tempfile.mktemp() def __initiate_values(self): self._Table__state_dict = { 'in_table': self._Table__in_table_func, 'in_row_def': self._Table__in_row_def_func, 'not_in_table': self._Table__not_in_table_func, 'in_cell': self._Table__in_cell_func, 'in_row': self._Table__in_row_func } self._Table__not_in_table_dict = { 'cw<tb<row-def___': self._Table__found_row_def_func, 'cw<tb<in-table__': self._Table__start_table_func, 'mi<mk<in-table__': self._Table__start_table_func } self._Table__in_row_definition_dict = { 'mi<mk<not-in-tbl': self._Table__end_row_table_func, 'mi<mk<pard-start': self._Table__end_row_def_func } self._Table__in_row_dict = { 'mi<mk<not-in-tbl': self._Table__close_table, 'mi<mk<pard-start': self._Table__start_cell_func, 'cw<tb<row_______': self._Table__end_row_func, 'cw<tb<cell______': self._Table__empty_cell } self._Table__state = [ 'not_in_table'] self._Table__table_data = [] self._Table__row_dict = { } self._Table__cell_list = [] self._Table__cell_widths = [] def __in_table_func(self, line): if self._Table__token_info == 'mi<mk<not-in-tbl' and self._Table__token_info == 'mi<mk<sect-start' and self._Table__token_info == 'mi<mk<sect-close' or self._Table__token_info == 'mi<mk<body-close': self._Table__close_table(line) elif self._Table__token_info == 'mi<mk<pard-start': self._Table__start_row_func(line) self._Table__start_cell_func(line) elif self._Table__token_info == 'cw<tb<row-def___': self._Table__found_row_def_func(line) elif self._Table__token_info == 'cw<tb<cell______': self._Table__start_row_func(line) self._Table__empty_cell(line) self._Table__write_obj.write(line) def __not_in_table_func(self, line): action = self._Table__not_in_table_dict.get(self._Table__token_info) if action: action(line) self._Table__write_obj.write(line) def __close_table(self, line): self._Table__write_obj.write('mi<mk<table-end_\n') self._Table__state = [ 'not_in_table'] self._Table__table_data[-1]['number-of-columns'] = self._Table__max_number_cells_in_row self._Table__table_data[-1]['number-of-rows'] = self._Table__rows_in_table average_cells_in_row = self._Table__mode(self._Table__list_of_cells_in_row) self._Table__table_data[-1]['average-cells-per-row'] = average_cells_in_row average_cell_width = self._Table__mode(self._Table__cell_widths) self._Table__table_data[-1]['average-cell-width'] = average_cell_width def __found_row_def_func(self, line): self._Table__state.append('in_row_def') self._Table__last_cell_position = 0 self._Table__row_dict = { } self._Table__cell_list = [] self._Table__cell_list.append({ }) self._Table__cell_widths = [] def __start_table_func(self, line): self._Table__rows_in_table = 0 self._Table__cells_in_table = 0 self._Table__cells_in_row = 0 self._Table__max_number_cells_in_row = 0 self._Table__table_data.append({ }) self._Table__list_of_cells_in_row = [] self._Table__write_obj.write('mi<mk<tabl-start\n') self._Table__state.append('in_table') def __end_row_table_func(self, line): self._Table__close_table(self, line) def __end_row_def_func(self, line): if len(self._Table__state) > 0: if self._Table__state[-1] == 'in_row_def': self._Table__state.pop() self._Table__cell_list.pop() widths = self._Table__row_dict.get('widths') if widths: width_list = widths.split(',') num_cells = len(width_list) self._Table__row_dict['number-of-cells'] = num_cells def __in_row_def_func(self, line): if self._Table__token_info == 'cw<tb<row_______': self._Table__end_row_func(line) self._Table__end_row_def_func(line) self._Table__write_obj.write(line) elif line[0:2] == 'cw': self._Table__handle_row_token(line) self._Table__write_obj.write(line) elif self._Table__token_info == 'mi<mk<not-in-tbl' and 'in_table' in self._Table__state: self._Table__end_row_def_func(line) self._Table__close_table(line) self._Table__write_obj.write(line) elif self._Table__token_info == 'mi<mk<pard-start': self._Table__end_row_def_func(line) if self._Table__state > 0 and self._Table__state[-1] == 'in_table': self._Table__start_row_func(line) self._Table__start_cell_func(line) self._Table__write_obj.write(line) elif self._Table__token_info == 'mi<mk<in-table__': self._Table__end_row_def_func(line) if len(self._Table__state) > 0 and self._Table__state[-1] != 'in_table': self._Table__start_table_func(line) self._Table__write_obj.write(line) else: self._Table__write_obj.write(line) def __handle_row_token(self, line): if line[3:5] == 'bd': border_obj = border_parse.BorderParse() the_dict = border_obj.parse_border(line) keys = the_dict.keys() in_cell = 0 for key in keys: if key[0:11] == 'border-cell': in_cell = 1 continue for key in keys: if in_cell: self._Table__cell_list[-1][key] = the_dict[key] continue self._Table__row_dict[key] = the_dict[key] elif self._Table__token_info == 'cw<tb<cell-posit': self._Table__found_cell_position(line) elif self._Table__token_info == 'cw<tb<row-pos-le': position = line[20:-1] self._Table__row_dict['left-row-position'] = position elif self._Table__token_info == 'cw<tb<row-header': self._Table__row_dict['header'] = 'true' def __start_cell_func(self, line): self._Table__state.append('in_cell') if len(self._Table__cell_list) > 0: self._Table__write_obj.write('mi<tg<open-att__<cell') cell_dict = self._Table__cell_list[0] keys = cell_dict.keys() for key in keys: self._Table__write_obj.write('<%s>%s' % (key, cell_dict[key])) self._Table__write_obj.write('\n') self._Table__cell_list.pop(0) else: self._Table__write_obj.write('mi<tg<open______<cell\n') self._Table__cells_in_table += 1 self._Table__cells_in_row += 1 def __start_row_func(self, line): self._Table__state.append('in_row') self._Table__write_obj.write('mi<tg<open-att__<row') keys = self._Table__row_dict.keys() for key in keys: self._Table__write_obj.write('<%s>%s' % (key, self._Table__row_dict[key])) self._Table__write_obj.write('\n') self._Table__cells_in_row = 0 self._Table__rows_in_table += 1 def __found_cell_position(self, line): new_cell_position = round(float(line[20:-1]), 2) left_position = 0 if self._Table__last_cell_position == 0: left_position = self._Table__row_dict.get('left-row-position', 0) left_position = float(left_position) width = new_cell_position - self._Table__last_cell_position - left_position width = str('%.2f' % width) self._Table__last_cell_position = new_cell_position widths_exists = self._Table__row_dict.get('widths') if widths_exists: self._Table__row_dict['widths'] += ', %s' % str(width) else: self._Table__row_dict['widths'] = str(width) self._Table__cell_list[-1]['width'] = width self._Table__cell_list.append({ }) self._Table__cell_widths.append(width) def __in_cell_func(self, line): if self._Table__token_info == 'mi<mk<not-in-tbl' and self._Table__token_info == 'mi<mk<sect-start' and self._Table__token_info == 'mi<mk<sect-close' or self._Table__token_info == 'mi<mk<body-close': self._Table__end_cell_func(line) self._Table__end_row_func(line) self._Table__close_table(line) self._Table__write_obj.write(line) elif self._Table__token_info == 'cw<tb<cell______': self._Table__end_cell_func(line) else: self._Table__write_obj.write(line) def __end_cell_func(self, line): if len(self._Table__state) > 1: if self._Table__state[-1] == 'in_cell': self._Table__state.pop() self._Table__write_obj.write('mi<mk<close_cell\n') self._Table__write_obj.write('mi<tg<close_____<cell\n') self._Table__write_obj.write('mi<mk<closecell_\n') def __in_row_func(self, line): if self._Table__token_info == 'mi<mk<not-in-tbl' and self._Table__token_info == 'mi<mk<sect-start' and self._Table__token_info == 'mi<mk<sect-close' or self._Table__token_info == 'mi<mk<body-close': self._Table__end_row_func(line) self._Table__close_table(line) self._Table__write_obj.write(line) else: action = self._Table__in_row_dict.get(self._Table__token_info) if action: action(line) self._Table__write_obj.write(line) def __end_row_func(self, line): if self._Table__cells_in_row > self._Table__max_number_cells_in_row: self._Table__max_number_cells_in_row = self._Table__cells_in_row self._Table__list_of_cells_in_row.append(self._Table__cells_in_row) def __empty_cell(self, line): if len(self._Table__cell_list) > 0: self._Table__write_obj.write('mi<tg<empty-att_<cell') cell_dict = self._Table__cell_list[-1] keys = cell_dict.keys() for key in keys: self._Table__write_obj.write('<%s>%s' % (key, cell_dict[key])) self._Table__write_obj.write('\n') else: self._Table__write_obj.write('mi<tg<empty_____<cell\n') self._Table__cells_in_table += 1 self._Table__cells_in_row += 1 def __mode(self, the_list): max = 0 mode = 'not-defined' for item in the_list: num_of_values = the_list.count(item) if num_of_values > max: mode = item max = num_of_values continue return mode def make_table(self): self._Table__initiate_values() read_obj = open(self._Table__file, 'r') self._Table__write_obj = open(self._Table__write_to, 'w') line_to_read = 1 while line_to_read: line_to_read = read_obj.readline() line = line_to_read self._Table__token_info = line[:16] action = self._Table__state_dict.get(self._Table__state[-1]) if action == None: sys.stderr.write('No matching state in module table.py\n') sys.stderr.write(self._Table__state[-1] + '\n') action(line) read_obj.close() self._Table__write_obj.close() copy_obj = copy.Copy(bug_handler = self._Table__bug_handler) if self._Table__copy: copy_obj.copy_file(self._Table__write_to, 'table.data') copy_obj.rename(self._Table__write_to, self._Table__file) os.remove(self._Table__write_to) return self._Table__table_data