o
    Zh0h+                     @   s  d Z ddlmZ ddlZddlmZ ddlmZ dd	lm	Z	m
Z
mZmZmZmZmZmZmZmZ i i d
ZdZG dd dZG dd dZdd Zd=ddZdd Zedd>ddZeddde
dd Zededd Zeded d! Zeded"d# Zedd$d% Zedd&d' Z ede
ed(d) Z!ed*d+d, Z"ed*ddd-d. Z#ed*d/dded*d0ddd1d2 Z$ed*e
d3d4 Z%ed*ddd5d6 Z&ed*ed7d8 Z'ed*ddd9d: Z(ed*ddd;d< Z)dS )?z,Validate descriptors used for some at-rules.    )infN   )LOGGER   )
properties   )
InvalidValuescomma_separated_listget_custom_identget_keywordget_single_keywordget_urlremove_whitespacesingle_keywordsingle_tokensplit_on_comma)	font-facecounter-style)zfont-displayc                   @      e Zd ZdZdZdS )NoneFakeTokenidentnoneN__name__
__module____qualname__typelower_value r   r   [/var/www/html/rh/venv/lib/python3.10/site-packages/weasyprint/css/validation/descriptors.pyr          r   c                   @   r   )NormalFakeTokenr   normalNr   r   r   r   r   r!      r    r!   c           
      c   s   |D ]}|j dks|jrqt|j}z4|jtv rW q|jt|  vr&tdt|  |j }|jr6|||}n||}|du r@t|j|ff}W n0 tyw } z$t	
d|jt|j|j|j|jrj|jd rj|jd nd W Y d}~qd}~ww |D ]\}	}|	dd|fV  qzqdS )	zFilter unsupported names and values for descriptors.

    Log a warning for every ignored descriptor.

    Return a iterable of ``(name, value)`` tuples.

    declarationzdescriptor not supportedNzIgnored `%s:%s` at %d:%d, %s.r   zinvalid value-_)r   	importantr   valuenameNOT_PRINT_MEDIADESCRIPTORSr   wants_base_urlr   warningtinycss2	serializesource_linesource_columnargsreplace)
rulebase_urldescriptors
descriptortokensfunctionr'   resultexc	long_namer   r   r   preprocess_descriptors!   s>   

r<   Fc                    s    fdd}|S )ul  Decorator adding a function to the ``DESCRIPTORS``.

    The name of the descriptor covered by the decorated function is set to
    ``descriptor_name`` if given, or is inferred from the function name
    (replacing underscores by hyphens).

    :param wants_base_url:
        The function takes the stylesheet’s base URL as an additional
        parameter.

    c                    sF    du r| j dd}n }|t vsJ || _| t |< | S )z(Add ``function`` to the ``DESCRIPTORS``.Nr%   r$   )r   r2   r*   r+   )r8   r(   descriptor_namer3   r+   r   r   	decoratorS   s   zdescriptor.<locals>.decoratorr   )r3   r>   r+   r?   r   r=   r   r6   G   s   r6   c                 c   s    t | }|dv r$dD ]}|tgfV  q|dkrtnt}d|gfV  d S g g g g g g d}| D ]-}t|}|dkr;t|D ]}d|dd }tt||grY|| |  nq=tq/|	 D ]\}} | rod| | fV  qad S )	N)r"   r   )z-alternatesz-capsz-east-asianz-numericz	-positionr"   z
-ligatures)
alternatescapsz
east-asian	ligaturesnumericpositionfont_variant_r$   r%   )
r   r!   r   r   r   r2   getattrr   appenditems)r7   keywordsuffixtokenfeaturesfeaturefunction_namer   r   r   expand_font_varianta   s>   rO   r   c                    sn   dg |r
  d t| dkr| d jdkr| d jS | r3t fdd| D r5dd	d | D S d
S d
S )z&``font-family`` descriptor validation.r   
whitespacer   r   stringc                 3   s    | ]}|j  v V  qd S )Nr   .0rK   allowed_typesr   r   	<genexpr>   s    zfont_family.<locals>.<genexpr> c                 s   s     | ]}|j d kr|jV  qdS )r   N)r   r'   rS   r   r   r   rW      s    N)rG   lenr   r'   alljoin)r7   allow_spacesr   rU   r   font_family   s   


r]   T)r+   c                 C   s   t | dv rL| dd | d } }|jdkr&|jdkr&| dd | d } }|jdkr9|jdkr9dt|jddfS t||}|durN|d	 d
krP|d S dS dS dS )z``src`` descriptor validation.)r   r   Nr8   formatlocalT)r\   r   urlr   )rY   r   
lower_namer]   	argumentsr   r7   r4   rK   ra   r   r   r   src   s   
re   c                 C      | dv S )z%``font-style`` descriptor validation.)r"   italicobliquer   rI   r   r   r   
font_style      rj   c                 C   sD   t | }|dv r
|S | jdkr| jdur| jdv r | jS dS dS dS )z&``font-weight`` descriptor validation.)r"   boldnumberN)	d      i,  i  i  iX  i  i   i  )r   r   	int_value)rK   rI   r   r   r   font_weight   s   
rq   c                 C   rf   )z'``font-stretch`` descriptor validation.)	zultra-condensedzextra-condensed	condensedzsemi-condensedr"   zsemi-expandedexpandedzextra-expandedzultra-expandedr   ri   r   r   r   font_stretch   rk   rt   c                 C   s
   t | S )z0``font-feature-settings`` descriptor validation.)r   font_feature_settings)r7   r   r   r   ru      s   
ru   c              	   C   st   t | dkrt| d }|dv rg S g }t| D ]\}}z|tj|d| dd W q ty7   Y  dS w |S )z'``font-variant`` descriptor validation.r   r   )r"   r   inheritzfont-variantT)requiredN)rY   r   rO   rG   r   validate_non_shorthandr   )r7   rI   valuesr(   
sub_tokensr   r   r   font_variant   s   r{   c                 C   s   | j dkr| S dS )z(``unicode_range`` descriptor validation.zunicode-rangeNrR   )rK   r   r   r   unicode_range   s   
r|   r   c                 C   s   t | dkrdS t| d }|dkr)t | dkr%t| d }|r'||dfS dS dS |dkrMt | dkr5dS | d jdkrI| d jrKdd| d jfS dS dS t | dkr\|d	v r^d|dfS dS dS )
z!``system`` descriptor validation.r   Nr   extendsr   fixed)Nr~   r   rm   )cyclicrC   
alphabeticsymbolicadditive)rY   r   r   
is_integerrp   )r7   rI   second_keywordr   r   r   system   s&   

r   c                 C   s   t | dkrdS g }t| } | r=| d}|jdv r#|d|jf qt||}|dur;|d dkr;|d|d f | st |dkrH|d t |dkrP|S dS )	z#``negative`` descriptor validation.r   Nr   rQ   r   rQ   ra   r   )rQ    )rY   listpopr   rG   r'   r   r7   r4   ry   rK   ra   r   r   r   negative   s$   


	
r   prefixrJ   c                 C   s\   t | dkrdS | \}|jdv rd|jfS t||}|dur*|d dkr,d|d fS dS dS )z1``prefix`` and ``suffix`` descriptors validation.r   Nr   rQ   r   ra   )rY   r   r'   r   rd   r   r   r   prefix_suffix  s   


r   c                 C   s   t | dkrt| }|dkrdS dS t | dkrXg }t| D ]'\}}|jdkr7|jdkr7||r2tnt  q|jdkrE|jrE||j qt |dkrZ|d |d kr\t	|S dS dS dS )	z ``range`` descriptor validation.r   autor   r   infiniterm   r   N)
rY   r   	enumerater   r'   rG   r   r   rp   tuple)r7   rI   ry   irK   r   r   r   range  s"   r   c                 C   s   t | dkrSddg}| D ]>}|jdkr'|jr&|jdkr&|d du r&|j|d< n|jdv r3d|jf|d< t||}|durJ|d dkrJd|d f|d< qd|vrUt|S dS dS )	z``pad`` descriptor validation.r   Nrm   r   r   rQ   r   ra   )rY   r   r   r'   rp   r   r   r   r   r   r   pad-  s"   



r   c                 C   s   t | }|dkr
|S dS )z#``fallback`` descriptor validation.r   N)r
   )rK   r   r   r   r   fallback@  s   r   c                 C   sh   g }| D ]+}|j dv r|d|jf qt||}|dur-|d dkr-|d|d f q dS t|S )z"``symbols`` descriptor validation.r   rQ   Nr   ra   r   )r   rG   r'   r   r   r   r   r   r   symbolsI  s   

r   c                 C   s^   g }t | D ]$}tt||}|du r dS |r%|d d |d kr% dS || qt|S )z+``additive-symbols`` descriptor validation.Nr^   r   )r   r   r   rG   r   )r7   r4   resultspartr9   r   r   r   additive_symbolsY  s   r   )NF)F)*__doc__mathr   r-   loggerr   r   r   utilsr   r	   r
   r   r   r   r   r   r   r   r*   r)   r   r!   r<   r6   rO   r]   re   rj   rq   rt   ru   r{   r|   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sp    0
&"











