U
    &^                     @   s   d dl Z d dlZddlmZmZ ddlmZmZ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)i8i16leo16lec                 C   s   | d d dkS )N      DanMs   LinS )prefixr   r   6/tmp/pip-install-a1j0c_p1/Pillow/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}|d d dkr$tdd}tdddD ]}|t|||d  A }q4|dkrbtdd| _t|dd  t|d	d  f| _|d d d
krdd| j ddfg| _ndd| j dd fg| _d S )N    r   r	   znot an MSP filer      zbad MSP checksum1   r
   rawr   r   r   r   r   r   )	fpreadSyntaxErrorrangei16mode_sizesizeZtile)selfs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   sz  t  }td| jjd d  }z4| jd td| jj	 | j
| jj	d }W n tjk
rr   tdY nX t|D ]\}}z|dkr|| W q|| j
|}t||krtd	||fd}||k r<t|| }	|d
7 }|	dkrtd||\}
}|||
  |d7 }q|	}
|||||
   ||
7 }qW q| tjk
rb   td| Y q|X q|| | d dS )N)         r   z<%dHr   zTruncated MSP file in row mapr   z/Truncated MSP file, expected %d bytes on row %sr   ZBczCorrupted MSP file in row %dr   r   )ioBytesIO	bytearraystateZxsizefdseekstructunpack_fromZysizer   errorOSError	enumeratewritelenr   Z
set_as_rawgetvalue)r    bufferimgZ
blank_lineZrowmapxZrowlenrowidxZruntypeZruncountZrunvalr   r   r   decoden   sH    
 
 


zMspDecoder.decodeN)r%   r&   r'   Z	_pulls_fdrA   r   r   r   r   r*   I   s   #r*   r   c                 C   s   | j dkrtd| j  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| qt| |dd| j ddfg d S )Nr   zcannot write mode %s as MSPr      s   Das   nMr   r      )r   r   r      r   r,   r-   	      r   r   r   r   )r   r7   r   r   r9   o16r   _save)Zimr   filenameheaderr"   hr   r   r   rH      s    


rH   z.msp)r.   r4    r   r   _binaryr   r   r   r   rG   r   r   Z	PyDecoderr*   Zregister_decoderrH   Zregister_openr(   Zregister_saveZregister_extensionr   r   r   r   <module>   s   	P