o
    h'                     @  sL  d dl mZ 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
 ddlmZ g Zd8d9ddZd:d;ddZG dd dZG dd deZejdkrRee G dd deZejdkrcee G d d! d!ej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d0ree ed1ree G d2d3 d3eZzd d4lmZ W n	 e y   Y nw ee e!d5kr$e"ej#d6k re$d7 e%  e&ej#d Z'e$ee'gej#d6d R   W d   dS 1 sw   Y  dS dS )<    )annotationsNquote)Any   )Imageviewertype[Viewer] | ViewerorderintreturnNonec                 C  s@   t | trt| tr|  } |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)
isinstancetype
issubclassViewer_viewersappendinsert)r   r
    r   @/var/www/html/venv/lib/python3.10/site-packages/PIL/ImageShow.pyregister   s
   r   imageImage.Imagetitle
str | Noneoptionsr   boolc                 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.
    r   TF)r   show)r   r   r   r   r   r   r   r   3   s
   	r   c                   @  sj   e Zd ZU dZddd	Zd
Zded< 	 i Zded< 	 dddZdddZ	dddZ
dddZdddZd
S ) r   zBase class for viewers.r   r   r   r   r   r   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getmodebaseconvert
show_image)selfr   r   baser   r   r   r   G   s   


zViewer.showNr   r"   zdict[str, Any]c                 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_formatfilestrc                 K  s   d}t |)zj
        Returns the command used to display the file.
        Not implemented in the base class.
        zunavailable in base viewer)NotImplementedError)r%   r)   r   msgr   r   r   get_commandb   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_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_imagepathc                 K  s,   t j|stt | j|fi | dS )%
        Display given file.
        r   )osr2   existsFileNotFoundErrorsystemr-   r%   r2   r   r   r   r   r0   r   s   zViewer.show_filer   r   r   r   r   r   )r   r   r   r   r)   r*   r   r   r   r*   )r   r   r   r*   r2   r*   r   r   r   r   )__name__
__module____qualname____doc__r   r"   __annotations__r   r(   r-   r/   r$   r0   r   r   r   r   r   B   s   
 




r   c                   @  2   e Zd ZdZdZdddZdddZd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_allr)   r*   r   r   r   c                 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   r   r-      s   zWindowsViewer.get_commandr2   r   c                 K  s8   t j|sttj| j|fi |dttdd dS )r3   TZCREATE_NO_WINDOW)shellcreationflagsr   )r4   r2   r5   r6   
subprocessPopenr-   getattrr8   r   r   r   r0      s   zWindowsViewer.show_fileNr:   r;   r<   r=   r>   r?   r"   r   r-   r0   r   r   r   r   rB          

rB   win32c                   @  rA   )	MacViewerz2The default viewer on macOS using ``Preview.app``.r    r   TrC   r)   r*   r   r   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_commandr2   r   c                 K  sL   t j|sttddd|g tjpt	d}|r$t
|dd|g dS )r3   openz-azPreview.apppython3z-cz<import os, sys, time; time.sleep(20); os.remove(sys.argv[1])r   )r4   r2   r5   r6   rH   callsys
executableshutilwhichrI   )r%   r2   r   rW   r   r   r   r0      s   zMacViewer.show_fileNr:   r;   rK   r   r   r   r   rN      rL   rN   darwinc                   @  s4   e Zd ZdZdddZejdddZdddZdS )
UnixViewerr    r   TrC   r)   r*   r   r   r   tuple[str, str]c                 K  s   d S Nr   rE   r   r   r   get_command_ex   s   zUnixViewer.get_command_exc                 K  s(   | j |fi |d }| dt| S )Nr   rP   )r^   r   rQ   r   r   r   r-      s   zUnixViewer.get_commandNr)   r*   r   r   r   r\   r:   )	r<   r=   r>   r"   r   abcabstractmethodr^   r-   r   r   r   r   r[      s    
r[   c                   @  $   e Zd ZdZddd	ZdddZdS )	XDGViewerz3
    The freedesktop.org ``xdg-open`` command.
    r)   r*   r   r   r   r\   c                 K  s   d }}||fS )Nxdg-openr   )r%   r)   r   rR   rW   r   r   r   r^      s   zXDGViewer.get_command_exr2   r   c                 K  s"   t j|sttd|g dS )r3   rd   r   r4   r2   r5   r6   rH   rI   r8   r   r   r   r0      s   zXDGViewer.show_fileNr_   r;   r<   r=   r>   r?   r^   r0   r   r   r   r   rc      s    
rc   c                   @  (   e Zd ZdZ	ddddZdddZdS )DisplayViewerz`
    The ImageMagick ``display`` command.
    This viewer supports the ``title`` parameter.
    Nr)   r*   r   r   r   r   r   r\   c                 K  &   d }}|r|dt | 7 }||fS )Ndisplayz -title r   r%   r)   r   r   rR   rW   r   r   r   r^      s   zDisplayViewer.get_command_exr2   r   c                 K  H   t j|stdg}|d}|r|d|g7 }|| t| dS )r3   rj   r   z-titler   r4   r2   r5   r6   getr   rH   rI   r%   r2   r   argsr   r   r   r   r0         


zDisplayViewer.show_filer]   r)   r*   r   r   r   r   r   r\   r;   rf   r   r   r   r   rh      s
    rh   c                   @  rb   )GmDisplayViewerz*The GraphicsMagick ``gm display`` command.r)   r*   r   r   r   r\   c                 K     d}d}||fS )Ngmz
gm displayr   r%   r)   r   rW   rR   r   r   r   r^        zGmDisplayViewer.get_command_exr2   r   c                 K  $   t j|sttdd|g dS )r3   ru   rj   r   re   r8   r   r   r   r0   	     zGmDisplayViewer.show_fileNr_   r;   rf   r   r   r   r   rs         
rs   c                   @  rb   )	EogViewerz'The GNOME Image Viewer ``eog`` command.r)   r*   r   r   r   r\   c                 K  rt   )Neogzeog -nr   rv   r   r   r   r^     rw   zEogViewer.get_command_exr2   r   c                 K  rx   )r3   r|   z-nr   re   r8   r   r   r   r0     ry   zEogViewer.show_fileNr_   r;   rf   r   r   r   r   r{     rz   r{   c                   @  rg   )XVViewerzX
    The X Viewer ``xv`` command.
    This viewer supports the ``title`` parameter.
    Nr)   r*   r   r   r   r   r   r\   c                 K  ri   )Nxvz -name r   rk   r   r   r   r^   +  s   zXVViewer.get_command_exr2   r   c                 K  rl   )r3   r~   r   z-namer   rm   ro   r   r   r   r0   5  rq   zXVViewer.show_filer]   rr   r;   rf   r   r   r   r   r}   %  s
    
r}   )rM   rZ   rd   rj   ru   r|   r~   c                   @  s   e Zd ZdZddd	Zd
S )IPythonViewerz!The viewer for IPython frontends.r   r   r   r   r   r   c                 K  s   t | dS )Nr   )ipython_displayr1   r   r   r   r$   U  s   zIPythonViewer.show_imageNr9   )r<   r=   r>   r?   r$   r   r   r   r   r   R  s    r   )rj   __main__   z.Syntax: python3 ImageShow.py imagefile [title])r   )r   r	   r
   r   r   r   r]   )r   r   r   r   r   r   r   r   )(
__future__r   r`   r4   rX   rH   rV   shlexr   typingr    r   r   r   r   r   rB   platformrN   ABCr[   rc   rh   rs   r{   r}   rY   r   IPython.displayrj   r   ImportErrorr<   lenargvprintexitrS   Zimr   r   r   r   <module>   sf   =

!
 





 $