U
    %ìdä/  ã                   @   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¡rœd dlZdD ]Ze e¡dk	r|eZ qœ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)Zgswin32cZgswin64cÚgsFc                   C   sH   t rdS tj d¡sDztjddgtjd W dS  tk
rB   Y nX dS )NTr   r   z	--version)ÚstdoutF)Úgs_windows_binaryÚsysÚplatformÚ
startswithÚ
subprocessÚ
check_callÚDEVNULLÚOSError© r   r   ú6/tmp/pip-unpacked-wheel-pyoxjemt/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ƒr®tj |j¡r®|j}nt ¡ \}}t |¡ |}t	|dƒf}| 
dtj¡ | ¡ }| 
d¡ |}|dkr4| t|d	ƒ¡}|sq4|t|ƒ8 }| |¡ qøW 5 Q R X |rHd
nd}ddd| d|
 dddd|› d|› d|	d  › d|	d  › dd|ddg}tdk	r¾ts¶d}t|ƒ‚t|d< zNd}tj d¡rêt ¡ }| jtjO  _tj||d t 	|¡}| ¡  W 5 zt |¡ |r*t |¡ W n tk
rB   Y nX X |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   Úunlinkr
   r   r   r   ZSTARTUPINFOZdwFlagsZSTARTF_USESHOWWINDOWr   r   ÚloadÚ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ÚcommandÚmsgr   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 rB   )rC   r1   r#   )rD   r5   Úwhencer   r   r   r#   «   s    zPSFile.seekc                 C   st   | j pdg}d | _ | j d¡}|dkrFt|ƒrF| |¡ | j d¡}q| j d¡| _ | j dkrdd | _ d |¡ d¡S )Nó    r   s   
zlatin-1)rC   r1   r'   r)   ÚappendÚjoinÚdecode)rD   r=   Úcr   r   r   Úreadline¯   s    

zPSFile.readlineN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__rE   r$   ÚSEEK_SETr#   rL   r   r   r   r   rA   ¢   s   rA   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    rW   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   rR   c              
   C   sò  |   | j¡\}}t| jƒ}| |¡ d }d| _d| _| ¡ }| d¡}|rì|rÀt|ƒdkrjd}t	|ƒ‚zt
 |¡}W n2 tjk
rª }	 zd}t	|ƒ|	‚W 5 d }	~	X Y nX |rB| dd¡\}
}|| j|
< |
dkrÀzRd	d
„ | 
¡ D ƒ}|d |d  |d |d  f| _dd| j |||ffg| _W n tk
r>   Y nX n~t |¡}|r¤| d¡}
|
dkrjqì|
d d… dkr˜|
dd … | j|
d d… < n
d| j|
< n|d dkr´nd}t|ƒ‚| ¡ }| d¡}|rF|d d… dkrFqìqF|d d… dkrÜt|ƒdkrd}t	|ƒ‚|d d… dkrÀ|dd …  
d d¡d d… \}}}}t|ƒdkrdd| _nFt|ƒdkrÜz| jt|ƒ | _W n tk
r¢   Y qÜY nX nqÜt|ƒt|ƒf| _d S | ¡  d¡}|sìqÜqì|sîd}t|ƒ‚d S )NrZ   )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>ú   s     z&EpsImageFile._open.<locals>.<listcomp>r   r   Úeps©r   r   ZEndCommentsé   zPS-Adobeé	   Ú ú%zbad EPS headeré   z%ImageData:é   rR   Ú1z!cannot determine EPS bounding box)Ú_find_offsetr1   rA   r#   ÚmodeÚ_sizerL   Ústripr)   ÚSyntaxErrorÚsplitÚmatchÚreÚerrorÚgroupÚinfor0   r/   Ú	ExceptionÚfieldr   r   Úmode_mapÚ
ValueError)rD   r7   r5   r1   ZboxZs_rawr=   r?   ÚmÚeÚkÚvÚxÚyZbiÚmor   r   r   Ú_openÑ   s†    




"ÿ




$zEpsImageFile._openc                 C   sn   |  d¡}|d d… dkr6| dtj¡ | ¡ }d}n0t|dƒdkrZt|dƒ}t|dƒ}nd}t|ƒ‚||fS )Né    rR   rS   r   rT   rd   r]   )r'   r#   r$   r%   r&   rU   ro   )rD   r1   r=   r7   r5   r?   r   r   r   rk   =  s    

zEpsImageFile._find_offsetr   Fc                 C   sD   | j r8t| j | j| j||ƒ| _| jj| _| jj| _g | _ tj | ¡S rB   )	r/   r@   r0   r1   r-   rl   rm   r   r,   )rD   r2   r3   r   r   r   r,   T  s    

zEpsImageFile.loadc                 O   s   d S rB   r   )rD   ÚargsÚkwargsr   r   r   Ú	load_seek]  s    zEpsImageFile.load_seekN)r   F)rM   rN   rO   rP   ÚformatÚformat_descriptionrx   r   rk   r,   r…   r   r   r   r   rX   É   s   l
	rX   c                 C   s˜  |   ¡  | jdkrd}n,| jdkr(d}n| jdkr8d}nd}t|ƒ‚|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ƒrN| ¡  t | |dd| j ddfg¡ | d¡ | d ¡ t|dƒr”| ¡  dS )!z*EPS Writer for the Python Imaging Library.rY   )rd   r   s   imagerZ   )rd   r   s   false 3 colorimager[   )rd   rR   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   ó   
Úflushrb   rc   Ns   
%%%%EndBinary
s   grestore end
)	r,   rl   ry   r*   r0   r   r‰   r   Ú_save)r-   r1   Úfilenamerb   Úoperatorr?   r   r   r   rŠ   g  sB    









&


rŠ   z.psz.epszapplication/postscript)r   F)r   ) r$   r   rr   r   r
   r   rf   r   r   Ú_binaryr   rU   Úcompilerp   rw   r	   r   r   ÚshutilÚbinaryÚwhichr   r@   rA   rW   rX   rŠ   Zregister_openr†   Zregister_saveZregister_extensionsZregister_mimer   r   r   r   Ú<module>   s8   


b	 
9