3
	jQc`2                 @   s:  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	 dZ
e jdZe jdZdZejjdrd dlZeed	r~ejZnd dlZejjZx"dD ]Zeedk	reZP qW dZdd ZdddZG dd deZdd ZG dd dejZdddZej ej!ee ej"ej!e ej#ej!ddg ej$ej!d dS )     N   )Image	ImageFile)i32lez0.5z^%%([^:]*):[ \t]*(.*)[ \t]*$z^%[%!\w]([^:]*)[ \t]*$winwhichgswin32cgswin64cgsFc              C   sd   t rdS tjjds`dd l} y.ttjd}| jddg|d W d Q R X dS  t	k
r^   Y nX dS )	NTr   r   wbr
   z	--version)stdoutF)
gs_windows_binarysysplatform
startswith
subprocessopenosdevnull
check_callOSError)r   r    r   4/usr/lib/python3/dist-packages/PIL/EpsImagePlugin.pyhas_ghostscript7   s    r   c              C   s<  | d \}} }}|\}}t |p"d}|d | |d | f}td|d  |d |d   td|d  |d |d   f}	ddl}
ddl}|j \}}tj| d}t|drtjj	|j
r|j
}n|j \}}tj| |}t|dh}|jdd |j }|jd |}x>|dkrL|jt|d}|s2P |t|8 }|j| qW W dQ R X ddd| d|	 ddddd| dd|d  |d  f d|ddg}tdk	rtstdt|d< z>ttjd}|
j|||d W dQ R X tj|}|j  W dytj| |rtj| W n tk
r.   Y nX X |jj S )z!Render an image using Ghostscriptr   r   g      R@      Nnamer   d   i   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 pathszw+b)stdinr   i  )intfloatr   tempfileZmkstempr   closehasattrpathexistsr   r   seektellreadminlenwriter   ZWindowsErrorr   r   r   loadunlinkr   imcopy)tilesizefpscaledecoderoffsetdatalengthZbboxresr   r!   Zout_fdZoutfileZinfile_tempZinfileZin_fdfZfsizeZ
lengthfilesZcommandr   r.   r   r   r   GhostscriptF   sn    "





r;   c               @   s*   e Zd ZdZdd Zd
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)r2   char)selfr2   r   r   r   __init__   s    zPSFile.__init__r   c             C   s   d | _ | jj|| d S )N)r=   r2   r&   )r>   r5   whencer   r   r   r&      s    zPSFile.seekc             C   sx   | j pdg}d | _ | jjd}x*|dkrHt|rH|j| | jjd}q W | jjd| _ | j dkrhd | _ dj|jdS )N    r   s   
zlatin-1)r=   r2   r(   r*   appendjoindecode)r>   r:   cr   r   r   readline   s    

zPSFile.readlineN)r   )__name__
__module____qualname____doc__r?   r&   rF   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    rN   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   rK   c             C   s  | j | j\}}y.ttkr*t| jjd}nt| jjddd}W n   t| j}Y nX |j| d }d| _d| _	|j
 }|jd}x|r|rt|dkrtdytj|}W n, tjk
r } ztdW Y d d }~X nX |rn|jdd	\}	}|| j|	< |	d
kryRdd |j D }|d	 |d  |d |d  f| _	dd| j	 |||ffg| _W n   Y nX nxtj|}|r|jd}	|	dkrP |	d d dkr|	dd  | j|	d d < n
d| j|	< n|d dkrntd|j
 }|jd}|r|d d dkrP qW x|d d dkrt|dkr<td|d d dkr|dd  jd dd d \}
}}}t|dkrP y| jt| | _W n tk
r   P Y nX t|
t|f| _	d S |j
 jd}|sP qW |stdd S )NZUrzlatin-1)encodingrQ   r   z
   znot an EPS filer   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   epsZEndComments   zPS-Adobe	    %zbad EPS header   z%ImageData:   rK   z!cannot determine EPS bounding box)r   r   )r   r   )_find_offsetr2   bytesstrr   r   r<   r&   moder1   rF   stripr*   SyntaxErrorsplitmatchreerrorgroupinfor0   fieldIOErrorr   mode_map
ValueError)r>   r7   r5   r2   ZboxZs_rawr:   mvkxyZbiZmor   r   r   _open   s    




"



$zEpsImageFile._openc             C   sz   |j d}|d d dkr4|jdd |j }d}n>t|dd dkrjt|dd }t|dd }ntd	||fS )
N   rK   s   %!PSr   r   l   P rY      znot an EPS file)r(   r&   r'   rL   rd   )r>   r2   r:   r7   r5   r   r   r   r_   7  s    
zEpsImageFile._find_offsetr   c             C   s>   | j s
d S t| j | j| j|| _| jj| _| jj| _g | _ d S )N)r0   r;   r1   r2   r.   rb   )r>   r3   r   r   r   r,   M  s    

zEpsImageFile.loadc             O   s   d S )Nr   )r>   argskwargsr   r   r   	load_seekV  s    zEpsImageFile.load_seekN)r   )rG   rH   rI   rJ   formatZformat_descriptionrm   rt   r_   r,   ry   r   r   r   r   rO      s   l
	rO   c             C   s  | j   | jdkrd'}n(| jdkr(d(}n| jdkr8d)}ntdG dd dt}|}|tjkr||}tjjdkrtj	|dd}|r|j
d |j
d |j
d| j  |j
d |j
d |j
d |j
d| j  |j
d|  |j
d |j
d |j
d| jd |d    |j
d| j  |j
d| j  |j
d| jd | jd | jd f  |j
d  |j
|d d!  t|d"r|j  tj| |d#d*| j dd$fg |j
d% |j
d& t|d"r|j  d$S )+z*EPS Writer for the Python Imaging Library.rP   rY   r   imagerQ   r   false 3 colorimagerR   rK   false 4 colorimagezimage mode is not supportedc               @   s$   e Zd Zdd Zdd Zdd ZdS )z_save.<locals>.NoCloseStreamc             S   s
   || _ d S )N)r2   )r>   r2   r   r   r   r?   r  s    z%_save.<locals>.NoCloseStream.__init__c             S   s   t | j|S )N)getattrr2   )r>   r   r   r   r   __getattr__u  s    z(_save.<locals>.NoCloseStream.__getattr__c             S   s   d S )Nr   )r>   r   r   r   r"   x  s    z"_save.<locals>.NoCloseStream.closeN)rG   rH   rI   r?   r   r"   r   r   r   r   NoCloseStreamq  s   r   r   zlatin-1)rS   z%!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   z%d %d scale
z%d %d 8
z[%d 0 0 -%d 0 %d]
z+{ currentfile buf readhexstring pop } bind

flushrX   Nz
%%%%EndBinary
zgrestore end
)rY   r   r{   )rY   r   r|   )rY   rK   r}   )r   r   )r,   rb   rn   objectr   r   version_infomajorioTextIOWrapperr+   r1   r#   r   r   _save)r.   r2   filenamerX   operatorr   Zbase_fpr   r   r   r   _  sL    











&


r   z.psz.epszapplication/postscript)r   r	   r
   )r   )r   )%rg   r   r   r   r[   r   r   Z_binaryr   rL   __version__compilere   rk   r   r   r   Zshutilr#   r   Zdistutils.spawnZ	distutilsZspawnZfind_executablebinaryr   r;   r   r<   rN   rO   r   Zregister_openrz   Zregister_saveZregister_extensionsZregister_mimer   r   r   r   <module>   s>   




W	 
G