U
    e»{j“  ã                   @   sD   d Z ddlZddlZdd„ Zdd„ ZdZdd	„ Zd
d„ Zdd„ Z	dS )z^
A collection of functions for checking various XML-related strings for
standards compliance.
é    Nc                 C   s   t  d| ¡dk	S )z3
    Returns `True` if *ID* is a valid XML ID.
    ú^[A-Za-z_][A-Za-z0-9_\.\-]*$N©ÚreÚmatch)ÚID© r   úV/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/utils/xml/check.pyÚcheck_id   s    r	   c                 C   sl   t  d| ¡r| S t| ƒrh| }t|ƒr4t  d|d ¡r<d| }t  dd|d ¡t  dd|dd… ¡ }|S d	S )
z¾
    Given an arbitrary string, create one that can be used as an xml
    id.  This is rather simplistic at the moment, since it just
    replaces non-valid characters with underscores.
    r   z^[^A-Za-z_]$r   Ú_z
[^A-Za-z_]z[^A-Za-z0-9_\.\-]é   NÚ )r   r   ÚlenÚsub)r   Z	correctedr   r   r   Úfix_id   s      
ÿr   z$(?![\r\l\t ])[^\r\l\t]*(?![\r\l\t ])c                 C   s   | dkpt  d| ¡dk	S )z^
    Returns `True` if *token* is a valid XML token, as defined by XML
    Schema Part 2.
    r   z0[^\r\n\t ]?([^\r\n\t ]| [^\r\n\t ])*[^\r\n\t ]?$Nr   )Útokenr   r   r   Úcheck_token)   s
    
ÿþr   c                 C   sD   d  dd„ tddƒD ƒ¡}d|› d�}t d|› d	|› d
�| ¡dk	S )z}
    Returns `True` if *content_type* is a valid MIME content type
    (syntactically at least), as defined by RFC 2045.
    r   c                 s   s   | ]}t |ƒV  qd S )N)Úchr)Ú.0Úxr   r   r   Ú	<genexpr>:   s     z*check_mime_content_type.<locals>.<genexpr>r   é    z[^()<>@,;:\"/[\]?= z]+z	(?P<type>z)/(?P<subtype>z)$N)ÚjoinÚranger   r   )Úcontent_typeZctrlsZtoken_regexr   r   r   Úcheck_mime_content_type5   s    ÿÿr   c                 C   s@   t  d| ¡dkrdS ztj | ¡ W n tk
r:   Y dS X dS )zH
    Returns `True` if *uri* is a valid URI as defined in RFC 2396.
    zl(([a-zA-Z][0-9a-zA-Z+\-\.]*:)?/{0,2}[0-9a-zA-Z;/?:@&=+$\.\-_!~*'()%]+)?(#[0-9a-zA-Z;/?:@&=+$\.\-_!~*'()%]+)?NFT)r   r   ÚurllibÚparseÚurlparseÚ	Exception)Úurir   r   r   Úcheck_anyuriB   s    ûùÿ
r    )
Ú__doc__r   Úurllib.parser   r	   r   Z_token_regexr   r   r    r   r   r   r   Ú<module>   s   