
    $ h                       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e      Z'	 	 ddZ(ddZ) e(       ee d                      Z* 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               Z- e(       e d               Z. e(d      e!d               Z/ e(dd       ee!d!                      Z0 e(d"d       e!d#               Z1 e(       d$        Z2 e(       ed%               Z3 e(       ed&               Z4 e(       ed'               Z5 e(       ed(               Z6 e(d)       e(d*      ee d+                             Z7 e(       d,        Z8 e(d-       e(d.       e(d/       e(d0      d1                             Z9 e(d2       e(d3       e(d4       e(d5       e(d6d      e d7                                           Z: e(d8       e(d9      e d:                      Z; e(       e d;               Z< e(       e d<               Z= e(       e!d=               Z> e(d>d      e d?               Z? e(d      e!d@               Z@ e(d      e dA               ZA e(d      e!dB               ZB e(dCd       e(dDd       e(dEd       e(dFd      e!dG                                    ZC e(d      dH        ZD e(dI      e dJ               ZE e(dK       e(dL       e(dM       e(dN       e(dOd       e(dP      e!dQ                                                  ZF e(dRd        e(dSd       e!dT                      ZG e(dU       e(dV      dW               ZH e(dX       e(dY      dZ               ZI e(d[       e(d\      d]               ZJ e(d^       e(d_      d`               ZK e(       e da               ZL e(d      e!db               ZM e(d      e dc               ZN e(       e dd               ZO e(       e de               ZP e(       e df               ZQ e(       e!dg               ZR e(d       dh        ZS e(       di        ZT e(       dj        ZU e(       dk        ZVdl ZW e(dm       e(dn       e(do       e(dp       e(dq       e(dr       e(ds       e(dt       e(du      e!dv                                                                       ZX e(dw       e(dx      e!dy                      ZY e(dzd       e(d{d      e!d|                      ZZ e(d      e d}               Z[ e(       e d~               Z\ e(       d        Z] e(d      e d               Z^ e(       ed               Z_ e(       e d               Z` e(       e!d               Za e(       d        Zb e(       e d               Zc e(       e d               Zd e(       d        Ze e(       d        Zf e(       e d               Zg e(       d        Zh e(       d        Zi e(       e!d               Zj e(       e d               Zk e(       e d               Zl e(       e!d               Zm e(       e d               Zn e(d      e!d               Zo e(d       e(d      e!d                      Zp e(       e!d               Zq e(       e!d               Zr e(       e d               Zs e(       e!d               Zt e(d       e(d      e!d                      Zu e(d       e(d       e(d       e(d      e!d                                    Zv e(d       e(d      e!d                      Zw e(       e!d               Zx e(       e!d               Zy e(d       e(d      e!d                      Zz 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               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)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                       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      r/var/www/dev.core.comfenalco.cic-ware.com/crm/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unstabler7   s     r)   	decoratorzproperty.<locals>.decorator@   s     $$,,S#6D D''--':%+t+%"0#
4OOD!LLr+   r0   )r<   r=   r>   r7   r?   s   ```` r)   propertyr@   *   s    ,  r+   c                 T   |j                  d      r|| ffS |s|t        vrt        d      |s|t        vrt        d      t        |   }| D ]  }t	        |      s|t        | |      ffc S  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)
startswithr	   r   r6   r   r!   r   r7   )r'   r%   base_urlrequiredr;   tokenkeywordvalues           r)   r$   r$   S   s    tv  $44.//J.899$H <e$?6489;;<
 !(G((""VX.EV$E=5Mr+   c                 
    | dv S )z.``background-attachment`` property validation.)scrollfixedlocalr0   rH   s    r)   background_attachmentrO   r   s    
 222r+   zbackground-colorzborder-top-colorzborder-right-colorzborder-bottom-colorzborder-left-colorzcolumn-rule-colorT)r>   ztext-decoration-colorc                     t        |       S Nr   rG   s    r)   other_colorsrS   z   s     ur+   c                 6    t        |       dk(  ryt        |       S )Ninvertcurrentcolor)r   r   rR   s    r)   outline_colorrW      s     5X%5!!r+   c                 
    | dv S )N)separatecollapser0   rN   s    r)   border_collapser[      s     ...r+   c                 
    | dv S )z$``empty-cells`` property validation.)showhider0   rN   s    r)   empty_cellsr_      s     &&&r+   colorc                 (    t        |       }|dk(  ry|S )z0``*-color`` and ``color`` properties validation.rV   rC   r   )rG   results     r)   r`   r`      s     Fr+   zbackground-image)r7   c                 8    t        |       dk(  ryt        | |      S Nnonere   Nr   r   rG   rE   s     r)   background_imageri      !     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.re   rf   r   urlr#   externalN)r   r   )rG   rE   
parsed_urls      r)   list_style_imagero      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_originrt      s&     6{aV$$r+   c                     t        |       S )z,``background-position`` property validation.r   rs   s    r)   background_positionrw           &!!r+   c                     t        |       S )z(``object-position`` property validation.rv   rs   s    r)   object_positionrz      rx   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   Nr0   ).0ks     r)   	<genexpr>z$background_repeat.<locals>.<genexpr>   s      " ::"   N)tuplemapr   rr   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)rr   r   r   appendr   )r'   rG   rH   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-boxr0   rN   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   rr   r   r'   rG   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-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     sx     IOP?D
55T:PG P
7|w<1AJ
++\Q>!  Ps   Azborder-top-stylezborder-right-stylezborder-left-stylezborder-bottom-stylezcolumn-rule-stylec                 
    | dv S )z)``border-*-style`` properties validation.)
re   hiddendotteddasheddoubleinsetoutsetgrooveridgesolidr0   rN   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alwaysr0   rN   s    r)   break_before_afterr   .  s    
  M M Mr+   c                 
    | dv S )z%``break-inside`` property validation.)r   r   r   r   r0   rN   s    r)   break_insider   7  s     EEEr+   c                 
    | dv S )z-``box-decoration-break`` property validation.)slicecloner0   rN   s    r)   box_decoration_breakr   >       (((r+   c                 `    | j                   dk(  rd| j                  fS t        |       }|dv r|S y)z%``box-ellipsis`` property validation.stringre   r   N)typerI   r   rG   rH   s     r)   block_ellipsisr   E  s<     zzX%++&&e$&&N 'r+   continuec                 
    | dv S )z!``continue`` property validation.)r   discardr0   rN   s    r)   	continue_r   Q       )))r+   c                     | j                   dk(  r'| j                  | j                  dk\  r| j                  S t        |       }|dk(  r|S y )Nnumberr#   re   r   	int_valuer   r   s     r)   	max_linesr   X  sK     zzX%//"=??a??"% G& r+   c                 
    | dv S )z%``margin-break`` property validation.)r   keepr   r0   rN   s    r)   margin_breakr   c  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_valuerI   rR   s    r)   r   r   j  s1     zzW**f4vE%++E r+   z
bleed-leftzbleed-rightz	bleed-topzbleed-bottomc                 :    t        |       }|dk(  ryt        |       S )z``bleed`` property validation.r   r   r   r   s     r)   bleedr   r  s$     % G&%  r+   c                     t        |       dk(  rt        d | D              }d|v rd|v r|S y
y
t        |       dk(  rt        | d         }|dv r|fS |dk(  ry	y
y
)z``marks`` property validation.r   c              3   2   K   | ]  }t        |        y wrQ   r   r   rG   s     r)   r   zmarks.<locals>.<genexpr>       @U+@   cropcrossr#   r   )r   r   re   r0   N)rr   r   r   )r'   r   rH   s      r)   marksr     s|     6{a@@@X'X"5O #6	V	fQi('': 	 
r+   zoutline-stylec                 
    | dv S )z(``outline-style`` properties validation.)	re   r   r   r   r   r   r   r   r   r0   rN   s    r)   outline_styler     s      = = =r+   zborder-top-widthzborder-right-widthzborder-left-widthzborder-bottom-widthzcolumn-rule-widthzoutline-widthc                 H    t        | d      }|r|S t        |       }|dv r|S y)z=Border, column rule and outline widths properties validation.Fr   )thinmediumthickNr   r   rG   r   rH   s      r)   border_widthr     s5     .F% G-- .r+   zborder-image-sourcezmask-border-sourcec                 8    t        |       dk(  ryt        | |      S rd   rg   rh   s     r)   border_image_sourcer     rj   r+   zborder-image-slicezmask-border-slicec                 
   g }d}t        |       D ]  \  }}|j                  dk(  r5|j                  dk\  r&|j                  t	        |j                  d             J|j                  dk(  r5|j                  dk\  r&|j                  t	        |j                  d              t        |      dk(  r(|s&|dt        |       dz
  fv rd}|j                  d        y  dt        |      t        |      z
  cxk  rd	k  rt        |      S  y y )
NFr   r   %r   fillr#   T   )		enumerater   rI   r   r   r   rr   intr   )r'   r   r   irG   s        r)   border_image_slicer     s     FDf% 
5::%%++*:MM)EKK56ZZ8#q(8MM)EKK676)$1CKRSO@T;TDMM&!
 	CK#d)#(q(V} )r+   zborder-image-widthzmask-border-widthc                 f   g }| D ]  }t        |      dk(  r|j                  d       #|j                  dk(  r5|j                  dk\  r&|j                  t	        |j                  d              gt        |dd      x}r|j                  |        y  dt        |      cxk  rdk  rt        |      S  y y )	Nr   r   r   FTr   r#   r   )r   r   r   rI   r   r   rr   r   r'   r   rG   r   s       r)   border_image_widthr     s     F 	u'MM&!ZZ8#q(8MM)EKK67#EEdKKvKf%	 	CK1V} r+   zborder-image-outsetzmask-border-outsetc                 $   g }| D ]h  }|j                   dk(  r5|j                  dk\  r&|j                  t        |j                  d              Gt	        |d      x}r|j                  |       h y  dt        |      cxk  rdk  rt        |      S  y y )Nr   r   Fr   r#   r   )r   rI   r   r   r   rr   r   r   s       r)   border_image_outsetr     s     F ::!ekkQ&6MM)EKK67#EE::v:f% 	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rQ   r   r   s     r)   r   z&border_image_repeat.<locals>.<genexpr>  r   r   >   r   r~   r|   stretch)rr   r   setr   s     r)   border_image_repeatr     sB     	CK1@@@x=CCO D r+   c                 
    | dv S )N)	luminancealphar0   rN   s    r)   mask_border_moder    s     ,,,r+   c                 J    t        | d      }|r|S t        |       }|dk(  r|S y)z%``column-width`` property validation.Fr   r   Nr   r   s      r)   column_widthr    s4     .F% G& r+   c                 
    | dv S )z$``column-span`` property validation.)r   re   r0   rN   s    r)   column_spanr    s     o%%r+   c                 
    | dv S )z7Validation for the ``box-sizing`` property from css3-ui)r   r   r   r0   rN   s    r)   
box_sizingr	    s     BBBr+   c                 
    | dv S )z'``caption-side`` properties validation.)topbottomr0   rN   s    r)   caption_sider    s     '''r+   c                 
    | dv S )z``clear`` property validation.)r   r   bothre   r0   rN   s    r)   clearr         777r+   c                 .   t        |       }|ry|\  }}|dk(  rot        |      dk(  rag }|D ]A  }t        |      dk(  r|j                  d       #t	        |      }|s1|j                  |       C t        |      dk(  rt        |      S t        |       dk(  ryy)z%Validation for the ``clip`` property.rectr   r   r0   N)r   rr   r   r   r   r   )rG   r;   r%   argsr   argr   s          r)   clipr  !  s     e$H
d6>c$i1nF .s#v-MM&)'_Ff-. 6{aV}$5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        ||      }|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   Nrq   r   /normalre   )	listrr   r   rI   r   r   r   r   r   )r'   rE   parsed_tokensrG   parsed_tokenrH   s         r)   contentr"  7  s
    &\FM
v;!q	)+q	30F"1Ivabz6E%*FgeX.F $$\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counterrs   s    r)   counter_incrementr(  U       61--r+   c                     t        | d      S )z&``counter-reset`` property validation.r   r$  r&  rs   s    r)   counter_resetr+  [  r)  r+   c                     t        | d      S )z$``counter-set`` property validation.r   r$  r&  rs   s    r)   counter_setr-  a  r)  r+   c                    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      }|4|j                  dk(  r%|j                  |j                  }t        | d      }n|}|j                  ||f       |t        |      S )	zB``counter-increment`` and ``counter-reset`` properties validation.re   r0   Nzgot an empty token listr   )re   rB   rC   zInvalid counter name: r   )	r   iternextr   rI   r   r   r   r   )r'   r%  rG   resultscounter_nameintegers         r)   r'  r'  g  s    &!V+&\FE+++5G

:: {{99"8 GHHVT"

h&5??+FooG&E &Gg./! 
" >r+   r  r   r   r  z
margin-topzmargin-rightzmargin-bottomzmargin-leftztext-underline-offsetc                 D    t        | d      }|r|S t        |       dk(  ryy)z5``margin-*`` and various other properties validation.Tr   r   Nr   rG   r   s     r)   lenght_precentage_or_autor7    s-     $/F5V# $r+   heightwidthc                 F    t        | dd      }|r|S t        |       dk(  ryy)z7Validation for the ``width`` and ``height`` properties.FTr   r   Nr   r6  s     r)   width_heightr;    s/    
 $?F5V# $r+   z
column-gapzrow-gapc                 L    t        | dd      }|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)   gapr=    s6    
 $?F% G( r+   c                 
    | dv S )z$``column-fill`` property validation.)r   balancer0   rN   s    r)   column_fillr@    r   r+   c                 
    | dv S )z"``direction`` property validation.)ltrrtlr0   rN   s    r)   	directionrD    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   )	re   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-gridr4   zinline-block)inline	flow-root)blockrF  )flowrG  tableflexgridz	list-itemrH  rI  )rI  rG  )r   rr   rI   r   split)r'   rG   rI   outsideinside	list_items         r)   displayrQ    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   footnotere   r0   rN   s    r)   float_rU    s     ;;;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rQ   rI   r   s     r)   r   zfont_family.<locals>.<genexpr>       88   N)rr   r   rI   r   joinrs   s    r)   font_familyr`    sZ     6{aF1INNh6ay	CB6BBxx8888 Cr+   c                 
    | dv S )N)r   r  re   r0   rN   s    r)   font_kerningrb         000r+   c                 ^    t        |       }|dk(  r|S | j                  dk(  r| j                  S y )Nr  r   r   r   rI   r   s     r)   font_language_overriderf    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rQ   r\  r   couplerG   s     r)   r   z)font_variant_ligatures.<locals>.<genexpr>  #      %G!v0E%G   c              3   &   K   | ]  }|v  
 y wrQ   r0   r   rI   r   s     r)   r   z)font_variant_ligatures.<locals>.<genexpr>!       Bu5F?B   	rr   r   extendr   rI   r0  anyr   r   r'   rH   couples
all_valuesrk  concurrent_valuesrG   r   s         @@r)   font_variant_ligaturesry    s    
6{afQi(((NF)G
 J "&!" :: ;;*$ $ %G%,%G !GB0ABBekk* V} r+   c                 
    | dv S )N)r  subsuperr0   rN   s    r)   font_variant_positionr}  +  rc  r+   c                 
    | dv S )N)r  z
small-capszall-small-capszpetite-capszall-petite-capsunicaseztitling-capsr0   rN   s    r)   font_variant_capsr  1  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rQ   r\  rj  s     r)   r   z'font_variant_numeric.<locals>.<genexpr>L  rl  rm  c              3   &   K   | ]  }|v  
 y wrQ   r0   ro  s     r)   r   z'font_variant_numeric.<locals>.<genexpr>N  rp  rq  rr  ru  s         @@r)   font_variant_numericr  9  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(  ro| d d | d   }} |j                  dk(  rdddj                  |j                        }nG|j                  dk(  r8|j                  ,|j                  dk\  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offr   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>o  s!     Mvts6{2d22Ms   #%)rr   r   getrI   r   r   )r'   featurerI   rG   s       r)   font_feature_settings_listz9font_feature_settings.<locals>.font_feature_settings_list^  s    #v;!"3BKEFzzW$ +//<**(OO/EOOq4H[AEv;!FEzzX%#ekk*:a*?MMM#kkG5#4E>! $5r+   rr   r   r   )r'   r  s     r)   font_feature_settingsr  X  sB     6{aKq	2h>" ", &f--r+   c                 
    | dv S )N)r  zhistorical-formsr0   rN   s    r)   font_variant_alternatesr  x  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rQ   r\  rj  s     r)   r   z*font_variant_east_asian.<locals>.<genexpr>  rl  rm  c              3   &   K   | ]  }|v  
 y wrQ   r0   ro  s     r)   r   z*font_variant_east_asian.<locals>.<genexpr>  rp  rq  rr  ru  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   )rr   r   rI   )r'   keyrI   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      }|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)rG   r   font_size_keywords      r)   	font_sizer    sM     $?F#E*11  O>>>   ?r+   c                 
    | dv S )z#``font-style`` property validation.)r  italicobliquer0   rN   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-expandedr0   rN   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   r   r   s     r)   font_weightr    sV     % G99zzX%//"=??KK??" L #>r+   c                 
    | dv S )N)r   r   r   re   z
scale-downr0   rN   s    r)   
object_fitr    s     HHHr+   c                     t        |       S rQ   )r   rR   s    r)   image_resolutionr    s     %  r+   zletter-spacingzword-spacingc                 @    t        |       dk(  ryt        |       }|r|S y)z7Validation for ``letter-spacing`` and ``word-spacing``.r  Nr   r6  s     r)   spacingr    s+    
 5X%F r+   c                 "    t        |       }|r|S y)z"Validation for ``outline-offset``.Nr   r6  s     r)   outline_offsetr    s     F r+   c                 F   t        |       dk(  ry| j                  dk(  r%| j                  dk\  rt        | j                  d      S | j                  dk(  r%| j                  dk\  rt        | j                  d      S | j                  dk(  r| j                  dk\  rt	        |       S yy)z$``line-height`` property validation.r  r   r   Nr   r   	dimension)r   r   rI   r   r   rR   s    r)   line_heightr    s     5X%zzX%++"2d++zz\!ekkQ&6c**	{	"u{{a'7%   (8	"r+   c                 
    | dv S )z,``list-style-position`` property validation.)rO  rN  r0   rN   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(  rd}t        | j                        }t        |      dk\  rg }|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y)z(``list-style-type`` property validation.r   r   r;   symbols)cyclicnumeric
alphabeticsymbolicrL   r#   r   Nr  )r  r  rq   z	symbols())	r   rI   r%   r   	argumentsrr   r   ranger   )rG   allowed_typesfunction_argumentsr  indexr   s         r)   list_style_typer    sm    zzW{{	x	%++&&	z	!ejjI&=D.u?!"a'I!!$))W4%a(..-?E$$%7%:%@%@A  ,%&25#&8"9: >%a(--9  !3A!6!<!<=> |88y>A%y!122) (	 '>	!r+   z	min-widthz
min-heightc                 >    t        |       }|dk(  r|S t        | g      S )z7``min-width`` and ``min-height`` properties validation.r   )r   length_or_precentager   s     r)   min_width_heightr  6  s(     % G&#UG,,r+   zpadding-topzpadding-rightzpadding-bottomzpadding-leftc                 (    t        | dd      }|r|S y)z$``padding-*`` properties validation.FTr   Nr  r6  s     r)   r  r  C  s     $?F r+   z	max-widthz
max-heightc                 d    t        | dd      }|r|S t        |       dk(  rt        t        d      S y)z'Validation for max-width and max-heightFTr   re   pxN)r   r   r   r   r6  s     r)   max_width_heightr  O  s9    
 $?F5V#d## $r+   c                     | j                   dk(  r t        dt        d| j                              S | j                   dk(  r#t        dt        d| j                  dz              S y)z(Validation for the ``opacity`` property.r   r#   r   r   r  N)r   minmaxrI   rR   s    r)   opacityr  [  sV     zzX1c!U[[)**zz\!1c!U[[3./00 "r+   c                 r    t        |       dk(  ry| j                  dk(  r| j                  | j                  S yy)z(Validation for the ``z-index`` property.r   r   Nr  rR   s    r)   z_indexr  e  s;     5V#zzX%//"= #>r+   orphanswidowsc                 d    | j                   dk(  r!| j                  | j                  }|dk\  r|S yyy)z9Validation for the ``orphans`` and ``widows`` properties.r   Nr#   r   r   rG   rI   s     r)   orphans_widowsr  o  s;    
 zzX%//"=A:L  #>r+   c                 ~    | j                   dk(  r| j                  | j                  }|dk\  r|S t        |       dk(  ryy)z-Validation for the ``column-count`` property.r   Nr#   r   r   r  s     r)   column_countr  z  sC     zzX%//"=A:L5V# $r+   c                 
    | dv S )z)Validation for the ``overflow`` property.)r   visibler   rK   r0   rN   s    r)   overflowr    s     ===r+   c                 
    | dv S )z.Validation for the ``text-overflow`` property.)r  ellipsisr0   rN   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absoluterL   N)r   r%   rr   r  rI   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   re   r   c              3   :   K   | ]  }|j                   d k(    yw)r   NrX  r   s     r)   r   zquotes.<locals>.<genexpr>  s     ;5

h&;rY  c              3   4   K   | ]  }|j                     y wrQ   r\  r   s     r)   r   zquotes.<locals>.<genexpr>  r]  r^  N)rr   r   r   r   )r'   rH   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)rL   r   Nr0   rN   s    r)   table_layoutr    s     ## $r+   c                 
    | dv S )z'``text-align-all`` property validation.)r   r   centerjustifystartendr0   rN   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  r0   rN   s    r)   text_align_lastr          F F Fr+   c                     | D ch c]  }t        |       }}|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.re   >   line-throughblinkoverline	underlineN)r   rr   issubset)r'   rG   r   allowed_valuess       r)   text_decoration_liner    s^     177uE"7H7F8GN
6{c(m#(9(9.(I )J#	 8s   Ac                     | dv r| S y)z.``text-decoration-style`` property validation.)r   r   r   r   wavyNr0   rN   s    r)   text_decoration_styler    s     AA Br+   c                 H    t        | d      }|r|S t        |       dv x}r|S y)z2``text-decoration-thickness`` property validation.Tr5  )r   z	from-fontNr   r   s      r)   text_decoration_thicknessr    s8     $/Fe$(===w= >r+   c                 &    t        | d      }|r|S y)z$``text-indent`` property validation.Tr5  Nr  r6  s     r)   text_indentr    s     $/F r+   c                 
    | dv S )z#``text-align`` property validation.)re   	uppercase	lowercase
capitalizer  r0   rN   s    r)   text_transformr    r  r+   c                 H    t        | d      }|r|S t        |       }|dv r|S y)z.Validation for the ``vertical-align`` propertyTr5  )baselinemiddler{  r|  ztext-topztext-bottomr  r  Nr   r   s      r)   vertical_alignr     s9     $/F% G ? ??r+   c                 
    | dv S )$``white-space`` property validation.)r  r   rZ   r0   rN   s    r)   
visibilityr#    r  r+   c                 
    | dv S )r"  )r  prenowrapzpre-wrapzpre-liner0   rN   s    r)   white_spacer'    s     IIIr+   c                 
    | dv S )z&``overflow-wrap`` property validation.)anywherer  z
break-wordr0   rN   s    r)   overflow_wrapr*         :::r+   c                 
    | dv S )z#``word-break`` property validation.)r  z	break-allr0   rN   s    r)   
word_breakr-    s     ---r+   c                 B    t        | g      }||S t        |       dk(  ryy)z#``flex-basis`` property validation.Nr"  )r;  r   )rG   basiss     r)   
flex_basisr0    s0     %!E5Y& 'r+   c                 
    | dv S )z'``flex-direction`` property validation.)rowzrow-reverser   zcolumn-reverser0   rN   s    r)   flex_directionr3  (  s     HHHr+   z	flex-growzflex-shrinkc                 :    | j                   dk(  r| j                  S y Nr   )r   rI   rR   s    r)   flex_grow_shrinkr6  /  s     zzX{{ r+   c                 P    t        |       }|dv r|S |ryt        | dd      }|r|S y)zParse ``inflexible-breadth``.)r   min-contentmax-contentNFTr   r   )rG   rH   r   s      r)   _inflexible_breadthr:  7  s;    % G88	$?F r+   c                     | j                   dk(  r>| j                  dk\  r/| j                  dk(  r t        | j                  | j                        S t	        |       S )zParse ``track-breadth``.r  r   fr)r   rI   unitr   r:  rR   s    r)   _track_breadthr>  C  sD    zz[ U[[A%5%**:Lejj11u%%r+   c                    t        |       }|r|S t        |       }|rm|\  }}|dk(  r6t        |      dk(  r't        |d         }t        |d         }|r|rd||fS yyy|dk(  r't        |      dk(  rt	        |d   dd	      }|rd
|fS yyyy)zParse ``track-size``.minmaxr   r   r#   minmax()zfit-contentFTr   zfit-content()N)r>  r   rr   r:  r   )rG   track_breadthr;   r%   r  inflexible_breadthr   s          r)   _track_sizerD  J  s    "5)Me$H
d84yA~%8a%A" .tAw 7%-&(:MJJ +8% 
 ]"4yA~#DGeM+V44   # r+   c                 *   t        | dd      }|r|S t        |       }|rt|\  }}|dk(  rit        |      dk(  rZt        |d   dd      }|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
y
)zParse ``fixed-size``.FTr   r@  r   r   r#   rA  )r8  r9  r   N)r   r   rr   r>  r   )rG   r   r;   r%   r  rB  rH   fixed_breadths           r)   _fixed_sizerG  _  s    $?Fe$H
d8D	QQ%DIF .tAw 7 &>>!$q'*G@@F *Ge!> &(9'=II ! EK !/ 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   rI   r   )r  return_line_namesrG   s      r)   _line_namesrK  u  sg    
xx:[[ 	EzzW$!((5|+		
 &'' r+   zgrid-auto-columnszgrid-auto-rowsc                 j    g }| D ]"  }t        |      }|r|j                  |       " y t        |      S )zC``grid-auto-columns`` and ``grid-auto-rows`` properties validation.N)rD  r   r   )r'   return_tokensrG   
track_sizes       r)   	grid_autorO    sF     M  '
  , 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   )r2  r   denser2  r   r   Nrr   r   r   )r'   rH   rG   r   s       r)   grid_auto_flowrS    s     6{afQi('':U##  	V	4:;5K&;;hEX$5X9M?" :N 
;s    A.zgrid-template-columnszgrid-template-rowsc                 2   g }t        |       dk(  rt        | d         dk(  ryt        | d         dk(  r)|j                  d       g }| dd D ]  }t        |      }||j                  |       "t	        |      }|r|\  }}|dk(  rt        |      dk\  r|d   j
                  dk(  r1|d   j                  r"|d   j                  dk\  r|d   j                  }nt        |d         d	k(  rd	}n yg }	|dd D ]!  }
t        |
      }||	j                  |       # |j                  d
|t        |	      f        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	        |      }|rl|\  }}|dk(  rat        |      dk\  rR|d   j
                  dk(  r1|d   j                  r"|d   j                  dk\  r|d   j                  }n(t        |d         dv r|r y|d   j                  }d}n yg }d}|d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   re   subgridNr|   r   r   	auto-fillzrepeat()FTr0   )rV  zauto-fit)rr   r   r   rK  r   r   
is_integerrI   r   r   rG  rD  )r'   rM  subgrid_tokensrG   
line_namesr;   r%   r  r   line_names_listr  includes_auto_repeatincludes_tracklast_is_line_name
fixed_sizerN  names_and_sizesrepeat_last_is_line_names                     r)   grid_templatera    s    M
6{aKq	2f<6!9*Y'ABZ 	E$U+J%%%j1%e,H%
d8#D	QQ0 G..47==A3E!%a!2!2$T!W-<!,&(O#ABx ?%0%5
%1+22:>? #))#VU?-CDF1	2 	U>23h e  %! J	E$U+J%$$(!$$Z0$U+J(!((,$)!$$Z0$U+J(!((,$)!$$Z0!%%e,H%
d8#D	QQ0 G..47==A3E!%a!2!2$T!W-1JJ/"!%a/3,&(O/4,#ABx %0%5
%17 &+22:>7;4$%0%5
%#; / 6 6r :7<4+22:>$%0%5
%-1N#; / 6 6r :7<4+22:>$34 -%,,R0(-%3'..r2!((#VU?-CDFUJ	V  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   re   r   NFr   r  .TrI  c              3   2   K   | ]  }t        |        y wrQ   )rr   )r   r2  s     r)   r   z&grid_template_areas.<locals>.<genexpr>5  s     .Cs3x.r   )r  )rr   r   r   r   rI   r   r   r   r   r9   r  )r'   
grid_areasrG   component_valuesr2  last_is_dotrI   coordinatesareasyxareanxnareanynrownnxs                    r)   grid_template_areasrr    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(  re| d   }t        |      x}r|dk(  r|S |dk7  rdd|j                  fS y|j                  dk(  r'|j                  r|j                  rd|j
                  dfS ydx}x}}| D ]j  }t        |      x}r$|dk(  r y|dk(  r|d}!|r||j                  }2 y|j                  dk(  r'|j                  r|j                  r||j
                  }j y |r|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   spanNr   )rr   r   rI   r   rW  r   )r'   rG   rH   r   r   rt  s         r)   	grid_lineru  Q  sW    6{aq	!%((7(& F"dEKK00 	 ZZ8#(8(8U[[%//400  F UT !%((7(& & <!DU]
 		 ZZ8#(8(8U[[~  fqjf&%(( 	fe$$ 
r+   c                 
    | dv S )z"``flex-wrap`` property validation.)r&  wrapzwrap-reverser0   rN   s    r)   	flex_wraprx  {  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rQ   r   r   s     r)   r   z"justify_content.<locals>.<genexpr>  r   r   safeunsafe)r  r  r  r}  r~  r   r   NrR  r'   rH   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rQ   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)rr   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rQ   r   r   s     r)   r   zjustify_self.<locals>.<genexpr>  r   r   r  r  r  NrR  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rQ   r   r   s     r)   r   zalign_items.<locals>.<genexpr>  r   r   r  r  r  r  r  r  r}  r~  r  NrR  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rQ   r   r   s     r)   r   zalign_self.<locals>.<genexpr>  r   r   r  r  r  NrR  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  rz  r{  r|  r   r  r}  r~  r  r  r  r  r   c              3   2   K   | ]  }t        |        y wrQ   r   r   s     r)   r   z align_content.<locals>.<genexpr>  r   r   r  )r  r  r  r}  r~  r  NrR  r  s      r)   align_contentr    s     6{afQi(     :
"W%% #	V	@@@A;,,{ H HH 8#("f&8 '9 $ 
r+   c                 T    | j                   dk(  r| j                  | j                  S y y r5  r  rR   s    r)   orderr    s+     zzX%//"= #>r+   c                 
    | dv S )z#Validation for ``image-rendering``.)r   zcrisp-edges	pixelatedr0   rN   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``.)re   z
from-imager  flipNTr   F)r   r   r   )r'   rH   angler  rG   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   rr   r   r   r   
PAGE_SIZESINITIAL_PAGE_SIZE)
r'   rG   r   r   rH   orientation	page_sizer;  r8  r9  s
             r)   sizer  3  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        |       }|r;|\  }}||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``.re   attrr   attr()r   Nr   r   r   rI   rG   r;   r%   r  r  	prototypes         r)   anchorr  [  sr     5V#e$H
d5CHH56	'++d1gmm,, , 5s   A)r=   r7   c                     t        |       dk(  ryt        | |      }|r|S t        |       }|r;|\  }}||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``.re   r  r   r  r   N)r   r   r   r   rI   )rG   rE   rn   r;   r%   r  r  r  s           r)   linkr  i  s     5V#)Je$H
d5CHH56	'++d1gmm,, , 5s   A)c                 x    | j                   dk(  r| j                  | j                  }|dk\  r|S t        | d      S )zVValidation for ``tab-size``.

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

    r   r   Fr   )r   r   r   r  s     r)   tab_sizer  z  s;     zzX%//"=A:Lee,,r+   c                 &    t        |       }|dv r|S y)zValidation for ``hyphens``.)re   manualr   Nr   r   s     r)   hyphensr    s!     % G,, -r+   c                 \    t        |       }|dk(  ry| j                  dk(  r| j                  S y)z'Validation for ``hyphenate-character``.r   u   ‐r   Nre  r   s     r)   hyphenate_characterr    s4     % G&	x	{{ 
 r+   c                     t        | dd      S )z(Validation for ``hyphenate-limit-zone``.FTr   r  rR   s    r)   hyphenate_limit_zoner    s     ee==r+   c                 4   t        |       dk(  rA| \  }t        |      }|dk(  ry|j                  dk(  r|j                  |j                  ddfS yyt        |       dk(  r| \  }}t        |      }t        |      }|j                  dk(  r^|j                  R|j                  dk(  r/|j                  #|j                  |j                  |j                  fS |dk(  rP|j                  ddfS |dk(  r;|j                  dk(  r%|j                  d|j                  |j                  fS |dk(  ryyyyt        |       dk(  r| \  }}}t        |      dk(  s|j                  dk(  r|j                  t        |      dk(  s|j                  dk(  r|j                  t        |      dk(  s|j                  dk(  ri|j                  \|j                  dk(  r|j                  nd}|j                  dk(  r|j                  nd}|j                  dk(  r|j                  nd}|||fS yyyyyyy)	z)Validation for ``hyphenate-limit-chars``.r#   r   )   r   r   r   Nr   r  rq   )rr   r   r   r   rI   )r'   rG   rH   totalr   total_keywordleft_keywordr   s           r)   hyphenate_limit_charsr    s    6{ae$fZZ8#(COOQ** )D#	V	t#E*"4(::!eoo&AyyH$)CHH'Q**f$yyH$)C4>>4>>::'  ( % ( 
V	#tU6)x'EOO,G&(h&4>>+E6)x'EOO,G',zzX'=EOO1E%)YY(%:4>>D',zzX'=EOO1E4'' -H' ,F& -H'	 
r+   c                     t        |       dk(  ryt        |       }|r;|\  }}||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``.re   r  r   r  r   r   Nr  r  s         r)   langr    s     5V#e$H
d5CHH56	'++d1gmm,, ,	x	%++&& 
  6s   A6)r>   r7   c                 :    t        fd| D              }d|vr|S y)z"Validation for ``bookmark-label``.c              3   6   K   | ]  }t        |        y wrQ   r   r   rG   rE   s     r)   r   z!bookmark_label.<locals>.<genexpr>  s       E49uh/E   N)r   )r'   rE   r   s    ` r)   bookmark_labelr    s2      E=CE EM=  !r+   c                     | j                   dk(  r | j                  | j                  }|dk\  r|S yt        |       dk(  ryy)z"Validation for ``bookmark-level``.r   Nr#   re   r   r  s     r)   bookmark_levelr    sH     zzX%//"=A:L 	U	v	% 
&r+   c                 
    | dv S )z"Validation for ``bookmark-state``.)openclosedr0   rN   s    r)   bookmark_stater    r   r+   c                 
    | dv S )z$Validation for ``footnote-display``.)rH  rF  compactr0   rN   s    r)   footnote_displayr    s     444r+   c                 
    | dv S )z#Validation for ``footnote-policy``.)r   linerH  r0   rN   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rQ   r  r  s     r)   r   zstring_set.<locals>.<genexpr>  s       M8="5(3Mr  r#   re   )re   r0   )rr   r   r   r   )r'   rE   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        |      }|s y|\  }}t        |      dk(  rht        |d         }t	        |d   d      }|dk(  r||j                  ||f       `|d	v r||j                  d
|dff       ||dk(  r||j                  d
d|ff       |dv r|r|j                  d|t        ff       |dk(  r|r|j                  dt        |ff       |dk(  r6|d   j                  dk(  r$|j                  d|d   j                  dff       |dk(  r6|d   j                  dk(  r$|j                  dd|d   j                  ff       P|dk(  r8|d   j                  dk(  r&|j                  d|d   j                  fdz  f        yt        |      dk(  r|dk(  r7t        d |D              r%|j                  |t        d |D              f       |dk(  r4t        d |D              }t        |      r|j                  ||f        y|d
k(  r;t        d |D              }	t        d |	D              r|j                  ||	f       P y yt        |      dk(  r<|dk(  r7t        d |D              r%|j                  |t        d |D              f        y t        |      S )zValidation for ``transform``.re   r0   Nr#   r   Tr5  rotate)skewxskewr  skewy)
translatex	translater  
translateyscalexr   scalescaleyr   c              3   :   K   | ]  }|j                   d k(    ywr   NrX  r   as     r)   r   ztransform.<locals>.<genexpr>:  s     *L!166X+=*LrY  c              3   4   K   | ]  }|j                     y wrQ   r\  r   r  s     r)   r   ztransform.<locals>.<genexpr>;  s     2M3992Mr^  c              3   6   K   | ]  }t        |d         yw)Tr5  Nr  r   s     r)   r   ztransform.<locals>.<genexpr>=  s!      $N?D
5T::$Ns   c              3   2   K   | ]  }t        |        y wrQ   )r   r   s     r)   r   ztransform.<locals>.<genexpr>D  s     "F9U#3"Fr   c              3   $   K   | ]  }|d u 
 y wrQ   r0   )r   r  s     r)   r   ztransform.<locals>.<genexpr>E  s     A5,Ar      matrixc              3   :   K   | ]  }|j                   d k(    ywr  rX  r  s     r)   r   ztransform.<locals>.<genexpr>K  s      =6+,AFFh&=6rY  c              3   4   K   | ]  }|j                     y wrQ   r\  r  s     r)   r   ztransform.<locals>.<genexpr>M  s     .ISsyy.Ir^  )r   r   rr   r   r   r   r
   r   rI   r   r   )
r'   
transformsrG   r;   r%   r  r  r   r   angless
             r)   	transformr    s    &!V+
 1	E%e,H!JD$4yA~!$q'*#DG=8#(9%%tUm4..53D%%vqz&:;W_):%%v5z&:;88V%%{V[4I&JK\)f%%{[&4I&JKX%$q',,(*B%%wa0B&CDX%$q',,(*B%%wDGMM0B&CDW_a)A%%wa0@10D&EFTa7?s*Lt*L'L%%tU2M2M-M&NO[(# $NHL$N NG7|"))4/:V^""F"FFFA&AA"))4.9TaDH$4 =604=6 :6!!4.ID.I)I"JKc1	d Z  r+   c                 &    t        |       }|dv r|S y)z#``appearance`` property validation.r   Nr   r   s     r)   
appearancer  S  s!     % G"" #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   r8   r:   r6   r!   r@   r$   rO   rS   rW   r[   r_   r`   ri   ro   rt   rw   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'  r7  r;  r=  r@  rD  rQ  rU  r`  rb  rf  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  r  r  r  r  r   r#  r'  r*  r-  r0  r3  r6  r:  r>  rD  rG  rK  rO  rS  ra  rr  ru  rx  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   r+   r)   <module>r      s    / '  A A5 5 5 5 5 5 
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
 
(  (
 
8  8
 
  ( 
. .: 
. .
 
. .
 
. .
8 
%	'	&	(	,	.	/	-	
!"  #         
(	'    
,&	)d#  $ ' 
4*  *
 
%  %
 
*! *!Z 
'<  <
 
9  9 
1  1 
   
 < 
1  1 
6  6 
 < 
. .> 
5  5 
 : 
0 0 
	!  	! 
6  6
 
I  I 
#  # 
I  I 
4!  !
 

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

	
	   	  
# # 

!"	
u    #u p 
5! 5!p 

	.	
	
#%    #%L 
9  9
 
   $ 
   4 
   . 
   , 
   , 
   , 
  
 
4;  ;
 
4 . 
4$% $%N 
d	-  	- 
d40-  1- 

-  
- 
4   
4   
4>  >
 
4$( $(N 
d'  ' 
4- . 
4   
4)  )
 
45  5
 
40  0
 
4-  . 
8! 8!v 
  r+   