o
    >e<                     @   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   s  |  dd dd dd dd} t| }d }}d}d	}g  }}d
}	g }
||k r| d||}|d	krC|d| d|| 7 }|}|| }|}| | }|dv ru|d7 }| d|re|d7 }| d|s[| || }|t||| q&|dv r|d |k r| |d  dkr| |d  dv rt| |d \}}}|t|||| q&| d|r|t	||d |d7 }q&t
| |rgt| |\}}| d|s|t||| q&|d7 }t|dkrO|}| d|r|d7 }| d|s||ks| | dvrOt| |\}}}|d
ur=dt|}|d
ur3|d }|dkr&|d
d }n|dks-J |d
d	 }|t|||| |d
urN|t||g|R   q&g }|t|||| |
||	f d}	|}q&t| |}|r| }| || }t|}t| st|nd
}||k rt
| |rt| |\}}|t|||||| n| d|r|d7 }|t||||| n|t||||| n|dkr|d7 }||k rt
| |rt| |\}}|t||| n|t	||d n|dkrP|d7 }||k rE| | dv s-t| | dks-| | d krE| d!|sEt
| |}t| |\}}|t |||| nu|t	||d nj|d"krqg }|t!||| |
||	f d#}	|}|d7 }nI|d$krg }|t"||| |
||	f d%}	|}|d7 }n(|dkrg }|t#||| |
||	f d}	|}|d7 }n||	kr|
$ \}}	|d7 }n|d&v r|t|||d'|  |d7 }n|dv rt%| |\}}}|d
urd(t&|}|d
ur|d
d	 }|t'|||| |d
ur|t||g|R   n| d)|rY| (d*|d }|d	krB|s?|t)||| |d d
  	 |S |sT|t)||| |d |  |d7 }na| d+|rn|t	||d+ |d,7 }nL| d-|r|t	||d- |d7 }n7|d.v r|d7 }| d/|r|d7 }|t	|||d/  n|t	||| n|t	||| |d7 }||k s+|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   	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   r   r   r   
_NUMBER_REmatchendfloatanygroupsintr   r   r   r   ordr	   r   r   r   pop_consume_quoted_stringr   r   findr   )cssskip_commentslengthtoken_start_posposlinelast_newlineroottokensend_charstacknewlinecolumncvaluestartrG   url_poserrorrepr	error_key	argumentsrF   repr_	int_valueunitis_identifiercontent rj   S/var/www/html/humari/django-venv/lib/python3.10/site-packages/tinycss2/tokenizer.pyparse_component_value_list   sT  

$




























  !rl   c                 C   s   | | }|dv pt |dkS )z>Return true if the given character is a name-start code point.5abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_r1   )rL   )rP   rT   r]   rj   rj   rk   _is_name_start   s   
rn   c                 C   s|   t | |rdS | | dkr/|d7 }|t| k r"t | |p!| | dkp.| d|o.| d| S | | dkr<| d| S dS )zCReturn True if the given position is the start of a CSS identifier.T-r   r2   r3   F)rn   r;   r>   )rP   rT   rj   rj   rk   rA      s   
rA   c                 C   s   g }t | }|}||k rH| | }|dv st|dkr|d7 }n%|dkrC| d|sC|| ||  t| |d \}}|| |}nn||k s|| ||  d||fS )ztReturn (unescaped_value, new_pos).

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

    z@abcdefghijklmnopqrstuvwxyz-_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZr1   r   r2   r3    )r;   rL   r>   r?   _consume_escapejoin)rP   rT   chunksrR   	start_posr]   rj   rj   rk   rB      s"   

rB   c                 C   s
  d}| | }|dv sJ |d7 }g }t | }|}||k rr| | }||kr2|| ||  |d7 }nK|dkra|| ||  |d7 }||k r^| | dkrR|d7 }nt| |\}}|| |}n|dkrjd|dfS |d7 }||k sd}|| ||  d|||fS )	z"Return (unescaped_value, new_pos).Nr'   r   r2   r   )z
bad-stringzBad string token)r*   zEOF in stringrp   )r;   r?   rq   rr   )rP   rT   ra   quoters   rR   rt   r]   rj   rj   rk   rN     s:   


rN   c                 C   sr   t | |}|r't|dd}d|  k rtjkr!n nt|nd| fS |t| k r5| | |d fS d|fS )ztReturn (unescaped_char, new_pos).

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

    r      r   r   )	_HEX_ESCAPE_RErF   rK   groupsys
maxunicodechrrG   r;   )rP   rT   	hex_match	codepointrj   rj   rk   rq   '  s   $rq   c                 C   s.  d}t | }| d|r|d7 }| d|s||krd|dfS | | }|dv r0t| |\}}}n|dkr;d|d |fS g }|}	 ||krU|| ||  d||dfS | | }|dkrr|| ||  |d7 }d|||fS |dv r|| ||  d|}|d7 }n4|d	kr| d
|s|| ||  t| |d \}}|| |}n|dv rd}|d7 }n|d7 }q@|dur| d|r|d7 }| d|s||k r| | dkr||d |fS n|du rd}|||fS ||k r| d|r|d7 }n| | dkr
|d7 }n|d7 }||k sd|dfS )zgReturn (unescaped_url, new_pos)

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

    Nr   r   rp   )r,   z
EOF in URLr'   r-   r   r2   r3   z "'( z\)r"   )zbad-urlzbad URL token)r;   r>   rN   r?   rr   rq   )rP   rT   ra   rR   r]   r^   rs   rt   rj   rj   rk   rC   :  sz   


 



rC   c                 C   sJ  t | }|}t|d |}||k r%| | dv r%|d7 }||k r%| | dv s| || }|}||k rE| | dkrE|d7 }||k rE| | dks7|| }|rX|d|  }|d|  }nB|d |k r| | dkr| |d  dv r|d7 }|}t|d |}||k r| | dv r|d7 }||k r| | dv s| || }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+'.

       0123456789abcdefABCDEFr   ?F0ro   rv   )r;   minrK   )rP   rT   rR   rt   max_posr_   question_marksrG   rj   rj   rk   r@     s4   r@   )F)$rery   webencodingsr   astr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   
serializerr   r   compilerE   rw   rl   rn   rA   rB   rN   rq   rC   r@   rj   rj   rj   rk   <module>   s     L


 <	%M