mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-31 14:33:54 -04:00
Upgrade the NCX page list as well
This commit is contained in:
parent
c9a8e46d1a
commit
7973f8798a
@ -43,6 +43,7 @@ class TOC(object):
|
|||||||
self.title = self.title.strip()
|
self.title = self.title.strip()
|
||||||
self.parent = None
|
self.parent = None
|
||||||
self.children = []
|
self.children = []
|
||||||
|
self.page_list = []
|
||||||
|
|
||||||
def add(self, title, dest, frag=None):
|
def add(self, title, dest, frag=None):
|
||||||
c = TOC(title, dest, frag)
|
c = TOC(title, dest, frag)
|
||||||
@ -162,6 +163,15 @@ def parse_ncx(container, ncx_name):
|
|||||||
if uid:
|
if uid:
|
||||||
toc_root.uid = unicode(uid)
|
toc_root.uid = unicode(uid)
|
||||||
break
|
break
|
||||||
|
for pl in root.xpath('//*[calibre:lower-case(local-name()) = "pagelist"]'):
|
||||||
|
for pt in pl.xpath('descendant::*[calibre:lower-case(local-name()) = "pagetarget"]'):
|
||||||
|
pagenum = pt.get('value')
|
||||||
|
if pagenum:
|
||||||
|
href = pt.xpath('descendant::*[calibre:lower-case(local-name()) = "content"]/@src')
|
||||||
|
if href:
|
||||||
|
dest = container.href_to_name(href[0], base=ncx_name)
|
||||||
|
frag = urlparse(href[0]).fragment or None
|
||||||
|
toc_root.page_list.append({'dest': dest, 'pagenum': pagenum, 'frag': frag})
|
||||||
return toc_root
|
return toc_root
|
||||||
|
|
||||||
|
|
||||||
@ -698,6 +708,17 @@ def commit_nav_toc(container, toc, lang=None, landmarks=None):
|
|||||||
collapse_li(nav)
|
collapse_li(nav)
|
||||||
nav.tail = '\n'
|
nav.tail = '\n'
|
||||||
|
|
||||||
|
def create_li(ol, entry):
|
||||||
|
li = ol.makeelement(XHTML('li'))
|
||||||
|
ol.append(li)
|
||||||
|
a = li.makeelement(XHTML('a'))
|
||||||
|
li.append(a)
|
||||||
|
href = container.name_to_href(entry['dest'], tocname)
|
||||||
|
if entry['frag']:
|
||||||
|
href += '#' + entry['frag']
|
||||||
|
a.set('href', href)
|
||||||
|
return a
|
||||||
|
|
||||||
if landmarks is not None:
|
if landmarks is not None:
|
||||||
nav = ensure_single_nav_of_type(root, 'landmarks')
|
nav = ensure_single_nav_of_type(root, 'landmarks')
|
||||||
nav.set('hidden', '')
|
nav.set('hidden', '')
|
||||||
@ -705,18 +726,23 @@ def commit_nav_toc(container, toc, lang=None, landmarks=None):
|
|||||||
nav.append(ol)
|
nav.append(ol)
|
||||||
for entry in landmarks:
|
for entry in landmarks:
|
||||||
if entry['type'] and container.has_name(entry['dest']) and container.mime_map[entry['dest']] in OEB_DOCS:
|
if entry['type'] and container.has_name(entry['dest']) and container.mime_map[entry['dest']] in OEB_DOCS:
|
||||||
li = ol.makeelement(XHTML('li'))
|
a = create_li(ol, entry)
|
||||||
ol.append(li)
|
|
||||||
a = li.makeelement(XHTML('a'))
|
|
||||||
li.append(a)
|
|
||||||
a.set('{%s}type' % EPUB_NS, entry['type'])
|
a.set('{%s}type' % EPUB_NS, entry['type'])
|
||||||
href = container.name_to_href(entry['dest'], tocname)
|
|
||||||
if entry['frag']:
|
|
||||||
href += '#' + entry['frag']
|
|
||||||
a.set('href', href)
|
|
||||||
a.text = entry['title'] or None
|
a.text = entry['title'] or None
|
||||||
pretty_xml_tree(nav)
|
pretty_xml_tree(nav)
|
||||||
collapse_li(nav)
|
collapse_li(nav)
|
||||||
|
|
||||||
|
if toc.page_list:
|
||||||
|
nav = ensure_single_nav_of_type(root, 'page-list')
|
||||||
|
nav.set('hidden', '')
|
||||||
|
ol = nav.makeelement(XHTML('ol'))
|
||||||
|
nav.append(ol)
|
||||||
|
for entry in toc.page_list:
|
||||||
|
if container.has_name(entry['dest']) and container.mime_map[entry['dest']] in OEB_DOCS:
|
||||||
|
a = create_li(ol, entry)
|
||||||
|
a.text = str(entry['pagenum'])
|
||||||
|
pretty_xml_tree(nav)
|
||||||
|
collapse_li(nav)
|
||||||
container.replace(tocname, root)
|
container.replace(tocname, root)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user