
    UHj$                       d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	 ej                  j                  d e e	e      j                         j                               ddlmZ ddlmZmZ  e	e      j                         j*                  d   Zedz  Z ej0                  d	      Zdd
ZddZddZddddd	 	 	 	 	 	 	 	 	 	 	 	 	 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) zBExpand save scene selector resource references with pointer paths.    )annotationsN)Path)dword_window)find_cns_stringsread_sections   outzmap\d+_\d+[a-z]\.cns$c                    d| dS )N0x08x )values    ?/home/exedev/hwanse/tools/summarize_save_selector_references.pyhex_var      s    c{    c                    | d    d| d    S )Ngroup:slotr   rows    r   selector_labelr      s    'l^1S[M**r   c                    | si S | D ci c]K  }t        |j                  d      t              r*t        |j                  d      t              r|d   |d   f|M c}S c c}w )NrecordVamap)
isinstancegetintstr)recordsrecords     r   manifest_indexr"      se    	 fjj,c2z&**UBSUX7Y 

	VE]+V3  s   AA   @      )manifest	max_depthcount	max_nodesc                  	
 t               	t         	      t        |      g t        |d       D ]I  j	                  d      t        t              s%t               
d 	
fd |g       K S )Nc                    | d   | d   fS )Nr   r   r   r   s    r   <lambda>z,expand_selector_references.<locals>.<lambda>7   s    s7|S[6Q r   )keyselectedPointerc                   t              
k\  s| v ry j                  |        t        	|       D ]  }|j                  d      }t	        |t
              r|j                  d      r|d d }j                  |d   |f      }j                  i dd   dd   dt              d	d
t              d|d|D cg c]  }t        |       c}dt        |      dz
  d|d   d|d   d|d   d|d   d|d|dt        j                  |      rdnddt        |      d|r|j                  d      nd |r|j                  d      nd |r|j                  d      ng d       |j                  d      }|d kD  sT|j                  d!      sgt	        |t              syd"|cxk  rd#k  sn  ||dz
  g ||        y c c}w )$N)r(   stringz.cnsvar   r   labelr.   selectedPointerHexpathpathHexdepthr   refVarefVaHexvaHexresourcePointerr   resourcePointerHexvalueHexfilenameresourcekindfieldMapcnssceneMatched
sceneIdHexsceneIdtilesets)rE   rF   r   pointeri  @ i  ` )lenaddr   r   r   r   endswithappendr   r   FIELD_MAP_RE	fullmatchboolr   )r2   r7   r5   itemnamer?   scener   r(   exe_datar)   rootrowsscenes_by_refsectionsseenselectorstringsvisits           r   rZ   z)expand_selector_references.<locals>.visit=   sA   4yI%tHHRL$Xx"ER #<xx)dC(T]]6-B#CRyH)--tDz8.DEEKK#Xg%6"HV$4 $^H%= .t	
 1&, #D &4'H%u'H $SY] $T$Z 'W .tG} 1$z2B ' ' #,2H2H2NJTY  +DK!" )U%))L*APT#$ @Euyy';$AF		*(=B'. )AI+"5#."e9z99%NdNEN;G#< (Is   G)r2   r   r7   r   r5   z	list[int]returnNone)r   r   r"   sortedr   r   r   set)rR   	selectorsr&   r'   r(   r)   rS   rT   rU   rV   rW   rX   rY   rZ   s   `   ``@@@@@@@@r   expand_selector_referencesr`   )   s     X&Hx2G"8,MD9*QR /'||-.$$'	< '	<R 	dIv&_/'` Kr   c                    i }| D ]T  }|j                  d      dk7  r|j                  |d   g        |d   ||d      vs;||d      j                  |d          V |S )Nr@   rA   r3   r?   )r   
setdefaultrK   )rT   groupedr   s      r   grouped_field_mapsrd   j   st    $&G :776?j(3w<,z?'#g,"77CL!((Z9: Nr   c                   | D cg c]  }|j                  d      dk(  s| }}dddddt        |        ddt        |       ddd	dd
dg}t        |       j                         D ]9  \  }}dj	                  d |D              }|j                  d| d|xs d d       ; |j                  g d       |D ]  }|j                  dj                  d|d    d|d   |j                  d      xs ddj	                  |j                  d      xs g       xs d|d   |d   dj	                  d |d   D                            |j                  d       dj	                  |      S c c}w ) Nr@   rA   z # Save Scene Selector References zTGenerated by expanding each save selector's selected pointer through pointer dwords.zResource refs: .zField map refs: z## Field Map Summaryz| selector | field maps |z| --- | --- |, c              3  .   K   | ]  }d | d| d  yw)[z](../web/game.html?map=)Nr   ).0rP   s     r   	<genexpr>zmarkdown.<locals>.<genexpr>   s      TtAdV#:4&BTs   z| `z` | -z |)rf   z## Field Map Reference Rowsrf   zQ| selector | resource | scene | tilesets | ref VA | depth | pointer path | open |z2| --- | --- | --- | --- | --- | ---: | --- | --- |zv| {label} | {resource} | {scene} | {tilesets} | `{ref}` | {depth} | {path} | [open](../web/game.html?map={resource}) |`r3   r?   rD   rF   r9   r7    -> c              3  (   K   | ]
  }d | d   yw)ro   Nr   )rl   r   s     r   rm   zmarkdown.<locals>.<genexpr>   s      J%1UG1 Js   r6   )r3   r?   rQ   rF   refr7   r5   
)r   rH   rd   itemsjoinrK   extendformat)rT   r   
field_rowslinesr3   mapslinkss          r   markdownr|   u   s   !%G#J)F#GJG*
^

#d)A&
3z?+1-

#E *$/557 8t		TtTTs5'els^2678 
LL	
  
 E  L  L#g,q)Zggl+2s377:#6#<"=D
O'l[[ J3y> JJ L 
	

 
LL99UO Hs
   E&E&c                T   | D cg c]  }|j                  d      dk(  s| }}g }|D ],  }dj                  |d         }|j                  dj                  ddt        j                  |d          d	d
t        j                  |d          dt        j                  |d          ddt        j                  |j                  d      xs d       ddt        j                  dj                  |j                  d      xs g       xs d       ddt        j                  |d          d	d|d    ddt        j                  |       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*t        |       d+d,d-d.g|d/d0d1d2d3      S c c}w )4Nr@   rA   rp   r6   rs   z<tr>z  <td><code>r3   z</code></td>z$  <td><a href="../web/game.html?map=r?   z">z	</a></td>z  <td>rD   rn   z</td>rh   rF   r9   r7   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 Scene Selector References</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    code { color: #ffd447; }z
  </style>z</head>z<body>z)  <h1>Save Scene Selector References</h1>zj  <p>Expanded selected-pointer resource refs. Pointer paths identify where each field map is attached.</p>z  <p>Resource refs: z. Field map refs: z.</p>z	  <table>z    <thead><tr><th>selector</th><th>resource</th><th>scene</th><th>tilesets</th><th>ref VA</th><th>depth</th><th>pointer path</th></tr></thead>z    <tbody>z    </tbody>z
  </table>z</body>z</html>rf   )r   ru   rK   htmlescaperH   )rT   r   rx   bodyr5   s        r   	html_pager      s   !%G#J)F#GJGD 
{{3y>*II"4;;s7|#<"=\J:4;;s:;W:XXZ[_[f[fgjkugv[wZx  yB  CT[[)>)E#FGuMT[[377:3F3L")M)TQTUVV[\"4;;s:#?"@MS\N%0"4;;t#4"5\B
	

" 99&T=lC[G'*7x"3t9+-?J?PPUV ^-	
. /	
0 1	
2 3	
4 5	
6 7	
8 9	
 ' Hs
   F%F%c                    |j                  dd       |dz  j                  t        j                  | dd      dz   d	       y )
NT)parentsexist_ok#save_scene_selector_references.jsonF),r   )ensure_ascii
separatorsrs   utf-8encoding)mkdir
write_textjsondumps)rT   out_dirs     r   write_outputsr      sD    MM$M.44@@

4e
CdJ A r   c                    t        j                  t              } | j                  dt        t	        d             | j                  dt        t
        dz         | j                  dt        t
        dz         | j                  d	t        t
               | j                         }|j                  j                         r/t        j                  |j                  j                  d
            nd }t        |j                  j                         t        j                  |j                  j                  d
            |      }t!        ||j"                         t%        dt'        |       d|j"                  dz          y )N)descriptionz--exezHwanse2.exe)typedefaultz--selectorszsave_scene_selectors.jsonz
--manifestzscene_manifest.jsonz	--out-dirr   r   )r&   zwrote z save scene selector refs -> r   )argparseArgumentParser__doc__add_argumentr   OUT
parse_argsr&   existsr   loads	read_textr`   exe
read_bytesr_   r   r   printrH   )parserargsr&   rT   s       r   mainr      s'   $$9F
dD4GH
D#@[:[\
4?T9TU
$<DHLH\H\H^tzz$--1171CDdhH%

4>>++W+=>D
 $%	F3t9+:4<<Jo;o:p
qrr   __main__)r   r   r[   r   )r   dictr[   r   )r    list[dict] | Noner[   zdict[tuple[int, str], dict])rR   bytesr_   
list[dict]r&   r   r'   r   r(   r   r)   r   r[   r   )rT   r   r[   zdict[str, list[str]])rT   r   r[   r   )rT   r   r   r   r[   r\   )r[   r\   )$r   
__future__r   r   r~   r   resyspathlibr   r5   insertr   __file__resolveparentparse_savedatar   probe_exe_scene_tablesr   r   r   ROOTr   compilerL   r   r   r"   r`   rd   r|   r   r   r   __name__r   r   r   <module>r      s    H "    	 
  3tH~--/667 8 ' B H~''*
Ulrzz23+ #'>>>  	>
 > > > >B(V3l 58 s" zF r   