@@ -799,6 +799,8 @@ def set_page_type_computed_styles(page_type, html, style_for):
799799
800800
801801def _includes_resume_at (resume_at , page_group_resume_at ):
802+ if not page_group_resume_at :
803+ return True
802804 (page_child_index , page_child_resume_at ), = page_group_resume_at .items ()
803805 if resume_at is None or page_child_index not in resume_at :
804806 return False
@@ -807,7 +809,7 @@ def _includes_resume_at(resume_at, page_group_resume_at):
807809 return _includes_resume_at (resume_at [page_child_index ], page_child_resume_at )
808810
809811
810- def _update_page_groups (page_groups , resume_at , next_page , root_box ):
812+ def _update_page_groups (page_groups , resume_at , next_page , root_box , blank ):
811813 # https://www.w3.org/TR/css-gcpm-3/#document-sequence-selectors
812814
813815 # Remove or increment page groups.
@@ -819,35 +821,40 @@ def _update_page_groups(page_groups, resume_at, next_page, root_box):
819821 page_groups .pop (i - page_groups_length )
820822
821823 # Add page groups.
822- if next_page ['break' ] == 'any' or not next_page ['page' ]:
823- # We don’t have a forced page break or a named page.
824- return
825- if page_groups and page_groups [- 1 ][0 ] == next_page ['page' ]:
826- # We’re already in an element whose page name is the next page name.
827- return
824+ if not blank :
825+ if (resume_at and next_page ['break' ] == 'any' ) or not next_page ['page' ]:
826+ # We don’t have a forced page break or a named page.
827+ return next_page ['page' ]
828+ if page_groups and page_groups [- 1 ][0 ] == next_page ['page' ]:
829+ # We’re already in an element whose page name is the next page name.
830+ return next_page ['page' ]
828831
829832 # Find the box that has the named page. It is a first in-flow child of the
830833 # element corresponding to resume_at.
831834
832835 # Find element corrensponding to resume_at.
833- page_group_resume_at = copy .deepcopy (resume_at )
834- current_resume_at = page_group_resume_at
836+ current_resume_at = page_group_resume_at = copy .deepcopy (resume_at ) or {0 : None }
835837 current_element = root_box
836838 while True :
837839 child_index , child_resume_at = tuple (current_resume_at .items ())[- 1 ]
840+ parent_element = current_element
838841 current_element = current_element .children [child_index ]
839842 if child_resume_at is None :
840843 break
841844 current_resume_at = child_resume_at
842845
846+ if blank :
847+ # Page is blank, don’t create a new page group and return parent’s page name.
848+ return parent_element .style ['page' ]
849+
843850 # Find the descendant with named page.
844851 while True :
845852 if current_element .style ['page' ] == next_page ['page' ]:
846853 page_groups .append ([next_page ['page' ], 0 , page_group_resume_at ])
847- return
854+ return next_page [ 'page' ]
848855 if not isinstance (current_element , boxes .ParentBox ):
849856 # Shouldn’t happen.
850- return
857+ return next_page [ 'page' ]
851858 for i , child in enumerate (current_element .children ):
852859 if not child .is_in_normal_flow ():
853860 continue
@@ -858,7 +865,7 @@ def _update_page_groups(page_groups, resume_at, next_page, root_box):
858865 break
859866 else :
860867 # Shouldn’t happen.
861- return
868+ return next_page [ 'page' ]
862869
863870
864871def remake_page (index , page_groups , context , root_box , html ):
@@ -891,9 +898,8 @@ def remake_page(index, page_groups, context, root_box, html):
891898 (next_page_side == 'left' and right_page ) or
892899 (next_page_side == 'right' and not right_page ) or
893900 (context .reported_footnotes and resume_at is None ))
894- name = '' if blank else next_page ['page' ]
895901 side = 'right' if right_page else 'left'
896- _update_page_groups (page_groups , resume_at , next_page , root_box )
902+ name = _update_page_groups (page_groups , resume_at , next_page , root_box , blank )
897903 groups = tuple ((name , index ) for name , index , _ in page_groups )
898904 page_type = PageType (side , blank , name , index , groups )
899905 set_page_type_computed_styles (page_type , html , context .style_for )
0 commit comments