a
    1a                     @   s:  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zddlmZ W n eyv   dZY n0 eg d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
    sphinx.util.images
    ~~~~~~~~~~~~~~~~~~

    Image utility functions for Sphinx.

    :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    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.svgimage/svg+xml)z.svgzr
   )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   1lib/python3.9/site-packages/sphinx/util/images.pyr   #   s   
r   )filenamereturnc                 C   s   zt | }|d dkrd }n4t|d ts:t|d trRt|d t|d f}|d u rtrt| }|j}W d    n1 s0    Y  |W S  ty   Y d S 0 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/)imghdrZwhat)r$   r%   Zimgtyper   r   r   guess_mimetype_for_stream:   s    
r'    )r   r%   r   c                 C   sf   t |  \}}|tv r"t| S t | rbt| d}t||dW  d    S 1 sX0    Y  |S )Nrb)r%   )r   splitextlowermime_suffixesexistsr    r'   )r   r%   _extfr   r   r   guess_mimetypeB   s    
*r1   )r   r   c                 C   s&   t  D ]\}}| |kr|  S qd S )N)r,   items)r   r/   Z	_mimetyper   r   r   get_image_extensionM   s    
r3   )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splitr8   Z	b64decoder   )r4   r   r   Z
propertiesr   ZpropZ
image_datar   r   r   parse_data_uriU   s    


r<   )hr0   r   c                 C   s2   zd|    v rW dS W n ty,   Y n0 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_svgj   s    
r@   )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   r@   Ztestsappendr   r   r   r   <module>   s&   

