o
    h                     @   s   d dl mZmZ d dlmZ d dlmZ d dlmZ dZ	dddd	d
dd	dZ
dd ZG dd dejZG dd dejZdd Zeejee eeje ede eejg d eejd dS )   )Image	ImageFile)i16be)o8)o32les    	
1LRGBZCMYKPRGBA)   P4   P5   P6s   P0CMYKs   PyPs   PyRGBAs   PyCMYKc                 C   s   | dd dko| d dv S )N    r      Ps   0456y )prefixr   r   Z/var/www/html/magazine_api/magazine_env/lib/python3.10/site-packages/PIL/PpmImagePlugin.py_accept*   s   r   c                   @   s,   e Zd ZdZdZdd Zdd Zdd Zd	S )
PpmImageFileZPPMzPbmplus imagec                 C   s<   d}t dD ]}| jd}|r|tv r |S ||7 }q|S )N       r   )rangefpreadb_whitespace)selfmagic_cr   r   r   _read_magic7   s   
zPpmImageFile._read_magicc                 C   s   d}t |dkr9| jd}|sn(|tv r|sqn |dkr/| jddvr.	 | jddvs%q||7 }t |dks|s?tdt |dkrLtd| |S )Nr   
   r      #s   
z Reached EOF while reading headerzToken too long in file header: )lenr   r   r   
ValueError)r   tokenr   r   r   r   _read_tokenA   s*   zPpmImageFile._read_tokenc                 C   s.  |   }zt| }W n ty   tdw dddd|| _|dkr*d| _d}n| | _}d}td	D ]>}t| 	 }|d
krD|}q5|dkrQ|}|dkrP n$q5|dkrs|}	|	dkrb|dkrbd| _|	dkrm|dkrmd}q5|	dkrsd}q5|dkr}|d
dfn||	f}
||f| _
|d
d
||f| j |
fg| _d S )Nznot a PPM filezimage/x-portable-bitmapzimage/x-portable-graymapzimage/x-portable-pixmap)r   r   r   r   1;Iraw   r   r         r   I  I;16Bppm)r    MODESKeyErrorSyntaxErrorgetZcustom_mimetypemoder   intr&   _sizer   tellZtile)r   Zmagic_numberr4   rawmodeZdecoder_nameZixr%   xsizeysizemaxvalargsr   r   r   _openY   sL   

"zPpmImageFile._openN)__name__
__module____qualname__formatformat_descriptionr    r&   r=   r   r   r   r   r   2   s    
r   c                   @   s   e Zd ZdZdd ZdS )
PpmDecoderTc                 C   sF  t  }t| jd d}|dk rdnd}| jdkrdnd}| jdkr#dnd}t| j}t|| jj| jj	 | | k r| j
|| }t||| k rLn@t|D ]+}	|dkrZ||	 nt||	| }
t|t|
| | }
|| jdkrvt|
nt|
7 }qPt|| jj| jj	 | | k s;| jdkrd	n| j}| t||d
df dS )Nr-      r   r*   r,      r+   zI;32r   )rD   r   )	bytearrayminr<   r4   r   Zgetmodebandsr#   stater9   r:   fdr   r   i16roundo32r   Z
set_as_rawbytes)r   bufferdatar;   Zin_byte_countZout_byte_countZout_maxZbandsZpixelsbvaluer8   r   r   r   decode   s&      zPpmDecoder.decodeN)r>   r?   r@   Z	_pulls_fdrS   r   r   r   r   rC      s    rC   c              
   C   s   | j dkr
d\}}n'| j dkrd\}}n| j dkrd\}}n| j dv r(d\}}n	td	| j  d
||d| j   |dkrE|d n|dkrX|dkrS|d n|d t| |dd| j d|ddffg d S )Nr   )r'   r   r   )r   r   r,   )r.   r   )r	   r   )r	   r   zcannot write mode z as PPMs   
%d %d
r   s   255
r   s   65535
r(   )r   r   r   r   )r4   OSErrorwritesizer   _save)Zimr   filenamer8   headr   r   r   rW      s"   








(rW   r/   )z.pbmz.pgmz.ppmz.pnmzimage/x-portable-anymapN) r   r   _binaryr   rK   r   r   rM   r   r0   r   r   Z	PyDecoderrC   rW   Zregister_openrA   Zregister_saveZregister_decoderZregister_extensionsZregister_mimer   r   r   r   <module>   s,   S