B
    d                 @   sF  d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	m
Z
mZmZ ddlZyddlmZ W n ek
rx   dZY nX eddd	d
dddgZG dd de
Zeeeeef  dddZd#eee ee dddZd$eee ee dddZeee dddZeee dddZeee	 ee d d!d"Zeje dS )%z#Image utility functions for Sphinx.    N)OrderedDict)path)IOBinaryIO
NamedTupleOptionalTuple)Image)z.gifz	image/gif)z.jpgz
image/jpeg)z.pngz	image/png)z.pdfzapplication/pdf)z.svgzimage/svg+xml)z.svgzzimage/svg+xml)z.aizapplication/illustratorc               @   s&   e Zd ZU eed< eed< eed< dS )DataURImimetypecharsetdataN)__name__
__module____qualname__str__annotations__bytes r   r   _/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/sphinx/util/images.pyr
      s   
r
   )filenamereturnc          	   C   s   y|t | }|d dkrd }n4t|d ts:t|d trRt|d t|d f}|d krztrzt| }|j}W d Q R X |S  tk
r   d S X d S )Nr      )		imagesizeget
isinstancefloatintr	   opensize	Exception)r   r    Zimr   r   r   get_image_size!   s    
r"   )streamdefaultr   c             C   s   t | }|rd| S |S d S )Nzimage/)imghdrwhat)r#   r$   Zimgtyper   r   r   guess_mimetype_for_stream2   s    
r'    )r   r$   r   c          	   C   sN   t |  \}}|tkr"t| S t | rJt| d}t||dS Q R X |S )Nrb)r$   )r   splitextlowermime_suffixesexistsr   r'   )r   r$   _extfr   r   r   guess_mimetype:   s    
r1   )r   r   c             C   s&   x t  D ]\}}| |kr
|S q
W d S )N)r,   items)r   r/   Z	_mimetyper   r   r   get_image_extensionE   s    r3   )urir   c             C   s   |  dsd S d}d}| dd  dd\}}x<|dD ].}|dkrHq:| d	r`|d
d  }q:|r:|}q:W t|}t|||S )Nzdata:z
text/plainzUS-ASCII   ,r   ;base64zcharset=   )
startswithsplitr8   	b64decoder
   )r4   r   r   
propertiesr   propZ
image_datar   r   r   parse_data_uriM   s    


r?   )hr0   r   c             C   s2   yd|    krdS W n tk
r,   Y nX dS )zEAn additional imghdr library helper; test the header is SVG's or not.z<svgzsvg+xmlN)decoder+   UnicodeDecodeError)r@   r0   r   r   r   test_svgb   s    rC   )N)r(   N)__doc__r8   r%   collectionsr   osr   typingr   r   r   r   r   r   ZPILr	   ImportErrorr,   r
   r   r   r"   r'   r1   r3   r?   r   rC   testsappendr   r   r   r   <module>   s4   
