U
    #5i                  	   @   s  d dl Z d dlZd dlZd dlZd dlmZ d dlmZ g Zd)ddZ	d*ddZ
G d	d
 d
ZG dd deZejdkre	e G dd deZejdkre	e G dd deZG dd deZG dd deZG dd deZG dd deZG dd deZejdkrredr"e	e edr6e	e ed rJe	e ed!r^e	e ed"rre	e G d#d$ d$eZzd d%lmZ W n ek
r   Y n
X e	e ed&kreejd'k red( e  e ejd "Z!ee
e!fejd'd   W 5 Q R X dS )+    Nquote)Image   c                 C   sN   zt | tr|  } W n tk
r(   Y nX |dkr>t|  ntd|  dS )a  
    The :py:func:`register` function is used to register additional viewers.

    :param viewer: The viewer to be registered.
    :param order:
        Zero or a negative integer to prepend this viewer to the list,
        a positive integer to append it.
    r   N)
issubclassViewer	TypeError_viewersappendinsert)viewerorder r   1/tmp/pip-unpacked-wheel-eypja6ja/PIL/ImageShow.pyregister   s    	

r   c                 K   s*   t D ] }|j| fd|i|r dS qdS )a  
    Display a given image.

    :param image: An image object.
    :param title: Optional title. Not all viewers can display the title.
    :param \**options: Additional viewer options.
    :returns: ``True`` if a suitable viewer was found, ``False`` otherwise.
    titler   r   )r	   show)imager   optionsr   r   r   r   r   -   s    	r   c                   @   sP   e Zd ZdZdd ZdZi Zdd Zdd Zd	d
 Z	dd Z
dd Zdd ZdS )r   zBase class for viewers.c                 K   sL   |j dks>| jdkr|j dks>t|j }|j |kr>||}| j|f|S )z
        The main function for displaying an image.
        Converts the given image to the target format and displays it.
        )1ZRGBAPNG)zI;16ZLA)modeformatr   Zgetmodebaseconvert
show_image)selfr   r   baser   r   r   r   A   s    

zViewer.showNc                 C   s   | j S )z3Return format name, or ``None`` to save as PGM/PPM.)r   r   r   r   r   r   
get_formatX   s    zViewer.get_formatc                 K   s   t dS )zj
        Returns the command used to display the file.
        Not implemented in the base class.
        N)NotImplementedErrorr   filer   r   r   r   get_command\   s    zViewer.get_commandc                 C   s   |j f d| |i| jS )z+Save to temporary file and return filename.r   )_dumpr   r   r   r   r   r   
save_imagec   s    zViewer.save_imagec                 K   s   | j | |f|S )zDisplay the given image.)	show_filer$   r   r   r   r   r   r   r   g   s    zViewer.show_imagec                 K   s   t | j|f| dS )Display given filer   )ossystemr"   r    r   r   r   r%   k   s    zViewer.show_filec                 C   s   t tjdd|g d S )Nz-cz<import os, sys, time; time.sleep(20); os.remove(sys.argv[1]))
subprocessPopensys
executable)r   r!   r   r   r   _remove_file_after_delayp   s    zViewer._remove_file_after_delay)__name__
__module____qualname____doc__r   r   r   r   r"   r$   r   r%   r.   r   r   r   r   r   <   s   r   c                   @   s$   e Zd ZdZdZddiZdd ZdS )WindowsViewerzNThe default viewer on Windows is the default system application for PNG files.r   compress_levelr   c                 K   s   d| d| dS )Nzstart "Pillow" /WAIT "z)" && ping -n 2 127.0.0.1 >NUL && del /f ""r   r    r   r   r   r"      s    zWindowsViewer.get_commandN)r/   r0   r1   r2   r   r   r"   r   r   r   r   r3   ~   s   r3   win32c                   @   s,   e Zd ZdZdZddiZdd Zdd Zd	S )
	MacViewerz2The default viewer on macOS using ``Preview.app``.r   r4   r   c                 K   s(   d}d| dt | dt | d}|S )Nzopen -a Preview.app( z; sleep 20; rm -f )&r   r   r!   r   commandr   r   r   r"      s     zMacViewer.get_commandc                 K   s    t ddd|g | | dS )r'   openz-azPreview.appr   )r*   callr.   r    r   r   r   r%      s    
zMacViewer.show_fileN)r/   r0   r1   r2   r   r   r"   r%   r   r   r   r   r7      s
   r7   darwinc                   @   s    e Zd ZdZddiZdd ZdS )
UnixViewerr   r4   r   c                 K   s2   | j |f|d }d| dt| dt| dS )Nr   r8   r9   z; rm -f r:   )get_command_exr   r;   r   r   r   r"      s    zUnixViewer.get_commandN)r/   r0   r1   r   r   r"   r   r   r   r   r@      s   r@   c                   @   s    e Zd ZdZdd Zdd ZdS )	XDGViewerz3
    The freedesktop.org ``xdg-open`` command.
    c                 K   s   d }}||fS )Nxdg-openr   )r   r!   r   r<   r-   r   r   r   rA      s    zXDGViewer.get_command_exc                 K   s   t d|g | | dS )r'   rC   r   )r*   r+   r.   r    r   r   r   r%      s    
zXDGViewer.show_fileNr/   r0   r1   r2   rA   r%   r   r   r   r   rB      s   rB   c                   @   s"   e Zd ZdZdddZdd ZdS )DisplayViewerz`
    The ImageMagick ``display`` command.
    This viewer supports the ``title`` parameter.
    Nc                 K   s&   d }}|r|dt | 7 }||fS )Ndisplay -name r   r   r!   r   r   r<   r-   r   r   r   rA      s    zDisplayViewer.get_command_exc                 K   s@   dg}d|kr|d|d g7 }| | t| t| dS )r'   rF   r   -namer   r
   r*   r+   r(   remover   r!   r   argsr   r   r   r%      s    


zDisplayViewer.show_file)NrD   r   r   r   r   rE      s   
rE   c                   @   s    e Zd ZdZdd Zdd ZdS )GmDisplayViewerz*The GraphicsMagick ``gm display`` command.c                 K   s   d}d}||fS )Ngmz
gm displayr   r   r!   r   r-   r<   r   r   r   rA      s    zGmDisplayViewer.get_command_exc                 K   s   t dd|g t| dS )r'   rO   rF   r   r*   r+   r(   rK   r    r   r   r   r%      s    
zGmDisplayViewer.show_fileNrD   r   r   r   r   rN      s   rN   c                   @   s    e Zd ZdZdd Zdd ZdS )	EogViewerz'The GNOME Image Viewer ``eog`` command.c                 K   s   d}d}||fS )Neogzeog -nr   rP   r   r   r   rA      s    zEogViewer.get_command_exc                 K   s   t dd|g t| dS )r'   rS   z-nr   rQ   r    r   r   r   r%      s    
zEogViewer.show_fileNrD   r   r   r   r   rR      s   rR   c                   @   s"   e Zd ZdZdddZdd ZdS )XVViewerzX
    The X Viewer ``xv`` command.
    This viewer supports the ``title`` parameter.
    Nc                 K   s&   d }}|r|dt | 7 }||fS )NxvrG   r   rH   r   r   r   rA      s    zXVViewer.get_command_exc                 K   s@   dg}d|kr|d|d g7 }| | t| t| dS )r'   rU   r   rI   r   rJ   rL   r   r   r   r%     s    


zXVViewer.show_file)NrD   r   r   r   r   rT      s   
rT   )r6   r?   rC   rF   rO   rS   rU   c                   @   s   e Zd ZdZdd ZdS )IPythonViewerz!The viewer for IPython frontends.c                 K   s   t | dS )Nr   )ipython_displayr&   r   r   r   r   !  s    zIPythonViewer.show_imageN)r/   r0   r1   r2   r   r   r   r   r   rV     s   rV   )rF   __main__   z.Syntax: python3 ImageShow.py imagefile [title])r   )N)"r(   shutilr*   r,   shlexr   ZPILr   r	   r   r   r   r3   platformr7   r@   rB   rE   rN   rR   rT   whichrV   ZIPython.displayrF   rW   ImportErrorr/   lenargvprintexitr=   Zimr   r   r   r   <module>   sX   

B

	
