
    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j                  d      Z	 ej                  d      Z
ddZddZdd	Zdd
ZddZddZddZddZedk(  r e        yy)zESummarize map-resource links found in scene event condition payloads.    )annotationsN)Pathzmap\d+_\d+[a-z]\.cns$zmap_[a-z][0-9]\.cns$c                z    t               }g }| D ])  }||v r|j                  |       |j                  |       + |S N)setaddappend)valuesseenresultvalues       2/home/exedev/hwanse/tools/summarize_scene_links.pyuniquer      sE    5DF D=e	
 M    c           
         t        | j                  dg       D cg c]  }|j                  dg       D ]  }|  c}}      S c c}}w )NeventDispatchRefsconditionLinkedStrings)r   get)eventreflinkeds      r   condition_stringsr      sY     yy!4b9	
''":B?	
  	
	
 	
s    A
c                   t        |       }|D cg c]  }t        j                  |      s|d d  }}|D cg c]  }t        j                  |      s|d d  }}|D cg c]?  }|j	                  d      r,t        j                  |      st        j                  |      s|A }}| d   | d   | d   | d   | d   t        |      t        |      t        |      t        | j                  dg             d		S c c}w c c}w c c}w )
Nz.cnsmapsceneId
sceneIdHex	eventKindrecordVar   )	sourcer   r   r   r   	fieldMapstilesetsotherdispatchRefCount)r   FIELD_MAP_RE	fullmatch
TILESET_REendswithr   lenr   )r   stringsitem
field_mapsr"   r#   s         r   link_recordr-   $   s   &G(/P<3I3I$3O$s)PJP&-Ld1E1Ed1KSb	LHL == &&t,$$T*	 	E  ,#L);'*%J'8$		*=r BC
 
 QLs   C5C5C:C: AC?c                >    | D cg c]  }t        |       c}S c c}w r   )r-   )eventsr   s     r   recordsr0   <   s    ,235K333s   c           	     h   i }| D ]Q  }|d   }|j                  |g g g g d      }|d   j                  |       dD ]  }t        g ||   ||         ||<    S |j                         D ]!  \  }}|d   D cg c]
  }||k7  s	| c}|d<   # t	        t        |j                                     S c c}w )Nr    )r!   r"   r#   r0   r0   )r!   r"   r#   r!   )
setdefaultr	   r   itemsdictsorted)records_r   recordr    entrykeytargets          r   	aggregater;   @   s     F =!!!	
 	i'5 	=C ;%* ;vc{ ;<E#J	==   [383EZSYIYfZk[v||~&'' [s   6
B/B/c                *    t        t        |             S r   )r;   r0   )r/   s    r   structured_linksr=   U   s    WV_%%r   c                  
 g d}i }| D ]  }t        |      }|d   }|d   }|d   }|j                  |d   t                     j                  |       |j	                  dj                  |d   |d   |d   d	j                  |      xs d
d	j                  |d d       xs d
d	j                  |d d       xs d
t        |j                  dg             d|d   d              |j                  g d       t        |j                               D ]D  \  
}t        
fd|D              }	|j	                  d
 dd	j                  |	      xs d
 d       F |j	                  d       dj                  |      S )N)z# Scene Resource Link Summary z<Generated from `eventDispatchRefs[].conditionLinkedStrings`.r?   zc| source map | scene | kind | field map links | tilesets | sprites/other | dispatch refs | record |z3| --- | --- | ---: | --- | --- | --- | ---: | --- |r!   r"   r#   r   z[| {source} | {scene} | {kind} | {field_maps} | {tilesets} | {other} | {refs} | `{record}` |r   r   z, -   r   0xr   08x)r    scenekindr,   r"   r#   refsr7   )r?   z## Aggregated Field Map Linksr?   z"| source map | linked field maps |z| --- | --- |c              3  .   K   | ]  }|k7  s	|  y wr    ).0r:   r    s     r   	<genexpr>zsummarize.<locals>.<genexpr>   s     KV&F:J&Ks   
z| z | z |r?   
)r-   r2   r   updater	   formatjoinr)   r   extendr5   r3   )r/   linesaggregate_linksr   r7   r,   r"   r#   targetsfilteredr    s             @r   	summarizerT   Y   s   E ,.O 
U#K(
*%w""5<7>>zJippU|L);'99Z07C8CR=18Siicr
+2s#6;<E*-c23 q 		

& 
LL	
 "/"7"7"9: EKwKKr&TYYx%8%?C$@CDE 
LL99Ur   c                    t        j                  t              } | j                  dt        t	        d             | j                  dt        t	        d             | j                         }t        j                  |j                  j                  d            }|j                  j                  j                  d	d	
       |j                  j                  t        |      d       t        dt!        |       d|j                          y )N)descriptionz--eventszout/scene_events.json)typedefaultz--outzout/scene_links_summary.mdzutf-8)encodingT)parentsexist_okzwrote z scene link summaries -> )argparseArgumentParser__doc__add_argumentr   
parse_argsjsonloadsr/   	read_textoutparentmkdir
write_textrT   printr)   )parserargsr/   s      r   mainrk      s    $$9F

t<S7TU
dD9U4VWDZZ--w-?@FHHOO$6HH	&)G<	F3v;-8

CDr   __main__)r
   	list[str]returnrm   )r   r4   rn   rm   )r   r4   rn   r4   )r/   
list[dict]rn   ro   )r6   ro   rn   dict[str, dict])r/   ro   rn   rp   )r/   ro   rn   str)rn   None)r^   
__future__r   r\   ra   repathlibr   compiler%   r'   r   r   r-   r0   r;   r=   rT   rk   __name__rH   r   r   <module>rx      sy    K "   	  rzz23RZZ/0
04(*&*Z	E zF r   