U
    PeW/                     @   sx  d dl Z d dlZd dlZd dlT ddgddeddd	d
dddddg	eddd	d
dddgiddgddeddd	d
ddddgeddd	d
dddgiddgddeddd	ddgeddd	dgiddgdde	dd	ddgedd	dgidddgddeddd	dgidddgdde	ddd	dgidZ
dddgd d d gdd d gd dd gd d dgddd gd ddgdd dgd d d gdddgdddgdddgdddgdddgd d d gd!d!d!gd"d"d"gd#d#d#gd$d$d$gd%d%d%gd&d&d&gd'd'd'gd(d(d(gdddgd)Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 ZdQd4d5Zd6d7 Zed8d9d:d;d<d=d>ed?d@d fedAdBd dCdDdEdFgfedGdHd dCdDdIdJgfeddKd dCdDdLdMgfgg edNdOdP e  dS )R    N)*alpha   patterns)ZwxrgbcypNNZxcfpngtgatiffppmsgiZpcxZfitsrasgif)0123456789ABCDEFNNpgm)ZtwrgbcyptNZico)Zt123456789ABCDEFr   N      )Z	twxrgbcypNN)t0123456789ABCDEFNN)OPAQUEGRAY-OPAQUEBINARYGRAY-BINARYALPHA
GRAY-ALPHA   "   3   D   U   f   w                        )wxrgbycp0123456789ABCDEFc                 C   s   |dkr*| dkrddddgS t |  |g S |dkrL| dkrDdddgS t |  S |dkrn| dks`tt |  d gS |dkr| dkst| dkrddgS t |  d g|g S td	|d S )
Nrgbar   r   rgbgrayr   grayar   z#v0_pattern_pixel: unknown format {})	v0_PIXELSAssertionError	Exceptionformat)charr   fmt rI   O/tmp/pip-unpacked-wheel-xzebddm3/kivy/tools/image-testsuite/gimp28-testsuite.pyv0_pattern_pixelE   s"    
rK   c              	   C   s   d | ||||||S )Nz v0_{}x{}_{}_{:02X}_{}_{}_gimp.{})rF   )r'   hpatr   fmtinfotestnameextrI   rI   rJ   v0_filenameZ   s          rQ   c
                    s  d fdd	}
fdd}dkrn|
d}t |||||d |
d}t |||||d	 nXd
kr|
d}t |||||dd |
d}t |||||d	d ndkr|
d}t |||||dddd |
d}t |||||d	ddd ndkrzdd	gfddD D ]@\}}}|
d|||}t ||||||d||d	d	d	 q4nLdkr|
d}t |||||d |
d}t |||||d	 |
d}t |||||d ndkrd|
d}t |||||d |
d}t |||||d	 |
d}t |||||d |
d}t |||||d nbdkr|
d}t |||||d |
d}t |||||d	 n|
 }t 	||||| d S )Nc                    s(   | rd |  p}t  |S )N-)rQ   )Z
fmtinfo_inrN   )r   rP   rL   rM   rO   
v0_fmtinfor'   rI   rJ   filenameb   s    zsave_image.<locals>.filenamec                    s   t j | S N)ospathjoin)fn)dirnamerI   rJ   savepathf   s    zsave_image.<locals>.savepath)r	   r   ZpbmZpnmZpamASCIIr   ZRAW   r   ZRLEr   ZI0ZI1r   c                    s*   g | ]"} D ]} D ]}|||fqqqS rI   rI   ).0ir+   r*   )bitsrI   rJ   
<listcomp>   s         zsave_image.<locals>.<listcomp>z	I{}B{}G{}	   r
   ZARLE   r   ZLZWZPACKBITSZDEFLATE   r   )N)
pdbZfile_pnm_saveZfile_tga_saveZfile_gif_saverF   Zfile_png_saveZfile_sgi_saveZfile_tiff_saveZfile_sunras_saveZgimp_file_save)rZ   imglyrr'   rL   rM   r   rS   rO   rP   rT   r[   rY   r_   r+   r*   rI   )	r   r`   rZ   rP   rL   rM   rO   rS   r'   rJ   
save_imagea   sZ    
 
*


rh   c                 C   s   d|  krdksn t td|s*t |dks6t |dk}tdt|D ]D}||| |}|rzt| |dt|| qLt| d|t|| qLd S )Nr   r   z[twxrgbycp0-9A-F]+$)r(   r,   widthheight)r(   ri   )rD   rematchrangelenre   Zgimp_drawable_set_pixel)rg   rM   r   	directionpixelgetterZdirxr_   ZpixelrI   rI   rJ   draw_pattern   s    rq   c                    s6  |   | kstt|dks tt|dks0tt|ttfsBttd|sRtd| kp`d| k}d| ktt	dft
t	dfttdfttd	ftrt	ptd
ftrt	ptdfi| \}}t t fddt
 fddt fddt fddt fddt fddi| }	trtpttr,t
p.ti||}
dD ]}|dkrZt|dfpddt|f\}}t|||}t||||
ddt}|rt| t|t t||d t|||||	 |ttfkrtt||rdpd }t|dd|ddd |D ] }t||||||||| |
 qq>d S )Nr   z[wxtrgbcypA-F0-9]+$r   r   GRAYZBPP1GZBPP2GAZBPP3ZBPP4ZIXZIXAc                    s    | |dS )NrA   rI   r-   aPPrI   rJ   <lambda>       zmake_images.<locals>.<lambda>c                    s    | |dS )NrB   rI   rs   ru   rI   rJ   rw      rx   c                    s    | |dS )Nr@   rI   rs   ru   rI   rJ   rw      rx   c                    s    | |dS )Nr?   rI   rs   ru   rI   rJ   rw      rx   c                    s    | |rdpdS )NrA   r@   rI   rs   rv   Z	grayscalerI   rJ   rw      rx   c                    s    | |rdpdS )NrB   r?   rI   rs   ry   rI   rJ   rw      rx   Zxyr(   r]   Pd   Zignored)upperrD   rn   
isinstancelisttuplerk   rl   
GRAY_IMAGErr   GRAYA_IMAGE	RGB_IMAGEZRGB
RGBA_IMAGEINDEXED_IMAGEINDEXEDA_IMAGErK   getre   Zgimp_image_newZgimp_layer_newZNORMAL_MODEZgimp_layer_add_alphaZgimp_drawable_fillZTRANSPARENT_FILLZgimp_image_add_layerrq   setZgimp_convert_indexedrh   )rO   patternr   Zlayertype_in
extensionsrZ   Z
test_alphaZimgtyperS   rp   	layertypero   r'   rL   rf   rg   colorsrP   rI   ry   rJ   make_images   s          
 
 
 
 
     (
      r   c           	         s  t  }|dd  D  | fddtdt d D  tt D ]*}t t  }}||| g qLtddtdd td	d
 D ](}|d fddt|D g qg }|D ]D}|r||krq|r||kr|||dd    q|| qtt |S )Nc                 S   s   g | ]}|qS rI   rI   )r^   r(   rI   rI   rJ   ra      s     z makepatterns.<locals>.<listcomp>c                    s   g | ]} d | qS rU   rI   )r^   r_   allowrI   rJ   ra      s     r]   rd               r    c                    s   g | ]}t  qS rI   )randomchoice)r^   kr   rI   rJ   ra      s     )	r   updaterm   rn   r   r   rX   appendr~   )	r   includeexcludesrcr_   Zpick1Zpick2outZsrcpatrI   r   rJ   makepatterns   s"    &"&r   c                 C   s>  | st d d S tj| r,t| tjs:t d d S g }|ddgdgdgd|g  |ddgdgdgd|g  |dd	gdgd	gd|g  t	t
}| D ]\}}||krq|d
\}}	}
|sqt||	|
}|ddgD ]@}| D ]2\}}|sq|D ]}t||||||  qqqqd S )Nz&No output directory selected, abortingz2Invalid / non-writeable output directory, abortingr   r   )r   rc   rd   r   r   r   r   r   r   r   )re   Zgimp_messagerV   rW   isdiraccessW_OKextendr   dictTESTSUITE_CONFIGitemspopr   r   )rZ   Z	do_opaqueZ	do_binaryZdo_alphatestsZ	suite_cfgrO   cfgZpcharsincexcr   r   r   extsr.   rI   rI   rJ   plugin_main	  sZ    

   r   Zkivy_image_testsuitez-Creates image test suite for Kivy ImageLoaderz\Creates image test suite for Kivy ImageLoader. Warning: This will create thousands of imageszFor kivy.org, Terje Skjaevelandz%Copyright 2017 kivy.org (MIT license)Z2017r   Z	outputdirzOutput directory:opaquezOPAQUE tests?ZAllNoner   r   binaryzBINARY tests?r   r   zALPHA tests?r   r   z&<Image>/Tools/_Kivy image testsuite...zGenerate images...)Z	proc_namehelpZblurbauthor	copyrightdateZ
imagetypesparamsresultsfunctionmenulabel)NN)rV   rk   r   Zgimpfur   r   r   r   r   r   r   rC   rK   rQ   rh   rq   r   r   r   registerZ
PF_DIRNAMEZ	PF_OPTIONmainrI   rI   rI   rJ   <module>   s   	   
    	       	    
   
    
   
-                @C
)



	