From c85a3167e03bd6da1f044d9ec8dc924cd052bbe8 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 25 Jan 2017 17:38:59 +0530 Subject: [PATCH] EPUB Output: Fix a duplicate id created in rare circumstances when splitting on page breaks. Fixes #1658744 [Duplicate ID error after converting from DOCX to EPUB](https://bugs.launchpad.net/calibre/+bug/1658744) --- src/calibre/ebooks/oeb/transforms/split.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/calibre/ebooks/oeb/transforms/split.py b/src/calibre/ebooks/oeb/transforms/split.py index 1a707484b3..004cb1ebe1 100644 --- a/src/calibre/ebooks/oeb/transforms/split.py +++ b/src/calibre/ebooks/oeb/transforms/split.py @@ -254,7 +254,7 @@ class FlowSplitter(object): self.trees[i:i+1] = [before_tree, after_tree] break - trees, ids = [], set([]) + trees, ids = [], set() for tree in self.trees: root = tree.getroot() if self.is_page_empty(root): @@ -267,10 +267,10 @@ class FlowSplitter(object): if ids: body = self.get_body(root) if body is not None: - for x in ids: - body.insert(0, body.makeelement(XHTML('div'), - id=x, style='height:0pt')) - ids = set([]) + existing_ids = frozenset(body.xpath('//*/@id')) + for x in ids - existing_ids: + body.insert(0, body.makeelement(XHTML('div'), id=x, style='height:0pt')) + ids = set() trees.append(tree) self.trees = trees