mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Successfully (though not correctly) parse the output of BookDesigner.
This commit is contained in:
parent
64ed20a65d
commit
0fbf3cb29a
@ -308,6 +308,7 @@ class Locate(EmptyPageElement):
|
||||
pos_map = {1:'bottomleft', 2:'bottomright',3:'topright',4:'topleft', 5:'base'}
|
||||
|
||||
def __init__(self, pos):
|
||||
print pos
|
||||
self.pos = self.pos_map[pos]
|
||||
|
||||
def __unicode__(self):
|
||||
@ -316,11 +317,11 @@ class Locate(EmptyPageElement):
|
||||
class BlockSpace(EmptyPageElement):
|
||||
|
||||
def __init__(self, xspace, yspace):
|
||||
self.xsace, self.yspace = xspace, yspace
|
||||
self.xspace, self.yspace = xspace, yspace
|
||||
|
||||
def __unicode__(self):
|
||||
return u'\n<BlockSpace xspace="%d" yspace="%d" />\n'%\
|
||||
(self.xspace, self.ysapce)
|
||||
(self.xspace, self.yspace)
|
||||
|
||||
class Page(LRFStream):
|
||||
tag_map = {
|
||||
@ -343,7 +344,7 @@ class Page(LRFStream):
|
||||
0xF54E: 'page_div',
|
||||
0xF547: 'x_space',
|
||||
0xF546: 'y_space',
|
||||
0xF548: 'pos',
|
||||
0xF548: 'do_pos',
|
||||
0xF573: 'ruled_line',
|
||||
0xF5D4: 'wait',
|
||||
0xF5D6: 'sound_stop',
|
||||
@ -370,7 +371,7 @@ class Page(LRFStream):
|
||||
self.yspace = tag.word
|
||||
self.in_blockspace = True
|
||||
|
||||
def pos(self, tag):
|
||||
def do_pos(self, tag):
|
||||
self.pos = tag.wordself.pos_map[tag.word]
|
||||
self.in_blockspace = True
|
||||
|
||||
@ -647,7 +648,7 @@ class Text(LRFStream):
|
||||
|
||||
def invalid(op):
|
||||
stream.seek(op)
|
||||
self.simple_container('EmpLine')
|
||||
self.simple_container(None, 'EmpLine')
|
||||
|
||||
oldpos = stream.tell()
|
||||
try:
|
||||
@ -731,7 +732,8 @@ class Text(LRFStream):
|
||||
else:
|
||||
self.containers.append(self.__class__.Span('Span', {name:val}))
|
||||
current_style[name] = val
|
||||
|
||||
if self.containers:
|
||||
self.empty_containers()
|
||||
self.stream = None
|
||||
|
||||
def __unicode__(self):
|
||||
@ -741,6 +743,7 @@ class Text(LRFStream):
|
||||
if isinstance(c, basestring):
|
||||
s += c
|
||||
elif c is None:
|
||||
if len(open_containers) > 0: #for malformed text streams like those produced by BookDesigner
|
||||
p = open_containers.pop()
|
||||
nl = u'\n' if p.name == 'P' else u''
|
||||
s += nl + u'</%s>'%(p.name,) + nl
|
||||
|
@ -76,10 +76,10 @@ class FontLoader(object):
|
||||
rfont.setBold(wt>=69)
|
||||
self.cache[font] = rfont
|
||||
qfont = rfont
|
||||
if text_style.underline or text_style.overline:
|
||||
if text_style.emplinetype != 'none':
|
||||
qfont = QFont(rfont)
|
||||
qfont.setOverline(text_style.overline)
|
||||
qfont.setUnderline(text_style.underline)
|
||||
qfont.setOverline(text_style.emplineposition == 'before')
|
||||
qfont.setUnderline(text_style.emplineposition == 'after')
|
||||
return qfont
|
||||
|
||||
class ParSkip(object):
|
||||
@ -208,7 +208,9 @@ class Line(QGraphicsRectItem):
|
||||
tcf.setFont(ts.font)
|
||||
tcf.setVerticalAlignment(ts.valign)
|
||||
tcf.setForeground(ts.textcolor)
|
||||
tcf.setUnderlineStyle(self.line_map[ts.line_style])
|
||||
tcf.setUnderlineColor(ts.linecolor)
|
||||
if ts.emplineposition == 'after':
|
||||
tcf.setUnderlineStyle(self.line_map[ts.emplinetype])
|
||||
return tcf
|
||||
|
||||
def populate(self, phrase, ts, wordspace, in_link):
|
||||
@ -363,12 +365,10 @@ class TextStyle(Style):
|
||||
self.font_loader = font_loader
|
||||
self.fontstyle = QFont.StyleNormal
|
||||
self.valign = QTextCharFormat.AlignBottom
|
||||
self.underline = False
|
||||
self.overline = False
|
||||
self.line_style = 'none'
|
||||
Style.__init__(self, style, font_loader.dpi)
|
||||
for attr in ruby_tags:
|
||||
setattr(self, attr, ruby_tags[attr])
|
||||
Style.__init__(self, style, font_loader.dpi)
|
||||
self.emplinetype = 'none'
|
||||
self.font = self.font_loader.font(self)
|
||||
|
||||
|
||||
@ -490,12 +490,9 @@ class TextBlock(ContentObject):
|
||||
open_containers.append((('current_style', self.current_style.copy()),))
|
||||
self.current_style.valign=QTextCharFormat.AlignSubScript
|
||||
elif i.name == 'EmpLine':
|
||||
if i.attrs:
|
||||
open_containers.append((('current_style', self.current_style.copy()),))
|
||||
if i.attrs['emplineposition'] == 'before':
|
||||
self.current_style.overline = True
|
||||
if i.attrs['emplineposition'] == 'after':
|
||||
self.current_style.underline = True
|
||||
self.current_style.update(line_type=i.attrs['emplinetype'])
|
||||
self.current_style.update(i.attrs)
|
||||
else:
|
||||
self.logger.warning('Unhandled TextTag %s'%(i.name,))
|
||||
if not i.self_closing:
|
||||
@ -715,9 +712,15 @@ class Screen(_Canvas):
|
||||
self.setPen(QPen(Qt.red, 1, Qt.SolidLine))
|
||||
header = footer = None
|
||||
if page_style.headheight > 0:
|
||||
try:
|
||||
header = chapter.oddheader if odd else chapter.evenheader
|
||||
except AttributeError:
|
||||
pass
|
||||
if page_style.footheight > 0:
|
||||
try:
|
||||
footer = chapter.oddfooter if odd else chapter.evenfooter
|
||||
except AttributeError:
|
||||
pass
|
||||
if header:
|
||||
header = Header(font_loader, header, page_style, logger, opts, ruby_tags, link_activated)
|
||||
self.layout_canvas(header, self.content_x, self.header_y)
|
||||
|
Loading…
x
Reference in New Issue
Block a user