a
    [Xh                    @   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dd ZKe( e dd ZLe(dde!dd ZMe(dde dd ZNe( e dd ZOe( e dd ZPe( e dd ZQe( e!dd ZRe(dd(dd ZSe( dd ZTe( dd ZUe( dd ZVdd ZWe(de(de(de(de(de(de(de(de(de!dd ZXe(de(de!dd ZYe(ddde(ddde!dd ZZe(dde dd Z[e( e dd Z\e( dd Z]e(de dd Z^e( edd Z_e( e dd Z`e( e!dd Zae( dd Zbe( e dd Zce( e ddĄ Zde( ddƄ Zee( ddȄ Zfe( e ddʄ Zge( dd̄ Zhe( dd΄ Zie( e!ddЄ Zje( e dd҄ Zke( e ddԄ Zle( e!ddք Zme( e dd؄ Zne(dde!ddڄ Zoe(dۃe(d܃e!ddބ Zpe( e!dd Zqe( e!dd Zre( e dd Zse( e!dd Zte(de(de!dd Zue(de(de(de(de!dd Zve(de(de!dd Zwe( e!dd Zxe( e!dd Zye(de(de!dd Zze(dde!dd Z{e( e dd  Z|e( e dd Z}e( e!dd Z~e( dd Ze( e dd Ze( e d	d
 Ze( e dd Ze( dd Ze( e dd Ze( e!dd Ze( e!dd Ze( e dd Ze( e!dd Ze( e dd Ze( e dd Ze( e dd Ze( e dd  Ze( e!d!d" Ze( e d#d$ Ze(d%e(d&e!d'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Ze(d3e(d4d5d6 Ze( d7d8 Ze(d9e(d:d;d< Ze( d=d> Ze(d?e(d@e(dAe(dBdCdD Ze( e dEdF Ze( dGdH Ze( dIdJ Ze( dKdL Ze( dMdN Ze( dOdP Ze( dQdR Ze( e!dSdT Ze(dde dUdV Ze(dddWdX Ze(dddYdZ Ze(dd[e!d\d] Ze(ddd^e!d_d` Ze( e!dadb Ze(dde!dcdd Ze(dde!dedf Ze(dde!dgdh Ze(dddidj Ze(dd[e!dkdl Ze(dddmdndo Ze(dde!dpdq Ze(dde drds Ze(dde dtdu Ze(dde dvdw Ze(dddmedxdy Ze( dzd{ Ze( e!d|d} Zd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tokensZ
wanted_key r%   i/var/www/viveiro_mudafortebrasil/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unstabler0   r%   r&   	decorator@   s    

zproperty.<locals>.decoratorr%   )r6   r7   r8   r0   r9   r%   r5   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 rt||ffS )z'Validator for non-shorthand properties.z--zunknown propertyzproperty not supported yet)initialinheritN)
startswithr   r   r/   r   r   r   r0   )r$   r"   base_urlrequiredr4   tokenkeywordvaluer%   r%   r&   r!   S   s&    

r!   c                 C   s   | dv S )z.``background-attachment`` property validation.)scrollfixedlocalr%   rA   r%   r%   r&   background_attachmentr   s    rG   zbackground-colorzborder-top-colorzborder-right-colorzborder-bottom-colorzborder-left-colorzcolumn-rule-colorT)r8   ztext-decoration-colorc                 C   s   t | S Nr   r@   r%   r%   r&   other_colorsz   s    	rJ   c                 C   s   t | dkrdS t| S d S )Ninvertcurrentcolor)r   r   rI   r%   r%   r&   outline_color   s    rM   c                 C   s   | dv S )N)Zseparatecollapser%   rF   r%   r%   r&   border_collapse   s    rO   c                 C   s   | dv S )z$``empty-cells`` property validation.)showhider%   rF   r%   r%   r&   empty_cells   s    rR   colorc                 C   s   t | }|dkrdS |S dS )z0``*-color`` and ``color`` properties validation.rL   r<   Nr   )r@   resultr%   r%   r&   rS      s    zbackground-image)r0   c                 C   s   t | dkrdS t| |S NnonerV   Nr   r   r@   r>   r%   r%   r&   background_image   s    rZ   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.rV   rW   r   urlr    ZexternalN)r   r   )r@   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    ra   c                 C   s   t | S )z,``background-position`` property validation.r   r`   r%   r%   r&   background_position   s    rc   c                 C   s   t | S )z(``object-position`` property validation.rb   r`   r%   r%   r&   object_position   s    rd   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)rf   re   ))rf   )re   )space)roundr   c                 s   s   | ]}|d v V  qdS ))rf   re   rg   rh   Nr%   ).0kr%   r%   r&   	<genexpr>   s   z$background_repeat.<locals>.<genexpr>N)tuplemapr   r_   allr$   keywordsr%   r%   r&   background_repeat   s    rq   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rg }| D ]8}t|ddd}|r|| qdt|dkrd|d qdt |d	krt|S d
S )z#Validation for ``background-size``.r    r   )containcoverauto)rt   rt   FTnegative
percentager   N)r_   r   r   appendrl   )r$   r@   rA   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%   rF   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rv   r   ri   r@   r%   r%   r&   
<listcomp>      z"border_spacing.<locals>.<listcomp>r    r   r   Nrn   r_   rl   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 )FTru   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.)
rV   hiddendotteddasheddoubleinsetoutsetgrooveridgesolidr%   rF   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.)rt   avoid
avoid-pagepageleftrightZrectoZversoavoid-columncolumnalwaysr%   rF   r%   r%   r&   break_before_after.  s    r   c                 C   s   | dv S )z%``break-inside`` property validation.)rt   r   r   r   r%   rF   r%   r%   r&   break_inside7  s    r   c                 C   s   | dv S )z-``box-decoration-break`` property validation.)slicecloner%   rF   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rV   rt   N)typerB   r   r@   rA   r%   r%   r&   block_ellipsisE  s
    

r   continuec                 C   s   | dv S )z!``continue`` property validation.)rt   discardr%   rF   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    rV   r   	int_valuer   r   r%   r%   r&   	max_linesX  s    
r   c                 C   s   | dv S )z%``margin-break`` property validation.)rt   Zkeepr   r%   rF   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.identrt   N)r   Zlower_valuerB   rI   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.rt   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 rH   r   r   r%   r%   r&   rk     r   zmarks.<locals>.<genexpr>cropcrossr    r   )r   r   rV   r%   N)r_   rl   r   )r$   rp   rA   r%   r%   r&   marks  s    r   zoutline-stylec                 C   s   | dv S )z(``outline-style`` properties validation.)	rV   r   r   r   r   r   r   r   r   r%   rF   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   )ZthinZmediumZthickNr   r   r@   ry   rA   r%   r%   r&   border_width  s    	r   zborder-image-sourcezmask-border-sourcec                 C   s   t | dkrdS t| |S rU   rX   rY   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 rd}|d q d S qdt|t|   krd	krn nt|S d S )
NFrw   r   %r   fillr    T   )		enumerater   rB   rx   r
   r   r_   intrl   )r$   rz   r   ir@   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rdkrn nt|S d S )	Nrt   r   r   FTru   r    r   )r   rx   r   rB   r
   r   r_   rl   r$   rz   r@   ry   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   rB   rx   r
   r   r_   rl   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 rH   r   r   r%   r%   r&   rk     r   z&border_image_repeat.<locals>.<genexpr>>   rh   re   rg   stretch)r_   rl   setro   r%   r%   r&   border_image_repeat  s    r   c                 C   s   | dv S )N)Z	luminancealphar%   rF   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   rt   Nr   r   r%   r%   r&   column_width  s    r   c                 C   s   | dv S )z$``column-span`` property validation.)rn   rV   r%   rF   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%   rF   r%   r%   r&   
box_sizing  s    r   c                 C   s   | dv S )z'``caption-side`` properties validation.)topbottomr%   rF   r%   r%   r&   caption_side  s    r   c                 C   s   | dv S )z``clear`` property validation.)r   r   ZbothrV   r%   rF   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rdS dS )z%Validation for the ``clip`` property.Zrectr   rt   r%   N)r   r_   r   rx   r   rl   )r@   r4   r"   argsrz   argry   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rd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   /normalrV   )	listr_   r   rB   r   r   rx   r   r   )r$   r>   parsed_tokensr@   Zparsed_tokenrA   r%   r%   r&   content7  s6    r   c                 C   s   t | ddS )z*``counter-increment`` property validation.r    default_integercounterr`   r%   r%   r&   counter_incrementU  s    r   c                 C   s   t | ddS )z&``counter-reset`` property validation.r   r   r   r`   r%   r%   r&   counter_reset[  s    r   c                 C   s   t | ddS )z$``counter-set`` property validation.r   r   r   r`   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.rV   r%   Nzgot an empty token listr   )rV   r;   r<   zInvalid counter name: r   )	r   iternextr   rB   r   r   rx   rl   )r$   r   r@   resultsZ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rw   rt   Nr   r@   ry   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.FTru   rt   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)rw   rv   r   Nr   r   r%   r%   r&   gap  s    r   c                 C   s   | dv S )z$``column-fill`` property validation.)rt   Zbalancer%   rF   r%   r%   r&   column_fill  s    r   c                 C   s   | dv S )z"``direction`` property validation.)Zltrrtlr%   rF   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|pd}|pd}|r|dv r|||fS n||fS dS )z ``display`` property validation.r   Nr    r   )	rV   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   tableZflexZgridz	list-itemr   r   )r   r   )r   r_   rB   rl   split)r$   r@   rB   outsideinsideZ	list_itemr%   r%   r&   display  sB    

r   floatc                 C   s   | dv S )z``float`` property validation.)r   r   ZfootnoterV   r%   rF   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&   rk     r   zfont_family.<locals>.<genexpr> c                 s   s   | ]}|j V  qd S rH   rB   r   r%   r%   r&   rk     r   N)r_   r   rB   rn   joinr`   r%   r%   r&   font_family  s    
r  c                 C   s   | dv S )N)rt   r   rV   r%   rF   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   rB   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 rt fdd|D }tfdd|D r d S  j qH d S qHrtS d S )	Nr    r   r   ))zcommon-ligatureszno-common-ligatures)zhistorical-ligatureszno-historical-ligatures)zdiscretionary-ligatureszno-discretionary-ligatures)Z
contextualzno-contextualr   c                 3   s   | ]} j |v r|V  qd S rH   r   ri   couplerI   r%   r&   rk     s   z)font_variant_ligatures.<locals>.<genexpr>c                 3   s   | ]}| v V  qd S rH   r%   ri   rB   rz   r%   r&   rk   !  r   	r_   r   extendr   rB   r   anyrx   rl   r$   rA   ZcouplesZ
all_valuesr  Zconcurrent_valuesr%   r@   rz   r&   font_variant_ligatures  s,    

r  c                 C   s   | dv S )N)r   subsuperr%   rF   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-capsZunicaseztitling-capsr%   rF   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 rt fdd|D }tfdd|D r d S  j qH d S qHrtS d S )	Nr    r   r   ))zlining-numszoldstyle-nums)zproportional-numsztabular-nums)zdiagonal-fractionszstacked-fractions)Zordinal)zslashed-zeror   c                 3   s   | ]} j |v r|V  qd S rH   r   r  rI   r%   r&   rk   L  s   z'font_variant_numeric.<locals>.<genexpr>c                 3   s   | ]}| v V  qd S rH   r%   r  r	  r%   r&   rk   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rt |jd
krt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)ri   letterr%   r%   r&   rk   o  r   zLfont_feature_settings.<locals>.font_feature_settings_list.<locals>.<genexpr>)r_   r   getrB   r   rn   )r$   featurerB   r@   r%   r%   r&   font_feature_settings_list^  s(    

z9font_feature_settings.<locals>.font_feature_settings_listr_   r   r   )r$   r  r%   r%   r&   font_feature_settingsX  s
    
r   c                 C   s   | dv S )N)r   zhistorical-formsr%   rF   r%   r%   r&   font_variant_alternatesx  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 rt fdd|D }tfdd|D r d S  j qH d S qHrtS d S )	Nr    r   r   ))Zjis78Zjis83Zjis90Zjis04Z
simplifiedZtraditional)
full-widthzproportional-width)rubyr   c                 3   s   | ]} j |v r|V  qd S rH   r   r  rI   r%   r&   rk     s   z*font_variant_east_asian.<locals>.<genexpr>c                 3   s   | ]}| v V  qd S rH   r%   r  r	  r%   r&   rk     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   )r_   r   rB   )r$   keyrB   r%   r%   r&   font_variation_settings_list  s    z=font_variation_settings.<locals>.font_variation_settings_listr  )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.FTru   )ZsmallerZlargerN)r   r   r   ZFONT_SIZE_KEYWORDS)r@   ry   Zfont_size_keywordr%   r%   r&   	font_size  s    
r(  c                 C   s   | dv S )z#``font-style`` property validation.)r   ZitalicZobliquer%   rF   r%   r%   r&   
font_style  s    r)  c                 C   s   | dv S )z-Validation for the ``font-stretch`` property.)	zultra-condensedzextra-condensedZ	condensedzsemi-condensedr   zsemi-expandedexpandedzextra-expandedzultra-expandedr%   rF   r%   r%   r&   font_stretch  s    r+  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   ZboldZbolderZlighterr   N)	d      i,  i  i  iX  i  i   i  r   r   r   r   r%   r%   r&   font_weight  s    
r/  c                 C   s   | dv S )N)r   rr   rs   rV   z
scale-downr%   rF   r%   r%   r&   
object_fit  s    r0  c                 C   s   t | S rH   )r   rI   r%   r%   r&   image_resolution  s    r1  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
    r2  c                 C   s   t | }|r|S dS )z"Validation for ``outline-offset``.Nr   r   r%   r%   r&   outline_offset  s    r3  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   Nrw   r   	dimension)r   r   rB   r
   r   rI   r%   r%   r&   line_height  s    r5  c                 C   s   | dv S )z,``list-style-position`` property validation.)r   r   r%   rF   r%   r%   r&   list_style_position  s    r6  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 rd}||d j qdS n|d	 d}t||d k rd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   r4   symbols)Zcyclicnumeric
alphabeticsymbolicrD   r    r   Nr:  )r9  r8  r^   z	symbols())	r   rB   r"   r   	argumentsr_   rx   rangerl   )r@   Z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.rt   N)r   length_or_precentager   r%   r%   r&   min_width_height6  s    r@  zpadding-topzpadding-rightzpadding-bottomzpadding-leftc                 C   s   t | ddd}|r|S dS )z$``padding-*`` properties validation.FTru   Nr   r   r%   r%   r&   r?  C  s    r?  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-heightFTru   rV   ZpxN)r   r   r
   r   r   r%   r%   r&   max_width_heightO  s
    rA  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   rw   r,  N)r   minmaxrB   rI   r%   r%   r&   opacity[  s    

rD  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.rt   r   Nr.  rI   r%   r%   r&   z_indexe  s    rE  ZorphansZ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   r@   rB   r%   r%   r&   orphans_widowso  s    rH  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    rt   r   rG  r%   r%   r&   column_countz  s    rI  c                 C   s   | dv S )z)Validation for the ``overflow`` property.)rt   visibler   rC   r%   rF   r%   r%   r&   overflow  s    rK  c                 C   s   | dv S )z.Validation for the ``text-overflow`` property.)r   Zellipsisr%   rF   r%   r%   r&   text_overflow  s    rL  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.r4   Zrunningr    r   r   z	running())ZstaticrelativeabsoluterD   N)r   r"   r_   r;  rB   r   r   r%   r%   r&   position  s    
rO  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   )rt   rV   r   c                 s   s   | ]}|j d kV  qdS )r   Nr   r   r%   r%   r&   rk     r   zquotes.<locals>.<genexpr>c                 s   s   | ]}|j V  qd S rH   r   r   r%   r%   r&   rk     r   N)r_   r   rn   rl   )r$   rA   stringsr%   r%   r&   quotes  s    rQ  c                 C   s   | dv r| S dS )z,Validation for the ``table-layout`` property)rD   rt   Nr%   rF   r%   r%   r&   table_layout  s    rR  c                 C   s   | dv S )z'``text-align-all`` property validation.)r   r   centerjustifystartendr%   rF   r%   r%   r&   text_align_all  s    rW  c                 C   s   | dv S )z(``text-align-last`` property validation.)rt   r   r   rS  rT  rU  rV  r%   rF   r%   r%   r&   text_align_last  s    rX  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>rV   >   zline-throughZblinkZoverlineZ	underlineN)r_   issubset)r$   rp   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   ZwavyNr%   rF   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   rt   	from-fontN)rt   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.)rV   Z	uppercaseZ	lowercase
capitalizer"  r%   rF   r%   r%   r&   text_transform  s    ra  c                 C   s,   t | dd}|r|S t| }|dv r(|S dS )z.Validation for the ``vertical-align`` propertyTr   )baselineZmiddler  r  ztext-topztext-bottomr   r   Nr   r   r%   r%   r&   vertical_align  s    rc  c                 C   s   | dv S )$``white-space`` property validation.)rJ  r   rN   r%   rF   r%   r%   r&   
visibility  s    re  c                 C   s   | dv S )rd  )r   prenowrapzpre-wrapzpre-liner%   rF   r%   r%   r&   white_space  s    rh  c                 C   s   | dv S )z&``overflow-wrap`` property validation.)Zanywherer   z
break-wordr%   rF   r%   r%   r&   overflow_wrap  s    ri  c                 C   s   | dv S )z#``word-break`` property validation.)r   z	break-allr%   rF   r%   r%   r&   
word_break  s    rj  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   )r@   Zbasisr%   r%   r&   
flex_basis  s
    
rk  c                 C   s   | dv S )z'``flex-direction`` property validation.)rowzrow-reverser   zcolumn-reverser%   rF   r%   r%   r&   flex_direction(  s    rm  z	flex-growzflex-shrinkc                 C   s   | j dkr| jS d S Nr   )r   rB   rI   r%   r%   r&   flex_grow_shrink/  s    
ro  c                 C   s6   t | }|dv r|S |rdS t| ddd}|r2|S dS )zParse ``inflexible-breadth``.)rt   min-contentmax-contentNFTru   r   )r@   rA   ry   r%   r%   r&   _inflexible_breadth7  s    rr  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``.r4  r   fr)r   rB   unitr
   rr  rI   r%   r%   r&   _track_breadthC  s    ru  c                 C   s   t | }|r|S t| }|r|\}}|dkrdt|dkrt|d }t |d }|r|rd||fS n2|dkrt|dkrt|d ddd	}|rd
|fS dS )zParse ``track-size``.minmaxr   r   r    minmax()zfit-contentFTru   zfit-content()N)ru  r   r_   rr  r   )r@   track_breadthr4   r"   r   Zinflexible_breadthry   r%   r%   r&   _track_sizeJ  s"    ry  c                 C   s   t | ddd}|r|S t| }|r|\}}|dkrt|dkrt |d ddd}|rnt|d }|rnd||fS t|d }|d	v s|rt |d ddd}|rd|p||fS d
S )zParse ``fixed-size``.FTru   rv  r   r   r    rw  )rp  rq  rt   N)r   r   r_   ru  r   )r@   ry   r4   r"   r   rx  rA   Zfixed_breadthr%   r%   r&   _fixed_size_  s&    

rz  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   rx   rB   rl   )r   Zreturn_line_namesr@   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)ry  rx   rl   )r$   return_tokensr@   
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   )rl  r   Zdenserl  r   c                 S   s   g | ]}t |qS r%   r   r   r%   r%   r&   r     r   z"grid_auto_flow.<locals>.<listcomp>r   Nr_   r   rl   r$   rA   rp   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rd	}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rt |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}qt
|
}|r|s|d d}|| qt|
}|r<d}|s*|d d}|| q  dS |sT|d d}|sh|d |d
|t	|f qZ dS |r|rdS |s|d t	|S )z@``grid-template-columns`` and ``grid-template-rows`` validation.r    r   rV   ZsubgridNre   r   r   	auto-fillzrepeat()FTr%   )r  zauto-fit)r_   r   rx   r|  r   r   
is_integerrB   r   rl   rz  ry  )r$   r}  Zsubgrid_tokensr@   Z
line_namesr4   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|rqR|d d
}qR|jdkrd}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 qn qqАqq t|S dS )z,``grid-template-areas`` property validation.r    r   rV   r   NFr   r   .Tr{  c                 s   s   | ]}t |V  qd S rH   )r_   )ri   rl  r%   r%   r&   rk   5  r   z&grid_template_areas.<locals>.<genexpr>)rU  )r_   r   r   r   rB   rx   rl   r   r   r2   r<  )r$   Z
grid_areasr@   Zcomponent_valuesrl  Zlast_is_dotrB   ZcoordinatesZareasyxareaZ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 rd}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   rt   spanNr   )r_   r   rB   r   r  r   )r$   r@   rA   r   r   r  r%   r%   r&   	grid_lineQ  sD    r  c                 C   s   | dv S )z"``flex-wrap`` property validation.)rg  wrapzwrap-reverser%   rF   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   )rS  space-betweenspace-aroundspace-evenlyr   r   
flex-startflex-endrU  rV  r   r   r   c                 s   s   | ]}t |V  qd S rH   r   r   r%   r%   r&   rk     r   z"justify_content.<locals>.<genexpr>safeunsafe)rS  rU  rV  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rd|fS nvt | dkrtdd | D }|d d	v rt|d d
v r|S n:d|v rd|v sd|v r|S nd|v rt|h d@ r|S dS )z&``justify-items`` property validation.r    r   )r   r   rS  rU  rV  
self-startself-endr  r  r   r   legacyrb  firstr   c                 s   s   | ]}t |V  qd S rH   r   r   r%   r%   r&   rk     r   z justify_items.<locals>.<genexpr>r  	rS  rU  rV  r  r  r  r  r   r   lastr  >   r   r   rS  N)r_   r   rl   r   r  r%   r%   r&   justify_items  s"    
r  c                 C   s   t | dkr8t| d }|dv r&|fS |dkrd|fS nXt | dkrtdd | D }|d d	v rt|d d
v r|S nd|v rd|v sd|v r|S dS )z%``justify-self`` property validation.r    r   )rt   r   r   rS  rU  rV  r  r  r  r  r   r   rb  r  r   c                 s   s   | ]}t |V  qd S rH   r   r   r%   r%   r&   rk     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rd|fS nXt | dkrtdd | D }|d d	v rt|d d
v r|S nd|v rd|v sd|v r|S dS )z$``align-items`` property validation.r    r   )	r   r   rS  rU  rV  r  r  r  r  rb  r  r   c                 s   s   | ]}t |V  qd S rH   r   r   r%   r%   r&   rk     r   zalign_items.<locals>.<genexpr>r  rS  rU  rV  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rd|fS nXt | dkrtdd | D }|d d	v rt|d d
v r|S nd|v rd|v sd|v r|S dS )z#``align-self`` property validation.r    r   )
rt   r   r   rS  rU  rV  r  r  r  r  rb  r  r   c                 s   s   | ]}t |V  qd S rH   r   r   r%   r%   r&   rk     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rd|fS nXt | dkrtdd | D }|d d	v rt|d d
v r|S nd|v rd|v sd|v r|S dS )z&``align-content`` property validation.r    r   )
rS  r  r  r  r   r   r  r  rU  rV  rb  r  r   c                 s   s   | ]}t |V  qd S rH   r   r   r%   r%   r&   rk     r   z align_content.<locals>.<genexpr>r  )rS  rU  rV  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 rn  rF  rI   r%   r%   r&   order  s    r  c                 C   s   | dv S )z#Validation for ``image-rendering``.)rt   zcrisp-edgesZ	pixelatedr%   rF   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 rdn|}||fS )z%Validation for ``image-orientation``.)rV   z
from-imager  flipNTr   F)r   r   r   )r$   rA   angler  r@   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 rtjS |dkrt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   )rt   portrait	landscapeNr   )r  r  r  )rn   r_   rl   r   Z
PAGE_SIZESZINITIAL_PAGE_SIZE)	r$   r   rp   rA   ZorientationZ	page_sizer   r   r   r%   r%   r&   size3  s6    





r  )r7   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``.rV   c                 S   s   g | ]
}|j qS r%   r   ri   r   r%   r%   r&   r   d  r   zanchor.<locals>.<listcomp>attrr   attr()r   N)r   r   rB   r@   r4   r"   r   	prototyper%   r%   r&   anchor[  s    r  )r7   r0   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``.rV   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   rB   )r@   r>   r\   r4   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   rG  r%   r%   r&   tab_sizez  s
    r  c                 C   s   t | }|dv r|S dS )zValidation for ``hyphens``.)rV   Zmanualrt   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``.rt   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``.FTru   r   rI   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 nt | 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rd|j|jfS |dkrdS nt | dkr| \}}}t|dks2|jdkr|jdurt|dksX|jdkr|jdurt|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    rt   )   r   r   r   Nr   r  r^   )r_   r   r   r   rB   )r$   r@   rA   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``.rV   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   rB   r   r  r%   r%   r&   lang  s    
r  )r8   r0   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 rH   r   r   r>   r%   r&   rk     s   z!bookmark_label.<locals>.<genexpr>N)rl   )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    rV   r   rG  r%   r%   r&   bookmark_level  s    r  c                 C   s   | dv S )z"Validation for ``bookmark-state``.)openclosedr%   rF   r%   r%   r&   bookmark_state  s    r  c                 C   s   | dv S )z$Validation for ``footnote-display``.)r   r   compactr%   rF   r%   r%   r&   footnote_display  s    r  c                 C   s   | dv S )z#Validation for ``footnote-policy``.)rt   liner   r%   rF   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 rH   r  r   r  r%   r&   rk     s   zstring_set.<locals>.<genexpr>r    rV   )rV   r%   )r_   r   rl   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rt|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rt
dd |D }	t	dd |	D r|||	f n dS n dS qt|dkr|dkrt	dd |D r||t
dd |D f q dS qt
|S dS )zValidation for ``transform``.rV   r%   Nr    r   Tr   rotate)Zskewxskewr  Zskewy)Z
translatex	translater  Z
translateyZscalexr   ZscaleZscaleyr   c                 s   s   | ]}|j d kV  qdS r   Nr   ri   ar%   r%   r&   rk   :  r   ztransform.<locals>.<genexpr>c                 s   s   | ]}|j V  qd S rH   r   r  r%   r%   r&   rk   ;  r   c                 s   s   | ]}t |d dV  qdS )Tr   Nr   r   r%   r%   r&   rk   =  s   c                 s   s   | ]}t |V  qd S rH   )r   r   r%   r%   r&   rk   D  r   c                 s   s   | ]}|d uV  qd S rH   r%   )ri   r  r%   r%   r&   rk   E  r      Zmatrixc                 s   s   | ]}|j d kV  qdS r  r   r  r%   r%   r&   rk   K  s   c                 s   s   | ]}|j V  qd S rH   r   r  r%   r%   r&   rk   M  r   )r   r   r_   r   r   rx   r	   r   rB   rn   rl   )
r$   Z
transformsr@   r4   r"   r   r  ry   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   Ztinycss2r   Ztinycss2.color4r    r   Z
propertiesr   r	   r
   utilsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   PREFIXr   r1   r3   r/   r   r:   r!   rG   rJ   rM   rO   rR   rS   rZ   r]   ra   rc   rd   rq   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/  r0  r1  r2  r3  r5  r6  r>  r@  r?  rA  rD  rE  rH  rI  rK  rL  rO  rQ  rR  rW  rX  r[  r\  r^  r_  ra  rc  re  rh  ri  rj  rk  rm  ro  rr  ru  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&   <module>   sl  X 
)
	





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

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

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