
    3vj
                       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 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e      Z*	 	 ddZ+ddZ, e+       ee#d                      Z- e+d       e+d       e+d       e+d       e+d       e+d       e+d       e+d       e+d       e+dd       e+d      e$d                                                                                     Z. e+       e$d               Z/ e+       e#d                Z0 e+       e#d!               Z1 e+d"      e$d#               Z2 e+d$d%      ee$d&                      Z3 e+d'd%      e$d(               Z4 e+       d)        Z5 e+       ed*               Z6 e+       ed+               Z7 e+       ed,               Z8 e+       ed-               Z9 e+d.       e+d/      ee#d0                             Z: e+       d1        Z; e+d2       e+d3       e+d4       e+d5       e+d6       e+d7       e+d8       e+d9      d:                                                         Z< e+d;       e+d<       e+d=       e+d>       e+d?       e+d@       e+dA       e+dB       e+dCd      e#dD                                                                       Z= e+dE       e+dF      e#dG                      Z> e+       e#dH               Z? e+       e#dI               Z@ e+       e$dJ               ZA e+dKd      e#dL               ZB e+d      e$dM               ZC e+d      e#dN               ZD e+d      e$dO               ZE e+dPd       e+dQd       e+dRd       e+dSd      e$dT                                    ZF e+d      dU        ZG e+dV      e#dW               ZH e+dX       e+dY       e+dZ       e+d[       e+d\       e+d]       e+d^       e+d_       e+d`d       e+da      e$db                                                                              ZI e+dcd%       e+ddd%      e$de                      ZJ e+df       e+dg      dh               ZK e+di       e+dj      dk               ZL e+dl       e+dm      dn               ZM e+do       e+dp      dq               ZN e+       e#dr               ZO e+d      e$ds               ZP e+d      e#dt               ZQ e+       e#du               ZR e+       e#dv               ZS e+       e#dw               ZT e+       e$dx               ZU e+d%      dy        ZV e+       dz        ZW e+       d{        ZX e+       d|        ZYd} ZZ e+d~       e+d       e+d       e+d       e+d       e+d       e+d       e+d       e+d       e+d       e+d       e+d       e+d       e+d       e+d       e+d       e+d      e$d                                                                                                                               Z[ e+d       e+d       e+d       e+d      e$d                                    Z\ e+dd       e+dd      e$d                      Z] e+d      e#d               Z^ e+       e#d               Z_ e+       d        Z` e+d      e#d               Za e+       ed               Zb e+       e#d               Zc e+       e$d               Zd e+       d        Ze e+       e#d               Zf e+       e#d               Zg e+       d        Zh e+       d        Zi e+       e#d               Zj e+       d        Zk e+       d        Zl e+       e$d               Zm e+       e#d               Zn e+       e#d               Zo e+       e$d               Zp e+       e#d               Zq e+d      e$d               Zr e+d       e+d      e$d                      Zs e+       e$d               Zt e+       e$d               Zu e+       e#d               Zv e+       e$d               Zw e+d       e+d       e+d       e+d      e$d                                    Zx e+d       e+d       e+d       e+d       e+d       e+d       e+d       e+d      e$d                                                                Zy e+dë       e+dī       e+dū       e+dƫ      e$dǄ                                    Zz e+       e$dȄ               Z{ e+       e$dɄ               Z| e+dʫ       e+d˫      e$d̄                      Z} e+d      e$d̈́               Z~ e+       e#d΄               Z e+       e#dτ               Z e+       e$dЄ               Z e+       dф        Z e+       e#d҄               Z e+       e#dӄ               Z e+       e#dԄ               Z e+       dՄ        Z e+       e#dք               Z e+       e$dׄ               Z e+       e$d؄               Z e+       e#dل               Z e+       e$dڄ               Z e+       e#dۄ               Z e+       e#d܄               Z e+       e#d݄               Z e+       e#dބ               Z e+       e$d߄               Z e+       e#d               Z e+d       e+d      e$d                      Zd Zd Zd Zd Zd Z e+d       e+d      d               Z e+       d        Z e+d       e+d      d               Z e+       d        Z e+d       e+d       e+d       e+d      d                             Z e+       e#d               Z e+       d        Z e+       d        Z e+       d        Z e+       d        Z e+       d        Z e+       d        Z e+       e$d               Z e+d      e#d               Z e+d      d        Z e+d      d         Z e+d      e$d               Z e+dd      e$d               Z e+       e$d               Z e+d      e$d               Z e+d      e$d               Z e+d      e$d               Z e+d      d	        Z e+d      e$d
               Z e+dd      d        Z e+d      e$d               Z e+d      e#d               Z e+d      e#d               Z e+d      e#d               Z e+dd      ed               Z e+       d        Z e+       e$d               Z e+       d        Zy(  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)Function	check_var)KNOWN_PROPERTIESZERO_PIXELS	Dimension)InvalidValuesPendingcomma_separated_list	get_angleget_content_listget_content_list_tokenget_custom_ident	get_imageget_keyword
get_length
get_numberget_percentageget_resolutionget_single_keywordget_urlparse_2d_positionparse_positionremove_whitespacesingle_keywordsingle_tokenz-weasy-c                       e Zd ZdZd Zy)PendingPropertyz>Property with validation done when defining calculated values.c                 :    t        || j                        d   d   S )Nr      )validate_non_shorthandname)selftokens
wanted_keys      W/root/.hermes/venv/lib/python3.12/site-packages/weasyprint/css/validation/properties.pyvalidatezPendingProperty.validate$   s    %fdii8;A>>    N)__name__
__module____qualname____doc__r,    r-   r+   r#   r#   "   s
    H?r-   r#   Nc                       f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                    | j                   j                  dd      }n}|t        v sJ |       |t        vsJ |       | _        | t        |<   rt
        j                  |       rt        j                  |       | S )z'Add ``function`` to the ``PROPERTIES``._-)r.   replacer   
PROPERTIESwants_base_urlPROPRIETARYaddUNSTABLE)functionr'   property_nameproprietaryunstabler9   s     r+   	decoratorzproperty.<locals>.decorator@   s     $$,,S#6D D''--':%+t+%"0#
4OOD!LLr-   r2   )r>   r?   r@   r9   rA   s   ```` r+   propertyrB   *   s    ,  r-   c                    |s$|t         vr|j                  d      st        d      |s$|t        vr|j                  d      st        d      | D ]  }t	        |      s|t        | |      ffc S  |j                  d      r|| ffS t        |   }t        |       }|dv r|}n&|j                  r
 || |      }n ||       }|t        ||ffS )z'Validator for non-shorthand properties.z--zunknown propertyzproperty not supported yet)initialinherit)r   
startswithr   r8   r
   r#   r   r9   )r)   r'   base_urlrequiredtokenr=   keywordvalues           r+   r&   r&   S   s    $44T__T=R.//J.tt7L899 <U?6489;;<
 tv  $H (G((""VX.EV$E=5Mr-   c                 
    | dv S )z.``background-attachment`` property validation.)scrollfixedlocalr2   rJ   s    r+   background_attachmentrQ   q   s    
 222r-   zbackground-colorzborder-top-colorzborder-right-colorzborder-bottom-colorzborder-left-colorzborder-block-start-colorzborder-block-end-colorzborder-inline-start-colorzborder-inline-end-colorzcolumn-rule-colorT)r@   ztext-decoration-colorc                     t        |       r| S y Nr   rI   s    r+   other_colorsrU   y   s     5 r-   c                 <    t        |       dk(  ryt        |       r| S y )Ninvertcurrentcolor)r   r   rT   s    r+   outline_colorrY      s&     5X%	U	 
r-   c                 
    | dv S )N)separatecollapser2   rP   s    r+   border_collapser]      s     ...r-   c                 
    | dv S )z$``empty-cells`` property validation.)showhider2   rP   s    r+   empty_cellsra      s     &&&r-   colorc                 .    t        |       }|dk(  ry|r| S y)z0``*-color`` and ``color`` properties validation.rX   rE   Nr   )rI   results     r+   rb   rb      s&     F	 
r-   zbackground-image)r9   c                 8    t        |       dk(  ryt        | |      S Nnonerg   Nr   r   rI   rG   s     r+   background_imagerk      !     5V#UH%%r-   zlist-style-imagec                 |    t        |       dk(  ryt        | |      }|r|d   dk(  r|d   d   dk(  r
d|d   d   fS yyy)z)``list-style-image`` property validation.rg   rh   r   urlr%   externalN)r   r   )rI   rG   
parsed_urls      r+   list_style_imagerq      sa     5V#)Ja=E!jmA&6*&D*Q-*** 'E! r-   c                 >    t        |       dk(  r| dd } t        |       S )z)``transform-origin`` property validation.   Nr   )lenr   r)   s    r+   transform_originrv      s&     6{aV$$r-   c                     t        |       S )z,``background-position`` property validation.r   ru   s    r+   background_positionry           &!!r-   c                     t        |       S )z(``object-position`` property validation.rx   ru   s    r+   object_positionr|      rz   r-   c                     t        t        t        |             }|dk(  ry|dk(  ry|dv r|dz  S t        |      dk(  rt	        d |D              r|S yy)	z*``background-repeat`` property validation.)zrepeat-x)repeat	no-repeat)zrepeat-y)r   r~   ))r   )r~   )space)roundr   c              3   $   K   | ]  }|d v  
 yw))r   r~   r   r   Nr2   ).0ks     r+   	<genexpr>z$background_repeat.<locals>.<genexpr>   s      " ::"   N)tuplemapr   rt   allr)   keywordss     r+   background_repeatr      sm     Sf-.H= &= &HH!|
8}c ""  r-   c                 h   t        |       dk(  r1| d   }t        |      }|dv r|S |dk(  ryt        |dd      }|r|dfS y
t        |       d	k(  reg }| D ]D  }t        |dd      }|r|j                  |       %t        |      dk(  s4|j                  d       F t        |      d	k(  rt	        |      S y
y
)z#Validation for ``background-size``.r%   r   )containcoverauto)r   r   FTnegative
percentager   N)rt   r   r   appendr   )r)   rI   rJ   lengthvaluess        r+   background_sizer      s     6{aq	e$**Nf#EEdCF## 	V	 	&E$GFf%U#v-f%	& v;!=   
r-   zbackground-clipzbackground-originc                 
    | dv S )z\Validation for the ``<box>`` type used in ``background-clip``
    and ``background-origin``.)
border-boxpadding-boxcontent-boxr2   rP   s    r+   boxr     s     BBBr-   c                     | D cg c]  }t        |d       }}t        |      r2t        |      dk(  r
|d   |d   fS t        |      dk(  rt        |      S yyc c}w )z,Validator for the `border-spacing` property.Fr   r%   r   r   Nr   r   rt   r   r)   rI   lengthss      r+   border_spacingr     sk     ?EEUz%%0EGE
7|w<1AJ
++\Q>!   Fs   Azborder-top-right-radiuszborder-bottom-right-radiuszborder-bottom-left-radiuszborder-top-left-radiuszborder-start-start-radiuszborder-start-end-radiuszborder-end-start-radiuszborder-end-end-radiusc                     | D cg c]  }t        |dd       }}t        |      r2t        |      dk(  r
|d   |d   fS t        |      dk(  rt        |      S yyc c}w )z/Validator for the `border-*-radius` properties.FTr   r%   r   r   Nr   r   s      r+   border_corner_radiusr     sn     PVVez%%DAVGV
7|w<1AJ
++\Q>!   Ws   Azborder-top-stylezborder-right-stylezborder-left-stylezborder-bottom-stylezborder-block-start-stylezborder-block-end-stylezborder-inline-start-stylezborder-inline-end-stylezcolumn-rule-stylec                 
    | dv S )z)``border-*-style`` properties validation.)
rg   hiddendotteddasheddoubleinsetoutsetgrooveridgesolidr2   rP   s    r+   border_styler   )  s      F F Fr-   zbreak-beforezbreak-afterc                 
    | dv S )z;``break-before`` and ``break-after`` properties validation.)r   avoid
avoid-pagepageleftrightrectoversoavoid-columncolumnalwaysr2   rP   s    r+   break_before_afterr   9  s    
  M M Mr-   c                 
    | dv S )z%``break-inside`` property validation.)r   r   r   r   r2   rP   s    r+   break_insider   B  s     EEEr-   c                 
    | dv S )z-``box-decoration-break`` property validation.)slicecloner2   rP   s    r+   box_decoration_breakr   I       (((r-   c                 `    | j                   dk(  rd| j                  fS t        |       }|dv r|S y)z%``box-ellipsis`` property validation.stringrg   r   N)typerK   r   rI   rJ   s     r+   block_ellipsisr   P  s<     zzX%++&&e$&&N 'r-   continuec                 
    | dv S )z!``continue`` property validation.)r   discardr2   rP   s    r+   	continue_r   \       )))r-   c                 Z    t        | dd      x}r|j                  S t        |       dk(  ryy )NFTr   integerrg   r   rK   r   rI   numbers     r+   	max_linesr   c  s7     EE4@@v@||	U	v	% 
&r-   c                 
    | dv S )z%``margin-break`` property validation.)r   keepr   r2   rP   s    r+   margin_breakr   l  s     111r-   c                 \    | j                   dk(  r| j                  dk(  rdS | j                  S y)z``page`` property validation.identr   N)r   lower_valuerK   rT   s    r+   r   r   s  s1     zzW**f4vE%++E r-   z
bleed-leftzbleed-rightz	bleed-topzbleed-bottomc                 6    t        |       dk(  ryt        |       S )z``bleed`` property validation.r   r   r   rT   s    r+   bleedr   {  s     5V#%  r-   c                     t        |       dk(  rt        d | D              }d|v rd|v r|S y
y
t        |       dk(  rt        | d         x}dv r|fS |dk(  ry	y
y
)z``marks`` property validation.r   c              3   2   K   | ]  }t        |        y wrS   r   r   rI   s     r+   r   zmarks.<locals>.<genexpr>       @U+@   cropcrossr%   r   )r   r   rg   r2   N)rt   r   r   )r)   r   rJ   s      r+   marksr     s|     6{a@@@X'X"5O #6	V	"6!9--G2CC:  
r-   zoutline-stylec                 
    | dv S )z(``outline-style`` properties validation.)	rg   r   r   r   r   r   r   r   r   r2   rP   s    r+   outline_styler     s      = = =r-   zborder-top-widthzborder-right-widthzborder-left-widthzborder-bottom-widthzborder-block-start-widthzborder-block-end-widthzborder-inline-start-widthzborder-inline-end-widthzcolumn-rule-widthzoutline-widthc                 H    t        | d      x}r|S t        |       x}dv r|S y)z=Border, column rule and outline widths properties validation.Fr   )thinmediumthickNr   r   rI   r   rJ   s      r+   border_widthr     s9     EE22v2u%%*EE Fr-   zborder-image-sourcezmask-border-sourcec                 8    t        |       dk(  ryt        | |      S rf   ri   rj   s     r+   border_image_sourcer     rl   r-   zborder-image-slicezmask-border-slicec                 ~   g }d}t        |       D ]~  \  }}t        |d      x}r|j                  |       't        |      dk(  r(|s&|dt	        |       dz
  fv rd}|j                  d       ]t        |d      x}r|j                  |       ~ y  dt	        |      t        |      z
  cxk  rdk  rt        |      S  y y )NFr   fillr   r%   T   )	enumerater   r   r   rt   r   intr   )r)   r   r   irI   r   r   s          r+   border_image_slicer     s     FDf% 
5'>>:>MM*%6)$1CKRSO@T;TDMM&!!%%88V8MM&!
 	CK#d)#(q(V} )r-   zborder-image-widthzmask-border-widthc                     g }| D ]f  }t        |      dk(  r|j                  d       #t        |d      x}r|j                  |       Dt        |dd      x}r|j                  |       f y  dt	        |      cxk  rdk  rt        |      S  y y )Nr   Fr   Tr   r%   r   )r   r   r   r   rt   r   r)   r   rI   r   r   s        r+   border_image_widthr     s     F u'MM&!!%%88V8MM&!!%%DIIVIMM&! 	CK1V} r-   zborder-image-outsetzmask-border-outsetc                     g }| D ]E  }t        |d      x}r|j                  |       $t        |d      x}r|j                  |       E y  dt        |      cxk  rdk  rt	        |      S  y y )NFr   r%   r   )r   r   r   rt   r   r   s        r+   border_image_outsetr     sy     F 6666MM&!!%%88V8MM&! 	CK1V} r-   zborder-image-repeatzmask-border-repeatc                 |    dt        |       cxk  rdk  r(n y t        d | D              }t        |      h dk  r|S y y )Nr%   r   c              3   2   K   | ]  }t        |        y wrS   r   r   s     r+   r   z&border_image_repeat.<locals>.<genexpr>  r   r   >   r   r   r~   stretch)rt   r   setr   s     r+   border_image_repeatr    sB     	CK1@@@x=CCO D r-   c                 
    | dv S )N)	luminancealphar2   rP   s    r+   mask_border_moder    s     ,,,r-   c                 J    t        | d      x}r|S t        |       }|dk(  r|S y)z%``column-width`` property validation.Fr   r   Nr   r   s      r+   column_widthr     s7     EE22v2% G& r-   c                 
    | dv S )z$``column-span`` property validation.)r   rg   r2   rP   s    r+   column_spanr
    s     o%%r-   c                 
    | dv S )z7Validation for the ``box-sizing`` property from css3-ui)r   r   r   r2   rP   s    r+   
box_sizingr    s     BBBr-   c                 
    | dv S )z'``caption-side`` properties validation.)topbottomr2   rP   s    r+   caption_sider    s     '''r-   c                 
    | dv S )z``clear`` property validation.)r   r   inline-start
inline-endbothrg   r2   rP   s    r+   clearr     s     UUUr-   c                 :   t        |       }|j                         }|j                  dk(  rbt        |      dk(  rTg }|D ]B  }t	        |      dk(  r|j                  d       #t        |      x}r|j                  |       B y t        |      S t	        |       dk(  ryy)z%Validation for the ``clip`` property.rectr   r   Nr2   )r	   split_commar'   rt   r   r   r   r   )rI   r=   	argumentsr   argumentr   s         r+   clipr  '  s     H$$&I}}3y>Q#6! 	H8$.f%%h///f%	 V}	U	v	% 
&r-   c                    t        |       } g }| rot        |       dk\  r]| d   j                  dk(  rK| d   j                  dk(  r9| d   | dd } }t	        ||      xs t        ||      x}r|j                  |       nyn| rot        |       dk(  ry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   Nrs   r   /normalrg   )	listrt   r   rK   r   r   r   r   r   )r)   rG   parsed_tokensrI   parsed_tokenrJ   s         r+   contentr'  ;  s
    &\FM
v;!q	) ;q	SV@V"1Ivabz6E(9UWUH=UU|U$$\2  6{a
6{aF2JOOx72JOOy(VBZ-=-=-D (G$$zFH--r-   c                     t        | d      S )z*``counter-increment`` property validation.r%   default_integercounterru   s    r+   counter_incrementr-  V       61--r-   c                     t        | d      S )z&``counter-reset`` property validation.r   r)  r+  ru   s    r+   counter_resetr0  \  r.  r-   c                     t        | d      S )z$``counter-set`` property validation.r   r)  r+  ru   s    r+   counter_setr2  b  r.  r-   c                 v   t        |       dk(  ryt        |       } t        | d      }|sJ d       g }|||j                  dk7  ry|j                  }|dv rt        d|       t        | d      }|r(t        |d	      x}r|j                  }t        | d      }n|}|j                  ||f       ||t        |      S )
zB``counter-increment`` and ``counter-reset`` properties validation.rg   r2   Nzgot an empty token listr   )rg   rD   rE   zInvalid counter name: Tr   )	r   iternextr   rK   r   r   r   r   )r)   r*  rI   resultscounter_namer   r   s          r+   r,  r,  h  s    &!V+&\FE+++5G

:: {{99"8 GHHVT"
5$ ??f?llG&E &Gg./ 
  >r-   r  r   r   r  zinset-block-startzinset-block-endzinset-inline-startzinset-inline-endz
margin-topzmargin-rightzmargin-bottomzmargin-leftzmargin-block-startzmargin-block-endzmargin-inline-startzmargin-inline-endztext-underline-offsetc                 D    t        | d      x}r|S t        |       dk(  ryy)z5``margin-*`` and various other properties validation.Tr   r   Nr   rI   r   s     r+   lenght_precentage_or_autor<    s0    ( Ed33v35V# $r-   heightwidthz
block-sizezinline-sizec                 F    t        | dd      x}r|S t        |       dk(  ryy)z7Validation for the ``width`` and ``height`` properties.FTr   r   Nr   r;  s     r+   width_heightr@    s2     EEdCCvC5V# $r-   z
column-gapzrow-gapc                 L    t        | dd      x}r|S t        |       }|dk(  r|S y)z=Validation for the ``column-gap`` and ``row-gap`` properties.TF)r   r   r#  Nr   r   s      r+   gaprB    s9    
 EdUCCvC% G( r-   c                 
    | dv S )z$``column-fill`` property validation.)r   balancer2   rP   s    r+   column_fillrE    r   r-   c                 
    | dv S )z"``direction`` property validation.)ltrrtlr2   rP   s    r+   	directionrI    s     n$$r-   c                 r   | D ]  }|j                   dk7  s y t        |       dk(  r:| d   j                  }|dv r|fS |dv rt        |j	                  d            S |dk(  ry	dx}x}}| D ]1  }|j                  }|d
v r|r y|}|dv r|r y|}%|dk(  r|r y|}1 y |xs d}|xs d}|r
|dv r|||fS y||fS )z ``display`` property validation.r   Nr%   r   )	rg   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-gridr6   zinline-block)inline	flow-root)blockrK  )flowrL  tableflexgridz	list-itemrM  rN  )rN  rL  )r   rt   rK   r   split)r)   rI   rK   outsideinside	list_items         r+   displayrV    s!     ::  6{aq	 6 6 8ODDS)**n$*#''G'fy ''GDDFk!I"  GvF**VY// +   r-   floatc                 
    | dv S )z``float`` property validation.)r   r   r  r  footnoterg   r2   rP   s    r+   float_rZ    s      K K Kr-   c                     t        |       dk(  r!| d   j                  dk(  r| d   j                  S | r+t        d | D              rdj	                  d | D              S yy)z$``font-family`` property validation.r%   r   r   c              3   :   K   | ]  }|j                   d k(    yw)r   Nr   r   s     r+   r   zfont_family.<locals>.<genexpr>   s     B%

g-B    c              3   4   K   | ]  }|j                     y wrS   rK   r   s     r+   r   zfont_family.<locals>.<genexpr>       88   N)rt   r   rK   r   joinru   s    r+   font_familyre    sZ     6{aF1INNh6ay	CB6BBxx8888 Cr-   c                 
    | dv S )N)r   r#  rg   r2   rP   s    r+   font_kerningrg         000r-   c                 ^    t        |       }|dk(  r|S | j                  dk(  r| j                  S y )Nr#  r   r   r   rK   r   s     r+   font_language_overriderk  
  s6     % G(	x	{{ 
 r-   c                 |   t        |       dk(  rt        | d         }|dv r|S g d}g }|D ]  }|j                  |        | D ]h  j                  dk7  r y j                  |v rFt        fd|D              }t        fd|D              r y j                  j                         h y  rt              S y )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   @   K   | ]  }j                   |v s|  y wrS   ra  r   couplerI   s     r+   r   z)font_variant_ligatures.<locals>.<genexpr>'  #      %G!v0E%G   c              3   &   K   | ]  }|v  
 y wrS   r2   r   rK   r   s     r+   r   z)font_variant_ligatures.<locals>.<genexpr>)       Bu5F?B   	rt   r   extendr   rK   r6  anyr   r   r)   rJ   couples
all_valuesrp  concurrent_valuesrI   r   s         @@r+   font_variant_ligaturesr~    s    
6{afQi(((NF)G
 J "&!" :: ;;*$ $ %G%,%G !GB0ABBekk* V} r-   c                 
    | dv S )N)r#  subsuperr2   rP   s    r+   font_variant_positionr  3  rh  r-   c                 
    | dv S )N)r#  z
small-capszall-small-capszpetite-capszall-petite-capsunicaseztitling-capsr2   rP   s    r+   font_variant_capsr  9  s      6 6 6r-   c                 ~   t        |       dk(  rt        | d         }|dk(  r|S g d}g }|D ]  }|j                  |        | D ]h  j                  dk7  r y j                  |v rFt        fd|D              }t        fd|D              r y j                  j                         h y  rt              S y )Nr%   r   r#  ))zlining-numszoldstyle-nums)zproportional-numsztabular-nums)zdiagonal-fractionszstacked-fractions)ordinal)zslashed-zeror   c              3   @   K   | ]  }j                   |v s|  y wrS   ra  ro  s     r+   r   z'font_variant_numeric.<locals>.<genexpr>T  rq  rr  c              3   &   K   | ]  }|v  
 y wrS   r2   rt  s     r+   r   z'font_variant_numeric.<locals>.<genexpr>V  ru  rv  rw  rz  s         @@r+   font_variant_numericr  A  s    
6{afQi(hNF)G
 J "&!" :: ;;*$ $ %G%,%G !GB0ABBekk* V} r-   c                 j    t        |       dk(  rt        | d         dk(  ryt        d        } ||       S )z.``font-feature-settings`` property validation.r%   r   r#  c                    d\  }}t        |       dk(  rU| d d | d   }} |j                  dk(  rdddj                  |j                        }n-t	        |dd	
      x}r|j                  }nt        |       dk(  rd}t        |       dk(  rS| \  }|j                  dk(  r@t        |j                        dk(  r(t        d |j                  D              r|j                  }||||fS y y )NNNr   r  r   r%   r   )onoffFTr   r   r   c              3   N   K   | ]  }d t        |      cxk  xr dk  nc   yw)       N)ord)r   letters     r+   r   zLfont_feature_settings.<locals>.font_feature_settings_list.<locals>.<genexpr>v  s!     Mvts6{2d22Ms   #%)rt   r   getrK   r   r   )r)   featurerK   rI   r   s        r+   font_feature_settings_listz9font_feature_settings.<locals>.font_feature_settings_listf  s    #v;!"3BKEFzzW$ +//<%eeTJJJ[AEv;!FEzzX%#ekk*:a*?MMM#kkG5#4E>! $5r-   rt   r   r   )r)   r  s     r+   font_feature_settingsr  `  sB     6{aKq	2h>" "* &f--r-   c                 
    | dv S )N)r#  zhistorical-formsr2   rP   s    r+   font_variant_alternatesr    s    
 444r-   c                 ~   t        |       dk(  rt        | d         }|dk(  r|S g d}g }|D ]  }|j                  |        | D ]h  j                  dk7  r y j                  |v rFt        fd|D              }t        fd|D              r y j                  j                         h y  rt              S y )Nr%   r   r#  ))jis78jis83jis90jis04
simplifiedtraditional)
full-widthzproportional-width)rubyr   c              3   @   K   | ]  }j                   |v s|  y wrS   ra  ro  s     r+   r   z*font_variant_east_asian.<locals>.<genexpr>  rq  rr  c              3   &   K   | ]  }|v  
 y wrS   r2   rt  s     r+   r   z*font_variant_east_asian.<locals>.<genexpr>  ru  rv  rw  rz  s         @@r+   font_variant_east_asianr    s    
6{afQi(hNFG J "&!" :: ;;*$ $ %G%,%G !GB0ABBekk* V} r-   c                 j    t        |       dk(  rt        | d         dk(  ryt        d        } ||       S )z0``font-variation-settings`` property validation.r%   r   r#  c                     t        |       dk(  r=| \  }}|j                  dk(  r(|j                  dk(  r|j                  |j                  fS y y y )Nr   r   r   )rt   r   rK   )r)   keyrK   s      r+   font_variation_settings_listz=font_variation_settings.<locals>.font_variation_settings_list  sN    v;!JCxx8#

h(>yy%++-- )?# r-   r  )r)   r  s     r+   font_variation_settingsr    sB     6{aKq	2h>. . (//r-   c                 r    t        | dd      x}r|S t        |       }|dv r|S |t        j                  v r|S y)z"``font-size`` property validation.FTr   )smallerlargerN)r   r   r   FONT_SIZE_KEYWORDS)rI   r   font_size_keywords      r+   	font_sizer    sP     EEdCCvC#E*11  O>>>   ?r-   c                 
    | dv S )z#``font-style`` property validation.)r#  italicobliquer2   rP   s    r+   
font_styler    s     555r-   c                 
    | 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-expandedr2   rP   s    r+   font_stretchr    s      I I Ir-   c                     t        |       }|dv r|S | j                  dk(  r(| j                  | j                  dv r| j                  S yyy)z$``font-weight`` property validation.)r#  boldbolderlighterr   N)	d      i,  i  i  iX  i  i   i  )r   r   	int_valuer   s     r+   font_weightr    sV     % G99zzX%//"=??KK??" L #>r-   c                 
    | dv S )N)r   r   r   rg   z
scale-downr2   rP   s    r+   
object_fitr    s     HHHr-   c                     t        |       S rS   )r   rT   s    r+   image_resolutionr    s     %  r-   zletter-spacingzword-spacingc                 @    t        |       dk(  ryt        |       x}r|S y)z7Validation for ``letter-spacing`` and ``word-spacing``.r#  Nr   r;  s     r+   spacingr    s.    
 5X%E""v" #r-   c                 "    t        |       x}r|S y)z"Validation for ``outline-offset``.Nr   r;  s     r+   outline_offsetr    s     E""v" #r-   c                 h    t        |       dk(  ryt        | d      x}r|S t        | dd      x}r|S y)z$``line-height`` property validation.r#  Fr   Tr   N)r   r   r   )rI   r   r   s      r+   line_heightr    sJ     5X%ee4	4	4eeE	E	E 
Fr-   c                 
    | dv S )z,``list-style-position`` property validation.)rT  rS  r2   rP   s    r+   list_style_positionr    s     +++r-   c                    | j                   dk(  r| j                  S | j                   dk(  rd| j                  fS | j                   dk(  r| j                  dk(  rd}t        | j                        x}syg }|d   j                   dk(  r3|d   j                  |v r!d}|j                  |d   j                         ny|j                  d	       d}t        |      |dz   k  ryt        |t        |            D ]4  }||   j                   dk7  r y|j                  ||   j                         6 |d   d
v rt        |      dk  rydt        |      fS yy)z(``list-style-type`` property validation.r   r   r=   symbols)cyclicnumeric
alphabeticsymbolicrN   Nr   r%   r  )r  r  rs   z	symbols())	r   rK   r'   r   r  r   rt   ranger   )rI   allowed_typesfunction_argumentsr  indexr   s         r+   list_style_typer    s`    zzW{{	x	%++&&	z	!ejjI&=P&7&HH"H	a %%0!!$**m;  !3A!6!<!<=Z(E!"UQY.uc"456 	:A!!$))X5/2889	: Q<449~!U9-../ '>	!r-   z	min-widthz
min-heightzmin-block-sizezmin-inline-sizec                 8    t        |       dk(  ryt        | g      S )z7``min-width`` and ``min-height`` properties validation.r   )r   length_or_precentagerT   s    r+   min_width_heightr  7  s!     5V##UG,,r-   zpadding-topzpadding-rightzpadding-bottomzpadding-leftzpadding-block-startzpadding-block-endzpadding-inline-startzpadding-inline-endc                 (    t        | dd      x}r|S y)z$``padding-*`` properties validation.FTr   Nr  r;  s     r+   r  r  E  s#     EEdCCvC Dr-   z	max-widthz
max-heightzmax-block-sizezmax-inline-sizec                 d    t        | dd      x}r|S t        |       dk(  rt        t        d      S y)z'Validation for max-width and max-heightFTr   rg   pxN)r   r   r   r   r;  s     r+   max_width_heightr  T  s<     EEdCCvC5V#d## $r-   c                     t        |       x}r t        dt        d|j                              S t	        |       x}r#t        dt        d|j                  dz              S y)z(Validation for the ``opacity`` property.r%   r   r  N)r   minmaxrK   r   )rI   r   r   s      r+   opacityr  a  s`     E""v"1c!V\\*++%e,	,	,1c!Z--3455 
-r-   c                 X    t        |       dk(  ryt        | d      x}r|j                  S y)z(Validation for the ``z-index`` property.r   Tr4  N)r   r   rK   r   s     r+   z_indexr  k  s5     5V#eT2	2	2|| 
3r-   orphanswidowsc                 \    t        | dd      x}r|j                  dk\  r|j                  S yy)z9Validation for the ``orphans`` and ``widows`` properties.FTr   r%   Nr   rK   r   s     r+   orphans_widowsr  u  s9    
 EE4@@v@<<1<<  Ar-   c                 z    t        | dd      x}r|j                  dk\  r|j                  S yt        |       dk(  ryy)z-Validation for the ``column-count`` property.FTr   r%   r   Nr   r   s     r+   column_countr    H     EE4@@v@<<1<< 	U	v	% 
&r-   c                 
    | dv S )z)Validation for the ``overflow`` property.)r   visibler   rM   r2   rP   s    r+   overflowr    s     ===r-   c                 
    | dv S )z.Validation for the ``text-overflow`` property.)r  ellipsisr2   rP   s    r+   text_overflowr    s     ***r-   c                    | j                   dk(  r^| j                  dk(  rOt        | j                        dk(  r7| j                  d   j                   dk(  rd| j                  d   j                  fS t        | g      }|dv r|S y)	z!``position`` property validation.r=   runningr%   r   r   z	running())staticrelativeabsoluterN   N)r   r'   rt   r  rK   r   r   s     r+   positionr    s{     zzZEJJ)$;u1$);)@)@G)K!3!9!9:: %)G== >r-   c                     t        |       dk(  rt        | d         x}dv r|S | rGt        |       dz  dk(  r5t        d | D              r"t        d | D              }|ddd   |ddd   fS yyy)z``quotes`` property validation.r%   r   )r   rg   r   c              3   :   K   | ]  }|j                   d k(    yw)r   Nr]  r   s     r+   r   zquotes.<locals>.<genexpr>  s     ;5

h&;r^  c              3   4   K   | ]  }|j                     y wrS   ra  r   s     r+   r   zquotes.<locals>.<genexpr>  rb  rc  N)rt   r   r   r   )r)   rJ   stringss      r+   quotesr     s     6{a"6!9--G2BBN3v;?a';F;;888 ss|WQTT]**	 < (r-   c                     | dv r| S y)z,Validation for the ``table-layout`` property)rN   r   Nr2   rP   s    r+   table_layoutr    s     ## $r-   c                 
    | dv S )z'``text-align-all`` property validation.)r   r   centerjustifystartendr2   rP   s    r+   text_align_allr    s     LLLr-   c                 
    | dv S )z(``text-align-last`` property validation.)r   r   r   r  r  r  r  r2   rP   s    r+   text_align_lastr
         TTTr-   c                     | D ch c]  }t        |       c}x}dhk(  ryh d}t        |       t        |      k(  r|j                  |      r|S yyc c}w )z-``text-decoration-line`` property validation.rg   >   line-throughblinkoverline	underlineN)r   rt   issubset)r)   rI   r   allowed_valuess       r+   text_decoration_liner    s[     6<<E['<<&IGN
6{c(m#(9(9.(I )J# =s   Ac                     | dv r| S y)z.``text-decoration-style`` property validation.)r   r   r   r   wavyNr2   rP   s    r+   text_decoration_styler    s     AA Br-   c                 H    t        | d      x}r|S t        |       x}dv r|S y)z2``text-decoration-thickness`` property validation.Tr:  )r   z	from-fontNr   r   s      r+   text_decoration_thicknessr    s9     Ed33v3 '
'',A	A 
Br-   c                 &    t        | d      x}r|S y)z$``text-indent`` property validation.Tr:  Nr  r;  s     r+   text_indentr    s      Ed33v3 4r-   c                 
    | dv S )z#``text-align`` property validation.)rg   	uppercase	lowercase
capitalizer  r2   rP   s    r+   text_transformr    r  r-   c                 H    t        | d      x}r|S t        |       }|dv r|S y)z.Validation for the ``vertical-align`` propertyTr:  )baselinemiddler  r  ztext-topztext-bottomr  r  Nr   r   s      r+   vertical_alignr#    s<     Ed33v3% G ? ??r-   c                 
    | dv S )$``white-space`` property validation.)r  r   r\   r2   rP   s    r+   
visibilityr&    s     777r-   c                 
    | dv S )r%  )r#  prenowrapzpre-wrapzpre-liner2   rP   s    r+   white_spacer*    s     IIIr-   c                 
    | dv S )z&``overflow-wrap`` property validation.)anywherer#  z
break-wordr2   rP   s    r+   overflow_wrapr-         :::r-   c                 
    | dv S )z#``word-break`` property validation.)r#  z	break-allr2   rP   s    r+   
word_breakr0    s     ---r-   c                 B    t        | g      x}|S t        |       dk(  ryy)z#``flex-basis`` property validation.Nr'  )r@  r   )rI   basiss     r+   
flex_basisr3    s0     ug&&3	U	y	( 
)r-   c                 
    | dv S )z'``flex-direction`` property validation.)rowzrow-reverser   zcolumn-reverser2   rP   s    r+   flex_directionr6  %  s     HHHr-   z	flex-growzflex-shrinkc                 6    t        |       x}r|j                  S y rS   r  r   s     r+   flex_grow_shrinkr8  ,  s#     E""v"|| #r-   c                 P    t        |       x}dv r|S |ryt        | dd      x}r|S y)zParse ``inflexible-breadth``.)r   min-contentmax-contentNFTr   r   )rI   rJ   r   s      r+   _inflexible_breadthr<  4  s?    u%%*PP	eeE	E	E 
Fr-   c                     | j                   dk(  rZ| j                  dk\  rK| j                  j                         dk(  r.t	        | j                  | j                  j                               S t        |       S )zParse ``track-breadth``.	dimensionr   fr)r   rK   unitlowerr   r<  rT   s    r+   _track_breadthrB  >  sW    zz[ U[[A%5%**:J:J:LPT:Tejj&6&6&899u%%r-   c                 N   t        |       x}r|S t        |       }|j                         }|j                  dk(  r6t	        |      dk(  r't        |d         }t        |d         }|r|rd||fS yyy|j                  dk(  r't	        |      dk(  rt        |d   dd	      x}rd
|fS yyy)zParse ``track-size``.minmaxr   r   r%   minmax()zfit-contentFTr   zfit-content()N)rB  r	   r  r'   rt   r<  r   )rI   track_breadthr=   r  inflexible_breadthr   s         r+   _track_sizerH  E  s    &u--}-H$$&I}} y>Q!4Yq\!B*9Q<8M!m"$6FF '4! 
 
-	'y>Q#IaL5TRRvR'00 S  
(r-   c                 N   t        | dd      x}r|S t        |       }|j                         }|j                  dk(  rit	        |      dk(  rZt        |d   dd      x}rt        |d         }|rd||fS t        |d         }|d	v s|rt        |d   dd      }|r	d|xs ||fS y
y
y
y
)zParse ``fixed-size``.FTr   rD  r   r   r%   rE  )r:  r;  r   N)r   r	   r  r'   rt   rB  r   )rI   r   r=   r  rF  rJ   fixed_breadths          r+   _fixed_sizerK  W  s    EEdCCvCH$$&I}} S^q%8	!uNN6N*9Q<8M"FM::il+<<&y|ePTUM"F$5g}EE  AG &9 r-   c                     g }| j                   dk(  rX| j                  D ]>  } | j                   dk(  r|j                  | j                         .| j                   dk7  s> y t	        |      S y)zParse ``line-names``.z[] blockr   
whitespaceN)r   r'  r   rK   r   )rI   return_line_namess     r+   _line_namesrO  i  sg    zzZ]] 	EzzW$!((5|+		
 &''  r-   zgrid-auto-columnszgrid-auto-rowsc                 j    g }| D ]"  }t        |      x}r|j                  |       " y t        |      S )zC``grid-auto-columns`` and ``grid-auto-rows`` properties validation.N)rH  r   r   )r)   return_tokensrI   
track_sizes       r+   	grid_autorS  u  sI     M $U++:+  ,	
 r-   c                     t        |       dk(  rt        | d         }|dv r|fS |dk(  r|dfS yt        |       dk(  r1| D cg c]  }t        |       }}d|v rd|v sd|v rt        |      S yyyc c}w )	z'``grid-auto-flow`` property validation.r%   r   )r5  r   denser5  r   r   Nrt   r   r   )r)   rJ   rI   r   s       r+   grid_auto_flowrW    s     6{afQi('':U##  	V	4:;5K&;;hEX$5X9M?" :N 
;s    A.zgrid-template-columnszgrid-template-rowsc                    g }t        |       dk(  rt        | d         dk(  ryt        | d         dk(  rr|j                  d       g }| dd D ]1  }t        |      }||j                  |       #t	        |      }|j                  d      }|t        |      dk7  r y|\  }}t        |      dk7  s|s y|\  }|j                  d	k(  rt        |      dk\  r|j                  d
k(  r?t        |j                        j                         r|j                  dk\  r|j                  }	nt        |      dk(  rd}	n yg }
|D ]!  }t        |      }||
j                  |       # |j                  d|	t        |
      f       2 y |j                  t        |             t        |      S d}d}d}| D ]-  }t        |      }||r yd}|j                  |       )t        |      }|r'|s|j                  d       d}|j                  |       ]t        |      }|r)|s|j                  d       d}|j                  |       d}t	        |      }|j                  d      }|t        |      dk7  r y|\  }}t        |      dk7  s|s y|\  }|j                  d	k(  rAt        |      dk\  r2t        |dd      x}	r|	j                  dk\  r/|	j                  }	n"t        |      dv r|r y|j                  }	d}n yg }d}|D ]  }t        |      }||r  y|j                  |       d})t        |      }|r'|s|j                  d       d}|j                  |       ]t        |      }|r)d}|s|j                  d       d}|j                  |         y |s|j                  d       d}|s|j                  d       |j                  d|	t        |      f       . y |r|ry|s|j                  d       t        |      S )z@``grid-template-columns`` and ``grid-template-rows`` validation.r%   r   rg   subgridNF)single_tokensr   r~   r   	auto-fillzrepeat()Tr2   r   )r[  zauto-fit)rt   r   r   rO  r	   r  r'   r   rW  rK   
is_integerr  r   rK  rH  r   )r)   rQ  subgrid_tokensrI   
line_namesr=   r  r~   tracksr   line_names_listr  includes_auto_repeatincludes_tracklast_is_line_name
fixed_sizerR  names_and_sizesrepeat_last_is_line_nameargs                       r+   grid_templaterh    sP    M
6{aKq	2f<6!9*Y'ABZ 	E$U+J%%%j1H ,,5,AI C	Na$7&NFF6{avGF}}(S^q-@KK8+fll0C0N0N0P)#--F (K7(F"$ & ;H!,X!6J!-'..z:; %%z65;Q&RS9	: 	U>23p m  %! N	E$U+J%$$(!$$Z0$U+J(!((,$)!$$Z0$U+J(!((,$)!$$Z0!%H ,,5,AI C	Na$7&NFF6{avGF}}(S^q-@'MM6M||q(!' (,EE+#\\F+/("$+0(! C!,S!1J!-3"'..z:370 !,S!1J!7+2226380'..z: !,S!1J!)-7+2226380'..z: 34 )!((,$)!/#**2.$$j&%:P%QR]N	^  N   $r-   c                 :   t        |       dk(  rt        | d         dk(  ryg }| D ]  }|j                  dk7  r yt        |j                        }g }d}|D ]x  }|j                  dk(  r|j                  |j                         d}0|j                  dk(  r&|j                  d	k(  r|rQ|j                  d       d
}e|j                  dk(  rd}w  y |s y|j                  t        |              t        t        d |D                    dk(  rt               }t               }t        |      D ]  \  }	}t        |      D ]  \  }
}|
|	f|v s|||v r  y|j                  |       |j                  |
|	f       |
}t        ||
dz   d |
dz         D ]  \  }}||k7  r n|j                  ||	f       ! |dz  }t        ||	dz   d |	dz         D ]=  \  }}t        ||
|       |hk(  r%t        |
|      D ]  }|j                  ||f        =    t        |      S y)z,``grid-template-areas`` property validation.r%   r   rg   r   NFr   r  .TrM  c              3   2   K   | ]  }t        |        y wrS   )rt   )r   r5  s     r+   r   z&grid_template_areas.<locals>.<genexpr>0  s     .Cs3x.r   )r  )rt   r   r   r   rK   r   r   r  r   r;   r  )r)   
grid_areasrI   component_valuesr5  last_is_dotrK   coordinatesareasyxareanxnareanynrownnxs                    r+   grid_template_areasry    sE    6{aKq	2f<J &::!5ekkB% 	EzzW$

5;;'#y(U[[C-?

4 "|+#	 %*%+&. 3.:../14e
+ 	FAs$S> 4q6[(DL5=		$A'!*3qst9AaC!@ IB}OORG,
 !GB )*QqST*:!A# F HB4":4&0#(B< 7C'OOS"I67 	* Z  3 5r-   zgrid-row-startzgrid-row-endzgrid-column-startzgrid-column-endc                    t        |       dk(  r\| d   }t        |      x}r|dk(  r|S |dk7  rdd|j                  fS yt        |d      x}r|j                  dk7  rd|j                  dfS ydx}x}}| D ]a  }t        |      x}r$|dk(  r y|dk(  r|d}!|r||j                  }2 yt        |d      x}r|j                  dk7  r||j                  }a y |r t	        |t
              r|dk  ry|s|r|||fS y|r|||fS y)u:   ``grid-[row|column]-[start—end]`` properties validation.r%   r   r   spanNTr4  )rt   r   rK   r   
isinstancer   )r)   rI   rJ   r   r   r{  items          r+   	grid_liner~  L  sd    6{aq	!%((7(& F"dEKK00 	 "%66V6||q fllD11  F UT !%((7(& & <!DU]
 		  t44T4zzQ6>  fc"vzf&%(( 	fe$$ 
r-   c                 
    | dv S )z"``flex-wrap`` property validation.)r)  wrapzwrap-reverser2   rP   s    r+   	flex_wrapr  w  s     888r-   c                     t        |       dk(  rt        | d         }|dv r|fS yt        |       dk(  r$t        d | D              }|d   dv r
|d   dv r|S yyy)	z(``justify-content`` property validation.r%   r   )r  space-betweenspace-aroundspace-evenlyr   r#  
flex-startflex-endr  r  r   r   r   c              3   2   K   | ]  }t        |        y wrS   r   r   s     r+   r   z"justify_content.<locals>.<genexpr>  r   r   safeunsafe)r  r  r  r  r  r   r   NrV  r)   rJ   r   s      r+   justify_contentr  ~  s     6{afQi( 1 1 :	1
 
V	@@@A;,,{     - 
r-   c                    t        |       dk(  rt        | d         }|dv r|fS |dk(  rd|fS yt        |       dk(  rJt        d | D              }|d   dv r
|d   d	v r|S yd|v rd|v sd
|v r|S yd|v rt        |      h dz  r|S yyy)z&``justify-items`` property validation.r%   r   )r#  r   r  r  r  
self-startself-endr  r  r   r   legacyr!  firstr   c              3   2   K   | ]  }t        |        y wrS   r   r   s     r+   r   z justify_items.<locals>.<genexpr>  r   r   r  	r  r  r  r  r  r  r  r   r   lastr  >   r   r   r  N)rt   r   r   r  r  s      r+   justify_itemsr    s     6{afQi(   :
"W%% #	V	@@@A;,,{ ? ?  ? 8#("f&8 '9!8}:: ; " 
r-   c                     t        |       dk(  rt        | d         }|dv r|fS |dk(  rd|fS yt        |       dk(  r3t        d | D              }|d   dv r
|d   d	v r|S yd|v rd|v sd
|v r|S yyy)z%``justify-self`` property validation.r%   r   )r   r#  r   r  r  r  r  r  r  r  r   r   r!  r  r   c              3   2   K   | ]  }t        |        y wrS   r   r   s     r+   r   zjustify_self.<locals>.<genexpr>  r   r   r  r  r  NrV  r  s      r+   justify_selfr    s     6{afQi(   :
"W%% #	V	@@@A;,,{ ? ?  ? 8#("f&8 '9 $ 
r-   c                     t        |       dk(  rt        | d         }|dv r|fS |dk(  rd|fS yt        |       dk(  r3t        d | D              }|d   dv r
|d   d	v r|S yd|v rd|v sd
|v r|S yyy)z$``align-items`` property validation.r%   r   )	r#  r   r  r  r  r  r  r  r  r!  r  r   c              3   2   K   | ]  }t        |        y wrS   r   r   s     r+   r   zalign_items.<locals>.<genexpr>  r   r   r  r  r  r  r  r  r  r  r  NrV  r  s      r+   align_itemsr    s     6{afQi( 6 6 :
"W%% #	V	@@@A;,,{ . .  . 8#("f&8 '9 $ 
r-   c                     t        |       dk(  rt        | d         }|dv r|fS |dk(  rd|fS yt        |       dk(  r3t        d | D              }|d   dv r
|d   d	v r|S yd|v rd|v sd
|v r|S yyy)z#``align-self`` property validation.r%   r   )
r   r#  r   r  r  r  r  r  r  r  r!  r  r   c              3   2   K   | ]  }t        |        y wrS   r   r   s     r+   r   zalign_self.<locals>.<genexpr>  r   r   r  r  r  NrV  r  s      r+   
align_selfr    s     6{afQi( D D :
"W%% #	V	@@@A;,,{ . .  . 8#("f&8 '9 $ 
r-   c                     t        |       dk(  rt        | d         }|dv r|fS |dk(  rd|fS yt        |       dk(  r3t        d | D              }|d   dv r
|d   d	v r|S yd|v rd|v sd
|v r|S yyy)z&``align-content`` property validation.r%   r   )
r  r  r  r  r   r#  r  r  r  r  r!  r  r   c              3   2   K   | ]  }t        |        y wrS   r   r   s     r+   r   z align_content.<locals>.<genexpr>  r   r   r  )r  r  r  r  r  r  NrV  r  s      r+   align_contentr    s     6{afQi(     :
"W%% #	V	@@@A;,,{ H HH 8#("f&8 '9 $ 
r-   c                 :    t        | d      x}r|j                  S y )NTr4  r  r   s     r+   orderr  	  s%     E400v0|| 1r-   c                 
    | dv S )z#Validation for ``image-rendering``.)r   zcrisp-edges	pixelatedr2   rP   s    r+   image_renderingr    r.  r-   c                     t        |       }|dv r|S d\  }}| D ]*  }t        |      }|dk(  r| yd}|t        |      }|* y |dn|}|dn|}||fS )z%Validation for ``image-orientation``.)rg   z
from-imager  flipNTr   F)r   r   r   )r)   rJ   angler  rI   s        r+   image_orientationr    s     !(G((KE4 e$fD=e$E  AEEL5dD4=r-   c                    | D cg c]  }t        |d       }}t        |      r1t        |      dk(  r
|d   |d   fS t        |      dk(  rt        |      S | D cg c]  }t	        |       }}t        |      dk(  rY|d   }|t
        j                  v rt
        j                  |   S |dv rt
        j                  S |dk(  rt
        j                  ddd	   S t        |      dk(  rR|d   d
v r|\  }}n|d   d
v r|\  }}nd}|t
        j                  v r#t
        j                  |   }dk(  r|S |\  }}	|	|fS yyc c}w c c}w )z]``size`` property validation.

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

    Fr   r%   r   r   )r   portrait	landscapeNr  )r  r  r  )r   r   rt   r   r   r   
PAGE_SIZESINITIAL_PAGE_SIZE)
r)   rI   r   r   rJ   orientation	page_sizer@  r=  r>  s
             r+   sizer  /  sl    ?EEUz%%0EGE
7|w<1AJ
++\Q>!067uE"7H7
8}1+o000"--g66,,"444#"44TrT::
8}A;33%-"Ka[55%-"I{I222*55i@Lj(## ,f}$ 3 # F 8s   D7D<)r?   c                     t        |       dk(  ryt        |       }|j                         x}r@|j                  |D cg c]  }|j                   c}f}|ddgfk(  rd|d   j
                  fS yyc c}w )zValidation for ``anchor``.rg   attrr   attr()r   Nr   r	   split_spacer'   r   rK   rI   r=   r  r  	prototypes        r+   anchorr  W  s     5V#H((**y*]]9$MxX]]$MN	'++il0011 , +$Ms   A.)r?   r9   c                    t        |       dk(  ryt        | |      }|r|S t        |       }|j                         x}r@|j                  |D cg c]  }|j
                   c}f}|ddgfk(  rd|d   j                  fS yyc c}w )zValidation for ``link``.rg   r  r   r  r   N)r   r   r	   r  r'   r   rK   )rI   rG   rp   r=   r  r  r  s          r+   linkr  d  s     5V#)JH((**y*]]9$MxX]]$MN	'++il0011 , +$Ms   A>c                 r    | j                   dk(  r| j                  | j                  x}r|S t        | d      S )zVValidation for ``tab-size``.

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

    r   Fr   )r   r  r   )rI   rK   s     r+   tab_sizer  t  s:     zzX%//"=OO#5#Lee,,r-   c                 &    t        |       x}dv r|S y)zValidation for ``hyphens``.)rg   manualr   Nr   r   s     r+   hyphensr    s"     u%%*DD Er-   c                 X    t        |       dk(  ry| j                  dk(  r| j                  S y)z'Validation for ``hyphenate-character``.r   u   ‐r   Nrj  rT   s    r+   hyphenate_characterr    s/     5V#	x	{{ 
 r-   c                     t        | dd      S )z(Validation for ``hyphenate-limit-zone``.FTr   r  rT   s    r+   hyphenate_limit_zoner    s     ee==r-   c                    t        |       dk(  r4| \  }t        |      }|dk(  ryt        |d      x}r|j                  ddfS y	t        |       dk(  r| \  }}t        |      }t        |      }t        |d      x}rFt        |d      x}	r#|j                  |	j                  |	j                  fS |dk(  rD|j                  ddfS |dk(  r/t        |d      x}	rd|	j                  |	j                  fS |dk(  ryy	y	y	t        |       dk(  ro| \  }}}
g }|||
fD ]T  }t        |      dk(  r|j	                  ||u rdnd       )t        |d      x}r|j	                  |j                         T y	 t        |      S y	)
z)Validation for ``hyphenate-limit-chars``.r%   r   )   r   r   Tr4  r   r  rs   N)rt   r   r   rK   r   r   )r)   rI   rJ   r   totalr   total_keywordleft_keywordtotal_numberleft_numberr   rd   s               r+   hyphenate_limit_charsr    s    6{ae$f!%66V6LL!Q'' 7	V	t#E*"4(%eT::<:(t<<{<$**K,=,={?P?PQQ'$**Aq11f$(t<<{<;,,k.?.?@@'  ( % ( 
V	#tUD%' 	E5!V+5E>aq9%eT:::fll+	 V} 
r-   c                     t        |       dk(  ryt        |       }|j                         x}r@|j                  |D cg c]  }|j                   c}f}|ddgfk(  rd|d   j
                  fS y| j                  dk(  rd| j
                  fS yc c}w )zValidation for ``lang``.rg   r  r   r  r   r   Nr  r  s        r+   langr    s     5V#H((**y*]]9$MxX]]$MN	'++il0011 ,	x	%++&& 
  %Ns   B)r@   r9   c                 :    t        fd| D              }d|vr|S y)z"Validation for ``bookmark-label``.c              3   6   K   | ]  }t        |        y wrS   r   r   rI   rG   s     r+   r   z!bookmark_label.<locals>.<genexpr>  s     Ve0AV   N)r   )r)   rG   r%  s    ` r+   bookmark_labelr    s(     VvVVM=  !r-   c                 z    t        | dd      x}r|j                  dk\  r|j                  S yt        |       dk(  ryy)z"Validation for ``bookmark-level``.FTr   r%   rg   Nr   r   s     r+   bookmark_levelr    r  r-   c                 
    | dv S )z"Validation for ``bookmark-state``.)openclosedr2   rP   s    r+   bookmark_stater    r   r-   c                 
    | dv S )z$Validation for ``footnote-display``.)rM  rK  compactr2   rP   s    r+   footnote_displayr    s     444r-   c                 
    | dv S )z#Validation for ``footnote-policy``.)r   linerM  r2   rP   s    r+   footnote_policyr    s     ///r-   c                     t        |       dk\  r1t        | d         }|yt        fd| dd D              }d|vr||fS y| rt        | d         dk(  ryyy)zValidation for ``string-set``.r   r   Nc              3   6   K   | ]  }t        |        y wrS   r  r  s     r+   r   zstring_set.<locals>.<genexpr>   s       M8="5(3Mr  r%   rg   )rg   r2   )rt   r   r   r   )r)   rG   var_namer%  s    `  r+   
string_setr    s}    
 6{a#F1I. MAGM M}$m,, %	Kq	*f4 5r-   c                    t        |       dk(  ryg }| D ]$  }t        |      }|j                         }| y|D ch c]  }|j                   c}dhk(  }t	        |      dk(  rt        |d         }t        |d   d      }|j                  d	k(  r ||j                  |j                  |f       |j                  d
v r||j                  d|dff       |j                  dk(  r||j                  dd|ff       |j                  dv r|r|j                  d|t        ff       |j                  dk(  r|r|j                  dt        |ff       A|j                  dk(  r&|r$|j                  d|d   j                  dff       v|j                  dk(  r&|r$|j                  dd|d   j                  ff       |j                  dk(  r(|r&|j                  d|d   j                  fdz  f        yt	        |      dk(  r|j                  dk(  r3|r1t        d |D              }	|j                  |j                  |	f       4|j                  dk(  r>t        d |D              }
t        |
      r|j                  |j                  |
f        y|j                  dk(  rEt        d |D              }t        d |D              r|j                  |j                  |f        y yt	        |      dk(  r@|j                  dk(  r1|r/|j                  |j                  t        d |D              f       % y t        |      S c c}w )zValidation for ``transform``.rg   r2   Nr   r%   r   Tr:  rotate)skewxskewr  skewy)
translatex	translater  
translateyscalexscalescaleyr   c              3   4   K   | ]  }|j                     y wrS   ra  r   r  s     r+   r   ztransform.<locals>.<genexpr>-  s     "Lh8>>"Lrc  c              3   6   K   | ]  }t        |d         yw)Tr:  Nr  r   s     r+   r   ztransform.<locals>.<genexpr>0  s!      $S?D
5T::$Ss   c              3   2   K   | ]  }t        |        y wrS   )r   r   s     r+   r   ztransform.<locals>.<genexpr>7  s     "K9U#3"Kr   c              3   $   K   | ]  }|d u 
 y wrS   r2   )r   r  s     r+   r   ztransform.<locals>.<genexpr>8  s     A5,Ar      matrixc              3   4   K   | ]  }|j                     y wrS   ra  r  s     r+   r   ztransform.<locals>.<genexpr>@  s     )SX(..)Src  )r   r	   r  r   rt   r   r   r'   r   r   rK   r   r   )r)   
transformsrI   r=   r  r  all_numbersr  r   r   r   angless               r+   	transformr    s    &!V+
 3	EH ,,.I 9BCX8==CzQK9~"!)A,/#IaLTB==H,1B%%x}}e&<=]]&77E<M%%vqz&:;]]g-%2C%%v5z&:;]]&AAf%%{V[4I&JK]]l2v%%{[&4I&JK]]h.;%%w11C1CQ0G&HI]]h.;%%wIaL4F4F0G&HI]]g-+%%w11C1C0E0I&JKY1$==G+""L)"LLF%%x}}f&=>]]k1# $SHQ$S SG7|"))8=='*BC]]f,""K"KKFA&AA"))8==&*ABY1$()B{!!]]E)S)S$STV g3	h Z  ] Ds   Mc                 &    t        |       x}dv r|S y)z#``appearance`` property validation.r   Nr   r   s     r+   
appearancer   F  s!     u%%*:: ;r-   c                 H   t        |       dk(  rt        |       }|dk(  r|S |dk7  r|fS yg }d}t        |       D ]J  \  }}t        |      }|dk(  r|s|dt        |       dz
  fvr yd}/|dk(  r y|r|j	                  |       J y |r|j	                  d       t        |      S )z%``color-scheme`` property validation.r%   r#  onlyNFr   T)rt   r   r   r   r   r   )r)   rJ   r   r  r   rI   s         r+   color_schemer  N  s     6{a$V,hN:!&) 	HAu!%(G& 1QFa$88DH$(	 OOF#Xr-   )NFFF)NF)r1   mathr   tinycss2r   tinycss2.color5r    r   	functionsr	   r
   
propertiesr   r   r   r)   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   PREFIXr  r:   r<   r8   r#   rB   r&   rQ   rU   rY   r]   ra   rb   rk   rq   rv   ry   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  r2  r,  r<  r@  rB  rE  rI  rV  rZ  re  rg  rk  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  r3  r6  r8  r<  rB  rH  rK  rO  rS  rW  rh  ry  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  r2   r-   r+   <module>r     s    / '  + A AX X X X X X 
e5 
?g ? >C!&R< 
3   3
 

	
	
	
 	
	
$%	
"#	
%&	
#$	
-	
!"  # . % ' $ &  !    
 
   
/  / 
'  '
 
'   

T2&   3& 

T2+  3+ 
% % 
"  "
 
"  "
 
   
!  !0 

	
C    C 
" " 

#$	
&'	
%&	
"#	
%&	
#$	
#$	
!"" # % % ' $ ' ( %" 

	
	
	
 	
$%	
"#	
%&	
#$	
-F  . % ' $ & !    F 
.	-M   M 
F  F
 
)  )
 
   
*t$*  %*
 
4   
42  2
 
4F  F 
,&	-$'	+%	.4(!  ) & ( '
! 
4
 
 
/=  = 

	
	
	
 	
$%	
"#	
%&	
#$	
-	/   . % ' $ & !     

5	
t4&  5 6& 

	
   & 

	
     

 	
   ! 

 	
   ! 
-  - 
4   
4&  &
 
C  C
 
(  (
 
V  V
 
  $ 
. .4 
. .
 
. .
 
. .
6 
%	'	&	(	
	
	
	
	,	.	/	-	
	
	
 	
	
!"  #  !                $ 
(	'	,	-     
 
,&	)d#  $ ' 
4*  *
 
%  %
 
*! *!Z 
'K  K 
9  9 
1  1 
   
 < 
1  1 
6  6 
 < 
. .< 
5  5 
 : 
0 0 
!  ! 
6  6
 
I  I 
#  # 
I  I 
4!  !
 

	.    
   
   
,  ,
 
/  /@ 
+	,	
	
-     
- 
-	/	
	.	
 	
	
 !	
    "  !     
+	,	
	
$     
$ 
6  6 
   
)	(      
4   
>  >
 
+  +
 
   

+ 
+ 
   
M  M
 
U  U
 
  
   
   
   
U  U
 
   
8  8
 
J  J
 
;  ;
 
.  .
 
   
I  I
 
+	-   
&1$F$	( 

	
     
# # 

!"	
}    #} @ 
5! 5!p 

	.	
	
$%    $%N 
9  9
 
   $ 
   4 
   . 
   , 
   , 
   , 
  
 
4;  ;
 
4 . 
4$% $%N 
d2  2 
d402  12 
	-  	- 
4   
4   
4>  >
 
4! !H 
d
'  
' 
4- . 
4   
4)  )
 
45  5
 
40  0
 
4-  . 
:! :!z 
   
 r-   