a
    [Xh+                     @   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                   @   s   e Zd ZdZdZdS )NoneFakeTokenidentnoneN__name__
__module____qualname__typeZlower_value r   r   j/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/site-packages/weasyprint/css/validation/descriptors.pyr      s   r   c                   @   s   e Zd ZdZdZdS )NormalFakeTokenr   normalNr   r   r   r   r   r      s   r   c           
      c   s&  |D ]}|j dks|jrqt|j}zj|jtv r8W qn|jt|  vrNtdt|  |j }|jrn|||}n||}|du rt|j|ff}W nl ty } zTt	
d|jt|j|j|j|jr|jd r|jd nd W Y d}~qW Y d}~n
d}~0 0 |D ]\}	}|	dd|fV  qqdS )	zFilter unsupported names and values for descriptors.

    Log a warning for every ignored descriptor.

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

    Zdeclarationzdescriptor not supportedNzIgnored `%s:%s` at %d:%d, %s.r   zinvalid value-_)r   Z	importantr   valuenameNOT_PRINT_MEDIADESCRIPTORSr   wants_base_urlr   warningtinycss2	serializeZsource_lineZsource_columnargsreplace)
rulebase_urlZdescriptors
descriptortokensfunctionr"   resultexcZ	long_namer   r   r   preprocess_descriptors!   s4    


"r3   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s0J || _| t |< | S )z(Add ``function`` to the ``DESCRIPTORS``.Nr!   r    )r   r+   r%   r&   )r0   r#   descriptor_namer,   r&   r   r   	decoratorS   s    zdescriptor.<locals>.decoratorr   )r,   r5   r&   r6   r   r4   r   r.   G   s    r.   c                 c   s   t | }|dv rDdD ]}|tgfV  q|dkr2tnt}d|gfV  ng g g g g g d}| D ]Z}t|}|dkrrt|D ]8}d|dd }tt||grv|| |  qZqvtqZ|	 D ]\}} | rd| | fV  qd S )	N)r   r   )z-alternatesz-capsz-east-asianz-numericz	-positionr   z
-ligatures)Z
alternatesZcapsz
east-asianZ	ligaturesnumericpositionZfont_variant_r    r!   )
r   r   r   r   r   r+   getattrr   appenditems)r/   keywordsuffixtokenfeaturesfeatureZfunction_namer   r   r   expand_font_varianta   s4    rA   r   c                    sj   dg |r  d t| dkr8| d jdkr8| d jS | rft fdd| D rfdd	d | D S d
S )z&``font-family`` descriptor validation.r   
whitespacer   r   stringc                 3   s   | ]}|j  v V  qd S )Nr   .0r>   Zallowed_typesr   r   	<genexpr>       zfont_family.<locals>.<genexpr> c                 s   s   | ]}|j d kr|jV  qdS )r   N)r   r"   rE   r   r   r   rH      s   N)r:   lenr   r"   alljoin)r/   allow_spacesr   rG   r   font_family   s    


rO   T)r&   c                 C   s   t | dv r| dd | d  } }|jdkrL|jdkrL| dd | d  } }|jdkrr|jdkrrdt|jddfS t||}|dur|d	 d
kr|d S dS )z``src`` descriptor validation.)r   r   Nr0   formatlocalT)rN   r   urlr   )rK   r   Z
lower_namerO   	argumentsr   r/   r-   r>   rS   r   r   r   src   s    
rV   c                 C   s   | dv S )z%``font-style`` descriptor validation.)r   ZitalicZobliquer   r<   r   r   r   
font_style   s    rX   c                 C   s<   t | }|dv r|S | jdkr8| jdur8| jdv r8| jS dS )z&``font-weight`` descriptor validation.)r   ZboldnumberN)	d      i,  i  i  iX  i  i   i  )r   r   	int_value)r>   r<   r   r   r   font_weight   s    
r]   c                 C   s   | dv S )z'``font-stretch`` descriptor validation.)	zultra-condensedzextra-condensedZ	condensedzsemi-condensedr   zsemi-expandedexpandedzextra-expandedzultra-expandedr   rW   r   r   r   font_stretch   s    r_   c                 C   s
   t | S )z0``font-feature-settings`` descriptor validation.)r   font_feature_settings)r/   r   r   r   r`      s    r`   c              	   C   sv   t | dkr$t| d }|dv r$g S g }t| D ]@\}}z |tj|d| dd W q0 tyn   Y  dS 0 q0|S )z'``font-variant`` descriptor validation.r   r   )r   r   Zinheritzfont-variantT)requiredN)rK   r   rA   r:   r   Zvalidate_non_shorthandr   )r/   r<   valuesr#   Z
sub_tokensr   r   r   font_variant   s    rc   c                 C   s   | j dkr| S dS )z(``unicode_range`` descriptor validation.zunicode-rangeNrD   )r>   r   r   r   unicode_range   s    
rd   r   c                 C   s   t | dkrdS t| d }|dkrLt | dkrt| d }|r||dfS n`|dkrt | dkrddS | d jdkr| d jrdd| d jfS nt | dkr|d	v rd|dfS dS )
z!``system`` descriptor validation.r   Nr   Zextendsr   fixed)Nre   r   rY   )Zcyclicr7   Z
alphabeticZsymbolicZadditive)rK   r   r   
is_integerr\   )r/   r<   Zsecond_keywordr   r   r   system   s    rg   c                 C   s   t | dkrdS g }t| } | rx| d}|jdv rF|d|jf qt||}|dur|d dkr|d|d f qt |dkr|d t |dkr|S dS )	z#``negative`` descriptor validation.r   Nr   rC   r   rC   rS   r   )rC    )rK   listpopr   r:   r"   r   r/   r-   rb   r>   rS   r   r   r   negative   s     



rm   prefixr=   c                 C   sX   t | dkrdS | \}|jdv r*d|jfS t||}|durT|d dkrTd|d fS dS )z1``prefix`` and ``suffix`` descriptors validation.r   Nrh   rC   r   rS   )rK   r   r"   r   rU   r   r   r   prefix_suffix  s    


ro   c                 C   s   t | dkr"t| }|dkrdS nt | dkrg }t| D ]N\}}|jdkrl|jdkrl||rbtnt  q:|jdkr:|jr:||j q:t |dkr|d |d krt	|S dS )	z ``range`` descriptor validation.r   autor   r   ZinfiniterY   r   N)
rK   r   	enumerater   r"   r:   r   rf   r\   tuple)r/   r<   rb   ir>   r   r   r   range  s    rt   c                 C   s   t | dkrddg}| D ]|}|jdkrN|jrf|jdkrf|d du rf|j|d< n|jdv rfd|jf|d< t||}|dur|d dkrd|d f|d< qd|vrt|S dS )	z``pad`` descriptor validation.r   NrY   r   rh   rC   r   rS   )rK   r   rf   r"   r\   r   rr   rl   r   r   r   pad-  s    


ru   c                 C   s   t | }|dkr|S dS )z#``fallback`` descriptor validation.r   N)r
   )r>   r   r   r   r   fallback@  s    rv   c                 C   sh   g }| D ]V}|j dv r(|d|jf qt||}|durZ|d dkrZ|d|d f q dS t|S )z"``symbols`` descriptor validation.rh   rC   Nr   rS   r   )r   r:   r"   r   rr   rl   r   r   r   symbolsI  s    

rw   c                 C   s^   g }t | D ]H}tt||}|du r, dS |rJ|d d |d krJ dS || qt|S )z+``additive-symbols`` descriptor validation.NrP   r   )r   ru   r   r:   rr   )r/   r-   resultspartr1   r   r   r   additive_symbolsY  s    rz   )NF)F)*__doc__mathr   r(   loggerr   ri   r   utilsr   r	   r
   r   r   r   r   r   r   r   r%   r$   r   r   r3   r.   rA   rO   rV   rX   r]   r_   r`   rc   rd   rg   rm   ro   rt   ru   rv   rw   rz   r   r   r   r   <module>   sn   0&
"











