a
    h0                     @  s   d dl mZ d dlZddlmZmZmZ ddlmZ e	dZ
ddd	d
dZG dd dejZG dd dejZeejee ede eejd eejd dS )    )annotationsN   )Image	ImageFileImagePalette)o8s$   "([0-9]*) ([0-9]*) ([0-9]*) ([0-9]*)bytesbool)prefixreturnc                 C  s
   |  dS )Ns	   /* XPM */)
startswith)r
    r   @/var/www/auris/lib/python3.9/site-packages/PIL/XpmImagePlugin.py_accept   s    r   c                   @  s2   e Zd ZdZdZddddZddd	d
dZdS )XpmImageFileZXPMzX11 Pixel MapNone)r   c                 C  s  | j d usJ t| j ds*d}t|| j  }|sDd}t|t|}|r*qVq*t|dt|df| _	t|d}t|d}i }t
|D ]}| j   }|d|d  }||d d  }	t
d	t|	dD ]}
|	|
 d
kr|	|
d  }|dkr|| jd< n\|drdt|dd  d}t|d? d@ t|d? d@  t|d@  ||< nd}t| qqd}t|q|dkrd| _||f}n.d| _tdd| | _|t| f}tdd| j | j  |g| _d S )N	   znot an XPM filezbroken XPM filer            r      cs   NoneZtransparency   #         zcannot read this XPM file   RGBP    xpm)r   r   )fpr   readSyntaxErrorreadlinexpm_headmatchintgroup_sizerangerstripsplitleninfor   r   
ValueError_moder   rawjoinvaluespalettetuplekeysr   Z_TilesizetellZtile)selfmsglinemZpalette_lengthbppr4   _csiZrgbZrgb_intargsr   r   r   _open'   sX    






zXpmImageFile._openr'   r   )
read_bytesr   c                   s:    j \} jd usJ  fddt|D }d|S )Nc                   s(   g | ] } j  d d   qS )r   )r!   r$   ljust).0rA   r9   xsizer   r   
<listcomp>q   r   z*XpmImageFile.load_read.<locals>.<listcomp>r   )r7   r!   r*   r2   )r9   rD   ysizer@   r   rG   r   	load_readj   s    
zXpmImageFile.load_readN)__name__
__module____qualname__formatformat_descriptionrC   rK   r   r   r   r   r   #   s   Cr   c                   @  s    e Zd ZdZdddddZdS )
XpmDecoderTz$bytes | Image.SupportsArrayInterfaceztuple[int, int])bufferr   c           
      C  s   | j d usJ t }| j\}}| jj| jj }| jdkr@|d9 }d}t||k r| j  }|s`q|	 dkrv|svd}qDd
|ddd }td	t||D ]>}||||  }	| jdkr|||	 7 }q|t||	7 }qqD| t| d
S )Nr   r   Fs   /* pixels */T   "r   r   )rT   r   )fd	bytearrayrB   staterH   rJ   moder-   r$   r+   r2   r,   r*   r   indexZ
set_as_rawr   )
r9   rR   datar=   r4   Zdest_lengthZpixel_headerr;   rA   keyr   r   r   decodey   s,    



zXpmDecoder.decodeN)rL   rM   rN   Z	_pulls_fdr\   r   r   r   r   rQ   v   s   rQ   r    z.xpmz	image/xpm)
__future__r   re r   r   r   _binaryr   compiler%   r   r   Z	PyDecoderrQ   Zregister_openrO   Zregister_decoderZregister_extensionZregister_mimer   r   r   r   <module>   s   
S"