PML Input: Modernize the generated HTML a bit. Fixes #1839689 [Some PML conversions cause FlightCrew errors](https://bugs.launchpad.net/calibre/+bug/1839689)

This commit is contained in:
Kovid Goyal 2019-08-10 07:15:35 +05:30
parent c1663d3cc8
commit 6099c69d6f
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 22 additions and 2 deletions

View File

@ -143,3 +143,23 @@ class PMLInput(InputFormatPlugin):
opf.render(opffile, tocfile, 'toc.ncx')
return os.path.join(getcwd(), 'metadata.opf')
def postprocess_book(self, oeb, opts, log):
from calibre.ebooks.oeb.base import XHTML, barename
for item in oeb.spine:
if hasattr(item.data, 'xpath'):
for heading in item.data.iterdescendants(*map(XHTML, 'h1 h2 h3 h4 h5 h6'.split())):
if not len(heading):
continue
span = heading[0]
if not heading.text and not span.text and not len(span) and barename(span.tag) == 'span':
if not heading.get('id') and span.get('id'):
heading.set('id', span.get('id'))
heading.text = span.tail
heading.remove(span)
if len(heading) == 1 and heading[0].get('style') == 'text-align: center; margin: auto;':
div = heading[0]
if barename(div.tag) == 'div' and not len(div) and not div.get('id') and not heading.get('style'):
heading.text = (heading.text or '') + (div.text or '') + (div.tail or '')
heading.remove(div)
heading.set('style', 'text-align: center')

View File

@ -220,7 +220,7 @@ class PML_HTMLizer(object):
return html
def cleanup_html_remove_redundant(self, html):
for key in self.STATES_TAGS.keys():
for key in self.STATES_TAGS:
open, close = self.STATES_TAGS[key]
if key in self.STATES_VALUE_REQ:
html = re.sub(r'(?u)%s\s*%s' % (open % '.*?', close), '', html)
@ -618,7 +618,7 @@ class PML_HTMLizer(object):
pass
elif c == 'w':
empty = False
text = '<hr width="%s" />' % self.code_value(line)
text = '<hr style="width: %s" />' % self.code_value(line)
elif c == 't':
indent_state['t'] = not indent_state['t']
elif c == 'T':