ó
öÀ„\c           @@  sÌ  d  Z  d d l m Z d d l Z d d l Z d d l Z d d l m Z d d l m	 Z	 d d l
 m Z d d l Z d d l m Z m Z m Z d d l m Z y d d	 l m Z Wn; e k
 ró y d d l Z Wqô e k
 rï d Z qô Xn Xe rd d
 l
 m Z m Z m Z m Z n  e r.e Z n  e d! d" d# d$ d% d& g ƒ Z e d d e f d e f d e f g ƒ Z  d „  Z! d d „ Z" d d d d „ Z# d „  Z$ d „  Z% d  „  Z& e j' j( e& ƒ d S('   sÊ   
    sphinx.util.images
    ~~~~~~~~~~~~~~~~~~

    Image utility functions for Sphinx.

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
i    (   t   absolute_importN(   t   OrderedDict(   t   path(   t
   NamedTuple(   t   PY3t   BytesIOt	   iteritems(   t   RemovedInSphinx30Warning(   t   Image(   t   Dictt   IOt   Listt   Tuples   .gifs	   image/gifs   .jpgs
   image/jpegs   .pngs	   image/pngs   .pdfs   application/pdfs   .svgs   image/svg+xmls   .svgzt   DataURIt   mimetypet   charsett   datac         C@  s›   y‚ t  j |  ƒ } | d d k r+ d  } n  | d  k r} t r} t j |  ƒ } | j } y | j j ƒ  Wq} t k
 ry q} Xn  | SWn t k
 r– d  SXd  S(   Ni    iÿÿÿÿ(	   t	   imagesizet   gett   NoneR   t   opent   sizet   fpt   closet	   Exception(   t   filenameR   t   im(    (    s1   lib/python2.7/site-packages/sphinx/util/images.pyt   get_image_size6   s    		c         C@  s%   t  j |  ƒ } | r d | S| Sd  S(   Ns   image/(   t   imghdrt   what(   t   streamt   defaultt   imgtype(    (    s1   lib/python2.7/site-packages/sphinx/util/images.pyt   guess_mimetype_for_streamJ   s    t    c         C@  sŸ   t  j |  j ƒ  ƒ \ } } | t k r/ t | S| ra t j d t d d ƒt t | ƒ d | ƒSt  j	 |  ƒ r› t
 |  d ƒ  } t | d | ƒSWd  QXn  | S(   Ns7   The content argument of guess_mimetype() is deprecated.t
   stackleveli   R   t   rb(   R   t   splitextt   lowert   mime_suffixest   warningst   warnR   R!   R   t   existsR   (   R   t   contentR   t   _t   extt   f(    (    s1   lib/python2.7/site-packages/sphinx/util/images.pyt   guess_mimetypeS   s    	c         C@  s1   x* t  t ƒ D] \ } } |  | k r | Sq Wd  S(   N(   R   R'   R   (   R   R-   t	   _mimetype(    (    s1   lib/python2.7/site-packages/sphinx/util/images.pyt   get_image_extensionc   s    c         C@  s®   |  j  d ƒ s d  Sd } d } |  d j d d ƒ \ } } xQ | j d ƒ D]@ } | d k r` qK | j  d	 ƒ r| | d
 } qK | rK | } qK qK Wt j | ƒ } t | | | ƒ S(   Ns   data:u
   text/plainu   US-ASCIIi   t   ,i   t   ;t   base64s   charset=i   (   t
   startswithR   t   splitR4   t	   b64decodeR   (   t   uriR   R   t
   propertiesR   t   propt
   image_data(    (    s1   lib/python2.7/site-packages/sphinx/util/images.pyt   parse_data_uril   s    c         C@  s;   y# d |  j  d ƒ j ƒ  k r" d SWn t k
 r6 n Xd S(   sE   An additional imghdr library helper; test the header is SVG's or not.s   <svgs   utf-8s   svg+xmlN(   t   decodeR&   t   UnicodeDecodeErrorR   (   t   hR.   (    (    s1   lib/python2.7/site-packages/sphinx/util/images.pyt   test_svg‚   s    (   s   .gifs	   image/gif(   s   .jpgs
   image/jpeg(   s   .pngs	   image/png(   s   .pdfs   application/pdf(   s   .svgs   image/svg+xml(   s   .svgzs   image/svg+xml()   t   __doc__t
   __future__R    R4   R   R(   t   collectionsR   t   osR   t   typingR   R   t   sixR   R   R   t   sphinx.deprecationR   t   PILR   t   ImportErrorR   t   FalseR	   R
   R   R   t   strt   unicodeR'   t   bytesR   R   R!   R/   R1   R<   R@   t   testst   append(    (    (    s1   lib/python2.7/site-packages/sphinx/util/images.pyt   <module>
   sL   %								