
    T-h_                     `   d Z ddlZddlmZmZ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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&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 i Z9 G d de      Z:d Z;d Z<d Z= e<d       e<d       e<d       e<d       e<d       e<d      d                                           Z> e<d       e=ddddd      d               Z? e<d       e=d d!d"d      d#               Z@ e<d$      d%        ZA e<d&       e<d'       e<d(       e<d)       e<d*       e<d+       e=d,d-d.      d/                                                  ZB e<d0       e=d1d2d3d4d,d      d5               ZC e<d6       e=d1d2d3d4d,d7d      d8               ZD e<d9      d:        ZE e<d;       e=d<d-d.d=      d>               ZFd? ZG e<d@       e=dA      dB               ZH e<dC       e=dD      dE               ZI e<dF       e=dG      dH               ZJ e<dI       e=dJdK      dL               ZK e<dM       e=dNdOdPdQdRd!      dS               ZL e<dT       e=d.dUdVdWdXdYdZ      d[               ZM e<d\       e=d]      d^               ZN e<d_       e=d`dadb      dc               ZO e<dd       e=dedf      dg               ZPdh ZQ e<di       e=djdkdl      dm               ZR e<dn       e=dodpdqdrdsdt      du               ZSdv ZT e<dw       e<dx       e=dydz      d{                      ZU e<d|       e=d}d~dd      d               ZV e<d       e<d       e=dd      d                      ZW e<d       e=d      d               ZX e<d       e=d      d               ZY e<d       e=dd      d               ZZ e<d       e=dd      d               Z[ e<d       e=dd      d               Z\ e<d       e=ddd      d               Z] e<d       e=dd      d               Z^y)zValidate properties expanders.    N)DimensionToken
IdentTokenNumberToken)parse_color   )INITIAL_VALUES   expand_font_variant)InvalidValuesPendingcheck_var_functionget_keywordget_single_keywordsplit_on_comma)&background_attachmentbackground_imagebackground_positionbackground_repeatbackground_sizeblock_ellipsisborder_image_sourceborder_image_sliceborder_image_widthborder_image_outsetborder_image_repeatborder_styleborder_widthboxcolumn_countcolumn_width
flex_basisflex_directionflex_grow_shrink	flex_wrapfont_family	font_sizefont_stretch
font_stylefont_variant_capsfont_weightgap	grid_linegrid_templateline_heightlist_style_imagelist_style_positionlist_style_typemask_border_modeother_colorsoverflow_wraptext_decoration_thicknessvalidate_non_shorthandc                   (     e Zd ZdZ fdZd Z xZS )PendingExpanderz>Expander with validation done when defining calculated values.c                 N    t         |   ||j                  d          || _        y )Nname)super__init__keywords	validator)selftokensr?   	__class__s      i/var/www/core.comfia.cic-ware.com/crm/lib/python3.12/site-packages/weasyprint/css/validation/expanders.pyr=   zPendingExpander.__init__   s$    !3!3F!;<"    c                     | j                  |      D ]<  \  }}|j                  d      r| j                   j                  d    | }||k(  s:|c S  t        )N-r;   )r?   
startswithr>   KeyError)r@   rA   
wanted_keykeyvalues        rC   validatezPendingExpander.validate!   s\    ..0 	JC~~c"0089#?j 		
 rD   )__name__
__module____qualname____doc__r=   rL   __classcell__)rB   s   @rC   r9   r9      s    H#rD   r9   c                 p    | D ],  }t        |      st        | |      }|D ci c]  }|| c}c S  yc c}w )z5Return pending expanders when var is found in tokens.N)r   r9   )rA   expanderexpanded_namestokenpendingr;   s         rC   	_find_varrW   *   s?     >e$%fh7G.<=dD'M==	> >s   
3c                       fd}|S )z1Decorator adding a function to the ``EXPANDERS``.c                 8    t         vsJ        | t         <   | S )z&Add ``function`` to the ``EXPANDERS``.)	EXPANDERS)functionproperty_names    rC   expander_decoratorz$expander.<locals>.expander_decorator5   s%    I-<}<-#+	- rD    )r\   r]   s   ` rC   rS   rS   3   s    
 rD   c                  B     |j                  dd      |rJ  fd}|S )zDecorator helping expanders to handle ``inherit`` and ``initial``.

    Wrap an expander so that it does not have to handle the 'inherit' and
    'initial' cases, and can just yield name suffixes. Missing suffixes
    get the initial value.

    wants_base_urlFc                 L     t        j                          fd       S )z"Decorate the ``wrapped`` expander.c              3     K   t        j                  ||      }d}t        |       }|dv rD ci c]  }|| }}d}nt        | |      }|rd}|sWi }r | |      }n	 |       }|D ]:  \  }}	|v sJ |       ||v r!t	        d|j                  d       d| d      |	||<   < D ]D  }|j                  d      r | }
n|}
||v r||   }|st        ||
|d	      \  \  }
}nd
}|
|f F yc c}w w)zWrap the expander.r;   base_urlF)inheritinitialTzgot multiple rF   z values in a z
 shorthandrequiredrf   N)	functoolspartialr   rW   r   striprG   r7   )rA   r;   rd   rS   skip_validationkeywordresultsresultnew_name	new_tokenactual_new_namerK   rT   generic_expander_wrapperr`   wrappeds               rC   rs   zVgeneric_expander.<locals>.generic_expander_decorator.<locals>.generic_expander_wrapperJ   sx     !(((thHH $O(0G005CDT4=DD"&#FHnE&*O"!$VT8<F$VT2F+1 2'Hi#~5?x?57*++HNN3,?+@ A$$(656 6 )2GH%2 + -&&s+)-xj&9O&.Ow&#H-E*4J!?Ht5M10% &E%u,,!-+ Es   .C9
C4B>C9)ri   wraps)rt   rs   rT   r`   s   `@rC   generic_expander_decoratorz4generic_expander.<locals>.generic_expander_decoratorH   s'    		!-	- 
"-	-\ ('rD   )pop)rT   kwargsrv   r`   s   `  @rC   generic_expanderry   =   s,     ZZ 0%8N:1(d &%rD   zborder-colorzborder-stylezborder-widthmarginpaddingbleedc              #   Z  K   g }dD ]K  }|j                  d      x}dk(  r|j                  | |        /|j                  |d|  | ||d         M t        j                  t        ||      }t        | ||      x}r|j                         E d{    yt        |       dk(  r| dz  } nQt        |       dk(  r| dz  } n=t        |       d	k(  r
| | d   fz  } n%t        |       dk7  rt        d
t        |              t        ||       D ]  \  }}	t        |	g||d      \  }|  y7 w)z>Expand properties setting a token for the four sides of a box.z-topz-rightz-bottomz-leftrF   Nrc   r	      r      %Expected 1 to 4 token components got Trg   )rfindappendri   rj   expand_four_sidesrW   itemslenr   zipr7   )
rA   r;   rd   rT   suffixirS   ro   expanded_namerU   s
             rC   r   r   }   sa     N8 CC AR'!!TF6("34 !!T"1XJvhtABxj"ABC   x9H68^<<v<<<>!! 6{a!	V	!	V	6!9,	V	3CK=AC 	C #NF ; u )G]Ht= 	"s   BD+D)BD+zborder-radiuszborder-top-left-radiuszborder-top-right-radiuszborder-bottom-right-radiuszborder-bottom-left-radiusT)r`   c              #   D  K   g x}}g }| D ]V  }|j                   dk(  r4|j                  dk(  r%||u r|| d   k(  rt        d      |};t        d      |j                  |       X |s|dd }||fD ]r  }t	        |      dk(  r|dz  }t	        |      d	k(  r|d	z  }+t	        |      d
k(  r|j                  |d          Nt	        |      dk7  s]t        dt	        |              d}t        |t        ||            D ]   \  }	} d|	 d}t        | ||d       || f " yw)z-Validator for the ``border-radius`` property.literal/r   z"Expected value after "/" separatorzExpected only one "/" separatorNr	   r   r   r   r   )ztop-leftz	top-rightzbottom-rightzbottom-leftzborder-z-radiusTrg   )typerK   r   r   r   r   r7   )
rA   r;   rd   current
horizontalverticalrU   valuescornerscorners
             rC   border_radiusr      s\     GjH 
"::"u{{c'9*$F2J&'(LMM&G#$EFFNN5!
" a=h& 
Gv;!aKF[AaKF[AMM&)$[A7F}EG G
G GGgs:x'@A (vtXEFls   C	D AD z
list-style-type	-position-imagec              #      K   dx}}d}| D ]W  }t        |      dk(  r|dz  }|}t        |g|      d}d}n&t        |g      d}nt        |g      d	}d}nt        ||gf Y |s|rd	gf |dz  }|s|rdgf |dz  }|rt        yw)
zyExpand the ``list-style`` shorthand property.

    See https://www.w3.org/TR/CSS21/generate.html#propdef-list-style

    Fr   noner	   Nr   Tr   r   )r   r0   r1   r2   r   )	rA   r;   rd   type_specifiedimage_specified
none_countrU   
none_tokenr   s	            rC   expand_list_styler      s      (-,N_J u' !OJJUGX.:F"O %)5 FeW%1F!Nugo%( j
|##a
z$$a
 s   BBborderc              #   L   K   dD ]  }t        | ||z   |      D ]  }|   yw)zlExpand the ``border`` shorthand property.

    See https://www.w3.org/TR/CSS21/box.html#propdef-border

    r~   N)expand_border_side)rA   r;   rd   r   new_props        rC   expand_borderr      s8      9 *64&=(K 	HN	s   "$z
border-topzborder-rightzborder-bottomzborder-leftzcolumn-ruleoutline-width-color-stylec              #      K   | D ];  }t        |      d}n$t        |g      d}nt        |g      d}nt        ||gf = yw)ztExpand the ``border-*`` shorthand properties.

    See https://www.w3.org/TR/CSS21/box.html#propdef-border-top

    Nr   r   r   )r   r   r   r   )rA   r;   rU   r   s       rC   r   r     s]       	u)F5'".F5'".Fugo	s   AAzborder-image-outset-repeat-slice-sourcec              #     K   t        |       } | rt        | dd |      rd| j                  d      gf nt        | dd       r[| j                  d      g}| r?t        | dd       r1|j	                  | j                  d             | rt        | dd       r1d|f n(t        | dd       st        | d         dk(  r| j                  d      g}| rEt        || dd z         r4|j	                  | j                  d             | rt        || dd z         r4d|f | r6| d   j                  dk(  r$| d   j                  d	k(  r| j                  d       nL| st        t        | dd       r| j                  d      g}| rEt        || dd z         r4|j	                  | j                  d             | rt        || dd z         r4d
|f | r6| d   j                  dk(  r$| d   j                  d	k(  r| j                  d       n@| r6| d   j                  dk(  r$| d   j                  d	k(  r| j                  d       nt        | st        t        | dd       r`| j                  d      g}| rEt        || dd z         r4|j	                  | j                  d             | rt        || dd z         r4d|f nt        t        | ryyw)z}Expand the ``border-image-*`` shorthand properties.

    See https://drafts.csswg.org/css-backgrounds/#the-border-image

    Nr	   r   r   r   fillr   r   r   r   r   )listr   rw   r   r   r   r   r   rK   r   r   r   rA   r;   rd   repeatssliceswidthsoutsetss          rC   expand_border_imager   !  s     &\F
vbqz84fjjm_,, ,zz!}oG0<vzz!}- 0<W$$r
+{6!9/E/Ojjm_F/0CDfjjm, /0CDF""&)..I5&)//S:P

1 ##!&!*- **Q-!3FVBQZ4G!HMM&**Q-0 !3FVBQZ4G!H&&fQinn	9fQiooQT>TJJqM F1INNi7F1IOOs<R

1 $###"6"1:.!::a=/!4Wvbqz5I!JNN6::a=1 !4Wvbqz5I!J(( $#g s'   BKB KB.K	C,K6KKzmask-border-modec              #     K   t        |       } | rt        | dd |      rd| j                  d      gf nt        | dd       rd| j                  d      gf nt	        | dd       r[| j                  d      g}| r?t	        | dd       r1|j                  | j                  d             | rt	        | dd       r1d|f n(t        | dd       st        | d         dk(  r| j                  d      g}| rEt        || dd z         r4|j                  | j                  d             | rt        || dd z         r4d|f | r6| d   j                  d	k(  r$| d   j                  d
k(  r| j                  d       nr| st        t        | dd       r| j                  d      g}| rEt        || dd z         r4|j                  | j                  d             | rt        || dd z         r4d|f | r6| d   j                  d	k(  r$| d   j                  d
k(  r| j                  d       n@!| r6| d   j                  d	k(  r$| d   j                  d
k(  r| j                  d       nt        | st        t        | dd       r`| j                  d      g}| rEt        || dd z         r4|j                  | j                  d             | rt        || dd z         r4d|f nt        t        | ryyw)zvExpand the ``mask-border-*`` shorthand properties.

    See https://drafts.fxtf.org/css-masking/#the-mask-border

    Nr	   r   r   r   r   r   r   r   r   r   r   )r   r   rw   r3   r   r   r   r   r   rK   r   r   r   r   s          rC   expand_mask_borderr   a  s     &\F
vbqz84fjjm_,,fRaj)FJJqM?** ,zz!}oG0<vzz!}- 0<W$$r
+{6!9/E/Ojjm_F/0CDfjjm, /0CDF""&)..I5&)//S:P

1 ##!&!*- **Q-!3FVBQZ4G!HMM&**Q-0 !3FVBQZ4G!H&&fQinn	9fQiooQT>TJJqM F1INNi7F1IOOs<R

1 $###"6"1:.!::a=/!4Wvbqz5I!JNN6::a=1 !4Wvbqz5I!J(( $#k s'   B<K5?B K5 B.K5/C,K5K53K5
backgroundc              #   `  K   dt        |       }|dv rD ]  }||f 
 yt        j                  t        |      }t	        | |      x}r|j                         E d{    yd
fd	}t        t        |             } |t        |      d      \  }}	|	j                         D 
ci c]	  \  }
}|
|g }}
}|D ]9  }  ||       \  }}|j                         D ]  \  }}||   j                  |        ; |j                         D ]  \  }}||ddd   f  d	|f y7 c c}}
w w)zwExpand the ``background`` shorthand property.

    See https://drafts.csswg.org/css-backgrounds-3/#the-background

    )background-colorzbackground-imagezbackground-repeatzbackground-attachmentzbackground-positionzbackground-sizezbackground-clipzbackground-origin)rf   re   Nrc   c           	         i fd}| d d d   } | r |dt        j                  | dd  d d d               r| dd = .| dd  }|r# |dt        |            r| j                          X |dt	        j                  |            r| j                           |dt        j                  |            r| j                           |dt        j                  |            r| j                          dt        |        d  D ]  }| | d  d d d   }t        j                  |      }|' |d	|      sJ | | d = | rm| d   j                  d
k(  r[| d   j                  dk(  rIdt        |        d  D ]7  }| | d d d d   }t        j                  |      }|' |d|      sJ | | d = 9  n  |dt        j                  |            r`| j                          | dd  } |dt        j                  |            r| j                          n |dt        j                  |             t        j                  dt        d         }	D ],  }
|
vs|
dk7  st        |
j                  dd         d   |
<   . |	fS )Nc                 4    |yd|  } | v rt         || <   y)NFzbackground-Tr   )r;   rK   rn   s     rC   addz3expand_background.<locals>.parse_layer.<locals>.add  s0    } 'Dw##!GDMrD   r   repeatcolorimage
attachment)r   r   r   r	   positionr   r   )r   r   sizeoriginclipr   background_colorrF   _r   )r   single_valuer4   rw   r   r   r   r   r   rK   r   r   r   r   replace)rA   final_layerr   rU   nn_tokensr   r   
next_tokenr   r;   rn   rd   rT   s              @rC   parse_layerz&expand_background.<locals>.parse_layer  s   	 "8$11&+dd2CDF23K23KEs7L,?@

7,99%JK

8.;;EBC

<!6!C!CE!JK

!3v;,-0 !1"#;tt,.;;HE'z8444rs6":??i#?"2J,,3!'V!6 0A'-qb}TrT':H#2#?#?#ID#/'*64'8 8'8$*A23K0   #8S--e45

#BC[
vs//
;<JJL  0 0 78/A BD" 	JD7"t/A'A .t||C/E Fq I	J g~rD   T)r   r   r   )F)
r   ri   rj   expand_backgroundrW   r   reversedr   nextr   )rA   r;   rd   rm   rS   ro   r   layersr   
last_layerrJ   rK   rn   r   layerr   rT   s     `             @rC   r   r     s]    0N !(G((" 	 D-	   x9H68^<<v<<<>!!BH nV,-F#DLdCE:.8.>.>.@A
UsUG|AGA (v&5 ;;= 	(KD%DM  '	((   !fF4R4L  !
e
##a 	"R Bs&   AD."D&#A	D.,D(:A-D.(D.ztext-decoration-line
-thicknessc              #     K   g }g }g }g }d}| D ]  }t        |      }|dv r"|j                  |       |rt        |dk(  s1d}4|dv r|rt        |j                  |       Rt        |      r|rt        |j                  |       wt	        |g      r|rt        |j                  |       t         |rd|f |rd|f |rd|f |rd	|f y
y
w)z2Expand the ``text-decoration`` shorthand property.F)r   	underlineoverlinezline-throughblinkr   T)soliddoubledotteddashedwavyr   r   r   r   N)r   r   r   r   r6   )	rA   r;   liner   style	thicknessnone_in_linerU   rm   s	            rC   expand_text_decorationr   
  s     DEEIL  e$PPKK##F"#GG##LL##LL&w/##U#+ . tmooI%% s   =C BCc              #      K   t        |       }|j                  dd      d   }|dv r|| f y|dk(  r/t        | d   j                  | d   j                  d      }||gf yt
        w)zExpand legacy ``page-break-before`` and ``page-break-after`` properties.

    See https://www.w3.org/TR/css-break-3/#page-break-properties

    rF   r	   )autoleftrightavoidalwaysr   pageN)r   splitr   source_linesource_columnr   )rA   r;   rm   rp   rU   s        rC   expand_page_break_before_afterr   5  s|      !(Gzz#q!!$H44	H	1I!!6!9#:#:FDs   A&A(zpage-break-afterzbreak-afterc                     t        | |      S )ztExpand legacy ``page-break-after`` property.

    See https://www.w3.org/TR/css-break-3/#page-break-properties

    r   rA   r;   s     rC   expand_page_break_afterr   G       *&$77rD   zpage-break-beforezbreak-beforec                     t        | |      S )zuExpand legacy ``page-break-before`` property.

    See https://www.w3.org/TR/css-break-3/#page-break-properties

    r   r   s     rC   expand_page_break_beforer   R  r   rD   zpage-break-insidebreak-insidec              #   B   K   t        |       }|dv rd| f yt        w)zyExpand the legacy ``page-break-inside`` property.

    See https://www.w3.org/TR/css-break-3/#page-break-properties

    )r   r   r   N)r   r   rA   r;   rm   s      rC   expand_page_break_insider   ]  s,      !(G##f$$s   columnscolumn-widthcolumn-countc              #   X  K   d}t        |       dk(  rt        | d         dk(  r| ddd   } | D ]2  }t        |g      |dk7  rd}nt        |g      d}nt        ||gf 4 t        |       dk(  r8|dk(  rdnd}t        | d   j                  | d   j                  d      }||gf yyw)	z*Expand the ``columns`` shorthand property.Nr   r   r   r   r  r  r	   )r   r   r!   r    r   r   r   r   )rA   r;   rU   s      rC   expand_columnsr  l  s      D
6{aKq	2f<"  ,1G!D5'".!DUGm 6{a!%!7~^1I!!6!9#:#:FDUGm	 s   B(B*zfont-variantz-alternatesz-capsz-east-asianz
-ligaturesz-numericc                     t        |       S )zoExpand the ``font-variant`` shorthand property.

    https://www.w3.org/TR/css-fonts-3/#font-variant-prop

    r
   r   s     rC   font_variantr    s     v&&rD   font-variant-caps-weight-stretch-sizeline-height-familyc              #     K   t        |       }|dv rt        d      t        t        |             } t	        d      D ]n  }| j                         }t        |      dk(  r"t        |g      d}n/t        |g      d}n t        |g      d}nt        |g      d	}n n)||gf | rjt         | st        | j                         }t        |g      t        d
|gf | st        | j                         }|j                  dk(  r9|j                  dk(  r*| j                         }t        |g      t        d|gf n| j                  |       | j!                          t#        |       t        d| f yw)z_Expand the ``font`` shorthand property.

    https://www.w3.org/TR/css-fonts-3/#font-prop

    )captioniconmenuzmessage-boxzsmall-captionz
status-barzSystem fonts are not supportedr   normalNr   r  r	  r
  r  r   r   r  r  )r   r   r   r   rangerw   r   r)   r*   r+   r(   r'   r   rK   r/   r   reverser&   )rA   r;   expand_font_keywordr   rU   r   s         rC   expand_fontr    s     -V4 > ><== (6"#F 1X 

u) ug*Fw'3$F%!-F5'".F ugo+. 

 %!
E7
 JJLEzzY5;;##5

w'eW$$ 	e NN6"
V
s   B#E7&CE7z	word-wrapoverflow-wrapc              #   >   K   t        |       }|t        d| f yw)zhExpand the ``word-wrap`` legacy property.

    See https://www.w3.org/TR/css-text-3/#overflow-wrap

    Nr  )r5   r   r   s      rC   expand_word_wrapr    s(      F#G
6
!!   flex-grow-shrink-basisc           	   #   x  K   t        |       }|dk(  rP| d   j                  | d   j                  }}t        ||ddd      }t	        ||d      }d|gf d|gf d|gf yd\  }}}	d	\  }
}}| D ]  }|j
                  d
k(  xr |j                  dk(  xr t        |
|f       }|s|st        |g      }||}	d}J|
st        |g      }|t        |}d}
e|st        |g      }|t        |}d}t         | d   j                  | d   j                  }}t        |      j                         rt        |      nd}t        |      j                         rt        |      nd}t        ||||t        |            }t        ||||t        |            }|st        ||dddd      }	d|gf d|gf d|	gf yw)zExpand the ``flex`` property.r   r   0r   r  r  r  )r	   r	   N)FFFnumberNTpx)r   r   r   r   r   r   	int_valueallr"   r$   r   float
is_integerintstrr   )rA   r;   rm   r   column
zero_token
auto_tokengrowshrinkbasis
grow_foundshrink_foundbasis_foundrU   forced_flex_factor	new_basisnew_grow
new_shrinkint_grow
int_shrink
grow_tokenshrink_tokens                         rC   expand_flexr:    s     !(G&ay,,fQi.E.Ef vq!S9
ff5

|##*%%$$(fe0C-
L+ 	$E 

h& 45??a+? 4\233  '9&w/	(!E"&K+UG4#''#D!%J!-ug6
%'''F#'L##;	$< ay,,fQi.E.Ef %d 6 6 83t9d$)&M$<$<$>S[D
 vtXs4yI
"&&*c&k;"4AsDAE
|##,''s   F8F:z	flex-flowflex-direction	flex-wrapc              #   f  K   t        |       dk(  rN| | ddd   fD ];  }t        |d   g      }t        |d   g      }|s$|s'd|d   gf d|d   gf  y t        t        |       dk(  r>t        | d   g      }|rd| d   gf yt        | d   g      }|rd| d   gf yt        t        w)z"Expand the ``flex-flow`` property.r   Nr   r   r	   r;  r<  )r   r#   r%   r   )rA   r;   sorted_tokens	directionwraps        rC   expand_flex_flowrA    s      6{a#VDbD\1 	 M&a(8'9:ImA./0DT&q)9(:::!M!$4#555	   	V	"F1I;/	"VAYK//fQi[)D!F1I;..##s   <B1B1A/B1c              #   R  K   | d   j                   | d   j                  }}t        ||d      }t        |       dk(  r't	        | d         dk(  rd|gf d|gf d|gf y g g}| D ]F  }|j
                  dk(  r!|j                  dk(  r|j                  g        3|d	   j                  |       H t        |      d
k(  rKt        |d         }t        |d         }|r'|rd|d   f d|d   f d|gf y |d   }t        t        t        |      dk(  r	|g}t        t        w)Nr   r   r	   -columns-rows-areasr   r   r   r   )
r   r   r   r   r   r   rK   r   r.   r   )	rA   r;   r   r)  r   slash_separatedrU   rowsr   s	            rC   _expand_grid_templaterH  ;  se    !9((&)*A*A&DdFF+D
6{aKq	2f<4&  vodO .::"u{{c'9""2&B&&u-	.
 ?q _Q/0 23 /!"444q111&&%a(G   	_		"&  s   D%D'grid-templaterC  rD  rE  c              #   8   K   t        | |      E d{    y7 w)z&Expand the ``grid-template`` property.N)rH  r   s     rC   expand_grid_templaterK  ]  s      %VT222s   gridz-template-columnsz-template-rows-template-areas-auto-columns
-auto-rows
-auto-flowc              #   L  K   | d   j                   | d   j                  }}t        ||d      }t        ||d      }t        ||d      }t        ||d      }	 t        t	        | d            }|D ]   \  }}	d|j                  d      d	    |	f " d
|gf d|gf d|gf y# t        $ r Y nw xY wg g}
| D ]F  }|j                  dk(  r!|j                  dk(  r|
j                  g        3|
d	   j                  |       H t        |
      dk7  rt        d}d}g g d}t        |
|j                               }|D ]t  \  } \  }}d}| D ]e  }t        |      dk(  r|s|r||k7  rt        |}|}%t        |      dk(  r|s|r||k7  rt        d}|}G|| d	   k(  r|j                  |       at         v |st        |dk(  rdnd}|dk(  r|n|}d|r||fn|ff d| dt        ||         f d| d|gf d| d|gf d| dt        ||         f d|gf yw)zExpand the ``grid`` property.r   r   r   rowr)  rI  z
-template-rF   r   rN  rO  rP  Nr   r   r   )rR  r)  Fdensez	auto-flowTz-auto-srM  )r   r   r   tuplerH  r   r   r   rK   r   r   r   r   r   )rA   r;   r   r)  r   r   rR  templaterJ   rK   split_tokensrU   
auto_trackrS  	templatesiterabletracktrack_templatesauto_flow_tokennon_auto_trackauto_track_tokens                        rC   expand_gridr`  d  s    
 !9((&)*A*A&DdFF+DdFF+D
T65
)Cfh/F
.vGH # 	;JCsyy~b123U::	;v%%TF""SE!!   4L '::"u{{c'9#R&	'
 <AJEb)I<!23H,4 $(( 	$E5!W,ZJ%,?''"
U#{2"zjE6I''"&"
&*$&&u-##	$$" (H4U(N!+x!7vS
%*	5!1A0CE E:,a
 %	*(=">
>>>"!
$tf
,,zl!
$tf
,,~&a
(%	.0I*J
JJ
dV
##s+   AH$B& +;H$&	B2/H$1B22E2H$c              #   D  K   g g}| D ]F  }|j                   dk(  r!|j                  dk(  r|j                  g        3|d   j                  |       H dt        |      cxk  r
|k  st         t        g }|D ]3  } t        |       x}st        |j                  |       t        |        5 t        j                  |j                  d      }t        |      x}dk  rQt        |d   d d       d hk(  }|rt        |d         n|f}	|j                  |        |j                  |d          |	 |dcxk  r|k  r-n n*t        |d   d d       d hk(  }|rt        |d         n|f |dcxk  r|k  r.n y t        |d   d d       d hk(  }|rt        |d         n|f y y w)	Nr   r   r   r	   r   r   r   r   )r   rK   r   r   r   r-   rU  r   r   r   set)
rA   
max_number
grid_linesrU   validations
validationr   linescustom_identrK   s
             rC   _expand_grid_column_row_areari    s    J %::"u{{c'9b!2e$	%
 J-:- .K '//
/:&Fm	
 e'')<)<fEDZ Q&;q>"1-.4&8(4jm$4'&!;q>*J;q>"1-.4&8&2eJqM"?J;q>"1-.4&8&2eJqM"? s   FF zgrid-columnzgrid-rowz-startz-endc              #   ^   K   t        | d      }t        |d      D ]  \  } }d| | f  yw)z,Expand the ``grid-[column|row]`` properties.r   )startendrF   Nri  r   )rA   r;   tokens_listsides       rC   expand_grid_column_rowrp    s@     
 /vq9KK)9: !$j&  !s   +-z	grid-areazgrid-row-startzgrid-row-endzgrid-column-startzgrid-column-endc              #   b   K   t        | d      }d}t        ||      D ]  \  } }d| | f  yw)z"Expand the ``grid-area`` property.r   )z	row-startzcolumn-startzrow-endz
column-endzgrid-Nrm  )rA   r;   rn  sidesro  s        rC   expand_grid_arears    sD     
 /vq9KBEK/ %dVnf$$%s   -/zgrid-gapr,   
column-gaprow-gapc              #      K   t        |       dk(  rt        |       t        d| f d| f yt        |       dk(  r;t        | dd       t        | dd       }}d||fv rt        d| dd f d| dd f yt        w)zExpand the ``gap`` property.r	   Nru  rt  r   r   )r   r,   r   )rA   r;   
column_gaprow_gaps       rC   
expand_gapry    s     
 6{av;F""	V	!&1+.F1QK0@G
J((!$$F1QK''s   A<A>zgrid-column-gapc              #   >   K   t        |       }|t        d| f yw)z+Expand legacy ``grid-column-gap`` property.Nrt  r,   r   r   s      rC   expand_legacy_column_gapr|    s'      &kG

r  zgrid-row-gapc              #   >   K   t        |       }|t        d| f yw)z(Expand legacy ``grid-row-gap`` property.Nru  r{  r   s      rC   expand_legacy_row_gapr~    s'      &kG
V
r  zplace-contentzalign-contentzjustify-contentc                     t         )z&Expand the ``place-content`` property.r   r   s     rC   expand_place_contentr    
    
 rD   zplace-itemszalign-itemszjustify-itemsc                     t         )z$Expand the ``place-items`` property.r   r   s     rC   expand_place_itemsr    r  rD   z
place-selfz
align-selfzjustify-selfc                     t         )z#Expand the ``place-self`` property.r   r   s     rC   expand_place_selfr    r  rD   z
line-clamp	max-linescontinueblock-ellipsisc              #     K   t        |       dk(  rt        |       }|dk(  rN| d   j                  | d   j                  }}t	        ||d      }t	        ||d      }d|gf d|gf d|gf y	| d   j
                  dk(  r`| d   j                  Q| d   j                  | d   j                  }}t	        ||d      }t	        ||d
      }d| d   gf d|gf d|gf y	t        t        |       dk(  r| d   j
                  dk(  ro| d   j                  }t        | d   g      }	|rI|	G| d   j                  | d   j                  }}t	        ||d
      }d| d   gf d|gf d| d   gf y	t        t        t        w)z#Expand the ``line-clamp`` property.r	   r   r   r   r  r  r  r!  Ndiscardr   )	r   r   r   r   r   r   r#  r   r   )
rA   r;   rm   r   r)  r   r+  discard_token	max_linesellipsiss
             rC   expand_line_clampr    s     6{a$V,f!!900&)2I2I&D#D&&9J#D&&9J
|++zl**"ZL00AY^^x'F1I,?,?,K!!900&)2I2I&D#D&&9J&tVY?Mq	{**}o--"ZL00	V	!9>>X%q	++I%vayk2HX1%ay44fQi6M6Mf *4 C!F1I;.. =/11&33##s   F Fz
text-align-all-lastc              #   H  K   t        |       dk(  rt        |       }|t        |dk(  r,| d   j                  | d   j                  }}t        ||d      }n| d   }d|gf |dk(  r,| d   j                  | d   j                  }}t        ||d      }n|}d|gf yt        w)	z#Expand the ``text-align`` property.r	   Nzjustify-allr   justifyr  rk  r  )r   r   r   r   r   r   )rA   r;   rm   r   r)  	align_all
align_lasts          rC   expand_text_alignr  >  s      6{a$V,?m#!!900&)2I2I&D"4;Iq	Iyk!!i!!900&)2I2I&D#D&':J"J
|##s   B B")_rP   ri   tinycss2.astr   r   r   tinycss2.color4r   
propertiesr   descriptorsr   utilsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   rZ   r9   rW   rS   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r:  rA  rH  rK  r`  ri  rp  rs  ry  r|  r~  r  r  r  r  r  r^   rD   rC   <module>r     s"   $  @ @ ' ' , T T T T T T T T T T 	g >=&@ 
.	.	.	(	)	'!      !H 
/7 "="	 
"J 
,';F& G &R 
(  
,	.	/	-	-	)(Hh/ 0      $ 
.)Y)X!%': ' : z 
-)Y)Xw!%'< ' < ~ 
,c$ c$L 

'8X|<&& = &&R$ 

- 8 ! 8 

.!8 " 8 

.!
 " 
 
)..1 2 ( 
.--k+'+ ' 
&(OY
G,C, CL 
+/"	" # 	" 
&'9h/5  0 5 p 
+"K0 1 4D 
/*gx03 1 3
 
&%'79J!<?9$? 9$x@< 
-	*(F#! $  ! 
+"N%'8:%: % 
*	%,	* +  " 

,    
.)   
//#45 6  
--1 2  
,,/ 0  
,+z+;<# = #L 
,&'" # rD   