U
    \ShL                     @  s:  d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	 ddl
Z
erPddlmZ zddlmZ W n ek
rx   dZY nX dd	d
dddddZdd ee D ZG dd deZdddddZe	ddddddZe	d*ddddddZd+ddddd dZddd!d"d#Zdd$d%d&d'Zdddd(d)ZdS ),z#Image utility functions for Sphinx.    )annotationsN)path)TYPE_CHECKING
NamedTupleoverload)PathLike)Imagez	image/gifz
image/jpegz	image/pngzapplication/pdfzimage/svg+xmlzapplication/illustrator)z.gifz.jpgz.pngz.pdfz.svgz.svgzz.aic                 C  s   i | ]\}}||qS  r	   ).0kvr	   r	   E/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/util/images.py
<dictcomp>   s      r   c                   @  s&   e Zd ZU ded< ded< ded< dS )DataURIstrmimetypecharsetbytesdataN)__name__
__module____qualname____annotations__r	   r	   r	   r   r      s   
r   r   ztuple[int, int] | None)filenamereturnc              	   C  s   z~t | }|d dkrd }n4t|d ts:t|d trRt|d t|d f}|d krztrzt| }|j}W 5 Q R X |W S  tk
r   Y 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%   zPathLike[str] | str)r   defaultr   c                 C  s   d S Nr	   r   r&   r	   r	   r   guess_mimetype6   s    r)   Nonez
str | Nonec                 C  s   d S r'   r	   r(   r	   r	   r   r)   ;   s     c                 C  sZ   t | d  }|tkr"t| S t | rVzt| }W n tk
rL   Y n
X d| S |S )Nr   zimage/)r   splitextlowermime_suffixesexists_image_type_from_file
ValueError)r   r&   extZimgtyper	   r	   r   r)   @   s    
)r   r   c                 C  s
   t | S r'   )_suffix_from_mimer   )r   r	   r	   r   get_image_extensionQ   s    r4   zDataURI | None)urir   c                 C  s~   |  dsd S d}d}| dd  dd\}}|dD ].}|dkrFq8| d	r^|d
d  }q8|r8|}q8t|}t|||S )Nzdata:z
text/plainzUS-ASCII   ,r   ;base64zcharset=   )
startswithsplitr9   	b64decoder   )r5   r   r   
propertiesr   propZ
image_datar	   r	   r   parse_data_uriU   s    


r@   c              	   C  s   t | d}|d}W 5 Q R X |dr.dS |dr<dS |drJdS |d	rXd
S d| krhdS |drvdS |dr|dd dkrdS tdd S )Nrb    s   BMZbmp)s   GIF87as   GIF89aZgifs   Zjpegs   PNG

Zpngs   <svgzsvg+xml)s   MMs   IIZtiffs   RIFFr:      s   WEBPZwebpzCould not detect image type!)r"   readr;   r-   r1   )r   fheaderr	   r	   r   r0   j   s"    




r0   )N)r+   N)__doc__
__future__r   r9   osr   typingr   r   r   r   r   ZPILr   ImportErrorr.   reverseditemsr3   r   r%   r)   r4   r@   r0   r	   r	   r	   r   <module>   s@   
	  