o
    Zh?                     @  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   )Zgswin32cZgswin64cgsFr   z	--version)stdout)r	   sysplatform
startswithgs_windows_binaryshutilwhich
subprocess
check_callDEVNULLOSError)r   binary r   I/var/www/html/lang_env/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  ZpngalphaZppmrawz-qz-gdxz-rfz-dBATCHz	-dNOPAUSEz-dSAFERz	-sDEVICE=z-sOutputFile=z-c z
 translatez-fZ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   ZSTARTUPINFOZdwFlagsZSTARTF_USESHOWWINDOWr   r   loadunlinkimcopy)tilesizefpscaletransparencymsgdecoderoffsetdatalengthZbboxwidthheightZres_xZres_yZout_fdoutfileZinfile_tempinfileZin_fdr#   fsizeZ
lengthfilesZdevicecommandr%   Zout_imr9   r   r   r   GhostscriptE   s   









rL   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 )NrM      zSIf you need the functionality of this class you will need to implement it yourself.)action)r   r=   char)selfr=   r   r   r   __init__   s   
zPSFile.__init__c                 C  s   d | _ | j|| d S N)rP   r=   r/   )rQ   rB   whencer   r   r   r/      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)rP   r=   r3   r5   appendjoindecode)rQ   rJ   cr   r   r   readline   s   

zPSFile.readlineN)r
   rU   )	__name__
__module____qualname____doc__rR   r0   SEEK_SETr/   r]   r   r   r   r   rM      s
    
rM   prefixbytesc                 C  s(   | d d dkpt | dkot| dkS )N      %!PS   P )r5   i32)rc   r   r   r   _accept   s   (ri   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 LibraryZEPSzEncapsulated PostscriptLZLABRGBCMYK)r   r   r   re   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 ))Nrl      r   TFr
   rn   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)r@   )rQ   r   r   check_required_header_comments   s   

z:EpsImageFile._open.<locals>.check_required_header_commentsrJ   rU   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   rq   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errorrs   grouprr   _sizer<   r;   	Exception)rJ   mer@   kvboxrD   rB   Zreading_trailer_commentsrQ   Ztrailer_reachedr   r   _read_comment   s4   

"z)EpsImageFile._open.<locals>._read_commentr   rV   rW   %ru      s   %%EndCommentsrX      rp   	    zbad EPS headerrN   s   %ImageData:   c                 s  s    | ]}t |V  qd S rS   )r&   )rw   valuer   r   r   	<genexpr>]  s    
z%EpsImageFile._open.<locals>.<genexpr>re   1   s   %%EOFs	   %%Trailerz!cannot determine EPS bounding boxr
   rn   )rJ   rU   r
   r   )_find_offsetr=   r/   _moder   	bytearray
memoryviewr3   ordrs   rU   fieldr}   r   rr   r   r|   mode_map
ValueError)rQ   Zbyte_arrZbytes_mvZ
bytes_readZreading_header_commentsrt   r   byter@   rJ   r   r   Zimage_data_valuescolumnsrowsZ	bit_depthZ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|)Nre   rf   r   rg   r   ru   )r3   r/   r0   r1   r2   rh   rs   )rQ   r=   rJ   rD   rB   r@   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 rS   )
r;   rL   r<   r=   r9   moder   r   r   r7   )rQ   r>   r?   r   r   r   r7     s   

zEpsImageFile.loadposr&   c                 C  s   d S rS   r   )rQ   r   r   r   r   	load_seek  s   zEpsImageFile.load_seekNr   r   F)r   r&   r
   rn   )r^   r_   r`   ra   formatformat_descriptionr   r   r   r7   r   r   r   r   r   rj      s    
 $
	rj   r9   Image.Imager=   	IO[bytes]filenamestr | bytesrz   r&   rn   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.rk   )r   r   s   imagerl   )r   r   s   false 3 colorimagerm   )r   re   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      
flushrz   r{   Ns   
%%%%EndBinary
s   grestore end
)	r7   r   r   r6   r<   r+   r   r   _save)r9   r=   r   rz   operatorr@   r   r   r   r     sD   









&




r   z.psz.epszapplication/postscript)r
   r   r   )rc   rd   r
   r   )r   )
r9   r   r=   r   r   r   rz   r&   r
   rn   )#
__future__r   r0   r)   r~   r   r   r'   typingr   r   r   r   _binaryr   rh   Z
_deprecater   compiler|   r   r	   __annotations__r   r   rL   rM   ri   rj   r   Zregister_openr   Zregister_saveZregister_extensionsZregister_mimer   r   r   r   <module>   s4   



]
%	 U4