mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Fix #5254 (PDB Output)
This commit is contained in:
commit
64f20d1a22
@ -104,7 +104,7 @@ class Reader132(FormatReader):
|
||||
|
||||
def extract_content(self, output_dir):
|
||||
from calibre.ebooks.pml.pmlconverter import footnote_to_html, sidebar_to_html
|
||||
from calibre.ebooks.pml.pmlconverter import pml_to_html
|
||||
from calibre.ebooks.pml.pmlconverter import PML_HTMLizer
|
||||
|
||||
output_dir = os.path.abspath(output_dir)
|
||||
|
||||
@ -120,7 +120,9 @@ class Reader132(FormatReader):
|
||||
for i in range(1, self.header_record.num_text_pages + 1):
|
||||
self.log.debug('Extracting text page %i' % i)
|
||||
pml += self.get_text_page(i)
|
||||
html += pml_to_html(pml)
|
||||
hizer = PML_HTMLizer()
|
||||
html += hizer.parse_pml(pml, 'index.html')
|
||||
toc = hizer.get_toc()
|
||||
|
||||
if self.header_record.footnote_count > 0:
|
||||
html += '<br /><h1>%s</h1>' % _('Footnotes')
|
||||
@ -154,11 +156,11 @@ class Reader132(FormatReader):
|
||||
self.log.debug('Writing image %s to images/' % name)
|
||||
imgf.write(img)
|
||||
|
||||
opf_path = self.create_opf(output_dir, images)
|
||||
opf_path = self.create_opf(output_dir, images, toc)
|
||||
|
||||
return opf_path
|
||||
|
||||
def create_opf(self, output_dir, images):
|
||||
def create_opf(self, output_dir, images, toc):
|
||||
with CurrentDir(output_dir):
|
||||
if 'cover.png' in images:
|
||||
self.mi.cover = os.path.join('images', 'cover.png')
|
||||
@ -172,8 +174,10 @@ class Reader132(FormatReader):
|
||||
|
||||
opf.create_manifest(manifest)
|
||||
opf.create_spine(['index.html'])
|
||||
opf.set_toc(toc)
|
||||
with open('metadata.opf', 'wb') as opffile:
|
||||
opf.render(opffile)
|
||||
with open('toc.ncx', 'wb') as tocfile:
|
||||
opf.render(opffile, tocfile, 'toc.ncx')
|
||||
|
||||
return os.path.join(output_dir, 'metadata.opf')
|
||||
|
||||
|
@ -85,10 +85,11 @@ class PMLMLizer(object):
|
||||
# from the optional inline toc.
|
||||
self.toc = {}
|
||||
for item in oeb_book.toc:
|
||||
page, mid, id = item.href.partition('#')
|
||||
if not self.toc.get(page, None):
|
||||
self.toc[page] = {}
|
||||
self.toc[page][id] = item.title
|
||||
href, mid, id = item.href.partition('#')
|
||||
aid = self.get_anchor_id(href, id)
|
||||
if not self.toc.get(href, None):
|
||||
self.toc[href] = {}
|
||||
self.toc[href][id] = item.title
|
||||
|
||||
return self.pmlmlize_spine()
|
||||
|
||||
@ -97,9 +98,8 @@ class PMLMLizer(object):
|
||||
self.link_hrefs = {}
|
||||
output = [u'']
|
||||
output.append(self.get_cover_page())
|
||||
output.append(u'ghji87yhjko0Caliblre-toc-placeholder-for-insertion-later8ujko0987yjk')
|
||||
output.append(self.get_text())
|
||||
output = ''.join(output).replace(u'ghji87yhjko0Caliblre-toc-placeholder-for-insertion-later8ujko0987yjk', self.get_toc())
|
||||
output = ''.join(output)
|
||||
output = self.clean_text(output)
|
||||
return output
|
||||
|
||||
@ -118,22 +118,6 @@ class PMLMLizer(object):
|
||||
output += ''.join(self.dump_text(item.data.find(XHTML('body')), stylizer, item))
|
||||
return output
|
||||
|
||||
def get_toc(self):
|
||||
'''
|
||||
Generation of inline TOC
|
||||
'''
|
||||
|
||||
toc = []
|
||||
if self.opts.inline_toc:
|
||||
self.log.debug('Generating table of contents...')
|
||||
toc.append(u'\\X0%s\\X0\n\n' % _('Table of Contents:'))
|
||||
for item in self.oeb_book.toc:
|
||||
if item.href in self.link_hrefs.keys():
|
||||
toc.append('* \\q="#%s"%s\\q\n' % (self.link_hrefs[item.href], item.title))
|
||||
else:
|
||||
self.oeb_book.warn('Ignoring toc item: %s not found in document.' % item)
|
||||
return ''.join(toc)
|
||||
|
||||
def get_text(self):
|
||||
text = [u'']
|
||||
for item in self.oeb_book.spine:
|
||||
@ -146,11 +130,15 @@ class PMLMLizer(object):
|
||||
def add_page_anchor(self, page):
|
||||
return self.get_anchor(page, '')
|
||||
|
||||
def get_anchor(self, page, aid):
|
||||
aid = '%s#%s' % (page.href, aid)
|
||||
def get_anchor_id(self, href, aid):
|
||||
aid = '%s#%s' % (href, aid)
|
||||
if aid not in self.link_hrefs.keys():
|
||||
self.link_hrefs[aid] = 'calibre_link-%s' % len(self.link_hrefs.keys())
|
||||
aid = self.link_hrefs[aid]
|
||||
return aid
|
||||
|
||||
def get_anchor(self, page, aid):
|
||||
aid = self.get_anchor_id(page.href, aid)
|
||||
return u'\\Q="%s"' % aid
|
||||
|
||||
def remove_newlines(self, text):
|
||||
@ -232,10 +220,13 @@ class PMLMLizer(object):
|
||||
else:
|
||||
w += '="50%"'
|
||||
text.append(w)
|
||||
toc_name = elem.attrib.get('name', None)
|
||||
toc_id = elem.attrib.get('id', None)
|
||||
if toc_id and tag not in ('h1', 'h2','h3','h4','h5','h6',):
|
||||
if self.toc.get(page.href, None):
|
||||
toc_title = self.toc[page.href].get(toc_id, None)
|
||||
if (toc_id or toc_name) and tag not in ('h1', 'h2','h3','h4','h5','h6',):
|
||||
toc_page = page.href
|
||||
if self.toc.get(toc_page, None):
|
||||
for toc_x in (toc_name, toc_id):
|
||||
toc_title = self.toc[toc_page].get(toc_x, None)
|
||||
if toc_title:
|
||||
text.append('\\C0="%s"' % toc_title)
|
||||
|
||||
@ -266,8 +257,10 @@ class PMLMLizer(object):
|
||||
|
||||
# Anchor ids
|
||||
id_name = elem.get('id')
|
||||
if id_name:
|
||||
text.append(self.get_anchor(page, id_name))
|
||||
name_name = elem.get('name')
|
||||
for name_x in (id_name, name_name):
|
||||
if name_x:
|
||||
text.append(self.get_anchor(page, name_x))
|
||||
|
||||
# Processes style information
|
||||
for s in STYLES:
|
||||
|
Loading…
x
Reference in New Issue
Block a user