o
    Ñ­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„ZG dd„ dejƒZG dd„ dejƒZe de¡ 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ÚprefixÚbytesÚreturnÚboolc                 C  s   | d d… dv S )Né   )ó   DanMs   LinS© )r	   r   r   úO/var/www/html/CropPilot/venv/lib/python3.10/site-packages/PIL/MspImagePlugin.pyÚ_accept'   s   r   c                   @  s   e Zd ZdZdZddd„ZdS )	ÚMspImageFileÚMSPzWindows Paintr   ÚNonec                 C  sÆ   | j d usJ ‚| j  d¡}t|ƒsd}t|ƒ‚d}tdddƒD ]	}|t||ƒA }q|dkr3d}t|ƒ‚d| _t|dƒt|dƒf| _|d d… d	krVd
d| j ddfg| _	d S 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Úreadr   ÚSyntaxErrorÚrangeÚi16Ú_modeÚ_sizeÚsizeÚtile)ÚselfÚsÚmsgÚchecksumÚir   r   r   Ú_open4   s    zMspImageFile._openN)r   r   )Ú__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„ZdS )
Ú
MspDecoderTÚbufferr
   r   útuple[int, int]c                 C  s¦  | j d usJ ‚t ¡ }td| jjd d  ƒ}z| j  d¡ t d| jj	› d�| j  
| jj	d ¡¡}W n tjyG } zd}t|ƒ|‚d }~ww t|ƒD ]|\}}za|d	kr\| |¡ W qL| j  
|¡}	t|	ƒ|krtd
|› d|› �}t|ƒ‚d	}
|
|k r°|	|
 }|
d7 }
|d	kr›t d|	|
¡\}}| || ¡ |
d7 }
n|}| |	|
|
| … ¡ |
|7 }
|
|k szW qL tjyÈ } z
d|› �}t|ƒ|‚d }~ww |  | ¡ d¡ dS )N)éÿ   é   é   r   ú<ÚHr   zTruncated MSP file in row mapr   zTruncated MSP file, expected z bytes on row r   ÚBczCorrupted MSP file in row r   )éÿÿÿÿr   )ÚfdÚioÚBytesIOÚ	bytearrayÚstateÚxsizeÚseekÚstructÚunpack_fromÚysizer   ÚerrorÚOSErrorÚ	enumerateÚwriteÚlenÚ
set_as_rawÚgetvalue)r%   r1   ÚimgÚ
blank_lineÚrowmapÚer'   ÚxÚrowlenÚrowÚidxÚruntypeÚruncountÚrunvalr   r   r   Údecodes   sT    ÿ
€þ

ö€

€þzMspDecoder.decodeN)r1   r
   r   r2   )r+   r,   r-   Ú	_pulls_fdrV   r   r   r   r   r0   N   s    #r0   r   ÚimúImage.Imager   ú	IO[bytes]Úfilenameústr | bytesr   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 }qH||d< |D ]	}| t|ƒ¡ qUt | |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   r4   r5   é	   é   r   r   r   r   )ÚmoderE   r    r#   rG   Úo16r   Ú_save)rX   r   r[   r'   Úheaderr(   Úhr   r   r   rd   §   s    


"rd   z.msp)r	   r
   r   r   )rX   rY   r   rZ   r[   r\   r   r   )Ú
__future__r   r;   rA   Útypingr   Ú r   r   Ú_binaryr   r    r   rc   r   r   Ú	PyDecoderr0   Úregister_decoderrd   Úregister_openr.   Úregister_saveÚregister_extensionr   r   r   r   Ú<module>   s   
	R
