B
    \                 @   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 ddl	m
Z
 ddlmZmZmZ e
eZG dd	 d	eZd
d ZdS )z
    sphinx.ext.imgconverter
    ~~~~~~~~~~~~~~~~~~~~~~~

    Image converter extension for Sphinx

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    N)ExtensionError)__)ImageConverter)logging)ENOENTEPIPEEINVALc               @   s&   e Zd ZdddgZdd Zdd ZdS )	ImagemagickConverter)zimage/svg+xmlz	image/png)z	image/gifz	image/png)zapplication/pdfz	image/pngc          
   C   s   y0| j jdg}td| tj|tjtjd}W n, ttfk
r\   t	t
d| j j dS X y| \}}W nT ttfk
r } z2|jttfkr |j |j  }}|  W dd}~X Y nX |jdkrt }t	t
d|||| dS d	S )
z+Confirms the converter is available or not.z-versionzInvoking %r ...)stdoutstderrzBconvert command %r cannot be run.check the image_converter settingFNr   z2convert exited with error:
[stderr]
%s
[stdout]
%sT)configimage_converterloggerdebug
subprocessPopenPIPEOSErrorIOErrorwarningr   communicateerrnor   r   r
   readr   wait
returncodelocaleZgetpreferredencodingdecode)selfargspr
   r   errencoding r"   6lib/python3.7/site-packages/sphinx/ext/imgconverter.pyis_available$   s*    



z!ImagemagickConverter.is_availablec          
   C   s  yF|d7 }| j jg| j j ||g }td| tj|tjtjd}W nB tk
r } z$|j	t
krd ttd| j j dS d}~X Y nX y| \}}W nT ttfk
r } z2|j	ttfkr |j |j  }}|  W dd}~X Y nX |jdkrttd||f d	S )
z#Converts the image to expected one.z[0]zInvoking %r ...)r
   r   zBconvert command %r cannot be run.check the image_converter settingFNr   z2convert exited with error:
[stderr]
%s
[stdout]
%sT)r   r   image_converter_argsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r   r   r   r   r   )r   Z_fromZ_tor   r   r    r
   r   r"   r"   r#   convertA   s.    



zImagemagickConverter.convertN)__name__
__module____qualname__Zconversion_rulesr$   r&   r"   r"   r"   r#   r	      s
   r	   c             C   s2   |  t | ddd | dg d ddddS )Nr   r&   envr%   ZbuiltinT)versionZparallel_read_safeZparallel_write_safe)Zadd_post_transformr	   Zadd_config_value)Zappr"   r"   r#   setupe   s    
r,   )__doc__r   r   Zsphinx.errorsr   Zsphinx.localer   Z(sphinx.transforms.post_transforms.imagesr   Zsphinx.utilr   Zsphinx.util.osutilr   r   r   Z	getLoggerr'   r   r	   r,   r"   r"   r"   r#   <module>
   s   
H