1- import yaml
21import json
3- import oead
42import os
53
4+ import oead
5+ import yaml
6+
7+
68def to_editor_text (byml_doc : oead .byml .Hash ) -> str :
79 path_list = byml_doc .get ("PathList" , [])
810 tag_list = [str (x ) for x in byml_doc .get ("TagList" , [])]
911 bit_table = bytes (byml_doc .get ("BitTable" , b"" ))
10-
12+
1113 actor_tag_data = {}
1214 path_list_count = len (path_list )
1315 tag_list_count = len (tag_list )
14-
16+
1517 def get_bit (data : bytes , index : int ) -> bool :
1618 byte_idx = index // 8
1719 bit_idx = index % 8
@@ -26,12 +28,12 @@ def get_bit(data: bytes, index: int) -> bool:
2628 if get_bit (bit_table , i * tag_list_count + k ):
2729 actor_tag_list .append (tag_list [k ])
2830 actor_tag_data [actor_path ] = actor_tag_list
29-
31+
3032 data = {
3133 "PathList" : actor_tag_data ,
3234 "TagList" : tag_list
3335 }
34-
36+
3537 fmt = os .environ .get ('TOTK_TAG_PRODUCT_FORMAT' , 'json' )
3638 if fmt == 'yaml' :
3739 return yaml .safe_dump (data , sort_keys = False , allow_unicode = True , width = float ('inf' ))
@@ -42,41 +44,41 @@ def from_editor_text(editor_text: str, big_endian: bool, version: int) -> bytes:
4244 json_data = yaml .safe_load (editor_text )
4345 cached_tag_list = json_data .get ("TagList" , [])
4446 path_list_map = json_data .get ("PathList" , {})
45-
47+
4648 path_vec = list (path_list_map .items ())
4749 def sort_key (item ):
4850 key = item [0 ]
4951 parts = key .split ('|' )
5052 extract = parts [1 ] if len (parts ) > 1 else key
5153 return (extract , key )
52-
54+
5355 path_vec .sort (key = sort_key )
54-
56+
5557 path_list_out = []
5658 bit_table_bits = []
57-
59+
5860 for path , tag_entries in path_vec :
5961 if '|' in path :
6062 slices = path .split ('|' )
6163 path_list_out .extend (slices )
62-
64+
6365 for tag in cached_tag_list :
6466 bit_table_bits .append (tag in tag_entries )
65-
67+
6668 # Pack bits to bytes (LSB0)
6769 bit_table_bytes = bytearray ((len (bit_table_bits ) + 7 ) // 8 )
6870 for i , bit in enumerate (bit_table_bits ):
6971 if bit :
7072 byte_idx = i // 8
7173 bit_idx = i % 8
7274 bit_table_bytes [byte_idx ] |= (1 << bit_idx )
73-
75+
7476 byml_dict = {
7577 "PathList" : path_list_out ,
7678 "BitTable" : bytes (bit_table_bytes ),
7779 "RankTable" : "" ,
7880 "TagList" : cached_tag_list
7981 }
80-
82+
8183 byml_doc = oead .byml .Hash (byml_dict )
8284 return oead .byml .to_binary (byml_doc , big_endian = big_endian , version = version )
0 commit comments