o
    ë6WjM(  ã                   @  sV  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d„Zd<d=dd„ZG dd„ dƒZG dd„ deƒZejdkrWeeƒ G dd „ d eƒZejd!krhe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rÌe d/¡r¨eeƒ e d0¡r±eeƒ e d1¡rºeeƒ e d2¡rÃeeƒ e d3¡rÌeeƒ G d4d5„ d5eƒZzd d6lmZ  W n	 e!yå   Y nw eeƒ e"d7k�r)e#ej$ƒd8k rþe%d9ƒ e &¡  e 'ej$d ¡�Z(e%ee(gej$d8d… ¢R Ž ƒ W d  ƒ dS 1 �s"w   Y  dS dS )>é    )ÚannotationsN©Úquote)ÚAnyé   )ÚImagezlist[Viewer]Ú_viewersÚ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ÚViewerr   ÚappendÚinsert)r	   r   © r   ú\/home/esfera/Documents/content_generation/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                   @  st   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#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.
        )Ú1ÚRGBAÚPNG)zI;16ÚLA)ÚmodeÚformatr   Ú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_filer3   ©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   )Úosr6   ÚexistsÚFileNotFoundErrorÚsystemr1   ©r(   r6   r   r   r   r   r4   r   s   zViewer.show_filer   c                 C  sJ   t tddƒo
ttdƒ}| rtjpt d¡}|r#t |dd|g¡ d S d S )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(   r6   ÚpyinstallerrC   r   r   r   Ú_remove_path_after_delay{   s   üÿÿzViewer._remove_path_after_delay©r   r   r   r   r   r   )r   r   r   r   ©r,   r-   r   r   r   r-   )r   r   r   r-   ©r6   r-   r   r   r   r   )r6   r-   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r$   Ú__annotations__r   r+   r1   r3   r'   r4   rI   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©Úcompress_levelÚsave_allr,   r-   r   r   r   c                 K  s2   d|v r
d}t |ƒ‚| 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/   r   r   r   r1   “   s   þÿzWindowsViewer.get_commandr6   r   c                 K  s2   t j |¡st‚tjdkrt  |¡ |  |¡ dS )r7   Úwin32r   )r8   r6   r9   r:   rA   ÚplatformÚ	startfilerI   r<   r   r   r   r4   ž   s   


zWindowsViewer.show_fileNrK   rL   ©rM   rN   rO   rP   r$   r   r1   r4   r   r   r   r   rS   �   s    

rS   r[   c                   @  rR   )Ú	MacViewerz2The default viewer on macOS using ``Preview.app``.r!   r   TrT   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   r1   ´   s    zMacViewer.get_commandr6   r   c                 K  s0   t j |¡st‚t ddd|g¡ |  |¡ dS )r7   Úopenz-azPreview.appr   )r8   r6   r9   r:   rF   ÚcallrI   r<   r   r   r   r4   »   s
   
zMacViewer.show_fileNrK   rL   r^   r   r   r   r   r_   ®   s    

r_   Ú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   TrT   r,   r-   r   r   r   útuple[str, str]c                 K  s   d S ©Nr   )r(   r,   r   r   r   r   Úget_command_exÎ   s   zUnixViewer.get_command_exc                 K  s(   | j |fi |¤Žd }|› dt|ƒ› �S )Nr   ra   )rj   r   rb   r   r   r   r1   Ò   s   zUnixViewer.get_commandN©r,   r-   r   r   r   rh   rK   )	rM   rN   rO   r$   r   ÚabcÚabstractmethodrj   r1   r   r   r   r   rg   Ê   s    
rg   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   rh   c                 K  s   d }}||fS )Núxdg-openr   )r(   r,   r   rc   rC   r   r   r   rj   Ü   s   zXDGViewer.get_command_exr6   r   c                 K  s"   t j |¡st‚t d|g¡ dS )r7   rp   r   ©r8   r6   r9   r:   rF   rG   r<   r   r   r   r4   à   s   zXDGViewer.show_fileNrk   rL   ©rM   rN   rO   rP   rj   r4   r   r   r   r   ro   ×   s    
ro   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   rh   c                 K  ó&   d }}|r|dt |ƒ› �7 }||fS )NÚdisplayz -title r   ©r(   r,   r   r   rc   rC   r   r   r   rj   ð   s   zDisplayViewer.get_command_exr6   r   c                 K  óH   t j |¡st‚dg}| d¡}|r|d|g7 }| |¡ t |¡ dS )r7   rv   r   z-titler   ©r8   r6   r9   r:   Úgetr   rF   rG   ©r(   r6   r   Úargsr   r   r   r   r4   ø   ó   


zDisplayViewer.show_fileri   ©r,   r-   r   r   r   r   r   rh   rL   rr   r   r   r   r   rt   ê   s
    ÿrt   c                   @  rn   )ÚGmDisplayViewerz*The GraphicsMagick ``gm display`` command.r,   r-   r   r   r   rh   c                 K  ó   d}d}||fS )NÚgmz
gm displayr   ©r(   r,   r   rC   rc   r   r   r   rj     ó   zGmDisplayViewer.get_command_exr6   r   c                 K  ó$   t j |¡st‚t dd|g¡ dS )r7   r�   rv   r   rq   r<   r   r   r   r4     ó   zGmDisplayViewer.show_fileNrk   rL   rr   r   r   r   r   r     ó    
r   c                   @  rn   )Ú	EogViewerz'The GNOME Image Viewer ``eog`` command.r,   r-   r   r   r   rh   c                 K  r€   )NÚeogzeog -nr   r‚   r   r   r   rj     rƒ   zEogViewer.get_command_exr6   r   c                 K  r„   )r7   rˆ   z-nr   rq   r<   r   r   r   r4   "  r…   zEogViewer.show_fileNrk   rL   rr   r   r   r   r   r‡     r†   r‡   c                   @  rs   )ÚXVViewerzX
    The X Viewer ``xv`` command.
    This viewer supports the ``title`` parameter.
    Nr,   r-   r   r   r   r   r   rh   c                 K  ru   )NÚxvz -name r   rw   r   r   r   rj   2  s   zXVViewer.get_command_exr6   r   c                 K  rx   )r7   rŠ   r   z-namer   ry   r{   r   r   r   r4   <  r}   zXVViewer.show_fileri   r~   rL   rr   r   r   r   r   r‰   ,  s
    ÿ
r‰   )r[   rf   rp   rv   r�   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_displayr5   r   r   r   r'   \  s   zIPythonViewer.show_imageNrJ   )rM   rN   rO   rP   r'   r   r   r   r   r‹   Y  s    r‹   )rv   Ú__main__é   z.Syntax: python3 ImageShow.py imagefile [title])r   )r	   r
   r   r   r   r   ri   )r   r   r   r   r   r   r   r   ))Ú
__future__r   rl   r8   rD   rF   rA   Úshlexr   Útypingr   Ú r   r   rQ   r   r   r   rS   r\   r_   ÚABCrg   ro   rt   r   r‡   r‰   rE   r‹   ÚIPython.displayrv   rŒ   ÚImportErrorrM   ÚlenÚargvÚprintÚexitrd   Úimr   r   r   r   Ú<module>   sf   K


 




ÿ
 $ÿû