U
    nuf<  ã                   @   sÒ   d dl Z d dlZd dl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 ddlmZmZ e  d¡Ze  d¡Zdd	d
„Zdd„ Zdd„ Zdd„ Zdd„ Z dd„ Z!dd„ Z"dd„ Z#dS )é    N)Úascii_loweré   )ÚAtKeywordTokenÚCommentÚCurlyBracketsBlockÚDimensionTokenÚFunctionBlockÚ	HashTokenÚ
IdentTokenÚLiteralTokenÚNumberTokenÚParenthesesBlockÚ
ParseErrorÚPercentageTokenÚSquareBracketsBlockÚStringTokenÚUnicodeRangeTokenÚURLTokenÚWhitespaceToken)Úserialize_string_valueÚserialize_urlz([-+]?([0-9]*\.)?[0-9]+([eE][+-]?[0-9]+)?z([0-9A-Fa-f]{1,6})[ \n\t]?Fc              	   C   sh  |   dd¡  dd¡  dd¡  dd¡} t| ƒ}d }}d}d	}g  }}d
}	g }
||k rd|  d||¡}|d	kr†|d|  d||¡ 7 }|}|| }|}| | }|dkrä|d7 }|  d|¡rÀ|d7 }qª| ||… }| t|||ƒ¡ qLnð|dkrN|d |k rN| |d  dkrN| |d  dkrNt| |d ƒ\}}}| t||||ƒ¡ qLn†|  d|¡r|| t	||dƒ¡ |d7 }qLnXt
| |ƒrÔt| |ƒ\}}|  d|¡s¸| t|||ƒ¡ qL|d7 }t|ƒdkr¤|}|  d|¡rì|d7 }qÒ||ks| | dkr¤t| |ƒ\}}}|d
k	r„d t|ƒ¡}|d
k	rp|d }|dkrV|d
d… }n|dksdt‚|d
d	… }| t||||ƒ¡ |d
k	rL| t||f|žŽ ¡ qLg }| t||||ƒ¡ |
 ||	f¡ d}	|}qLt | |¡}|r | ¡ }| ||… }t|ƒ}t| ¡ ƒst|ƒnd
}||k rZt
| |ƒrZt| |ƒ\}}| t||||||ƒ¡ nD|  d|¡rˆ|d7 }| t|||||ƒ¡ n| t|||||ƒ¡ qL|dkrþ|d7 }||k rêt
| |ƒrêt| |ƒ\}}| t|||ƒ¡ n| t	||dƒ¡ qL|dkr˜|d7 }||k r„| | dksVt | | ƒdksV| | d kr„|  d!|¡s„t
| |ƒ}t| |ƒ\}}| t!||||ƒ¡ n| t	||dƒ¡ qL|d"krØg }| t"|||ƒ¡ |
 ||	f¡ d#}	|}|d7 }qL|d$krg }| t#|||ƒ¡ |
 ||	f¡ d%}	|}|d7 }qL|dkrXg }| t$|||ƒ¡ |
 ||	f¡ d}	|}|d7 }qL||	krx|
 %¡ \}}	|d7 }qL|d&kr¤| t|||d'| ƒ¡ |d7 }qL|dkr"t&| |ƒ\}}}|d
k	r d( t'|ƒ¡}|d
k	rì|d
d	… }| t(||||ƒ¡ |d
k	rb| t||f|žŽ ¡ qL|  d)|¡r |  )d*|d ¡}|d	krr|sd| t*||| |d d
… ƒ¡ qd|s–| t*||| |d |… ƒ¡ |d7 }qL|  d+|¡rÊ| t	||d+ƒ¡ |d,7 }qL|  d-|¡rô| t	||d-ƒ¡ |d7 }qL|d.krH|d7 }|  d/|¡r4|d7 }| t	|||d/ ƒ¡ n| t	|||ƒ¡ qL| t	|||ƒ¡ |d7 }qL|S )0aw  Parse a list of component values.

    :type css: :obj:`str`
    :param css: A CSS string.
    :type skip_comments: :obj:`bool`
    :param skip_comments:
        Ignore CSS comments.
        The return values (and recursively its blocks and functions)
        will not contain any :class:`~tinycss2.ast.Comment` object.
    :returns: A list of :term:`component values`.

    ú õ   ï¿½z
Ú
úúr   r   éÿÿÿÿNú 
	©ú r   ú	ZUué   ú+z0123456789abcdefABCDEF?z-->é   ú(Úurl©ú"ú'zurl({})úeof-in-stringéþÿÿÿú
eof-in-urlú)ú%ú@ú#z@0123456789abcdefghijklmnopqrstuvwxyz-_ABCDEFGHIJKLMNOPQRSTUVWXYZé   ú\ú\
Ú{Ú}ú[ú]z}])z
Unmatched z"{}"z/*z*/z<!--é   z||z~|^$*ú=)+ÚreplaceÚlenÚrfindÚcountÚ
startswithÚappendr   Ú_consume_unicode_ranger   r   Ú_is_ident_startÚ_consume_identr
   r   Ú_consume_urlÚformatr   ÚAssertionErrorr   r   r   Ú
_NUMBER_REÚmatchÚendÚfloatÚanyÚgroupsÚintr   r   r   r   Úordr	   r   r   r   ÚpopÚ_consume_quoted_stringr   r   Úfindr   )ÚcssZskip_commentsÚlengthZtoken_start_posÚposÚlineZlast_newlineÚrootÚtokensZend_charÚstackÚnewlineÚcolumnÚcÚvalueÚstartrG   Zurl_posÚerrorÚreprZ	error_keyÚ	argumentsrF   Úrepr_Z	int_valueÚunitZis_identifierÚcontent© rb   ú6/tmp/pip-unpacked-wheel-29zdolzj/tinycss2/tokenizer.pyÚparse_component_value_list   sz    þ þ þ

*ÿ


     ÿ    ÿ    ÿ



ÿý
û
û















ÿÿ




rd   c                 C   s   | | }|dkpt |ƒdkS )z>Return true if the given character is a name-start code point.Z5abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_r0   )rL   )rP   rR   rY   rb   rb   rc   Ú_is_name_startÌ   s    
þre   c                 C   s|   t | |ƒrdS | | dkr^|d7 }|t| ƒk rDt | |ƒp\| | dkp\|  d|¡o\|  d|¡ S | | dkrx|  d|¡ S dS )zCReturn True if the given position is the start of a CSS identifier.Tú-r   r1   r2   F)re   r:   r=   )rP   rR   rb   rb   rc   r@   Õ   s    
ÿûr@   c                 C   sª   g }t | ƒ}|}||k rŠ| | }|dks4t|ƒdkr>|d7 }q|dkrŠ|  d|¡sŠ| | ||… ¡ t| |d ƒ\}}| |¡ |}qqŠq| | ||… ¡ d |¡|fS )ztReturn (unescaped_value, new_pos).

    Assumes pos starts at a valid identifier. See :func:`_is_ident_start`.

    z@abcdefghijklmnopqrstuvwxyz-_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZr0   r   r1   r2   Ú )r:   rL   r=   r>   Ú_consume_escapeÚjoin)rP   rR   ÚchunksrQ   Ú	start_posrY   rb   rb   rc   rA   ç   s"    
ÿ

rA   c                 C   s  d}| | }|dkst ‚|d7 }g }t| ƒ}|}||k rà| | }||krf| | ||… ¡ |d7 }qöq0|dkrÄ| | ||… ¡ |d7 }||k r¾| | dkr¦|d7 }nt| |ƒ\}}| |¡ |}q0|dkrÖd|dfS |d7 }q0d}| | ||… ¡ d |¡||fS )	z"Return (unescaped_value, new_pos).Nr&   r   r1   r   )z
bad-stringzBad string token)r)   zEOF in stringrg   )rD   r:   r>   rh   ri   )rP   rR   r\   Úquoterj   rQ   rk   rY   rb   rb   rc   rN     s8    



rN   c                 C   sv   t  | |¡}|rNt| d¡dƒ}d|  k r6tjkrBn nt|ƒnd| ¡ fS |t| ƒk rj| | |d fS d|fS dS )ztReturn (unescaped_char, new_pos).

    Assumes a valid escape: pos is just after '\' and not followed by '\n'.

    r   é   r   r   N)	Ú_HEX_ESCAPE_RErF   rK   ÚgroupÚsysÚ
maxunicodeÚchrrG   r:   )rP   rR   Z	hex_matchÚ	codepointrb   rb   rc   rh   '  s    $þrh   c                 C   s8  d}t | ƒ}|  d|¡r"|d7 }q||kr4d|dfS | | }|dkrXt| |ƒ\}}}n(|dkrnd|d |fS g }|}||kr | | ||… ¡ d |¡|dfS | | }|dkrÚ| | ||… ¡ |d7 }d |¡||fS |dkr| | ||… ¡ d |¡}|d7 }q€qv|d	krZ|  d
|¡sZ| | ||… ¡ t| |d ƒ\}}| |¡ |}qv|dkrvd}|d7 }q€qv|d7 }qv|dk	rä|  d|¡r¤|d7 }qŠ||k rÌ| | dkrä||d |fS n|dkrÚd}|||fS ||k r.|  d|¡r|d7 }n$| | dkr"|d7 }q.n|d7 }qäd|dfS )zgReturn (unescaped_url, new_pos)

    The given pos is assumed to be just after the '(' of 'url('.

    Nr   r   rg   )r+   z
EOF in URLr&   r,   r   r1   r2   z "'( z\)r!   )zbad-urlzbad URL token)r:   r=   rN   r>   ri   rh   )rP   rR   r\   rQ   rY   rZ   rj   rk   rb   rb   rc   rB   :  sn    




ÿ






rB   c                 C   s  t | ƒ}|}t|d |ƒ}||k r8| | dkr8|d7 }q| ||… }|}||k rf| | dkrf|d7 }qH|| }|rŒ|d|  }|d|  }nr|d |k rú| | dkrú| |d  dkrú|d7 }|}t|d |ƒ}||k rì| | dkrì|d7 }qÎ| ||… }n|}t|dƒt|dƒ|fS )	zdReturn (range, new_pos)

    The given pos is assume to be just after the '+' of 'U+' or 'u+'.

    é   Z0123456789abcdefABCDEFr   ú?ÚFÚ0rf   rm   )r:   ÚminrK   )rP   rR   rQ   rk   Zmax_posr[   Zquestion_marksrG   rb   rb   rc   r?   ‡  s0    

ÿ
r?   )F)$Úrerp   Úwebencodingsr   Úastr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   Ú
serializerr   r   ÚcompilerE   rn   rd   re   r@   rA   rN   rh   rB   r?   rb   rb   rb   rc   Ú<module>   s   L


 <	%M