U
    M»{j?  ã                   @  s8  U d dl mZ 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	 ddl
mZmZ ddlmZ ddlmZ e d¡Ze d	¡Zdad
ed< daddœdd„Zd&dd„ZG dd„ dƒZdddœdd„ZG dd„ dejƒZd'ddddd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 )(é    )ÚannotationsN)ÚIOé   )ÚImageÚ	ImageFile)Úi32le)Ú	deprecatez^%%([^:]*):[ \t]*(.*)[ \t]*$z^%[%!\w]([^:]*)[ \t]*$zstr | bool | NoneÚ	gs_binaryÚbool©Úreturnc                  C  sŒ   t d kr„tj d¡rNtd krHdd l} dD ]}|  |¡d k	r(|a qHq(data n6ztjddgtj	d� da W n t
k
r‚   da Y nX t dk	S )NÚwinr   )Zgswin32cZgswin64cÚgsFr   z	--version)Ústdout)r	   ÚsysÚplatformÚ
startswithÚgs_windows_binaryÚshutilÚwhichÚ
subprocessÚ
check_callÚDEVNULLÚOSError)r   Úbinary© r   úQ/var/www/html/bwave/python/venv/lib/python3.8/site-packages/PIL/EpsImagePlugin.pyÚhas_ghostscript.   s     
r   Fc                 C  s\  t ƒ sd}t|ƒ‚| d \}} }}|\}	}
t|ƒp4d}|d | }|d | }d| |
d |
d   }d| |
d |
d   }t ¡ \}}t |¡ d}t|dƒr¸tj 	|j
¡r¸|j
}n’t ¡ \}}t |¡ |}t|d	ƒ�h}| dtj¡ | ¡ }| d¡ |}|dk�r@| t|d
ƒ¡}|�s&�q@|t|ƒ8 }| |¡ �qW 5 Q R X |�rTdnd}tdd|d›d|d›�d|d›d|d›�dddd|› �d|› �d|
d  › d|
d  › d�d|ddg}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 Ghostscriptz%Unable to locate Ghostscript on pathsr   r   g      R@é   é   NÚnameÚwbi � ZpngalphaZppmrawz-qz-gÚdÚxz-rÚfz-dBATCHz	-dNOPAUSEz-dSAFERz	-sDEVICE=z-sOutputFile=z-cú z
 translatez-fZshowpager   )Ústartupinfo)"r   r   ÚintÚtempfileÚmkstempÚosÚcloseÚhasattrÚpathÚexistsr    ÚopenÚseekÚioÚSEEK_ENDÚtellÚreadÚminÚlenÚwriter	   Úunlinkr   r   r   r   ZSTARTUPINFOZdwFlagsZSTARTF_USESHOWWINDOWr   r   ÚloadÚimÚcopy)ÚtileÚsizeÚfpÚscaleÚtransparencyÚmsgÚdecoderÚoffsetÚdataÚlengthZbboxÚwidthÚheightZres_xZres_yZout_fdÚoutfileZinfile_tempÚinfileZin_fdr$   ÚfsizeZ
lengthfileÚsZdeviceÚcommandr&   Zout_imr:   r   r   r   ÚGhostscriptE   s~    



ï


rM   c                   @  s4   e Zd ZdZdd„ Zejfdd„Zddœ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 )NrN   é   zSIf you need the functionality of this class you will need to implement it yourself.)Úaction)r   r>   Úchar)Úselfr>   r   r   r   Ú__init__¨   s    ýzPSFile.__init__c                 C  s   d | _ | j ||¡ d S ©N)rQ   r>   r0   )rR   rC   Úwhencer   r   r   r0   ²   s    zPSFile.seekÚstrr   c                 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)rQ   r>   r4   r6   ÚappendÚjoinÚdecode)rR   rK   Úcr   r   r   Úreadline¶   s    

zPSFile.readlineN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__rS   r1   ÚSEEK_SETr0   r^   r   r   r   r   rN   ¢   s   
rN   Úbytes)Úprefixr   c                 C  s(   | d d… dkp&t | ƒdko&t| ƒdkS )Né   ó   %!PSì   ÅP§ )r6   Úi32)re   r   r   r   Ú_acceptÇ   s    rj   c                   @  sV   e Zd ZdZdZdZdddddœZd	d
œdd„Zdd„ Zddd„Z	dd	dœ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   ÚNoner   c                   sÖ  ˆ  ˆj¡\‰ ‰ˆj ˆ¡ dˆ_d ˆ_tdƒ}t|ƒ}d}d}d‰d‰ddœ‡fdd	„}d
ddœ‡ ‡‡‡‡fdd„}ˆj d¡}|dkr¢|dkr |rœ|ƒ  �q¾nb|dkr¶|dkr´qvnN|dkrî|d tdƒkrÜd}t	|ƒ‚n|rê|ƒ  d}d}|d ||< |d7 }qv|�rÀ|d tdƒk�s.|d d… dk�r:|ƒ  d}qvt
|d |… dƒ}	||	ƒ�s¸t |	¡}
|
�r¢|
 d¡}|d d… dk�r–|dd … ˆjd< n
dˆj|< n|	d dk�r²nd}t|ƒ‚nø|d d… dk�rb|d|…  d d¡}dd „ |d d!… D ƒ\}}}}|dk�rd"ˆ_n>|dk�r¾zˆj| ˆ_W n tk
�rL   Y �q¾Y nX n�q¾||fˆ_d S |d d#… d$k�rz�q¾n>ˆ�r¢ˆ�r¢t
|d |… dƒ}	||	ƒ n|d d… d%k�r¸d‰d}qvˆj�sÒd&}t|ƒ‚d S )'Nrm   éÿ   r   TFro   r   c                    s0   dˆ j krd} t| ƒ‚dˆ j kr,d} t| ƒ‚dS )zí
            The EPS specification requires that some headers exist.
            This should be checked when the header comments formally end,
            when image data starts, or when the file ends, whichever comes first.
            úPS-Adobez'EPS header missing "%!PS-Adobe" commentÚBoundingBoxz*EPS header missing "%%BoundingBox" commentN)ÚinfoÚSyntaxError)rA   )rR   r   r   Úcheck_required_header_commentsè   s    

z:EpsImageFile._open.<locals>.check_required_header_commentsrV   r
   )rK   r   c              
     sô   zt  | ¡}W n2 tjk
r@ } zd}t|ƒ|‚W 5 d }~X Y nX |sJdS | dd¡\}}|ˆj|< |dkrð|dkrzd‰nvˆjrˆˆrðˆrðzRdd	„ |  ¡ D ƒ}|d |d
  |d |d  fˆ_ddˆj ˆˆ |ffgˆ_	W n t
k
rî   Y nX dS )Núnot an EPS fileFr   r   rr   z(atend)Tc                 S  s   g | ]}t t|ƒƒ‘qS r   )r'   Úfloat)Ú.0Úir   r   r   Ú
<listcomp>
  s     z=EpsImageFile._open.<locals>._read_comment.<locals>.<listcomp>r   r   Úeps©r   r   )ÚsplitÚmatchÚreÚerrorrt   Úgrouprs   Ú_sizer=   r<   Ú	Exception)rK   ÚmÚerA   ÚkÚvÚbox©rE   rC   Zreading_trailer_commentsrR   Ztrailer_reachedr   r   Ú_read_commentõ   s(    
"z)EpsImageFile._open.<locals>._read_commentr   rW   rX   ú%rv   é   s   %%EndCommentsrY   é   rq   é	   Ú zbad EPS headerrO   s   %ImageData:é   c                 s  s   | ]}t |ƒV  qd S rT   )r'   )rx   Úvaluer   r   r   Ú	<genexpr>]  s    z%EpsImageFile._open.<locals>.<genexpr>rf   Ú1é   s   %%EOFs	   %%Trailerz!cannot determine EPS bounding box)Ú_find_offsetr>   r0   Ú_moder‚   Ú	bytearrayÚ
memoryviewr4   Úordrt   rV   Úfieldr~   r�   rs   r   r}   Úmode_mapÚ
ValueError)rR   Zbyte_arrZbytes_mvZ
bytes_readZreading_header_commentsru   rŠ   ÚbyterA   rK   r„   r†   Zimage_data_valuesÚcolumnsÚrowsZ	bit_depthZmode_idr   r‰   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 )Nrf   rg   r   rh   r�   rv   )r4   r0   r1   r2   r3   ri   rt   )rR   r>   rK   rE   rC   rA   r   r   r   r•   {  s    

zEpsImageFile._find_offsetr   Fc                 C  sD   | j r8t| j | j| j||ƒ| _| jj| _| jj| _g | _ tj 	| ¡S rT   )
r<   rM   r=   r>   r:   Úmoder–   r‚   r   r9   )rR   r?   r@   r   r   r   r9   ’  s    

zEpsImageFile.loadr'   )Úposr   c                 C  s   d S rT   r   )rR   r¢   r   r   r   Ú	load_seek›  s    zEpsImageFile.load_seekN)r   F)r_   r`   ra   rb   ÚformatÚformat_descriptionr›   r    r•   r9   r£   r   r   r   r   rk   Ð   s    $
	rk   zImage.Imagez	IO[bytes]zstr | bytesr'   ro   )r:   r>   Úfilenamer{   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.rl   )r�   r   s   imagerm   )r�   r   s   false 3 colorimagern   )r�   rf   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   ó   
Úflushr{   r|   Ns   
%%%%EndBinary
s   grestore end
)	r9   r¡   rœ   r7   r=   r,   r¨   r   Ú_save)r:   r>   r¦   r{   ÚoperatorrA   r   r   r   r©   ¤  sB    









&


r©   z.psz.epszapplication/postscript)r   F)r   )#Ú
__future__r   r1   r*   r   r   r   r(   Útypingr   r�   r   r   Ú_binaryr   ri   Z
_deprecater   Úcompiler}   rš   r	   Ú__annotations__r   r   rM   rN   rj   rk   r©   Zregister_openr¤   Zregister_saveZregister_extensionsZregister_mimer   r   r   r   Ú<module>   s4    


]%	 U4