o
    _#a                     @   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r@e	e G dd deZejdkrQe	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vredre	e edre	e ed re	e ed!re	e ed"re	e G d#d$ d$eZzd d%lmZ W n	 ey   Y nw e	e ed&kreejd'k red( e  e ejd Z!ee
e!gejd'd R   W d   dS 1 s	w   Y  dS dS )+    Nquote)Image   c                 C   sN   z
t | tr	|  } W n	 ty   Y nw |dkrt|  dS 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   //usr/lib/python3/dist-packages/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                   @   sT   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   sP   |j dv s| jdkr|j dv st|j }|j |kr||}| j|fi |S )z
        The main function for displaying an image.
        Converts the given image to the target format and displays it.
        )1RGBAPNG)zI;16LA)modeformatr   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 )zj
        Returns the command used to display the file.
        Not implemented in the base class.
        )NotImplementedErrorr   filer   r   r   r   get_command\   s   zViewer.get_commandc                 C   s   |j dd| |i| jS )z+Save to temporary file and return filename.r   Nr   )_dumpr!   r   r    r   r   r   
save_imagec   s   zViewer.save_imagec                 K   s   | j | |fi |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i | 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(   r1   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)r2   r3   r4   r5   r   r   r%   r   r   r   r   r6   ~   s
    r6   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   r7   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-   callr1   r#   r   r   r   r(      s   
zMacViewer.show_fileN)r2   r3   r4   r5   r   r   r%   r(   r   r   r   r   r:      s    r:   darwinc                   @   s    e Zd ZdZddiZdd ZdS )
UnixViewerr   r7   r   c                 K   s6   | j |fi |d }d| dt| dt| dS )Nr   r;   r<   z; rm -f r=   )get_command_exr   r>   r   r   r   r%      s    zUnixViewer.get_commandN)r2   r3   r4   r   r   r%   r   r   r   r   rC      s    rC   c                   @       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?   r0   r   r   r   rD      s   zXDGViewer.get_command_exc                 K   s   t d|g | | dS )r*   rG   r   )r-   r.   r1   r#   r   r   r   r(      s   
zXDGViewer.show_fileNr2   r3   r4   r5   rD   r(   r   r   r   r   rF      s    rF   c                   @   "   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   &   d }}|r|dt | 7 }||fS )Ndisplay -name r   r   r$   r   r   r?   r0   r   r   r   rD      s   zDisplayViewer.get_command_exc                 K   @   dg}d|v r|d|d g7 }| | t| t| dS )r*   rL   r   -namer   r
   r-   r.   r+   remover   r$   r   argsr   r   r   r(         


zDisplayViewer.show_fileNrH   r   r   r   r   rJ      s    
rJ   c                   @   rE   )GmDisplayViewerz*The GraphicsMagick ``gm display`` command.c                 K      d}d}||fS )Ngmz
gm displayr   r   r$   r   r0   r?   r   r   r   rD         zGmDisplayViewer.get_command_exc                 K      t dd|g t| dS )r*   rY   rL   r   r-   r.   r+   rR   r#   r   r   r   r(         
zGmDisplayViewer.show_fileNrH   r   r   r   r   rW          rW   c                   @   rE   )	EogViewerz'The GNOME Image Viewer ``eog`` command.c                 K   rX   )Neogzeog -nr   rZ   r   r   r   rD      r[   zEogViewer.get_command_exc                 K   r\   )r*   ra   z-nr   r]   r#   r   r   r   r(      r^   zEogViewer.show_fileNrH   r   r   r   r   r`      r_   r`   c                   @   rI   )XVViewerzX
    The X Viewer ``xv`` command.
    This viewer supports the ``title`` parameter.
    Nc                 K   rK   )NxvrM   r   rN   r   r   r   rD      s   zXVViewer.get_command_exc                 K   rO   )r*   rc   r   rP   r   rQ   rS   r   r   r   r(     rU   zXVViewer.show_filerV   rH   r   r   r   r   rb      s    
rb   )r9   rB   rG   rL   rY   ra   rc   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)r2   r3   r4   r5   r   r   r   r   r   rd     s    rd   )rL   __main__   z.Syntax: python3 ImageShow.py imagefile [title])r   rV   )"r+   shutilr-   r/   shlexr   PILr   r	   r   r   r   r6   platformr:   rC   rF   rJ   rW   r`   rb   whichrd   IPython.displayrL   re   ImportErrorr2   lenargvprintexitr@   imr   r   r   r   <module>   s`   

B

	






 $