@@ -55,16 +55,24 @@ def get_key():
5555def sub_replace (pattern : re .Pattern , string : str , repl , dupe = False , search_all = True ):
5656 ls = list (string )
5757 if search_all :
58+ endless_count = 0
59+ last_match = None
5860 last_pos = 0
5961 match = pattern .search (string , last_pos )
6062 # can delete the 2 lines below
6163 # if match is None:
6264 # return string
6365 while match is not None :
66+ if last_match is not None and last_match .string == match .string :
67+ endless_count += 1
68+ if endless_count >= 200 :
69+ print ("ENDLESS LOOP HERE: " + string )
70+ break # prevent endless loop
6471 span = match .span ()
6572 ls [span [0 ]:span [1 ]] = repl (match , dupe = dupe )
6673 last_pos = span [1 ]
6774 match = pattern .search ('' .join (ls ), last_pos )
75+ last_match = match
6876 return '' .join (ls )
6977 else :
7078 match = pattern .match (string )
@@ -88,9 +96,10 @@ def match_text(match, escaped=False, dupe=False):
8896 if plain == '' :
8997 return f'\\ "translate\\ ":\\ "empty\\ "' if escaped else f'"translate":"empty"'
9098 rel_lang [rk ] = plain
91- print (f'[text] put key: { rk } : { rel_lang [rk ]} ' )
9299 if dupe :
100+ print (f'[text dupeIf] put key: { rk } : { rel_lang [rk ]} ' )
93101 return f'\\ "translate\\ ":\\ "{ rk } \\ "' if escaped else f'"translate":"{ rk } "'
102+ print (f'[text dupeElse] put key: { rev_lang [plain ]} : { plain } ' )
94103 return f'\\ "translate\\ ":\\ "{ rev_lang [plain ]} \\ "' if escaped else f'"translate":"{ rev_lang [plain ]} "'
95104
96105
@@ -102,10 +111,11 @@ def match_plain_text(match, dupe=False):
102111 if plain == '' :
103112 return f'{{"translate":"empty"}}'
104113 rel_lang [rk ] = plain
105- print (f'[plain] put key: { rk } : { rel_lang [rk ]} ' )
106- if not dupe :
107- return f'{{"translate":"{ rev_lang [plain ]} "}}'
108- return f'{{"translate":"{ rk } "}}'
114+ if dupe :
115+ print (f'[plain dupeIf] put key: { rk } : { rel_lang [rk ]} ' )
116+ return f'{{"translate":"{ rk } "}}'
117+ print (f'[plain dupeElse] put key: { rev_lang [plain ]} : { plain } ' )
118+ return f'{{"translate":"{ rev_lang [plain ]} "}}'
109119
110120
111121def match_contents (match , dupe = False ):
@@ -116,10 +126,11 @@ def match_contents(match, dupe=False):
116126 if plain == '' :
117127 return f'"contents":{{"translate":"empty"}}'
118128 rel_lang [rk ] = plain
119- print (f'[contents] put key: { rk } : { rel_lang [rk ]} ' )
120- if not dupe :
121- return f'"contents":{{"translate":"{ rev_lang [plain ]} "}}'
122- return f'"contents":{{"translate":"{ rk } "}}'
129+ if dupe :
130+ print (f'[contents dupeIf] put key: { rk } : { rel_lang [rk ]} ' )
131+ return f'"contents":{{"translate":"{ rk } "}}'
132+ print (f'[contents dupeElse] put key: { rev_lang [plain ]} : { plain } ' )
133+ return f'"contents":{{"translate":"{ rev_lang [plain ]} "}}'
123134
124135
125136def match_bossbar (match , dupe = False ):
@@ -131,10 +142,11 @@ def match_bossbar(match, dupe=False):
131142 if plain == '' :
132143 return f'bossbar set { name } name {{"translate":"empty"}}'
133144 rel_lang [rk ] = plain
134- print (f'[bossbar1] put key: { rk } : { rel_lang [rk ]} ' )
135- if not dupe :
136- return f'bossbar set { name } name {{"translate":"{ rev_lang [plain ]} "}}'
137- return f'bossbar set { name } name {{"translate":"{ rk } "}}'
145+ if dupe :
146+ print (f'[bossbar set dupeIf] put key: { rk } : { rel_lang [rk ]} ' )
147+ return f'bossbar set { name } name {{"translate":"{ rk } "}}'
148+ print (f'[bossbar set dupeElse] put key: { rev_lang [plain ]} : { plain } ' )
149+ return f'bossbar set { name } name {{"translate":"{ rev_lang [plain ]} "}}'
138150
139151
140152def match_bossbar2 (match , dupe = False ):
@@ -146,10 +158,11 @@ def match_bossbar2(match, dupe=False):
146158 if plain == '' :
147159 return f'bossbar add { name } {{"translate":"empty"}}'
148160 rel_lang [rk ] = plain
149- print (f'[bossbar2] put key: { rk } : { rel_lang [rk ]} ' )
150- if not dupe :
151- return f'bossbar add { name } {{"translate":"{ rev_lang [plain ]} "}}'
152- return f'bossbar add { name } {{"translate":"{ rk } "}}'
161+ if dupe :
162+ print (f'[bossbar add dupeIf] put key: { rk } : { rel_lang [rk ]} ' )
163+ return f'bossbar add { name } {{"translate":"{ rk } "}}'
164+ print (f'[bossbar add dupeElse] put key: { rev_lang [plain ]} : { plain } ' )
165+ return f'bossbar add { name } {{"translate":"{ rev_lang [plain ]} "}}'
153166
154167
155168def match_text_escaped (match , dupe = False ):
@@ -163,7 +176,7 @@ def replace_component(text, dupe=False):
163176
164177
165178# handler
166- def handle_item (item , dupe ):
179+ def handle_item (item , dupe = False ):
167180 changed = False
168181 if len (item ) == 0 :
169182 return False
@@ -202,12 +215,13 @@ def handle_item(item, dupe):
202215 # TODO remember to sync it when match_text changed
203216 rk = f"item.{ id } .{ item_counts [id ]} .title.1"
204217 rel_lang [rk ] = title
205- print (f'[json book title] put key: { rk } : { rel_lang [rk ]} ' )
206218 if title not in rev_lang :
207219 rev_lang [title ] = rk
208- if dupe | cfg_dupe ["items_title" ] or cfg_dupe ["items_all" ]:
220+ if dupe or cfg_dupe ["items_title" ] or cfg_dupe ["items_all" ]:
221+ print (f'[json book title dupeIf] put key: { rk } : { rel_lang [rk ]} ' )
209222 item ['tag' ]['display' ]['Name' ] = n .TAG_String (f'{{"translate":"{ rk } ","italic":false}}' )
210223 else :
224+ print (f'[json book title dupeElse] put key: { rev_lang [title ]} : { title } ' )
211225 item ['tag' ]['display' ]['Name' ] = n .TAG_String (f'{{"translate":"{ rev_lang [title ]} ","italic":false}}' )
212226 changed = True
213227 except KeyError :
@@ -276,9 +290,9 @@ def handle_command_block(command_block):
276290 set_key (f"block.command_block.{ block_counts ['command_block' ]} .command" )
277291
278292 command = str (command_block ['Command' ])
279- txt = sub_replace (REG_COMPONENT_PLAIN , command , match_text , cfg_dupe ["datapacks" ])
280- txt = sub_replace (REG_COMPONENT , txt , match_text , cfg_dupe ["command_blocks" ])
293+ txt = sub_replace (REG_COMPONENT , command , match_text , cfg_dupe ["command_blocks" ])
281294 txt = sub_replace (REG_COMPONENT_ESCAPED , txt , match_text_escaped , cfg_dupe ["command_blocks" ])
295+ txt = sub_replace (REG_COMPONENT_PLAIN , txt , match_text , cfg_dupe ["command_blocks" ], False )
282296 txt = sub_replace (REG_DATAPACK_CONTENTS , txt , match_contents , cfg_dupe ["command_blocks" ])
283297 txt = sub_replace (REG_BOSSBAR_SET_NAME , txt , match_bossbar , cfg_dupe ["command_blocks" ])
284298 result_command = sub_replace (REG_BOSSBAR_ADD , txt , match_bossbar2 , cfg_dupe ["command_blocks" ])
@@ -543,9 +557,9 @@ def scan_file(path, start):
543557 for i in range (len (line )):
544558 if line [i ].startswith ('#' ):
545559 continue
546- txt = sub_replace (REG_COMPONENT_PLAIN , line [i ], match_text , cfg_dupe ["datapacks" ])
547- txt = sub_replace (REG_COMPONENT , txt , match_text , cfg_dupe ["datapacks" ])
560+ txt = sub_replace (REG_COMPONENT , line [i ], match_text , cfg_dupe ["datapacks" ])
548561 txt = sub_replace (REG_COMPONENT_ESCAPED , txt , match_text_escaped , cfg_dupe ["datapacks" ])
562+ txt = sub_replace (REG_COMPONENT_PLAIN , txt , match_text , cfg_dupe ["datapacks" ], False )
549563 txt = sub_replace (REG_DATAPACK_CONTENTS , txt , match_contents , cfg_dupe ["datapacks" ])
550564 txt = sub_replace (REG_BOSSBAR_SET_NAME , txt , match_bossbar , cfg_dupe ["datapacks" ])
551565 line [i ] = sub_replace (REG_BOSSBAR_ADD , txt , match_bossbar2 , cfg_dupe ["datapacks" ])
@@ -579,7 +593,7 @@ def backup_saves(path, source):
579593
580594def main ():
581595 print ("+===========[Chinese]===========+" )
582- print ("{0}\t {1:<20}\t {2:^1}" .format ("|" , "存档翻译提取器(魔改) 1.5 " , "|" ))
596+ print ("{0}\t {1:<20}\t {2:^1}" .format ("|" , "存档翻译提取器(魔改) 1.6 " , "|" ))
583597 print ("{0}\t {1:<20}\t {2:^9}" .format ("|" , "原作者Suso" , "|" ))
584598 print ("{0}\t {1:<20}\t {2:^9}" .format ("|" , "魔改作者FengMing3093" , "|" ))
585599 print ("{0}\t {1:<20}\t {2:^9}" .format ("|" , "使用Amulet核心" , "|" ))
0 commit comments