U
    Shn,                     @  s   d dl mZ d dlmZ d dlZd dlmZ ejdejdZ	edZ
edZd	Zd
e Zde Zde ZdZdZedZedZeedddZeeddddddddddd
ZG dd dZddddddddZdS )    )annotations)defaultdictN)URLz^([a-z0-9.+-]+:))flagsz:[0-9]*$z^(//?(?!/)[^?\s]*)(\?[^\s]*)?$)<>"` 
	){}|\^r	   )')%/?;#)r   r   r      z^[+a-z0-9A-Z_-]{0,63}$z^([+a-z0-9A-Z_-]{0,63})(.*)$T)
javascriptzjavascript:)
httphttpsftpgopherfilezhttp:zhttps:zftp:zgopher:zfile:c                   @  s<   e Zd ZddddZddddd	d
ZdddddZdS )
MutableURLNone)returnc                 C  s4   d | _ d| _d | _d | _d | _d | _d | _d | _d S )NF)protocolslashesauthporthostnamehashsearchpathname)self r,   ?/root/rtd-docs/venv/lib/python3.8/site-packages/mdurl/_parse.py__init__j   s    zMutableURL.__init__strboolz'MutableURL'urlslashes_denote_hostr"   c                 C  s6  d}d}|}|  }|s^t|ddkr^t|}|r^|d| _|drZ|d| _| S d}t|}|r| }|	 }|| _
|t|d  }|s|std|r|d}|r|rt| s|dd  }d| _t| s|s|rt| sd	}	tttD ]6}
|t|
 }|d	kr|	d	ks4||	k r|}	q|	d	krR|d
}n|d
d|	d }|d	kr|d | }||d d  }|| _d	}	tttD ]6}
|t|
 }|d	kr|	d	ks||	k r|}	q|	d	krt|}	|	dkr||	d  dkr|	d8 }	|d |	 }||	d  }| | | jp:d| _| jdoV| jd}|s~| jd}t|}d}
|
|k r~||
 }|s|
d7 }
qvt|srd}t|}d}||k rt|| dkr|d7 }n||| 7 }|d7 }qt|sr|d |
 }||
d d  }t|}|rN||d |d|d |rbd|| }d|| _q~|
d7 }
qvt| jtkrd| _|r| jdd	 | _|d}|d	kr||d  | _ |d | }|d}|d	kr||d  | _|d | }|r|| _t| r2| jr2| js2d| _| S )N Fr         z^//[^@/]+@[^@/]+z//T@r   :[].   xr   )!striplensplitSIMPLE_PATH_PATTERNmatchgroupr*   r)   PROTOCOL_PATTERNlowerr#   re
startswithHOSTLESS_PROTOCOLr$   SLASHED_PROTOCOLrangeHOST_ENDING_CHARSfindrfindr%   NON_HOST_CHARS
parse_hostr'   endswithHOSTNAME_PART_PATTERNordHOSTNAME_PART_STARTappendinsertjoinHOSTNAME_MAX_LENr(   )r+   r2   r3   Zlower_protor$   restZsimple_pathprotoZproto_matchZhost_endiZhecZat_signr%   hostZipv6_hostnameZ	hostpartslpartZnewpartkjZvalid_partsZnot_hostbitr(   Zqmr,   r,   r-   parset   s    
















zMutableURL.parse)r\   r"   c                 C  sL   t |}|r>| }|dkr,|dd  | _|d t|  }|rH|| _d S )Nr9   r5   )PORT_PATTERNr)   rD   r&   r@   r'   )r+   r\   Z
port_matchr&   r,   r,   r-   rP     s    
zMutableURL.parse_hostN)__name__
__module____qualname__r.   rb   rP   r,   r,   r,   r-   r    i   s   
 +r    F)r3   z	URL | strr0   r   r1   c             	   C  sF   t | tr| S t }|| | t|j|j|j|j|j|j	|j
|jS )N)
isinstancer   r    rb   r#   r$   r%   r&   r'   r(   r)   r*   )r2   r3   ur,   r,   r-   	url_parse)  s    
       ri   )
__future__r   collectionsr   rG   Z
mdurl._urlr   compile
IGNORECASErE   rc   rB   ZDELIMSZUNWISEZAUTO_ESCAPErO   rL   rX   rR   rT   r0   rI   rJ   r    ri   r,   r,   r,   r-   <module>*   sJ   



 A