
    e                    ~   d dl mZ 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 Z G d d	ej                        Z G d
 dej                        Z ej                   de       d Z ej$                  ej&                  ee        ej(                  ej&                  e        ej*                  ej&                  d       y)    )annotationsN   )Image	ImageFile)i16le)o16lec                    | d d dv S )N   )   DanMs   LinS )prefixs    4/usr/lib/python3/dist-packages/PIL/MspImagePlugin.py_acceptr   &   s    "1:+++    c                      e Zd ZdZdZd Zy)MspImageFileMSPzWindows Paintc                   | j                   j                  d      }t        |      sd}t        |      d}t	        ddd      D ]  }|t        ||      z  } |dk7  rd}t        |      d| _        t        |d      t        |d      f| _        |d d d	k(  rd
d| j                  z   ddfg| _	        y dd| j                  z   dd fg| _	        y )N    znot an MSP filer      zbad MSP checksum1r
      r   rawr   r   r   r   r   r   )
fpreadr   SyntaxErrorrangei16_mode_sizesizetile)selfsmsgchecksumis        r   _openzMspImageFile._open3   s    GGLLqz#Cc"" q"a 	,A#a)+H	,q=$Cc""
AYAq	)
Ra5G$))!3REFDI$))!3R>?DIr   N)__name__
__module____qualname__formatformat_descriptionr*   r   r   r   r   r   /   s    F(@r   r   c                      e Zd ZdZd Zy)
MspDecoderTc                   t        j                         }t        d| j                  j                  dz   dz  z        }	 | j
                  j                  d       t        j                  d| j                  j                   d| j
                  j                  | j                  j                  dz              }t        |      D ]  \  }}	 |d	k(  r|j                  |       | j
                  j                  |      }	t        |	      |k7  rd
| d| }t        |      d	}
|
|k  rg|	|
   }|
dz  }
|d	k(  r4t        j                  d|	|
      \  }}|j                  ||z         |
dz  }
n|}|j                  |	|
|
|z           |
|z  }
|
|k  rg | j!                  |j#                         d       y# t        j                  $ r}d}t        |      |d }~ww xY w# t        j                  $ r}d| }t        |      |d }~ww xY w)N)         r   <Hr   zTruncated MSP file in row mapr   zTruncated MSP file, expected z bytes on row r   BczCorrupted MSP file in row r   )r   )ioBytesIO	bytearraystatexsizefdseekstructunpack_fromysizer   errorOSError	enumeratewritelen
set_as_rawgetvalue)r%   bufferimg
blank_linerowmaper'   xrowlenrowidxruntyperuncountrunvals                 r   decodezMspDecoder.decodep   s   jjlw4::+;+;a+?A*EFG
	&GGLL''DJJ$$%Q'djj6F6F6J)KF #6* 	*IAv*Q;IIj)ggll6*s8v%9&PQsSC!#,&Fl!#hG1HC!|-3-?-?c3-O*6		&8"34q#*		#cC(N";<x Fl	*4 	4A || 	&1C#,A%	&4 << *21#6cl)*s7   A9F- 	G B)G-G GGG?)G::G?N)r+   r,   r-   	_pulls_fdrW   r   r   r   r1   r1   K   s    F I(r   r1   r   c                   | j                   dk7  rd| j                    d}t        |      dgdz  }t        d      t        d      c|d<   |d<   | j                  \  |d	<   |d
<   d\  |d<   |d<   d\  |d<   |d<   | j                  \  |d<   |d<   d}|D ]  }||z  }	 ||d<   |D ]  }|j	                  t        |              t        j                  | |dd| j                  z   ddfg       y )Nr   zcannot write mode z as MSPr      s   Das   nMr   r      )r   r   r
      r   r4   r5   	      r   r   r   r   )moderE   r    r#   rG   o16r   _save)imr   filenamer'   headerr(   hs          r   ra   ra      s   	ww#~"277)73cl S2XFu:s5zF1Ivay77F1IvayF1IvayF1Ivay77F1IvayH  a< F2J  
Q OOBeVbgg%5r;GHIr   z.msp)
__future__r   r:   rA    r   r   _binaryr   r    r   r`   r   r   	PyDecoderr1   register_decoderra   register_openr.   register_saveregister_extensionr   r   r   <module>rn      s   2 # 	   ! !,@9&& @8M$$ M`   uj )J<   L''w ?   L'' /   ,,f 5r   