B
    ³è0\ƒ1  ã               @   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  d¡Ze  d¡ZdZej d¡r²d 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	r”eZP q”W 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  ej!ee¡ e "ej!e¡ e #ej!ddg¡ e $ej!d¡ dS )é    Né   )ÚImageÚ	ImageFile)Úi32lez0.5z^%%([^:]*):[ \t]*(.*)[ \t]*$z^%[%!\w]([^:]*)[ \t]*$ÚwinÚwhich)Zgswin32cZgswin64cÚgsFc           	   C   sd   t rdS t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   ú1lib/python3.7/site-packages/PIL/EpsImagePlugin.pyÚhas_ghostscript7   s    r   c             C   sh  | d \}} }}|\}}t |ƒp"d}|d | |d | f}td|d  |d |d   ƒtd|d  |d |d   ƒf}	ddl}
ddl}| ¡ \}}t |¡ d}t|dƒrÆtj 	|j
¡rÆ|j
}n’| ¡ \}}t |¡ |}t|dƒh}| dd¡ | ¡ }| d¡ |}x>|dkrL| t|d	ƒ¡}|s2P |t|ƒ8 }| |¡ 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	rºts²tdƒ‚t|d< zjttjdƒB}d}tj d¡rô|
 ¡ }| j|
jO  _|
j||||d W dQ R X t |¡}| ¡  W dyt |¡ |rBt |¡ W n tk
rZ   Y nX X |j  !¡ S )z!Render an image using Ghostscriptr   r   g      R@é   é   NÚnamer	   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+br   )Ústdinr
   Ústartupinfo)"ÚintÚfloatr   ÚtempfileZmkstempr   ÚcloseÚhasattrÚpathÚexistsr   r   ÚseekÚtellÚreadÚminÚlenÚwriter   ZWindowsErrorr   r   r   r   ZSTARTUPINFOZdwFlagsZSTARTF_USESHOWWINDOWr   r   ÚloadÚunlinkr   ÚimÚcopy)ÚtileÚsizeÚfpÚscaleÚdecoderÚoffsetÚdataÚlengthZbboxZresr   r   Zout_fdZoutfileZinfile_tempZinfileZin_fdÚfZfsizeZ
lengthfileÚsZcommandr   r   r,   r   r   r   ÚGhostscriptF   sx    "






r8   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)r0   Úchar)Úselfr0   r   r   r   Ú__init__¦   s    zPSFile.__init__r   c             C   s   d | _ | j ||¡ d S )N)r:   r0   r$   )r;   r3   Úwhencer   r   r   r$   ª   s    zPSFile.seekc             C   sf   | j pd}d | _ | j d¡}x |dkr<|| }| j d¡}qW | j d¡| _ | j dkr\d | _ | d¡S )Nó    r   s   
zlatin-1)r:   r0   r&   Údecode)r;   r7   Úcr   r   r   Úreadline®   s    


zPSFile.readlineN)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r<   r$   rA   r   r   r   r   r9   ¢   s   
r9   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    rI   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   rF   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–   t	dƒ‚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rTP |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rBP y| jt|ƒ | _W n tk
rn   P Y nX t|
ƒt|ƒf| _d S | ¡  d¡}|sÔP qÔW |s°tdƒ‚d S )NrL   )r   r   z
éÿ   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:é   rF   z!cannot determine EPS bounding box)Ú_find_offsetr0   r9   r$   ÚmodeÚ_sizerA   Ústripr(   ÚSyntaxErrorÚsplitÚmatchÚreÚerrorÚgroupÚinfor/   r.   Ú	ExceptionÚfieldÚIOErrorr   Úmode_mapÚ
ValueError)r;   r5   r3   r0   ZboxZs_rawr7   ÚmÚkÚvÚxÚyZbiZmor   r   r   Ú_openÐ   sx    





"



$zEpsImageFile._openc             C   sz   |  d¡}|d d… dkr4| dd¡ | ¡ }d}n>t|dd… ƒdkrjt|dd… ƒ}t|dd… ƒ}ntd	ƒ‚||fS )
Né    rF   s   %!PSr   r   l   ÅP§ rS   é   znot an EPS file)r&   r$   r%   rG   r]   )r;   r0   r7   r5   r3   r   r   r   rY   3  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.   r8   r/   r0   r,   rZ   r[   )r;   r1   r   r   r   r*   I  s    

zEpsImageFile.loadc             O   s   d S )Nr   )r;   ÚargsÚkwargsr   r   r   Ú	load_seekR  s    zEpsImageFile.load_seekN)r   )rB   rC   rD   rE   ÚformatZformat_descriptionrg   rn   rY   r*   rs   r   r   r   r   rJ   È   s   c
	rJ   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rptjjd	krpt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ƒr~| ¡  t | |d d!| j
 dd"fg¡ | 	d#¡ | 	d$¡ t|dƒrÄ| ¡  W d"|rÖ| ¡  X d"S )%z*EPS Writer for the Python Imaging Library.rK   )rS   r   ZimagerL   )rS   r   zfalse 3 colorimagerM   )rS   rF   zfalse 4 colorimagezimage mode is not supportedFr   zlatin-1)Ú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
Ú
ÚflushrR   )r   r   Nz
%%%%EndBinary
zgrestore end
)r*   rZ   rh   r   r
   Úversion_infoÚmajorÚioÚTextIOWrapperr)   r/   r!   rw   r   Ú_saveÚdetach)r,   r0   ÚfilenamerR   ÚoperatorZbase_fpZ
wrapped_fpr   r   r   r|   [  sR    










&


r|   z.psz.epszapplication/postscript)r   )r   )%r`   rz   r   r   rU   r   r   Z_binaryr   rG   Ú__version__Úcompiler^   re   r   r   r   Zshutilr!   r   Zdistutils.spawnZ	distutilsZspawnZfind_executableZbinaryr   r8   Úobjectr9   rI   rJ   r|   Zregister_openrt   Zregister_saveZregister_extensionsZregister_mimer   r   r   r   Ú<module>   s>   




\	 
B