a
    ¥Q•hû ã                   @   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mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z! d	Z"e#ƒ Z$e#ƒ Z%i Z&G d
d„ deƒZ'�d~dd„Z(�ddd„Z)e(ƒ ee dd„ ƒƒƒZ*e(dƒe(dƒe(dƒe(dƒe(dƒe(ddd�e(dƒe!dd„ ƒƒƒƒƒƒƒƒZ+e(ƒ e!dd „ ƒƒZ,e(ƒ e d!d"„ ƒƒZ-e(ƒ e d#d$„ ƒƒZ.e(d%ƒe!d&d%„ ƒƒZ/e(d'dd(�ee!d)d*„ ƒƒƒZ0e(d+dd(�e!d,d-„ ƒƒZ1e(ƒ d.d/„ ƒZ2e(ƒ ed0d1„ ƒƒZ3e(ƒ ed2d3„ ƒƒZ4e(ƒ ed4d5„ ƒƒZ5e(ƒ ed6d7„ ƒƒZ6e(d8ƒe(d9ƒee d:d;„ ƒƒƒƒZ7e(ƒ d<d=„ ƒZ8e(d>ƒe(d?ƒe(d@ƒe(dAƒdBdC„ ƒƒƒƒZ9e(dDƒe(dEƒe(dFƒe(dGƒe(dHdd�e dIdJ„ ƒƒƒƒƒƒZ:e(dKƒe(dLƒe dMdN„ ƒƒƒZ;e(ƒ e dOdP„ ƒƒZ<e(ƒ e dQdR„ ƒƒZ=e(ƒ e!dSdT„ ƒƒZ>e(dUdd�e dVdW„ ƒƒZ?e(dd�e!dXdY„ ƒƒZ@e(dd�e dZd[„ ƒƒZAe(dd�e!d\d]„ ƒƒZBe(d^dd�e(d_dd�e(d`dd�e(dadd�e!dbdc„ ƒƒƒƒƒZCe(dd�ddde„ ƒZDe(dfƒe dgdh„ ƒƒZEe(diƒe(djƒe(dkƒe(dlƒe(dmdd�e(dnƒe!dodp„ ƒƒƒƒƒƒƒZFe(dqdd(�e(drdd(�e!dsdt„ ƒƒƒZGe(duƒe(dvƒdwdx„ ƒƒZHe(dyƒe(dzƒd{d|„ ƒƒZIe(d}ƒe(d~ƒdd€„ ƒƒZJe(d�ƒe(d‚ƒdƒd„„ ƒƒZKe(ƒ e d…d†„ ƒƒZLe(dd�e!d‡dˆ„ ƒƒZMe(dd�e d‰dŠ„ ƒƒZNe(ƒ e d‹dŒ„ ƒƒZOe(ƒ e d�dŽ„ ƒƒZPe(ƒ e d�d�„ ƒƒZQe(ƒ e!d‘d’„ ƒƒZRe(dd(�d“d”„ ƒZSe(ƒ d•d–„ ƒZTe(ƒ d—d˜„ ƒZUe(ƒ d™dš„ ƒZVd›dœ„ ZWe(d�ƒe(džƒe(dŸƒe(d ƒe(d¡ƒe(d¢ƒe(d£ƒe(d¤ƒe(d¥ƒe!d¦d§„ ƒƒƒƒƒƒƒƒƒƒZXe(d¨ƒe(d©ƒe!dªd«„ ƒƒƒZYe(d¬dd�e(d­dd�e!d®d¯„ ƒƒƒZZe(dd�e d°d±„ ƒƒZ[e(ƒ e d²d³„ ƒƒZ\e(ƒ d´dµ„ ƒZ]e(d¶ƒe d·d¸„ ƒƒZ^e(ƒ ed¹dº„ ƒƒZ_e(ƒ e d»d¼„ ƒƒZ`e(ƒ e!d½d¾„ ƒƒZae(ƒ d¿dÀ„ ƒZbe(ƒ e dÁdÂ„ ƒƒZce(ƒ e dÃdÄ„ ƒƒZde(ƒ dÅdÆ„ ƒZee(ƒ dÇdÈ„ ƒZfe(ƒ e dÉdÊ„ ƒƒZge(ƒ dËdÌ„ ƒZhe(ƒ dÍdÎ„ ƒZie(ƒ e!dÏdÐ„ ƒƒZje(ƒ e dÑdÒ„ ƒƒZke(ƒ e dÓdÔ„ ƒƒZle(ƒ e!dÕdÖ„ ƒƒZme(ƒ e d×dØ„ ƒƒZne(dd�e!dÙdÚ„ ƒƒZoe(dÛƒe(dÜƒe!dÝdÞ„ ƒƒƒZpe(ƒ e!dßdà„ ƒƒZqe(ƒ e!dádâ„ ƒƒZre(ƒ e dãdä„ ƒƒZse(ƒ e!dådæ„ ƒƒZte(dçƒe(dèƒe!dédê„ ƒƒƒZue(dëƒe(dìƒe(díƒe(dîƒe!dïdð„ ƒƒƒƒƒZve(dñƒe(dòƒe!dódô„ ƒƒƒZwe(ƒ e!dõdö„ ƒƒZxe(ƒ e!d÷dø„ ƒƒZye(dùƒe(dúƒe!dûdü„ ƒƒƒZze(dd�e!dýdþ„ ƒƒZ{e(ƒ e dÿ�d „ ƒƒZ|e(ƒ e �d�d„ ƒƒZ}e(ƒ e!�d�d„ ƒƒZ~e(ƒ �d�d„ ƒZe(ƒ e �d�d„ ƒƒZ€e(ƒ e �d	�d
„ ƒƒZ�e(ƒ e �d�d„ ƒƒZ‚e(ƒ �d�d„ ƒZƒe(ƒ e �d�d„ ƒƒZ„e(ƒ e!�d�d„ ƒƒZ…e(ƒ e!�d�d„ ƒƒZ†e(ƒ e �d�d„ ƒƒZ‡e(ƒ e!�d�d„ ƒƒZˆe(ƒ e �d�d„ ƒƒZ‰e(ƒ e �d�d„ ƒƒZŠe(ƒ e �d�d„ ƒƒZ‹e(ƒ e �d�d „ ƒƒZŒe(ƒ e!�d!�d"„ ƒƒZ�e(ƒ e �d#�d$„ ƒƒZŽe(�d%ƒe(�d&ƒe!�d'�d(„ ƒƒƒZ��d)�d*„ Z��d+�d,„ Z‘�d-�d.„ Z’�d/�d0„ Z“�d1�d2„ Z”e(�d3ƒe(�d4ƒ�d5�d6„ ƒƒZ•e(ƒ �d7�d8„ ƒZ–e(�d9ƒe(�d:ƒ�d;�d<„ ƒƒZ—e(ƒ �d=�d>„ ƒZ˜e(�d?ƒe(�d@ƒe(�dAƒe(�dBƒ�dC�dD„ ƒƒƒƒZ™e(ƒ e �dE�dF„ ƒƒZše(ƒ �dG�dH„ ƒZ›e(ƒ �dI�dJ„ ƒZœe(ƒ �dK�dL„ ƒZ�e(ƒ �dM�dN„ ƒZže(ƒ �dO�dP„ ƒZŸe(ƒ �dQ�dR„ ƒZ e(ƒ e!�dS�dT„ ƒƒZ¡e(dd�e �dU�dV„ ƒƒZ¢e(dd��dW�dX„ ƒZ£e(dd��dY�dZ„ ƒZ¤e(d�d[�e!�d\�d]„ ƒƒZ¥e(dd�d^�e!�d_�d`„ ƒƒZ¦e(ƒ e!�da�db„ ƒƒZ§e(dd�e!�dc�dd„ ƒƒZ¨e(dd�e!�de�df„ ƒƒZ©e(dd�e!�dg�dh„ ƒƒZªe(dd��di�dj„ ƒZ«e(d�d[�e!�dk�dl„ ƒƒZ¬e(dd�dm��dn�do„ ƒZ­e(dd�e!�dp�dq„ ƒƒZ®e(dd�e �dr�ds„ ƒƒZ¯e(dd�e �dt�du„ ƒƒZ°e(dd�e �dv�dw„ ƒƒZ±e(dd�dm�e�dx�dy„ ƒƒZ²e(ƒ �dz�d{„ ƒZ³e(ƒ e!�d|�d}„ ƒƒZ´dS (€  z^Validate properties.

See https://www.w3.org/TR/CSS21/propidx.html and various CSS3 modules.

é    )Úinf)Úparse_component_value_list©Úparse_coloré   )Úcomputed_values)ÚKNOWN_PROPERTIESÚZERO_PIXELSÚ	Dimension)ÚInvalidValuesÚPendingÚcheck_var_functionÚcomma_separated_listÚ	get_angleÚget_content_listÚget_content_list_tokenÚget_custom_identÚ	get_imageÚget_keywordÚ
get_lengthÚget_resolutionÚget_single_keywordÚget_urlÚparse_2d_positionÚparse_functionÚparse_positionÚremove_whitespaceÚsingle_keywordÚsingle_tokenz-weasy-c                   @   s   e Zd ZdZdd„ ZdS )ÚPendingPropertyz>Property with validation done when defining calculated values.c                 C   s   t || jƒd d S )Nr   é   )Úvalidate_non_shorthandÚname)ÚselfÚtokensÚ
wanted_key© r&   ú]/var/www/sistema_ama/venv/lib/python3.9/site-packages/weasyprint/css/validation/properties.pyÚvalidate$   s    zPendingProperty.validateN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r(   r&   r&   r&   r'   r   "   s   r   NFc                    s   ‡ ‡‡‡fdd„}|S )u@  Decorator adding a function to the ``PROPERTIES``.

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

    :param proprietary:
        Proprietary (vendor-specific, non-standard) are prefixed: anchors can
        for example be set using ``-weasy-anchor: attr(id)``.
        See https://www.w3.org/TR/CSS/#proprietary
    :param unstable:
        Mark properties that are defined in specifications that didn't reach
        the Candidate Recommandation stage. They can be used both
        vendor-prefixed or unprefixed.
        See https://www.w3.org/TR/CSS/#unstable-syntax
    :param wants_base_url:
        The function takes the stylesheetâ€™s base URL as an additional
        parameter.

    c                    sj   ˆ du r| j  dd¡}nˆ }|tv s,J |ƒ‚|tvs<J |ƒ‚ˆ| _| t|< ˆrXt |¡ ˆrft |¡ | S )z'Add ``function`` to the ``PROPERTIES``.NÚ_ú-)r)   Úreplacer   Ú
PROPERTIESÚwants_base_urlÚPROPRIETARYÚaddÚUNSTABLE)Úfunctionr"   ©Úproperty_nameÚproprietaryÚunstabler1   r&   r'   Ú	decorator@   s    

zproperty.<locals>.decoratorr&   )r7   r8   r9   r1   r:   r&   r6   r'   Úproperty*   s    r;   c                 C   s°   |  d¡r|| ffS |s(|tvr(tdƒ‚|s<|tvr<tdƒ‚t| }| D ] }t|ƒrH|t| |ƒff  S qHt| ƒ}|dv r€|}n&|jr’|| |ƒ}n|| ƒ}|du r¦t‚||ffS )z'Validator for non-shorthand properties.z--zunknown propertyzproperty not supported yet)ÚinitialÚinheritN)Ú
startswithr   r   r0   r   r   r   r1   )r$   r"   Úbase_urlÚrequiredr5   ÚtokenÚkeywordÚvaluer&   r&   r'   r!   S   s&    

r!   c                 C   s   | dv S )z.``background-attachment`` property validation.)ÚscrollÚfixedÚlocalr&   ©rB   r&   r&   r'   Úbackground_attachmentr   s    rH   zbackground-colorzborder-top-colorzborder-right-colorzborder-bottom-colorzborder-left-colorzcolumn-rule-colorT)r9   ztext-decoration-colorc                 C   s   t | ƒS ©Nr   ©rA   r&   r&   r'   Úother_colorsz   s    	rK   c                 C   s   t | ƒdkrdS t| ƒS d S )NÚinvertÚcurrentcolor)r   r   rJ   r&   r&   r'   Úoutline_color†   s    rN   c                 C   s   | dv S )N)ÚseparateÚcollapser&   rG   r&   r&   r'   Úborder_collapse�   s    rQ   c                 C   s   | dv S )z$``empty-cells`` property validation.)ÚshowZhider&   rG   r&   r&   r'   Úempty_cells•   s    rS   Úcolorc                 C   s   t | ƒ}|dkrdS |S dS )z0``*-color`` and ``color`` properties validation.rM   r=   Nr   )rA   Úresultr&   r&   r'   rT   œ   s    zbackground-image)r1   c                 C   s   t | ƒdkrdS t| |ƒS ©NÚnone©rW   N©r   r   ©rA   r?   r&   r&   r'   Úbackground_image§   s    r[   zlist-style-imagec                 C   sN   t | ƒdkrdS t| |ƒ}|rJ|d dkrJ|d d dkrJd|d d fS dS )z)``list-style-image`` property validation.rW   rX   r   Úurlr    ÚexternalN)r   r   )rA   r?   Ú
parsed_urlr&   r&   r'   Úlist_style_image°   s    
r_   c                 C   s    t | ƒdkr| dd… } t| ƒS )z)``transform-origin`` property validation.é   Nr   )Úlenr   ©r$   r&   r&   r'   Útransform_origin¼   s    rc   c                 C   s   t | ƒS )z,``background-position`` property validation.©r   rb   r&   r&   r'   Úbackground_positionÅ   s    re   c                 C   s   t | ƒS )z(``object-position`` property validation.rd   rb   r&   r&   r'   Úobject_positionÌ   s    rf   c                 C   s\   t tt| ƒƒ}|dkrdS |dkr&dS |dv r6|d S t|ƒdkrXtdd„ |D ƒƒrX|S d	S )
z*``background-repeat`` property validation.)zrepeat-x)Úrepeatú	no-repeat)zrepeat-y)rh   rg   ))rh   )rg   )Úspace)Úroundr   c                 s   s   | ]}|d v V  qdS ))rh   rg   ri   rj   Nr&   )Ú.0Úkr&   r&   r'   Ú	<genexpr>Þ   s   ÿz$background_repeat.<locals>.<genexpr>N)ÚtupleÚmapr   ra   Úall©r$   Úkeywordsr&   r&   r'   Úbackground_repeatÓ   s    þrs   c                 C   s¶   t | ƒdkrP| d }t|ƒ}|dv r(|S |dkr4dS t|ddd�}|r²|dfS nbt | ƒd	kr²g }| D ]8}t|ddd�}|r†| |¡ qdt|ƒdkrd| d¡ qdt |ƒd	kr²t|ƒS d
S )z#Validation for ``background-size``.r    r   )ÚcontainÚcoverÚauto)rv   rv   FT©ÚnegativeÚ
percentager   N)ra   r   r   Úappendrn   )r$   rA   rB   ÚlengthÚvaluesr&   r&   r'   Úbackground_sizeä   s(    
r}   zbackground-clipzbackground-originc                 C   s   | dv S )z\Validation for the ``<box>`` type used in ``background-clip``
    and ``background-origin``.)ú
border-boxúpadding-boxúcontent-boxr&   rG   r&   r&   r'   Úboxþ   s    r�   c                 C   sJ   dd„ | D ƒ}t |ƒrFt|ƒdkr2|d |d fS t|ƒdkrFt|ƒS dS )z,Validator for the `border-spacing` property.c                 S   s   g | ]}t |d d�‘qS ©F©rx   ©r   ©rk   rA   r&   r&   r'   Ú
<listcomp>  ó    z"border_spacing.<locals>.<listcomp>r    r   r   N©rp   ra   rn   ©r$   Úlengthsr&   r&   r'   Úborder_spacing  s    r‹   zborder-top-right-radiuszborder-bottom-right-radiuszborder-bottom-left-radiuszborder-top-left-radiusc                 C   sJ   dd„ | D ƒ}t |ƒrFt|ƒdkr2|d |d fS t|ƒdkrFt|ƒS dS )z/Validator for the `border-*-radius` properties.c                 S   s   g | ]}t |d dd�‘qS )FTrw   r„   r…   r&   r&   r'   r†     s   z(border_corner_radius.<locals>.<listcomp>r    r   r   Nrˆ   r‰   r&   r&   r'   Úborder_corner_radius  s    ÿrŒ   zborder-top-stylezborder-right-stylezborder-left-stylezborder-bottom-stylezcolumn-rule-stylec                 C   s   | dv S )z)``border-*-style`` properties validation.)
rW   ÚhiddenÚdottedÚdashedÚdoubleÚinsetÚoutsetÚgrooveÚridgeÚsolidr&   rG   r&   r&   r'   Úborder_style"  s    r–   zbreak-beforezbreak-afterc                 C   s   | dv S )z;``break-before`` and ``break-after`` properties validation.)rv   Úavoidú
avoid-pageÚpageÚleftÚrightZrectoZversoúavoid-columnÚcolumnÚalwaysr&   rG   r&   r&   r'   Úbreak_before_after.  s    rŸ   c                 C   s   | dv S )z%``break-inside`` property validation.)rv   r—   r˜   rœ   r&   rG   r&   r&   r'   Úbreak_inside7  s    r    c                 C   s   | dv S )z-``box-decoration-break`` property validation.)ÚsliceÚcloner&   rG   r&   r&   r'   Úbox_decoration_break>  s    r£   c                 C   s,   | j dkrd| jfS t| ƒ}|dv r(|S dS )z%``box-ellipsis`` property validation.Ústring©rW   rv   N)ÚtyperC   r   ©rA   rB   r&   r&   r'   Úblock_ellipsisE  s
    

r¨   Úcontinuec                 C   s   | dv S )z!``continue`` property validation.)rv   Údiscardr&   rG   r&   r&   r'   Ú	continue_Q  s    r«   c                 C   s<   | j dkr$| jd ur$| jdkr$| jS t| ƒ}|dkr8|S d S )NÚnumberr    rW   ©r¦   Ú	int_valuer   r§   r&   r&   r'   Ú	max_linesX  s    
r¯   c                 C   s   | dv S )z%``margin-break`` property validation.)rv   Úkeeprª   r&   rG   r&   r&   r'   Úmargin_breakc  s    r±   c                 C   s"   | j dkr| jdkrdS | jS dS )z``page`` property validation.Úidentrv   N)r¦   Úlower_valuerC   rJ   r&   r&   r'   r™   j  s    
r™   z
bleed-leftzbleed-rightz	bleed-topzbleed-bottomc                 C   s    t | ƒ}|dkrdS t| ƒS dS )z``bleed`` property validation.rv   N©r   r   r§   r&   r&   r'   Úbleedr  s    rµ   c                 C   sj   t | ƒdkr4tdd„ | D ƒƒ}d|v rfd|v rf|S n2t | ƒdkrft| d ƒ}|dv rZ|fS |d	krfd
S dS )z``marks`` property validation.r   c                 s   s   | ]}t |ƒV  qd S rI   ©r   r…   r&   r&   r'   rm   „  r‡   zmarks.<locals>.<genexpr>ÚcropÚcrossr    r   )r·   r¸   rW   r&   N)ra   rn   r   )r$   rr   rB   r&   r&   r'   Úmarks€  s    r¹   zoutline-stylec                 C   s   | dv S )z(``outline-style`` properties validation.)	rW   rŽ   r�   r�   r‘   r’   r“   r”   r•   r&   rG   r&   r&   r'   Úoutline_style�  s    rº   zborder-top-widthzborder-right-widthzborder-left-widthzborder-bottom-widthzcolumn-rule-widthzoutline-widthc                 C   s,   t | dd�}|r|S t| ƒ}|dv r(|S dS )z=Border, column rule and outline widths properties validation.Frƒ   )ÚthinÚmediumÚthickN©r   r   ©rA   r{   rB   r&   r&   r'   Úborder_width—  s    	rÀ   zborder-image-sourcezmask-border-sourcec                 C   s   t | ƒdkrdS t| |ƒS rV   rY   rZ   r&   r&   r'   Úborder_image_source¨  s    rÁ   zborder-image-slicezmask-border-slicec                 C   sÔ   g }d}t | ƒD ]’\}}|jdkr@|jdkr@| t|jdƒ¡ q|jdkrh|jdkrh| t|jd ƒ¡ qt|ƒdkrœ|sœ|dt| ƒd fv rœd}| d¡ q d S qdt|ƒt|ƒ   krÄd	krÐn nt|ƒS d S )
NFry   r   ú%r¬   Úfillr    Té   )	Ú	enumerater¦   rC   rz   r
   r   ra   Úintrn   )r$   r|   rÃ   ÚirA   r&   r&   r'   Úborder_image_slice±  s    $$rÈ   zborder-image-widthzmask-border-widthc                 C   sš   g }| D ]h}t |ƒdkr$| d¡ q|jdkrL|jdkrL| t|jd ƒ¡ qt|ddd� }rj| |¡ q d S qdt|ƒ  krŠdkr–n nt|ƒS d S )	Nrv   r¬   r   FTrw   r    rÄ   )r   rz   r¦   rC   r
   r   ra   rn   ©r$   r|   rA   r{   r&   r&   r'   Úborder_image_widthÆ  s    rÊ   zborder-image-outsetzmask-border-outsetc                 C   s€   g }| D ]N}|j dkr4|jdkr4| t|jd ƒ¡ qt|dd� }rP| |¡ q d S qdt|ƒ  krpdkr|n nt|ƒS d S )Nr¬   r   Frƒ   r    rÄ   )r¦   rC   rz   r
   r   ra   rn   rÉ   r&   r&   r'   Úborder_image_outsetÙ  s    rË   zborder-image-repeatzmask-border-repeatc                 C   sF   dt | ƒ  krdkrBn n&tdd„ | D ƒƒ}t|ƒh d£krB|S d S )Nr    r   c                 s   s   | ]}t |ƒV  qd S rI   r¶   r…   r&   r&   r'   rm   î  r‡   z&border_image_repeat.<locals>.<genexpr>>   rg   Ústretchrj   ri   )ra   rn   Úsetrq   r&   r&   r'   Úborder_image_repeatê  s    rÎ   c                 C   s   | dv S )N)Z	luminanceÚalphar&   rG   r&   r&   r'   Úmask_border_modeó  s    rÐ   c                 C   s,   t | dd�}|r|S t| ƒ}|dkr(|S dS )z%``column-width`` property validation.Frƒ   rv   Nr¾   r¿   r&   r&   r'   Úcolumn_widthù  s    rÑ   c                 C   s   | dv S )z$``column-span`` property validation.)rp   rW   r&   rG   r&   r&   r'   Úcolumn_span  s    rÒ   c                 C   s   | dv S )z7Validation for the ``box-sizing`` property from css3-ui)r   r~   r€   r&   rG   r&   r&   r'   Ú
box_sizing  s    rÓ   c                 C   s   | dv S )z'``caption-side`` properties validation.)ÚtopÚbottomr&   rG   r&   r&   r'   Úcaption_side  s    rÖ   c                 C   s   | dv S )z``clear`` property validation.)rš   r›   ÚbothrW   r&   rG   r&   r&   r'   Úclear  s    rØ   c                 C   sŒ   t | ƒ}|rx|\}}|dkrxt|ƒdkrxg }|D ]2}t|ƒdkrL| d¡ q0t|ƒ}|r0| |¡ q0t|ƒdkrxt|ƒS t| ƒdkrˆdS dS )z%Validation for the ``clip`` property.ÚrectrÄ   rv   r&   N)r   ra   r   rz   r   rn   )rA   r5   r"   Úargsr|   Úargr{   r&   r&   r'   Úclip!  s    rÜ   c                 C   sî   t | ƒ} g }| r|t| ƒdkr|| d jdkr|| d jdkr|| d | dd…  }} t||ƒp`t||ƒ}|rr| |¡ qzdS qq|qt| ƒdkrŒdS t| ƒdkrÎ| d jd	krÎ| d
 jdkrÎ| d
 jdkrÎ| dd
… } t| ƒ}|dv rä|fS t| |ƒS )z ``content`` property validation.r   r    Úliteralú,r   Nr`   éÿÿÿÿr¤   éþÿÿÿú/©ÚnormalrW   )	Úlistra   r¦   rC   r   r   rz   r   r   )r$   r?   Úparsed_tokensrA   Zparsed_tokenrB   r&   r&   r'   Úcontent7  s6    ÿÿÿÿÿræ   c                 C   s   t | dd�S )z*``counter-increment`` property validation.r    ©Údefault_integer©Úcounterrb   r&   r&   r'   Úcounter_incrementU  s    rë   c                 C   s   t | dd�S )z&``counter-reset`` property validation.r   rç   ré   rb   r&   r&   r'   Úcounter_reset[  s    rì   c                 C   s   t | dd�S )z$``counter-set`` property validation.r   rç   ré   rb   r&   r&   r'   Úcounter_seta  s    rí   c                 C   s¸   t | ƒdkrdS t| ƒ} t| dƒ}|s.J dƒ‚g }|dur°|jdkrHdS |j}|dv rdtd|› �ƒ‚t| dƒ}|durœ|jdkrœ|jdurœ|j}t| dƒ}n|}| ||f¡ q2t|ƒS )	zB``counter-increment`` and ``counter-reset`` properties validation.rW   r&   Nzgot an empty token listr²   )rW   r<   r=   zInvalid counter name: r¬   )	r   ÚiterÚnextr¦   rC   r   r®   rz   rn   )r$   rè   rA   ÚresultsÚcounter_nameÚintegerr&   r&   r'   rê   g  s.    


ÿÿrê   rÔ   r›   rš   rÕ   z
margin-topzmargin-rightzmargin-bottomzmargin-leftztext-underline-offsetc                 C   s(   t | dd�}|r|S t| ƒdkr$dS dS )z5``margin-*`` and various other properties validation.T©ry   rv   Nr¾   ©rA   r{   r&   r&   r'   Úlenght_precentage_or_autoƒ  s
    rõ   ÚheightÚwidthc                 C   s*   t | ddd�}|r|S t| ƒdkr&dS dS )z7Validation for the ``width`` and ``height`` properties.FTrw   rv   Nr¾   rô   r&   r&   r'   Úwidth_height–  s
    rø   z
column-gapzrow-gapc                 C   s.   t | ddd�}|r|S t| ƒ}|dkr*|S dS )z=Validation for the ``column-gap`` and ``row-gap`` properties.TF)ry   rx   rã   Nr¾   r¿   r&   r&   r'   Úgap¢  s    rù   c                 C   s   | dv S )z$``column-fill`` property validation.)rv   Úbalancer&   rG   r&   r&   r'   Úcolumn_fill¯  s    rû   c                 C   s   | dv S )z"``direction`` property validation.)ÚltrÚrtlr&   rG   r&   r&   r'   Ú	direction¶  s    rþ   c                 C   sþ   | D ]}|j dkr dS qt| ƒdkr`| d j}|dv r>|fS |dv rTt| d¡ƒS |dkr`d	S d } }}| D ]X}|j}|d
v r’|rŒ dS |}qp|dv rª|r¤ dS |}qp|dkrÂ|r¼ dS |}qp dS qp|pÐd}|pØd}|rò|dv rú|||fS n||fS dS )z ``display`` property validation.r²   Nr    r   )	rW   ztable-captionztable-row-groupz
table-cellztable-header-groupztable-footer-groupz	table-rowztable-column-groupztable-column)zinline-tablezinline-flexzinline-gridr.   zinline-block)Úinlineú	flow-root)Úblockrÿ   )Úflowr   ÚtableÚflexÚgridz	list-itemr  r  )r  r   )r¦   ra   rC   rn   Úsplit)r$   rA   rC   ÚoutsideÚinsideZ	list_itemr&   r&   r'   Údisplay½  sB    

r	  Úfloatc                 C   s   | dv S )z``float`` property validation.)rš   r›   ZfootnoterW   r&   rG   r&   r&   r'   Úfloat_ë  s    r  c                 C   sR   t | ƒdkr$| d jdkr$| d jS | rNtdd„ | D ƒƒrNd dd„ | D ƒ¡S dS )	z$``font-family`` property validation.r    r   r¤   c                 s   s   | ]}|j d kV  qdS )r²   N©r¦   r…   r&   r&   r'   rm   ø  r‡   zfont_family.<locals>.<genexpr>ú c                 s   s   | ]}|j V  qd S rI   ©rC   r…   r&   r&   r'   rm   ù  r‡   N)ra   r¦   rC   rp   Újoinrb   r&   r&   r'   Úfont_familyò  s    
r  c                 C   s   | dv S )N)rv   rã   rW   r&   rG   r&   r&   r'   Úfont_kerningü  s    r  c                 C   s(   t | ƒ}|dkr|S | jdkr$| jS d S )Nrã   r¤   ©r   r¦   rC   r§   r&   r&   r'   Úfont_language_override  s
    
r  c                    s¾   t | ƒdkr$t| d ƒ}|dv r$|S g ‰d}g }|D ]}| |¡ q4| D ]d‰ ˆ jdkr\ d S ˆ j|v r¦t‡ fdd„|D ƒƒ}t‡fdd„|D ƒƒr˜ d S ˆ ˆ j¡ qH d S qHˆrºtˆƒS d S )	Nr    r   râ   ))zcommon-ligatureszno-common-ligatures)zhistorical-ligatureszno-historical-ligatures)zdiscretionary-ligatureszno-discretionary-ligatures)Ú
contextualzno-contextualr²   c                 3   s   | ]}ˆ j |v r|V  qd S rI   r  ©rk   ÚcouplerJ   r&   r'   rm     s   z)font_variant_ligatures.<locals>.<genexpr>c                 3   s   | ]}|ˆ v V  qd S rI   r&   ©rk   rC   ©r|   r&   r'   rm   !  r‡   ©	ra   r   Úextendr¦   rC   rï   Úanyrz   rn   ©r$   rB   ZcouplesZ
all_valuesr  Zconcurrent_valuesr&   ©rA   r|   r'   Úfont_variant_ligatures  s,    

ÿr  c                 C   s   | dv S )N)rã   ÚsubÚsuperr&   rG   r&   r&   r'   Úfont_variant_position+  s    r!  c                 C   s   | dv S )N)rã   z
small-capszall-small-capszpetite-capszall-petite-capsÚunicaseztitling-capsr&   rG   r&   r&   r'   Úfont_variant_caps1  s    r#  c                    s¾   t | ƒdkr$t| d ƒ}|dkr$|S g ‰d}g }|D ]}| |¡ q4| D ]d‰ ˆ jdkr\ d S ˆ j|v r¦t‡ fdd„|D ƒƒ}t‡fdd„|D ƒƒr˜ d S ˆ ˆ j¡ qH d S qHˆrºtˆƒS d S )	Nr    r   rã   ))zlining-numszoldstyle-nums)zproportional-numsztabular-nums)zdiagonal-fractionszstacked-fractions)Úordinal)zslashed-zeror²   c                 3   s   | ]}ˆ j |v r|V  qd S rI   r  r  rJ   r&   r'   rm   L  s   z'font_variant_numeric.<locals>.<genexpr>c                 3   s   | ]}|ˆ v V  qd S rI   r&   r  r  r&   r'   rm   N  r‡   r  r  r&   r  r'   Úfont_variant_numeric9  s,    

ÿr%  c                 C   s4   t | ƒdkr t| d ƒdkr dS tdd„ ƒ}|| ƒS )z.``font-feature-settings`` property validation.r    r   rã   c                 S   sÞ   d\}}t | ƒdkrn| d d… | d  } }|jdkrHdddœ |j¡}q~|jdkr~|jd ur~|jdkr~|j}nt | ƒdkr~d}t | ƒdkrÂ| \}|jd	krÂt |jƒd
krÂtdd„ |jD ƒƒrÂ|j}|d urÚ|d urÚ||fS d S )N©NNr   rß   r²   r    r   )ÚonÚoffr¬   r¤   rÄ   c                 s   s*   | ]"}d t |ƒ  kodkn  V  qdS )é    é   N)Úord)rk   Úletterr&   r&   r'   rm   o  r‡   zLfont_feature_settings.<locals>.font_feature_settings_list.<locals>.<genexpr>)ra   r¦   ÚgetrC   r®   rp   )r$   ÚfeaturerC   rA   r&   r&   r'   Úfont_feature_settings_list^  s(    

ÿÿz9font_feature_settings.<locals>.font_feature_settings_list©ra   r   r   )r$   r/  r&   r&   r'   Úfont_feature_settingsX  s
    
r1  c                 C   s   | dv S )N)rã   zhistorical-formsr&   rG   r&   r&   r'   Úfont_variant_alternatesx  s    r2  c                    s¾   t | ƒdkr$t| d ƒ}|dkr$|S g ‰d}g }|D ]}| |¡ q4| D ]d‰ ˆ jdkr\ d S ˆ j|v r¦t‡ fdd„|D ƒƒ}t‡fdd„|D ƒƒr˜ d S ˆ ˆ j¡ qH d S qHˆrºtˆƒS d S )	Nr    r   rã   ))Újis78Újis83Újis90Újis04Ú
simplifiedÚtraditional)ú
full-widthzproportional-width)Úrubyr²   c                 3   s   | ]}ˆ j |v r|V  qd S rI   r  r  rJ   r&   r'   rm   ’  s   z*font_variant_east_asian.<locals>.<genexpr>c                 3   s   | ]}|ˆ v V  qd S rI   r&   r  r  r&   r'   rm   ”  r‡   r  r  r&   r  r'   Úfont_variant_east_asian€  s,    

ÿr;  c                 C   s4   t | ƒdkr t| d ƒdkr dS tdd„ ƒ}|| ƒS )z0``font-variation-settings`` property validation.r    r   rã   c                 S   s8   t | ƒdkr4| \}}|jdkr4|jdkr4|j|jfS d S )Nr   r¤   r¬   )ra   r¦   rC   )r$   ÚkeyrC   r&   r&   r'   Úfont_variation_settings_list¤  s    z=font_variation_settings.<locals>.font_variation_settings_listr0  )r$   r=  r&   r&   r'   Úfont_variation_settingsž  s
    
r>  c                 C   s<   t | ddd�}|r|S t| ƒ}|dv r*|S |tjv r8|S dS )z"``font-size`` property validation.FTrw   )ÚsmallerÚlargerN)r   r   r   ÚFONT_SIZE_KEYWORDS)rA   r{   Zfont_size_keywordr&   r&   r'   Ú	font_size®  s    
rB  c                 C   s   | dv S )z#``font-style`` property validation.)rã   ÚitalicÚobliquer&   rG   r&   r&   r'   Ú
font_style¼  s    rE  c                 C   s   | dv S )z-Validation for the ``font-stretch`` property.)	zultra-condensedzextra-condensedÚ	condensedzsemi-condensedrã   zsemi-expandedÚexpandedzextra-expandedzultra-expandedr&   rG   r&   r&   r'   Úfont_stretchÃ  s    rH  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`` property validation.)rã   ÚboldÚbolderÚlighterr¬   N)	éd   éÈ   i,  i�  iô  iX  i¼  i   i„  ©r   r¦   r®   r§   r&   r&   r'   Úfont_weightÍ  s    
rO  c                 C   s   | dv S )N)rÃ   rt   ru   rW   z
scale-downr&   rG   r&   r&   r'   Ú
object_fitÙ  s    rP  c                 C   s   t | ƒS rI   )r   rJ   r&   r&   r'   Úimage_resolutionâ  s    rQ  zletter-spacingzword-spacingc                 C   s$   t | ƒdkrdS t| ƒ}|r |S dS )z7Validation for ``letter-spacing`` and ``word-spacing``.rã   Nr´   rô   r&   r&   r'   Úspacingé  s
    rR  c                 C   s   t | ƒ}|r|S dS )z"Validation for ``outline-offset``.Nr„   rô   r&   r&   r'   Úoutline_offsetõ  s    rS  c                 C   sp   t | ƒdkrdS | jdkr0| jdkr0t| jdƒS | jdkrP| jdkrPt| jdƒS | jdkrl| jdkrlt| ƒS dS )z$``line-height`` property validation.rã   r¬   r   Nry   rÂ   Ú	dimension)r   r¦   rC   r
   r   rJ   r&   r&   r'   Úline_heightþ  s    rU  c                 C   s   | dv S )z,``list-style-position`` property validation.)r  r  r&   rG   r&   r&   r'   Úlist_style_position  s    rV  c                 C   s  | j dkr| jS | j dkr$d| jfS | j dk�r| jdk�rd}t| jƒ}t|ƒdk�rg }|d j dkr”|d j|v rŽd}| |d j¡ q¢dS n| d	¡ d}t|ƒ|d k r¶dS t|t|ƒƒD ](}|| j dkrÜ dS | || j¡ qÄ|d d
v �rt|ƒdk �rdS dt|ƒfS dS )z(``list-style-type`` property validation.r²   r¤   r5   Úsymbols)ÚcyclicÚnumericÚ
alphabeticÚsymbolicrE   r    r   Nr[  )rZ  rY  r`   z	symbols())	r¦   rC   r"   r   Ú	argumentsra   rz   Úrangern   )rA   Úallowed_typesZfunction_argumentsr\  ÚindexrÇ   r&   r&   r'   Úlist_style_type  s4    




r`  z	min-widthz
min-heightc                 C   s"   t | ƒ}|dkr|S t| gƒS dS )z7``min-width`` and ``min-height`` properties validation.rv   N)r   Úlength_or_precentager§   r&   r&   r'   Úmin_width_height6  s    rb  zpadding-topzpadding-rightzpadding-bottomzpadding-leftc                 C   s   t | ddd�}|r|S dS )z$``padding-*`` properties validation.FTrw   Nr„   rô   r&   r&   r'   ra  C  s    ra  z	max-widthz
max-heightc                 C   s0   t | ddd�}|r|S t| ƒdkr,ttdƒS dS )z'Validation for max-width and max-heightFTrw   rW   ÚpxN)r   r   r
   r   rô   r&   r&   r'   Úmax_width_heightO  s
    rd  c                 C   s@   | j dkrtdtd| jƒƒS | j dkr<tdtd| jd ƒƒS dS )z(Validation for the ``opacity`` property.r¬   r    r   ry   rL  N)r¦   ÚminÚmaxrC   rJ   r&   r&   r'   Úopacity[  s    

rg  c                 C   s.   t | ƒdkrdS | jdkr*| jdur*| jS dS )z(Validation for the ``z-index`` property.rv   r¬   NrN  rJ   r&   r&   r'   Úz_indexe  s    rh  ÚorphansÚwidowsc                 C   s*   | j dkr&| jdur&| j}|dkr&|S dS )z9Validation for the ``orphans`` and ``widows`` properties.r¬   Nr    ©r¦   r®   ©rA   rC   r&   r&   r'   Úorphans_widowso  s    rm  c                 C   s:   | j dkr&| jdur&| j}|dkr&|S t| ƒdkr6dS dS )z-Validation for the ``column-count`` property.r¬   Nr    rv   r­   rl  r&   r&   r'   Úcolumn_countz  s    rn  c                 C   s   | dv S )z)Validation for the ``overflow`` property.)rv   Úvisibler�   rD   r&   rG   r&   r&   r'   Úoverflow†  s    rp  c                 C   s   | dv S )z.Validation for the ``text-overflow`` property.)rÜ   Úellipsisr&   rG   r&   r&   r'   Útext_overflow�  s    rr  c                 C   s\   | j dkrB| jdkrBt| jƒdkrB| jd j dkrBd| jd jfS t| gƒ}|dv rX|S dS )	z!``position`` property validation.r5   Úrunningr    r   r²   z	running())ÚstaticÚrelativeÚabsoluterE   N)r¦   r"   ra   r\  rC   r   r§   r&   r&   r'   Úposition”  s    
rw  c                 C   s|   t | ƒdkr$t| d ƒ }dv r$|S | rxt | ƒd dkrxtdd„ | D ƒƒrxtdd„ | D ƒƒ}|ddd… |ddd… fS dS )	z``quotes`` property validation.r    r   )rv   rW   r   c                 s   s   | ]}|j d kV  qdS )r¤   Nr  r…   r&   r&   r'   rm   §  r‡   zquotes.<locals>.<genexpr>c                 s   s   | ]}|j V  qd S rI   r  r…   r&   r&   r'   rm   ¨  r‡   N)ra   r   rp   rn   )r$   rB   Ústringsr&   r&   r'   Úquotes   s    ÿry  c                 C   s   | dv r| S dS )z,Validation for the ``table-layout`` property)rE   rv   Nr&   rG   r&   r&   r'   Útable_layout®  s    rz  c                 C   s   | dv S )z'``text-align-all`` property validation.)rš   r›   ÚcenterÚjustifyÚstartÚendr&   rG   r&   r&   r'   Útext_align_all¶  s    r  c                 C   s   | dv S )z(``text-align-last`` property validation.)rv   rš   r›   r{  r|  r}  r~  r&   rG   r&   r&   r'   Útext_align_last½  s    r€  c                 C   sF   dd„ | D ƒ}|dhkrdS h d£}t | ƒt |ƒkrB| |¡rB|S dS )z-``text-decoration-line`` property validation.c                 S   s   h | ]}t |ƒ’qS r&   r¶   r…   r&   r&   r'   Ú	<setcomp>È  r‡   z'text_decoration_line.<locals>.<setcomp>rW   >   Úoverlinezline-throughÚ	underlineÚblinkN)ra   Úissubset)r$   rr   Zallowed_valuesr&   r&   r'   Útext_decoration_lineÅ  s    
r†  c                 C   s   | dv r| S dS )z.``text-decoration-style`` property validation.)r•   r�   rŽ   r�   ÚwavyNr&   rG   r&   r&   r'   Útext_decoration_styleÐ  s    rˆ  c                 C   s,   t | dd�}|r|S t| ƒdv  }r(|S dS )z2``text-decoration-thickness`` property validation.Tró   rv   ú	from-fontN)rv   r‰  r¾   r¿   r&   r&   r'   Útext_decoration_thicknessØ  s
    rŠ  c                 C   s   t | dd�}|r|S dS )z$``text-indent`` property validation.Tró   Nr„   rô   r&   r&   r'   Útext_indentã  s    r‹  c                 C   s   | dv S )z#``text-align`` property validation.)rW   Ú	uppercaseÚ	lowercaseÚ
capitalizer9  r&   rG   r&   r&   r'   Útext_transformì  s    r�  c                 C   s,   t | dd�}|r|S t| ƒ}|dv r(|S dS )z.Validation for the ``vertical-align`` propertyTró   )ÚbaselineÚmiddler  r   ztext-topztext-bottomrÔ   rÕ   Nr¾   r¿   r&   r&   r'   Úvertical_alignô  s    r’  c                 C   s   | dv S )ú$``white-space`` property validation.)ro  r�   rP   r&   rG   r&   r&   r'   Ú
visibility  s    r”  c                 C   s   | dv S )r“  )rã   ÚpreÚnowrapzpre-wrapzpre-liner&   rG   r&   r&   r'   Úwhite_space  s    r—  c                 C   s   | dv S )z&``overflow-wrap`` property validation.)Úanywhererã   z
break-wordr&   rG   r&   r&   r'   Úoverflow_wrap  s    r™  c                 C   s   | dv S )z#``word-break`` property validation.)rã   z	break-allr&   rG   r&   r&   r'   Ú
word_break  s    rš  c                 C   s*   t | gƒ}|dur|S t| ƒdkr&dS dS )z#``flex-basis`` property validation.Nræ   )rø   r   )rA   Úbasisr&   r&   r'   Ú
flex_basis  s
    
rœ  c                 C   s   | dv S )z'``flex-direction`` property validation.)Úrowzrow-reverser�   zcolumn-reverser&   rG   r&   r&   r'   Úflex_direction(  s    rž  z	flex-growzflex-shrinkc                 C   s   | j dkr| jS d S ©Nr¬   )r¦   rC   rJ   r&   r&   r'   Úflex_grow_shrink/  s    
r   c                 C   s6   t | ƒ}|dv r|S |rdS t| ddd�}|r2|S dS )zParse ``inflexible-breadth``.)rv   úmin-contentúmax-contentNFTrw   r´   )rA   rB   r{   r&   r&   r'   Ú_inflexible_breadth7  s    r£  c                 C   s4   | j dkr,| jdkr,| jdkr,t| j| jƒS t| ƒS )zParse ``track-breadth``.rT  r   Úfr)r¦   rC   Úunitr
   r£  rJ   r&   r&   r'   Ú_track_breadthC  s    r¦  c                 C   sš   t | ƒ}|r|S t| ƒ}|r–|\}}|dkrdt|ƒdkr–t|d ƒ}t |d ƒ}|r–|r–d||fS n2|dkr–t|ƒdkr–t|d ddd	�}|r–d
|fS dS )zParse ``track-size``.Úminmaxr   r   r    úminmax()zfit-contentFTrw   zfit-content()N)r¦  r   ra   r£  r   )rA   Útrack_breadthr5   r"   rÚ   Zinflexible_breadthr{   r&   r&   r'   Ú_track_sizeJ  s"    rª  c                 C   s®   t | ddd�}|r|S t| ƒ}|rª|\}}|dkrªt|ƒdkrªt |d ddd�}|rnt|d ƒ}|rnd||fS t|d ƒ}|d	v s†|rªt |d ddd�}|rªd|p¤||fS d
S )zParse ``fixed-size``.FTrw   r§  r   r   r    r¨  )r¡  r¢  rv   N)r   r   ra   r¦  r   )rA   r{   r5   r"   rÚ   r©  rB   Zfixed_breadthr&   r&   r'   Ú_fixed_size_  s&    

ÿr«  c                 C   sN   g }| j dkrJ| jD ],}|j dkr0| |j¡ q|j dkr dS qt|ƒS dS )zParse ``line-names``.z[] blockr²   Ú
whitespaceN)r¦   ræ   rz   rC   rn   )rÛ   Zreturn_line_namesrA   r&   r&   r'   Ú_line_namesu  s    



r­  zgrid-auto-columnszgrid-auto-rowsc                 C   s2   g }| D ] }t |ƒ}|r$| |¡ q dS t|ƒS )zC``grid-auto-columns`` and ``grid-auto-rows`` properties validation.N)rª  rz   rn   )r$   Úreturn_tokensrA   Ú
track_sizer&   r&   r'   Ú	grid_auto�  s    
r°  c                 C   sv   t | ƒdkr8t| d ƒ}|dv r&|fS |dkrr|dfS n:t | ƒdkrrdd„ | D ƒ}d|v rrd|v sjd	|v rrt|ƒS d
S )z'``grid-auto-flow`` property validation.r    r   )r�  r�   Údenser�  r   c                 S   s   g | ]}t |ƒ‘qS r&   r¶   r…   r&   r&   r'   r†   ™  r‡   z"grid_auto_flow.<locals>.<listcomp>r�   N©ra   r   rn   ©r$   rB   rr   r&   r&   r'   Úgrid_auto_flow�  s    
r´  zgrid-template-columnszgrid-template-rowsc                 C   s®  g }t | ƒdkr$t| d ƒdkr$dS t| d ƒdk�rJ| d¡ g }| dd… D ]æ}t|ƒ}|durp| |¡ qPt|ƒ}|�r2|\}}|dk�r2t |ƒdk�r2|d jdkrÐ|d jrÐ|d jdkrÐ|d j}nt|d ƒd	kræd	}n dS g }	|dd… D ]}
t|
ƒ}|durü|	 |¡ qü| d
|t	|	ƒf¡ qP dS | t	|ƒ¡ �n\d}d}d}| D �](}t|ƒ}|du�r�|�r~ dS d}| |¡ �qZt
|ƒ}|�rÀ|�s®| d¡ d}| |¡ �qZt|ƒ}|�rô|�sÞ| d¡ d}| |¡ d}�qZt|ƒ}|�r€|\}}|dk�r€t |ƒdk�r€|d jdk�rZ|d j�rZ|d jdk�rZ|d j}n4t|d ƒdv �rˆ|�rx dS |d j}d}n dS g }d}|dd… D ] }
t|
ƒ}|du�rØ|�rÆ  dS | |¡ d}�q¢t
|
ƒ}|�r|�sö| d¡ d}| |¡ �q¢t|
ƒ}|�r<d}|�s*| d¡ d}| |¡ �q¢  dS |�sT| d¡ d}|�sh| d¡ | d
|t	|ƒf¡ �qZ dS |�r–|�r–dS |�s¦| d¡ t	|ƒS )z@``grid-template-columns`` and ``grid-template-rows`` validation.r    r   rW   ÚsubgridNrg   r   r¬   ú	auto-fillzrepeat()FTr&   )r¶  zauto-fit)ra   r   rz   r­  r   r¦   Ú
is_integerrC   r®   rn   r«  rª  )r$   r®  Zsubgrid_tokensrA   Z
line_namesr5   r"   rÚ   r¬   Zline_names_listrÛ   Zincludes_auto_repeatZincludes_trackZlast_is_line_nameZ
fixed_sizer¯  Znames_and_sizesZrepeat_last_is_line_namer&   r&   r'   Úgrid_templatež  sì    

ÿÿÿ






ÿÿ








ÿ
r¸  c                 C   s0  t | ƒdkr t| d ƒdkr dS g }| D ]¦}|jdkr< dS t|jƒ}g }d}|D ]b}|jdkrr| |j¡ d}qR|jdkrœ|jd	krœ|rŒqR| d¡ d
}qR|jdkr¬d}qR  dS qR|sÀ dS | t|ƒ¡ q(t tdd„ |D ƒƒƒdk�r,tƒ }tƒ }t|ƒD �] \}	}t|ƒD �]
\}
}|
|	f|v �s|du �r8�q||v �rJ  dS | 	|¡ | 	|
|	f¡ |
}t||
d d… |
d d�D ](\}}||k�rš �q´| 	||	f¡ �q‚|d7 }t||	d d… |	d d�D ]J\}}t||
|… ƒ|hk�rt
|
|ƒD ]}| 	||f¡ �qún �q�qÐ�q�q t|ƒS dS )z,``grid-template-areas`` property validation.r    r   rW   r¤   NFr²   rÝ   Ú.Tr¬  c                 s   s   | ]}t |ƒV  qd S rI   )ra   )rk   r�  r&   r&   r'   rm   5  r‡   z&grid_template_areas.<locals>.<genexpr>)r}  )ra   r   r¦   r   rC   rz   rn   rÍ   rÅ   r3   r]  )r$   Z
grid_areasrA   Zcomponent_valuesr�  Zlast_is_dotrC   ÚcoordinatesZareasÚyÚxÚareaÚnxZnareaÚnyZnrowZnnxr&   r&   r'   Úgrid_template_areas  s^    







$
$rÀ  zgrid-row-startzgrid-row-endzgrid-column-startzgrid-column-endc                 C   s6  t | ƒdkrh| d }t|ƒ }rB|dkr,|S |dkrddd|jfS n"|jdkrd|jrd|jrdd|jdfS dS d } }}| D ]v}t|ƒ }rÄ|dkr– dS |dkr®|du rÂd}qxqê|rê|du rê|j}qxn&|jdkrê|jrê|jrê|du rê|j}qx dS |�r"|�r
|dk �r
dS |�s|�r2|||fS n|�r2|||fS dS )u:   ``grid-[row|column]-[startâ€”end]`` properties validation.r    r   rv   ÚspanNr¬   )ra   r   rC   r¦   r·  r®   )r$   rA   rB   r¬   r²   rÁ  r&   r&   r'   Ú	grid_lineQ  sD    rÂ  c                 C   s   | dv S )z"``flex-wrap`` property validation.)r–  Úwrapzwrap-reverser&   rG   r&   r&   r'   Ú	flex_wrap{  s    rÄ  c                 C   sf   t | ƒdkr(t| d ƒ}|dv rb|fS n:t | ƒdkrbtdd„ | D ƒƒ}|d dv rb|d dv rb|S d	S )
z(``justify-content`` property validation.r    r   )r{  úspace-betweenúspace-aroundúspace-evenlyrÌ   rã   ú
flex-startúflex-endr}  r~  rš   r›   r   c                 s   s   | ]}t |ƒV  qd S rI   r¶   r…   r&   r&   r'   rm   �  r‡   z"justify_content.<locals>.<genexpr>©ÚsafeÚunsafe)r{  r}  r~  rÈ  rÉ  rš   r›   Nr²  r³  r&   r&   r'   Újustify_content‚  s    rÍ  c                 C   s²   t | ƒdkr8t| d ƒ}|dv r&|fS |dkr®d|fS nvt | ƒdkr®tdd„ | D ƒƒ}|d d	v rt|d d
v r®|S n:d|v r’d|v sŒd|v r®|S nd|v r®t|ƒh d£@ r®|S dS )z&``justify-items`` property validation.r    r   )rã   rÌ   r{  r}  r~  ú
self-startúself-endrÈ  rÉ  rš   r›   Úlegacyr�  Úfirstr   c                 s   s   | ]}t |ƒV  qd S rI   r¶   r…   r&   r&   r'   rm   ¢  r‡   z justify_items.<locals>.<genexpr>rÊ  ©	r{  r}  r~  rÎ  rÏ  rÈ  rÉ  rš   r›   ÚlastrÐ  >   r{  rš   r›   N)ra   r   rn   rÍ   r³  r&   r&   r'   Újustify_items•  s"    
rÔ  c                 C   s”   t | ƒdkr8t| d ƒ}|dv r&|fS |dkr�d|fS nXt | ƒdkr�tdd„ | D ƒƒ}|d d	v rt|d d
v r�|S nd|v r�d|v sŒd|v r�|S dS )z%``justify-self`` property validation.r    r   )rv   rã   rÌ   r{  r}  r~  rÎ  rÏ  rÈ  rÉ  rš   r›   r�  rÑ  r   c                 s   s   | ]}t |ƒV  qd S rI   r¶   r…   r&   r&   r'   rm   ½  r‡   zjustify_self.<locals>.<genexpr>rÊ  rÒ  rÓ  Nr²  r³  r&   r&   r'   Újustify_self°  s    
rÕ  c                 C   s”   t | ƒdkr8t| d ƒ}|dv r&|fS |dkr�d|fS nXt | ƒdkr�tdd„ | D ƒƒ}|d d	v rt|d d
v r�|S nd|v r�d|v sŒd|v r�|S dS )z$``align-items`` property validation.r    r   )	rã   rÌ   r{  r}  r~  rÎ  rÏ  rÈ  rÉ  r�  rÑ  r   c                 s   s   | ]}t |ƒV  qd S rI   r¶   r…   r&   r&   r'   rm   Ô  r‡   zalign_items.<locals>.<genexpr>rÊ  ©r{  r}  r~  rÎ  rÏ  rÈ  rÉ  rÓ  Nr²  r³  r&   r&   r'   Úalign_itemsÈ  s    
r×  c                 C   s”   t | ƒdkr8t| d ƒ}|dv r&|fS |dkr�d|fS nXt | ƒdkr�tdd„ | D ƒƒ}|d d	v rt|d d
v r�|S nd|v r�d|v sŒd|v r�|S dS )z#``align-self`` property validation.r    r   )
rv   rã   rÌ   r{  r}  r~  rÎ  rÏ  rÈ  rÉ  r�  rÑ  r   c                 s   s   | ]}t |ƒV  qd S rI   r¶   r…   r&   r&   r'   rm   ë  r‡   zalign_self.<locals>.<genexpr>rÊ  rÖ  rÓ  Nr²  r³  r&   r&   r'   Ú
align_selfß  s    
rØ  c                 C   s”   t | ƒdkr8t| d ƒ}|dv r&|fS |dkr�d|fS nXt | ƒdkr�tdd„ | D ƒƒ}|d d	v rt|d d
v r�|S nd|v r�d|v sŒd|v r�|S dS )z&``align-content`` property validation.r    r   )
r{  rÅ  rÆ  rÇ  rÌ   rã   rÈ  rÉ  r}  r~  r�  rÑ  r   c                 s   s   | ]}t |ƒV  qd S rI   r¶   r…   r&   r&   r'   rm     r‡   z align_content.<locals>.<genexpr>rÊ  )r{  r}  r~  rÈ  rÉ  rÓ  Nr²  r³  r&   r&   r'   Úalign_contentö  s    
rÙ  c                 C   s   | j dkr| jd ur| jS d S rŸ  rk  rJ   r&   r&   r'   Úorder  s    rÚ  c                 C   s   | dv S )z#Validation for ``image-rendering``.)rv   zcrisp-edgesZ	pixelatedr&   rG   r&   r&   r'   Úimage_rendering  s    rÛ  c                 C   s�   t | ƒ}|dv r|S d\}}| D ]F}t|ƒ}|dkrH|durB dS d}q |du rbt|ƒ}|durbq  dS |du rtdn|}|du r„dn|}||fS )z%Validation for ``image-orientation``.)rW   z
from-imager&  ÚflipNTr   F)r   r   r   )r$   rB   ÚanglerÜ  rA   r&   r&   r'   Úimage_orientation  s&    rÞ  c           	      C   s  dd„ | D ƒ}t |ƒrFt|ƒdkr2|d |d fS t|ƒdkrFt|ƒS dd„ | D ƒ}t|ƒdkr¢|d }|tjv r|tj| S |dv rŠtjS |dkr¢tjd	d	d
… S t|ƒdk�r|d dv rÆ|\}}n|d dv rÜ|\}}nd	}|tjv �rtj| }|dk�r|S |\}}||fS d	S )z]``size`` property validation.

    See https://www.w3.org/TR/css-page-3/#page-size-prop

    c                 S   s   g | ]}t |d d�‘qS r‚   r„   r…   r&   r&   r'   r†   :  r‡   zsize.<locals>.<listcomp>r    r   r   c                 S   s   g | ]}t |ƒ‘qS r&   r¶   r…   r&   r&   r'   r†   A  r‡   )rv   ÚportraitÚ	landscapeNrß   )rß  rà  rß  )rp   ra   rn   r   Ú
PAGE_SIZESÚINITIAL_PAGE_SIZE)	r$   rŠ   rr   rB   ZorientationÚ	page_sizerø   rö   r÷   r&   r&   r'   Úsize3  s6    





rä  )r8   c                 C   sV   t | ƒdkrdS t| ƒ}|rR|\}}|dd„ |D ƒf}|ddgfkrRd|d jfS dS )	zValidation for ``anchor``.rW   c                 S   s   g | ]
}|j ‘qS r&   r  ©rk   rÛ   r&   r&   r'   r†   d  r‡   zanchor.<locals>.<listcomp>Úattrr²   úattr()r   N)r   r   rC   ©rA   r5   r"   rÚ   Ú	prototyper&   r&   r'   Úanchor[  s    rê  )r8   r1   c                 C   sh   t | ƒdkrdS t| |ƒ}|r"|S t| ƒ}|rd|\}}|dd„ |D ƒf}|ddgfkrdd|d jfS dS )	zValidation for ``link``.rW   c                 S   s   g | ]
}|j ‘qS r&   r  rå  r&   r&   r'   r†   u  r‡   zlink.<locals>.<listcomp>ræ  r²   rç  r   N)r   r   r   rC   )rA   r?   r^   r5   r"   rÚ   ré  r&   r&   r'   Úlinki  s    
rë  c                 C   s2   | j dkr&| jdur&| j}|dkr&|S t| dd�S )zVValidation for ``tab-size``.

    See https://www.w3.org/TR/css-text-3/#tab-size

    r¬   Nr   Frƒ   )r¦   r®   r   rl  r&   r&   r'   Útab_sizez  s
    rì  c                 C   s   t | ƒ}|dv r|S dS )zValidation for ``hyphens``.)rW   Úmanualrv   Nr¶   r§   r&   r&   r'   Úhyphens‰  s    rî  c                 C   s(   t | ƒ}|dkrdS | jdkr$| jS dS )z'Validation for ``hyphenate-character``.rv   u   â€�r¤   Nr  r§   r&   r&   r'   Úhyphenate_character’  s
    
rï  c                 C   s   t | ddd�S )z(Validation for ``hyphenate-limit-zone``.FTrw   r„   rJ   r&   r&   r'   Úhyphenate_limit_zone�  s    rð  c                 C   sÎ  t | ƒdkrJ| \}t|ƒ}|dkr&dS |jdkrF|jdurF|jddfS �n€t | ƒdkrô| \}}t|ƒ}t|ƒ}|jdkr¼|jdur¼|jdkr¦|jdur¦|j|j|jfS |dkrò|jddfS n6|dkrò|jdkræ|jduræd|j|jfS |dkròdS nÖt | ƒdk�rÊ| \}}}t|ƒdk�s2|jdk�rÊ|jdu�rÊt|ƒdk�sX|jdk�rÊ|jdu�rÊt|ƒdk�s~|jdk�rÊ|jdu�rÊ|jdk�r�|jnd}|jdk�r¦|jnd}|jdk�r¼|jnd}|||fS dS )	z)Validation for ``hyphenate-limit-chars``.r    rv   )é   r   r   r¬   Nr   rñ  r`   )ra   r   r¦   r®   rC   )r$   rA   rB   Útotalrš   Ztotal_keywordZleft_keywordr›   r&   r&   r'   Úhyphenate_limit_chars¤  sZ    

ÿþþ
ýüü
ûúúró  c                 C   sl   t | ƒdkrdS t| ƒ}|rT|\}}|dd„ |D ƒf}|ddgfkrhd|d jfS n| jdkrhd| jfS d	S )
zValidation for ``lang``.rW   c                 S   s   g | ]
}|j ‘qS r&   r  rå  r&   r&   r'   r†   Õ  r‡   zlang.<locals>.<listcomp>ræ  r²   rç  r   r¤   N)r   r   rC   r¦   rè  r&   r&   r'   ÚlangÌ  s    
rô  )r9   r1   c                    s&   t ‡ fdd„| D ƒƒ}d|vr"|S dS )z"Validation for ``bookmark-label``.c                 3   s   | ]}t |ˆ ƒV  qd S rI   ©r   r…   ©r?   r&   r'   rm   ß  s   z!bookmark_label.<locals>.<genexpr>N)rn   )r$   r?   rå   r&   rö  r'   Úbookmark_labelÜ  s
    ÿr÷  c                 C   s<   | j dkr(| jdur(| j}|dkr8|S nt| ƒdkr8dS dS )z"Validation for ``bookmark-level``.r¬   Nr    rW   r­   rl  r&   r&   r'   Úbookmark_levelå  s    rø  c                 C   s   | dv S )z"Validation for ``bookmark-state``.)ÚopenÚclosedr&   rG   r&   r&   r'   Úbookmark_stateñ  s    rû  c                 C   s   | dv S )z$Validation for ``footnote-display``.)r  rÿ   Úcompactr&   rG   r&   r&   r'   Úfootnote_displayø  s    rý  c                 C   s   | dv S )z#Validation for ``footnote-policy``.)rv   Úliner  r&   rG   r&   r&   r'   Úfootnote_policyÿ  s    rÿ  c                    sp   t | ƒdkrTt| d ƒ}|du r$dS t‡ fdd„| dd… D ƒƒ}d|vrl||fS n| rlt| d ƒdkrldS dS )	zValidation for ``string-set``.r   r   Nc                 3   s   | ]}t |ˆ ƒV  qd S rI   rõ  r…   rö  r&   r'   rm     s   zstring_set.<locals>.<genexpr>r    rW   )rW   r&   )ra   r   rn   r   )r$   r?   Úvar_namerå   r&   rö  r'   Ú
string_set  s    
ÿ
r  c           
      C   sî  t | ƒdkrdS g }| D �]Æ}t|ƒ}|s0 dS |\}}t|ƒdk�r¸t|d ƒ}t|d dd�}|dkr„|dur„| ||f¡ �qà|d	v rª|durª| d
|dff¡ �qà|dkrÎ|durÎ| d
d|ff¡ nè|dv rî|rî| d|tff¡ nÈ|dk�r|�r| dt|ff¡ n¤|dk�rF|d jdk�rF| d|d jdff¡ np|dk�rz|d jdk�rz| dd|d jff¡ n<|dk�r°|d jdk�r°| d|d jfd f¡ n dS qt|ƒdk�r�|dk�rt	dd„ |D ƒƒ�r| |t
dd„ |D ƒƒf¡ nŒ|dk�r@t
dd„ |D ƒƒ}t	|ƒ�r8| ||f¡ n dS nN|d
k�rˆt
dd„ |D ƒƒ}	t	dd„ |	D ƒƒ�r€| ||	f¡ n dS n dS qt|ƒdk�rÚ|dk�rÚt	dd„ |D ƒƒ�rÚ| |t
dd„ |D ƒƒf¡ q dS qt
|ƒS dS )zValidation for ``transform``.rW   r&   Nr    r   Tró   Úrotate)ZskewxÚskewr  Zskewy)Z
translatexÚ	translater  Z
translateyÚscalexr¬   ÚscaleÚscaleyr   c                 s   s   | ]}|j d kV  qdS ©r¬   Nr  ©rk   Úar&   r&   r'   rm   :  r‡   ztransform.<locals>.<genexpr>c                 s   s   | ]}|j V  qd S rI   r  rå  r&   r&   r'   rm   ;  r‡   c                 s   s   | ]}t |d d�V  qdS )Tró   Nr„   r…   r&   r&   r'   rm   =  s   c                 s   s   | ]}t |ƒV  qd S rI   )r   r…   r&   r&   r'   rm   D  r‡   c                 s   s   | ]}|d uV  qd S rI   r&   )rk   rÝ  r&   r&   r'   rm   E  r‡   é   Úmatrixc                 s   s   | ]}|j d kV  qdS r  r  r	  r&   r&   r'   rm   K  s   c                 s   s   | ]}|j V  qd S rI   r  rå  r&   r&   r'   rm   M  r‡   )r   r   ra   r   r   rz   r	   r¦   rC   rp   rn   )
r$   Ú
transformsrA   r5   r"   rÚ   rÝ  r{   rŠ   Zanglesr&   r&   r'   Ú	transform  sd    

ÿ

 ÿ
r  c                 C   s   t | ƒ}|dv r|S dS )z#``appearance`` property validation.r¥   Nr¶   r§   r&   r&   r'   Ú
appearanceS  s    r  )NFFF)NF)µr,   Úmathr   Útinycss2r   Útinycss2.color4r   Ú r   Ú
propertiesr   r	   r
   Úutilsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ÚPREFIXrÍ   r2   r4   r0   r   r;   r!   rH   rK   rN   rQ   rS   rT   r[   r_   rc   re   rf   rs   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Ø   rÜ   ræ   rë   rì   rí   rê   rõ   rø   rù   rû   rþ   r	  r  r  r  r  r  r!  r#  r%  r1  r2  r;  r>  rB  rE  rH  rO  rP  rQ  rR  rS  rU  rV  r`  rb  ra  rd  rg  rh  rm  rn  rp  rr  rw  ry  rz  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Ô  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'   Ú<module>   sl  X ÿ
)
	








	



	









		



-





	!
	


		x8&'
	'

;