Skip to content

Commit

Permalink
<feature> improve replace fonts for some special sentences
Browse files Browse the repository at this point in the history
update version to v2.2.1
  • Loading branch information
anonymousException committed Apr 17, 2024
1 parent dd740a8 commit 1fff8ab
Show file tree
Hide file tree
Showing 34 changed files with 373 additions and 136 deletions.
2 changes: 0 additions & 2 deletions src/extraction_form.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,6 @@ def extract(self):
is_open_filter=self.filterCheckBox.isChecked(),
filter_length=int(self.filterLengthLineEdit.text()),
is_gen_empty=self.emptyCheckBox.isChecked())
t.start()
extract_threads.append(t)
cnt = cnt + 1
select_dirs = self.selectDirsText.toPlainText().split('\n')
Expand All @@ -110,7 +109,6 @@ def extract(self):
is_open_filter=self.filterCheckBox.isChecked(),
filter_length=int(self.filterLengthLineEdit.text()),
is_gen_empty=self.emptyCheckBox.isChecked())
t.start()
extract_threads.append(t)
cnt = cnt + 1
pass
Expand Down
62 changes: 59 additions & 3 deletions src/font_replace_form.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,33 @@
import _thread
import os
import subprocess
import threading
import time
import traceback

from PySide6.QtCore import QCoreApplication
from PySide6.QtCore import QCoreApplication, QThread, Signal
from PySide6.QtWidgets import QDialog, QFileDialog

from font_replace import Ui_FontReplaceDialog
from my_log import log_print
from renpy_fonts import GenGuiFonts
from font_util import get_default_font_path

class replaceFontThread(threading.Thread):
def __init__(self, select_dir, font_path):
threading.Thread.__init__(self)
self.select_dir = select_dir
self.font_path = font_path


def run(self):
try:
log_print('start replace font ...')
GenGuiFonts(self.select_dir, self.font_path)
log_print('replace complete!')
except Exception as e:
msg = traceback.format_exc()
log_print(msg)

class MyFontReplaceForm(QDialog, Ui_FontReplaceDialog):
def __init__(self, parent=None):
Expand All @@ -23,6 +42,8 @@ def __init__(self, parent=None):
default_font = get_default_font_path()
if default_font is not None:
self.selectFontText.setText(default_font)
self.replace_font_thread = None
_thread.start_new_thread(self.update, ())

def select_directory3(self):
directory = QFileDialog.getExistingDirectory(self, QCoreApplication.translate("FontReplaceDialog", "select the directory you want to extract", None))
Expand All @@ -46,7 +67,11 @@ def replaceFont(self):
select_dir = select_dir + '/'
font_path = self.selectFontText.toPlainText()
font_path = font_path.replace('file:///', '')
GenGuiFonts(select_dir, font_path)
t = replaceFontThread(select_dir, font_path)
self.replace_font_thread = t
t.start()
self.setDisabled(True)
self.replaceFontBtn.setText(QCoreApplication.translate('FontReplaceDialog', 'is replacing font...', None))

def openFontStyleFile(self):
select_dir = self.selectDirText_3.toPlainText()
Expand All @@ -57,4 +82,35 @@ def openFontStyleFile(self):
command = 'notepad ' + select_dir + 'gui.rpy'
p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
creationflags=0x08000000)
p.wait()
p.wait()

def update(self):
thread = self.UpdateThread()
thread.update_date.connect(self.update_progress)
while True:
thread.start()
time.sleep(0.5)

def update_progress(self):
try:
if self.replace_font_thread is not None:
if not self.replace_font_thread.is_alive():
self.replaceFontBtn.setText(QCoreApplication.translate('FontReplaceDialog', 'replace font', None))
self.setEnabled(True)
self.replace_font_thread = None

except Exception:
msg = traceback.format_exc()
log_print(msg)

class UpdateThread(QThread):
update_date = Signal()

def __init__(self):
super().__init__()

def __del__(self):
self.wait()

def run(self):
self.update_date.emit()
20 changes: 17 additions & 3 deletions src/one_key_translate_form.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import extraction_official_form
from font_util import get_default_font_path
import my_log
from font_replace_form import replaceFontThread


class MyQueue(queue.Queue):
Expand Down Expand Up @@ -56,6 +57,7 @@ def __init__(self, parent=None):
self.startButton.clicked.connect(self.on_start_button_clicked)
self.path = None
self.official_extract_thread = None
self.replace_font_thread = None
self.is_queue_task_empty = True
self.q = MyQueue()
# a dict records the task status
Expand Down Expand Up @@ -225,9 +227,14 @@ def replaceFont(self):
select_dir = select_dir + '/'
font_path = self.selectFontText.toPlainText()
font_path = font_path.replace('file:///', '')
log_print('start replace font...')
GenGuiFonts(select_dir, font_path)
log_print('replace font complete!')
t = replaceFontThread(select_dir, font_path)
self.replace_font_thread = t
t.start()
self.setDisabled(True)
is_finished, is_executed = self.qDic[self.replaceFont]
is_finished = False
self.qDic[self.replaceFont] = is_finished, is_executed
return
is_finished, is_executed = self.qDic[self.replaceFont]
is_finished = True
self.qDic[self.replaceFont] = is_finished, is_executed
Expand Down Expand Up @@ -526,6 +533,13 @@ def update_progress(self):
is_finished = True
self.qDic[self.official_extract] = is_finished, is_executed

if self.replace_font_thread is not None:
if not self.replace_font_thread.is_alive():
self.replace_font_thread = None
is_finished, is_executed = self.qDic[self.replaceFont]
is_finished = True
self.qDic[self.replaceFont] = is_finished, is_executed

if not self.q.empty():
self.is_queue_task_empty = False
func = self.q.peek()
Expand Down
Binary file modified src/qm/arabic.qm
Binary file not shown.
Binary file modified src/qm/bengali.qm
Binary file not shown.
Binary file modified src/qm/chinese.qm
Binary file not shown.
Binary file modified src/qm/french.qm
Binary file not shown.
Binary file modified src/qm/german.qm
Binary file not shown.
Binary file modified src/qm/hindi.qm
Binary file not shown.
Binary file modified src/qm/japanese.qm
Binary file not shown.
Binary file modified src/qm/korean.qm
Binary file not shown.
Binary file modified src/qm/portuguese.qm
Binary file not shown.
Binary file modified src/qm/russian.qm
Binary file not shown.
Binary file modified src/qm/spanish.qm
Binary file not shown.
Binary file modified src/qm/turkish.qm
Binary file not shown.
Binary file modified src/qm/urdu.qm
Binary file not shown.
92 changes: 71 additions & 21 deletions src/renpy_extract.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
import pathlib

from my_log import log_print
from string_tool import remove_upprintable_chars, EncodeBracketContent, EncodeBrackets, replace_all_blank
from string_tool import remove_upprintable_chars, EncodeBracketContent, EncodeBrackets, replace_all_blank, \
replace_unescaped_quotes

extract_threads = []

Expand All @@ -20,7 +21,7 @@


class extractThread(threading.Thread):
def __init__(self, threadID, p, tl_name,dir, tl_dir, is_open_filter, filter_length,is_gen_empty):
def __init__(self, threadID, p, tl_name, dir, tl_dir, is_open_filter, filter_length, is_gen_empty):
threading.Thread.__init__(self)
self.threadID = threadID
self.p = p
Expand All @@ -34,17 +35,18 @@ def __init__(self, threadID, p, tl_name,dir, tl_dir, is_open_filter, filter_leng
def run(self):
try:
if self.tl_dir is not None and os.path.exists(self.tl_dir):
self.tl_dir=self.tl_dir.rstrip('/')
self.tl_dir=self.tl_dir.rstrip('\\')
self.tl_dir = self.tl_dir.rstrip('/')
self.tl_dir = self.tl_dir.rstrip('\\')
if self.tl_name is not None and len(self.tl_name) > 0:
ori_tl = os.path.basename(self.tl_dir)
self.tl_dir = self.tl_dir[:-len(ori_tl)] + self.tl_name
log_print(self.tl_dir + ' begin extract!')
ExtractAllFilesInDir(self.tl_dir, self.is_open_filter, self.filter_length,self.is_gen_empty)
ExtractAllFilesInDir(self.tl_dir, self.is_open_filter, self.filter_length, self.is_gen_empty)
else:
if self.p is not None:
log_print(self.p + ' begin extract!')
ExtractWriteFile(self.p, self.tl_name, self.is_open_filter, self.filter_length,self.is_gen_empty,set())
ExtractWriteFile(self.p, self.tl_name, self.is_open_filter, self.filter_length, self.is_gen_empty,
set())
if self.dir is not None:
log_print(self.dir + ' begin extract!')
paths = os.walk(self.dir, topdown=False)
Expand All @@ -54,7 +56,8 @@ def run(self):
i = os.path.join(path, file_name)
if not file_name.endswith("rpy"):
continue
global_e = ExtractWriteFile(i, self.tl_name, self.is_open_filter, self.filter_length,self.is_gen_empty,global_e)
global_e = ExtractWriteFile(i, self.tl_name, self.is_open_filter, self.filter_length,
self.is_gen_empty, global_e)

except Exception as e:
msg = traceback.format_exc()
Expand Down Expand Up @@ -90,10 +93,12 @@ def ExtractFromFile(p, is_open_filter, filter_length):
# if(line_content.strip().startswith('default ')):
# continue
# log_print(line_content)
suffix_list = ['.ogg', '.webp', '.png', '.ttf', '.otf', '.webm', '.svg', '.gif', '.jpg', '.wav',
'.mp3']
d = EncodeBracketContent(line_content, '"', '"')
if ('oriList' in d.keys() and len(d['oriList']) > 0):
if 'oriList' in d.keys() and len(d['oriList']) > 0:
for i in d['oriList']:
if (len(i) > 2):
if len(i) > 2:
strip_i = ''.join(i)
d2 = EncodeBrackets(i)

Expand All @@ -107,11 +112,11 @@ def ExtractFromFile(p, is_open_filter, filter_length):
diff_len = len(i) - len(strip_i)
_strip_i = replace_all_blank(strip_i)
cmp_i = i.lower().strip('"')
suffix_list = ['.ogg', '.webp', '.png', '.ttf', '.otf', '.webm', '.svg', '.gif', '.jpg', '.wav',
'.mp3']
skip = False
if cmp_i.startswith('#'):
skip = True
# if not line_content.strip().startswith('text ') or line_content.strip().find(i) != 5:
# skip = True
for suffix in suffix_list:
if cmp_i.endswith(suffix) == False:
continue
Expand All @@ -120,11 +125,53 @@ def ExtractFromFile(p, is_open_filter, filter_length):
break
if skip:
continue
i = i[1:-1]
i = replace_unescaped_quotes(i)
i = i.replace("\\'", "'")
if is_open_filter:
if len(_strip_i) < filter_length:
# log_print(len(strip_i),i)
continue
e.add(i)
else:
e.add(i)
d = EncodeBracketContent(line_content, "'", "'")
if 'oriList' in d.keys() and len(d['oriList']) > 0:
for i in d['oriList']:
if len(i) > 2:
strip_i = ''.join(i)
d2 = EncodeBrackets(i)

for j in (d2['en_1']):
strip_i = strip_i.replace(j, '')
for j in (d2['en_2']):
strip_i = strip_i.replace(j, '')
for j in (d2['en_3']):
strip_i = strip_i.replace(j, '')

diff_len = len(i) - len(strip_i)
_strip_i = replace_all_blank(strip_i)
cmp_i = i.lower().strip("'")
skip = False
if cmp_i.startswith('#'):
skip = True
# if not line_content.strip().startswith('text ') or line_content.strip().find(i) != 5:
# skip = True
for suffix in suffix_list:
if cmp_i.endswith(suffix) == False:
continue
else:
skip = True
break
if skip:
continue
i = i[1:-1]
i = replace_unescaped_quotes(i)
i = i.replace("\\'", "'")
if is_open_filter:
if len(_strip_i) < filter_length:
# log_print(len(strip_i),i)
continue
i = i.replace('\\\'', "'")
e.add(i)
else:
e.add(i)
Expand Down Expand Up @@ -168,10 +215,11 @@ def GetExtractedSet(p):
lines = f.readlines()
f.close()
for j in both:
for index,line in enumerate(lines):
j = '"' + j + '"'
for index, line in enumerate(lines):
if line.startswith(' old ' + j):
lines[index] = '\n'
lines[index+1] = '\n'
lines[index + 1] = '\n'
f = io.open(i, 'w', encoding='utf-8')
f.writelines(lines)
f.close()
Expand All @@ -180,7 +228,7 @@ def GetExtractedSet(p):
return e


def WriteExtracted(p, extractedSet,is_open_filter, filter_length,is_gen_empty):
def WriteExtracted(p, extractedSet, is_open_filter, filter_length, is_gen_empty):
if (p[len(p) - 1] != '/' and p[len(p) - 1] != '\\'):
p = p + '/'
index = p.rfind('tl\\')
Expand All @@ -207,9 +255,9 @@ def WriteExtracted(p, extractedSet,is_open_filter, filter_length,is_gen_empty):
log_print(target + " not exists skip!")
continue

e = ExtractFromFile(target,is_open_filter,filter_length)
e = ExtractFromFile(target, is_open_filter, filter_length)
eDiff = e - extractedSet
if (len(eDiff) > 0):
if len(eDiff) > 0:
f = io.open(i, 'a+', encoding='utf-8')
f.write('\ntranslate ' + tl + ' strings:\n')
lock.acquire()
Expand All @@ -224,6 +272,7 @@ def WriteExtracted(p, extractedSet,is_open_filter, filter_length,is_gen_empty):
head = head + 'new ' + timestamp + '\n\n'
f.write(head)
for j in eDiff:
j = '"' + j + '"'
if not is_gen_empty:
writeData = ' old ' + j + '\n new ' + j + '\n'
else:
Expand Down Expand Up @@ -255,7 +304,7 @@ def GetHeaderPath(p):
return dic


def ExtractWriteFile(p, tl_name, is_open_filter, filter_length,is_gen_empty,global_e):
def ExtractWriteFile(p, tl_name, is_open_filter, filter_length, is_gen_empty, global_e):
dic = GetHeaderPath(p)
header = dic['header']
if (header == ''):
Expand Down Expand Up @@ -291,6 +340,7 @@ def ExtractWriteFile(p, tl_name, is_open_filter, filter_length,is_gen_empty,glob
head = head + 'new ' + timestamp + '\n\n'
f.write(head)
for j in eDiff:
j = '"' + j + '"'
if not is_gen_empty:
writeData = ' old ' + j + '\n new ' + j + '\n'
else:
Expand All @@ -302,8 +352,8 @@ def ExtractWriteFile(p, tl_name, is_open_filter, filter_length,is_gen_empty,glob
return global_e


def ExtractAllFilesInDir(dirName, is_open_filter, filter_length,is_gen_empty):
def ExtractAllFilesInDir(dirName, is_open_filter, filter_length, is_gen_empty):
CreateEmptyFileIfNotExsit(dirName)
ret = GetExtractedSet(dirName)
WriteExtracted(dirName,ret,is_open_filter, filter_length,is_gen_empty)
ret = GetExtractedSet(dirName)
WriteExtracted(dirName, ret, is_open_filter, filter_length, is_gen_empty)
ret = GetExtractedSet(dirName)
Loading

0 comments on commit 1fff8ab

Please sign in to comment.