o
    h                     @   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v S )N   )   DanMs   LinS )prefixr	   r	   Z/var/www/html/magazine_api/magazine_env/lib/python3.10/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tdd}tdddD ]	}|t||A }q|dkr(tdd| _t|dt|df| _|d d d	krKd
d| j ddfg| _	d S dd| j dd fg| _	d S )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sizeZtile)selfschecksumir	   r	   r   _open3   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  }z| jd td| jj	 d| j
| jj	d }W n tjy> } ztd|d }~ww t|D ]u\}}z\|d	krS|| W qC| j
|}t||krftd
||fd	}	|	|k r||	 }
|	d7 }	|
d	krtd||	\}}|||  |	d7 }	n|
}|||	|	|   |	|7 }	|	|k slW qC tjy } ztd| |d }~ww | | d dS )N)         r   <Hr   zTruncated MSP file in row mapr   z/Truncated MSP file, expected %d bytes on row %sr   ZBczCorrupted MSP file in row 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exZrowlenrowidxZruntypeZruncountZrunvalr	   r	   r   decodeo   sP    


zMspDecoder.decodeN)r#   r$   r%   Z	_pulls_fdrC   r	   r	   r	   r   r(   J   s    #r(   r   c                 C   s   | j dkrtd| j  ddgd }tdtd|d< |d< | j\|d	< |d
< d\|d< |d< d\|d< |d< | j\|d< |d< d}|D ]}||A }qF||d< |D ]	}|t| qSt| |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   r8   r   r   r:   o16r   _save)Zimr   filenameheaderr    hr	   r	   r   rJ      s   


"rJ   z.msp)r/   r5    r   r   _binaryr   r   r   rI   r   r   Z	PyDecoderr(   Zregister_decoderrJ   Zregister_openr&   Zregister_saveZregister_extensionr	   r	   r	   r   <module>   s   	P