MOBI Output: Partial support for nested superscript and subscripts. Fixes #6132 (nested subscript conversion-----epub to mobi)

This commit is contained in:
Kovid Goyal 2010-07-09 14:15:20 -06:00
parent 797e319a3e
commit 28d5193ba3

View File

@ -58,6 +58,7 @@ class FormatState(object):
self.fsize = 3 self.fsize = 3
self.ids = set() self.ids = set()
self.valign = 'baseline' self.valign = 'baseline'
self.nest = False
self.italic = False self.italic = False
self.bold = False self.bold = False
self.strikethrough = False self.strikethrough = False
@ -233,9 +234,17 @@ class MobiMLizer(object):
inline = etree.SubElement(inline, XHTML('a'), href=href) inline = etree.SubElement(inline, XHTML('a'), href=href)
bstate.anchor = inline bstate.anchor = inline
if valign == 'super': if valign == 'super':
inline = etree.SubElement(inline, XHTML('sup')) parent = inline
if istate.nest and bstate.inline is not None:
parent = bstate.inline
istate.nest = False
inline = etree.SubElement(parent, XHTML('sup'))
elif valign == 'sub': elif valign == 'sub':
inline = etree.SubElement(inline, XHTML('sub')) parent = inline
if istate.nest and bstate.inline is not None:
parent = bstate.inline
istate.nest = False
inline = etree.SubElement(parent, XHTML('sub'))
elif fsize != 3: elif fsize != 3:
inline = etree.SubElement(inline, XHTML('font'), inline = etree.SubElement(inline, XHTML('font'),
size=str(fsize)) size=str(fsize))
@ -343,8 +352,10 @@ class MobiMLizer(object):
istate.family = 'serif' istate.family = 'serif'
valign = style['vertical-align'] valign = style['vertical-align']
if valign in ('super', 'text-top') or asfloat(valign) > 0: if valign in ('super', 'text-top') or asfloat(valign) > 0:
istate.nest = istate.valign in ('sub', 'super')
istate.valign = 'super' istate.valign = 'super'
elif valign == 'sub' or asfloat(valign) < 0: elif valign == 'sub' or asfloat(valign) < 0:
istate.nest = istate.valign in ('sub', 'super')
istate.valign = 'sub' istate.valign = 'sub'
else: else:
istate.valign = 'baseline' istate.valign = 'baseline'