U
    M»{jÌ  ã                   @  sÔ   d dl m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 dd	d
œdd„ZG dd„ dejƒZG dd„ dejƒZe de¡ dddddœdd„Ze ejee¡ e eje¡ e ejd¡ dS )é    )ÚannotationsN)ÚIOé   )ÚImageÚ	ImageFile)Úi16le)Úo16leÚbytesÚbool)ÚprefixÚreturnc                 C  s   | d d… dkS )Né   )ó   DanMs   LinS© )r   r   r   úQ/var/www/html/bwave/python/venv/lib/python3.8/site-packages/PIL/MspImagePlugin.pyÚ_accept'   s    r   c                   @  s"   e Zd ZdZdZddœdd„ZdS )ÚMspImageFileÚMSPzWindows PaintÚNone)r   c                 C  sÄ   | j d k	st‚| j  d¡}t|ƒs.d}t|ƒ‚d}tdddƒD ]}|t||ƒA }q>|dkrfd}t|ƒ‚d| _t|dƒt|dƒf| _|d d… d	krªd
d| j	 ddfg| _
ndd| j	 dd fg| _
d S )Né    znot an MSP filer   é   zbad MSP checksumÚ1r   é   r   Úraw©r   r   ©r   r   r   r   )ÚfpÚAssertionErrorÚreadr   ÚSyntaxErrorÚrangeÚi16Ú_modeÚ_sizeÚsizeZtile)ÚselfÚsÚmsgÚchecksumÚir   r   r   Ú_open4   s     zMspImageFile._openN)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionr*   r   r   r   r   r   0   s   r   c                   @  s    e Zd ZdZdddœdd„ZdS )Ú
MspDecoderTr	   ztuple[int, int])Úbufferr   c                 C  s¾  | j d k	st‚t ¡ }td| jjd d  ƒ}z8| j  d¡ t 	d| jj
› d�| j  | jj
d ¡¡}W n2 tjk
r˜ } zd}t|ƒ|‚W 5 d }~X Y nX t|ƒD �]\}}zÀ|d	krÄ| |¡ W q¢| j  |¡}	t|	ƒ|krôd
|› d|› �}t|ƒ‚d	}
|
|k �rj|	|
 }|
d7 }
|d	k�rFt 	d|	|
¡\}}| || ¡ |
d7 }
qø|}| |	|
|
| … ¡ |
|7 }
qøW q¢ tjk
�r¦ } zd|› �}t|ƒ|‚W 5 d }~X Y q¢X q¢|  | ¡ d¡ dS )N)éÿ   é   é   r   ú<ÚHr   zTruncated MSP file in row mapr   zTruncated MSP file, expected z bytes on row r   ZBczCorrupted MSP file in row r   )éÿÿÿÿr   )Úfdr   ÚioÚBytesIOÚ	bytearrayÚstateZxsizeÚseekÚstructÚunpack_fromZysizer   ÚerrorÚOSErrorÚ	enumerateÚwriteÚlenZ
set_as_rawÚgetvalue)r%   r1   ZimgÚ
blank_lineZrowmapÚer'   ÚxZrowlenÚrowÚidxZruntypeZruncountZrunvalr   r   r   Údecodes   sJ     ÿ




zMspDecoder.decodeN)r+   r,   r-   Z	_pulls_fdrK   r   r   r   r   r0   N   s   #r0   r   zImage.Imagez	IO[bytes]zstr | bytesr   )Úimr   Úfilenamer   c                 C  sà   | j dkr d| j › d�}t|ƒ‚dgd }tdƒtdƒ |d< |d< | j\|d	< |d
< d\|d< |d< d\|d< |d< | j\|d< |d< d}|D ]}||A }q�||d< |D ]}| t|ƒ¡ qªt | |dd| j ddfg¡ d S )Nr   zcannot write mode z as MSPr   é   s   Das   nMr   r   é   )r   r   r   é   r   r3   r4   é	   é   r   r   r   r   )ÚmoderA   r!   r$   rC   Úo16r   Ú_save)rL   r   rM   r'   Úheaderr(   Úhr   r   r   rU   §   s     


rU   z.msp)Ú
__future__r   r9   r>   Útypingr   Ú r   r   Ú_binaryr   r!   r   rT   r   r   Z	PyDecoderr0   Zregister_decoderrU   Zregister_openr.   Zregister_saveZregister_extensionr   r   r   r   Ú<module>   s   	R