B
    '‹d<  ã               @   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   st  |   dd¡  dd¡  dd¡  dd¡} t| ƒ}d }}d}d	}g  }}d
}	g }
x ||k rn|  d||¡}|d	krŠ|d|  d||¡ 7 }|}|| }|}| | }|dkrì|d7 }x|  d|¡rÆ|d7 }q°W | ||… }| t|||ƒ¡ qPnô|dkrV|d |k rV| |d  dkrV| |d  dkrVt| |d ƒ\}}}| t||||ƒ¡ qPnŠ|  d|¡r„| t	||dƒ¡ |d7 }qPn\t
| |ƒràt| |ƒ\}}|  d|¡sÀ| t|||ƒ¡ qP|d7 }t|ƒdkr°|}x|  d|¡rö|d7 }qÜW ||ks| | dkr°t| |ƒ\}}}|d
k	rd t|ƒ¡}|d
k	r||d }|dkrb|d
d… }n|dkspt‚|d
d	… }| t||||ƒ¡ |d
k	rP| t||f|žŽ ¡ qPg }| t||||ƒ¡ |
 ||	f¡ d}	|}qPt | |¡}|r¬| ¡ }| ||… }t|ƒ}t| ¡ ƒs$t|ƒnd
}||k rft
| |ƒrft| |ƒ\}}| t||||||ƒ¡ nD|  d|¡r”|d7 }| t|||||ƒ¡ n| t|||||ƒ¡ qP|dkr
|d7 }||k röt
| |ƒröt| |ƒ\}}| t|||ƒ¡ n| t	||dƒ¡ qP|dkr¤|d7 }||k r| | dksbt | | ƒdksb| | d kr|  d!|¡st
| |ƒ}t| |ƒ\}}| t!||||ƒ¡ n| t	||dƒ¡ qP|d"kräg }| t"|||ƒ¡ |
 ||	f¡ d#}	|}|d7 }qP|d$kr$g }| t#|||ƒ¡ |
 ||	f¡ d%}	|}|d7 }qP|dkrdg }| t$|||ƒ¡ |
 ||	f¡ d}	|}|d7 }qP||	kr„|
 %¡ \}}	|d7 }qP|d&kr°| t|||d'| ƒ¡ |d7 }qP|dkr.t&| |ƒ\}}}|d
k	rd( t'|ƒ¡}|d
k	rø|d
d	… }| t(||||ƒ¡ |d
k	rl| t||f|žŽ ¡ qP|  d)|¡rª|  )d*|d ¡}|d	kr||sz| t*||| |d d
… ƒ¡ P |s | t*||| |d |… ƒ¡ |d7 }qP|  d+|¡rÔ| t	||d+ƒ¡ |d,7 }qP|  d-|¡rþ| t	||d-ƒ¡ |d7 }qP|d.krR|d7 }|  d/|¡r>|d7 }| t	|||d/ ƒ¡ n| t	|||ƒ¡ qP| t	|||ƒ¡ |d7 }qPW |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`.

    ú u   ï¿½z
Ú
úúr   r   éÿÿÿÿNz 
	)ú r   ú	ZUué   ú+z0123456789abcdefABCDEF?z-->é   ú(Úurl)ú"ú'zurl({})zeof-in-stringéþÿÿÿz
eof-in-urlú)ú%ú@ú#z@0123456789abcdefghijklmnopqrstuvwxyz-_ABCDEFGHIJKLMNOPQRSTUVWXYZé   ú\z\
Ú{Ú}ú[ú]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Ústartr@   Zurl_posÚerrorÚreprZ	error_keyÚ	argumentsr?   Úrepr_Z	int_valueÚunitZis_identifierÚcontent© r[   ú_/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/tinycss2/tokenizer.pyÚparse_component_value_list   s:   *

























r]   c             C   s   | | }|dkpt |ƒdkS )z>Return true if the given character is a name-start code point.Z5abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_r*   )rE   )rI   rK   rR   r[   r[   r\   Ú_is_name_startÌ   s    r^   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   r+   z\
F)r^   r3   r6   )rI   rK   r[   r[   r\   r9   Õ   s    
r9   c             C   s®   g }t | ƒ}|}x|||k rŒ| | }|dks6t|ƒdkr@|d7 }q|dkrˆ|  d|¡sˆ| | ||… ¡ t| |d ƒ\}}| |¡ |}qP qW | | ||… ¡ d |¡|fS )ztReturn (unescaped_value, new_pos).

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

    z@abcdefghijklmnopqrstuvwxyz-_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZr*   r   r+   z\
Ú )r3   rE   r6   r7   Ú_consume_escapeÚjoin)rI   rK   ÚchunksrJ   Ú	start_posrR   r[   r[   r\   r:   ç   s     


r:   c             C   s
  d}| | }|dkst ‚|d7 }g }t| ƒ}|}xÈ||k râ| | }||krh| | ||… ¡ |d7 }P q2|dkrÆ| | ||… ¡ |d7 }||k rÀ| | dkr¨|d7 }nt| |ƒ\}}| |¡ |}q2|dkrØd|dfS |d7 }q2W d}| | ||… ¡ d |¡||fS )	z"Return (unescaped_value, new_pos).N)r#   r$   r   r+   r   )z
bad-stringzBad string token)zeof-in-stringzEOF in stringr`   )r=   r3   r7   ra   rb   )rI   rK   rU   Úquoterc   rJ   rd   rR   r[   r[   r\   rG     s8    



rG   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   u   ï¿½N)	Ú_HEX_ESCAPE_REr?   rD   ÚgroupÚsysÚ
maxunicodeÚchrr@   r3   )rI   rK   Z	hex_matchÚ	codepointr[   r[   r\   ra   '  s    $
ra   c             C   sD  d}t | ƒ}x|  d|¡r$|d7 }qW ||kr8d|dfS | | }|dkr\t| |ƒ\}}}n*|dkrrd|d |fS g }|}x||kr¨| | ||… ¡ d |¡|dfS | | }|dkrâ| | ||… ¡ |d7 }d |¡||fS |dkr| | ||… ¡ d |¡}|d7 }P q~|d	kr`|  d
|¡s`| | ||… ¡ t| |d ƒ\}}| |¡ |}q~|dkrzd}|d7 }P q~|d7 }q~W |dk	rîx|  d|¡r¬|d7 }q’W ||k rÖ| | dkrî||d |fS n|dkräd}|||fS xJ||k r8|  d|¡r|d7 }n"| | dkr,|d7 }P n|d7 }qðW d|dfS )zgReturn (unescaped_url, new_pos)

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

    N)r   r   r   r   r`   )z
eof-in-urlz
EOF in URL)r#   r$   r&   z 
	r+   z\
z "'( z\)r   )zbad-urlzbad URL token)r3   r6   rG   r7   rb   ra   )rI   rK   rU   rJ   rR   rS   rc   rd   r[   r[   r\   r;   :  sn    








r;   c             C   s&  t | ƒ}|}t|d |ƒ}x ||k r:| | dkr:|d7 }qW | ||… }|}x ||k rl| | dkrl|d7 }qNW || }|r”|d|  }|d|  }n||d |k r| | dkr| |d  dkr|d7 }|}t|d |ƒ}x ||k rü| | dkrü|d7 }qÞW | ||… }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Ú0r_   rf   )r3   ÚminrD   )rI   rK   rJ   rd   Zmax_posrT   Zquestion_marksr@   r[   r[   r\   r8   ‡  s.    r8   )F)$Úreri   Zwebencodingsr   Úastr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   Ú
serializerr   r   Úcompiler>   rg   r]   r^   r9   r:   rG   ra   r;   r8   r[   r[   r[   r\   Ú<module>   s   L


 <	%M