mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Force pretty printing of output when outputting to OEB or EPUB. Fix #2777 (ToC incorrect in MS Reader to ePub)
This commit is contained in:
parent
d57e1d98c3
commit
e0d515874b
@ -80,6 +80,8 @@ class EPUBOutput(OutputFormatPlugin):
|
|||||||
|
|
||||||
])
|
])
|
||||||
|
|
||||||
|
recommendations = set([('pretty_print', True, OptionRecommendation.HIGH)])
|
||||||
|
|
||||||
|
|
||||||
TITLEPAGE_COVER = '''\
|
TITLEPAGE_COVER = '''\
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||||
|
@ -367,7 +367,7 @@ class MetaInformation(object):
|
|||||||
if self.pubdate is not None:
|
if self.pubdate is not None:
|
||||||
ans += [(_('Published'), unicode(self.pubdate.isoformat(' ')))]
|
ans += [(_('Published'), unicode(self.pubdate.isoformat(' ')))]
|
||||||
if self.rights is not None:
|
if self.rights is not None:
|
||||||
ans += [(_('Rights'), unicode(self.rights.isoformat(' ')))]
|
ans += [(_('Rights'), unicode(self.rights))]
|
||||||
for i, x in enumerate(ans):
|
for i, x in enumerate(ans):
|
||||||
ans[i] = u'<tr><td><b>%s</b></td><td>%s</td></tr>'%x
|
ans[i] = u'<tr><td><b>%s</b></td><td>%s</td></tr>'%x
|
||||||
return u'<table>%s</table>'%u'\n'.join(ans)
|
return u'<table>%s</table>'%u'\n'.join(ans)
|
||||||
|
@ -9,6 +9,8 @@ from lxml import etree
|
|||||||
|
|
||||||
from calibre.customize.conversion import OutputFormatPlugin
|
from calibre.customize.conversion import OutputFormatPlugin
|
||||||
from calibre import CurrentDir
|
from calibre import CurrentDir
|
||||||
|
from calibre.customize.conversion import OptionRecommendation
|
||||||
|
|
||||||
from urllib import unquote
|
from urllib import unquote
|
||||||
|
|
||||||
class OEBOutput(OutputFormatPlugin):
|
class OEBOutput(OutputFormatPlugin):
|
||||||
@ -17,6 +19,9 @@ class OEBOutput(OutputFormatPlugin):
|
|||||||
author = 'Kovid Goyal'
|
author = 'Kovid Goyal'
|
||||||
file_type = 'oeb'
|
file_type = 'oeb'
|
||||||
|
|
||||||
|
recommendations = set([('pretty_print', True, OptionRecommendation.HIGH)])
|
||||||
|
|
||||||
|
|
||||||
def convert(self, oeb_book, output_path, input_plugin, opts, log):
|
def convert(self, oeb_book, output_path, input_plugin, opts, log):
|
||||||
self.log, self.opts = log, opts
|
self.log, self.opts = log, opts
|
||||||
if not os.path.exists(output_path):
|
if not os.path.exists(output_path):
|
||||||
|
@ -16,7 +16,7 @@ from lxml import etree
|
|||||||
from lxml.cssselect import CSSSelector
|
from lxml.cssselect import CSSSelector
|
||||||
|
|
||||||
from calibre.ebooks.oeb.base import OEB_STYLES, XPNSMAP as NAMESPACES, \
|
from calibre.ebooks.oeb.base import OEB_STYLES, XPNSMAP as NAMESPACES, \
|
||||||
urldefrag, rewrite_links, urlunquote, barename
|
urldefrag, rewrite_links, urlunquote, barename, XHTML
|
||||||
from calibre.ebooks.epub import rules
|
from calibre.ebooks.epub import rules
|
||||||
|
|
||||||
XPath = functools.partial(_XPath, namespaces=NAMESPACES)
|
XPath = functools.partial(_XPath, namespaces=NAMESPACES)
|
||||||
@ -216,7 +216,25 @@ class FlowSplitter(object):
|
|||||||
self.trees.append(before)
|
self.trees.append(before)
|
||||||
tree = after
|
tree = after
|
||||||
self.trees.append(tree)
|
self.trees.append(tree)
|
||||||
self.trees = [t for t in self.trees if not self.is_page_empty(t.getroot())]
|
trees, ids = [], set([])
|
||||||
|
for tree in self.trees:
|
||||||
|
root = tree.getroot()
|
||||||
|
if self.is_page_empty(root):
|
||||||
|
discarded_ids = root.xpath('//*[@id]')
|
||||||
|
for x in discarded_ids:
|
||||||
|
x = x.get('id')
|
||||||
|
if not x.startswith('calibre_'):
|
||||||
|
ids.add(x)
|
||||||
|
else:
|
||||||
|
if ids:
|
||||||
|
body = self.get_body(root)
|
||||||
|
if body is not None:
|
||||||
|
for x in ids:
|
||||||
|
body.insert(0, body.makeelement(XHTML('div'),
|
||||||
|
id=x, style='height:0pt'))
|
||||||
|
ids = set([])
|
||||||
|
trees.append(tree)
|
||||||
|
self.trees = trees
|
||||||
|
|
||||||
def get_body(self, root):
|
def get_body(self, root):
|
||||||
body = root.xpath('//h:body', namespaces=NAMESPACES)
|
body = root.xpath('//h:body', namespaces=NAMESPACES)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user