
    th,                        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
dd	d
Z
d Z G d dej                  Z G d dej                  Z G d dej                  Zd Z ej        ej        ee            ej        ej        e            ej        de            ej        de            ej        ej        g d            ej        ej        d           dS )   )Image	ImageFile)i16be)o8)o32les    	
1LRGBCMYKPRGBA)
   P1   P2   P3   P4   P5   P6s   P0CMYKs   PyPs   PyRGBAs   PyCMYKc                 2    | dd         dk    o	| d         dv S )N    r      Ps   0123456y )prefixs    f/var/www/html/mycamper/aliexpress-site/backend/venv/lib/python3.11/site-packages/PIL/PpmImagePlugin.py_acceptr   -   s#    !A#;$;6!9#;;    c                   (    e Zd ZdZdZd Zd Zd ZdS )PpmImageFilePPMzPbmplus imagec                     d}t          d          D ].}| j                            d          }|r	|t          v r n||z  }/|S )Nr      r   )rangefpreadb_whitespace)selfmagic_cs       r   _read_magiczPpmImageFile._read_magic9   sT    q 	 	AQA \))QJEEr   c                    d}t          |          dk    r| j                            d          }|sne|t          v r|s<nX|dk    r:| j                            d          dvr	 | j                            d          dv}||z  }t          |          dk    |sd}t	          |          t          |          dk    r&d|                                 }t	          |          |S )Nr   
   r      #s   
z Reached EOF while reading headerzToken too long in file header: )lenr"   r#   r$   
ValueErrordecode)r%   tokenr(   msgs       r   _read_tokenzPpmImageFile._read_tokenC   s    %jjBQA l"" dgll1ooW44 gll1ooW44QJE %jjB  	"4CS//!ZZ"__DELLNNDDCS//!r   c                    |                                  }	 t          |         }n# t          $ r d}t          |          w xY w|dv rd| _        n|dv rd| _        n|dv rd| _        d }d}|d	v rd
}t          d          D ]}t          |                                           }|dk    r|},|dk    r|}	|dk    rd| _        d}
 nc|x| _        }
O|dk    rR|}d|cxk     rdk     sn d}t          |          |dk    r|dk    rd| _        |d
k    r|dk    r	|dk    rd}
|dk    rd}|dk    r|
ddfn|
|f}||	f| _
        |dd||	f| j                                        |fg| _        d S )Nznot a PPM file)r   r   zimage/x-portable-bitmap)r   r   zimage/x-portable-graymap)r   r   zimage/x-portable-pixmapraw)r   r   r   	ppm_plain   r   r   r   1;I   i   z1maxval must be greater than 0 and less than 65536   r	   I  I;16Bppm)r)   MODESKeyErrorSyntaxErrorcustom_mimetyper!   intr2   moder.   _sizer"   telltile)r%   magic_numberrC   r1   maxvaldecoder_nameixr0   xsizeysizerawmodeargss               r   _openzPpmImageFile._open]   s   ''))	#&DD 	# 	# 	#"Cc"""	# >))#<D  ^++#=D  ^++#<D 000&L(( 	- 	-B((**++EQwwq3;; #DI#GE*..DIq6))))E))))MC$S//)C<<DCKK #DI;..43;;")3',".%"7"7Agv=NE\
"Q5%$8$',,..$OP			s	   $ A N)__name__
__module____qualname__formatformat_descriptionr)   r2   rO   r   r   r   r   r   5   sQ        F(    40Q 0Q 0Q 0Q 0Qr   r   c                   8    e Zd ZdZd Zd
dZd Zd Zd Zd Z	d	S )PpmPlainDecoderTc                 J    | j                             t          j                  S )N)fdr#   r   	SAFEBLOCK)r%   s    r   _read_blockzPpmPlainDecoder._read_block   s    w||I/000r   r   c                     |                     d|          }|                     d|          }||z  dk    rt          ||          nt          ||          S )N   
   r   )findminmax)r%   blockstartabs        r   _find_comment_endz!PpmPlainDecoder._find_comment_end   sN    JJue$$JJue$$EAIIs1ayyy3q!994r   c                 n   | j         rA|r?|                     |          }|dk    r||dz   d          }n|                                 }|?d| _         	 |                    d          }|dk    rnH|                     ||          }|dk    r|d |         ||dz   d          z   }n|d |         }d| _         nd|S )Nr   FTr,   )_comment_spansre   rZ   r^   )r%   ra   comment_endcomment_starts       r   _ignore_commentsz PpmPlainDecoder._ignore_comments   s    	/ 
/"44U;;"$$ "+/"3"34E !,,..E  
/ $	!JJt,,M""00FFKb   n}n-kAo6G6G0HH n}n-&*#	 r   c                    t                      }| j        j        | j        j        z  }t	          |          |k    r|                                 }|sn|                     |          }d                    |                                          }|D ](}|dvr"dt          |g          z  }t          |          )||z   d|         }t	          |          |k    t                              dd          }|                    |          S )z
        This is a separate method because in the plain PBM format, all data tokens are
        exactly one byte, so the inter-token whitespace is optional.
        r   )0   1   s   Invalid token for this mode: %sNs   01s    )	bytearraystaterK   rL   r-   rZ   rk   joinsplitbytesr.   	maketrans	translate)r%   datatotal_bytesra   tokensr0   r1   inverts           r   _decode_bitonalzPpmPlainDecoder._decode_bitonal   s   
 {{j&)99$ii;&&$$&&E ))%00EXXekkmm,,F * *((<ueW~~MC$S//) ) 6M<K<0D $ii;&& 44~~f%%%r   c                    t                      }d}| j        dk    rdnd}| j        dk    rdnd}t          j        | j                  }| j        j        | j        j        z  |z  |z  }d}t          |          |k    r|                                 }	|	s|rt          d          }	nn`| 	                    |	          }	|r||	z   }	d}|	
                                }
|	rb|	d	d                                          sF|
                                }t          |          |k    rd
|d |dz            z  }t          |          |
D ]}t          |          |k    rd
|d |dz            z  }t          |          t          |          }||k    rd| }t          |          t          ||z  |z            }|| j        dk    rt!          |          nt#          |          z  }t          |          |k    r nt          |          |k    |S )Nr+   r:      r   r;   r9   F    rg   s    Token too long found in data: %sz'Channel value too large for this mode: )ro   rC   r   getmodebandsrp   rK   rL   r-   rZ   rk   rr   isspacepopr.   rB   roundo32r   )r%   rH   rv   max_lenout_byte_countout_maxbandsrw   
half_tokenra   rx   r1   r0   values                 r   _decode_blockszPpmPlainDecoder._decode_blocks   s8   {{"i3..A9++%%"49--j&)99EANR
$ii;&&$$&&E  %dOOEE ))%00E #"U*"
[[]]F *U233Z//11 *#ZZ\\
z??W,,;j7UV;>WW  %S//)  u::''=mRSm@TTC$S//)E

6>>KEKKC$S//)efnw677di3&6&6E


BuIIEt99++E ,G $ii;&&J r   c                 
   d| _         | j        dk    r|                                 }d}n6| j        d         }|                     |          }| j        dk    rdn| j        }|                     t          |          |           dS )NFr   z1;8rg   r:   I;32rg   r   )rh   rC   rz   rN   r   
set_as_rawrs   )r%   bufferrv   rM   rH   s        r   r/   zPpmPlainDecoder.decode
  s    #9''))DGGYr]F&&v..D $	S 0 0ffdiGdW---ur   N)r   )
rP   rQ   rR   	_pulls_fdrZ   re   rk   rz   r   r/   r   r   r   rV   rV      sz        I1 1 15 5 5 5
     D& & &2. . .`
 
 
 
 
r   rV   c                       e Zd ZdZd ZdS )
PpmDecoderTc                 X   t                      }| j        d         }|dk     rdnd}| j        dk    rdnd}| j        dk    rdnd}t          j        | j                  }t          |          | j        j        | j        j        z  |z  |z  k     r| j	        
                    ||z            }t          |          ||z  k     rnt          |          D ]r}	|dk    r||	         nt          ||	|z            }
t          |t          |
|z  |z                      }
|| j        dk    rt          |
          nt!          |
          z  }st          |          | j        j        | j        j        z  |z  |z  k     | j        dk    rd	n| j        }|                     t%          |          |           d
S )Nrg      r   r8   r:   r|   r;   r9   r   r   )ro   rN   rC   r   r~   r-   rp   rK   rL   rX   r#   r!   i16r_   r   r   r   r   rs   )r%   r   rv   rH   in_byte_countr   r   r   pixelsrd   r   rM   s               r   r/   zPpmDecoder.decode  s   {{2#c\\q"i3..A9++%%"49--$ii$**TZ-==EVVVW\\-%"788F6{{]U2225\\ F F!.!!3!3F1IIVQEV9W9W  GU56>G+C%D%DEEdi3&6&6E


BuIIE $ii$**TZ-==EVVV !I,,&&$)dW---ur   N)rP   rQ   rR   r   r/   r   r   r   r   r     s(        I    r   r   c           
         | j         dk    rd\  }}nK| j         dk    rd\  }}n:| j         dk    rd\  }}n)| j         dv rd\  }}nd	| j          d
}t          |          |                    |d| j        z  z              |dk    r|                    d           n7|dk    r1|dk    r|                    d           n|                    d           t	          j        | |dd| j        z   d|ddffg           d S )Nr   )r7   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
r4   )r   r   r   r   )rC   OSErrorwritesizer   _save)imr"   filenamerM   headr1   s         r   r   r   5  s"   	w#~~$	C"	C&	O	#	#$327333cllHHTL27**+++u}}
	c>>HHXHHZ   OBeVbg%5q7Aq/JKLLLLLr   r=   r5   )z.pbmz.pgmz.ppmz.pnmzimage/x-portable-anymapN) r   r   _binaryr   r   r   r   r   r$   r>   r   r   	PyDecoderrV   r   r   register_openrS   register_saveregister_decoderregister_extensionsregister_mimer   r   r   <module>r      s  $         ! ! ! ! ! !       ! ! ! ! ! !
 + 	 	"< < <XQ XQ XQ XQ XQ9& XQ XQ XQ~@ @ @ @ @i) @ @ @F    $   <M M M<  L'w ? ? ?  L' / / /  uj ) ) )  {O 4 4 4  ,-/O/O/O P P P  L')B C C C C Cr   