Clean RTF combine borders

This commit is contained in:
Sengian 2011-01-07 23:36:42 +01:00
parent be93bd120a
commit 4aa12408f2

View File

@ -16,7 +16,9 @@
# # # #
######################################################################### #########################################################################
import os, tempfile import os, tempfile
from calibre.ebooks.rtf2xml import copy from calibre.ebooks.rtf2xml import copy
class CombineBorders: class CombineBorders:
"""Combine borders in RTF tokens to make later processing easier""" """Combine borders in RTF tokens to make later processing easier"""
def __init__(self, def __init__(self,
@ -32,28 +34,31 @@ class CombineBorders:
self.__state = 'default' self.__state = 'default'
self.__bord_pos = 'default' self.__bord_pos = 'default'
self.__bord_att = [] self.__bord_att = []
def found_bd(self, line): def found_bd(self, line):
#cw<bd<bor-t-r-vi #cw<bd<bor-t-r-vi
self.__state = 'border' self.__state = 'border'
self.__bord_pos = line[6:16] self.__bord_pos = line[6:16]
def __default_func(self, line): def __default_func(self, line):
#cw<bd<bor-t-r-vi #cw<bd<bor-t-r-vi
if self.__first_five == 'cw<bd': if self.__first_five == 'cw<bd':
self.found_bd(line) self.found_bd(line)
return '' return ''
return line return line
def end_border(self, line, write_obj): def end_border(self, line, write_obj):
joiner = "|" border_string = "|".join(self.__bord_att)
border_string = joiner.join(self.__bord_att)
self.__bord_att = [] self.__bord_att = []
write_obj.write('cw<bd<%s<nu<%s\n' % (self.__bord_pos, write_obj.write('cw<bd<%s<nu<%s\n' % (self.__bord_pos,
border_string)) border_string))
self.__state = 'default' self.__state = 'default'
self.__bord_string = '' self.__bord_string = ''
if self.__first_five == 'cw<bd': if self.__first_five == 'cw<bd':
self. found_bd(line) self. found_bd(line)
else: else:
write_obj.write(line) write_obj.write(line)
def add_to_border_desc(self, line): def add_to_border_desc(self, line):
#cw<bt<bdr-hair__<nu<true #cw<bt<bdr-hair__<nu<true
#cw<bt<bdr-linew<nu<0.50 #cw<bt<bdr-linew<nu<0.50
@ -65,26 +70,22 @@ class CombineBorders:
else: else:
num = ':' + num num = ':' + num
self.__bord_att.append(border_desc + num) self.__bord_att.append(border_desc + num)
def __border_func(self, line, write_obj): def __border_func(self, line, write_obj):
if self.__first_five != 'cw<bt': if self.__first_five != 'cw<bt':
self.end_border(line, write_obj) self.end_border(line, write_obj)
else: else:
self.add_to_border_desc(line) self.add_to_border_desc(line)
def combine_borders(self): def combine_borders(self):
read_obj = open(self.__file, 'r') with open(self.__file, 'r') as read_obj,
write_obj = open(self.__write_to, 'w') open(self.__write_to, 'w') as write_obj:
line_to_read = 'dummy' for line in read_obj:
while line_to_read: self.__first_five = line[0:5]
line_to_read = read_obj.readline() if self.__state == 'border':
line = line_to_read self.__border_func(line, write_obj)
self.__first_five = line[0:5] else:
if self.__state == 'border': write_obj.write(self.__default_func(line))
self.__border_func(line, write_obj)
else:
to_print = self.__default_func(line)
write_obj.write(to_print)
read_obj.close()
write_obj.close()
copy_obj = copy.Copy(bug_handler = self.__bug_handler) copy_obj = copy.Copy(bug_handler = self.__bug_handler)
if self.__copy: if self.__copy:
copy_obj.copy_file(self.__write_to, "combine_borders.data") copy_obj.copy_file(self.__write_to, "combine_borders.data")