o
    Ni                     @  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mZ ddlmZ erjddlmZ ddlmZ ddl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Z&dS )z+The image collector for sphinx.environment.    )annotationsN)glob)path)TYPE_CHECKING)nodes)relative_path)addnodes)EnvironmentCollector)__)logging)get_image_filename_for_languagesearch_image_for_language)guess_mimetype)Node)Sphinx)BuildEnvironment)ExtensionMetadatac                   @  s8   e Zd ZdZdd
dZdddZdddZd ddZdS )!ImageCollectorz-Image files collector for sphinx.environment.appr   envr   docnamestrreturnNonec                 C     |j | d S N)images	purge_docselfr   r   r    r    W/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/environment/collectors/asset.py	clear_doc!      zImageCollector.clear_docdocnamesset[str]otherc                 C     |j ||j  d S r   )r   merge_otherr   r   r   r$   r&   r    r    r!   r(   $      zImageCollector.merge_otherdoctreenodes.documentc              	   C  sx  |j j}|tjD ]}i }||d< |d }|dr ||d< q
|ddkr,||d< q
|tj	d rc|j 
||\}}||d< t||j }	|j 
|	|\}
}| |j ||| | |j ||| n%t||j }|d }|j 
||\|d< }
|d |d< |d |kr||d< | D ],}|j j| | tt|j|tjstjtd	||d
dd q|j j|| qq
dS )zProcess and rewrite image URIs.
candidatesurizdata:?://*original_urizimage file not readable: %simagenot_readablelocationtypesubtypeN)r   r   findallr   r4   
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-   imgurirel_imgpathfull_imgpathi18n_imguri_full_i18n_imgpathr3   imgpathr    r    r!   process_doc-   sL   
zImageCollector.process_docrS   r-   dict[str, str]rL   r   c                 C  s   i }t |D ]Q}tt|jd|}z&t|}|d u r*t|\}	}
d|
dd   }||vr7||g | W q t	yW } zt
jtd|||ddd W Y d }~qd }~ww | D ]\}}t|td||< q\d S )	Ndummyzimage/x-   zimage file %s not readable: %sr4   r5   r6   )key)r   r   r   rF   rG   r   splitext
setdefaultappendOSErrorrI   rJ   r
   itemsminlen)r   r   rS   r-   rL   globbedfilenamenew_imgpathmimetypebasenamesuffixerrrX   filesr    r    r!   rA   h   s2   	z!ImageCollector.collect_candidatesNr   r   r   r   r   r   r   r   
r   r   r   r   r$   r%   r&   r   r   r   r   r   r+   r,   r   r   )
r   r   rS   r   r-   rU   rL   r   r   r   )__name__
__module____qualname____doc__r"   r(   rT   rA   r    r    r    r!   r      s    


	;r   c                   @  s.   e Zd ZdZdd
dZdddZdddZdS )DownloadFileCollectorz0Download files collector for sphinx.environment.r   r   r   r   r   r   r   r   c                 C  r   r   )dlfilesr   r   r    r    r!   r"      r#   zDownloadFileCollector.clear_docr$   r%   r&   c                 C  r'   r   )rp   r(   r)   r    r    r!   r(      r*   z!DownloadFileCollector.merge_otherr+   r,   c                 C  s   | tjD ]E}|d }d|v r||d< q|j||jj\}}|jj|jj | t	|tj
s?tjtd||ddd q|jj|jj||d< qd	S )
z Process downloadable file paths.	reftargetr0   refurizdownload file not readable: %sdownloadr5   r6   ra   N)r:   r   download_referencer   r@   r   rC   rD   r>   rE   rH   rI   rJ   r
   rp   rK   )r   r   r+   rL   
targetnamerel_filenamera   r    r    r!   rT      s&   

z!DownloadFileCollector.process_docNrh   ri   rj   )rk   rl   rm   rn   r"   r(   rT   r    r    r    r!   ro      s
    

	ro   r   r   r   r   c                 C  s    |  t |  t ddddS )NbuiltinT)versionparallel_read_safeparallel_write_safe)add_env_collectorr   ro   )r   r    r    r!   setup   s   

r|   )r   r   r   r   )'rn   
__future__r   r>   r   r   typingr   docutilsr   docutils.utilsr   sphinxr   sphinx.environment.collectorsr	   sphinx.localer
   sphinx.utilr   sphinx.util.i18nr   r   sphinx.util.imagesr   docutils.nodesr   sphinx.applicationr   sphinx.environmentr   sphinx.util.typingr   	getLoggerrk   rI   r   ro   r|   r    r    r    r!   <module>   s.    
h&