o
    g¹«j³  ã                   @  sz   d dl mZ d dlZd dlmZmZ ddlmZmZ g d¢Z	dd	d
„Z
e d¡ZedeƒZ	 G dd„ deƒZddd„ZdS )é    )ÚannotationsN)ÚNewTypeÚcasté   )Ú
EXCEPTIONSÚLICENSES)ÚInvalidLicenseExpressionÚNormalizedLicenseExpressionÚcanonicalize_license_expressionÚreturnú	list[str]c                   C  s   t S )N)Ú__all__© r   r   ú[/var/www/html/laksyashrimp/venv/lib/python3.10/site-packages/packaging/licenses/__init__.pyÚ__dir__/   s   r   z^[A-Za-z0-9.-]+$r	   c                   @  s   e Zd ZdZdS )r   a1  Raised when a license-expression string is invalid

    >>> from packaging.licenses import canonicalize_license_expression
    >>> canonicalize_license_expression("invalid")
    Traceback (most recent call last):
        ...
    packaging.licenses.InvalidLicenseExpression: Unknown license: 'invalid'
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   <   s    r   Úraw_license_expressionÚstrc                   s˜  | sd| ›�}t |ƒ‚|  dd¡ dd¡}d‰ ‡ fdd„| ¡ D ƒ}| ¡ }| ¡ }g }|D ]<}|d	vr:| d
¡ q.|dkrD| d¡ q.|dkrP|rP|d dvs\|dkre|re|d dkred| ›�}t |ƒ‚| |¡ q.d |¡}zt|ddƒ W n ty‰   d| ›�}t |ƒd‚w g }d}	t|ƒD ]§\}
}|d	v rÃ|dkr¹|	r°|
d t	|ƒks°||
d  d	v r¹d| ›�}t |ƒ‚| | 
¡ ¡ d}	q’|rä|d dkrä|tvrØd|›�}t |ƒ‚| t| d ¡ d}	q’| d¡rò|dd… }d}n|}d}| d¡�r|t	dƒd… }|�st |¡�sd|›�}t |ƒ‚| || ¡ n|tv�r,d|›�}t |ƒ‚| t| d | ¡ d}	q’d |¡}td| dd¡ dd¡ƒS ) a˜  
    This function takes a valid License-Expression, and returns the normalized
    form of it.

    The return type is typed as :class:`NormalizedLicenseExpression`. This
    allows type checkers to help require that a string has passed through this
    function before use.

    :param str raw_license_expression: The License-Expression to canonicalize.
    :raises InvalidLicenseExpression: If the License-Expression is invalid due to an
        invalid/unknown license identifier or invalid syntax.

    .. doctest::

        >>> from packaging.licenses import canonicalize_license_expression
        >>> canonicalize_license_expression("mit")
        'MIT'
        >>> canonicalize_license_expression("mit and (apache-2.0 or bsd-2-clause)")
        'MIT AND (Apache-2.0 OR BSD-2-Clause)'
        >>> canonicalize_license_expression("(mit")
        Traceback (most recent call last):
          ...
        InvalidLicenseExpression: Invalid license expression: '(mit'
        >>> canonicalize_license_expression("Use-it-after-midnight")
        Traceback (most recent call last):
          ...
        InvalidLicenseExpression: Unknown license: 'Use-it-after-midnight'
    zInvalid license expression: ú(z ( ú)z ) úLicenseRef-c                   s8   i | ]}|  ¡  ˆ   ¡ ¡r|  ¡ d |tˆ ƒd…  “qS )r   N)ÚlowerÚ
startswithÚlen)Ú.0Úref©Úlicenseref_prefixr   r   Ú
<dictcomp>n   s    ýÿz3canonicalize_license_expression.<locals>.<dictcomp>>   ÚorÚandÚwithr   r   ÚFalser$   r"   éÿÿÿÿ>   r"   r#   r   ú Ú ÚevalNFr   ÚWITHzUnknown license exception: Úidú+zlicenseref-zInvalid licenseref: zUnknown license: Tr	   z( z ))r   ÚreplaceÚsplitr   ÚappendÚjoinÚcompileÚSyntaxErrorÚ	enumerater   Úupperr   Úendswithr   Úlicense_ref_allowedÚmatchr   r   )r   ÚmessageÚlicense_expressionÚlicense_refsÚtokensÚpython_tokensÚtokenÚpython_expressionÚnormalized_tokensÚlast_license_startÚindexÚfinal_tokenÚsuffixÚlicense_ref_idÚnormalized_expressionr   r   r   r
   G   s�   

þÿ



þÿ






þr
   )r   r   )r   r   r   r	   )Ú
__future__r   ÚreÚtypingr   r   Ú_spdxr   r   r   r   r1   r6   r   r	   Ú
ValueErrorr   r
   r   r   r   r   Ú<module>   s   


