a
    QhL                     @   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   P/var/www/sistema_ama/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_layoutBlockReplacedBoxr   FlexBoxr	   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``.column_widthr   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.   r;   	resume_atnew_boxZcolumns_bottom_spacerK   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   BoxrC   r   margin_leftmargin_rightpadding_leftpadding_rightborder_left_widthborder_right_widthrG   rK   )r&   r)   cb_widthrO   Zmargin_lZmargin_rZ	padding_lZ	padding_rZborder_lZborder_rrC   Zpaddings_plus_borderstotalZ
margin_sumr0   r0   r1   rE      sZ    










rE   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   rO   rP   r   N)r   r   leftrighttopbottomrJ   r   r   	InlineBoxLineBoxchildrenrelative_positioning)r&   r)   translate_xtranslate_ychildr0   r0   r1   rd      s(    








rd   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 )NFr[   absoluter(   Tr   )r#   r!   is_absolutely_positionedr   indexappendr   
is_floatedr   overflows_pagerD   is_monolithicfind_last_in_flow_childblock_level_page_breakavoid_page_breakfind_earlier_page_break
is_runningr   running_elements)r%   r&   rk   rg   new_childrenr*   r+   r,   r-   r'   stoprL   	new_childout_of_flow_resume_atplaceholderZpage_overflowZ	add_childlast_in_flow_child
page_breakr;   Zrunning_namepager0   r0   r1   _out_of_flow_layout   sZ    





r~   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   rA   rc   )r%   r&   linerv   lines_iteratorr*   rk   r(   rL   r+   r,   Zover_orphansneededrN   rg   r0   r0   r1   _break_line-  s*    


r   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>footnote_policyr   Tblock)r   rc   r!   r   	enumerater   r   rL   r#   rD   r@   r?   rn   r   r   rJ   r   descendantslayout_footnoterl   reported_footnotesreport_footnote)r%   r&   rk   rg   rv   r*   r+   r,   r-   r'   r#   r(   first_letter_styledraw_bottom_decorationr.   abortrw   rL   new_footnotesnew_containing_blockr   ir   new_position_yoffset_yoverflowZbreak_lineboxr   r   r0   r   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   breakr}   Tr   r   r   r   )dyr   c                 s   s   | ]}t |ts|V  qd S r   )r   r   r   rg   r0   r0   r1   r     s   
z"_in_flow_layout.<locals>.<genexpr>r   c                 s   s   | ]}|  V  qd S r   )rj   r   r0   r0   r1   r   Y      )(rp   rq   block_level_page_nameforce_page_breakpage_valuesrB   r   r!   r   r   r   r    rJ   r   r#   content_box_yr   r   r3   r   rC   rl   anygetattrr   r2   rD   border_box_yborder_heightrn   ro   rA   r?   r@   r   r"   rr   rs   allrk   ),r%   r&   rk   rg   rv   r*   r+   r,   r-   r'   r#   r(   r   r   collapsing_with_childrenr   	next_pager.   r   rw   r{   r|   Z	page_namerL   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_childrenrx   Znext_adjoining_marginscollapsing_throughZnew_content_position_yr   Zcontent_page_overflowZborder_page_overflow	can_breakr;   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   box_decoration_breakcloner[   r\   r   r   r.   noner   r   )r   Tr   r   r   break_inside)r   r   c                 s   s   | ]}|d kV  qdS r   Nr0   )r   valuer0   r0   r1   r     r   z)block_container_layout.<locals>.<genexpr>r   visiblec                 s   s   | ]}|j |  V  qd S r   )r#   margin_height)r   Z	float_boxr0   r0   r1   r   >  s   ri   r}   r   );r   r   BlockContainerBoxrI   create_block_formatting_contextremove_decorationr   r?   r@   r   rl   r   border_top_widthpadding_toprH   is_grid_itemr   r#   r!   r   content_box_xminr   r   itemsr   rc   rK   is_in_normal_flowr~   rb   r   r   r   	ParentBoxr   rA   unlayout_footnoterD   	overflowsr   rr   broken_out_of_flowrp   r   r   
min_heightrB   copy_with_childrenexcluded_shapesmaxr   rd   rC   finish_block_formatting_context
max_heightrG   page_bottomr   )-r%   r&   r'   r(   r*   r+   r,   r-   r   r.   is_startr   Zthis_box_adjoining_marginsr   r#   rK   rv   r   Zall_footnotesr   r{   skipr   rk   rg   r   r   rw   rL   rx   ry   Znew_max_lines
last_childrc   r}   r   Zbox_is_fragmentedkeyr   r   r/   rM   Zmax_float_position_yabsolute_boxZnew_box_heightr0   r0   r1   rF   x  s   
&















rF   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   r   mr0   r0   r1   r   o  r   z"collapse_margin.<locals>.<genexpr>c                 s   s   | ]}|d kr|V  qdS r   r0   r   r0   r0   r1   r   p  r   )extendr   r   )r-   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

    break_afterr   break_beforer   r   )r]   r^   rectoverso))r}   r   )r}   avoid)r}   
avoid-page)r}   avoid-column)columnr   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )	r   BlockLevelBoxTableRowGroupBoxTableRowBoxr   rl   r   rc   reverse)sibling_beforesibling_aftervaluesZblock_parallel_box_typesr&   r;   r   r0   r0   r1   rq   t  s*    

rq   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   r   r   Nr   r   r   )r   r   rb   r   r   rL   rA   reversed_enumerater   	is_header	is_footerrG   r   rq   rr   rk   r3   r   rs   rc   r   rl   )r%   rc   r+   r,   r   r   rk   rv   rL   Zprevious_in_flowrg   r|   Zbreakable_box_typesr;   Znew_grand_childrenrx   
next_childr0   r0   r1   rs     sn    






rs   c                 C   s"   t | D ]}| r|  S qdS )z=Find and return the last in-flow child of given ``children``.N)reversedr   )rc   rg   r0   r0   r1   rp     s    rp   c                 C   s   t ttt| t| S )zBLike reversed(list(enumerate(seq))) without copying the whole seq.)zipr   ranger   )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.

    r[   rh   fixedN)r   r   r   rA   rc   r   remover   r   r   pop)r%   box_listr+   r,   r&   r0   r0   r1   rA     s    	


rA   c                 C   s   |j r| dv S | dv S )z$Test whether we should avoid breaks.)r   r   r   )r   r   	in_columnr|   r%   r0   r0   r1   rr   %  s    rr   c                 C   s   |j r| dv S | dv S )z$Test whether we should force breaks.)r}   r]   r^   r   r   r   )r}   r]   r^   r   r   r   r   r0   r0   r1   r   ,  s    r   )TNNNFN)2__doc__mathr   formatting_structurer   rh   r   r   r   r   flexr	   floatr
   r   r   gridr   inliner   min_maxr   percentr   r   r   replacedr   tabler   r   r2   r$   r4   rE   rd   r~   r   r   r   rF   r!   rq   r   rs   rp   r   rA   rr   r   r0   r0   r0   r1   <module>   sJ      
//
>B j B t	8N