
    ,hn,                       d dl mZ d dlmZ d dlZd dlmZ  ej                  dej                        Z	 ej                  d      Z
 ej                  d      Zd	Zd
ez   Zdez   Zdez   ZdZdZ ej                  d      Z ej                  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      ZddddZy)    )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                  $    e Zd ZddZddZddZy)
MutableURLc                t    d | _         d| _        d | _        d | _        d | _        d | _        d | _        d | _        y )NF)protocolslashesauthporthostnamehashsearchpathname)selfs    N/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/mdurl/_parse.py__init__zMutableURL.__init__j   s:    $(" $	 $	$( $	"&$(    c                0	   d}d}|}|j                         }|sst        |j                  d            dk(  rVt        j	                  |      }|r?|j                  d      | _        |j                  d      r|j                  d      | _        | S d}t        j	                  |      }|r5|j                         }|j                         }|| _
        |t        |      d  }|s|st        j                  d|      r*|j                  d      }|r|r	t        |   s|dd  }d| _        t        |   s|s|rt        |   sd	}	t!        t        t"                    D ]-  }
|j%                  t"        |
         }|d	k7  s!|	d	k(  s||	k  s,|}	/ |	d	k(  r|j'                  d
      }n|j'                  d
d|	dz         }|d	k7  r|d | }||dz   d  }|| _        d	}	t!        t        t*                    D ]-  }
|j%                  t*        |
         }|d	k7  s!|	d	k(  s||	k  s,|}	/ |	d	k(  rt        |      }	|	dkD  r||	dz
     dk(  r|	dz  }	|d |	 }||	d  }| j-                  |       | j.                  xs d| _        | j.                  j                  d      xr | j.                  j1                  d      }|sA| j.                  j                  d      }t        |      }d}
|
|k  r||
   }|s|
dz  }
t2        j                  |      sd}t        |      }d}||k  r*t5        ||         dkD  r|dz  }n|||   z  }|dz  }||k  r*t2        j                  |      s|d |
 }||
dz   d  }t6        j                  |      }|rA|j9                  |j                  d             |j;                  d|j                  d             |rdj=                  |      |z   }dj=                  |      | _        n|
dz  }
|
|k  rt        | j.                        t>        kD  rd| _        |r| j.                  dd	 | _        |j%                  d      }|d	k7  r||d  | _         |d | }|j%                  d      }|d	k7  r||d  | _        |d | }|r|| _        t        |   r| j.                  r| j                  sd| _        | 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,   urlslashes_denote_hostlower_protor%   restsimple_pathprotoproto_matchhost_endihecat_signr&   hostipv6_hostname	hostpartslpartnewpartkjvalid_partsnot_hostbitr)   qms                              r-   parsezMutableURL.parset   s    zz|"s399S>':a'?-33D9K + 1 1! 4$$Q'"-"3"3A"6DK&,,T2%%'E++-K!DME
%D %2995H$+Oood+G*;E*BABx# '&6u&=& H3012 #ii 1! 45"9(b.C(N"H# 2~**S/ **S!X\: "}HW~GaKM* 	 H3~./ #iiq 12"9(b.C(N"H#
 2~t9!|X\ 2c 9A	?D	?D OOD! !MM/RDM !MM44S9 dmm>T>T?M
 ! MM//4		N!e$Q<DQ 077="$I!e"47|c1 !(3 '47 2FA  !e  5;;GD*3BQ-K'0Q'9H"5"<"<T"BC" + 2 2399Q< @ (399Q< @''*xx'9D'@,/HH[,ADM!FA? !eB 4==!$44 "  $a 3 yy~2:TUDI;DYYs^8rs)DK9D DMK(T]]4==DMr/   c                    t         j                  |      }|r.|j                         }|dk7  r
|dd  | _        |d t	        |        }|r|| _        y y )Nr6   r2   )PORT_PATTERNr*   rA   r'   r=   r(   )r,   ra   
port_matchr'   s       r-   rM   zMutableURL.parse_host  sX    !((.
##%Ds{ H	3t9*%D DM r/   N)returnNone)rV   strrW   boolrq   z'MutableURL')ra   rs   rq   rr   )__name__
__module____qualname__r.   rm   rM    r/   r-   r"   r"   i   s    )hT!r/   r"   F)rW   c          
     "   t        | t              r| S t               }|j                  | |       t        |j                  |j
                  |j                  |j                  |j                  |j                  |j                  |j                        S )N)
isinstancer   r"   rm   r$   r%   r&   r'   r(   r)   r*   r+   )rV   rW   us      r-   	url_parser|   )  se    #s
AGGC$%	

AIIqvvqvvqzz166188QZZ r/   )rV   z	URL | strrW   rt   rq   r   )
__future__r   collectionsr   rD   
mdurl._urlr   compile
IGNORECASErB   ro   r?   DELIMSUNWISEAUTO_ESCAPErL   rI   rU   rO   rQ   rt   rF   rG   r"   r|   rx   r/   r-   <module>r      s  T # # 	  2::1G rzz+& !bjj!BC  
5 
)6	1 vo
 +[8#  "

#<=  bjj!@A      "}! }!@ >C r/   