
    f:Jj!                       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mZ ej                  j                  d e ee      j                         j                               ddlmZ  ee      j                         j$                  d   Zedz  Zdd	d
dddddddddddddddddddddddddddd d!d"d#dd$d%d&d#dd'd(d)d*dg	Zg d+Zd5d,Zdefd6d-Zd7d.Zd8d/Zd9d0Zd9d1Zefd:d2Zd;d3Zed4k(  r e        yy)<z?Export small, named Korean text tables for the browser runtime.    )annotationsN)Path)build_summary   outitemsz
Item Names
0x0048b984z;Six item names matching the known savedat item count slots.)keytitleclusterStartVaHexdescription	equipmentzEquipment Names
0x0048b244z>Equipment-like labels referenced by an EXE data pointer table.atahoActionszAtaho Action Names
0x004d24acz6Action names used near the initial Ataho action table.
actionSetAzAction Name Set A
0x004d26bcz8Short battle/action labels from a compact pointer table.
actionSetBzAction Name Set B
0x004d2864battleCommandszBattle Command Names
0x004d2974z=Battle command and action labels from a medium pointer table.skillNamesAzSkill Names A
0x004d2a34z)Large skill/name pointer table candidate.skillNamesBzSkill Names B
0x004d2c04
magicNameszMagic Names
0x004d2d64z)Small magic/name pointer table candidate.))herb   )item_2   )refresh_water   )mp_recovery   )item_5   )item_6   c                2    t        j                  | dd      S )NF),:)ensure_ascii
separators)jsondumps)datas    2/home/exedev/hwanse/tools/summarize_text_tables.pyjs_jsonr3   V   s    ::d:FF    c                    |dz  }|j                         r%t        j                  |j                  d            S | t        dz  j                         } t        |       S )Nkorean_text_candidates.jsonutf-8encodingHwanse2.exe)existsr/   loads	read_textROOT
read_bytesbuild_korean_text_summary)exeout_dirpaths      r2   load_korean_summaryrD   Z   sS    22D{{}zz$..'.:;;
{m#//1$S))r4   c           	         t        | j                  d      xs g       D cg c]  \  }}||d   |d   |d   d }}}i || j                  d      t        |      | j                  dd      |d	S c c}}w )
NentriesrefVaHex	textVaHextext)indexrG   rH   rI   endVaHexinboundRefCountr   )clusterEndVaHex
entryCountrL   rF   )	enumerategetlen)clusterspecrJ   entryrF   s        r2   table_from_clusterrU   c   s     &gkk)&<&BC E5 j){+&M		
G 
";;z2'l";;'8!< s   A2c                   | j                  d      xs g D ci c]  }|d   |
 }}g }t        D ]4  }|j                  |d         }|s|j                  t        ||             6 |D ci c]  }|d   |
 }}|j                  di       j                  d      xs g }g }t	        t
              D ]z  \  }	\  }
}|	t        |      k  r||	   ni }|j                  |
|d|d|j                  d	      xs |
|j                  di       j                  d      |j                  d
      d       | ddt        |      ||ddgdS c c}w c c}w )NrefClusters
startVaHexr   r
   r   rF   0x04xrI   rH   )r
   offset	offsetHexnamesourceClusterStartVaHexsourceTextVaHexzJNamed Korean text tables extracted from executable pointer-table clusters.zout/korean_text_candidates.jsonz~Save item names are inferred by ordering the six names in cluster 0x0048b984 against the six known savedat item count offsets.zXOther tables are exported as candidates until the menu/battle handlers are fully mapped.)scopesource
tableCounttables	saveItemsnotes)rP   KNOWN_TABLESappendrU   rO   SAVE_ITEM_KEYSrQ   )korean_summaryrR   clustersrc   rS   tabletables_by_keyitem_entries
save_itemsrJ   r
   r[   rT   s                r2   r   r   v   s   >L>P>PQ^>_>ecef7%w.fHfF =,,t$789MM,Wd;<= 7==UU5\5(=M= $$Wb155i@FBLJ ). 9 	}V',s</@'@U#bfS\*IIf%,'4'8'8"'E'I'IJ]'^$yy5
 		 ^3&k Mf

 
' g >s   E *Ec                   dd| d   dddddg}| j                  d      xs g D ]<  }|j                  d|d	    d
|d    d|d    d
|j                  d      xs d d	       > |j                  g d       | j                  d      xs g D ]d  }dj                  d |j                  dg       d d D              j	                  dd      }|j                  d|d	    d
|d    d|d    d| d	       f |j                  g d       |j                  d | j                  d      xs g D               d j                  |      d z   S )!Nz# Text Tables r`   z## Save Itemsz%| key | offset | name | source text |z| --- | ---: | --- | --- |rd   z| r
   z | `r\   z` | r]   r_   -z` |)rp   z	## Tablesrp   z%| key | cluster | entries | samples |z| --- | --- | ---: | --- |rc   , c              3  &   K   | ]	  }|d      ywrI   N .0rT   s     r2   	<genexpr>zmarkdown.<locals>.<genexpr>   s     TeE&MT   rF      |z\|r   rN   z | z |)rp   z## Notesrp   c              3  &   K   | ]	  }d |   yw)z- Nru   )rw   notes     r2   rx   zmarkdown.<locals>.<genexpr>   s     D2dVDry   re   
)rP   rg   extendjoinreplace)summarylinesrowrk   sampless        r2   markdownr      st   


/$	E {{;'-2 
UD[!1 2$s6{m4PaHbHifiGjjmn	

 
LLmnX&," 
))TuyyB7OPRQR7STT\\]`bghud5)<#=">d5CVBWWZ[bZccef	


 
LL%&	LLDW)=)CDD99Ud""r4   c                <   dj                  d | j                  d      xs g D              }dj                  d | j                  d      xs g D              }dj                  ddd	d
dddddddt        j                  | d          dddd| dddd| ddddg      S )Nrp   c              3  
  K   | ]{  }d t        j                  |d          dt        j                  |d          dt        j                  |d          dt        j                  |j                  d      xs d       d	 } y	w)
<tr><td>r
   </td><td><code>r\   </code></td><td>r]   r_   rq   z</code></td></tr>N)htmlescaperP   )rw   r   s     r2   rx   zhtml_page.<locals>.<genexpr>   s       	{{3u:&' ([[[!123 4{{3v;'( )[[):!;!BsCD E		s   BBrd   c              3    K   | ]~  }d t        j                  |d          dt        j                  |d          d|d    dt        j                  dj                  d |j                  d	g       d
d D                     d	  y
w)r   r
   r   r   r   rN   z	</td><td>rr   c              3  &   K   | ]	  }|d      ywrt   ru   rv   s     r2   rx   z&html_page.<locals>.<genexpr>.<genexpr>   s     $^uU6]$^ry   rF   N   z
</td></tr>)r   r   r   rP   )rw   rk   s     r2   rx   zhtml_page.<locals>.<genexpr>   s       	{{5<() *[[':!;<= >\"# ${{499$^		)UW@XY\Z\@]$^^_` a		s   BBrc   r~   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>Hwanse Text Tables</title>z  <style>body{font-family:system-ui,sans-serif;background:#101010;color:#eee;margin:24px}table{border-collapse:collapse;width:100%}td,th{border:1px solid #333;padding:6px 8px;vertical-align:top}th{background:#1d1d1d}code{color:#f5d76e}</style>z</head>z<body>z  <h1>Hwanse Text Tables</h1>z  <p>r`   z</p>z  <h2>Save Items</h2>z]  <table><thead><tr><th>key</th><th>offset</th><th>name</th><th>source text</th></tr></thead>z	  <tbody>z</tbody></table>z  <h2>Tables</h2>z]  <table><thead><tr><th>key</th><th>cluster</th><th>entries</th><th>samples</th></tr></thead>z</body>z</html>)r   rP   r   r   )r   	save_rows
table_rowss      r2   	html_pager      s      ;;{+1r I   [[*0b J 99"P- 	~'
GG,-.d3g
I;./g
J</0
)  r4   c                   |j                  dd       |dz  j                  t        j                  | dd      dz   d	       |d
z  j                  dt	        |       z   dz   d	       |dz  j                  t        |       d	       y )NT)parentsexist_okztext_tables.jsonF   )r-   indentr~   r7   r8   ztext_tables.jszwindow.HWANSE_TEXT_TABLES = z;
ztext_tables.html)mkdir
write_textr/   r0   r3   r   )r   rB   s     r2   write_outputsr      s    MM$M.!!--

7q9D@ .  ++&)99EA ,  !!--i.@7-Sr4   c                    t        j                         } | j                  dt        t        dz         | j                  dt        t
               | j                         }|j                  dz  j                         s|j                  j                         nd }t        t        ||j                              }t        ||j                         y )Nz--exer:   )typedefaultz	--out-dirr6   )argparseArgumentParseradd_argumentr   r>   OUT
parse_argsrB   r;   rA   r?   r   rD   r   )parserargsrA   r   s       r2   mainr      s    $$&F
dD=4HI
$<D(,7T(T'\'\'^$((


dhC/T\\BCG'4<<(r4   __main__)returnstr)rA   zbytes | NonerB   r   r   dict)rR   r   rS   r   r   r   )ri   r   r   r   )r   r   r   r   )r   r   rB   r   r   None)r   r   )__doc__
__future__r   r   r   r/   syspathlibr   rC   insertr   __file__resolveparent summarize_korean_text_candidatesr   r@   r   r>   r   rf   rh   r3   rD   rU   r   r   r   r   __name__ru   r4   r2   <module>r      sv   E "    
  3tH~--/667 8 W H~''*
Ul )T	 ")W	 %)O	 $)Q	 $)Q	  ')V	  )B	  )B	 )B	c7rG -1# *&B#4(V 25 
T) zF r4   