B
    0\                 @   s   d dl mZmZ d dlmZmZmZ ddl	Z	ddl
Z
d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 )   )Image	ImageFile)i16leo16lei8    Nz0.1c             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}|d d dkr$tdd}x,tdddD ]}|t|||d  A }q6W |dkrft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   )s   DanMs   LinSznot an MSP filer      zbad MSP checksum1   s   DanMraw)r   r   )r   r   r   r   )	fpread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  }y4| jd td| jj	 | j
| jj	d }W n tjk
rr   tdY nX xt|D ]\}}y|dkr|| w~| j
|}t||krtd	||fd}xx||k r>t|| }	|d
7 }|	dkrtd||\}
}|||
  |d7 }q|	}
|||||
   ||
7 }qW W q~ tjk
rf   td| Y q~X q~W | | 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 %d)r   r   r   )r   r   )ioBytesIO	bytearraystateZxsizefdseekstructZunpack_fromZysizer   errorIOError	enumeratewritelenr   Z
set_as_rawgetvalue)r   bufferZimgZ
blank_lineZrowmapxZrowlenrowidxZruntypeZruncountZrunvalr	   r	   r   decodeo   sB    



zMspDecoder.decodeN)r    r!   r"   Z	_pulls_fdr9   r	   r	   r	   r   r$   J   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}x|D ]}||A }qW ||d< x|D ]}|t| qW t| |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   r   r   )r   r0   r   r   r2   o16r   _save)Zimr   filenameheaderr   hr	   r	   r   r@      s    



r@   z.msp) r   r   Z_binaryr   r   r   r?   r   r.   r(   __version__r   r   Z	PyDecoderr$   Zregister_decoderr@   Zregister_openr#   Zregister_saveZregister_extensionr	   r	   r	   r   <module>   s   O