B
    -¦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¡ržd dlZx$dD ]Ze e¡dk	r~eZP q~W 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¡sBytjddgtjd dS  tk
r@   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-rysjrues/PIL/EpsImagePlugin.pyÚhas_ghostscript3   s    r   c             C   sF  | 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}n’t ¡ \}}t |¡ |}t	|dƒh}| 
dtj¡ | ¡ }| 
d¡ |}x<|dkr4| t|d	ƒ¡}|sP |t|ƒ8 }| |¡ qúW W dQ R X d
dd| d|	 ddddd|› d|d  › d|d  › dd|ddg}tdk	r¨ts tdƒ‚t|d< zNd}tj d¡rÔt ¡ }| jtjO  _tj||d t 	|¡}| ¡  W dyt |¡ |rt |¡ W n tk
r,   Y nX X |j  ¡ }| ¡  |S )z!Render an image using Ghostscriptr   r   g      R@é   é   NÚnameÚwbi  r   z-qz-g%dx%dz-r%fx%fz-dBATCHz	-dNOPAUSEz-dSAFERz-sDEVICE=ppmrawz-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ÚdecoderÚoffsetÚdataÚlengthZbboxÚresZout_fdÚoutfileZinfile_tempÚinfileZin_fdÚfÚfsizeZ
lengthfileÚsÚcommandr   Zout_imr-   r   r   r   ÚGhostscript@   sz    






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 )N)r@   r1   r#   )rA   r4   Úwhencer   r   r   r#   ¨   s    zPSFile.seekc             C   sx   | j pdg}d | _ | j d¡}x*|dkrHt|ƒrH| |¡ | j d¡}q W | j d¡| _ | j dkrhd | _ d |¡ d¡S )Nó    r   s   
zlatin-1)r@   r1   r'   r)   ÚappendÚjoinÚdecode)rA   r<   Úcr   r   r   Úreadline¬   s    

zPSFile.readlineN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__rB   r$   ÚSEEK_SETr#   rI   r   r   r   r   r?   Ÿ   s   r?   c             C   s(   | d d… dkp&t | ƒdko&t| ƒdkS )Né   s   %!PSl   ÅP§ )r)   Úi32)Úprefixr   r   r   Ú_accept½   s    rR   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   rO   c          
   C   sÄ  |   | j¡\}}t| jƒ}| |¡ d }d| _d| _| ¡ }| d¡}x˜|rà|r¶t|ƒdkrjt	dƒ‚yt
 |¡}W n. tjk
r¦ } zt	dƒ|‚W d d }~X Y nX |r>| dd¡\}	}
|
| j|	< |	dkr¶yRd	d
„ |
 
¡ D ƒ}|d |d  |d |d  f| _dd| j |||ffg| _W n tk
r:   Y nX nxt |¡}|rž| d¡}	|	dkrdP |	d d… dkr’|	dd … | j|	d d… < n
d| j|	< n|d dkr®ntdƒ‚| ¡ }| d¡}|rJ|d d… dkrJP qJW xÎ|d d… dkr°t|ƒdkrt	dƒ‚|d d… dkr–|dd …  
d d¡d d… \}}}}t|ƒdkrRP y| jt|ƒ | _W n tk
r~   P Y nX t|ƒt|ƒf| _d S | ¡  d¡}|säP qäW |sÀtdƒ‚d S )NrU   )r   r   z
éÿ   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:é   rO   z!cannot determine EPS bounding box)Ú_find_offsetr1   r?   r#   ÚmodeÚ_sizerI   Ústripr)   ÚSyntaxErrorÚsplitÚmatchÚreÚerrorÚgroupÚinfor0   r/   Ú	ExceptionÚfieldr   r   Úmode_mapÚ
ValueError)rA   r6   r4   r1   ZboxZs_rawr<   ÚmÚeÚkÚvÚxÚyZbiÚmor   r   r   Ú_openÎ   sv    





"



$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é    rO   s   %!PSr   l   ÅP§ r]   znot an EPS file)r'   r#   r$   r%   r&   rP   rg   )rA   r1   r<   r6   r4   r   r   r   rc   2  s    

zEpsImageFile._find_offsetr   c             C   s>   | j s
d S t| j | j| j|ƒ| _| jj| _| jj| _g | _ d S )N)r/   r>   r0   r1   r-   rd   re   )rA   r2   r   r   r   r+   H  s    

zEpsImageFile.loadc             O   s   d S )Nr   )rA   ÚargsÚkwargsr   r   r   Ú	load_seekQ  s    zEpsImageFile.load_seekN)r   )rJ   rK   rL   rM   ÚformatÚformat_descriptionrp   ry   rc   r+   r}   r   r   r   r   rS   Æ   s   d
	rS   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.rT   )r]   r   s   imagerU   )r]   r   s   false 3 colorimagerV   )r]   rO   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   r   Ns   
%%%%EndBinary
s   grestore end
)	r+   rd   rq   r*   r0   r   r   r   Ú_save)r-   r1   Úfilenamer\   Úoperatorr   r   r   r‚   [  s@    









&


r‚   z.psz.epszapplication/postscript)r   )r   ) r$   r   rj   r   r
   r   r_   r   r   Ú_binaryr   rP   Úcompilerh   ro   r	   r   r   ÚshutilÚbinaryÚwhichr   r>   r?   rR   rS   r‚   Zregister_openr~   Zregister_saveZregister_extensionsZregister_mimer   r   r   r   Ú<module>   s8   



_	 
8