B
    -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kS )N   )s   DanMs   LinS )prefixr   r   6/tmp/pip-unpacked-wheel-rysjrues/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rd
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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  }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rtd
||fd	}	xt|	|k rP||	 }
|	d7 }	|
d	kr,td||	\}}|||  |	d7 }	q|
}|||	|	|   |	|7 }	qW W q tjk
r } ztd| |W d d }~X Y qX qW | | 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   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   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 }qW ||d< x|D ]}|t| qW 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   r4   r   r   r6   o16r   _save)Zimr   filenameheaderr   hr   r   r
   rF      s    



rF   z.msp)r+   r1    r   r   _binaryr   r   r   rE   r   r   Z	PyDecoderr%   Zregister_decoderrF   Zregister_openr#   Zregister_saveZregister_extensionr   r   r   r
   <module>   s   	P