B
    ąz÷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é   )s   DanMs   LinS© )Śprefixr   r   ś1lib/python3.7/site-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}x"tdddD ]}|t||A }q.W |dkrTt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   é   s   DanMŚraw)r   r   )r   r   r   r   )
ŚfpŚreadr   ŚSyntaxErrorŚrangeŚi16ŚmodeZ_sizeŚsizeZtile)ŚselfŚsŚchecksumŚir   r   r
   Ś_open3   s    zMspImageFile._openN)Ś__name__Ś
__module__Ś__qualname__ŚformatZ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  }y8| j d” t d| jj	 d| j 
| jj	d ””}W n. tjk
r } ztd|W d d }~X Y nX xt|D ]ų\}}yø|d	kr²| |” w| j 
|”}t||krŲtd
||fd	}	xt|	|k rP||	 }
|	d7 }	|
d	kr,t d||	”\}}| || ” |	d7 }	qŽ|
}| ||	|	|  ” |	|7 }	qŽW W q tjk
r } ztd| |W d d }~X Y qX qW |  | ” 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   r   )é’’’’r   )ŚioŚBytesIOŚ	bytearrayŚstateZxsizeŚfdŚseekŚstructZunpack_fromZysizer   ŚerrorŚOSErrorŚ	enumerateŚwriteŚlenZ
set_as_rawŚgetvalue)r   ŚbufferZimgZ
blank_lineZrowmapŚeŚxZrowlenŚrowŚidxZruntypeZruncountZrunvalr   r   r
   Śdecodeo   s@    (


&zMspDecoder.decodeN)r   r    r!   Z	_pulls_fdr<   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}x|D ]}||A }qW ||d< x|D ]}| t|” q¬W 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   r   r   )r   r2   r   r   r4   Śo16r   Ś_save)Zimr   ŚfilenameŚheaderr   Śhr   r   r
   rC   ”   s    



rC   z.msp)r*   r0   Ś r   r   Z_binaryr   r   r   rB   r   r   Z	PyDecoderr#   Zregister_decoderrC   Zregister_openr"   Zregister_saveZregister_extensionr   r   r   r
   Ś<module>   s   	P