o
    _#a.                     @   s"  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mZ ddl	m
Z edZedZdZejdrNd dlZdD ]ZeedurKeZ nq>d	Zd
d ZdddZG dd dZdd ZG dd dejZ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 )    N   )Image	ImageFile)i32lez^%%([^:]*):[ \t]*(.*)[ \t]*$z^%[%!\w]([^:]*)[ \t]*$win)gswin32cgswin64cgsFc                   C   sH   t rdS tjds"ztjddgtjd W dS  ty!   Y dS w dS )NTr   r	   z	--version)stdoutF)gs_windows_binarysysplatform
startswith
subprocess
check_callDEVNULLOSError r   r   4/usr/lib/python3/dist-packages/PIL/EpsImagePlugin.pyhas_ghostscript3   s   r   c                 C   s  | d \}} }}|\}}	t |pd}|d | |d | f}d|d  |	d |	d   d|d  |	d |	d   f}
t \}}t| d}t|drWtj|jrW|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}ddd| d|
 dddd| d| d|	d   d|	d   dd|ddg}tdurtstdt|d< 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| |r4t| W w W w  ty?   Y w w |j  }|  |S )z!Render an image using Ghostscriptr   r   g      R@      Nnamewbi  pngalphappmrawr	   z-qz-g%dx%dz-r%fx%fz-dBATCHz	-dNOPAUSEz-dSAFERz	-sDEVICE=z-sOutputFile=z-c z
 translatez-fshowpagez%Unable to locate Ghostscript on pathsr   )startupinfo)!inttempfilemkstemposclosehasattrpathexistsr   openseekioSEEK_ENDtellreadminlenwriter   r   r   r   r   r   STARTUPINFOdwFlagsSTARTF_USESHOWWINDOWr   r   loadunlinkimcopy)tilesizefpscaletransparencydecoderoffsetdatalengthbboxresout_fdoutfileinfile_tempinfilein_fdffsize
lengthfilesdevicecommandr   out_imr5   r   r   r   Ghostscript@   s   









rN   c                   @   s.   e Zd ZdZdd ZejfddZdd ZdS )	PSFilezP
    Wrapper for bytesio object that treats either CR or LF as end of line.
    c                 C   s   || _ d | _d S N)r9   char)selfr9   r   r   r   __init__   s   
zPSFile.__init__c                 C   s   d | _ | j|| d S rP   )rQ   r9   r(   )rR   r=   whencer   r   r   r(      s   zPSFile.seekc                 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   s   
zlatin-1)rQ   r9   r,   r.   appendjoindecode)rR   rJ   cr   r   r   readline   s   

zPSFile.readlineN)	__name__
__module____qualname____doc__rS   r)   SEEK_SETr(   rZ   r   r   r   r   rO      s
    rO   c                 C   s(   | d d dkpt | dkot| dkS )N      %!PS   P )r.   i32)prefixr   r   r   _accept   s   (re   c                   @   sH   e Zd ZdZdZdZdddddZd	d
 Zdd ZdddZ	dd Z
dS )EpsImageFilez.EPS File Parser for the Python Imaging LibraryEPSzEncapsulated PostscriptLLABRGBCMYK)r   r   r   r`   c              
   C   s  |  | j\}}t| j}|| d }d| _d| _| }|d}|r|rt|dkr1t	dzt
|}W n tjyJ } zt	d|d }~ww |r|dd\}	}
|
| j|	< |	dkrz)d	d
 |

 D }|d |d  |d |d  f| _dd| j |||ffg| _W nB ty   Y n:w n8t|}|r|d}	|	dkrn=|	d d dkr|	dd  | j|	d d < nd| j|	< n|d dkrntd| }|d}|r|d d dkrn|s%|d d dkrIt|dkrt	d|d d dkr6|dd  
d dd d \}}}}t|dkrn3z
| jt| | _W n
 ty*   Y nw t|t|f| _d S | d}|sAn|d d dks|sPtdd S )Nrj   )r   r   z
   not an EPS filer   r   BoundingBoxc                 S   s   g | ]}t t|qS r   )r   float).0ir   r   r   
<listcomp>   s    z&EpsImageFile._open.<locals>.<listcomp>r   r   epsr   r   EndComments   zPS-Adobe	    %zbad EPS header   z%ImageData:   r`   z!cannot determine EPS bounding box)_find_offsetr9   rO   r(   mode_sizerZ   stripr.   SyntaxErrorsplitmatchreerrorgroupinfor8   r7   	Exceptionfieldr   r   mode_map
ValueError)rR   r?   r=   r9   boxs_rawrJ   mekvxybimor   r   r   _open   s   




"



5$zEpsImageFile._openc                 C   sn   | d}|d d dkr|dtj | }d}||fS t|ddkr3t|d}t|d}||fS td)N   r`   ra   r   rb   rv   rm   )r,   r(   r)   r*   r+   rc   r   )rR   r9   rJ   r?   r=   r   r   r   r|   4  s   


zEpsImageFile._find_offsetr   Fc                 C   s@   | j sd S t| j | j| j||| _| jj| _| jj| _g | _ d S rP   )r7   rN   r8   r9   r5   r}   r~   )rR   r:   r;   r   r   r   r3   J  s   


zEpsImageFile.loadc                 O   s   d S rP   r   )rR   argskwargsr   r   r   	load_seekS  s   zEpsImageFile.load_seekNr   F)r[   r\   r]   r^   formatformat_descriptionr   r   r|   r3   r   r   r   r   r   rf      s    d
	rf   c                 C   s  |    | jdkrd}n| jdkrd}n| jdkrd}ntd|rR|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.rh   )rv   r   s   imagerj   )rv   r   s   false 3 colorimagerk   )rv   r`   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      
flushrs   rt   Ns   
%%%%EndBinary
s   grestore end
)	r3   r}   r   r/   r8   r$   r   r   _save)r5   r9   filenamers   operatorr   r   r   r   ]  sB   









&




r   z.psz.epszapplication/postscriptr   )r   ) r)   r"   r   r   r   r    rx   r   r   _binaryr   rc   compiler   r   r   r   r   shutilbinarywhichr   rN   rO   re   rf   r   register_openr   register_saveregister_extensionsregister_mimer   r   r   r   <module>   s<   


a	 
8