U
    \Sh                     @  s  d Z ddlmZ ddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZmZ ddlmZ ee Z!G dd deZ"G dd deZ#dddddZ$dS )z+The image collector for sphinx.environment.    )annotationsN)glob)path)Any)nodes)Node)relative_path)addnodes)Sphinx)BuildEnvironment)EnvironmentCollector)__)logging)get_image_filename_for_languagesearch_image_for_language)guess_mimetypec                   @  sb   e Zd ZdZdddddddZddd	ddd
ddZddddddZddddddddZdS )ImageCollectorz-Image files collector for sphinx.environment.r
   r   strNoneappenvdocnamereturnc                 C  s   |j | d S N)images	purge_docselfr   r   r    r   V/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/environment/collectors/asset.py	clear_doc   s    zImageCollector.clear_docset[str]r   r   docnamesotherr   c                 C  s   |j ||j  d S r   )r   merge_otherr   r   r   r$   r%   r   r   r    r&       s    zImageCollector.merge_othernodes.documentr   doctreer   c                 C  sb  |j j}|tjD ]F}i }||d< |d }|drB||d< q|ddkrZ||d< q|tj	d r|j 
||\}}||d< t||j }	|j 
|	|\}
}| |j ||| | |j ||| n.t||j }|j 
||\|d< }
|d |d< | D ]\}|j j| | tt|j|tjsJtjtd| |d	d
d q|j j|| qqdS )zProcess and rewrite image URIs.
candidatesurizdata:?://*zimage file not readable: %simagenot_readablelocationtypesubtypeN)r   r   findallr   r1   
startswithfindendswithosextsep
relfn2pathr   collect_candidatesr   valuesdependenciesaddaccessr   joinsrcdirR_OKloggerwarningr   r   add_file)r   r   r*   r   noder+   ZimguriZrel_imgpathZfull_imgpathZi18n_imguri_Zfull_i18n_imgpathimgpathr   r   r    process_doc$   s>    
  zImageCollector.process_doczdict[str, str]r   )r   rK   r+   rI   r   c                 C  s   i }t |D ]}tt|jd|}zLt|}|d krTt|\}	}
d|
dd   }||krn||g | W q t	k
r } z"t
jtd||f |ddd W 5 d }~X Y qX q| D ]\}}t|tdd	 ||< qd S )
Ndummyzimage/x-   zimage file %s not readable: %sr1   r2   r3   )keyr   )r   r   r   rC   rD   r   splitext
setdefaultappendOSErrorrF   rG   r   itemssortedlen)r   r   rK   r+   rI   ZglobbedfilenameZnew_imgpathmimetypebasenamesuffixerrrO   filesr   r   r    r>   W   s(      z!ImageCollector.collect_candidatesN)__name__
__module____qualname____doc__r!   r&   rL   r>   r   r   r   r    r      s
   3r   c                   @  sL   e Zd ZdZdddddddZddd	ddd
ddZddddddZdS )DownloadFileCollectorz0Download files collector for sphinx.environment.r
   r   r   r   r   c                 C  s   |j | d S r   )dlfilesr   r   r   r   r    r!   n   s    zDownloadFileCollector.clear_docr"   r#   c                 C  s   |j ||j  d S r   )rb   r&   r'   r   r   r    r&   q   s    z!DownloadFileCollector.merge_otherr(   r)   c                 C  s   | tjD ]}|d }d|kr*||d< q|j||jj\}}|jj|jj | t	|tj
stjtd| |ddd q|jj|jj||d< qd	S )
z!Process downloadable file paths. Z	reftargetr.   Zrefurizdownload file not readable: %sdownloadr2   r3   rW   N)r7   r	   Zdownload_referencer   r=   r   r@   rA   r;   rB   rE   rF   rG   r   rb   rH   )r   r   r*   rI   Z
targetnameZrel_filenamerW   r   r   r    rL   u   s    
  z!DownloadFileCollector.process_docN)r]   r^   r_   r`   r!   r&   rL   r   r   r   r    ra   k   s   ra   r
   zdict[str, Any])r   r   c                 C  s    |  t |  t ddddS )NbuiltinT)versionZparallel_read_safeZparallel_write_safe)Zadd_env_collectorr   ra   )r   r   r   r    setup   s    

rf   )%r`   
__future__r   r;   r   r   typingr   Zdocutilsr   Zdocutils.nodesr   Zdocutils.utilsr   Zsphinxr	   Zsphinx.applicationr
   Zsphinx.environmentr   Zsphinx.environment.collectorsr   Zsphinx.localer   Zsphinx.utilr   Zsphinx.util.i18nr   r   Zsphinx.util.imagesr   	getLoggerr]   rF   r   ra   rf   r   r   r   r    <module>   s(   
Q