3
ybW                 @   s   d Z ddlZddlZddlmZ y$ddlmZmZ ddlZdd Z	W n8 e
k
r|   ddlmZ ddlmZ dd	lm	Z	 Y nX d
dlmZ d
dlmZmZmZ ddlmZ dd Zdd ZdS )z
Images manager.

    N)BytesIO)urlopenunquotec             C   s   t t| tr| jdn| S )Nascii)r   
isinstanceunicodeencode)data r
   V/var/www/html/enquirykeeper_venv/lib/python3.6/site-packages/cairosvg/surface/image.py<lambda>   s   r   )r   )parse)unquote_to_bytes   )cairo)node_formatsizepreserve_ratio   )Treec             C   s   y| j dd\}}W n tk
r0   tdY nX |dd }|r||jd}|dkrvd||d krv||d d }qd	}nd	}t|}|d
krdt|d  }|r|d| 7 }tj|S |S )u   Decode URLs with the 'data' scheme. urllib can handle them
    in Python 2, but that is broken in Python 3.

    Inspired from Python 2.7.2’s urllib.py.

    ,r   zbad data URL   N;r   = base64      =)split
ValueErrorIOErrorrfindr   lenr   decodestring)urlheaderr	   Zsemiencodingmissing_paddingr
   r
   r   open_data_url)   s$    

r(   c             C   s`  |j d}|sdS |jdr&t|}nV|j d}|r@tj||}|jrTtj|j|}tj|jrjt|}n
t|d}|j	 }t
|dk rdS t| |j ddt| |j dd }}t| |j d	d}t| |j d
d}	| jj||||	 | jj  |dd dkrt|}
n|dd dks4|dd dkrt|dd dkrZtjt|dj	 }| jj  | jj|| d|kr|d= d|kr|d= d|kr|d= t||| jd}t| |\}}}| s| r| }|d	< |	 }|d
< |p||_|p|	|_t| |\}}}}| jt| |  | jj| jj   | jj|| | jj|| | j| | jj  | jj  dS y6ddlm } t }
|jt|j|
d |
j!d W n
   dS t"j#j$|
}|j% |_|j& |_t| |\}}}}| jj||||	 t"j'|}| jj  | jj| jj   | jj|| | jj|| | jj(| | jj)  | jj  dS )zDraw an image ``node``.z"{http://www.w3.org/1999/xlink}hrefNzdata:z*{http://www.w3.org/XML/1998/namespace}baserbr   xywidthheightr   s   PNG   <svg    <?xml   <!DOCr   s   )fileobjZviewBox)r$   Z
bytestring
tree_cacher   )ImageZPNG)r.   r/   r0   )*get
startswithr(   urlparseurljoinr$   schemer   openreadr"   r   contextZ	rectangleZclipr   gzipZGzipFilesave	translater   r2   r   Zimage_widthZimage_heightr   Zset_context_sizeZget_current_pointZscaleZdrawZrestoreZPILr3   seekr   ZImageSurfaceZcreate_from_pngZ	get_widthZ
get_heightZSurfacePatternZ
set_sourcefill)Zsurfacenoder$   Zimage_bytesZbase_urlZinput_r*   r+   r,   r-   Zpng_filetreeZ
tree_widthZtree_heightZviewboxZscale_xZscale_yZtranslate_xZtranslate_yr3   Zimage_surfaceZpattern_patternr
   r
   r   imageL   s    





&












rC   )__doc__r   r<   ior   urllibr   r   r6   r   ImportErrorZurllib.requestr   urllib.parser   r   Zhelpersr   r   r   parserr   r(   rC   r
   r
   r
   r   <module>   s    #