Fix #1747 (Bug in TOC epub for level 2)

This commit is contained in:
Kovid Goyal 2009-02-01 21:10:03 -08:00
parent e6fbdb4a43
commit 8a2f2f2510

View File

@ -594,15 +594,21 @@ class Processor(Parser):
'''
Populate the Table of Contents from detected chapters and links.
'''
class Adder(object):
def add_item(href, fragment, text, target, type='link'):
def __init__(self, toc):
self.next_play_order = max([x.play_order for x in toc.flat()])
def __call__(self, href, fragment, text, target, type='link'):
for entry in toc.flat():
if entry.href == href and entry.fragment == fragment:
return entry
if len(text) > 50:
text = text[:50] + u'\u2026'
return target.add_item(href, fragment, text, type=type)
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]
href = 'content/'+name
@ -629,13 +635,15 @@ class Processor(Parser):
if self.opts.level1_toc is not None:
level1 = self.opts.level1_toc(self.root)
level1_order = []
if level1:
added = {}
for elem in level1:
text, _href, frag = elem_to_link(elem, href, counter)
counter += 1
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')
if self.opts.level2_toc is not None:
added2 = {}
@ -665,6 +673,15 @@ class Processor(Parser):
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:
return
# Add chapters to TOC