
    ^jM(              	      (   U 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ded<   d+d,d	Zd-d.d
Z G d d      Z G d de      Zej&                  dk(  r ee        G d de      Zej&                  dk(  r ee        G d dej*                  e      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zej&                  dvr ej8                  d       r ee        ej8                  d!      r ee        ej8                  d"      r ee        ej8                  d#      r ee        ej8                  d$      r ee        G d% d&e      Z	 d d'lmZ   ee       e"d(k(  rs e#ejH                        d)k  r e%d*        ejL                           ejN                  ejH                  d         5 Z( e% ee(gejH                  d)d         ddd       yy# e!$ r Y w xY w# 1 sw Y   yxY w)/    )annotationsNquote)Any   )Imagezlist[Viewer]_viewersc                    t        | t              rt        | t              r |        } |dkD  rt        j                  |        yt        j                  d|        y)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Viewerr	   appendinsert)viewerorders     X/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/PIL/ImageShow.pyregisterr      s?     &$Jvv$>qy6"    c                H    t         D ]  } |j                  | fd|i|s y y)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   s       r   r   r   3   s3      6;;u5E5W5 r   c                  j    e Zd ZU dZddZdZded<   	 i Zded<   	 ddZdd	Z	dd
Z
ddZddZddZy)r   zBase class for viewers.r   c                    |j                   dv s\| j                  dk(  r|j                   dv s?t        j                  |j                         }|j                   |k7  r|j	                  |      } | 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   bases       r   r   zViewer.showG   sk     JJ-'u$~)E$$UZZ0DzzT!d+tu000r   N
str | Noner"   zdict[str, Any]c                    | j                   S )z3Return format name, or ``None`` to save as PGM/PPM.)r"   r&   r   s     r   
get_formatzViewer.get_format^   s    {{r   c                    d}t        |      )zj
        Returns the command used to display the file.
        Not implemented in the base class.
        zunavailable in base viewer)NotImplementedErrorr&   filer   msgs       r   get_commandzViewer.get_commandb   s    
 +!#&&r   c                \     |j                   dd| j                  |      i| j                  S )z+Save to temporary file and return filename.r"    )_dumpr+   r   r*   s     r   
save_imagezViewer.save_imagej   s(    u{{I$//%"8IDLLIIr   c                F     | j                   | j                  |      fi |S )zDisplay the given image.)	show_filer5   r&   r   r   s      r   r%   zViewer.show_imagen   s!    t~~dooe4@@@r   c                    t         j                  j                  |      st        t        j                   | j
                  |fi |       y)%
        Display given file.
        r   )ospathexistsFileNotFoundErrorsystemr1   r&   r<   r   s      r   r7   zViewer.show_filer   s<     ww~~d###
		"$""43734r   c                    t        t        dd      xr t        t        d      }| xr t        j                  xs t	        j
                  d      }|rt        j                  |dd|g       y y )NfrozenF_MEIPASSpython3z-cz<import os, sys, time; time.sleep(20); os.remove(sys.argv[1]))getattrsyshasattr
executableshutilwhich
subprocessPopen)r&   r<   pyinstallerrH   s       r   _remove_path_after_delayzViewer._remove_path_after_delay{   sa    c8U3PZ8P%o8#..TV\\)=T
R	 r   r   Image.Imager   r   returnint)r   rP   rQ   r(   r/   strr   r   rQ   rT   )r   rP   rQ   rT   r<   rT   r   r   rQ   rR   )r<   rT   rQ   None)__name__
__module____qualname____doc__r   r"   __annotations__r   r+   r1   r5   r%   r7   rN   r3   r   r   r   r   B   sF    !1$ FJ/ G^ 7'JAr   r   c                  .    e Zd ZdZdZdddZd	dZd
dZy)WindowsViewerzNThe default viewer on Windows is the default system application for PNG files.r   r   Tcompress_levelsave_allc                Z    d|v rd}t        |      |j                  dd      }d| d| dS )N"z.Windows filenames cannot contain double quotes%z"%"zstart "Pillow" /WAIT "z)" && ping -n 4 127.0.0.1 >NUL && del /f ")
ValueErrorreplacer.   s       r   r1   zWindowsViewer.get_command   sE    $;BCS/!||C'$TF +q"	
r   c                    t         j                  j                  |      st        t        j
                  dk(  rt        j                  |       | j                  |       y)r:   win32r   )r;   r<   r=   r>   rF   platform	startfilerN   r@   s      r   r7   zWindowsViewer.show_file   sC     ww~~d###<<7"LL%%d+r   NrS   rU   rW   rX   rY   rZ   r"   r   r1   r7   r3   r   r   r]   r]      s    XF!"5G	
	r   r]   rg   c                  .    e Zd ZdZdZdddZd	dZd
dZy)	MacViewerz2The default viewer on macOS using ``Preview.app``.r   r   Tr^   c                F    d}d| dt        |       dt        |       d}|S )Nzopen -a Preview.app( z; sleep 20; rm -f z)&r   r&   r/   r   commands       r   r1   zMacViewer.get_command   s1     (gYad},>uT{m2Nr   c                    t         j                  j                  |      st        t	        j
                  ddd|g       | j                  |       y)r:   openz-azPreview.appr   )r;   r<   r=   r>   rK   callrN   r@   s      r   r7   zMacViewer.show_file   s@     ww~~d###}d;<%%d+r   NrS   rU   rj   r3   r   r   rl   rl      s    <F!"5Gr   rl   darwinc                  H    e Zd ZdZdddZej                  dd       Zd	dZy)

UnixViewerr   r   Tr^   c                     y Nr3   )r&   r/   r   s      r   get_command_exzUnixViewer.get_command_ex   s    r   c                N     | j                   |fi |d   }| dt        |       S )Nr   ro   )rz   r   rp   s       r   r1   zUnixViewer.get_command   s3    %$%%d6g6q9!E$K=))r   Nr/   rT   r   r   rQ   tuple[str, str]rS   )	rW   rX   rY   r"   r   abcabstractmethodrz   r1   r3   r   r   rw   rw      s.    F!"5G *r   rw   c                       e Zd ZdZddZddZy)	XDGViewerz3
    The freedesktop.org ``xdg-open`` command.
    c                    dx}}||fS )Nxdg-openr3   )r&   r/   r   rq   rH   s        r   rz   zXDGViewer.get_command_ex   s    ))*
""r   c                |    t         j                  j                  |      st        t	        j
                  d|g       y)r:   r   r   r;   r<   r=   r>   rK   rL   r@   s      r   r7   zXDGViewer.show_file   s0     ww~~d###*d+,r   Nr|   rU   rW   rX   rY   rZ   rz   r7   r3   r   r   r   r      s    #r   r   c                  2    e Zd ZdZ	 d	 	 	 	 	 	 	 ddZddZy)DisplayViewerz`
    The ImageMagick ``display`` command.
    This viewer supports the ``title`` parameter.
    Nc                8    dx}}|r|dt        |       z  }||fS )Ndisplayz -title r   r&   r/   r   r   rq   rH   s         r   rz   zDisplayViewer.get_command_ex   s1      )(*%,00G
""r   c                    t         j                  j                  |      st        dg}|j	                  d      }|r|d|gz  }|j                  |       t        j                  |       y)r:   r   r   z-titler   r;   r<   r=   r>   getr   rK   rL   r&   r<   r   argsr   s        r   r7   zDisplayViewer.show_file   s^     ww~~d###{G$Xu%%DDr   ry   r/   rT   r   r(   r   r   rQ   r}   rU   r   r3   r   r   r   r      s6     .2## *#>A#	#r   r   c                       e Zd ZdZddZddZy)GmDisplayViewerz*The GraphicsMagick ``gm display`` command.c                    d}d}||fS )Ngmz
gm displayr3   r&   r/   r   rH   rq   s        r   rz   zGmDisplayViewer.get_command_ex  s    

""r   c                ~    t         j                  j                  |      st        t	        j
                  dd|g       y)r:   r   r   r   r   r@   s      r   r7   zGmDisplayViewer.show_file  s2     ww~~d###$	401r   Nr|   rU   r   r3   r   r   r   r     s    4#
r   r   c                       e Zd ZdZddZddZy)	EogViewerz'The GNOME Image Viewer ``eog`` command.c                    d}d}||fS )Neogzeog -nr3   r   s        r   rz   zEogViewer.get_command_ex  s    

""r   c                ~    t         j                  j                  |      st        t	        j
                  dd|g       y)r:   r   z-nr   r   r@   s      r   r7   zEogViewer.show_file"  s2     ww~~d###%t,-r   Nr|   rU   r   r3   r   r   r   r     s    1#
r   r   c                  2    e Zd ZdZ	 d	 	 	 	 	 	 	 ddZddZy)XVViewerzX
    The X Viewer ``xv`` command.
    This viewer supports the ``title`` parameter.
    Nc                8    dx}}|r|dt        |       z  }||fS )Nxvz -name r   r   s         r   rz   zXVViewer.get_command_ex2  s1    
  $#*u//G
""r   c                    t         j                  j                  |      st        dg}|j	                  d      }|r|d|gz  }|j                  |       t        j                  |       y)r:   r   r   z-namer   r   r   s        r   r7   zXVViewer.show_file<  s^     ww~~d###vG$We$$DDr   ry   r   rU   r   r3   r   r   r   r   ,  s6     .2## *#>A#	#r   r   )rg   ru   r   r   r   r   r   c                      e Zd ZdZddZy)IPythonViewerz!The viewer for IPython frontends.c                    t        |       y)Nr   )ipython_displayr8   s      r   r%   zIPythonViewer.show_image\  s    r   NrO   )rW   rX   rY   rZ   r%   r3   r   r   r   r   Y  s
    +r   r   )r   __main__   z.Syntax: python3 ImageShow.py imagefile [title])r   )r   ztype[Viewer] | Viewerr   rR   rQ   rV   ry   )r   rP   r   r(   r   r   rQ   bool))
__future__r   r~   r;   rI   rK   rF   shlexr   typingr    r   r	   r[   r   r   r   r]   rh   rl   ABCrw   r   r   r   r   r   rJ   r   IPython.displayr   r   ImportErrorrW   lenargvprintexitrs   imr3   r   r   <module>r      s   # 
 	   
   , #,E EVF : <<7] 0 <<8Y
*& 
*
 &J <j $
 $z @ <<**v||Jv||Iv||D!v||Ev||DF : ] z
388}q>?
	CHHQK	  'Bd2%%&' '   		' 's   6G= H=HHH