
    UHjN                        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   dz  ZddZddZdd	Zdd
ZefddZddZedk(  r e        yy)zDBuild candidate map links from save selector scene-reference leaves.    )annotationsN)Path   outc                z    t               }g }| D ])  }||v r|j                  |       |j                  |       + |S )N)setaddappend)valuesseenresultvalues       @/home/exedev/hwanse/tools/summarize_save_selector_scene_links.pyuniquer      sE    5DF D=e	
 M    c                   i }| D ]i  }|j                  d      dk7  s|j                  d      s)|j                  d      xs g }|sA|j                  |d   |d   fg       j                  |       k i }t        |j	                               D ]  \  \  }}}t        |D cg c]  }|d   	 c}      }t        |      dk  r4|D ]  }	|D 
cg c]
  }
|
|	k7  s	|
 }}
|j                  |	g g d	      }t        g |d
   |      |d
<   |d   j                  |	|||||D cg c]1  }|d   |d   |j                  d      |j                  d      xs g d3 c}d         t        t        |j	                                     S c c}w c c}
w c c}w )NkindfieldMapsceneMatchedpathHexlabelresource   )	fieldMapsrecordsr   r   refVaHex
sceneIdHextilesets)maprecordVaHexr   r   )sourceselectorleafPointerHexr   targetsscenes)get
setdefaultr
   sorteditemsr   lendict)reference_rowsleavesrowpathr   r   leafrowsmapsr"   namer%   entrys                r   build_linksr6      s   02F D776?j(0Gwwy!'R3w<b2B7>>sCD !F%flln5 t$73s:78t9q= 	F(,?t?G?%%fB2.NOE!'(G%*<(Gw(G!HE+)##$ %&*!%& $(   $'z?+.z?*-'',*?(+
(;(Ar				4 v||~&''3 8 @s   F 
	
FF6F
c                   dddddt        |        ddddg}| j                         D ]x  \  }}t        |d   D cg c]  }|d	    d
|d     c}      }dj                  d |d   D              }|j	                  d| d|xs d ddj                  |       d| d	       z |j	                  d       dj                  |      S c c}w )Nz# Save Selector Scene Links zCandidate map links inferred from field-map scene records that share the same save-selector pointer leaf. These are not confirmed tile transitions.zSource maps: .z-| source | targets | selector leaves | open |z| --- | --- | --- | --- |r   r#    r$   , c              3  .   K   | ]  }d | d| d  yw)[z](../web/game.html?map=)N .0r4   s     r   	<genexpr>zmarkdown.<locals>.<genexpr>N   s      dav%<TF!Dds   r   z| z | -z | [open](../web/game.html?map=z&events=1&overview=1) |
)r+   r*   r   joinr
   )linkslinesr"   r5   recordr.   r%   s          r   markdownrI   A   s    %
 	^

E
|1%
7#	E  
Z_`iZjkPVF:./q8H1I0JKkl))dQVWbQcddGNs+3tyy/@.AA`ag`hh  A	

 
LL99U ls   C
c                   g }| j                         D ]  \  }}dj                  d |d   D              }dj                  d |d   D              }|j                  dj                  dd	t        j                  |       d
t        j                  |       dd|xs d dd| ddg              dj                  dddddddddddddddd d!d"d#t        |        d$d%d&d'g|d(d)d*d+d,      S )-Nr:   c              3  z   K   | ]3  }d t        j                  |       dt        j                  |       d 5 yw)z<a href="../web/game.html?map=z">z</a>Nhtmlescaper@   s     r   rB   zhtml_page.<locals>.<genexpr>Y   s<       
 -T[[->,?r$++dBSATTXY 
s   9;r   r;   c              3  \   K   | ]$  }t        j                  |d     d|d           & yw)r#   r:   r$   NrL   )rA   rH   s     r   rB   zhtml_page.<locals>.<genexpr>]   s9      
 KK6*-.a7G0H/IJK
s   *,r   rD   z<tr>z$  <td><a href="../web/game.html?map=z&amp;events=1&amp;overview=1">z	</a></td>z  <td class="links">rC   z</td>z  <td>z</tr>z<!doctype html>z<html lang="en">z<head>z  <meta charset="utf-8">zF  <meta name="viewport" content="width=device-width, initial-scale=1">z*  <title>Save Selector Scene Links</title>z	  <style>z^    body { margin: 24px; background: #101010; color: #eee; font: 14px system-ui, sans-serif; }z5    table { border-collapse: collapse; width: 100%; }zM    th, td { border: 1px solid #333; padding: 6px 8px; vertical-align: top; }z9    th { background: #1d1d1d; position: sticky; top: 0; }z    a { color: #9bd4ff; }z=    .links { display: flex; flex-wrap: wrap; gap: 6px 10px; }z
  </style>z</head>z<body>z$  <h1>Save Selector Scene Links</h1>zr  <p>Candidate map links inferred from save-selector pointer leaves. These are not confirmed tile transitions.</p>z  <p>Source maps: z.</p>z	  <table>zS    <thead><tr><th>source</th><th>targets</th><th>selector leaves</th></tr></thead>z    <tbody>z    </tbody>z
  </table>z</body>z</html>r8   )r*   rE   r
   rM   rN   r+   )rF   r2   r"   r5   target_linksr.   s         r   	html_pagerQ   V   s   D 
xx  
k* 
 
  
	*
 
 	II:4;;v;N:OOmnrnyny  {A  oB  nC  CL  M*<+>3*?uEVHE*
	

( 99&T8lC[G'K2 A UE2a-	
. /	
0 1	
2 3	
4 5	
6 7	
8 9	
 r   c                    |j                  dd       |dz  j                  t        j                  | dd      dz   d	       |d
z  j                  dt        j                  | dd      z   dz   d	       y )NT)parentsexist_oksave_selector_scene_links.jsonFr   )ensure_asciiindentrD   utf-8encodingzsave_selector_scene_links.jsz*window.HWANSE_SAVE_SELECTOR_SCENE_LINKS = ),:)rV   
separatorsz;
)mkdir
write_textjsondumps)rF   out_dirs     r   write_outputsrc      s    MM$M.//;;

5uQ7$> <  --994
**U:
F	G
	 	 : r   c                    t        j                  t              } | j                  dt        t
        dz         | j                  dt        t
               | j                         }t        t        j                  |j                  j                  d                  }t        ||j                         t        dt        |       d	|j                  d
z          y )N)descriptionz--referencesz#save_scene_selector_references.json)typedefaultz	--out-dirrX   rY   zwrote z save selector scene links -> rU   )argparseArgumentParser__doc__add_argumentr   OUT
parse_argsr6   r`   loads
references	read_textrc   rb   printr+   )parserargsrF   s      r   mainrt      s    $$9F
T3Af;fg
$<D

4??#<#<g#<#NOPE%&	F3u:,<T\\Ll=l<m
nor   __main__)r   	list[str]returnrv   )r-   z
list[dict]rw   dict[str, dict])rF   rx   rw   str)rF   rx   rb   r   rw   None)rw   rz   )rj   
__future__r   rh   rM   r`   pathlibr   __file__resolverS   rl   r   r6   rI   rQ   rc   rt   __name__r?   r   r   <module>r      su    J "     8n&&q)E1%(P*5p ;> p zF r   