o
    pc,                     @   s0  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 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rFee G dd deZejdkrWe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   )	deprecatec                 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::

        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)viewerZorder r   -lib/python3.10/site-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.
    titleTF)r
   show)imager   optionsr   r   r   r   r   4   s
   	r   c                   @   sN   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   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.
        )1ZRGBAPNG)zI;16ZLA)modeformatr   ZgetmodebaseZconvert
show_image)selfr   r   baser   r   r   r   H   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 )zj
        Returns the command used to display the file.
        Not implemented in the base class.
        )NotImplementedErrorr   filer   r   r   r   get_commandc   s   zViewer.get_commandc                 C   s   |j dd| |i| jS )z+Save to temporary file and return filename.r   Nr   )Z_dumpr   r   r   r   r   r   
save_imagej   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   n   s   zViewer.show_imagec                 K   sP   |du rd|v rt ddd |d}nd}t|t| j|fi | 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    The 'file' argument
   'path'!Missing required argument: 'path'r   )r   popr	   ossystemr!   r   pathr   msgr   r   r   r#   r   s   zViewer.show_fileN)__name__
__module____qualname____doc__r   r   r   r   r!   r"   r   r#   r   r   r   r   r   C   s    r   c                   @   s&   e Zd ZdZdZdddZdd ZdS )	WindowsViewerzNThe default viewer on Windows is the default system application for PNG files.r   r   TZcompress_levelZsave_allc                 K   s   d| d| dS )Nzstart "Pillow" /WAIT "z)" && ping -n 4 127.0.0.1 >NUL && del /f ""r   r   r   r   r   r!      s   zWindowsViewer.get_commandN)r1   r2   r3   r4   r   r   r!   r   r   r   r   r5      s
    
r5   win32c                   @   s0   e Zd ZdZdZdddZdd Zdd	d
ZdS )	MacViewerz2The default viewer on macOS using ``Preview.app``.r   r   Tr6   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   sp   |du rd|v rt ddd |d}nd}t|tddd	|g tjp*td
}|r6t	|dd|g dS )r%   Nr    r&   r'   r(   r)   openz-azPreview.appZpython3z-cz<import os, sys, time; time.sleep(20); os.remove(sys.argv[1])r   )
r   r*   r	   
subprocessZcallsys
executableshutilwhichPopen)r   r.   r   r/   rA   r   r   r   r#      s"   zMacViewer.show_filer0   )r1   r2   r3   r4   r   r   r!   r#   r   r   r   r   r9      s    
r9   darwinc                   @   s"   e Zd ZdZdddZdd ZdS )
UnixViewerr   r   Tr6   c                 K   s*   | j |fi |d }d| dt| S )Nr   r:   r;   )get_command_exr   r<   r   r   r   r!      s   zUnixViewer.get_commandN)r1   r2   r3   r   r   r!   r   r   r   r   rF      s    
rF   c                   @   "   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=   rA   r   r   r   rG      s   zXDGViewer.get_command_exNc                 K   sF   |du rd|v rt ddd |d}nd}t|td|g dS )	r%   Nr    r&   r'   r(   r)   rJ   r   r   r*   r	   r?   rD   r-   r   r   r   r#      s   zXDGViewer.show_filer0   r1   r2   r3   r4   rG   r#   r   r   r   r   rI      s    rI   c                   @   $   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   &   d }}|r|dt | 7 }||fS )Ndisplayz -title r   r   r    r   r   r=   rA   r   r   r   rG      s   zDisplayViewer.get_command_exc                 K   l   |du rd|v rt ddd |d}nd}t|dg}|d}|r*|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'   r(   r)   rP   r   z-titler   r   r*   r	   getr   r?   rD   r   r.   r   r/   argsr   r   r   r   r#         


zDisplayViewer.show_filer0   rL   r   r   r   r   rN      s    
rN   c                   @   rH   )GmDisplayViewerz*The GraphicsMagick ``gm display`` command.c                 K      d}d}||fS )Ngmz
gm displayr   r   r    r   rA   r=   r   r   r   rG        zGmDisplayViewer.get_command_exNc                 K   H   |du rd|v rt ddd |d}nd}t|tdd|g d	S )
rS   Nr    r&   r'   r(   r)   r[   rP   r   rK   r-   r   r   r   r#        zGmDisplayViewer.show_filer0   rL   r   r   r   r   rY         rY   c                   @   rH   )	EogViewerz'The GNOME Image Viewer ``eog`` command.c                 K   rZ   )Neogzeog -nr   r\   r   r   r   rG   .  r]   zEogViewer.get_command_exNc                 K   r^   )
rS   Nr    r&   r'   r(   r)   rb   z-nr   rK   r-   r   r   r   r#   3  r_   zEogViewer.show_filer0   rL   r   r   r   r   ra   +  r`   ra   c                   @   rM   )XVViewerzX
    The X Viewer ``xv`` command.
    This viewer supports the ``title`` parameter.
    Nc                 K   rO   )Nxvz -name r   rQ   r   r   r   rG   K  s   zXVViewer.get_command_exc                 K   rR   )rS   Nr    r&   r'   r(   r)   rd   r   z-namer   rT   rV   r   r   r   r#   S  rX   zXVViewer.show_filer0   rL   r   r   r   r   rc   E  s    
rc   )r8   rE   rJ   rP   r[   rb   rd   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)r1   r2   r3   r4   r   r   r   r   r   re   x  s    re   )rP   __main__   z.Syntax: python3 ImageShow.py imagefile [title])r   r0   )$r+   rB   r?   r@   Zshlexr   ZPILr   Z
_deprecater   r
   r   r   r   r5   platformr9   rF   rI   rN   rY   ra   rc   rC   re   ZIPython.displayrP   rf   ImportErrorr1   lenargvprintexitr>   Zimr   r   r   r   <module>   sb   

E

*	$
&





 $