o
    Zh0hj                     @   s  d 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mZ ddlmZmZ dd	lmZ d
dlmZmZmZ d
dlmZmZmZmZ dd dD Zd
dddZed ed ks_J dddddddddd	dddddddddd	dZdd dD Zedd e  D sJ ed Z!e"d d e!D ed!< i Z#dd#d$Z$d%d& Z%d'd( Z&e%d)d*d+ Z'e%d,e%d-d.d/ Z(e%d0d1d2 Z)e%d3e%d!e%d4d5d6 Z*e%d7e%d8d9d: Z+e%d;e%d<e%d=e%d>e%d?e%d@e%dAe%dBe%dCe%dDe%dEe%dFe%dGe%dHe%dIe%dJe%dKe%dLe%dMe%dNe%dOe%dPe%dQddSdTZ,e%dUe%dVe%dWe%dXdYdZ Z-e%d[d\d] Z.e%d^d_d` Z/e%dadbdc Z0e%dde%dee%dfe%dge%dhe%didjdk Z1e%dle%dmdndo Z2e%dpe%dqdrds Z3e%dte%dudvdw Z4e%dxe%dydzd{ Z5e%d|e%d}d~d Z6e%de%de%de%ddd Z7e%de%ddd Z8dd Z9e%ddd Z:e%ddd Z;e%ddd Z<e%ddd Z=e%ddd Z>e%ddd Z?e%ddd Z@dd ZAdd ZBe%de%ddd ZCe%de%ddd ZDe%ddd ZEe%ddd ZFe%ddd ZGe%ddd ZHe%ddd ZIe%ddd ZJe%ddd ZKe%ddd ZLdddZMdd ZNdRS )z7Convert specified property values into computed values.    )pi)unquote)parse_color   )LOGGER)
FROM_UNITSffipango)Layoutfirst_line_metrics)get_link_attribute   )INITIAL_VALUESZERO_PIXELS	Dimension)ANGLE_TO_RADIANSLENGTH_UNITSLENGTHS_TO_PIXELSsafe_urljoinc                 C   s   i | ]\}}|t d  | qS )	font_size)r   ).0namefactor r   T/var/www/html/rh/venv/lib/python3.10/site-packages/weasyprint/css/computed_values.py
<dictcomp>   s    r   ))zxx-smallg333333?)zx-smallg      ?)smallgqq?)mediumr   )large333333?)zx-largeg      ?)zxx-larger         )thinr   thickborder_top_widthr         )	d      i,  r%     iX  r&   i   r'   r(   bolderlighterc                 C   s*   i | ]\}}}}|t ||t ||fqS r   )r   )r   	page_sizewidthheightunitr   r   r   r   D   s    
)/)a10   %   mm)a9r4   4   r5   )a8r7   J   r5   )a7r9   i   r5   )a6r;      r5   )a5r=      r5   )a4r?   )  r5   )a3rA     r5   )a2rC   R  r5   )a1rE   I  r5   )a0rG   i  r5   )b10   ,   r5   )b9rK   >   r5   )b8rM   X   r5   )b7rO   }   r5   )b6rQ      r5   )b5rS      r5   )b4rU   a  r5   )b3rW   r*   r5   )b2r*     r5   )b1rZ     r5   )b0r\   i  r5   )c10   (   r5   )c9r`   9   r5   )c8rb   Q   r5   )c7rd   r   r5   )c6rf      r5   )c5rh      r5   )c4rj   D  r5   )c3rl     r5   )c2rn     r5   )c1rp     r5   )c0rr   i  r5   )zjis-b10    -   r5   )zjis-b9ru   @   r5   )zjis-b8rv   [   r5   )zjis-b7rw      r5   )zjis-b6rx      r5   )zjis-b5ry     r5   )zjis-b4rz   l  r5   )zjis-b3r{     r5   )zjis-b2r|     r5   )zjis-b1r}     r5   )zjis-b0r~   i  r5   )letter      !@   in)legalr      r   )ledgerr      r   c                 c   s     | ]\}}|j |j k V  qd S N)value)r   r/   r0   r   r   r   	<genexpr>y   s    r   r@   c                 c   s     | ]}|j t|j  V  qd S r   )r   r   r1   )r   sizer   r   r   r   |       
r   Fc                 C   s   t | d | d | d | d | d | d | d | d | d	 | d
 | d | d | d | d f}|r>|t | d t | d  7 }|S )Nfont_family
font_stylefont_stretchfont_weightfont_variant_ligaturesfont_variant_positionfont_variant_capsfont_variant_numericfont_variant_alternatesfont_variant_east_asianfont_feature_settingsfont_variation_settingsfont_language_overridelangr   line_heightstr)styleinclude_sizekeyr   r   r   _font_style_cache_key   s&   r   c                    s     dd  fdd}|S )z9Decorator registering a property ``name`` for a function.-_c                    s   | t  < | S )z0Register the property ``name`` for ``function``.)COMPUTER_FUNCTIONS)functionr   r   r   	decorator   s   z$register_computer.<locals>.decorator)replace)r   r   r   r   r   register_computer   s   r   c                 C   s  |\}}|dks
J |\}}}z| j ||}|dkrnr|dkr9|dr0dt|dd  f}nhdt| j|f}nZ|dkrDt| }nY|d	krOt| }nS|d
krZt	| }nM|dkrjt
t	| d}d}nB|tv rzt
t	| |}d}n<|tv rt
t	| |}d}W ||fS W ||fS W ||fS W ||fS W ||fS W ||fS W ||fS W ||fS W ||fS W ||fS  ty   Y d S w )Nattr()stringurl#internalr   externalcolorintegernumber%lengthangle)elementget
startswithr   r   base_urlr   stripintfloatr   r   r   	Exception)r   values	func_namer   	attr_nametype_or_unitfallback
attr_valuer   r   r   compute_attr   sb   

	r   zbackground-imagec                    sl   |D ]1\}}|dv rt  fdd|jD |_|dkr3t |jf\|_|jdkr3t |j|_q|S )z-Compute lenghts in gradient background-image.)zlinear-gradientradial-gradientc                 3   s(    | ]}|d urt  |nd V  qd S r   r   )r   posr   r   r   r   r      s
    
z#background_image.<locals>.<genexpr>r   explicit)tuplestop_positionscompute_positioncenter	size_typelength_or_percentage_tupler   r   r   r   type_r   r   r   r   background_image   s   


r   zbackground-positionzobject-positionc                       t  fdd|D S )z'Compute lengths in background-position.c                 3   s4    | ]\}}}}|t  ||t  |fV  qd S r   r   )r   origin_xpos_xorigin_ypos_yr   r   r   r      s    

z#compute_position.<locals>.<genexpr>r   r   r   r   r   r   r   r      s   r   ztransform-originc                    r   )z5Compute the lists of lengths that can be percentages.c                 3       | ]	}t  |V  qd S r   r   r   r   r   r   r   r          z-length_or_percentage_tuple.<locals>.<genexpr>r   r   r   r   r   r      s   r   zborder-spacingclipc                    r   )z.Compute the properties with a list of lengths.c                 3   s     | ]}t  |d dV  qdS )Tpixels_onlyNr   r   r   r   r   r      r   zlength_tuple.<locals>.<genexpr>r   r   r   r   r   length_tuple   s   r   zbreak-afterzbreak-beforec                 C   s   |dkrdS |S )z<Compute the ``break-before`` and ``break-after`` properties.alwayspager   r   r   r   r   r   r   break_before_after      r   toprightleftbottomz
margin-topzmargin-rightzmargin-bottomzmargin-leftr0   r/   z	min-widthz
min-heightz	max-widthz
max-heightzpadding-topzpadding-rightzpadding-bottomzpadding-leftztext-indentzhyphenate-limit-zonez
flex-basisztext-underline-offsetztext-decoration-thicknessNc                 C   s   |dv r|S |j dkr|rdS tS |j}|dkr|r|j S |S |tv r+|j t|  }nG|dv rp|du r7| d }|dkrHt| d}|j | | }n*|d	krYt| d
}|j | | }n|dkrc|j | }n|dkro|j | jd  }n|S |rv|S t|dS )zCompute a length ``value``.)autocontentz	from-fontr   px)emexchremNr   r   xr   0r   r   )r   r   r1   r   character_ratio
root_styler   )r   r   r   r   r   r1   resultratior   r   r   r      s2   


r   z
bleed-leftzbleed-rightz	bleed-topzbleed-bottomc                 C   s2   |dkrt d| d v rddS ddS t| ||S )Nr   cropmarks   r   r   )r   r   r   r   r   r   bleed2  s   r   zletter-spacingc                 C   s   |dkr|S t | ||ddS )NnormalTr   r   r   r   r   r   pixel_length=  s   r   zbackground-sizec                    r   )z+Compute the ``background-size`` properties.c                 3   s(    | ]}|d v r
|nt  |V  qdS ))containcoverN)r   r   r   r   r   r   H  s    

z"background_size.<locals>.<genexpr>r   r   r   r   r   background_sizeE  s   r   zimage-orientationc                 C   s0   |dv r|S |\}}t |t d d d |fS )z-Compute the ``image-orientation`` properties.)nonez
from-imager      Z   )roundr   )r   r   r   r   flipr   r   r   image_orientationN  s   r  zborder-top-widthzborder-right-widthzborder-left-widthzborder-bottom-widthzcolumn-rule-widthzoutline-widthc                 C   sJ   | | dd }|dv rdS |tv rt| S t|tr|S t| ||ddS )z*Compute the ``border-*-width`` properties.r/   r   )r   hiddenr   Tr   )r   BORDER_WIDTH_KEYWORDS
isinstancer   r   )r   r   r   border_styler   r   r   border_widthW  s   
r	  zborder-image-slicezmask-border-slicec                 C   s   g }d}|D ]}|dkr|}q|\}}|du r| | q| t|d qt|dkr1|d9 }nt|dkr<|d9 }nt|dkrI| |d  g ||R S )z,Compute the ``border-image-slice`` property.Nfillr   r   r   r   r    )appendr   len)r   r   r   computed_valuesr
  r   r   r1   r   r   r   border_image_slicen  s    

r  zborder-image-widthzmask-border-widthc                 C   s   g }|D ]}|dkr| | q|\}}| |du r|n| qt|dkr.|d9 }t|S t|dkr<|d9 }t|S t|dkrI| |d  t|S )z,Compute the ``border-image-width`` property.r   Nr   r   r   r    )r  r  r   )r   r   r   r  r   r   r1   r   r   r   border_image_width  s   r  zborder-image-outsetzmask-border-outsetc                    sn    fdd|D }t |dkr|d9 }t|S t |dkr&|d9 }t|S t |dkr3||d  t|S )z-Compute the ``border-image-outset`` property.c                    s*   g | ]}t |ttfr|nt |qS r   )r  r   r   r   r   r   r   r   
<listcomp>  s    z'border_image_outset.<locals>.<listcomp>r   r   r   r    )r  r  r   )r   r   r   r  r   r   r   border_image_outset  s   r  zborder-image-repeatzmask-border-repeatc                 C   s   t |dkr
|d S |S )z-Compute the ``border-image-repeat`` property.r   r   )r  r   r   r   r   border_image_repeat  s   r  zcolumn-widthzoutline-offsetc                 C   s   t | ||ddS )z Compute a pixel length property.Tr   r   r   r   r   r   length_pixels_only  r   r  zborder-top-left-radiuszborder-top-right-radiuszborder-bottom-left-radiuszborder-bottom-right-radiusc                    r   )z+Compute the ``border-*-radius`` properties.c                 3   r   r   r   r   r   r   r   r     r   z border_radius.<locals>.<genexpr>r   r   r   r   r   border_radius  s   r  z
column-gapzrow-gapc                 C   s   |dkr|S t | ||S )z!Compute the ``*-gap`` properties.r   r   r   r   r   r   gap  s   r  c              	   C   s   g }|D ]v}|d dv r|}nO|d dkr%|d d dksJ t | |}n9|d dv r.|}n0|d dv r^|d d }|d dkr\t | |}|d u rLd }n|d |f|d dd   f}n|}|d u rutd| jd	d
d |D f  q|| qt|S )Nr   )r   r   r   quotezleader()r   r   r   )z	counter()z
counters()z	content()z	element()zstring())ztarget-counter()ztarget-counters()ztarget-text()z*Unable to compute %r value for content: %rz, c                 s   s    | ]}t |V  qd S r   r   )r   itemr   r   r   r     s    z _content_list.<locals>.<genexpr>)r   r   warningr   joinr  r   )r   r   r  r   computed_valueanchor_tokenattrr   r   r   _content_list  s.   
 
r  zbookmark-labelc                 C   s
   t | |S )z(Compute the ``bookmark-label`` property.r  r   r   r   r   bookmark_label  s   
r  z
string-setc                    s   t  fdd|D S )z$Compute the ``string-set`` property.c                 3   s&    | ]}|d  t  |d fV  qdS )r   r   Nr  )r   
string_setr   r   r   r     s
    
zstring_set.<locals>.<genexpr>r   r   r   r!  r   r     s   r   r   c                 C   s>   t |dkr|\}|dkr| jrdS dS |dkrdS t| |S )z!Compute the ``content`` property.r   r   inhibitcontentsr   )r  pseudo_typer  )r   r   r   r   r   r   r   r     s   
displayc                 C   st   | j d }| j d }|dv s|dks| jr8|dkrdS t|dkr*|d d	r*d
S |d dkr8d|v r6dS d
S |S )z!Compute the ``display`` property.r   positionabsolutefixedr   )zinline-table)blocktabler   r   ztable-)r*  flowinline	list-item)r*  r,  r.  )	specifiedis_root_elementr  r   )r   r   r   float_r&  r   r   r   r%    s   

r   c                 C   s&   | j d }|dv s|d dkrdS |S )zCompute the ``float`` property.r&  r'  r   z	running()r   )r/  )r   r   r   r&  r   r   r   compute_float  s   
r2  z	font-sizec                 C   s   |t v rt | S tt  }| jdu rtd }n| jd }|dkr8t|D ]\}}||kr3||   S q%|d S |dkr[t|ddd D ]\}}||k rV|| d    S qE|d S |jd	krg|j| d
 S t| ||d|dS )z#Compute the ``font-size`` property.Nr   largerr   smallerr   g?r   r(   T)r   r   )	FONT_SIZE_KEYWORDSlistr   parent_styler   	enumerater1   r   r   )r   r   r   keyword_valuesparent_font_sizeikeyword_valuer   r   r   r   '  s0   



r   zfont-weightc                 C   sN   |dkrdS |dkrdS |dv r%| j du rtd }n| j d }t| | S |S )z%Compute the ``font-weight`` property.r   r%   boldr&   r+   Nr   )r8  r   FONT_WEIGHT_RELATIVE)r   r   r   parent_valuer   r   r   r   G  s   


r   c                 C   s4   |dv r|S t |tr|jdkr|S t| ||S dS )zCompute track breadth.)r   zmin-contentzmax-contentfrN)r  r   r1   r   r   r   r   r   _compute_track_breadthX  s   

rB  c              
   C   s   g }t |D ]c\}}|d dkr|| qt| ||}|r$|| q|d dkr?|dt| ||d t| ||d f q|d dkrS|dt| ||d f q|d dkri|d|d t| ||d f qt|S )zCompute track size.r   r   minmax()r   fit-content()zrepeat())r9  r  rB  r   _track_sizer   )r   r   r   return_valuesr<  r   track_breadthr   r   r   rE  c  s.   rE  zgrid-template-columnszgrid-template-rowsc                 C   s$   |dks
|d dkr|S t | ||S )z+Compute the ``grid-template-*`` properties.r   r   subgrid)rE  r   r   r   r   grid_template}  s   rI  zgrid-auto-columnszgrid-auto-rowsc              
   C   s   g }|D ]G}t | ||}|r|| q|d dkr5|dt| ||d gd t| ||d gd f q|d dkrK|dt| ||d gd f qt|S )z'Compute the ``grid-auto-*`` properties.r   rC  r   r   rD  )rB  r  	grid_autor   )r   r   r   rF  r   rG  r   r   r   rJ    s    rJ  zline-heightc                 C   s`   |dkr|S |j sd|jfS |j dkr$|jd }| d }|| }d|fS t| ||dd}d|fS )	z%Compute the ``line-height`` property.r   NUMBERr   r(   r   Tr   PIXELS)r1   r   r   )r   r   r   r   font_size_valuepixelsr   r   r   r     s   


r   anchorc                 C   s(   |dkr|\}}| j |pd}|S dS )z Compute the ``anchor`` property.r   Nr   r   )r   r   r   r   r   anchor_namer   r   r   rO    s
   linkc                 C   s0   |dkrdS |\}}|dkrt | j|| jS |S )zCompute the ``link`` property.r   Nr   )r   r   r   r   r   r   r   rR    s   r   c                 C   s<   |dkrdS |\}}|dkr| j |pdS |dkr|S dS )zCompute the ``lang`` property.r   Nr   r   rP  )r   r   r   r   r   r   r   r     s   ztab-sizec                 C   s   t |tr|S t| ||S )z"Compute the ``tab-size`` property.)r  r   r   r   r   r   r   tab_size  s   rS  	transformc                 C   s<   g }|D ]\}}|dkrt | ||}|||f qt|S )z#Compute the ``transform`` property.	translate)r   r  r   )r   r   r   r   r   argsr   r   r   rT    s   zvertical-alignc                 C   sh   |dv r|S |dkr| d d S |dkr| d d S |j dkr,t| \}}||j d S t| ||d	d
S )z(Compute the ``vertical-align`` property.)baselinemiddleztext-topztext-bottomr   r   superr         ?subg      r   r(   Tr   )r1   strut_layoutr   r   )r   r   r   r0   r   r   r   r   vertical_align  s   
r]  zword-spacingc                 C   s   |dkrdS t | ||ddS )z&Compute the ``word-spacing`` property.r   r   Tr   r   r   r   r   r   word_spacing  s   r^  c                 C   s   | d dkrdS |rt | dd}||jv r|j| S t|| }|d | \}}t|d|dd	| d
\}}}}}}| d dkrM||f}|rK||j|< |S | d \}	}
|	dkr]|
| d 9 }
|
||
| d  f}|rn||j|< |S )zReturn a tuple of the used value of ``line-height`` and the baseline.

    The baseline is given from the top edge of line height.

    r   r   )r   r   T)r     NF)	resume_atspace_collapser   r   r   rK  r   )r   strut_layoutsr
   set_textget_first_liner   )r   contextr   layoutliner   text_heightrW  r   r   r   r   r   r   r\    s0   





r\  c                 C   s   |dv sJ | j d|dkrdnd  }t| }||v r || S |  } d| d< d| d	< d
| d< td| d}|| | \}}td}td}t	||| |dkr]|j
 t }	n|jt }	t| t| t|	| d  dpvd}
|
||< |
S )z3Return the ratio of 1ex/font_size or 1ch/font_size.)r   r   ratio_r   r   r   r   letter_spacingr   r^  r\   r   N)rf  r   zPangoRectangle *r!   rZ  )cacher   copyr
   rd  re  r   newr	   pango_layout_line_get_extentsyr   r/   releaser  )r   	characterrl  	cache_keyrg  rh  r   ink_extentslogical_extentsmeasurer   r   r   r   r     s.   





r   )F)NFr   )O__doc__mathr   urllib.parser   tinycss2.color4r   loggerr   text.ffir   r   r	   text.line_breakr
   r   urlsr   
propertiesr   r   r   utilsr   r   r   r   r6  r  r?  
PAGE_SIZESallr   INITIAL_PAGE_SIZEr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  r  r  r  r  r  r   r   r%  r2  r   r   rB  rE  rI  rJ  r   rO  rR  r   rS  rT  r]  r^  r\  r   r   r   r   r   <module>   sV   5
#

8"


#

















!