mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Conversion: Ignore invalid chapter detection and level n ToC expressions instead of erroring out
This commit is contained in:
parent
9180cf7d9a
commit
2aa4f7c70b
@ -82,10 +82,17 @@ class DetectStructure(object):
|
||||
|
||||
def detect_chapters(self):
|
||||
self.detected_chapters = []
|
||||
|
||||
def find_matches(expr, doc):
|
||||
try:
|
||||
return XPath(expr)(doc)
|
||||
except:
|
||||
self.log.warn('Invalid chapter expression, ignoring: %s'%expr)
|
||||
return []
|
||||
|
||||
if self.opts.chapter:
|
||||
chapter_xpath = XPath(self.opts.chapter)
|
||||
for item in self.oeb.spine:
|
||||
for x in chapter_xpath(item.data):
|
||||
for x in find_matches(self.opts.chapter, item.data):
|
||||
self.detected_chapters.append((item, x))
|
||||
|
||||
chapter_mark = self.opts.chapter_mark
|
||||
@ -164,11 +171,19 @@ class DetectStructure(object):
|
||||
added = OrderedDict()
|
||||
added2 = OrderedDict()
|
||||
counter = 1
|
||||
|
||||
def find_matches(expr, doc):
|
||||
try:
|
||||
return XPath(expr)(doc)
|
||||
except:
|
||||
self.log.warn('Invalid ToC expression, ignoring: %s'%expr)
|
||||
return []
|
||||
|
||||
for document in self.oeb.spine:
|
||||
previous_level1 = list(added.itervalues())[-1] if added else None
|
||||
previous_level2 = list(added2.itervalues())[-1] if added2 else None
|
||||
|
||||
for elem in XPath(self.opts.level1_toc)(document.data):
|
||||
for elem in find_matches(self.opts.level1_toc, document.data):
|
||||
text, _href = self.elem_to_link(document, elem, counter)
|
||||
counter += 1
|
||||
if text:
|
||||
@ -178,7 +193,7 @@ class DetectStructure(object):
|
||||
#node.add(_('Top'), _href)
|
||||
|
||||
if self.opts.level2_toc is not None and added:
|
||||
for elem in XPath(self.opts.level2_toc)(document.data):
|
||||
for elem in find_matches(self.opts.level2_toc, document.data):
|
||||
level1 = None
|
||||
for item in document.data.iterdescendants():
|
||||
if item in added:
|
||||
@ -196,7 +211,8 @@ class DetectStructure(object):
|
||||
break
|
||||
|
||||
if self.opts.level3_toc is not None and added2:
|
||||
for elem in XPath(self.opts.level3_toc)(document.data):
|
||||
for elem in find_matches(self.opts.level3_toc,
|
||||
document.data):
|
||||
level2 = None
|
||||
for item in document.data.iterdescendants():
|
||||
if item in added2:
|
||||
|
Loading…
x
Reference in New Issue
Block a user