impl: Generate on top of original txt file

This commit is contained in:
Dusk 2024-02-15 21:50:56 +01:00
parent bfce84868e
commit 654c5d0d14
3 changed files with 102 additions and 22 deletions

6
.gitignore vendored
View File

@ -9,3 +9,9 @@ build
htmlcov htmlcov
__pycache__/ __pycache__/
config.toml config.toml
*.txt
*.ttc
*.ttf
envdata
venv/

42
orig.py Executable file
View File

@ -0,0 +1,42 @@
#!/usr/bin/env python3
import config
import parser
from unidecode import unidecode
#with open('enctest.txt', 'w', encoding='shift_jisx0213') as fileout:
japanese_ranges = [
(0x4E00, 0x9FFF), # Kanji
(0x3040, 0x309F), # Hiragana
(0x30A0, 0x30FF), # Katakana
(0xFF00, 0xFFEF), # Full-width Roman characters and symbols
(0x3000, 0x303F), # CJK symbols and punctuation (including 「」)
]
translation = parser.main()
outfile = open('out.txt', 'w', encoding='shift_jisx0213')
with open(config.get('original_path'), 'r', encoding='shift_jisx0213') as file:
for line in file:
found = False
for start, end in japanese_ranges:
if start <= ord(line[0]) <= end:
found = True
if found and len(translation) > 0:
#outfile.write(unidecode(translation.pop(0)[1]).replace("\\","¥"))
amount = line.count("@") + line.count("¥")
outfile.write('`')
for _ in range(amount):
outfile.write(unidecode(translation.pop(0)[1]).replace("\\","¥"))
if amount > 0:
outfile.write('\n')
else:
outfile.write(line)
outfile.close()

View File

@ -18,8 +18,8 @@ def get_functions_from_file(filepath: str):
insideComment = False insideComment = False
insideToken = False insideToken = False
currentWord = "" currentWord = ""
currentTokenName = "" currentToken = []
currentTokenContent = "" currentTokenParameter = ""
# TODO: Prettify this # TODO: Prettify this
while True: while True:
@ -35,17 +35,27 @@ def get_functions_from_file(filepath: str):
currentWord += char currentWord += char
if insideToken and char not in "\n\r": if insideToken and char not in "\n\r":
currentTokenContent += char currentTokenParameter += char
# Skip comments # Skip comments
if insideComment: if insideComment:
if char == "\n": if char == "\n":
print("Skipped comment....") #print("Skipped comment....")
insideComment = False insideComment = False
continue continue
if char == '"': # Keep track of whether or not we're inside quotes
# Also handle the case where the quotation marks are
# escaped. We do this by seeing if in the current word
# there's a backtick in the second to last position.
if (
char == '"'
and (
len(currentWord) <= 1
or currentWord[-2] != "\\"
)
):
insideQuotes = not insideQuotes insideQuotes = not insideQuotes
if not insideQuotes: if not insideQuotes:
@ -53,20 +63,24 @@ def get_functions_from_file(filepath: str):
insideComment = True insideComment = True
if char == "(": if char == "(":
currentTokenName = currentWord # Write the function name
currentToken.append(currentWord[:-1])
insideToken = True insideToken = True
if char == ",":
currentToken.append(currentTokenParameter[:-1].strip())
currentTokenParameter = ""
if insideToken and char == ")": if insideToken and char == ")":
insideToken = False insideToken = False
currentToken.append(currentTokenParameter[:-1].strip())
currentTokenParameter = ""
# We have the whole function call, save the result # We have the whole function call, save the result
tokens.append([ tokens.append(currentToken)
# Using [1:] and [:-1] to remove the parenthesis currentToken = []
currentTokenName[:-1].strip(),
currentTokenContent[:-1].strip(),
])
currentTokenName = ""
currentTokenContent = ""
return tokens return tokens
@ -74,22 +88,40 @@ def main():
scripts_path = config.get("scripts_path") scripts_path = config.get("scripts_path")
tokens = get_functions_from_file( tokens = get_functions_from_file(
os.path.join(scripts_path,"onik_005.txt") os.path.join(scripts_path,"onik_000.txt")
) )
structure = [] structure = []
for token in tokens: for token in tokens:
#if not token[0].startswith("Output"): if token[0] == "OutputLine":
if not token[0] == "OutputLineAll": dialogue = token[4][1:-1].replace('\\', '')
continue
if "Line_ContinueAfterTyping" in token[1] and "\\n" in token[1]: if token[-1] == "Line_Normal":
count = token[1].count("\\n") dialogue += "\\"
print(token[1], count) elif token[-1] == "Line_WaitForInput":
structure.append(["LineBreak", count]) dialogue += "@"
elif token[-1] == "Line_ContinueAfterTyping":
pass
else:
raise Exception("Unhandled output termination")
print(structure) structure.append(["OutputLine", dialogue])
elif (
token[0] == "OutputLineAll"
and "Line_ContinueAfterTyping" == token[-1]
and "\\n" in token[2]
):
count = token[2].count("\\n")
#structure.append(["LineBreak", count])
#for coso in structure:
# if coso[0] == "OutputLine":
# print(coso[1], end="")
# elif coso[0] == "LineBreak":
# print(":".join(["br"] * coso[1]))
return structure
if __name__ == "__main__": if __name__ == "__main__":
main() main()