a
    ֶ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rd dlZdD ]Zeedur|eZ qq|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)Zgswin32cZgswin64cgsFc                   C   sF   t rdS tjdsBztjddgtjd W dS  ty@   Y n0 dS )NTr   r   z	--version)stdoutF)gs_windows_binarysysplatform
startswith
subprocess
check_callDEVNULLOSError r   r   b/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-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rtj|jr|j}nt \}}t| |}t	|dp}|
dtj | }|
d |}|dkr4|t|d	}|sq4|t|8 }|| qW d   n1 sJ0    Y  |r^d
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< zd}tjdrt }| jtjO  _tj||d t	|}|  W zt| |r:t| W n tyP   Y n0 n6zt| |rpt| W n ty   Y n0 0 |j  }|  |S )z!Render an image using Ghostscriptr   r   g      R@      Nnamewbi  ZpngalphaZppmrawr   z-qz-g%dx%dz-r%fx%fz-dBATCHz	-dNOPAUSEz-dSAFERz	-sDEVICE=z-sOutputFile=z-c z
 translatez-fZ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   ZSTARTUPINFOZdwFlagsZSTARTF_USESHOWWINDOWr   r   loadunlinkimcopy)tilesizefpscaletransparencydecoderoffsetdatalengthZbboxresZout_fdoutfileZinfile_tempinfileZin_fdffsizeZ
lengthfilesZdevicecommandr   Zout_imr-   r   r   r   Ghostscript@   s    



,





r?   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)r1   char)selfr1   r   r   r   __init__   s    zPSFile.__init__c                 C   s   d | _ | j|| d S rA   )rB   r1   r#   )rC   r5   whencer   r   r   r#      s    zPSFile.seekc                 C   st   | j pdg}d | _ | jd}|dvrFt|rF|| | jd}q| jd| _ | j dv rdd | _ d|dS )N    r   s   
zlatin-1)rB   r1   r'   r)   appendjoindecode)rC   r=   cr   r   r   readline   s    

zPSFile.readlineN)	__name__
__module____qualname____doc__rD   r$   SEEK_SETr#   rK   r   r   r   r   r@      s   r@   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    rV   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 LibraryZEPSzEncapsulated PostscriptLZLABRGBCMYK)r   r   r   rQ   c              
   C   s  |  | j\}}t| j}|| d }d| _d| _| }|d}|r|rt|dkrft	dzt
|}W n0 tjy } zt	d|W Y d }~n
d }~0 0 |r:|dd\}	}
|
| j|	< |	dkrzRd	d
 |

 D }|d |d  |d |d  f| _dd| j |||ffg| _W n ty6   Y n0 nzt|}|r|d}	|	dkrbq|	d d dkr|	dd  | j|	d d < n
d| j|	< n|d dkrntd| }|d}|rF|d d dkrFqqF|d d dkrt|dkrt	d|d d dkr|dd  
d dd d \}}}}t|dkrPqz| jt| | _W n ty~   Y qY n0 t|t|f| _d S | d}|sqq|stdd S )NrY   )r   r   z
   not an EPS filer   r   ZBoundingBoxc                 S   s   g | ]}t t|qS r   )r   float).0ir   r   r   
<listcomp>   rF   z&EpsImageFile._open.<locals>.<listcomp>r   r   epsr   r   ZEndComments   zPS-Adobe	    %zbad EPS header   z%ImageData:   rQ   z!cannot determine EPS bounding box)_find_offsetr1   r@   r#   mode_sizerK   stripr)   SyntaxErrorsplitmatchreerrorgroupinfor0   r/   	Exceptionfieldr   r   mode_map
ValueError)rC   r7   r5   r1   ZboxZs_rawr=   mekvxyZbimor   r   r   _open   sx    


 

"




$zEpsImageFile._openc                 C   sj   | d}|d d dkr6|dtj | }d}n,t|ddkrZt|d}t|d}ntd||fS )N   rQ   rR   r   rS   rc   r\   )r'   r#   r$   r%   r&   rT   rm   )rC   r1   r=   r7   r5   r   r   r   ri   4  s    

zEpsImageFile._find_offsetr   Fc                 C   s@   | j s
d S t| j | j| j||| _| jj| _| jj| _g | _ d S rA   )r/   r?   r0   r1   r-   rj   rk   )rC   r2   r3   r   r   r   r+   J  s    

zEpsImageFile.loadc                 O   s   d S rA   r   )rC   argskwargsr   r   r   	load_seekS  s    zEpsImageFile.load_seekN)r   F)rL   rM   rN   rO   formatformat_descriptionrv   r   ri   r+   r   r   r   r   r   rW      s   d
	rW   c                 C   s  |    | jdkrd}n(| jdkr(d}n| jdkr8d}ntd|r|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rJ|  t| |dd| j ddfg |d |d  t|dr|  dS )!z*EPS Writer for the Python Imaging Library.rX   )rc   r   s   imagerY   )rc   r   s   false 3 colorimagerZ   )rc   rQ   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      
flushra   rb   Ns   
%%%%EndBinary
s   grestore end
)	r+   rj   rw   r*   r0   r   r   r   _save)r-   r1   filenamera   operatorr   r   r   r   ]  s@    









&


r   z.psz.epszapplication/postscript)r   F)r   ) r$   r   rp   r   r
   r   re   r   r   _binaryr   rT   compilern   ru   r	   r   r   shutilbinarywhichr   r?   r@   rV   rW   r   Zregister_openr   Zregister_saveZregister_extensionsZregister_mimer   r   r   r   <module>   s8   


a	 
8