3
`JZ                 @   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jde dd Zejejee ejeje ejejd dS )   )Image	ImageFile)i16leo16lei8    Nz0.1c             C   s   | d d dkS )N      DanM   LinS)r	   r
    )prefixr   r   4/usr/lib/python3/dist-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 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      DanM   LinSznot an MSP filer      zbad MSP checksum1   rawr   r   )r   r   )r   r   )r   r   r   )r   r   )fpreadSyntaxErrorrangei16mode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 j }td| jjd d  }y4| jjd tjd| jj	 | jj
| jj	d }W n tjk
rr   tdY nX x t|D ]\}}y|dkr|j| w| jj
|}t||krtd	||fd}x||k rJt|| }	|d
7 }|	dkr&tjd|||d  \}
}|j||
  |d7 }q|	}
|j||||
   ||
7 }qW W q tjk
rr   td| Y qX qW | j|j 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)   )r   r   r   )r   r   )ioBytesIO	bytearraystateZxsizefdseekstructZunpack_fromZysizer   errorIOError	enumeratewritelenr   ZunpackZ
set_as_rawgetvalue)r   bufferZimgZ
blank_lineZrowmap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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 ]}|jt| qW tj| |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   r   )r   r4   r   r   r6   o16r   _save)Zimr   filenameheaderr!   hr   r   r   rD      s    



rD   z.msp) r   r   Z_binaryr   r   r   rC   r   r2   r,   __version__r   r   Z	PyDecoderr(   Zregister_decoderrD   Zregister_openr'   Zregister_saveZregister_extensionr   r   r   r   <module>   s   N