a
    [XhL                     @   sN  d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	 ddl
mZ dd	lmZmZmZ dd
lmZ ddlmZ ddlmZ ddlmZmZmZ ddlmZ ddlmZmZ d9ddZdd Z dd Z!edd Z"dd Z#dd Z$dd  Z%d!d" Z&d#d$ Z'd%d& Z(d'd( Z)d)d* Z*d+d, Z+d-d. Z,d/d0 Z-d1d2 Z.d3d4 Z/d5d6 Z0d7d8 Z1dS ):zCPage breaking and layout for block-level and block-container boxes.    )inf   )boxes   )AbsolutePlaceholderabsolute_layout)columns_layout)flex_layout)avoid_collisionsfloat_layoutget_clearance)grid_layout)iter_line_boxes)handle_min_max_width)
percentageresolve_percentagesresolve_position_percentages)block_replaced_box_layout)table_layouttable_wrapper_widthTNFc                 C   s  |du rg n|}|du rg n|}|du r,g n|}t |tjst|| |jdkrVd|_|jdkrfd|_| jdkr|r|jp||}|r|jd dkrd|_n|jd dkr| j	sd|_t
g ||j}t| |||_|jdur|j| |j }||j |_g }t| |||||||||	|
S )z Lay out the block-level ``box``.Nautor   r   margin_breakdiscard)
isinstancer   TableBoxr   
margin_topmargin_bottomcurrent_pageis_for_root_elementstyleforced_breakcollapse_marginr   	clearance
position_yblock_level_layout_switch)contextboxbottom_space
skip_stackcontaining_blockpage_is_emptyabsolute_boxesfixed_boxesadjoining_marginsr   	max_linesZcollapse_with_pagecollapsed_marginZtop_border_edge r0   \/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/site-packages/weasyprint/layout/block.pyblock_level_layout   s<    





r2   c                 C   s   t |tjr$t| |||||||}nt |tjrLt| |||||||||	|
S t |tjrft| ||}n`t |tjrt	| ||||||||		}n:t |tj
rt| |||||||}ntdt|j dg |dR S )z;Call the layout function corresponding to the ``box`` type.zLayout for z not handled yetN)r   r   r   r   BlockBoxblock_box_layoutZBlockReplacedBoxr   ZFlexBoxr	   ZGridBoxr   	TypeErrortype__name__)r%   r&   r'   r(   r)   r*   r+   r,   r-   r   r.   resultr0   r0   r1   r$   A   s2    



r$   c                 C   s>  |j d dks|j d dkrt| ||||||||	}|d }|du r|d }|j|j |j }|rt| |g|| ||7 }t| ||||||||	}g |dR S |jrt| ||j|j	f t
|| t| ||||||||	|

}|d  }r|js|jr|S |js| r:t| ||dd\}}}|||j ||j  |S )	zLay out the block ``box``.Zcolumn_widthr   Zcolumn_countr   Nr   F)outer)r   r   r   padding_bottomborder_bottom_widthremove_placeholdersis_table_wrapperr   widthheightblock_level_widthblock_container_layout	is_columnis_flex_itemestablishes_formatting_contextr
   	translate
position_xr#   )r%   r&   r'   r(   r)   r*   r+   r,   r-   r   r.   r8   	resume_atnew_boxZcolumns_bottom_spacerF   r#   _r0   r0   r1   r4   ^   sX    





r4   c                 C   s  t |tjr|j}|jd }n|d }d}| j}| j}| j}| j}| j	}| j
}	| j}
|| | |	 }| jdkr||
 }|dkr||7 }|dkr||7 }||kr|dkrd }| _|dkrd }| _|
dkr|dkr|dkr|dkr| js|  j|| |
 | | 7  _|
dkrX|dkr.d }| _|dkrBd }| _||| |   }
| _|| |
 }||  kr|dkrn n|d | _|d | _n>|dkr|dkr|| | _n|dkr|dkr|| | _dS )zSet the ``box`` width.	directionr   ltrr   rtlr   N)r   r   ZBoxr>   r   Zmargin_leftZmargin_rightZpadding_leftZpadding_rightZborder_left_widthZborder_right_widthrB   rF   )r&   r)   Zcb_widthrJ   Zmargin_lZmargin_rZ	padding_lZ	padding_rZborder_lZborder_rr>   Zpaddings_plus_borderstotalZ
margin_sumr0   r0   r1   r@      sZ    










r@   c                 C   s   | j d dkrt| | | jdkrL| jdkrL| j d dkrB| j}qv| j }n*| jdkr^| j}n| jdkrr| j }nd}| jdkr| j}n| jdkr| j }nd}| || t| tj	tj
fr| jD ]}t|| qdS )z5Translate the ``box`` if it is relatively positioned.positionrelativer   rJ   rK   r   N)r   r   leftrighttopZbottomrE   r   r   Z	InlineBoxLineBoxchildrenrelative_positioning)r&   r)   Ztranslate_xZtranslate_ychildr0   r0   r1   rU      s(    








rU   c
              	   C   sn  d}
d }d }d }| j t|7  _ | rlt| }}||_|| |jd dkr`|| n
|| n| r0t| |||||	d d\}}| 	|	|j |j
 }|r| p| p| }|r||_|| n\t|}t||}|d i}d }d}
|rbt|| rbt| |||}|rb|\|d d < }d }n2| rb|jd d }| j}| j| | | |
|||fS )NFrN   absoluter(   Tr   )r#   r!   is_absolutely_positionedr   indexappendr   Z
is_floatedr   overflows_pager?   is_monolithicfind_last_in_flow_childblock_level_page_breakavoid_page_breakfind_earlier_page_breakZ
is_runningr   Zrunning_elements)r%   r&   rZ   rV   new_childrenr*   r+   r,   r-   r'   stoprG   	new_childout_of_flow_resume_atplaceholderZpage_overflowZ	add_childlast_in_flow_child
page_breakr8   Zrunning_namepager0   r0   r1   _out_of_flow_layout   sZ    





rj   c                 C   s   t ||jd  }|dk r8|s8t| |j|	|
 dd|fS |jd d }|rh|D ]}|d8 }|dkrN qhqN||kr|st| |j|	|
 dd|fS |r||kr|| d  D ]}t| |j|	|
 q|| d = t| |j|	|
 dd||ifS )Norphansr   TFwidowsr   )lenr   r<   rT   )r%   r&   linerb   lines_iteratorr*   rZ   r(   rG   r+   r,   Zover_orphansneededrI   rV   r0   r0   r1   _break_line-  s*    


rq   c                    sd  d }}d }g }t |jdks&J d|r6|
t|7 }
|}t ||
|	|||||	}t|D ]\}\}}|d ur|dkr|jd |d _ q@|d8 }||_|j|j	 }||d u O }|r|j
|j }nd}|s| o |	|| }|rt ||||||||||\}}} q@n4|rH |	|rH||j8 }|d|j  d|_ jr,d} fdd| D }|D ]} |}|| |p jp |	|| }|rn | |s|sn|jd	 d
krt ||||||||||\}}}d} q n|jd	 dkrnd }} q qn|r, q@|| |}
|}qZ|rT||d ji}||||
||fS )NFr   z$line box with siblings before layoutr   block_ellipsisc                 3   s    | ]}|j  jv r|j V  qd S N)footnote	footnotes).0Z
descendantr%   r0   r1   	<genexpr>  s   z"_linebox_layout.<locals>.<genexpr>Zfootnote_policyrn   Tblock)rm   rT   r!   r   	enumerater   rr   rG   r#   r?   r;   r:   r\   rq   r   rE   rv   ZdescendantsZlayout_footnoter[   Zreported_footnotesZreport_footnote)r%   r&   rZ   rV   rb   r*   r+   r,   r-   r'   r#   r(   first_letter_styledraw_bottom_decorationr.   abortrc   rG   new_footnotesnew_containing_blockro   irn   new_position_yoffset_yoverflowZbreak_lineboxrv   ru   r0   rx   r1   _linebox_layoutM  s    













r   c           ,      C   s|  d }}t |}|d urrt||}t||}|s:t|| rv| d }||d}|d i}d}||||
||||fS nd}|}|jszt|| |d u rz|rzt|}|j}|dkrd}n:| j	dkr|r|j
d dkrd}n|j
d dkr| jsd}tg ||}|| }|D ]}|j|d	 qt| ||}|d urz|D ]}|j| d	 q<t|}| j||j 7  _g }| }
|r|jrt|}| j|7  _|
|7 }
g }nft|tjs|j
d
 dkrd} nt|j
d
 |j} ||  t||  }!| j|!7  _|
|!7 }
g }|o*tdd |D  }"t|dd s@||_t| ||	|||"|||||\}#}}}$}%}|#d ur|%sP|# |#j }&|# |#  }'| |	|&}(| |	|'})|"p|  }*|*r|(rt| |#g|| d }#np|*rL|)rLt| |#g|| |	|#j |#j! 7 }	t| ||	|||"|||||\}#}}}$}%}|#rP|# |#  }
n|'}
|$}|#rf||#j" |#r|#j#r|# |#  }
d }|#d u rBt$|| rt%| |||}+|+r|+\}}d}||||
||||fS |sd}||||
||||fS t&dd |D rt| ||| g }|r*|d i}d}nd}||||
||||fS ||#_'||# |d urh||i}d}||||
||||fS )NFr   breakri   Tr   r   r   r   )Zdyr   c                 s   s   | ]}t |ts|V  qd S rt   )r   r   rw   rV   r0   r0   r1   ry     s   
z"_in_flow_layout.<locals>.<genexpr>r|   c                 s   s   | ]}|  V  qd S rt   )rY   r   r0   r0   r1   ry   Y      )(r^   r_   block_level_page_nameforce_page_breakpage_valuesr=   r   r!   r   r   r   r    rE   r   r#   content_box_yr   r   r3   r   r>   r[   anygetattrr|   r2   r?   Zborder_box_yborder_heightr\   r]   r<   r:   r;   r   r"   r`   ra   allrZ   ),r%   r&   rZ   rV   rb   r*   r+   r,   r-   r'   r#   r(   r|   r}   collapsing_with_childrenr   	next_pager.   r~   rc   rg   rh   Z	page_namerG   r   Zold_collapsed_marginZchild_margin_topZnew_collapsed_marginZcollapsed_margin_differenceZprevious_new_childr"   r/   r   r   Zpage_is_empty_with_no_childrenrd   Znext_adjoining_marginscollapsing_throughZnew_content_position_yr   Zcontent_page_overflowZborder_page_overflowZ	can_breakr8   r0   r0   r1   _in_flow_layout  s0   




















r   c
           -      C   s  t |tjsJ | r |   |du }
|j|
 dd ||jd dkO }|pZ|jd dk}|du rhg }|r||j|j |j	 7 }|
|j |}|jp|jp|jp|jp| p|j }|r|j}n$| jt||j 7  _g }| }| }|jd d	krg }g }d
dd}g }i }d}|jd dkrFt|jd |	pBt}	|
r^d}t|dd}n| \\}}d}t|j|d |pddD ]\}}||_||_g }| sd}t| |||||||||
\}}}}|r|||f||< nt |tjrFt| ||||||||||||||	\}}}}}}	||du O }g }||7 }nt | |||||||||||||||||	\}}}}}}}}d}d||	fvr|}	|	dkrd}||jd k} | s|}!|!r|!d } t | tjr|jd | _!nt | tj"r| j}!qqq|r`|# d }"t$| |j|d || |D ]}#| %|# q4ddd
|"dg d|	f  S |r|j&dkr| '|j|(  |rd}g } qqd}|du}$|jd dkrd}|$rt)|jd | r|st$| g ||j|d || ddd
ddg d|	fS | D ]\}%}&|&| j*|%< q|rL| jt||j 7  _t+|}d}'|du rt|}(|j&dv rt,| ||(du rt-dd |j.|j|j|j|jfD rd}'n||(7 }g }n|j&dkrg }|js|js| s|js|j/r|t|7 }g }|$r<|r<|d } t | tjr<|jd | _!|0|})|)j|
 |$oX| d |)j&dkr| j1r|)jd dkrt2dd | j1D }*t2|*|}||)  |)_&|)jd d	kr|D ]}+t3| |+|)||dd q|)jD ]}t4||)j5|)j&f q|) r| 6|) |s|$s8t2t|)j&|)j7|)j.|)_&nf|t kr|)j8s| j9| |)j |): |)j&  },|,|)j&kr|,|)_&|r|) j&|j|j |j	 7  _&|d du r|)# d |d< |)||||'|	fS )zSet the ``box`` height.NF)startendcontinuer   Zbox_decoration_breakclonerN   rO   r   r   r.   noner   r|   )r   Trs   rr   r   break_inside)r   r   c                 s   s   | ]}|d kV  qdS r   Nr0   )rw   valuer0   r0   r1   ry     r   z)block_container_layout.<locals>.<genexpr>r   Zvisiblec                 s   s   | ]}|j |  V  qd S rt   )r#   margin_height)rw   Z	float_boxr0   r0   r1   ry   >  s   rX   ri   r   );r   r   ZBlockContainerBoxrD   Zcreate_block_formatting_contextZremove_decorationr   r:   r;   r   r[   r   Zborder_top_widthZpadding_toprC   Zis_grid_itemr   r#   r!   r   Zcontent_box_xminr   r   itemsr{   rT   rF   is_in_normal_flowrj   rS   r   r   rr   	ParentBoxr   r<   unlayout_footnoter?   Z	overflowsr   r`   broken_out_of_flowr^   r   r   Z
min_heightr=   copy_with_childrenZexcluded_shapesmaxr   rU   r>   Zfinish_block_formatting_contextZ
max_heightrB   Zpage_bottomr   )-r%   r&   r'   r(   r*   r+   r,   r-   r   r.   Zis_startr}   Zthis_box_adjoining_marginsr   r#   rF   rb   r   Zall_footnotesr   rg   skipr|   rZ   rV   r   r~   rc   rG   rd   re   Znew_max_linesZ
last_childrT   ri   ru   Zbox_is_fragmentedkeyr   r   r/   rH   Zmax_float_position_yZabsolute_boxZnew_box_heightr0   r0   r1   rA   x  s   
&















rA   c                 C   s<   dg}| |  dd |D }dd |D }t|t| S )zCGet the amount of collapsed margin for a list of adjoining margins.r   c                 s   s   | ]}|d kr|V  qdS r   r0   rw   mr0   r0   r1   ry   o  r   z"collapse_margin.<locals>.<genexpr>c                 s   s   | ]}|d kr|V  qdS r   r0   r   r0   r0   r1   ry   p  r   )extendr   r   )r-   ZmarginsZ	positivesZ	negativesr0   r0   r1   r!   k  s
    
r!   c                 C   s   g }t jt jt jf}| }t||rF||jd  |js:qF|jd }q|  |}t||r||jd  |jstq|jd }qRd}|D ]}|dv s||fdv r|}q|S )a  Get the correct page break value between siblings.

    Return the value of ``page-break-before`` or ``page-break-after`` that
    "wins" for boxes that meet at the margin between two sibling boxes.

    For boxes before the margin, the 'page-break-after' value is considered;
    for boxes after the margin the 'page-break-before' value is considered.

    * 'avoid' takes priority over 'auto'
    * 'page' takes priority over 'avoid' or 'auto'
    * 'left' or 'right' take priority over 'always', 'avoid' or 'auto'
    * Among 'left' and 'right', later values in the tree take priority.

    See https://drafts.csswg.org/css-page-3/#allowed-pg-brk

    Zbreak_afterrs   Zbreak_beforer   r   )rP   rQ   rectoverso))ri   r   )ri   avoid)ri   
avoid-page)ri   avoid-column)columnr   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )	r   ZBlockLevelBoxTableRowGroupBoxZTableRowBoxr   r[   r   rT   reverse)sibling_beforesibling_aftervaluesZblock_parallel_box_typesr&   r8   r   r0   r0   r1   r_   t  s*    

r_   c                 C   s(   |   d }|  d }||kr$|S dS )zBReturn the next page name when siblings don't have the same names.r   r   N)r   )r   r   Zbefore_pageZ
after_pager0   r0   r1   r     s    r   c                 C   s  |rt |d tjr|d jd }|d jd }t|| }||k rHdS |d| }d|d ji}t| ||d || ||fS d}	t|D ]:\}}
t |
tjr|
j	s|
j
rqn|
jrq|
 rt|
|	}|	durt|| s|d7 }|d| }|| jdi} q|
}	|
 rt|
jd | stjtjtjf}t |
|rt| |
j||}|r|\}}|
|}g |d| |}t |
tjr||d D ]}|j
r|| q|j|i}|d7 } qqdS t| ||d || ||fS )aq  Find the last possible page break in ``children``.

    Because of a `page-break-before: avoid` or a `page-break-after: avoid` we
    need to find an earlier page break opportunity inside `children`.

    Absolute or fixed placeholders removed from children should also be
    removed from `absolute_boxes` or `fixed_boxes`.

    Return (new_children, resume_at).

    r   rk   rl   Nrs   r   r   )r   r   rS   r   rm   rG   r<   reversed_enumerater   Z	is_headerZ	is_footerrB   r   r_   r`   rZ   r3   r   ra   rT   r   r[   )r%   rT   r+   r,   rk   rl   rZ   rb   rG   Zprevious_in_flowrV   rh   Zbreakable_box_typesr8   Znew_grand_childrenrd   Z
next_childr0   r0   r1   ra     sn    






ra   c                 C   s"   t | D ]}| r|  S qdS )z=Find and return the last in-flow child of given ``children``.N)reversedr   )rT   rV   r0   r0   r1   r^     s    r^   c                 C   s   t ttt| t| S )zBLike reversed(list(enumerate(seq))) without copying the whole seq.)zipr   rangerm   )seqr0   r0   r1   r   	  s    r   c                 C   s   |D ]}t |tjr$t| |j|| |jd dkrF||v rF|| n |jd dkrf||v rf|| |jrx| |j || j	v r| j	
| qdS )zRemove placeholders from absolute and fixed lists.

    For boxes that have been removed in find_earlier_page_break(), remove the
    matching placeholders in absolute_boxes and fixed_boxes.

    Also takes care of removed footnotes and floats.

    rN   rW   fixedN)r   r   r   r<   rT   r   removeru   r   r   pop)r%   Zbox_listr+   r,   r&   r0   r0   r1   r<     s    	


r<   c                 C   s   |j r| dv S | dv S )z$Test whether we should avoid breaks.)r   r   r   )r   r   Z	in_columnrh   r%   r0   r0   r1   r`   %  s    r`   c                 C   s   |j r| dv S | dv S )z$Test whether we should force breaks.)ri   rP   rQ   r   r   r   )ri   rP   rQ   r   r   r   r   r0   r0   r1   r   ,  s    r   )TNNNFN)2__doc__mathr   Zformatting_structurer   rW   r   r   r   r   Zflexr	   floatr
   r   r   Zgridr   inliner   Zmin_maxr   percentr   r   r   Zreplacedr   tabler   r   r2   r$   r4   r@   rU   rj   rq   r   r   rA   r!   r_   r   ra   r^   r   r<   r`   r   r0   r0   r0   r1   <module>   sJ      
//
>B j B t	8N