
    &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       y)   )Image	ImageFile)i16be)o8)o32les    	
1LRGBCMYKPRGBA)
   P1   P2   P3   P4   P5   P6s   P0CMYKs   PyPs   PyRGBAs   PyCMYKc                 $    | dd dk(  xr | d   dv S )N    r      Ps   0123456y )prefixs    Z/home/stella.sw7ft.com/public_html/venv/lib/python3.12/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y)PpmImageFilePPMzPbmplus imagec                     d}t        d      D ]/  }| j                  j                  d      }|r|t        v r |S ||z  }1 |S )Nr      r   )rangefpreadb_whitespace)selfmagic_cs       r   _read_magiczPpmImageFile._read_magic9   sO    q 	AQA\) QJE		
 r   c                    d}t        |      dk  r| j                  j                  d      }|snb|t        v r|s7nV|dk(  r=| j                  j                  d      dvr	 | j                  j                  d      dvrz||z  }t        |      dk  r|sd}t	        |      t        |      dkD  rd|j                          }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    %jBQAl"dggll1oW4 ggll1oW4QJE %jB 4CS/!Z"_3ELLN3CDCS/!r   c                    | j                         }	 t        |   }|dv rd| _        n|dv rd| _        n|dv rd| _        d }d}|d	v rd
}t        d      D ]  }t        | j                               }|dk(  r|}$|dk(  r|}	|dk(  rd| _        d}
 nZ|x| _        }
E|dk(  sK|}d|cxk  rdk  sn d}t        |      |dkD  r|dk(  rd| _        |d
k7  s~|dk(  r|dk(  rd}
|dk7  sd} |dk(  r
ddfn
|f}	f| _
        |dd||	f| j                  j                         |fg| _        y # t        $ r d}t        |      w xY w)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   '')	#&D
 >)#<D ^+#=D ^+#<D 00&L( 	-B((*+EQwq3; #DI#G*..DIq6)E)MC$S/)C<DCK #DI;.43;")3',3	-6 #/%"7Agv=NE\
"Q5%$8$'',,.$OP	Y  	#"Cc""	#s   	D( (D?N)__name__
__module____qualname__formatformat_descriptionr)   r2   rO   r   r   r   r   r   5   s    F(40Qr   r   c                   6    e Zd ZdZd Zd	dZd Zd Zd Zd Z	y)
PpmPlainDecoderTc                 T    | j                   j                  t        j                        S )N)fdr#   r   	SAFEBLOCK)r%   s    r   _read_blockzPpmPlainDecoder._read_block   s    ww||I//00r   c                     |j                  d|      }|j                  d|      }||z  dkD  rt        ||      S t        ||      S )N   
   r   )findminmax)r%   blockstartabs        r   _find_comment_endz!PpmPlainDecoder._find_comment_end   sC    JJue$JJue$EAIs1ay43q!94r   c                 0   | j                   r4|r2| j                  |      }|dk7  r	||dz   d  }n| j                         }|r2d| _         	 |j                  d      }|dk(  r	 |S | j                  ||      }|dk7  r|d | ||dz   d  z   }n|d | }d| _         	 |S O)Nr   FTr,   )_comment_spansre   rZ   r^   )r%   ra   comment_endcomment_starts       r   _ignore_commentsz PpmPlainDecoder._ignore_comments   s    "44U;"$ "+/"34E !,,.E  $!JJt,M"  00FKb  n}-kAo6G0HH n}-&*# r   c                    t               }| j                  j                  | j                  j                  z  }t	        |      |k7  r| j                         }|snl| j                  |      }dj                  |j                               }|D ]   }|dvsdt        |g      z  }t        |       ||z   d| }t	        |      |k7  rt        j                  dd      }|j                  |      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    
 {jj&&)9)99$i;&$$&E))%0EXXekkm,F *(<ueW~MC$S/)* 6M<K0D $i;& 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        |      |k7  r:| j                         }	|	s|rt        d      }	n	 |S | j                  |	      }	|r||	z   }	d}|	j                         }
|	rG|	d	d  j                         s4|
j                         }t        |      |kD  rd
|d |dz    z  }t        |      |
D ]  }t        |      |kD  rd
|d |dz    z  }t        |      t        |      }||kD  rd| }t        |      t        ||z  |z        }|| j                  dk(  rt!        |      n
t#        |      z  }t        |      |k(  s n t        |      |k7  r:|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   s   {"ii3.A99+%""499-jj&&)9)99EANR
$i;&$$&E%dOE < 9 ))%0E"U*"
[[]FU23Z//1#ZZ\
z?W,;j7UV;>WW  %S/) u:'=mRS@TTC$S/)E
6>CE7KC$S/)efnw67dii3&6E
BuIEt9+3 $i;&J r   c                    d| _         | j                  dk(  r| j                         }d}n=| j                  d   }| j	                  |      }| j                  dk(  rdn| j                  }| j                  t        |      |       y)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
  sq    #99'')DGYYr]F&&v.D $		S 0fdiiGdW-r   N)r   )
rP   rQ   rR   	_pulls_fdrZ   re   rk   rz   r   r/   r   r   r   rV   rV      s'    I15
 D&2.`
r   rV   c                       e Zd ZdZd Zy)
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                  j                  ||z        }t        |      ||z  k  rnt        |      D ]^  }	|dk(  r||	   nt        ||	|z        }
t        |t        |
|z  |z              }
|| j                  dk(  rt        |
      n
t!        |
      z  }` t        |      | j                  j                  | j                  j                  z  |z  |z  k  r| j                  dk(  rd	n| j                  }| j#                  t%        |      |       y
)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"ii3.A99+%""499-$i$****TZZ-=-==EVVWW\\-%"78F6{]U225\ F!.!!3F1IVQEV9W  GU56>G+C%DEdii3&6E
BuIEF $i$****TZZ-=-==EVV !II,&$))dW-r   N)rP   rQ   rR   r   r/   r   r   r   r   r     s    Ir   r   c           
         | j                   dk(  rd\  }}nY| j                   dk(  rd\  }}nD| j                   dk(  rd\  }}n/| j                   dv rd\  }}nd	| j                    d
}t        |      |j                  |d| j                  z  z          |dk(  r|j                  d       n-|dk(  r(|dk(  r|j                  d       n|j                  d       t	        j
                  | |dd| j                  z   d|ddffg       y )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    	ww#~$	C"	C&	O	#$"277)73clHHTL277**+u}
	c>HHXHHZ OOBeVbgg%5q7Aq/JK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9&& XQ~@i)) @F$$ <M<   L''w ?   L'' /   uj )   {O 4   ,--/O P   L'')B Cr   