
'"V1                 @   s  d  d l  Z  d  d l Z d  d l Z d  d l m Z m Z m Z d Z e j Z	 e j
 Z e  j d  Z e  j d  Z d Z e j j d  rd  d l Z e e d  r e j Z n d  d l Z e j j Z x3 d D]" Z e e  d k	 r e Z Pq q Wd Z n  d d   Z d d d  Z Gd d   d e  Z d d   Z Gd 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  e j$ e j" d  e j% e j" d  d S)    N)Image	ImageFile_binaryz0.5z^%%([^:]*):[ \t]*(.*)[ \t]*$z^%[%!\w]([^:]*)[ \t]*$winwhichgswin32cgswin64cgsFc              C   sw   t  r
 d St j j d  ss d d  l }  y3 |  j d d g d |  j } | j j   d SWqs t	 k
 ro Yqs Xn  d S)NTr   r   r	   z	--versionstdoutF)
gs_windows_binarysysplatform
startswith
subprocessPopenPIPEr
   readOSError)r   r	    r   4/tmp/pip-build-fj3bmf4v/Pillow/PIL/EpsImagePlugin.pyhas_ghostscript8   s    r      c             C   s  |  d \ } }  } } | \ } } t  |  p1 d } | d | | d | f } t d | d | d | d  t d | d | d | d  f }	 d d l }
 d d l } d d l } | j   \ } } |
 j |  d } t | d  r|
 j j	 | j
  r| j
 } n | j   \ } } |
 j |  | } t | d   } | j d d  | j   } | j d  | } xO | d k r| j t | d   } | sPn  | t |  8} | j |  qzWWd QXd d d | d |	 d d d d | d d | d | d f d | g } t d k	 rGt s:t d   n  t | d <n  zi | j | d | j d | j } | j j   | j   } | rt d |   n  t j j |  } Wd y' |
 j |  | r|
 j |  n  Wn t k
 rYn XX| S)z!Render an image using Ghostscriptr   r   g      R@      Nnamewbd   i   r	   z-qz-g%dx%dz-r%fx%fz	-dNOPAUSEz-dSAFERz-sDEVICE=ppmrawz-sOutputFile=%sz-cz%d %d translatez-fz%Unable to locate Ghostscript on pathsstdinr
   zgs failed (status %d)i  )intfloatosr   tempfilemkstempclosehasattrpathexistsr   openseektellr   minlenwriter   ZWindowsErrorr   r   r   waitIOErrorr   coreZopen_ppmunlinkr   )tilesizefpscaledecoderoffsetdatalengthZbboxresr    r   r!   Zout_fdoutfileZinfile_tempinfileZin_fdfZfsizeZ
lengthfilescommandr	   statusimr   r   r   GhostscriptG   sr    !'$rA   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)r3   char)selfr3   r   r   r   __init__   s    	zPSFile.__init__r   c             C   s    d  |  _  |  j j | |  d  S)N)rC   r3   r(   )rD   r6   whencer   r   r   r(      s    	zPSFile.seekc             C   s   |  j  p d } d  |  _  |  j j d  } x, | d k rX | | } |  j j d  } q- W|  j j d  |  _  |  j  d k r d  |  _  n  | j d  S)N    r   s   
zlatin-1)rC   r3   r   decode)rD   r=   cr   r   r   readline   s    	
zPSFile.readlineN)__name__
__module____qualname____doc__rE   r(   rJ   r   r   r   r   rB      s   rB   c             C   s8   |  d  d  d k p7 t  |   d k o7 t |   d k S)N   s   %!PSl   P )r+   i32)prefixr   r   r   _accept   s    rR   c               @   sp   e  Z d  Z d Z d Z d Z i d d 6d d 6d d	 6Z 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Lr   ZLABr   RGBr   c             C   s  |  j  |  j  \ } } yC t t k r? t |  j j d  } n t |  j j d d d } Wn t |  j  } Yn X| j |  d  } d |  _ d |  _	 | j
   j d  } x| rt |  d k r t d   n  y t j |  } Wn4 t j k
 r"} z t d   WYd  d  } ~ Xn X| r| j d d	  \ } } | |  j | <| d
 k rqyi d d   | j   D } | d	 | d | d | d f |  _	 d d |  j	 | | | f f g |  _ WqYqXqqn t j |  } | rR| j d  } | d k rPn  | d  d  d k rB| d d   |  j | d  d  <qqd |  j | <n | d d k ren t d   | j
   j d  } | d  d  d k r Pq q Wx| d  d  d k rt |  d k rt d   n  | d  d  d k r| d d   j d  d  d  d  \ }	 }
 } } t |  d k r<Pn  y |  j t |  |  _ Wn t k
 rkPYn Xt |	  t |
  f |  _	 d  S| j
   j d  } | sPqqW| st d   n  d  S)NZUrencodingzlatin-1rU   r   z
   znot an EPS filer   ZBoundingBoxc             S   s"   g  |  ] } t  t |    q Sr   )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:   rO   z!cannot determine EPS bounding box)r   r   )r   r   )_find_offsetr3   bytesstrr'   r   rB   r(   moder2   rJ   stripr+   SyntaxErrorsplitmatchreerrorgroupinfor1   fieldr.   r   mode_map
ValueError)rD   r8   r6   r3   Zboxr=   mvkxyZbimor   r   r   _open   s|    			'$2zEpsImageFile._openc             C   s   | j  d  } | d  d  d k rJ | j d d  | j   } d } nW t | d d   d k r t | d d   } t | d d   } n t d	   | | f S)
N   rO   s   %!PSr   r   l   P r\      znot an EPS file)r   r(   r)   rP   rg   )rD   r3   r=   r8   r6   r   r   r   rb   7  s    	zEpsImageFile._find_offsetc             C   sY   |  j  s d  St |  j  |  j |  j |  |  _ |  j j |  _ |  j j |  _ g  |  _  d  S)N)r1   rA   r2   r3   r@   re   )rD   r4   r   r   r   loadM  s    	!zEpsImageFile.loadc             O   s   d  S)Nr   )rD   argskwargsr   r   r   	load_seekV  s    zEpsImageFile.load_seekN)rK   rL   rM   rN   formatformat_descriptionro   rw   rb   rz   r}   r   r   r   r   rS      s   i	rS   c             C   sx  |  j    |  j d k r" d' } n< |  j d k r: d( } n$ |  j d k rR d) } n t d   Gd d   d t  } | } | t j k r | |  } t j d d k r t j | d d } q n  | rF| j	 d  | j	 d  | j	 d |  j
  | j	 d  | j	 d  | j	 d  | j	 d |  j
  | j	 d |  n  | 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   n  t j |  | d# d* |  j
 d d$ f g  | j	 d%  | j	 d&  t | d"  rt| j   n  d$ S)+z*EPS Writer for the Python Imaging Library.rT   r\   r   imagerU   r   false 3 colorimageZCMYKrO   false 4 colorimagezimage mode is not supportedc               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)z_save.<locals>.NoCloseStreamc             S   s   | |  _  d  S)N)r3   )rD   r3   r   r   r   rE   r  s    z%_save.<locals>.NoCloseStream.__init__c             S   s   t  |  j |  S)N)getattrr3   )rD   r   r   r   r   __getattr__u  s    z(_save.<locals>.NoCloseStream.__getattr__c             S   s   d  S)Nr   )rD   r   r   r   r#   x  s    z"_save.<locals>.NoCloseStream.closeN)rK   rL   rM   rE   r   r#   r   r   r   r   NoCloseStreamq  s   r   r   r   rV   zlatin-1z%!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
z%d %d scale
z%d %d 8
z[%d 0 0 -%d 0 %d]
z+{ currentfile buf readhexstring pop } bind

flushr[   Nz
%%%%EndBinary
zgrestore end
)r\   r   zimage)r\   r   r   )r\   rO   r   )r   r   )rz   re   rp   objectr   r
   version_infoioTextIOWrapperr,   r2   r$   r   r   _save)r@   r3   filenamer[   operatorr   Zbase_fpr   r   r   r   _  sL    
			
 /)r   z.psz.epszapplication/postscript)r   r   zgs)&rj   r   r   ZPILr   r   r   __version__Zi32lerP   Zo32leZo32compilerh   rn   r   r   r   shutilr$   r   distutils.spawn	distutilsspawnfind_executablebinaryr   rA   r   rB   rR   rS   r   Zregister_openr~   Zregister_saveZregister_extensionZregister_mimer   r   r   r   <module>   s>   			Y	F