mirror of
https://github.com/gryf/ebook-converter.git
synced 2026-01-08 04:34:12 +01:00
Here is the first batch of modules, which are needed for converting several formats to LRF. Some of the logic has been change, more cleanups will follow.
94 lines
3.5 KiB
Python
94 lines
3.5 KiB
Python
from __future__ import unicode_literals, absolute_import, print_function, division
|
|
#########################################################################
|
|
# #
|
|
# #
|
|
# copyright 2002 Paul Henry Tremblay #
|
|
# #
|
|
# This program is distributed in the hope that it will be useful, #
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU #
|
|
# General Public License for more details. #
|
|
# #
|
|
# #
|
|
#########################################################################
|
|
import os
|
|
|
|
from ebook_converter.ebooks.rtf2xml import copy
|
|
from ebook_converter.ptempfile import better_mktemp
|
|
from . import open_for_read, open_for_write
|
|
|
|
|
|
class CombineBorders:
|
|
"""Combine borders in RTF tokens to make later processing easier"""
|
|
|
|
def __init__(self,
|
|
in_file ,
|
|
bug_handler,
|
|
copy=None,
|
|
run_level=1,
|
|
):
|
|
self.__file = in_file
|
|
self.__bug_handler = bug_handler
|
|
self.__copy = copy
|
|
self.__write_to = better_mktemp()
|
|
self.__state = 'default'
|
|
self.__bord_pos = 'default'
|
|
self.__bord_att = []
|
|
|
|
def found_bd(self, line):
|
|
# cw<bd<bor-t-r-vi
|
|
self.__state = 'border'
|
|
self.__bord_pos = line[6:16]
|
|
|
|
def __default_func(self, line):
|
|
# cw<bd<bor-t-r-vi
|
|
if self.__first_five == 'cw<bd':
|
|
self.found_bd(line)
|
|
return ''
|
|
return line
|
|
|
|
def end_border(self, line, write_obj):
|
|
border_string = "|".join(self.__bord_att)
|
|
self.__bord_att = []
|
|
write_obj.write('cw<bd<%s<nu<%s\n' % (self.__bord_pos,
|
|
border_string))
|
|
self.__state = 'default'
|
|
self.__bord_string = ''
|
|
if self.__first_five == 'cw<bd':
|
|
self. found_bd(line)
|
|
else:
|
|
write_obj.write(line)
|
|
|
|
def add_to_border_desc(self, line):
|
|
# cw<bt<bdr-hair__<nu<true
|
|
# cw<bt<bdr-linew<nu<0.50
|
|
# tx<__________<some text
|
|
border_desc = line[6:16]
|
|
num = line[20:-1]
|
|
if num == 'true':
|
|
num = ''
|
|
else:
|
|
num = ':' + num
|
|
self.__bord_att.append(border_desc + num)
|
|
|
|
def __border_func(self, line, write_obj):
|
|
if self.__first_five != 'cw<bt':
|
|
self.end_border(line, write_obj)
|
|
else:
|
|
self.add_to_border_desc(line)
|
|
|
|
def combine_borders(self):
|
|
with open_for_read(self.__file) as read_obj:
|
|
with open_for_write(self.__write_to) as write_obj:
|
|
for line in read_obj:
|
|
self.__first_five = line[0:5]
|
|
if self.__state == 'border':
|
|
self.__border_func(line, write_obj)
|
|
else:
|
|
write_obj.write(self.__default_func(line))
|
|
copy_obj = copy.Copy(bug_handler=self.__bug_handler)
|
|
if self.__copy:
|
|
copy_obj.copy_file(self.__write_to, "combine_borders.data")
|
|
copy_obj.rename(self.__write_to, self.__file)
|
|
os.remove(self.__write_to)
|