o
    f?                     @  s"  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Zd dlm	Z	 ddl
mZmZ ddlmZ ddlmZ edZed	Zdad
ed< dad)ddZd*ddZG dd dZd+ddZG dd dejZd,d-d$d%Zeejee e eje e!ejd&d'g e"ejd( dS ).    )annotationsN)IO   )Image	ImageFile)i32le)	deprecatez^%%([^:]*):[ \t]*(.*)[ \t]*$z^%[%!\w]([^:]*)[ \t]*$zstr | bool | None	gs_binaryreturnboolc                  C  s   t d u rJtjdr*td u r$dd l} dD ]}| |d ur!|a nqdata t duS ztjddgtj	d da W t duS  t
yI   da Y t duS w t duS )Nwinr   )gswin32cgswin64cgsFr   z	--version)stdout)r	   sysplatform
startswithgs_windows_binaryshutilwhich
subprocess
check_callDEVNULLOSError)r   binary r   K/home/ubuntu/webapp/venv/lib/python3.10/site-packages/PIL/EpsImagePlugin.pyhas_ghostscript.   s*   r   Fc                 C  s  t  s	d}t|| d \}} }}|\}	}
t|pd}|d | }|d | }d| |
d |
d   }d| |
d |
d   }t \}}t| d}t|dr\tj	|j
r\|j
}nRt \}}t| |}t|d	8}|dtj | }|d |}|dkr|t|d
}|sn|t|8 }|| |dksW d   n1 sw   Y  |rdnd}tdd|dd|dd|dd|ddddd| d| d|
d   d|
d   dd|ddg}z?d}tjdrt }| jtjO  _tj||d t|}|  W zt| |rt| W n& ty&   Y nw zt| |r7t| W w W w  tyB   Y w w |j ! }|  |S )z!Render an image using Ghostscriptz%Unable to locate Ghostscript on pathsr   r   g      R@      Nnamewbi  pngalphappmrawz-qz-gdxz-rfz-dBATCHz	-dNOPAUSEz-dSAFERz	-sDEVICE=z-sOutputFile=z-c z
 translatez-fshowpager   )startupinfo)"r   r   inttempfilemkstemposclosehasattrpathexistsr!   openseekioSEEK_ENDtellreadminlenwriter	   r   r   r   r   STARTUPINFOdwFlagsSTARTF_USESHOWWINDOWr   r   loadunlinkimcopy)tilesizefpscaletransparencymsgdecoderoffsetdatalengthbboxwidthheightres_xres_yout_fdoutfileinfile_tempinfilein_fdr'   fsize
lengthfilesdevicecommandr*   out_imrA   r   r   r   GhostscriptE   s   









r]   c                   @  s0   e Zd ZdZdd ZejfddZddd	Zd
S )PSFilez
    Wrapper for bytesio object that treats either CR or LF as end of line.
    This class is no longer used internally, but kept for backwards compatibility.
    c                 C  s   t dddd || _d | _d S )Nr^      zSIf you need the functionality of this class you will need to implement it yourself.)action)r   rE   char)selfrE   r   r   r   __init__   s   
zPSFile.__init__c                 C  s   d | _ | j|| d S N)ra   rE   r4   )rb   rJ   whencer   r   r   r4      s   zPSFile.seekr
   strc                 C  s   | j pdg}d | _ | jd}|dvr*t|r*|| | jd}|dvr*t|s| jd| _ | j dv r9d | _ d|dS )N    r      
latin-1)ra   rE   r8   r:   appendjoindecode)rb   rY   cr   r   r   readline   s   

zPSFile.readlineN)r
   rf   )	__name__
__module____qualname____doc__rc   r5   SEEK_SETr4   rn   r   r   r   r   r^      s
    
r^   prefixbytesc                 C  s(   | d d dkpt | dkot| dkS )N      %!PS   P )r:   i32)rt   r   r   r   _accept   s   (rz   c                   @  sL   e Zd ZdZdZdZdddddZdddZdd ZdddZ	dddZ
dS )EpsImageFilez.EPS File Parser for the Python Imaging LibraryEPSzEncapsulated PostscriptLLABRGBCMYK)r   r   r    rv   r
   Nonec                   s   j\ j d_d _td}t|}d}d}ddd'fdd	}d( fdd}	 jd}|dkrL|dkrK|rJ|  nn0|dv rV|dkrUq6n&|dkrq|d tdkrhd}t	||ro|  d}d}|d ||< |d7 }q6|r|d tdks|d d dkr|  d}q6t
|d | d}	||	st|	}
|
r|
d}|d d dkr|dd  jd< ndj|< n|	d dkrnzd}t|ns|d d dkr|d| d d}dd  |d d! D \}}}}|dkrd"_n|dkrzj| _W n ty   Y n5w n3||f_d S |d d# d$kr'n"r;r;t
|d | d}	||	 n|d d d%krFdd}q7jsSd&}t|d S ))Nr      r   TFr
   r   c                    s0   d j vrd} t| d j vrd} t| dS )z
            The EPS specification requires that some headers exist.
            This should be checked when the header comments formally end,
            when image data starts, or when the file ends, whichever comes first.
            PS-Adobez'EPS header missing "%!PS-Adobe" commentBoundingBoxz*EPS header missing "%%BoundingBox" commentN)infoSyntaxError)rH   )rb   r   r   check_required_header_comments   s   

z:EpsImageFile._open.<locals>.check_required_header_commentsrY   rf   r   c              
     s   zt | }W n tjy } zd}t||d }~ww |s dS |dd\}}|j|< |dkru|dkr9ddS jr@ruruz*dd	 |  D }|d |d
  |d |d  f_ddj  |ffg_	W dS  t
yt   Y dS w dS )Nnot an EPS fileFr   r   r   z(atend)Tc                 S  s   g | ]}t t|qS r   )r+   float).0ir   r   r   
<listcomp>
  s    z=EpsImageFile._open.<locals>._read_comment.<locals>.<listcomp>r   r    epsr   r   )splitmatchreerrorr   groupr   _sizerD   rC   	Exception)rY   merH   kvboxrL   rJ   reading_trailer_commentsrb   trailer_reachedr   r   _read_comment   s4   

"z)EpsImageFile._open.<locals>._read_commentr   rg   rh   %r      s   %%EndCommentsri      r   	    zbad EPS headerr_   s   %ImageData:   c                 s  s    | ]}t |V  qd S rd   )r+   )r   valuer   r   r   	<genexpr>]  s    
z%EpsImageFile._open.<locals>.<genexpr>rv   1   s   %%EOFs	   %%Trailerz!cannot determine EPS bounding boxr
   r   )rY   rf   r
   r   )_find_offsetrE   r4   _moder   	bytearray
memoryviewr8   ordr   rf   fieldr   r   r   r   r   mode_map
ValueError)rb   byte_arrbytes_mv
bytes_readreading_header_commentsr   r   byterH   rY   r   r   image_data_valuescolumnsrows	bit_depthmode_idr   r   r   _open   s    





fzEpsImageFile._openc                 C  sp   | d}|dkr|dtj | }d}||fS t|dkr2| d}t|}t|d}||fS d}t|)Nrv   rw   r   rx   r   r   )r8   r4   r5   r6   r7   ry   r   )rb   rE   rY   rL   rJ   rH   r   r   r   r   {  s   


zEpsImageFile._find_offsetr   Fc                 C  sD   | j rt| j | j| j||| _| jj| _| jj| _g | _ tj	| S rd   )
rC   r]   rD   rE   rA   moder   r   r   r?   )rb   rF   rG   r   r   r   r?     s   

zEpsImageFile.loadposr+   c                 C  s   d S rd   r   )rb   r   r   r   r   	load_seek  s   zEpsImageFile.load_seekNr   r   F)r   r+   r
   r   )ro   rp   rq   rr   formatformat_descriptionr   r   r   r?   r   r   r   r   r   r{      s    
 $
	r{   rA   Image.ImagerE   	IO[bytes]filenamestr | bytesr   r+   r   c                 C  s  |    | jdkrd}n| jdkrd}n| jdkrd}nd}t||rT|d |d	 |d
| j  |d |d |d |d| j  |d|  |d |d |d| jd |d    |d| j  |d| j  |d| jd | jd | jd f  |d ||d d  t|dr|  t| |dd| j ddfg |d |d  t|dr|  dS dS )!z*EPS Writer for the Python Imaging Library.r}   )r   r   s   imager   )r   r    s   false 3 colorimager   )r   rv   s   false 4 colorimagezimage mode is not supporteds   %!PS-Adobe-3.0 EPSF-3.0
s   %%Creator: PIL 0.1 EpsEncode
s   %%%%BoundingBox: 0 0 %d %d
s   %%Pages: 1
s   %%EndComments
s   %%Page: 1 1
s   %%ImageData: %d %d s   %d %d 0 1 1 "%s"
s   gsave
s   10 dict begin
s   /buf %d string def
r   r   s   %d %d scale
s   %d %d 8
s   [%d 0 0 -%d 0 %d]
s+   { currentfile buf readhexstring pop } bind
r      
flushr   r   Ns   
%%%%EndBinary
s   grestore end
)	r?   r   r   r;   rD   r0   r   r   _save)rA   rE   r   r   operatorrH   r   r   r   r     sD   









&




r   z.psz.epszapplication/postscript)r
   r   r   )rt   ru   r
   r   )r   )
rA   r   rE   r   r   r   r   r+   r
   r   )#
__future__r   r5   r.   r   r   r   r,   typingr   r   r   r   _binaryr   ry   
_deprecater   compiler   r   r	   __annotations__r   r   r]   r^   rz   r{   r   register_openr   register_saveregister_extensionsregister_mimer   r   r   r   <module>   s4   



]
%	 U4