Skip to content

Commit c439921

Browse files
committed
1.6
1 parent 26c8f28 commit c439921

4 files changed

Lines changed: 52 additions & 38 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## World Translation Extractor Modified (WTEM) 1.5
1+
## World Translation Extractor Modified (WTEM) 1.6
22
Forked by [WorldTranslationExtractor](https://github.com/5uso/AmuletScripts/blob/main/WorldTranslationExtractor.py)
33

44
### Information

README_zh_cn.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## 存档翻译提取器魔改版 (WTEM) 1.5
1+
## 存档翻译提取器魔改版 (WTEM) 1.6
22
World Translation Extractor Modified
33

44
Forked by [WorldTranslationExtractor](https://github.com/5uso/AmuletScripts/blob/main/WorldTranslationExtractor.py)

WorldTranslationExtractor.py

Lines changed: 39 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -55,16 +55,24 @@ def get_key():
5555
def 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

111121
def 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

125136
def 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

140152
def 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

155168
def 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

580594
def 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核心", "|"))

config.json

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,22 @@
77
"sort_keys": false
88
},
99
"keep_duplicate_keys": {
10-
"datapacks": true,
11-
"command_blocks": true,
12-
"bossbar": true,
13-
"scores_all": true,
14-
"scores_name": true,
15-
"scores_teams_name": true,
16-
"scores_teams_prefix": true,
17-
"scores_teams_suffix": true,
18-
"signs": false,
10+
"datapacks": false,
11+
"command_blocks": false,
12+
"bossbar": false,
13+
"scores_all": false,
14+
"scores_name": false,
15+
"scores_teams_name": false,
16+
"scores_teams_prefix": false,
17+
"scores_teams_suffix": false,
18+
"signs": true,
1919
"containers_name": false,
2020
"entities_name": false,
2121
"show_entity_text": false,
22-
"items_in_same": true,
22+
"items_in_same": false,
2323
"items_all": false,
2424
"items_name": false,
25-
"items_lore": false,
25+
"items_lore": true,
2626
"items_pages": false,
2727
"items_title": false
2828
}

0 commit comments

Comments
 (0)