mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
EPUB/AZW3 Output: When splitting the output html on page breaks, handle page-break-after rules correctly, the pre split point html should contain the full element
This commit is contained in:
parent
03dcd9895a
commit
6d973fa811
@ -310,6 +310,8 @@ class FlowSplitter(object):
|
|||||||
|
|
||||||
|
|
||||||
def nix_element(elem, top=True):
|
def nix_element(elem, top=True):
|
||||||
|
# Remove elem unless top is False in which case replace elem by its
|
||||||
|
# children
|
||||||
parent = elem.getparent()
|
parent = elem.getparent()
|
||||||
if top:
|
if top:
|
||||||
parent.remove(elem)
|
parent.remove(elem)
|
||||||
@ -319,27 +321,38 @@ class FlowSplitter(object):
|
|||||||
|
|
||||||
# Tree 1
|
# Tree 1
|
||||||
hit_split_point = False
|
hit_split_point = False
|
||||||
for elem in list(body.iterdescendants()):
|
keep_descendants = False
|
||||||
|
split_point_descendants = frozenset(split_point.iterdescendants())
|
||||||
|
for elem in tuple(body.iterdescendants()):
|
||||||
if elem is split_point:
|
if elem is split_point:
|
||||||
hit_split_point = True
|
hit_split_point = True
|
||||||
if before:
|
if before:
|
||||||
nix_element(elem)
|
nix_element(elem)
|
||||||
|
else:
|
||||||
|
# We want to keep the descendants of the split point in
|
||||||
|
# Tree 1
|
||||||
|
keep_descendants = True
|
||||||
|
|
||||||
continue
|
continue
|
||||||
if hit_split_point:
|
if hit_split_point:
|
||||||
|
if keep_descendants:
|
||||||
|
if elem in split_point_descendants:
|
||||||
|
# elem is a descendant keep it
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
# We are out of split_point, so prevent further set
|
||||||
|
# lookups of split_point_descendants
|
||||||
|
keep_descendants = False
|
||||||
nix_element(elem)
|
nix_element(elem)
|
||||||
|
|
||||||
|
|
||||||
# Tree 2
|
# Tree 2
|
||||||
hit_split_point = False
|
for elem in tuple(body2.iterdescendants()):
|
||||||
for elem in list(body2.iterdescendants()):
|
|
||||||
if elem is split_point2:
|
if elem is split_point2:
|
||||||
hit_split_point = True
|
|
||||||
if not before:
|
if not before:
|
||||||
|
nix_element(elem)
|
||||||
|
break
|
||||||
nix_element(elem, top=False)
|
nix_element(elem, top=False)
|
||||||
continue
|
|
||||||
if not hit_split_point:
|
|
||||||
nix_element(elem, top=False)
|
|
||||||
body2.text = '\n'
|
body2.text = '\n'
|
||||||
|
|
||||||
return tree, tree2
|
return tree, tree2
|
||||||
|
Loading…
x
Reference in New Issue
Block a user