U
    Å½„bÙ/  ã                	   @   s   d dl Z 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rªe
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�rze d¡�r*e
eƒ e d¡�r>e
eƒ e d ¡�rRe
eƒ e d!¡�rfe
eƒ e d"¡�rze
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 �räe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::

        from PIL import ImageShow
        ImageShow.register(MyViewer())  # MyViewer will be used as a last resort
        ImageShow.register(MySecondViewer(), 0)  # MySecondViewer will be prioritised
        ImageShow.register(ImageShow.XVViewer(), 0)  # XVViewer will be prioritised

    :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-_wxctax1/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.
    ÚtitleTF)r	   Úshow)Úimager   Úoptionsr   r   r   r   r   3   s    	r   c                   @   sJ   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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   G   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_format^   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_commandb   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_imagei   s    zViewer.save_imagec                 K   s   | j |  |¡f|ŽS )zDisplay the given image.)Ú	show_filer$   ©r   r   r   r   r   r   r   m   s    zViewer.show_imagec                 K   sH   |dkr0d|kr(t  dt¡ | d¡}ntdƒ‚t | j|f|Ž¡ dS )úà
        Display given file.

        Before Pillow 9.1.0, the first argument was ``file``. This is now deprecated,
        and will be removed in Pillow 10.0.0 (2023-07-01). ``path`` should be used
        instead.
        Nr!   údThe 'file' argument is deprecated and will be removed in Pillow 10 (2023-07-01). Use 'path' instead.ú!Missing required argument: 'path'r   )ÚwarningsÚwarnÚDeprecationWarningÚpopr   ÚosÚsystemr"   ©r   Úpathr   r   r   r   r%   q   s    ýzViewer.show_file)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r"   r$   r   r%   r   r   r   r   r   B   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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 z)&r   ©r   r!   r   Úcommandr   r   r   r"   ¢   s     zMacViewer.get_commandNc                 K   sZ   |dkr0d|kr(t  dt¡ | d¡}ntdƒ‚t ddd|g¡ t tj	dd	|g¡ d
S )r'   Nr!   r(   r)   Úopenz-azPreview.appz-cz<import os, sys, time; time.sleep(20); os.remove(sys.argv[1])r   )
r*   r+   r,   r-   r   Ú
subprocessÚcallÚPopenÚsysÚ
executabler0   r   r   r   r%   ©   s"    ýüÿzMacViewer.show_file)N)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   s&   | j |f|Žd }d|› dt|ƒ› �S )Nr   r;   r<   )Úget_command_exr   r=   r   r   r   r"   Ï   s    zUnixViewer.get_commandN)r2   r3   r4   r   r   r"   r   r   r   r   rF   Ë   s   rF   c                   @   s"   e Zd ZdZdd„ Zd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>   rD   r   r   r   rG   Ù   s    zXDGViewer.get_command_exNc                 K   sB   |dkr0d|kr(t  dt¡ | d¡}ntdƒ‚t d|g¡ dS )r'   Nr!   r(   r)   rI   r   ©r*   r+   r,   r-   r   r@   rB   r0   r   r   r   r%   Ý   s    ýzXDGViewer.show_file)N©r2   r3   r4   r5   rG   r%   r   r   r   r   rH   Ô   s   rH   c                   @   s$   e Zd ZdZddd„Zd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Údisplayz -title r   ©r   r!   r   r   r>   rD   r   r   r   rG   ù   s    zDisplayViewer.get_command_exc                 K   sh   |dkr0d|kr(t  dt¡ | d¡}ntdƒ‚dg}| d¡}|rP|d|g7 }| |¡ t |¡ dS )	ú©
        Display given file.

        Before Pillow 9.1.0, the first argument was ``file``. This is now deprecated,
        and ``path`` should be used instead.
        Nr!   r(   r)   rM   r   z-titler   ©	r*   r+   r,   r-   r   Úgetr
   r@   rB   ©r   r1   r   Úargsr   r   r   r   r%   ÿ   s    ý


zDisplayViewer.show_file)N)NrK   r   r   r   r   rL   ó   s   
rL   c                   @   s"   e Zd ZdZdd„ Zd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   rD   r>   r   r   r   rG     s    zGmDisplayViewer.get_command_exNc                 K   sD   |dkr0d|kr(t  dt¡ | d¡}ntdƒ‚t dd|g¡ dS )rO   Nr!   r(   r)   rU   rM   r   rJ   r0   r   r   r   r%   "  s    ýzGmDisplayViewer.show_file)NrK   r   r   r   r   rT     s   rT   c                   @   s"   e Zd ZdZdd„ Zddd„ZdS )Ú	EogViewerz'The GNOME Image Viewer ``eog`` command.c                 K   s   d}d}||fS )NÚeogzeog -nr   rV   r   r   r   rG   :  s    zEogViewer.get_command_exNc                 K   sD   |dkr0d|kr(t  dt¡ | d¡}ntdƒ‚t dd|g¡ dS )rO   Nr!   r(   r)   rX   z-nr   rJ   r0   r   r   r   r%   ?  s    ýzEogViewer.show_file)NrK   r   r   r   r   rW   7  s   rW   c                   @   s$   e Zd ZdZddd„Zd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Úxvz -name r   rN   r   r   r   rG   Z  s    zXVViewer.get_command_exc                 K   sh   |dkr0d|kr(t  dt¡ | d¡}ntdƒ‚dg}| d¡}|rP|d|g7 }| |¡ t |¡ dS )	rO   Nr!   r(   r)   rZ   r   z-namer   rP   rR   r   r   r   r%   b  s    ý


zXVViewer.show_file)N)NrK   r   r   r   r   rY   T  s   
rY   )r9   rE   rI   rM   rU   rX   rZ   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   r[   Š  s   r[   )rM   Ú__main__é   z.Syntax: python3 ImageShow.py imagefile [title])r   )N)#r.   Úshutilr@   rC   r*   Úshlexr   ZPILr   r	   r   r   r   r6   Úplatformr:   rF   rH   rL   rT   rW   rY   Úwhichr[   ZIPython.displayrM   r\   ÚImportErrorr2   ÚlenÚargvÚprintÚexitr?   Zimr   r   r   r   Ú<module>   sZ   

H
+
	')
