mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Fix #1747 (Bug in TOC epub for level 2)
This commit is contained in:
parent
e6fbdb4a43
commit
8a2f2f2510
@ -594,15 +594,21 @@ class Processor(Parser):
|
|||||||
'''
|
'''
|
||||||
Populate the Table of Contents from detected chapters and links.
|
Populate the Table of Contents from detected chapters and links.
|
||||||
'''
|
'''
|
||||||
|
class Adder(object):
|
||||||
def add_item(href, fragment, text, target, type='link'):
|
|
||||||
for entry in toc.flat():
|
def __init__(self, toc):
|
||||||
if entry.href == href and entry.fragment == fragment:
|
self.next_play_order = max([x.play_order for x in toc.flat()])
|
||||||
return entry
|
|
||||||
if len(text) > 50:
|
def __call__(self, href, fragment, text, target, type='link'):
|
||||||
text = text[:50] + u'\u2026'
|
for entry in toc.flat():
|
||||||
return target.add_item(href, fragment, text, type=type)
|
if entry.href == href and entry.fragment == fragment:
|
||||||
|
return entry
|
||||||
|
if len(text) > 50:
|
||||||
|
text = text[:50] + u'\u2026'
|
||||||
|
self.next_play_order += 1
|
||||||
|
return target.add_item(href, fragment, text, type=type,
|
||||||
|
play_order=self.next_play_order)
|
||||||
|
add_item = Adder(toc)
|
||||||
name = self.htmlfile_map[self.htmlfile.path]
|
name = self.htmlfile_map[self.htmlfile.path]
|
||||||
href = 'content/'+name
|
href = 'content/'+name
|
||||||
|
|
||||||
@ -629,13 +635,15 @@ class Processor(Parser):
|
|||||||
|
|
||||||
if self.opts.level1_toc is not None:
|
if self.opts.level1_toc is not None:
|
||||||
level1 = self.opts.level1_toc(self.root)
|
level1 = self.opts.level1_toc(self.root)
|
||||||
|
level1_order = []
|
||||||
if level1:
|
if level1:
|
||||||
added = {}
|
added = {}
|
||||||
for elem in level1:
|
for elem in level1:
|
||||||
text, _href, frag = elem_to_link(elem, href, counter)
|
text, _href, frag = elem_to_link(elem, href, counter)
|
||||||
counter += 1
|
counter += 1
|
||||||
if text:
|
if text:
|
||||||
added[elem] = add_item(_href, frag, text, toc, type='chapter')
|
level1_order.append(add_item(_href, frag, text, toc, type='chapter'))
|
||||||
|
added[elem] = level1_order[-1]
|
||||||
add_item(_href, frag, 'Top', added[elem], type='chapter')
|
add_item(_href, frag, 'Top', added[elem], type='chapter')
|
||||||
if self.opts.level2_toc is not None:
|
if self.opts.level2_toc is not None:
|
||||||
added2 = {}
|
added2 = {}
|
||||||
@ -664,6 +672,15 @@ class Processor(Parser):
|
|||||||
if text:
|
if text:
|
||||||
add_item(_href, frag, text, level2, type='chapter')
|
add_item(_href, frag, text, level2, type='chapter')
|
||||||
|
|
||||||
|
|
||||||
|
if level1_order: # Fix play order
|
||||||
|
next_play_order = level1_order[0].play_order
|
||||||
|
for x in level1_order:
|
||||||
|
for y in x.flat():
|
||||||
|
y.play_order = next_play_order
|
||||||
|
next_play_order += 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if len(toc) > 0:
|
if len(toc) > 0:
|
||||||
return
|
return
|
||||||
|
Loading…
x
Reference in New Issue
Block a user