o
    %eAX                     @   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ddQdRZ,e%dSe%dTe%dUe%dVdWdX Z-e%dYdZd[ Z.e%d\d]d^ Z/e%d_d`da Z0e%dbe%dce%dde%dee%dfe%dgdhdi Z1e%djdkdl Z2e%dme%dne%doe%dpdqdr Z3e%dsdtdu Z4dvdw Z5e%dxdydz Z6e%d{d|d} Z7e%d~dd~ Z8e%ddd 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@e%ddd ZAe%ddd ZBe%ddd ZCe%ddd ZDdddZEdd ZFdPS )z7Convert specified property values into computed values.    )pi)unquote)parse_color   )LOGGER)ffipangounits_to_double)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   Q/var/www/html/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   E   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>z   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   s   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-basisNc                 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contentr   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   bleed1  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   G  s    

z"background_size.<locals>.<genexpr>r   r   r   r   r   background_sizeD  s   r   zimage-orientationc                 C   s4   |dv r|S |\}}t t|t d d d |fS )z-Compute the ``image-orientation`` properties.)nonez
from-imager      Z   )r   roundr   )r   r   r   r   flipr   r   r   image_orientationM  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_widthV  s   
r	  zcolumn-widthc                 C   s   t | ||ddS )z&Compute the ``column-width`` property.Tr   r   r   r   r   r   column_widthm  s   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   y  r   z border_radius.<locals>.<genexpr>r   r   r   r   r   border_radiuss  s   r  z
column-gapc                 C   s"   |dkr	t dd}t| ||ddS )z$Compute the ``column-gap`` property.r   r   r   Tr   r   r   r   r   r   
column_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   joinappendr   )r   r   computed_valuesr   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   )len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   
r,  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   )r2  r   FONT_WEIGHT_RELATIVE)r   r   r   parent_valuer   r   r   r     s   


r   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   r?  "  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   rB  +  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   r@  )r   r   r   r   r   r   r   r   8  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_sizeE  s   rC  	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   rD  K  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_alignV  s   
rM  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_spacingi  s   rN  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   r;  r   )r   strut_layoutsr
   set_textget_first_liner   )r   contextr   layoutliner   text_heightrG  r   r   r   r   r   r   rL  r  s0   





rL  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]t
|j }	nt
|j}	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   rN  r\   r   N)rV  r   zPangoRectangle *r!   rJ  )cacher   copyr
   rT  rU  r   newr   pango_layout_line_get_extentsr	   yr/   releaser  )r   	characterr\  	cache_keyrW  rX  r   ink_extentslogical_extentsmeasurer   r   r   r   r     s.   





r   )F)NFr   )G__doc__mathr   urllib.parser   tinycss2.color3r   loggerr   text.ffir   r   r	   text.line_breakr
   r   urlsr   
propertiesr   r   r   utilsr   r   r   r   r0  r  r9  
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   r?  rB  r   rC  rD  rM  rN  rL  r   r   r   r   r   <module>   s&   5
#

4"




#

















!