o
    Z#ûa–  ã                   @   s¨   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	 dd„ Z
G dd	„ d	ejƒZG d
d„ dejƒZe de¡ dd„ Ze ejee
¡ e eje¡ e ejd¡ dS )é    Né   )ÚImageÚ	ImageFile)Úi16le)Úo16lec                 C   s   | d d… dv S )Né   )ó   DanMs   LinS© )Úprefixr	   r	   ú4/usr/lib/python3/dist-packages/PIL/MspImagePlugin.pyÚ_accept%   s   r   c                   @   s   e Zd ZdZdZdd„ ZdS )ÚMspImageFileÚMSPzWindows Paintc                 C   s°   | j  d¡}t|ƒstdƒ‚d}tdddƒD ]	}|t||ƒA }q|dkr(tdƒ‚d| _t|dƒt|dƒf| _|d d… d	krKd
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ÚchecksumÚir	   r	   r   Ú_open3   s   zMspImageFile._openN)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionr#   r	   r	   r	   r   r   .   s    r   c                   @   s   e Zd ZdZdd„ ZdS )Ú
MspDecoderTc                 C   s†  t  ¡ }td| jjd d  ƒ}z| j d¡ t d| jj	› d�| j 
| jj	d ¡¡}W n tjy> } ztdƒ|‚d }~ww t|ƒD ]u\}}z\|d	krS| |¡ W qC| j 
|¡}t|ƒ|krftd
||fƒ‚d	}	|	|k r¢||	 }
|	d7 }	|
d	kr�t d||	¡\}}| || ¡ |	d7 }	n|
}| ||	|	| … ¡ |	|7 }	|	|k slW qC tjy¸ } ztd|› �ƒ|‚d }~ww |  | ¡ d¡ dS )N)éÿ   é   é   r   ú<ÚHr   zTruncated MSP file in row mapr   z/Truncated MSP file, expected %d bytes on row %sr   ÚBczCorrupted MSP file in row r   r   )ÚioÚBytesIOÚ	bytearrayÚstateÚxsizeÚfdÚseekÚstructÚunpack_fromÚysizer   ÚerrorÚOSErrorÚ	enumerateÚwriteÚlenÚ
set_as_rawÚgetvalue)r   ÚbufferÚimgÚ
blank_lineÚrowmapÚeÚxÚrowlenÚrowÚidxÚruntypeÚruncountÚrunvalr	   r	   r   Údecodeo   sP    ÿ
€ÿ
ÿ
ö€€ÿzMspDecoder.decodeN)r$   r%   r&   Ú	_pulls_fdrM   r	   r	   r	   r   r)   J   s    #r)   r   c                 C   sÜ   | j dkrtd| j › d�ƒ‚dgd }tdƒtdƒ|d< |d< | j\|d	< |d
< d\|d< |d< d\|d< |d< | j\|d< |d< d}|D ]}||A }qF||d< |D ]	}| t|ƒ¡ qSt | |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   r+   r,   é	   é   r   r   r   r   )r   r;   r   r   r=   Úo16r   Ú_save)Úimr   ÚfilenameÚheaderr!   Úhr	   r	   r   rU   ¡   s   


"rU   z.msp)r0   r7   Ú r   r   Ú_binaryr   r   r   rT   r   r   Ú	PyDecoderr)   Úregister_decoderrU   Úregister_openr'   Úregister_saveÚregister_extensionr	   r	   r	   r   Ú<module>   s   	P