a
    ¥Q•h_™  ã                
   @   sÜ  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 Z9G dd„ deƒZ:dd„ Z;dd„ Z<dd„ Z=e<dƒe<dƒe<dƒe<dƒe<dƒe<dƒdd„ ƒƒƒƒƒƒZ>e<dƒe=ddddd d!�d"d#„ ƒƒZ?e<d$ƒe=d%d&d'd d!�d(d)„ ƒƒZ@e<d*ƒd+d,„ ƒZAe<d-ƒe<d.ƒe<d/ƒe<d0ƒe<d1ƒe<d2ƒe=d3d4d5ƒd6d7„ ƒƒƒƒƒƒƒZBe<d8ƒe=d9d:d;d<d3d d!�d=d>„ ƒƒZCe<d?ƒe=d9d:d;d<d3d@d d!�dAdB„ ƒƒZDe<dCƒdDdE„ ƒZEe<dFƒe=dGd4d5dHƒdIdJ„ ƒƒZFdKdL„ ZGe<dMƒe=dNƒdOdP„ ƒƒZHe<dQƒe=dRƒdSdT„ ƒƒZIe<dUƒe=dVƒdWdX„ ƒƒZJe<dYƒe=dZd[ƒd\d]„ ƒƒZKe<d^ƒe=d_d`dadbdcd&ƒddde„ ƒƒZLe<dfƒe=d5dgdhdidjdkdlƒdmdn„ ƒƒZMe<doƒe=dpƒdqdr„ ƒƒZNe<dsƒe=dtdudvƒdwdx„ ƒƒZOe<dyƒe=dzd{ƒd|d}„ ƒƒZPd~d„ ZQe<d€ƒe=d�d‚dƒƒd„d…„ ƒƒZRe<d†ƒe=d‡dˆd‰dŠd‹dŒƒd�dŽ„ ƒƒZSd�d�„ ZTe<d‘ƒe<d’ƒe=d“d”ƒd•d–„ ƒƒƒZUe<d—ƒe=d˜d™dšd›ƒdœd�„ ƒƒZVe<džƒe<dŸƒe=d d¡ƒd¢d£„ ƒƒƒZWe<d¤ƒe=d ƒd¥d¦„ ƒƒZXe<d§ƒe=d¡ƒd¨d©„ ƒƒZYe<dªƒe=d«d¬ƒd­d®„ ƒƒZZe<d¯ƒe=d°d±ƒd²d³„ ƒƒZ[e<d´ƒe=dµd¶ƒd·d¸„ ƒƒZ\e<d¹ƒe=dºd»d¼ƒd½d¾„ ƒƒZ]e<d¿ƒe=dÀdÁƒdÂdÃ„ ƒƒZ^dS )Ä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                       s(   e Zd ZdZ‡ fdd„Zdd„ Z‡  ZS )ÚPendingExpanderz>Expander with validation done when defining calculated values.c                    s   t ƒ  ||jd ¡ || _d S )NÚname)ÚsuperÚ__init__ÚkeywordsÚ	validator)ÚselfÚtokensr<   ©Ú	__class__© ú\/var/www/sistema_ama/venv/lib/python3.9/site-packages/weasyprint/css/validation/expanders.pyr:      s    zPendingExpander.__init__c                 C   sJ   |   |¡D ]6\}}| d¡r0| j jd › |› �}||kr
|  S q
t‚d S )Nú-r8   )r<   Ú
startswithr;   ÚKeyError)r=   r>   Ú
wanted_keyÚkeyÚvaluerA   rA   rB   Úvalidate!   s    

zPendingExpander.validate)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r:   rI   Ú__classcell__rA   rA   r?   rB   r7      s   r7   c                    s6   | D ],}t |ƒrt| |ƒ‰ ‡ fdd„|D ƒ  S qdS )z5Return pending expanders when var is found in tokens.c                    s   i | ]
}|ˆ “qS rA   rA   ©Ú.0r8   ©ÚpendingrA   rB   Ú
<dictcomp>0   ó    z_find_var.<locals>.<dictcomp>N)r   r7   )r>   ÚexpanderÚexpanded_namesÚtokenrA   rQ   rB   Ú	_find_var*   s    
rX   c                    s   ‡ fdd„}|S )z1Decorator adding a function to the ``EXPANDERS``.c                    s   ˆ t vsJ ˆ ƒ‚| t ˆ < | S )z&Add ``function`` to the ``EXPANDERS``.)Ú	EXPANDERS)Úfunction©Úproperty_namerA   rB   Úexpander_decorator5   s    z$expander.<locals>.expander_decoratorrA   )r\   r]   rA   r[   rB   rU   3   s    rU   c                     s&   |  dd¡‰|rJ ‚‡ ‡fdd„}|S )zöDecorator 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                    s    t  ˆ¡‡‡ ‡‡fdd„ƒ‰ ˆ S )z"Decorate the ``wrapped`` expander.c                 3   s&  t jˆ||d�}d}t| ƒ‰ ˆ dv r<‡ fdd„ˆD ƒ}d}nt| |ˆƒ}|rPd}|s¾i }ˆrjˆ| ||ƒ}n
ˆ| |ƒ}|D ]D\}}|ˆv s�J |ƒ‚||v r´td| d¡› d	|› d
�ƒ‚|||< qxˆD ]^}| d¡rÞ|› |› �}	n|}	||v �r|| }
|�st|
|	|dd�\\}	}
nd}
|	|
fV  qÂdS )zWrap the expander.©r8   Úbase_urlF)ÚinheritÚinitialc                    s   i | ]
}|ˆ “qS rA   rA   rO   ©ÚkeywordrA   rB   rS   S   rT   zjgeneric_expander.<locals>.generic_expander_decorator.<locals>.generic_expander_wrapper.<locals>.<dictcomp>Tzgot multiple rC   z values in a z
 shorthand©Úrequiredrb   N)Ú	functoolsÚpartialr   rX   r   ÚstriprD   r6   )r>   r8   r`   rU   Zskip_validationÚresultsÚresultÚnew_nameÚ	new_tokenZactual_new_namerH   )rV   Úgeneric_expander_wrapperr^   Úwrappedrc   rB   rn   J   sJ    ÿ
ÿÿ


ÿzVgeneric_expander.<locals>.generic_expander_decorator.<locals>.generic_expander_wrapper)rg   Úwraps)ro   ©rV   r^   )rn   ro   rB   Úgeneric_expander_decoratorH   s    .z4generic_expander.<locals>.generic_expander_decorator)Úpop)rV   Úkwargsrr   rA   rq   rB   Úgeneric_expander=   s    2ru   zborder-colorzborder-stylezborder-widthÚmarginÚpaddingÚbleedc           
      c   s$  g }dD ]P}|  d¡ }dkr2| |› |› �¡ q| |d|… › |› ||d… › �¡ qtjt||d�}t| ||ƒ }rŒ| ¡ E dH  dS t| ƒdkr¢| d9 } nPt| ƒdkr¸| d9 } n:t| ƒd	krÔ| | d f7 } nt| ƒdkròtd
t| ƒ› �ƒ‚t	|| ƒD ]"\}}	t
|	g||dd�\}|V  qüdS )z>Expand properties setting a token for the four sides of a box.©z-topz-rightz-bottomz-leftrC   éÿÿÿÿNr_   r   é   r   é   ú%Expected 1 to 4 token components got Tre   )ÚrfindÚappendrg   rh   Úexpand_four_sidesrX   ÚitemsÚlenr   Úzipr6   )
r>   r8   r`   rV   ÚsuffixÚirU   rk   Zexpanded_namerW   rA   rA   rB   r€   }   s4    	(ÿ

ÿ
ÿr€   zborder-radiuszborder-top-left-radiuszborder-top-right-radiuszborder-bottom-right-radiuszborder-bottom-left-radiusT)r^   c           
      c   s.  g  }}g }| D ]P}|j dkrV|jdkrV||u rL|| d krFtdƒ‚qT|}q`tdƒ‚q| |¡ q|sr|dd… }||fD ]j}t|ƒdkr”|d9 }qzt|ƒd	krª|d	9 }qzt|ƒd
krÆ| |d ¡ qzt|ƒdkrztdt|ƒ› �ƒ‚qzd}t|t||ƒƒD ].\}	} d|	› d�}t| ||dd� || fV  qúdS )z-Validator for the ``border-radius`` property.Úliteralú/rz   z"Expected value after "/" separatorzExpected only one "/" separatorNr   r{   r   r|   r}   )ztop-leftz	top-rightzbottom-rightzbottom-leftzborder-z-radiusTre   )ÚtyperH   r   r   r‚   rƒ   r6   )
r>   r8   r`   ÚcurrentZ
horizontalZverticalrW   ÚvaluesZcornersÚcornerrA   rA   rB   Úborder_radius§   s8    



ÿrŒ   z
list-styleú-typeú	-positionú-imagec           	      c   sÊ   d }}d}| D ]t}t |ƒdkr.|d7 }|}qt|g|ƒdurHd}d}n0t|gƒdur\d}nt|gƒdurtd	}d}nt‚||gfV  q|s¢|r¢d	|gfV  |d8 }|s¾|r¾d|gfV  |d8 }|rÆt‚dS )
zyExpand the ``list-style`` shorthand property.

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

    Fr   Únoner   Nr�   TrŽ   r�   )r   r/   r0   r1   r   )	r>   r8   r`   Ztype_specifiedZimage_specifiedZ
none_countrW   Ú
none_tokenr„   rA   rA   rB   Úexpand_list_styleÑ   s2    r’   Úborderc                 c   s*   dD ] }t | || |ƒD ]
}|V  qqdS )zlExpand the ``border`` shorthand property.

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

    ry   N)Úexpand_border_side)r>   r8   r`   r„   Znew_proprA   rA   rB   Úexpand_borderü   s    r•   z
border-topzborder-rightzborder-bottomzborder-leftzcolumn-ruleÚoutlineú-widthú-colorú-stylec                 c   sX   | D ]N}t |ƒdurd}n,t|gƒdur.d}nt|gƒdurBd}nt‚||gfV  qdS )ztExpand the ``border-*`` shorthand properties.

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

    Nr˜   r—   r™   )r   r   r   r   )r>   r8   rW   r„   rA   rA   rB   r”     s    r”   zborder-imageú-outsetú-repeatú-sliceú-sourcec                 c   sN  t | ƒ} | �rJt| dd… |ƒr4d|  d¡gfV  qt| dd… ƒr‚|  d¡g}| rvt| dd… ƒrv| |  d¡¡ qPd|fV  qt| dd… ƒs¤t| d ƒdk�rD|  d¡g}| rÚt|| dd…  ƒrÚ| |  d¡¡ q°d|fV  | r| d jdkr| d jd	kr|  d¡ nq| �st	‚t
| dd… ƒ�r¤|  d¡g}| �rjt
|| dd…  ƒ�rj| |  d¡¡ �q:d
|fV  | r| d jdkr| d jd	kr|  d¡ nqn6| �rÖ| d jdk�rÖ| d jd	k�rÖ|  d¡ nt	‚| �sät	‚t| dd… ƒ�r>|  d¡g}| �r2t|| dd…  ƒ�r2| |  d¡¡ �qd|fV  nt	‚qt	‚qdS )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   rs   r   r   r   r   rˆ   rH   r   r   r   ©r>   r8   r`   ZrepeatsZslicesÚwidthsZoutsetsrA   rA   rB   Úexpand_border_image!  sN    	"
 
 &r¢   zmask-borderú-modec                 c   sv  t | ƒ} | �rrt| dd… |ƒr4d|  d¡gfV  qt| dd… ƒrXd|  d¡gfV  qt| dd… ƒr¦|  d¡g}| ršt| dd… ƒrš| |  d¡¡ qtd|fV  qt| dd… ƒsÈt| d ƒdk�rl|  d¡g}| �rt|| dd…  ƒ�r| |  d¡¡ qÔd|fV  | r| d jd	kr| d j	d
kr|  d¡ nq| �sDt
‚t| dd… ƒ�rÌ|  d¡g}| �r’t|| dd…  ƒ�r’| |  d¡¡ �qbd|fV  | r| d jd	kr| d j	d
kr|  d¡ nqn6| �rþ| d jd	k�rþ| d j	d
k�rþ|  d¡ nt
‚| �st
‚t| dd… ƒ�rf|  d¡g}| �rZt|| dd…  ƒ�rZ| |  d¡¡ �q*d|fV  nt
‚qt
‚qdS )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   rs   r2   r   r   r   r   rˆ   rH   r   r   r   r    rA   rA   rB   Úexpand_mask_bordera  sR    	"
 
 &r¤   Ú
backgroundc                 #   s
  d‰t | ƒ}|dv r,ˆD ]}||fV  qdS tjt|ˆ d�}t| |ˆƒ }r^| ¡ E dH  dS d‡ ‡fdd„	}tt| ƒƒ}|t|ƒdd	�\}}	d
d„ |	 ¡ D ƒ}
|D ]0} || ƒ\}}| ¡ D ]\}}|
|  	|¡ q¼q¤|
 ¡ D ]\}}||ddd… fV  qÞd|fV  dS )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)rb   ra   Nr_   Fc                    sl  i ‰ ‡ fdd„}| d d d… } | �r|dt  | dd … d d d… ¡ƒrR| dd …= q| dd … }|rz|dt|ƒƒrz|  ¡  q|dt |ˆ¡ƒr–|  ¡  q|dt  |¡ƒr°|  ¡  q|dt |¡ƒrÊ|  ¡  qd	t| ƒ d … D ]Ø}| | d … d d d… }t |¡}|d urÜ|d
|ƒ�sJ ‚| | d …= | �r®| d jdk�r®| d j	dk�r®dt| ƒ d … D ]N}| | d… d d d… }t
 |¡}|d u�r^|d|ƒ�sžJ ‚| | d …= �q^ �q¶qÜ|d u�rÂq|dt |¡ƒ�r|  ¡  | dd … }|dt |¡ƒ�r|  ¡  q|dt |¡ƒ qt‚qˆ  dtd ¡}	ˆD ]2}
|
ˆ v�r0|
dk�r0t|
 dd¡ d ˆ |
< �q0|	ˆ fS )Nc                    s.   |d u rdS d| › �} | ˆ v r"t ‚|ˆ | < dS )NFzbackground-T©r   )r8   rH   ©rj   rA   rB   Úadd½  s    
z3expand_background.<locals>.parse_layer.<locals>.addrz   ÚrepeatéþÿÿÿÚcolorÚimageÚ
attachment)r{   r|   r   r   Úpositionr†   r‡   )r|   r   ÚsizeÚoriginÚclipr¦   Úbackground_colorrC   Ú_r   )r   Úsingle_valuer3   rs   r   r   r‚   r   rˆ   rH   r   r   r   r   Úreplace)r>   Úfinal_layerr©   rW   ÚnZn_tokensr¯   r°   Ú
next_tokenr¬   r8   ©r`   rV   r¨   rB   Úparse_layerº  sn    
ÿ

ÿ



ÿz&expand_background.<locals>.parse_layerT)r·   c                 S   s   i | ]\}}||g“qS rA   rA   )rP   rG   rH   rA   rA   rB   rS      rT   z%expand_background.<locals>.<dictcomp>rz   r¦   )F)
r   rg   rh   Úexpand_backgroundrX   r�   Úreversedr   Únextr   )r>   r8   r`   rd   rU   rk   r»   Zlayersr¬   Z
last_layerrj   r´   ÚlayerrH   rŠ   rA   rº   rB   r¼   £  s.    ÿDr¼   ztext-decorationú-lineú
-thicknessc           	      c   sæ   g }g }g }g }d}| D ]�}t |ƒ}|dv rN| |¡ |r@t‚q¨|dkr¨d}q|dv rj|r^t‚| |¡ qt|ƒr†|rzt‚| |¡ qt|gƒr¤|r˜t‚| |¡ qt‚q|r¸d|fV  |rÆd|fV  |rÔd|fV  |râd	|fV  d
S )z2Expand the ``text-decoration`` shorthand property.F)r�   Ú	underlineZoverlinezline-throughÚblinkr�   T)ÚsolidÚdoubleÚdottedZdashedZwavyrÀ   r˜   r™   rÁ   N)r   r   r   r   r5   )	r>   r8   Úliner¬   ÚstyleÚ	thicknessZnone_in_linerW   rd   rA   rA   rB   Úexpand_text_decoration
  sD    




rÊ   c                 c   sb   t | ƒ}| dd¡d }|dv r,|| fV  n2|dkrZt| d j| d jdƒ}||gfV  nt‚dS )z�Expand legacy ``page-break-before`` and ``page-break-after`` properties.

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

    rC   r   )ÚautoÚleftÚrightÚavoidÚalwaysr   ÚpageN)r   Úsplitr   Úsource_lineÚsource_columnr   )r>   r8   rd   rl   rW   rA   rA   rB   Úexpand_page_break_before_after5  s    ÿrÔ   zpage-break-afterzbreak-afterc                 C   s
   t | |ƒS )ztExpand legacy ``page-break-after`` property.

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

    ©rÔ   ©r>   r8   rA   rA   rB   Úexpand_page_break_afterG  s    r×   zpage-break-beforezbreak-beforec                 C   s
   t | |ƒS )zuExpand legacy ``page-break-before`` property.

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

    rÕ   rÖ   rA   rA   rB   Úexpand_page_break_beforeR  s    rØ   zpage-break-insideúbreak-insidec                 c   s$   t | ƒ}|dv rd| fV  nt‚dS )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   ©r>   r8   rd   rA   rA   rB   Úexpand_page_break_inside]  s    rÛ   Úcolumnsúcolumn-widthúcolumn-countc                 c   s¼   d}t | ƒdkr.t| d ƒdkr.| ddd… } | D ]D}t|gƒdurR|dkrRd}nt|gƒdurfd}nt‚||gfV  q2t | ƒdkr¸|dkr�dnd}t| d j| d jdƒ}||gfV  dS )	z*Expand the ``columns`` shorthand property.Nr   r   rË   rz   rÝ   rÞ   r   )r‚   r   r    r   r   r   rÒ   rÓ   )r>   r8   rW   rA   rA   rB   Úexpand_columnsl  s     ÿrß   zfont-variantz-alternatesz-capsz-east-asianz
-ligaturesz-numericc                 C   s   t | ƒS )zoExpand the ``font-variant`` shorthand property.

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

    r	   rÖ   rA   rA   rB   Úfont_variant‚  s    	rà   Úfontú-variant-capsú-weightú-stretchú-sizeúline-heightú-familyc                 c   sb  t | ƒ}|dv rtdƒ‚tt| ƒƒ} tdƒD ]‚}|  ¡ }t|ƒdkrFq,t|gƒdurZd}n@t|gƒdurnd}n,t	|gƒdur‚d}nt
|gƒdur–d	}n qÀ||gfV  | s,t‚q,| s¸t‚|  ¡ }t|gƒdu rÒt‚d
|gfV  | sæt‚|  ¡ }|jdk�r0|jdk�r0|  ¡ }t|gƒdu �r"t‚d|gfV  n
|  |¡ |  ¡  t| ƒdu �rTt‚d| fV  dS )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½   Úrangers   r   r(   r)   r*   r'   r&   rˆ   rH   r.   r   Úreverser%   )r>   r8   Zexpand_font_keywordr´   rW   r„   rA   rA   rB   Úexpand_fontŽ  sN    	
rî   z	word-wrapúoverflow-wrapc                 c   s"   t | ƒ}|du rt‚d| fV  dS )zhExpand the ``word-wrap`` legacy property.

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

    Nrï   )r4   r   rÚ   rA   rA   rB   Úexpand_word_wrap×  s    rð   Zflexú-growú-shrinkú-basisc                 c   sØ  t | ƒ}|dkrj| d j| d j }}t||dddƒ}t||dƒ}d|gfV  d|gfV  d|gfV  �njd\}}}	d	\}
}}| D ]¢}|jd
ko¦|jdko¦t|
|fƒ }|sÌ|sÌt|gƒ}|durÌ|}	d}q‚|
sôt	|gƒ}|du rèt
‚n
|}d}
q‚q‚|�s t	|gƒ}|du �rt
‚n
|}d}q‚q‚t
‚q‚| d j| d j }}t|ƒ ¡ �rRt|ƒnd}t|ƒ ¡ �rlt|ƒnd}t||||t|ƒƒ}t||||t|ƒƒ}|�s°t||ddddƒ}	d|gfV  d|gfV  d|	gfV  dS )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   )r>   r8   rd   rÇ   ÚcolumnZ
zero_tokenÚ
auto_tokenZgrowÚshrinkZbasisZ
grow_foundZshrink_foundZbasis_foundrW   Zforced_flex_factorZ	new_basisZnew_growZ
new_shrinkZint_growZ
int_shrinkZ
grow_tokenZshrink_tokenrA   rA   rB   Úexpand_flexå  s^    

þ



ÿr   z	flex-flowúflex-directionú	flex-wrapc                 c   sÔ   t | ƒdkrr| | ddd… fD ]L}t|d gƒ}t|d gƒ}|r|rd|d gfV  d|d gfV   qÐqt‚n^t | ƒdkrÌt| d gƒ}|r¢d| d gfV  qÐt| d gƒ}|rÆd| d gfV  qÐt‚nt‚dS )z"Expand the ``flex-flow`` property.r   Nrz   r   r   r  r  )r‚   r"   r$   r   )r>   r8   Zsorted_tokensÚ	directionÚwraprA   rA   rB   Úexpand_flex_flow  s$    r  c           	      c   s4  | d j | d j }}t||dƒ}t| ƒdkrft| d ƒdkrfd|gfV  d|gfV  d|gfV  d S g g}| D ]2}|jdkr”|jdkr”| g ¡ qp|d	  |¡ qpt|ƒd
k�rt|d ƒ}t|d ƒ}|�r|�rd|d fV  d|d fV  d|gfV  d S |d }nt	‚nt|ƒdk�r(|g}nt	‚t	‚d S )Nr   r�   r   ú-columnsú-rowsú-areasr†   r‡   rz   r   )
rÒ   rÓ   r   r‚   r   rˆ   rH   r   r-   r   )	r>   r8   rÇ   rý   r�   Zslash_separatedrW   ÚrowsrÜ   rA   rA   rB   Ú_expand_grid_template;  s6    
r
  úgrid-templater  r  r  c                 c   s   t | |ƒE dH  dS )z&Expand the ``grid-template`` property.N)r
  rÖ   rA   rA   rB   Úexpand_grid_template]  s    r  Úgridz-template-columnsz-template-rowsú-template-areasú-auto-columnsú
-auto-rowsú
-auto-flowc                 c   s†  | d j | d j }}t||dƒ}t||dƒ}t||dƒ}t||dƒ}ztt| dƒƒ}W n tyj   Y nR0 |D ]"\}}	d| d¡d	 › �|	fV  qpd
|gfV  d|gfV  d|gfV  dS g g}
| D ]2}|jdkrê|jdkrê|
 	g ¡ qÆ|
d	  	|¡ qÆt
|
ƒdk�rt‚d}d}g g dœ}t|
| ¡ ƒ}|D ] \} \}}d}| D ]ˆ}t|ƒdk�rz|�sl|�rp||k�rpt‚|}|}nPt|ƒdk�r¬|�sž|�r¢||k�r¢t‚d}|}n|| d	 k�rÆ| 	|¡ nt‚�qD�q0|�sÜt‚|dk�rêdnd}|dk�rü|n|}d|�r||fn|ffV  d|› d�t|| ƒfV  d|› d�|gfV  d|› d�|gfV  d|› d�t|| ƒfV  d|gfV  dS )zExpand the ``grid`` property.r   rË   r�   Úrowrý   r  z
-template-rC   rz   r  r  r  Nr†   r‡   r   )r  rý   FÚdensez	auto-flowTz-auto-Úsr  )rÒ   rÓ   r   Útupler
  r   rÑ   rˆ   rH   r   r‚   rƒ   r�   r   )r>   r8   rÇ   rý   rË   r�   r  ÚtemplaterG   rH   Zsplit_tokensrW   Z
auto_trackr  Ú	templatesÚiterableÚtrackZtrack_templatesZauto_flow_tokenZnon_auto_trackZauto_track_tokenrA   rA   rB   Úexpand_gridd  sn    

ÿr  c           
      c   s   g g}| D ]2}|j dkr.|jdkr.| g ¡ q
|d  |¡ q
dt|ƒ  krV|ks\n t‚g }|D ](} t| ƒ }sxt‚| |¡ t| ƒV  qdt|j|j	dƒ}t|ƒ }dkrüt
|d d d… ƒd hk}|rØt|d ƒn|f}	| | ¡ | |d ¡ |	V  |d  k�r|k �rLn n4t
|d d d… ƒd hk}|�rDt|d ƒn|fV  |d  k�rd|k �rœn n4t
|d d d… ƒd hk}|�r”t|d ƒn|fV  d S )	Nr†   r‡   rz   r   rË   r   r   r|   )rˆ   rH   r   r‚   r   r,   r  r   rÒ   rÓ   Úset)
r>   Z
max_numberZ
grid_linesrW   ZvalidationsÚ
validationrË   ÚlinesÚcustom_identrH   rA   rA   rB   Ú_expand_grid_column_row_area£  s6    


r  zgrid-columnzgrid-rowz-startz-endc                 c   s2   t | dƒ}t|dƒD ]\} }d|› �| fV  qdS )z,Expand the ``grid-[column|row]`` properties.r   )ÚstartÚendrC   N©r  rƒ   )r>   r8   Útokens_listÚsiderA   rA   rB   Úexpand_grid_column_rowÁ  s    
r%  z	grid-areazgrid-row-startzgrid-row-endzgrid-column-startzgrid-column-endc                 c   s6   t | dƒ}d}t||ƒD ]\} }d|› �| fV  qdS )z"Expand the ``grid-area`` property.r{   )z	row-startzcolumn-startzrow-endz
column-endzgrid-Nr"  )r>   r8   r#  Zsidesr$  rA   rA   rB   Úexpand_grid_areaË  s    
r&  zgrid-gapr+   ú
column-gapúrow-gapc                 c   sž   t | ƒdkr2t| ƒdu rt‚d| fV  d| fV  nht | ƒdkr–t| dd… ƒt| dd… ƒ }}d||fv rpt‚d| dd… fV  d| dd… fV  nt‚dS )zExpand the ``gap`` property.r   Nr(  r'  r   r   )r‚   r+   r   )r>   r8   Ú
column_gapÚrow_gaprA   rA   rB   Ú
expand_gapÖ  s    
"r+  zgrid-column-gapc                 c   s"   t | ƒ}|du rt‚d| fV  dS )z+Expand legacy ``grid-column-gap`` property.Nr'  ©r+   r   rÚ   rA   rA   rB   Úexpand_legacy_column_gapê  s    r-  zgrid-row-gapc                 c   s"   t | ƒ}|du rt‚d| fV  dS )z(Expand legacy ``grid-row-gap`` property.Nr(  r,  rÚ   rA   rA   rB   Úexpand_legacy_row_gapô  s    r.  zplace-contentzalign-contentzjustify-contentc                 C   s   t ‚dS )z&Expand the ``place-content`` property.Nr§   rÖ   rA   rA   rB   Úexpand_place_contentþ  s    r/  zplace-itemszalign-itemszjustify-itemsc                 C   s   t ‚dS )z$Expand the ``place-items`` property.Nr§   rÖ   rA   rA   rB   Úexpand_place_items  s    r0  z
place-selfz
align-selfzjustify-selfc                 C   s   t ‚dS )z#Expand the ``place-self`` property.Nr§   rÖ   rA   rA   rB   Úexpand_place_self  s    r1  z
line-clampú	max-linesÚcontinueúblock-ellipsisc           
      c   s”  t | ƒdkrêt| ƒ}|dkrp| d j| d j }}t||dƒ}t||dƒ}d|gfV  d|gfV  d|gfV  nx| d jdkrä| d jd	urä| d j| d j }}t||dƒ}t||d
ƒ}d| d gfV  d|gfV  d|gfV  nt‚n¦t | ƒdk�rŒ| d jdk�r†| d j}t| d gƒ}	|�r€|	d	u�r€| d j| d j }}t||d
ƒ}d| d gfV  d|gfV  d| d gfV  nt‚nt‚nt‚d	S )z#Expand the ``line-clamp`` property.r   r�   r   rË   r2  r3  r4  rõ   NÚdiscardr   )	r‚   r   rÒ   rÓ   r   rˆ   r÷   r   r   )
r>   r8   rd   rÇ   rý   r‘   rþ   Zdiscard_tokenÚ	max_linesÚellipsisrA   rA   rB   Úexpand_line_clamp  s<    
r8  z
text-alignú-allú-lastc                 c   s¦   t | ƒdkržt| ƒ}|du r t‚|dkrL| d j| d j }}t||dƒ}n| d }d|gfV  |dkrŒ| d j| d j }}t||dƒ}n|}d|gfV  nt‚dS )	z#Expand the ``text-align`` property.r   Nzjustify-allr   Újustifyr9  r   r:  )r‚   r   r   rÒ   rÓ   r   )r>   r8   rd   rÇ   rý   Z	align_allZ
align_lastrA   rA   rB   Úexpand_text_align>  s    r<  )_rM   rg   Ú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.   r/   r0   r1   r2   r3   r4   r5   r6   rY   r7   rX   rU   ru   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  r8  r<  rA   rA   rA   rB   Ú<module>   s    
	
@$ý%)

ÿ=ÿ?
f)		
ÿ	ÿF
8"
ÿ<ÿ
&