o
    Zh0h                     @   s   d Z ddlmZmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ dd	lmZmZ dd
lmZmZ ddlm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 d! Z	"d'd#d$Zd%d& Z d"S )(z*Layout for grid containers and grid-items.    )countcycle)inf   )	Dimension)boxes)LOGGER   )
percentageresolve_percentages)max_content_widthmin_content_width)find_in_flow_baselinec                 C   s   t | to	| jdkS Nfr
isinstancer   unitsizing r   L/var/www/html/rh/venv/lib/python3.10/site-packages/weasyprint/layout/grid.py
_is_length      r   c                 C   s   t | to	| jdkS r   r   r   r   r   r   _is_fr   r   r   c                 C   s   | || k o|| | k S Nr   )
position_1size_1
position_2size_2r   r   r   
_intersect   s   
r    c                 C   s@   |D ]\}}}}t | |||}	t ||||}
|	r|
r dS qdS )NTF)r    )xywidthheight	positionsfull_xfull_y
full_widthfull_heightx_intersecty_intersectr   r   r   _intersect_with_children   s   r,   c                 C   s   | \}}}|r%|d u r%|d u r%t |D ]\}} | d| | v r" nqd}|d urn|d u rn|d u r6|d }n8|dkr<dnd}t |d d | D ]\}} || v rU||8 } n|dkr[ nqG|t|7 }|dkrnt|d | }|d urtd }||||fS )N-r	   r   )	enumerateabslen)linelinessidespannumberidentcoordstepr   r   r   	_get_line%   s0   

r:   c                 C   s  | dks
| d dkr|dks|d dkrd S | dkr/t | |d\}}}}|d ur.|p+d}|}nd}d  }}|dkrt ||d\}}}}	|d urw|pJd }}
|}|d urvt||d d  ddD ]\}}||v rk|
d8 }
|
dkrq nq_||
7 }n|d ur|	| }|d u r|d u r|	| }n5|pd}|	dkrt||	d d d }|D ]\}}||v r|d8 }|dkr|	d | } nq| }n| }|	| }nd}|dk r| }||8 }|dkrd}||fS )	Nautor   r5   startr	   endr<   r.   )r:   r/   )r<   r=   r3   r5   r6   r7   r8   size
span_ident	coord_endspan_numberr2   iterabler   r   r   _get_placementA   sh    
rD   c                 C   s    d}| d dkr| d pd}|S )Nr	   r   r5   r   )placer5   r   r   r   	_get_spany   s   rF   c                 C   s  t  }| D ];\}}	}
}|dkr*t|	|g| R  r)t|||
 D ]}|| q!qt||
g| R  rBt|	|	| D ]}	||	 q:q|rt D ]S}||v rOqH|dkr_td |d d f||}n%|d dksgJ |dkss|d dkssJ t|}t|d |d | d f|}t|d |d |d  }t ||@ s|  S qHd S t|pdgd }|dkrtd |d d f||S |d dksJ |dks|d dksJ t|d D ]}t|d |d d f|}|d |kr|  S qd S )Nrowr;   r	   r   r5   )	setvaluesr    rangeaddr   rD   rF   max)first_placementsecond_start
second_endsecond_trackschildren_positions
first_flowdenseoccupied_tracksr!   r"   r#   r$   track	placementr5   tracks	end_trackr   r   r   _get_second_placement   sZ   
rY   c                 C   sP   |  }}| d dkr| dd  \}}|d dkrd}||fS t |r$d}||fS )Nr   zminmax()r	   fit-content()r;   )r   )r?   
min_sizing
max_sizingr   r   r   _get_sizing_functions   s   r]   c           	      C   s  | dkrd} d| v rt d g gS g }t| D ]m\}}|d rp|d dkrj|dd  \}}t|ts:t d	 d}t|D ]*}t|D ]#\}}|d rR|| qDt|d r`|d
 | qD|t	| qDq>q|| qt|d r~|d
 | q|t	| q|S )Nnone)r   subgridzSubgrids are unsupportedr   r   zrepeat()r	   z6"auto-fit" and "auto-fill" are unsupported in repeat()r.   )
r   warningr/   r   intrJ   appendr1   extendlist)	rW   tracks_listirU   repeat_numberrepeat_track_list_jrepeat_trackr   r   r   _get_template_tracks   s:   

rl   c
           $      C   sn  | dv sJ |dv sJ |dv sJ |dv sJ dgt | }
g }| dkr'dnd}|D ]=}|| }|dkrF|d	v s?|d d
krE|d q+n|dkrU|dv rT|d q+n|dkrc|dv rc|d q+|d q+t|D ]\}}|suqm|D ]}|dkr|dv rt||}n-t||}n'ddlm} | }d|_d|_	|||t
 d |	dg g d\}}}}}}| }||||  D ]}||| 8 }qtd|}tt||||  |d}dgt | }dd |D }|t |pd }|D ]/}|| \}}|}|| | }|| d }|| |kr|| | } || 8 }||8 }|||< q|rj|rjdd |D }!|t |!p5d }|!D ]0}|| \}}|}|| | }|| d }|| |kr`|| | } || 8 }||8 }|||< q9|rn	 t|D ]\}"} | |
|" kr| |
|"< qrqwqmt|
D ]+\}}#| dkr|| d t
u r|| d |# || d< q|| |  |#7  < qd S )N)minrL   )	intrinsiccontent-basedmax-content)minimummin-contentrp   xyr   rm   r	   rn   rr   rp   r;   rZ   Tro   )rr   rp   rp   )rp   r;   Fr!   )rq   rr   block_level_layout)bottom_space
skip_stackcontaining_blockpage_is_emptyabsolute_boxesfixed_boxesr>   c                 S   s   g | ]\}}|r|qS r   r   .0rj   affectedr   r   r   
<listcomp>#  
    z+_distribute_extra_space.<locals>.<listcomp>c                 S   s   g | ]\}}|s|qS r   r   r}   r   r   r   r   3  r   rL   )r1   rb   r/   r   r   blockrv   deepcopy
position_x
position_yr   margin_heightrL   rd   )$affected_sizesaffected_tracks_typessize_contributiontracks_childrensizing_functionstracks_sizesr5   	directioncontextry   planned_increasesaffected_tracksaffected_size_index	functionsfunctionrf   childrenitemspacerv   ri   sizestracks_numbersitem_incurred_increasesaffected_tracks_numbersdistributed_spacetrack_number	base_sizegrowth_limititem_incurred_increaseaffected_sizelimitextraunaffected_tracks_numberskincreaser   r   r   _distribute_extra_space   s   










Dr   Nc	           .         s  dv sJ g }	|dkrdn|}
| D ]J\}}d }t |r"t||
}n|dv s,|d dkr.d}d }t |r:t||
}n|dv sH|d dksHt|rJt}d ||fvrUt||}|	||g qdd tt|	D }| D ]$\}\}}}}dkr|||fn||f\}}|d	krql|||  | qlt	|| |	}|D ]\}\}}}|sqd
kr&d	dl
m} d}|D ]T}|| \}}}}t||||  }| }d|_d|_tj|d}t|| |j|_|j|_||_||_t }| ||d |dg g d\}}}}}}t|| }q|dv r||d< |dv r||d	< d |vr%t||d	< q|dkr=tdg fdd|D R  |d< n-|dkrTtdg fdd|D R  |d< n|dkrjtdg fdd|D R  |d< |dkr}t fdd|D |d	< n|dv s|d dkrt fdd|D |d	< d |vrt||d	< qtfdd| D }|D ]}dd tt| D }t| }|D ]A\} \}\}}}}dkr||fn||f\}}||krq| | | | d	  D ]\}}t|r nq|||  | qtddd || |	| |
 tdd!d|| |	| |
 tddd|| |	| |
 |	D ]}d |vr>t||d	< q1t| }|D ]A\} \}\}}}}dkr[||fn||f\}}||krhqH| | | | d	  D ]\}}t|r} nqr|||  | qHtd"dd|| |	| |
 td"dd|| |	| |
 q|	D ]}|d	 tu r|d |d	< q|dkrd }!n|td#d |	D  t|	d	 |  }!|!d ur|!dkr|!t|	 }"t|	D ](\} }|\}}||" |kr||d< |!|| 8 }!q|d  |"7  < |!|"8 }!qt }#|!d ur!|!dkr!d}$n|!d urd$}%|%s|!}&d}'tt	|	| }|D ]\} \}\}}t|rU|&|d 7 }&| |#vrU|'|j7 }'q8td	|'}'|&|' }(d}%tt	|	| }|D ],\} \}\}}| |#vrt|r|(|j |d k r|#|  |!|d 8 }!|!dk}%qk|%r+|(}$n/d}$t	|	| }|D ]%\}\}}t|r|jd	krt|$|j|d  }$qt|$|d }$qtt	|	| }|D ]0\} \}\}}t|r| |#vr|$|j |d kr|!d ur|!|$|j 8 }!|$|j |d< q|jd% })|jd& }*dkot|)d'd(h@ }+d
ko*t|*d'd(h@ },|+s1|,r\|!d ur\|!dkr\d)d t	|	| D }-|-r\|!t|- }"|-D ]}|d  |"7  < qP|	S )*Nrs   r;   r   rt   rZ   c                 S      g | ]}g qS r   r   r~   ri   r   r   r   r   q      z)_resolve_tracks_sizes.<locals>.<listcomp>r!   r	   r"   ru   r   T)rx   ry   rz   r{   r|   )rr   max_contentr;   )rr   r   rr   c                 3       | ]}t  |V  qd S r   r   r~   childr   r   r   	<genexpr>      

z(_resolve_tracks_sizes.<locals>.<genexpr>rp   c                 3   r   r   r   r   r   r   r   r     r   c                 3   r   r   r   r   r   r   r   r     r   c                 3   r   r   r   r   r   r   r   r     r   )r;   rp   zfit_content()c                 3   r   r   r   r   r   r   r   r     r   c                    s8   h | ]\}}}} d kr|n|dkr d kr|n|qS )r!   r   r   )r~   ri   r#   r$   )r   r   r   	<setcomp>  s
    
z(_resolve_tracks_sizes.<locals>.<setcomp>c                 S   r   r   r   r   r   r   r   r     r   rm   rn   rq   ro   rL   c                 s   s    | ]}|d  V  qdS )r   Nr   )r~   r?   r   r   r   r         Fjustify_contentalign_contentnormalstretchc                 S   s    g | ]\}\}}|d kr|qS )r;   r   )r~   r   min_functionri   r   r   r   r   6  s
    
)r   r
   r   r   rL   rb   rJ   r1   itemszipr   rv   sumr   r   r   r   BlockContainerBoxanonymous_fromr   r#   r$   r   sortedrI   r/   r   rH   valuerK   style).r   box_sizerQ   implicit_startr   gapr   ry   orthogonal_sizesr   percent_box_sizer   max_functionr   r   r   r   r!   r"   r#   r$   r8   r?   rC   r   r   rv   ri   parentrw   spansr5   rf   
free_spacedistributed_free_spaceinflexible_tracksflex_fractionstopleftover_spaceflex_factor_sumhypothetical_fr_sizer   r   	x_stretch	y_stretchauto_tracks_sizesr   )r   r   r   _resolve_tracks_sizesT  s  

































 r   c           p      C   sh  |    |jd }|jd }	t|jd }
t|jd }t|jd d d d }t|jd d d d }|jd }|dkr@d}n|jd	krH|jn|j}t||}|jd
 }|dkr\d}n|jd	krcdn|j}t||}|dkrqd}dd |D }t|jd }t|jd }|rt|d nd}tt|d d t| }|dkrt	|D ]
}|
d g|  qn|dk rt	| D ]}|
t|
 |
g  qtt|d d | }|dkr|D ]}t	|D ]}|
d  qqn|dk rt	| D ]}|
t| |
g  qt|D ]O\}}t|D ]E\}}|d u rq| d}dd |d d d D }||vr;|d|  
| dd |d d d D }||vrU|d|  
| qq	t|d d d D ]X\}}t|d d d D ]I\}}|d u rzqo| d}dd |d d d D }||vr|d| d  
| dd |d d d D }||vr|d| d  
| qoqbd|	v rdnd}d|	v rdnd}|dkr|n|} |dkr|n|}!i }"|jD ]C}#|#jd }$|#jd }%|#jd }&|#jd }'t|$|%|d d d }(t|&|'|d d d })|(r&|)r&|(\}}*|)\}}+|||*|+f|"|#< qt|jd d! d"},|,D ]h}#|#|"v r<q3|#jd#| d$ }-|#jd#| d% }.t|-|.| d d d }/|/s^q3|#jd#| d$ }0|#jd#| d% }1t|/|0|1|!|"|d&|	v }2|dkr|/\}}+|2\}}*n|/\}}*|2\}}+|||*|+f|"|#< q3d}3|dkr|rt|d nd}4nt|}4g }5|,D ]W}#|#|"v r|dkr|"|# \}6}}7}n5|"|# \}}6}}7n,|#jd#| d$ }0|#jd#| d% }1t|0|1|!d d d }2|5
|# |2r|2\}6}7nqt|6|3}3t|6|7 |4}4q|5D ]B}#|#jd#| d$ }0|#jd#| d% }1d}8|0d	kr8|0d d'kr8|0d }8n|1d	krH|1d d'krH|1d }8t|3|8pNd |4}4qd}9|dkr`t|}:n|rit|d nd}:|" D ]!};|dkr}|;\}}6}}7n|;\}6}}7}t|6|9}9t|6|7 |:}:qo|9|3}<}=d&|	v rl|5D ]}#|#jd#| d$ }-|#jd#| d% }.|#jd#| d$ }0|#jd#| d% }1t|0|1|!d d d }2|2r|9}<|2\}>}?|>}=t|<D ]y}@|-d	krtd |@d d f|.| d d d \}@}An!|-d d'ksJ t|-}8t|-d |@d |8 d f| d d d \}@}A|@|<k r qt	|@|@|A D ],}|dkr9|>|@}}|?|A}*}+n
|@|>}}|A|?}*}+t|||*|+|" }B|BrR nq' nq|@|A |: }C|Cdkrg|:|C7 }:|dkrw|>|@}}|?|A}*}+n
|@|>}}|A|?}*}+|||*|+f|"|#< q|9|3}<}=	 |<}@t	|=|4D ]}>|-d	krtd |@d d f|.| d d d \}@}An!|-d d'ksJ t|-}8t|-d |@d |8 d f| d d d \}@}A|0d	krtd |>d d f|1|!d d d \}>}?nt|0}8t|0d |>d |8 d f|!d d d \}>}?|dkr|>|@}}|?|A}*}+n
|@|>}}|A|?}*}+t|||*|+|" }B|>|? |4k}D|Bs3|Dr5q|||*|+f|"|#< |<|A d |: }C|CdkrN|:|C7 }: n|<d7 }<|<d |: }C|Cdkrc|:|C7 }:|3}=q	 qn|5D ]}#|#jd#| d$ }-|#jd#| d% }.|#jd#| d$ }0|#jd#| d% }1t|0|1|!d d d }2|2rI|2\}>}?|>|=k r|<d7 }<|>}=t|<D ]y}<|-d	krtd |<d d f|.| d d d \}@}An!|-d d'ksJ t|-}8t|-d |@d |8 d f| d d d \}@}A|@|<k rqt	|@|@|A D ],}|dkr|>|@}}|?|A}*}+n
|@|>}}|A|?}*}+t|||*|+|" }B|Br* nq nq|@|A |: }C|Cdkr?|:|C7 }:|||*|+f|"|#< qn	 |<}@t	|=|4D ]}>|-d	krktd |@d d f|.| d d d \}@}Ant|-}8t|-d |@d |8 d f| d d d \}@}A|0d	krtd |>d d f|1|!d d d \}>}?nt|0}8t|0d |>d |8 d f|!d d d \}>}?|dkr|>|@}}|?|A}*}+n
|@|>}}|A|?}*}+t|||*|+|" }B|>|? |4k}D|Bs|DrqQ|||*|+f|"|#<  n|<d7 }<|<d |: }C|Cdkr|:|C7 }:|3}=qI	 qn|dkr|3|4}E}F|9|:}G}Hn
|9|:}E}F|3|4}G}Ht	d|E D ]}|dt| |dg  q)t	|rEt|d nd|FD ]}|
t| |
g  qIt	d|G D ]}|dt| |dg  q_t	t||HD ]}|
t|
 |
g  qxt|tjrdd)lm}I |I|| nt|tjsJ dd*lm}J |J|| | |jd	kr|j|_d+d |dd d D }Kd,d |dd d D }Lt |L|j|"|3d-|| |}Mt |K|j|"|Gd.|| |d/d |MD 	}Nt!|jd0 }O|" }td|jt#d1d2 |MD  }Pg }Qt|M}R|Od3h@ r0||Pd 7 }|MD ]\}7}|Q
| ||7| 7 }qn|Oh d4@ rO||P7 }|MD ]\}7}|Q
| ||7| 7 }q=n|Od5h@ ru||Pd |R 7 }|MD ]\}7}|Q
| ||7|P|R  | 7 }q_n`|Od6h@ r|MD ]\}7}|Q
| |Rdkr||7|P|Rd   | 7 }q}n;|Od7h@ r||P|Rd  7 }|MD ]\}7}|Q
| ||7|P|Rd   | 7 }qn|MD ]\}7}|Q
| ||7| 7 }qt!|jd8 }S|$ }|jd	krd}Tn|jt#d9d2 |ND  t|Nd |  }Ttd|T}Tg }Ut|N}V|Sd3h@ 	r(||Td 7 }|ND ]\}7}|U
| ||7| 7 }	qn|Sh d4@ 	rG||T7 }|ND ]\}7}|U
| ||7| 7 }	q5n|Sd5h@ 	rm||Td |V 7 }|ND ]\}7}|U
| ||7|T|V  | 7 }	qWnk|Sd6h@ 	r|ND ]\}7}|U
| |Vdk	r||7|T|Vd   | 7 }	qunF|Sd7h@ 	r||T|Vd  7 }|ND ]\}7}|U
| ||7|T|Vd   | 7 }	qn|Sd:h@ 	rt%&d; |ND ]\}7}|U
| ||7| 7 }	qg }Wd }X|	rtt'|}Yt#d<d2 |Nd |Y D t|Nd |Y d |  }Znd}Yd}Zd }[t#d=d2 |N|Yd  D t|N|Yd  d |  }\|U|Yd d  |$ |\ g }]t|]|Yd d>D ]T\}6}^| (||^|Z 
r|
s|6dk
rVd d d?d d@g dAf  S |6d }X|6d d i}[|,D ]!}#|"|# \}}}}|Y|  k
rz|6d k
rn 
qb|W
|# 
qb ndA}
q5|,D ]}#|"|# \}}}}|Y|k
r|W
|# 
q|jd	k
rt#dBd2 |N|Y|X D t|N|Y|X d |  |_t!|jdC }_t!|jdD }`g }ad }bd?d d@}cddElm)}d |WD ]}#|"|# \}}}*}+|j*|#}e|r	|+|r	|e|| v r	|| |e }fnd }f|#, }#|Q| |#_-|U| |Z |#_.t/|#| t#dFd2 |M|||*  D |*d |  }*t#dGd2 |N|||+  D |+d |  }+|#j0d	krSd|#_0|#j1d	kr\d|#_1|#j2d	kred|#_2|#j3d	krnd|#_3|*|#j3|#j4 |#j5 |#j1 |#j6 |#j7  }g|+|#j0|#j8 |#j9 |#j2 |#j: |#j;  }ht!|#jdH }i|id	h@ r|_}i|iddIh@ r|#jdJ d	krt<|gdK|#jdJ< t!|#jdL }j|jd	h@ r|`}j|jddIh@ r|#jdM d	krt<|hdK|#jdM< tj=>|dN}kt/|k| |#j-|k_-|#j.|k_.|*|k_|+|k_|d| |#||f|k|||d dO \}l}m}n|lrdA}n
q|iddIh@ r%t|g|lj|l_n't?| |l|l_|g|lj }o|id3h@ r?|l@|od d n|ih dP@ rL|l@|od |jddIh@ r[t|h|lj|l_n!|h|lj }o|jd3h@ ro|l@d|od  n|jh dQ@ r||l@d|o |a
|l |bd u r||GkrtA|l}b
q|B|a}t|tjrt%&dR |bpd|_C| D| ||[|cg dAfS )SNgrid_template_areasgrid_auto_flowgrid_auto_rowsgrid_auto_columnsr.   
column_gapr   r   r;   row_gapr^   )r   c                 S      g | ]}t |qS r   )rd   r~   rG   r   r   r   r   \      zgrid_layout.<locals>.<listcomp>grid_template_rowsgrid_template_columnsr	   r   z-startc                 S      g | ]	}|D ]}|qqS r   r   r~   rG   namer   r   r   r   }      c                 S   r   r   r   r~   columnr   r   r   r   r     r   z-endc                 S   r   r   r   r   r   r   r   r     r   c                 S   r   r   r   r   r   r   r   r     r   r   rG   grid_column_startgrid_column_endgrid_row_startgrid_row_endc                 S   s
   | j d S )Norder)r   )r   r   r   r   <lambda>  s   
 zgrid_layout.<locals>.<lambda>)keygrid__start_endrS   r5   T)block_level_width)inline_block_widthc                 S   r   r   r]   r   r   r   r   r     r   c                 S   r   r   r   )r~   r   r   r   r   r     s    r!   r"   c                 S   s   g | ]\}}|qS r   r   r~   r?   ri   r   r   r   r     r   r   c                 s       | ]\}}|V  qd S r   r   r   r   r   r   r     r   zgrid_layout.<locals>.<genexpr>center>   r=   rightflex-endzspace-aroundzspace-betweenzspace-evenlyr   c                 s   r   r   r   r   r   r   r   r   '  r   baselinez3Baseline alignment is not supported for grid layoutc                 s   r   r   r   r   r   r   r   r   T  r   c                 s   r   r   r   r   r   r   r   r   [  r   r>   any)breakpageFc                 s   r   r   r   r   r   r   r   r   s  r   justify_itemsalign_itemsru   c                 s   r   r   r   r   r   r   r   r     r   c                 s   r   r   r   r   r   r   r   r     r   justify_selfr   r#   px
align_selfr$   r      >   r=   r   r   self-end>   r=   r   r  zInline grids are not supported)Ecreate_block_formatting_contextr   r   r#   r
   r$   rl   r1   ra   rJ   rb   nextr/   r   rD   r   rY   rm   rL   rI   r   rF   r,   insertr   r   GridBoxr   r   InlineGridBoxinliner   r   rH   content_box_xr   content_box_yr   r`   iteroverflows_pagerv   indexgetr   r   r   r   
margin_topmargin_rightmargin_bottommargin_leftborder_left_widthpadding_leftborder_right_widthpadding_rightborder_top_widthpadding_topborder_bottom_widthpadding_bottomr   r   r   r   	translater   copy_with_childrenr   finish_block_formatting_context)pr   boxrw   rx   ry   rz   r{   r|   
grid_areasflow	auto_rowsauto_columnsauto_rows_backauto_columns_backr   refer_tor   rowscolumnsgrid_areas_columns	rows_diffri   columns_diffrG   r"   r!   	area_name
start_namenamesend_namerR   second_flowfirst_tracksrP   rQ   r   column_start
column_end	row_startrow_endcolumn_placementrow_placementr#   r$   r   first_start	first_endrM   rN   rO   second_placementimplicit_second_1implicit_second_2remaining_grid_itemsrf   r?   r5   implicit_first_1implicit_first_2positioncursor_firstcursor_secondsecond_isecond_sizefirst_i
first_size	intersect
first_diffoverflowimplicit_x1implicit_x2implicit_y1implicit_y2r   r   row_sizing_functionscolumn_sizing_functionscolumns_sizes
rows_sizesr   
free_widthcolumns_positionscolumns_numberr   free_heightrows_positionsrows_numberthis_page_children
resume_rowskip_rowskip_height	resume_attotal_heightrow_lines_positionsrow_yr   r   new_childrenr   	next_pagerv   r  child_skip_stackchild_widthchild_heightr   r  r   	new_childchild_resume_atchild_next_pagediffr   r   r   grid_layoutB  s  






























































n





















 

















"




 












rj  r   )!__doc__	itertoolsr   r   mathr   css.propertiesr   formatting_structurer   loggerr   percentr
   r   	preferredr   r   tabler   r   r   r    r,   r:   rD   rF   rY   r]   rl   r   r   rj  r   r   r   r   <module>   s0    	82(p
 o