o
    üÞh  ã                   @  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¡S )N)ó   DanMs   LinS)Ú
startswith)r	   © r   úR/var/www/html/premium_crap/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	¡rUt	 
d
d| j dd¡g| _d S t	 
dd| j d¡g| _d S )Né    znot an MSP filer   é   zbad MSP checksumÚ1é   é   r   Úraw©r   r   r   )ÚfpÚreadr   ÚSyntaxErrorÚrangeÚi16Ú_modeÚ_sizer   r   Ú_TileÚ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Úbufferú$bytes | Image.SupportsArrayInterfacer   ú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&   r2   ÚimgÚ
blank_lineÚrowmapÚer(   ÚxÚrowlenÚrowÚidxÚruntypeÚruncountÚrunvalr   r   r   Údecodes   sT    ÿ
€þ

ö€

€þzMspDecoder.decodeN)r2   r3   r   r4   )r,   r-   r.   Ú	_pulls_fdrX   r   r   r   r   r1   N   s    #r1   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 | |t dd| j dd¡g¡ d S )Nr   zcannot write mode z as MSPr   é   s   Das   nMr   r   é   )r   r   r   é   r   r6   r7   é	   é   r   r   r   )	ÚmoderG   r    r$   rI   Úo16r   Ú_saver#   )rZ   r   r]   r(   Úheaderr)   Úhr   r   r   rf   §   s    


&rf   z.msp)r	   r
   r   r   )rZ   r[   r   r\   r]   r^   r   r   )Ú
__future__r   r=   rC   Útypingr   Ú r   r   Ú_binaryr   r    r   re   r   r   Ú	PyDecoderr1   Úregister_decoderrf   Úregister_openr/   Úregister_saveÚregister_extensionr   r   r   r   Ú<module>   s   
	R
