U
    <®/eí  ã                   @   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-esgj5yuu/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 d}t|ƒ‚d}tdddƒD ]}|t||ƒA }q0|dkrXd}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Úreadr   ÚSyntaxErrorÚrangeÚi16Ú_modeÚ_sizeÚsizeZtile)ÚselfÚsÚmsgÚchecksumÚir	   r	   r   Ú_open2   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 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 r\|	|
 }|
d7 }
|d	kr8t 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   )Ú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Úer    ÚxZrowlenÚrowÚidxZruntypeZruncountZrunvalr	   r	   r   Údecodeo   sH     ÿ




zMspDecoder.decodeN)r$   r%   r&   Z	_pulls_fdrD   r	   r	   r	   r   r)   J   s   #r)   r   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   r+   r,   é	   é   r   r   r   r   )Úmoder9   r   r   r;   Úo16r   Ú_save)Zimr   Úfilenamer    Úheaderr!   Úhr	   r	   r   rL   ¡   s     


rL   z.msp)r0   r6   Ú r   r   Ú_binaryr   r   r   rK   r   r   Z	PyDecoderr)   Zregister_decoderrL   Zregister_openr'   Zregister_saveZregister_extensionr	   r	   r	   r   Ú<module>   s   	P