a
    Qh+                     @   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__typelower_value r   r   ^/var/www/sistema_ama/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.

    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!   s4    


"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s0J || _| t |< | S )z(Add ``function`` to the ``DESCRIPTORS``.Nr#   r"   )r   r0   r(   r)   )r6   r&   descriptor_namer1   r)   r   r   	decoratorS   s    zdescriptor.<locals>.decoratorr   )r1   r<   r)   r=   r   r;   r   r4   G   s    r4   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
alternatescapsz
east-asianZ	ligaturesnumericpositionZfont_variant_r"   r#   )
r   r   r   r   r   r0   getattrr   appenditems)r5   keywordsuffixtokenfeaturesfeaturefunction_namer   r   r   expand_font_varianta   s4    rJ   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   .0rF   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%   rN   r   r   r   rQ      s   N)rB   lenr   r%   alljoin)r5   allow_spacesr   rP   r   font_family   s    


rX   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   Nr6   formatlocalT)rW   r   urlr   )rT   r   
lower_namerX   	argumentsr   r5   r2   rF   r\   r   r   r   src   s    
r`   c                 C   s   | dv S )z%``font-style`` descriptor validation.)r    italicobliquer   rD   r   r   r   
font_style   s    rd   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    boldnumberN)	d      i,  i  i  iX  i  i   i  )r   r   	int_value)rF   rD   r   r   r   font_weight   s    
rj   c                 C   s   | dv S )z'``font-stretch`` descriptor validation.)	zultra-condensedzextra-condensed	condensedzsemi-condensedr    zsemi-expandedexpandedzextra-expandedzultra-expandedr   rc   r   r   r   font_stretch   s    rm   c                 C   s
   t | S )z0``font-feature-settings`` descriptor validation.)r   font_feature_settings)r5   r   r   r   rn      s    rn   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   inheritzfont-variantT)requiredN)rT   r   rJ   rB   r   validate_non_shorthandr   )r5   rD   valuesr&   Z
sub_tokensr   r   r   font_variant   s    rs   c                 C   s   | j dkr| S dS )z(``unicode_range`` descriptor validation.zunicode-rangeNrM   )rF   r   r   r   unicode_range   s    
rt   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   extendsr   fixed)Nrv   r   rf   )cyclicr?   
alphabeticsymbolicadditive)rT   r   r   
is_integerri   )r5   rD   Zsecond_keywordr   r   r   system   s    r|   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   rL   r   rL   r\   r   )rL    )rT   listpopr   rB   r%   r   r5   r2   rr   rF   r\   r   r   r   negative   s     



r   prefixrE   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   Nr}   rL   r   r\   )rT   r   r%   r   r_   r   r   r   prefix_suffix  s    


r   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   infiniterf   r   N)
rT   r   	enumerater   r%   rB   r   r{   ri   tuple)r5   rD   rr   irF   r   r   r   range  s    r   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   Nrf   r   r}   rL   r   r\   )rT   r   r{   r%   ri   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
   )rF   r   r   r   r   fallback@  s    r   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.r}   rL   Nr   r\   r   )r   rB   r%   r   r   r   r   r   r   symbolsI  s    

r   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.NrY   r   )r   r   r   rB   r   )r5   r2   resultspartr7   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:   r4   rJ   rX   r`   rd   rj   rm   rn   rs   rt   r|   r   r   r   r   r   r   r   r   r   r   r   <module>   sn   0&
"











