From 5e25ebd6f16151ed8435eddb2a6dc99a7f38f9a0 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 6 Oct 2019 07:21:40 +0530 Subject: [PATCH] Viewer: Fix text after comments not being rendered. Fixes #1846875 [text after HTML comment in epub is not displayed](https://bugs.launchpad.net/calibre/+bug/1846875) --- src/calibre/srv/render_book.py | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/calibre/srv/render_book.py b/src/calibre/srv/render_book.py index a5e93896d3..b0dc820880 100644 --- a/src/calibre/srv/render_book.py +++ b/src/calibre/srv/render_book.py @@ -590,13 +590,25 @@ def html_as_dict(root): stack = [(root, tree)] while stack: elem, node = stack.pop() - for child in elem.iterchildren('*'): - cnode = serialize_elem(child, nsmap) - if cnode is not None: - tags.append(cnode) - child_tree_node = [len(tags)-1] - node.append(child_tree_node) - stack.append((child, child_tree_node)) + prev_child_node = None + for child in elem.iterchildren(): + tag = getattr(child, 'tag', None) + if tag is None or callable(tag): + tail = getattr(child, 'tail', None) + if tail: + if prev_child_node is None: + parent_node = tags[node[-1]] + parent_node['x'] = parent_node.get('x', '') + tail + else: + prev_child_node['l'] = prev_child_node.get('l', '') + tail + else: + cnode = serialize_elem(child, nsmap) + if cnode is not None: + tags.append(cnode) + child_tree_node = [len(tags)-1] + node.append(child_tree_node) + stack.append((child, child_tree_node)) + prev_child_node = cnode ns_map = [ns for ns, nsnum in sorted(iteritems(nsmap), key=lambda x: x[1])] return {'ns_map':ns_map, 'tag_map':tags, 'tree':tree}