
    "h'                       d Z ddlmZ ddlZddlmZmZmZmZ ddl	m
Z
mZ  G d d      Z G d	 d
e      Z G d de      Z G d de      Zeeef   Zeeeef   Zeeed   f   Zeedeef      Z G d de      Z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*dZd+dZd+dZ d,dZ!d-dZ"d.d Z#d/d!Z$d0d"Z%d1d#Z&y)2zHandwritten parser of dependency specifiers.

The docstring for each __parse_* function contains EBNF-inspired grammar representing
the implementation.
    )annotationsN)
NamedTupleSequenceTupleUnion   )DEFAULT_RULES	Tokenizerc                  ,    e Zd ZddZddZddZddZy)Nodec                    || _         y Nvalue)selfr   s     S/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/packaging/_parser.py__init__zNode.__init__   s	    
    c                    | j                   S r   r   r   s    r   __str__zNode.__str__   s    zzr   c                <    d| j                   j                   d|  dS )N<z('z')>)	__class____name__r   s    r   __repr__zNode.__repr__   s"    4>>**+2dV377r   c                    t         r   )NotImplementedErrorr   s    r   	serializezNode.serialize   s    !!r   N)r   strreturnNoner!   r    )r   
__module____qualname__r   r   r   r    r   r   r   r      s    8"r   r   c                      e Zd ZddZy)Variablec                    t        |       S r   r    r   s    r   r   zVariable.serialize       4yr   Nr#   r   r$   r%   r   r&   r   r   r(   r(          r   r(   c                      e Zd ZddZy)Valuec                    d|  dS )N"r&   r   s    r   r   zValue.serialize#   s    4&{r   Nr#   r,   r&   r   r   r/   r/   "   s    r   r/   c                      e Zd ZddZy)Opc                    t        |       S r   r*   r   s    r   r   zOp.serialize(   r+   r   Nr#   r,   r&   r   r   r3   r3   '   r-   r   r3   
MarkerAtom
MarkerListc                  @    e Zd ZU ded<   ded<   ded<   ded<   ded<   y	)
ParsedRequirementr    nameurl	list[str]extras	specifierzMarkerList | NonemarkerN)r   r$   r%   __annotations__r&   r   r   r8   r8   2   s    
I	HNr   r8   c                6    t        t        | t                    S N)rules)_parse_requirementr
   r	   sources    r   parse_requirementrF   =       imDEEr   c                   | j                  d       | j                  dd      }|j                  }| j                  d       t        |       }| j                  d       t	        |       \  }}}| j                  dd       t        |||||      S )zI
    requirement = WS? IDENTIFIER WS? extras WS? requirement_details
    WS
IDENTIFIERz1package name at the start of dependency specifierexpectedENDzend of dependency specifier)consumeexpecttext_parse_extras_parse_requirement_detailsr8   )	tokenizer
name_tokenr9   r<   r:   r=   r>   s          r   rC   rC   A   s     d!!R " J ??Dd9%Fd7	BCFU%BCT3	6BBr   c                   d}d}d}| j                  d      r| j                          | j                  d       | j                  }| j	                  dd      j
                  }| j                  dd	
      r|||fS | j	                  dd       | j                  dd	
      r|||fS t        | |d      }nR| j                  }t        |       }| j                  d       | j                  dd	
      r|||fS t        | ||rdnd      }|||fS )z~
    requirement_details = AT URL (WS requirement_marker?)?
                        | specifier WS? (requirement_marker)?
     NATrI   URLzURL after @rK   rM   Tpeekzwhitespace after URLzURL and whitespace)
span_startafterversion specifierz#name and no valid version specifier)checkreadrN   positionrO   rP   _parse_requirement_marker_parse_specifier)rS   r=   r:   r>   	url_startspecifier_starts         r   rR   rR   V   s-    I
CFt$&&	u}=BB??5t?,F++(>? ??5t?,F++*)3G
 $,,$Y/	$??5t?,F++*&  $:
 F##r   c                   | j                  d      s| j                  d| d|       | j                          t        |       }| j	                  d       |S )z3
    requirement_marker = SEMICOLON marker WS?
    	SEMICOLONz!Expected end or semicolon (after ))r[   rI   )r^   raise_syntax_errorr_   _parse_markerrN   )rS   r[   r\   r>   s       r   ra   ra      s[     ??;'$$/wa8! 	% 	
 NN9%FdMr   c                    | j                  dd      sg S | j                  ddd      5  | j                  d       t        |       }| j                  d       ddd       |S # 1 sw Y   S xY w)	zG
    extras = (LEFT_BRACKET wsp* extras_list? wsp* RIGHT_BRACKET)?
    LEFT_BRACKETTrY   RIGHT_BRACKETr<   aroundrI   N)r^   enclosing_tokensrN   _parse_extras_list)rS   r<   s     r   rQ   rQ      s{     ??>?5			#	# 
$ 
  
 	$#I.$  M  Ms   .A""A,c                   g }| j                  d      s|S |j                  | j                         j                         	 | j	                  d       | j                  dd      r| j                  d       n| j                  d      s	 |S | j                          | j	                  d       | j                  dd      }|j                  |j                         )	z>
    extras_list = identifier (wsp* ',' wsp* identifier)*
    rJ   TrI   rY   z"Expected comma between extra namesCOMMAzextra name after commarK   )r^   appendr_   rP   rN   rh   rO   )rS   r<   extra_tokens      r   rp   rp      s     F??<(
MM).."''(
$??<d?3(()MN) M 	$&&|>V&Wk&&' r   c                    | j                  ddd      5  | j                  d       t        |       }| j                  d       ddd       |S # 1 sw Y   S xY w)zr
    specifier = LEFT_PARENTHESIS WS? version_many WS? RIGHT_PARENTHESIS
              | WS? version_many WS?
    LEFT_PARENTHESISRIGHT_PARENTHESISr]   rm   rI   N)ro   rN   _parse_version_many)rS   parsed_specifierss     r   rb   rb      si    
 
	#	#" 
$ 
  
 	$/	:$    s   .AAc                   d}| j                  d      r| j                  }|| j                         j                  z  }| j                  dd      r!| j	                  d|| j                  dz          | j                  d	d      r| j	                  d
|| j                         | j                  d       | j                  d      s	 |S || j                         j                  z  }| j                  d       | j                  d      r|S )z@
    version_many = (SPECIFIER (WS? COMMA WS? SPECIFIER)*)?
    rV   	SPECIFIERVERSION_PREFIX_TRAILTrY   z6.* suffix can only be used with `==` or `!=` operatorsr   )r[   span_endVERSION_LOCAL_LABEL_TRAILz@Local version label can only be used with `==` or `!=` operatorsrI   rr   )r^   r`   r_   rP   rh   rN   )rS   ry   r[   s      r   rx   rx      s    
//+
&''
Y^^-222??1?=((H%"++a/ ) 
 ??6T?B((R%"++ ) 
 	$w'  	Y^^-222$' //+
&* r   c                6    t        t        | t                    S rA   )_parse_full_markerr
   r	   rD   s    r   parse_markerr      rG   r   c                B    t        |       }| j                  dd       |S )NrM   zend of marker expressionrK   )ri   rO   )rS   retvals     r   r   r      s%    9%FU%?@Mr   c                    t        |       g}| j                  d      rJ| j                         }t        |       }|j                  |j                  |f       | j                  d      rJ|S )z4
    marker = marker_atom (BOOLOP marker_atom)+
    BOOLOP)_parse_marker_atomr^   r_   extendrP   )rS   
expressiontoken
expr_rights       r   ri   ri     s`     %Y/0J
//(
# '	2
5::z23 //(
# r   c                4   | j                  d       | j                  dd      rK| j                  ddd      5  | j                  d       t        |       }| j                  d       ddd       nt	        |       }| j                  d       S # 1 sw Y   xY w)	zw
    marker_atom = WS? LEFT_PARENTHESIS WS? marker WS? RIGHT_PARENTHESIS WS?
                | WS? marker_item WS?
    rI   rv   TrY   rw   zmarker expressionrm   N)rN   r^   ro   ri   _parse_marker_item)rS   r>   s     r   r   r     s     d)5''& ( 
 	$
 d#!.y!9Fd#	$ 	$ $I.dM	$ 	$s   .BBc                    | j                  d       t        |       }| j                  d       t        |       }| j                  d       t        |       }| j                  d       |||fS )zG
    marker_item = WS? marker_var WS? marker_op WS? marker_var WS?
    rI   )rN   _parse_marker_var_parse_marker_op)rS   marker_var_left	marker_opmarker_var_rights       r   r   r   (  si     d'	2Od +Id(3dY(899r   c                   | j                  d      r3t        | j                         j                  j	                  dd            S | j                  d      r#t        | j                         j                        S | j                  d       y)z/
    marker_var = VARIABLE | QUOTED_STRING
    VARIABLE._QUOTED_STRINGz+Expected a marker variable or quoted string)messageN)r^   process_env_varr_   rP   replaceprocess_python_strrh   rS   s    r   r   r   6  so     z"y~~/44<<S#FGG		)!).."2"7"788$$A 	% 	
r   c                6    | dv rt        d      S t        |       S )N)platform_python_implementationpython_implementationr   )r(   )env_vars    r   r   r   D  s"    MM899  r   c                T    t        j                  |       }t        t        |            S r   )astliteral_evalr/   r    )
python_strr   s     r   r   r   K  s!    Z(EUr   c                   | j                  d      r| j                          t        d      S | j                  d      rA| j                          | j                  dd       | j                  dd       t        d      S | j                  d	      r#t        | j                         j                        S | j                  d
      S )z&
    marker_op = IN | NOT IN | OP
    INinNOTrI   zwhitespace after 'not'rK   z'in' after 'not'znot inOPzJExpected marker operator, one of <=, <, !=, ==, >=, >, ~=, ===, in, not in)r^   r_   r3   rO   rP   rh   r   s    r   r   r   P  s     t$x		(@A(:;(|		).."''((++X
 	
r   )rE   r    r!   r8   )rS   r
   r!   r8   )rS   r
   r!   z"tuple[str, str, MarkerList | None])rS   r
   r[   intr\   r    r!   r6   )rS   r
   r!   r;   )rS   r
   r!   r    )rE   r    r!   r6   )rS   r
   r!   r6   )rS   r
   r!   r5   )rS   r
   r!   
MarkerItem)rS   r
   r!   	MarkerVar)r   r    r!   r(   )r   r    r!   r/   )rS   r
   r!   r3   )'__doc__
__future__r   r   typingr   r   r   r   
_tokenizerr	   r
   r   r(   r/   r3   r   r   r5   r    r6   r8   rF   rC   rR   ra   rQ   rp   rb   rx   r   r   ri   r   r   r   r   r   r   r&   r   r   <module>r      s*   # 
 5 5 0" "t 
D 
 
 (E/"	9b)+,
:x556
eL*c9:;

 FC*0$0$'0$f),58(&6"@F	,:
!

r   