a
    Qh                    @   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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 rt||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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)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 rd}|d q d S qdt|t|   krd	krn 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rdkrn 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rd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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   /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|pd}|pd}|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 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)
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 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)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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)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 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   ))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 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   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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-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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``.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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   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|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   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 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   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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   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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   )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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   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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   )
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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   )
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 rd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 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   )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 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    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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``.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&'
	'

;