
    R"f                         U 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
 ddlmZ e G d d             Z G d d	e      Zi d
dddddddddddd ej                   dej"                        ddddddddd  ej                   d!ej"                        d" ej                   ej$                  ej&                  z   ej"                  ej(                  z        d#d$d%d&d'd(d)d*d+d,d-d.Zd/ed0<    G d1 d2      Zy)3    N)	dataclass)DictIteratorNoReturnOptionalTupleUnion   )	Specifierc                   ,    e Zd ZU eed<   eed<   eed<   y)TokennametextpositionN)__name__
__module____qualname__str__annotations__int     6/usr/lib/python3/dist-packages/packaging/_tokenizer.pyr   r   	   s    
I
IMr   r   c                   J     e Zd ZdZdededeeef   ddf fdZdefdZ xZ	S )	ParserSyntaxErrorz7The provided source text could not be parsed correctly.messagesourcespanreturnNc                L    || _         || _        || _        t        |           y )N)r   r   r   super__init__)selfr   r   r   	__class__s       r   r"   zParserSyntaxError.__init__   s%     	r   c                     d| j                   d   z  d| j                   d   | j                   d   z
  z  z   dz   }dj                  | j                  | j                  |g      S )N r   ~r
   ^z
    )r   joinr   r   )r#   markers     r   __str__zParserSyntaxError.__str__    sV    tyy|#cTYYq\DIIaL-H&IICO}}dllDKK@AAr   )
r   r   r   __doc__r   r   r   r"   r+   __classcell__)r$   s   @r   r   r      sG    A 	
 CHo 
B Br   r   LEFT_PARENTHESISz\(RIGHT_PARENTHESISz\)LEFT_BRACKETz\[RIGHT_BRACKETz\]	SEMICOLON;COMMA,QUOTED_STRINGzk
            (
                ('[^']*')
                |
                ("[^"]*")
            )
        OPz(===|==|~=|!=|<=|>=|<|>)BOOLOPz\b(or|and)\bINz\bin\bNOTz\bnot\bVARIABLEa  
            \b(
                python_version
                |python_full_version
                |os[._]name
                |sys[._]platform
                |platform_(release|system)
                |platform[._](version|machine|python_implementation)
                |python_implementation
                |implementation_(name|version)
                |extra
            )\b
        	SPECIFIERATz\@URLz[^ \t]+
IDENTIFIERz\b[a-zA-Z0-9][a-zA-Z0-9._-]*\bVERSION_PREFIX_TRAILz\.\*z\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*z[ \t]+$)VERSION_LOCAL_LABEL_TRAILWSEND&Dict[str, Union[str, re.Pattern[str]]]DEFAULT_RULESc            
           e Zd ZdZdeddddfdZdeddfd	Zd
ddededefdZdedede	fdZ
de	fdZddddedee   dee   defdZej"                  dedededed   fd       Zy)	TokenizerzContext-sensitive token parsing.

    Provides methods to examine the input stream to check whether the next token
    matches.
    r   rulesrE   r   Nc                    || _         |j                         D ci c]  \  }}|t        j                  |       c}}| _        d | _        d| _        y c c}}w )Nr   )r   itemsrecompilerI   
next_tokenr   )r#   r   rI   r   patterns        r   r"   zTokenizer.__init___   sO     ;@;;=2
*7$D"**W%%2

 ,0	2
s    Ar   c                 H    | j                  |      r| j                          yy)z8Move beyond provided token name, if at current position.N)checkread)r#   r   s     r   consumezTokenizer.consumel   s    ::dIIK r   F)peekrT   c                ,   | j                   J d|d| j                          || j                  v s
J d|       | j                  |   }|j                  | j                  | j                        }|y|st        ||d   | j                        | _         y)zCheck whether the next token has the provided name.

        By default, if the check succeeds, the token *must* be read before
        another check. If `peek` is set to `True`, the token is not loaded and
        would need to be checked again.
        zCannot check for z, already have zUnknown token name: Fr   T)rN   rI   matchr   r   r   )r#   r   rT   
expressionrV   s        r   rQ   zTokenizer.checkq   s     OO#	Jthodoo5HI	J#tzz!B%9$#BB!ZZ%
  dmm<=#D%(DMMBDOr   expectedc                l    | j                  |      s| j                  d|       | j                         S )zsExpect a certain token name next, failing with a syntax error otherwise.

        The token is *not* read.
        z	Expected )rQ   raise_syntax_errorrR   )r#   r   rX   s      r   expectzTokenizer.expect   s4    
 zz$))IhZ*@AAyy{r   c                     | j                   }|J | xj                  t        |j                        z  c_        d| _         |S )z%Consume the next token and return it.N)rN   r   lenr   )r#   tokens     r   rR   zTokenizer.read   s9       UZZ(r   )
span_startspan_endr   r_   r`   c                r    || j                   n||| j                   n|f}t        || j                  |      )z.Raise ParserSyntaxError at the given position.)r   r   )r   r   r   )r#   r   r_   r`   r   s        r   rZ   zTokenizer.raise_syntax_error   sC     (/DMMZ%-DMM8
  ;;
 	
r   
open_tokenclose_tokenaroundc             #      K   | j                  |      r| j                  }| j                          nd }d  |y | j                  |      s| j                  d| d| d| |       | j                          y w)NzExpected matching z for z, after )r_   )rQ   r   rR   rZ   )r#   rb   rc   rd   open_positions        r   enclosing_tokenszTokenizer.enclosing_tokens   sz      ::j! MMMIIK M zz+&##$[Mzl(6(S( $ 
 			s   A6A8)r   r   r   r,   r   r"   rS   boolrQ   r   r[   rR   r   r   r   rZ   
contextlibcontextmanagerr   rg   r   r   r   rH   rH   X   s     8	
 
C D 
 05 #   *3 S U e  %)"&

 SM	

 3-
 

$ ,/<?	$ r   rH   )ri   rL   dataclassesr   typingr   r   r   r   r   r	   
specifiersr   r   	Exceptionr   rM   VERBOSE_operator_regex_str_version_regex_str
IGNORECASErF   r   rH   r   r   r   <module>rs      s    	 ! C C !   B	 B*0;0;0; E0; U	0;
 0; T0; ZRZZ	 	

	0;" 	
%#0;$ o%0;& 	)'0;( 
:)0;* 


	 	

+0;J %%	(D(DD


R]]"K0;R 	%S0;T 
:U0;V 3W0;X GY0;Z "D
_0;7 0fh hr   