U
    ­A›di:  ã                   @   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 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)Úi32le)Ú	deprecatez^%%([^:]*):[ \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   úK/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/PIL/EpsImagePlugin.pyÚhas_ghostscript4   s    r   c                 C   s\  | d \}} }}|\}}	t |ƒp"d}|d | |d | f}d|d  |	d |	d   d|d  |	d |	d   f}
t ¡ \}}t |¡ d}t|dƒr®tj |j¡r®|j}n�t ¡ \}}t |¡ |}t	|dƒ�f}| 
dtj¡ | ¡ }| 
d¡ |}|dk�r4| t|d	ƒ¡}|�s�q4|t|ƒ8 }| |¡ qøW 5 Q R X |�rHd
nd}ddd| d|
 dddd|› �d|› �d|	d  › d|	d  › d�d|ddg}tdk	�r¾t�s¶d}t|ƒ‚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
�rB   Y nX X |j  ¡ }| ¡  |S )z!Render an image using Ghostscriptr   r   g      R@é   é   NÚnameÚwbi � ZpngalphaZppmrawr   z-qz-g%dx%dz-r%fx%fz-dBATCHz	-dNOPAUSEz-dSAFERz	-sDEVICE=z-sOutputFile=z-cú z
 translatez-fZshowpagez%Unable to locate Ghostscript on pathsr   )Ústartupinfo)!ÚintÚ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ÚtransparencyÚdecoderÚoffsetÚdataÚlengthZbboxÚresZout_fdÚoutfileZinfile_tempÚinfileZin_fdÚfÚfsizeZ
lengthfileÚsZdeviceÚcommandÚmsgr   Zout_imr.   r   r   r   ÚGhostscriptA   s‚    þ



ï



rA   c                   @   s.   e Zd ZdZdd„ Zejfdd„Zdd„ ZdS )	ÚPSFilez£
    Wrapper for bytesio object that treats either CR or LF as end of line.
    This class is no longer used internally, but kept for backwards compatibility.
    c                 C   s   t dddd� || _d | _d S )NrB   é   zSIf you need the functionality of this class you will need to implement it yourself.)Úaction)r   r2   Úchar)Úselfr2   r   r   r   Ú__init__©   s    ýzPSFile.__init__c                 C   s   d | _ | j ||¡ d S ©N)rE   r2   r$   )rF   r6   Úwhencer   r   r   r$   ³   s    zPSFile.seekc                 C   st   | j pdg}d | _ | j d¡}|dkrFt|ƒrF| |¡ | j d¡}q| j d¡| _ | j dkrdd | _ d |¡ d¡S )Nó    r   ó   
úlatin-1)rE   r2   r(   r*   ÚappendÚjoinÚdecode)rF   r>   Úcr   r   r   Úreadline·   s    

zPSFile.readlineN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__rG   r%   ÚSEEK_SETr$   rQ   r   r   r   r   rB   £   s   
rB   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    r\   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   rW   c              
      s&  ˆ   ˆ j¡\}}ˆ j |¡ dˆ _d ˆ _tdƒ}t|ƒ}d}d}‡ fdd„}ˆ j d¡}|dkrn|dkrÐ�qnb|d	kr‚|dkrÐqLnN|dkrº|d td
ƒkr¨d}	t	|	ƒ‚n|r¶|ƒ  d}d}|d ||< |d7 }qL|�rZ|d td
ƒksø|d d… dk�r|ƒ  d}qLt
|d |… dƒ}
zt |
¡}W n4 tjk
�rX } zd}	t	|	ƒ|‚W 5 d }~X Y nX |�rð| dd¡\}}|ˆ j|< |dk�rXzRdd„ | ¡ D ƒ}|d |d  |d |d  fˆ _ddˆ j |||ffgˆ _W n tk
�rì   Y nX nht |
¡}|�r<| d¡}|d d… dk�r0|dd … ˆ jd< n
dˆ j|< n|
d d
k�rLnd}	t|	ƒ‚n¢|d d… dk�rü|d|…  d d¡}dd„ |d d … D ƒ\}}}}|dk�r°d!ˆ _n>|dk�rzˆ j| ˆ _W n tk
�ræ   Y �qY nX n�q||fˆ _d S d}qL|ƒ  ˆ j�s"d"ˆ _d#}	t|	ƒ‚d S )$Nr_   éÿ   r   Tc                     s0   dˆ j krd} t| ƒ‚dˆ j kr,d} t| ƒ‚d S )NúPS-Adobez'EPS header missing "%!PS-Adobe" commentÚBoundingBoxz*EPS header missing "%%BoundingBox" comment)ÚinfoÚSyntaxError)r@   ©rF   r   r   Úcheck_required_header_commentsç   s    

z:EpsImageFile._open.<locals>.check_required_header_commentsr   rJ   rK   ú%únot an EPS fileFé   s   %%EndCommentsrL   r   rc   c                 S   s   g | ]}t t|ƒƒ‘qS r   )r   Úfloat)Ú.0Úir   r   r   Ú
<listcomp>*  s     z&EpsImageFile._open.<locals>.<listcomp>r   Úeps©r   r   é   rb   é	   Ú zbad EPS headerrC   s   %ImageData:é   c                 S   s   g | ]}t |ƒ‘qS r   )r   )rl   Úvaluer   r   r   rn   O  s    rW   Ú1)r   r   z!cannot determine EPS bounding box)Ú_find_offsetr2   r$   ÚmodeÚ_sizeÚ	bytearrayÚ
memoryviewr(   Úordre   ÚstrÚsplitÚmatchÚreÚerrorÚgrouprd   r1   r0   Ú	ExceptionÚfieldr   Úmode_mapÚ
ValueError)rF   r8   r6   Zbyte_arrZbytes_mvZ
bytes_readZreading_commentsrg   Úbyter@   r>   ÚmÚeÚkÚvÚboxZimage_data_valuesÚcolumnsÚrowsZ	bit_depthZmode_idr   rf   r   Ú_openÙ   s     	
"

"ÿ




ÿ


zEpsImageFile._openc                 C   sl   |  d¡}|dkr.| dtj¡ | ¡ }d}n6t|ƒdkrX|  d¡}t|ƒ}t|dƒ}nd}t|ƒ‚||fS )NrW   rX   r   rY   rq   ri   )r(   r$   r%   r&   r'   rZ   re   )rF   r2   r>   r8   r6   r@   r   r   r   rw   i  s    

zEpsImageFile._find_offsetr   Fc                 C   sD   | j r8t| j | j| j||ƒ| _| jj| _| jj| _g | _ tj | ¡S rH   )	r0   rA   r1   r2   r.   rx   ry   r   r-   )rF   r3   r4   r   r   r   r-   €  s    

zEpsImageFile.loadc                 O   s   d S rH   r   )rF   ÚargsÚkwargsr   r   r   Ú	load_seek‰  s    zEpsImageFile.load_seekN)r   F)rR   rS   rT   rU   ÚformatÚformat_descriptionr…   r�   rw   r-   r’   r   r   r   r   r]   Ñ   s    
	r]   c                 C   s˜  |   ¡  | jdkrd}n,| jdkr(d}n| jdkr8d}nd}t|ƒ‚|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ƒ�rN| ¡  t | |dd| j ddfg¡ | d¡ | d ¡ t|dƒ�r”| ¡  dS )!z*EPS Writer for the Python Imaging Library.r^   )rq   r   s   imager_   )rq   r   s   false 3 colorimager`   )rq   rW   s   false 4 colorimagezimage mode is not supporteds   %!PS-Adobe-3.0 EPSF-3.0
s   %%Creator: PIL 0.1 EpsEncode
s   %%%%BoundingBox: 0 0 %d %d
s   %%Pages: 1
s   %%EndComments
s   %%Page: 1 1
s   %%ImageData: %d %d s   %d %d 0 1 1 "%s"
s   gsave
s   10 dict begin
s   /buf %d string def
r   r   s   %d %d scale
s   %d %d 8
s   [%d 0 0 -%d 0 %d]
s+   { currentfile buf readhexstring pop } bind
r   ó   
Úflushro   rp   Ns   
%%%%EndBinary
s   grestore end
)	r-   rx   r†   r+   r1   r    r–   r   Ú_save)r.   r2   Úfilenamero   Úoperatorr@   r   r   r   r—   ’  sB    









&


r—   z.psz.epszapplication/postscript)r   F)r   )"r%   r   r€   r   r   r   rs   r   r   Ú_binaryr   rZ   Z
_deprecater   Úcompiler~   r„   r
   r   r   ÚshutilÚbinaryÚwhichr   rA   rB   r\   r]   r—   Zregister_openr“   Zregister_saveZregister_extensionsZregister_mimer   r   r   r   Ú<module>   s:   


b%	 B
4