U
    ®&^6/  ã                   @   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-install-a1j0c_p1/Pillow/PIL/EpsImagePlugin.pyÚhas_ghostscript3   s    r   c                 C   s<  | d \}} }}|\}}t |ƒp"d}|d | |d | f}td|d  |d |d   ƒt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¡ |}|dkr>| t|d	ƒ¡}|s$q>|t|ƒ8 }| |¡ q W 5 Q R X d
dd| d|	 ddddd| dd|d  |d  f 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 5 z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=%sz-cz%d %d translatez-fZshowpagez%Unable to locate Ghostscript on pathsr   )Ústartupinfo)"ÚintÚfloatÚ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ÚdecoderÚoffsetÚdataÚlengthZbboxÚresZout_fdÚoutfileZinfile_tempÚinfileZin_fdÚfÚfsizeZ
lengthfileÚsÚcommandr   r-   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 r@   )rA   r1   r#   )rB   r4   Úwhencer   r   r   r#   ¦   s    zPSFile.seekc                 C   sb   | j pd}d | _ | j d¡}|dkr:|| }| j d¡}q| j d¡| _ | j dkrXd | _ | d¡S )Nó    r   s   
úlatin-1)rA   r1   r'   Údecode)rB   r<   Úcr   r   r   Úreadlineª   s    

zPSFile.readlineN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__rC   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é   ó   %!PSì   ÅP§ )r)   Úi32)Úprefixr   r   r   Ú_accept»   s    rT   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¡}|rÐ|r¤t|ƒdkrft	dƒ‚zt
 |¡}W n tjk
r’   t	dƒ‚Y nX |r*| 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 nzt |¡}|rŒ| d¡}|dkrRqÐ|d d… dkr€|dd … | j|d d… < n
d| j|< n|d dkrœntdƒ‚| ¡ }| d¡}|rF|d d… dkrFqÐqF|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r@q¤z| jt|ƒ | _W n tk
rp   Y q¤Y nX t|
ƒt|ƒf| _d S | ¡  d¡}|sÐq¤qÐ|s²tdƒ‚d S )NrW   )r   r   z
éÿ   únot an EPS filer   r   ZBoundingBoxc                 S   s   g | ]}t t|ƒƒ‘qS r   )r   r   )Ú.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)rB   r6   r4   r1   ZboxZs_rawr<   ÚmÚkÚvÚxÚyZbiÚmor   r   r   Ú_openÌ   sx    




"ÿ




$zEpsImageFile._openc                 C   s|   |  d¡}|d d… dkr6| dtj¡ | ¡ }d}n>t|dd… ƒdkrlt|dd… ƒ}t|dd… ƒ}ntdƒ‚||fS )	Né    rO   rP   r   rQ   r`   é   rZ   )r'   r#   r$   r%   r&   rR   rj   )rB   r1   r<   r6   r4   r   r   r   rf   0  s    
zEpsImageFile._find_offsetr   c                 C   s>   | j s
d S t| j | j| j|ƒ| _| jj| _| jj| _g | _ d S r@   )r/   r>   r0   r1   r-   rg   rh   )rB   r2   r   r   r   r,   F  s    

zEpsImageFile.loadc                 O   s   d S r@   r   )rB   ÚargsÚkwargsr   r   r   Ú	load_seekO  s    zEpsImageFile.load_seekN)r   )rJ   rK   rL   rM   ÚformatÚformat_descriptionrs   r{   rf   r,   r€   r   r   r   r   rU   Ä   s   d
	rU   c                 C   sÐ  |   ¡  | jdkrd}n(| jdkr(d}n| jdkr8d}ntdƒ‚|}d}|tjkrdtj|d	d
}d}zT|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ƒrr| ¡  t | |d d!| j	 dd"fg¡ | d#¡ | d$¡ t
|dƒr¸| ¡  W 5 |rÊ| ¡  X d"S )%z*EPS Writer for the Python Imaging Library.rV   )r`   r   ÚimagerW   )r`   r   zfalse 3 colorimagerX   )r`   rO   zfalse 4 colorimagezimage mode is not supportedFrF   )ÚencodingTz%!PS-Adobe-3.0 EPSF-3.0
z%%Creator: PIL 0.1 EpsEncode
z%%%%BoundingBox: 0 0 %d %d
z%%Pages: 1
z%%EndComments
z%%Page: 1 1
z%%ImageData: %d %d z%d %d 0 1 1 "%s"
zgsave
z10 dict begin
z/buf %d string def
r   r   z%d %d scale
z%d %d 8
z[%d 0 0 -%d 0 %d]
z+{ currentfile buf readhexstring pop } bind
r   Ú
Úflushr^   r_   Nz
%%%%EndBinary
zgrestore end
)r,   rg   rt   r
   r   r$   ÚTextIOWrapperÚdetachr*   r0   r   r†   r   Ú_save)r-   r1   Úfilenamer^   ÚoperatorZbase_fpZ
wrapped_fpr   r   r   r‰   Y  sP    










&


r‰   z.psz.epszapplication/postscript)r   )r   ) r$   r   rm   r   r
   r   rb   r   r   Ú_binaryr   rR   Úcompilerk   rr   r	   r   r   ÚshutilÚbinaryÚwhichr   r>   r?   rT   rU   r‰   Zregister_openr   Zregister_saveZregister_extensionsZregister_mimer   r   r   r   Ú<module>   s8   


]	 
B