
    {c                        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,iZd-ed.<    G d/ d0          ZdS )1    N)	dataclass)DictIteratorNoReturnOptionalTupleUnion   )	Specifierc                   .    e Zd ZU eed<   eed<   eed<   dS )TokennametextpositionN)__name__
__module____qualname__str__annotations__int     6/usr/lib/python3/dist-packages/packaging/_tokenizer.pyr   r   	   s+         
III
IIIMMMMMr   r   c                   P     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                r    || _         || _        || _        t                                                       d S )N)r   r   r   super__init__)selfr   r   r   	__class__s       r   r"   zParserSyntaxError.__init__   s6     	r   c                     d| j         d         z  d| j         d         | j         d         z
  z  z   dz   }d                    | j        | j        |g          S )N r   ~r
   ^z
    )r   joinr   r   )r#   markers     r   __str__zParserSyntaxError.__str__    sO    ty|#cTYq\DIaL-H&IICO}}dlDK@AAAr   )
r   r   r   __doc__r   r   r   r"   r+   __classcell__)r$   s   @r   r   r      s        AA 	
 CHo 
     B B B B B B B 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WSz[ \t]+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e         fd            ZdS )	TokenizerzContext-sensitive token parsing.

    Provides methods to examine the input stream to check whether the next token
    matches.
    r   rulesrC   r   Nc                v    || _         d |                                D             | _        d | _        d| _        d S )Nc                 >    i | ]\  }}|t          j        |          S r   )recompile).0r   patterns      r   
<dictcomp>z&Tokenizer.__init__.<locals>.<dictcomp>d   s5     2
 2
 2
*7$D"*W%%2
 2
 2
r   r   )r   itemsrG   
next_tokenr   )r#   r   rG   s      r   r"   zTokenizer.__init__]   sG     2
 2
;@;;==2
 2
 2

 ,0r   r   c                 \    |                      |          r|                                  dS dS )z8Move beyond provided token name, if at current position.N)checkread)r#   r   s     r   consumezTokenizer.consumej   s1    ::d 	IIKKKKK	 	r   F)peekrU   c                   | j         J d|d| j                     || j        v sJ d|            | j        |         }|                    | j        | j                  }|dS |s!t          ||d         | j                  | _         dS )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.
        NzCannot check for z, already have zUnknown token name: Fr   T)rP   rG   matchr   r   r   )r#   r   rU   
expressionrW   s        r   rR   zTokenizer.checko   s     O##ItIIdoII $##tz!!!#B$#B#B!!!Z%
  dm<<=5 	C#D%(DMBBDOtr   expectedc                    |                      |          s|                     d|           |                                 S )zsExpect a certain token name next, failing with a syntax error otherwise.

        The token is *not* read.
        z	Expected )rR   raise_syntax_errorrS   )r#   r   rY   s      r   expectzTokenizer.expect   sD    
 zz$ 	B))*@h*@*@AAAyy{{r   c                 n    | j         }|J | xj        t          |j                  z  c_        d| _         |S )z%Consume the next token and return it.N)rP   r   lenr   )r#   tokens     r   rS   zTokenizer.read   s9       UZ(r   )
span_startspan_endr   r`   ra   c                \    || j         n||| j         n|f}t          || j        |          )z.Raise ParserSyntaxError at the given position.N)r   r   )r   r   r   )r#   r   r`   ra   r   s        r   r[   zTokenizer.raise_syntax_error   sK     (/DMMZ%-DMM8
  ;
 
 
 	
r   
open_tokenclose_tokenc              #   
  K   |                      |          r| j        }|                                  nd }|d uV  |d S |                      |          s|                     d| |           |                                  d S )NzExpected closing )r`   )rR   r   rS   r[   )r#   rc   rd   open_positions       r   enclosing_tokenszTokenizer.enclosing_tokens   s      ::j!! 	! MMIIKKKK M4'''' Fzz+&& 	##1K11( $   
 			r   )r   r   r   r,   r   r"   rT   boolrR   r   r\   rS   r   r   r   r[   
contextlibcontextmanagerr   rg   r   r   r   rF   rF   V   s}         8	
 
   C D    
 05   #      *3 S U    e     %)"&
 
 

 SM	

 3-
 

 
 
 
$ 3 S Xd^      r   rF   )ri   rJ   dataclassesr   typingr   r   r   r   r   r	   
specifiersr   r   	Exceptionr   rK   VERBOSE_operator_regex_str_version_regex_str
IGNORECASErD   r   rF   r   r   r   <module>rs      sp        				 ! ! ! ! ! ! C C C C C C C C C C C C C C C C ! ! ! ! ! !        B B B B B	 B B B*.;.;.; E.; U	.;
 .; T.; ZRZ	 	
	 	.;" 	
%#.;$ o%.;& 	)'.;( 
:).;* 

	 	
 +.;J %	(DD

R]" K.;R 	%S.;T 
:U.;V 3W.;X 	)Y.;Z 
4[.; .;7 . . .bf f f f f f f f f fr   