a
    Ag                     @  s   d dl mZ d dlZd dlZd dlmZ ddlmZmZ ddl	m
Z ddl	mZ dd	d
ddZG dd dejZG dd dejZede dddddddZeejee eeje eejd dS )    )annotationsN)IO   )Image	ImageFile)i16le)o16lebytesbool)prefixreturnc                 C  s   | d d dv S )N   )   DanMs   LinS )r   r   r   Q/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/PIL/MspImagePlugin.py_accept'   s    r   c                   @  s"   e Zd ZdZdZddddZdS )MspImageFileMSPzWindows PaintNone)r   c                 C  s   | j d usJ | j d}t|s.d}t|d}tdddD ]}|t||A }q>|dkrfd}t|d| _t|dt|df| _|d d d	krt	d
d| j
 ddg| _nt	dd| j
 dg| _d S )N    znot an MSP filer      zbad MSP checksum1r      r   rawr   r   r   )fpreadr   SyntaxErrorrangei16_mode_sizer   _TilesizeZtile)selfsmsgchecksumir   r   r   _open4   s     zMspImageFile._openN)__name__
__module____qualname__formatformat_descriptionr)   r   r   r   r   r   0   s   r   c                   @  s    e Zd ZdZdddddZdS )
MspDecoderTz$bytes | Image.SupportsArrayInterfaceztuple[int, int])bufferr   c                 C  s  | j d usJ t }td| jjd d  }z8| j d td| jj	 d| j 
| jj	d }W n4 tjy } zd}t||W Y d }~n
d }~0 0 t|D ]\}}z|d	kr|| W q| j 
|}	t|	|krd
| d| }t|d	}
|
|k rl|	|
 }|
d7 }
|d	krHtd|	|
\}}|||  |
d7 }
q|}||	|
|
|   |
|7 }
qW q tjy } z d| }t||W Y d }~qd }~0 0 q| | 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   )fdioBytesIO	bytearraystateZxsizeseekstructunpack_fromZysizer   errorOSError	enumeratewritelenZ
set_as_rawgetvalue)r$   r0   imgZ
blank_lineZrowmaper&   xZrowlenrowidxZruntypeZruncountZrunvalr   r   r   decodes   sH      




"zMspDecoder.decodeN)r*   r+   r,   Z	_pulls_fdrJ   r   r   r   r   r/   N   s   #r/   r   zImage.Imagez	IO[bytes]zstr | bytesr   )imr   filenamer   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}|D ]}||A }q||d< |D ]}|t| qt| |tdd| j ddg d S )Nr   zcannot write mode z as MSPr      s   Das   nMr   r      )r   r   r      r   r2   r3   	      r   r   r   )	moder@   r   r#   rB   o16r   _saver"   )rK   r   rL   r&   headerr'   hr   r   r   rT      s     


rT   z.msp)
__future__r   r8   r=   typingr    r   r   _binaryr   r   r   rS   r   r   Z	PyDecoderr/   Zregister_decoderrT   Zregister_openr-   Zregister_saveZregister_extensionr   r   r   r   <module>   s   	R