B
    eAd                 @   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   D/var/www/html/venv/lib/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 d}t|d}x"tdddD ]}|t||A }q2W |dkr\d}t|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msg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   s  t  }td| jjd d  }y8| jd td| jj	 d| j
| jj	d }W n2 tjk
r } zd}t||W d d }~X Y nX xt|D ]\}}y|d	kr|| w| j
|}	t|	|krd
| d| }t|d	}
xt|
|k r`|	|
 }|
d7 }
|d	kr<td|	|
\}}|||  |
d7 }
q|}||	|
|
|   |
|7 }
qW W q tjk
r } zd| }t||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 z bytes on row r   ZBczCorrupted MSP file in row )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   bufferZimg
blank_lineZrowmaper   xZrowlenrowidxZruntypeZruncountZrunvalr   r   r
   decodeo   sD    (



 zMspDecoder.decodeN)r!   r"   r#   Z	_pulls_fdrA   r   r   r   r
   r&   J   s   #r&   r   c             C   s   | j dkr d| j  d}t|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   r6   r   r   r8   o16r   _save)Zimr   filenamer   headerr   hr   r   r
   rH      s     



rH   z.msp)r-   r3    r   r   _binaryr   r   r   rG   r   r   Z	PyDecoderr&   Zregister_decoderrH   Zregister_openr$   Zregister_saveZregister_extensionr   r   r   r
   <module>   s   	P