
hR\A2                 @   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  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 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   s   t  r
 d St j j d  s| d d  l }  y< t t j d    } |  j d d g d | Wd  QXd SWq| t	 k
 rx Yq| Xn  d S)	NTr   r   wbr
   z	--versionstdoutF)
gs_windows_binarysysplatform
startswith
subprocessopenosdevnull
check_callOSError)r   r    r   G/var/www/dbchiro/venv/lib/python3.4/site-packages/PIL/EpsImagePlugin.pyhas_ghostscript7   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 } | j   \ } } t j |  d } t | d  rt j j	 | j
  r| j
 } n | j   \ } } t j |  | } t | d   } | j d d  | j   } | j d  | } xO | d k r| j t | d   } | sPn  | t |  8} | j |  qnWWd QXd d d | d |	 d d d d d | d d | d | d f d | d d g } t d k	 rDt s7t d   n  t | d <n  zQ t t j d    } |
 j | d | d | Wd QXt j |  } | j   Wd y' t j |  | rt j |  n  Wn t k
 rYn XX| 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   tempfile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_fdoutfileZinfile_tempinfileZin_fdfZfsizeZ
lengthfiles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)r3   char)selfr3   r   r   r   __init__   s    	zPSFile.__init__r   c             C   s    d  |  _  |  j j | |  d  S)N)rA   r3   r'   )rB   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)rA   r3   r)   decode)rB   r=   cr   r   r   readline   s    	
zPSFile.readlineN)__name__
__module____qualname____doc__rC   r'   rH   r   r   r   r   r@      s   r@   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    rP   c               @   sw   e  Z d  Z d Z d Z d Z i d d 6d 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   CMYKrM   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| 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 r}yi d d   | j   D } | d	 | d | d | d f |  _	 d d |  j	 | | | f f g |  _ WqYqXq}qt j |  } | r^| j d  }	 |	 d k rPn  |	 d  d  d k rN|	 d d   |  j |	 d  d  <q}d |  j |	 <q| d d k rqqt d   n  | j
   } | j d  } | r | 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 rWPn  y |  j t |  |  _ Wn t k
 rPYn Xt |
  t |  f |  _	 d  S| j
   j d  } | sPqqW| st d   n  d  S)NZUrencodingzlatin-1rS   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:   rM   z!cannot determine EPS bounding box)r   r   )r   r   )_find_offsetr3   bytesstrr   r   r@   r'   moder2   rH   stripr+   SyntaxErrorsplitmatchreerrorgroupinfor1   fieldIOErrorr   mode_map
ValueError)rB   r8   r6   r3   ZboxZs_rawr=   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   rM   s   %!PSr   r   l   P r[      znot an EPS file)r)   r'   r(   rN   rf   )rB   r3   r=   r8   r6   r   r   r   ra   7  s    	zEpsImageFile._find_offsetc             C   sY   |  j  s d  St |  j  |  j |  j |  |  _ |  j j |  _ |  j j |  _ g  |  _  d  S)N)r1   r?   r2   r3   r/   rd   )rB   r4   r   r   r   r-   M  s    	!zEpsImageFile.loadc             O   s   d  S)Nr   )rB   argskwargsr   r   r   	load_seekV  s    zEpsImageFile.load_seekN)rI   rJ   rK   rL   formatZformat_descriptionro   rw   ra   r-   r|   r   r   r   r   rQ      s   "l	rQ   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.rR   r[   r   imagerS   r   false 3 colorimagerT   rM   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   )rB   r3   r   r   r   rC   r  s    z%_save.<locals>.NoCloseStream.__init__c             S   s   t  |  j |  S)N)getattrr3   )rB   r   r   r   r   __getattr__u  s    z(_save.<locals>.NoCloseStream.__getattr__c             S   s   d  S)Nr   )rB   r   r   r   r#   x  s    z"_save.<locals>.NoCloseStream.closeN)rI   rJ   rK   rC   r   r#   r   r   r   r   NoCloseStreamq  s   r   r   r   rU   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

flushrZ   Nz
%%%%EndBinary
zgrestore end
)r[   r   zimage)r[   r   r   )r[   rM   r   )r   r   )r-   rd   rp   objectr   r   version_infoioTextIOWrapperr,   r2   r$   r   r   _save)r/   r3   filenamerZ   operatorr   Zbase_fpr   r   r   r   _  sL    
			
 /)r   z.psz.epszapplication/postscript)r   r	   zgs)%ri   r   r   r   r]   r   r   Z_binaryr   rN   __version__compilerg   rm   r   r   r   shutilr$   r   distutils.spawn	distutilsspawnfind_executablebinaryr   r?   r   r@   rP   rQ   r   Zregister_openr}   Zregister_saveZregister_extensionsZregister_mimer   r   r   r   <module>   s<   	W	F