
    UHj                        d Z ddlmZ ddlZddlZddlZddlmZ  ee      j                         j                  d   ZddZddZddZdd	Zdd
Zedk(  r e        yy)z6Summarize competing tileset candidates for field maps.    )annotationsN)Path   c                J   | j                  d      }t        j                  dt        j                  |       d|t        j                        }|st        |  d|       t        j                  |j                  d            }t        |t              st        |  d      |S )Nutf-8encodingzwindow\.z = (.*);\n?z does not contain window.r   z must contain an object)	read_textre	fullmatchescapeS
ValueErrorjsonloadsgroup
isinstancedict)pathnametextmatchdatas        9/home/exedev/hwanse/tools/summarize_tileset_candidates.pyload_wrapped_jsonr      s    >>7>+DLLHRYYt_$5[A4NED6!:4&ABB::ekk!n%DdD!D6!89::K    c                V    | dd  j                         r| d   nd}|sg S d| dd| dgS )N map_12)isalpha)map_namesuffixs     r   suffix_tilesetsr&      sC    %bc]224Xb\"F	6(!VHA.//r   c                    t               }g }| D ]6  }t        |      }|r||v r|j                  |       |j                  |       8 |S N)settupleaddappend)variantsseenresultvariantkeys        r   unique_variantsr2       sP    5DF GncTkg Mr   c                  	
 g d}t        | j                               D ]  \  }}|j                  d      xs g 
t        |      }t	        |j                  d      xs g g|j                  d      xs g       }|j                  |i       j                  dg       	g }|r"
d t        |       |k7  r|j                  d       |r
|vr|j                  d       	r%t        	fd
D              s|j                  d	       |r%t        
fd
|D              r|j                  d       	r%t        
fd	D              r|j                  d       dj                  d |D              xs d}|j                  dj                  |dj                  
      xs ddj                  |      xs d|dj                  	      xs ddj                  |      xs d              |j                  d       dj                  |      S )N)z# Map Tileset Candidate Summaryr   z8Generated from `out/maps.js` and `out/scene_links.json`.r   z`selected` is the tileset pair currently used by the web renderer. `suffix` comes from the final map filename letter, `observed` comes from EXE scene records, and `condition` comes from event dispatch condition payload strings.r   zQ| map | selected | suffix | observed scene variants | condition tilesets | note |z%| --- | --- | --- | --- | --- | --- |layerTilesetsobservedSceneTilesetssceneTilesetVariantstilesetszselected differs from suffixz$selected differs from observed scenec              3  &   K   | ]  }|v  
 y wr(    ).0item	conditions     r   	<genexpr>zsummarize.<locals>.<genexpr>H   s      Ht!2 H   zselected absent from conditionc              3  (   K   | ]	  }|k7    y wr(   r9   )r:   r0   selecteds     r   r=   zsummarize.<locals>.<genexpr>J   s     HGGx/Hs   zhas competing scene variantc              3  &   K   | ]  }|v 
 y wr(   r9   )r:   r;   r@   s     r   r=   zsummarize.<locals>.<genexpr>L   s     HdT1Hr>   zcondition has extra tilesetsz<br>c              3  >   K   | ]  }d j                  |        yw),N)join)r:   r0   s     r   r=   zsummarize.<locals>.<genexpr>O   s     #N'CHHW$5#Ns   -zF| {name} | {selected} | {suffix} | {observed} | {condition} | {note} |rC   z, )r   r@   r%   observedr<   noter   
)
sorteditemsgetr&   r2   lenr,   anyrD   format)mapsscene_linkslinesr   infor%   rF   notesobserved_textr<   r@   s            @@r   	summarizerU   ,   s   E TZZ\*  

d88O,2 &"017R((128b
  OOD"-11*bA	h}V-7LL780LL?@S Hx HHLL9:HxHHLL67HiHHLL78#NX#NNURUT[[(+2sxx'.3&((9-4YYu%, \ 		
/ 
B 
LL99Ur   c                    t        j                  t              } | j                  dt        t
        dz  dz         | j                  dt        t
        dz  dz         | j                  dt        t
        dz  d	z         | j                         }t        |j                  d
      }t        j                  |j                  j                  d            }|j                  j                  j                  dd       |j                  j!                  t#        ||      d       t%        dt'        |       d|j                          y )N)descriptionz--mapsoutzmaps.js)typedefaultz--scene-linkszscene_links.jsonz--outzmap_tileset_candidates.mdHWANSE_MAPSr   r   T)parentsexist_okzwrote z$ map tileset candidate summaries -> )argparseArgumentParser__doc__add_argumentr   ROOT
parse_argsr   rO   r   r   rP   r
   rX   parentmkdir
write_textrU   printrL   )parserargsrO   rP   s       r   mainrj   ^   s   $$9F
tTE\I5MN
dD5LK]<]^
dD5LC^4^_DTYY6D**T--777IJKHHOO$6HH	$4wG	F3t9+A$((
LMr   __main__)r   r   r   strreturnr   )r$   rl   rm   z	list[str])r-   list[list[str]]rm   rn   )rO   r   rP   r   rm   rl   )rm   None)r`   
__future__r   r^   r   r   pathlibr   __file__resolver\   rb   r   r&   r2   rU   rj   __name__r9   r   r   <module>ru      se    < "   	  H~''*0	/dN zF r   