
    Fe                    (   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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rddlmZ ddlmZ ddlmZ  ej@                  e!      Z" G d de      Z# G d de      Z$ddZ%y)z+The image collector for sphinx.environment.    )annotationsN)glob)path)TYPE_CHECKINGAny)nodes)relative_path)addnodes)EnvironmentCollector)__)logging)get_image_filename_for_languagesearch_image_for_language)guess_mimetype)Node)Sphinx)BuildEnvironmentc                  H    e Zd ZdZddZ	 	 	 	 	 	 ddZd	dZ	 	 	 	 	 	 d
dZy)ImageCollectorz-Image files collector for sphinx.environment.c                :    |j                   j                  |       y N)images	purge_docselfappenvdocnames       E/usr/lib/python3/dist-packages/sphinx/environment/collectors/asset.py	clear_doczImageCollector.clear_doc    s    

W%    c                P    |j                   j                  ||j                          y r   )r   merge_otherr   r   r   docnamesothers        r   r#   zImageCollector.merge_other#   s    

x6r!   c                   |j                   j                  }|j                  t        j                        D ]  }i }||d<   |d   }|j                  d      r||d<   '|j                  d      dk7  r||d<   A|j                  t        j                  dz         r|j                   j                  ||      \  }}||d<   t        ||j                         }	|j                   j                  |	|      \  }
}| j                  |j                   |||       | j                  |j                   |||       nRt        ||j                         }|d   }|j                   j                  ||      \  |d<   }
|d   |d<   |d   |k7  r||d<   |j                         D ]  }|j                   j                  |   j!                  |       t        j"                  t%        j&                  |j(                  |      t        j*                        s&t,        j/                  t1        d	      |z  |d
d       |j                   j2                  j5                  ||         y)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   r/   
startswithfindendswithosextsep
relfn2pathr   collect_candidatesr   valuesdependenciesaddaccessr   joinsrcdirR_OKloggerwarningr   r   add_file)r   r   doctreer   noder(   imgurirel_imgpathfull_imgpathi18n_imguri_full_i18n_imgpathr.   imgpaths                 r   process_doczImageCollector.process_doc'   s   ''//OOEKK0 0	:D
 *,J!+D%[F  )"(
3{{5!R'"(
3ryy3/ -0GG,>,>vw,O)\)U >fcggN'*ww'9'9+w'O$$''1BJPTU''z4P 36377C  $E{!$!3!3FG!DUQ"&u+
3;,.+7D( &,,. :$$W-11':yy3::w!?INN2&C#Dw#N,0w # X''9:U0	:r!   c                   i }t        |      D ]  }t        t        j                  |j                  d      |      }	 t        |      }| t        j                  |      \  }	}
d|
dd  z   }||vr!|j                  |g       j                  |        |j                         D ]  \  }}t        |t              d	   ||<    y # t        $ r1}t        j                  t        d      ||fz  |dd       Y d }~d }~ww xY w)
Ndummyzimage/x-   zimage file %s not readable: %sr/   r0   r1   )keyr   )r   r	   r   rA   rB   r   splitext
setdefaultappendOSErrorrD   rE   r   itemssortedlen)r   r   rO   r(   rH   globbedfilenamenew_imgpathmimetypebasenamesuffixerrrT   filess                 r   r<   z!ImageCollector.collect_candidates]   s   (*W 	TH'		#**g(F(02K	T)(3#'+}}X'>$Hf)F12J6H:-&&x4;;KH	T "--/ 	8JC$U4Q7JsO	8  Tr"BCxQToU(,7N  T TTs   AC  	C:	'C55C:Nr   r   r   r   r   strreturnNone
r   r   r   r   r%   zset[str]r&   r   rf   rg   r   r   rG   znodes.documentrf   rg   )
r   r   rO   re   r(   zdict[str, str]rH   r   rf   rg   )__name__
__module____qualname____doc__r    r#   rP   r<    r!   r   r   r      sJ    7&7&7/?7DH74:l8'58=A8FJ8r!   r   c                  4    e Zd ZdZddZ	 	 	 	 	 	 ddZddZy)	DownloadFileCollectorz0Download files collector for sphinx.environment.c                :    |j                   j                  |       y r   )dlfilesr   r   s       r   r    zDownloadFileCollector.clear_doct   s    g&r!   c                P    |j                   j                  ||j                          y r   )rr   r#   r$   s        r   r#   z!DownloadFileCollector.merge_otherw   s    %--8r!   c                Z   |j                  t        j                        D ]  }|d   }d|v r||d<   |j                  j	                  ||j                  j
                        \  }}|j                  j                  |j                  j
                     j                  |       t        j                  |t        j                        s&t        j                  t        d      |z  |dd       |j                  j                  j                  |j                  j
                  |      |d<    y	)
z!Process downloadable file paths. 	reftargetr+   refurizdownload file not readable: %sdownloadr0   r1   r]   N)r5   r
   download_referencer   r;   r   r>   r?   r9   r@   rC   rD   rE   r   rr   rF   )r   r   rG   rH   
targetnamerel_filenamer]   s          r   rP   z!DownloadFileCollector.process_doc{   s    OOH$?$?@ 	[Dk*J
"!+X),););J)X&h$$SWW__599,Gyy2773NN2&F#G(#R,0z> # [#&77??#;#;CGGOO\#ZZ 	[r!   Nrd   rh   ri   )rj   rk   rl   rm   r    r#   rP   rn   r!   r   rp   rp   q   s-    :'9&9/?9DH9[r!   rp   c                b    | j                  t               | j                  t               ddddS )NbuiltinT)versionparallel_read_safeparallel_write_safe)add_env_collectorr   rp   )r   s    r   setupr      s4    .)/0 "# r!   )r   r   rf   zdict[str, Any])&rm   
__future__r   r9   r   r   typingr   r   docutilsr   docutils.utilsr	   sphinxr
   sphinx.environment.collectorsr   sphinx.localer   sphinx.utilr   sphinx.util.i18nr   r   sphinx.util.imagesr   docutils.nodesr   sphinx.applicationr   sphinx.environmentr   	getLoggerrj   rD   r   rp   r   rn   r!   r   <module>r      sq    1 " 	   %  (  >   W -#)3			8	$Q8) Q8h[0 [4r!   