o
    %e*                     @   s  d Z ddlmZ ddl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 dd	lmZ i i 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'd(d) Z ed'ddd*d+ Z!ed'd,dded'd-ddd.d/ Z"ed'ed0d1 Z#ed'ddd2d3 Z$ed'ed4d5 Z%ed'ddd6d7 Z&ed'ddd8d9 Z'dS )<z,Validate descriptors used for some at-rules.    )infN   )LOGGER   )
InvalidValuescomma_separated_listget_custom_identget_keywordget_single_keywordget_urlremove_whitespacesingle_keywordsingle_tokensplit_on_comma   )
properties)	font-facecounter-stylec                   @      e Zd ZdZdZdS )NoneFakeTokenidentnoneN__name__
__module____qualname__typelower_value r   r   X/var/www/html/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}z-|jt|  vrtdt|  |j }|jr/|||}n||}|du r9t|j|ff}W n0 typ } z$t	d|jt
|j|j|j|jrc|jd rc|jd nd W Y d}~qd}~ww |D ]\}	}|	dd|fV  qsq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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   r1   r)   r*   )r7   r(   descriptor_namer2   r*   r   r   	decoratorO   s   zdescriptor.<locals>.decoratorr   )r2   r=   r*   r>   r   r<   r   r5   C   s   r5   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   r1   getattrr   appenditems)r6   keywordsuffixtokenfeaturesfeaturefunction_namer   r   r   expand_font_variant]   s>   rN   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   .0rJ   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'   rQ   r   r   r   rU      s    N)rF   lenr   r'   alljoin)r6   allow_spacesr   rS   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   Nr7   formatlocalT)rZ   r   urlr   )rW   r   
lower_namer[   	argumentsr   r6   r3   rJ   r_   r   r   r   src   s   
rc   c                 C      | dv S )z%``font-style`` descriptor validation.)r"   italicobliquer   rH   r   r   r   
font_style      rh   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)rJ   rH   r   r   r   font_weight   s   
ro   c                 C   rd   )z'``font-stretch`` descriptor validation.)	zultra-condensedzextra-condensed	condensedzsemi-condensedr"   zsemi-expandedexpandedzextra-expandedzultra-expandedr   rg   r   r   r   font_stretch   ri   rr   c                 C   s
   t | S )z0``font-feature-settings`` descriptor validation.)r   font_feature_settings)r6   r   r   r   rs      s   
rs   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)rW   r	   rN   rF   r   validate_non_shorthandr   )r6   rH   valuesr(   
sub_tokensr   r   r   font_variant   s   ry   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   rk   )cyclicrB   
alphabeticsymbolicadditive)rW   r	   r   
is_integerrn   )r6   rH   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   rP   r   rP   r_   r   )rP    )rW   listpopr   rF   r'   r   r6   r3   rw   rJ   r_   r   r   r   negative   s$   


	
r   prefixrI   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   rP   r   r_   )rW   r   r'   r   rb   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   infiniterk   r   N)
rW   r
   	enumerater   r'   rF   r   r   rn   tuple)r6   rH   rw   irJ   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   Nrk   r   r   rP   r   r_   )rW   r   r   r'   rn   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   )rJ   r   r   r   r   fallback3  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   rP   Nr   r_   r   )r   rF   r'   r   r   r   r   r   r   symbols<  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   rF   r   )r6   r3   resultspartr8   r   r   r   additive_symbolsL  s   r   )NF)F)(__doc__mathr   r,   loggerr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r   r)   r   r!   r;   r5   rN   r[   rc   rh   ro   rr   rs   ry   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sf    0
%"











