B
    īq\^  ć               @   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.
    z^[A-Za-z_][A-Za-z0-9_\.\-]*$N)ŚreŚmatch)ŚID© r   ś6lib/python3.7/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.
    z^[A-Za-z_][A-Za-z0-9_\.\-]*$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 ]?$N)r   r   )Śtokenr   r   r   Ścheck_token(   s    r   c             C   s<   d  dd tddD ”}d |”}t 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>8   s    z*check_mime_content_type.<locals>.<genexpr>r   é    z[^()<>@,;:\"/[\]?= {}]+z(?P<type>{})/(?P<subtype>{})$N)ŚjoinŚrangeŚformatr   r   )Zcontent_typeZctrlsZtoken_regexr   r   r   Ścheck_mime_content_type3   s
    

r   c             C   s>   t  d| ”dkrdS ytj | ” W n tk
r8   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ŚparseZurlparseŚ	Exception)Zurir   r   r   Ścheck_anyuri?   s    
r   )
Ś__doc__r   Zurllib.parser   r   r   Z_token_regexr   r   r   r   r   r   r   Ś<module>   s   