o
    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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]*)prefixbytesreturnboolc                 C  s
   |  dS )Ns	   /* XPM */)
startswith)r    r   T/var/www/html/optinet_system/venv/lib/python3.10/site-packages/PIL/XpmImagePlugin.py_accept   s   
r   c                   @  s(   e Zd ZdZdZdddZdd
dZdS )XpmImageFileXPMzX11 Pixel Mapr
   Nonec                 C  s  | j d usJ t| j dsd}t|	 | j  }|s#d}t|t|}|r+nqt|dt|df| _	t|d}t|d}i }t
|D ]q}| j   }|d|d  }||d d	  }	t
d
t|	dD ]G}
|	|
 dkr|	|
d  }|dkr|| jd< n-|drt|dd  d}t|d? d@ t|d? d@  t|d@  ||< nd}t| nqrd}t|qO|dkrd| _||f}nd| _tdd| | _|t| f}tdd| j | j  |g| _d S )N	   znot an XPM fileTzbroken XPM filer            r      cs   None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   _Tilesizetelltile)selfmsglinempalette_lengthbppr6   _csirgbrgb_intargsr   r   r   _open'   s`   

	


$zXpmImageFile._open
read_bytesr)   r	   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).0rF   r=   xsizer   r   
<listcomp>q   s   ( z*XpmImageFile.load_read.<locals>.<listcomp>r!   )r:   r#   r,   r4   )r=   rK   ysizerE   r   rN   r   	load_readj   s   

zXpmImageFile.load_readN)r
   r   )rK   r)   r
   r	   )__name__
__module____qualname__formatformat_descriptionrJ   rR   r   r   r   r   r   #   s
    
Cr   c                   @  s   e Zd ZdZd	ddZdS )

XpmDecoderTbuffer$bytes | Image.SupportsArrayInterfacer
   tuple[int, int]c           
      C  s   | j d usJ t }| j\}}| jj| jj }| jdkr |d9 }d}t||k ru| j  }|s0nE|	 dkr;|s;d}q"d
|ddd }td	t||D ]}||||  }	| jdkre|||	 7 }qO|t||	7 }qOt||k s(| t| d
S )Nr   r   Fs   /* pixels */T   "r   r   )r]   r   )fd	bytearrayrI   staterO   rQ   moder/   r&   r-   r4   r.   r,   r   index
set_as_rawr	   )
r=   rY   datarB   r6   dest_lengthpixel_headerr?   rF   keyr   r   r   decodey   s.   



zXpmDecoder.decodeN)rY   rZ   r
   r[   )rS   rT   rU   	_pulls_fdrh   r   r   r   r   rX   v   s    rX   r"   z.xpmz	image/xpm)r   r	   r
   r   )
__future__r   re r   r   r   _binaryr   compiler'   r   r   	PyDecoderrX   register_openrV   register_decoderregister_extensionregister_mimer   r   r   r   <module>   s   

S"