U
    Å½„b—  ã                   @   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kS )Né   )ó   DanMs   LinS© )Úprefixr	   r	   ú6/tmp/pip-unpacked-wheel-_wxctax1/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rPtdƒ‚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Úreadr   ÚSyntaxErrorÚrangeÚi16ÚmodeÚ_sizeÚsizeZ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  ƒ}z8| j d¡ t d| jj	› d�| j 
| jj	d ¡¡}W n. tjk
r† } ztdƒ|‚W 5 d }~X Y nX t|ƒD ]ö\}}z¶|d	kr°| |¡ W q�| j 
|¡}t|ƒ|krÖtd
||fƒ‚d	}	|	|k �rL||	 }
|	d7 }	|
d	k�r(t d||	¡\}}| || ¡ |	d7 }	qÚ|
}| ||	|	| … ¡ |	|7 }	qÚW q� tjk
�r„ } ztd|› �ƒ|‚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 %d bytes on row %sr   ZBczCorrupted MSP file in row r   )éÿÿÿÿr   )ÚioÚBytesIOÚ	bytearrayÚstateZxsizeÚfdÚseekÚstructÚunpack_fromZysizer   ÚerrorÚOSErrorÚ	enumerateÚwriteÚlenZ
set_as_rawÚgetvalue)r   ÚbufferÚimgZ
blank_lineZrowmapÚeÚxZrowlenÚrowÚidxZruntypeZruncountZrunvalr	   r	   r   Údecodeo   sH     ÿ
 ÿ


$zMspDecoder.decodeN)r#   r$   r%   Z	_pulls_fdrC   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 }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   r*   r+   é	   é   r   r   r   r   )r   r8   r   r   r:   Úo16r   Ú_save)Zimr   ÚfilenameÚheaderr    Úhr	   r	   r   rJ   ¡   s    


rJ   z.msp)r/   r5   Ú r   r   Ú_binaryr   r   r   rI   r   r   Z	PyDecoderr(   Zregister_decoderrJ   Zregister_openr&   Zregister_saveZregister_extensionr	   r	   r	   r   Ú<module>   s   	P