Start parsing into tokens, add config.toml
This commit is contained in:
commit
bfce84868e
|
@ -0,0 +1,13 @@
|
||||||
|
# top-most EditorConfig file
|
||||||
|
root = true
|
||||||
|
|
||||||
|
# Unix-style newlines with a newline ending every file
|
||||||
|
[*]
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
|
||||||
|
# 4 space indentation
|
||||||
|
[*.py]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
||||||
|
charset = utf-8
|
|
@ -0,0 +1,11 @@
|
||||||
|
.DS_Store
|
||||||
|
.idea
|
||||||
|
*.log
|
||||||
|
tmp/
|
||||||
|
|
||||||
|
*.py[cod]
|
||||||
|
*.egg
|
||||||
|
build
|
||||||
|
htmlcov
|
||||||
|
__pycache__/
|
||||||
|
config.toml
|
|
@ -0,0 +1,8 @@
|
||||||
|
import tomllib
|
||||||
|
|
||||||
|
with open("config.toml", "rb") as f:
|
||||||
|
config = tomllib.load(f)
|
||||||
|
|
||||||
|
|
||||||
|
def get(q: str):
|
||||||
|
return config.get(q, None)
|
|
@ -0,0 +1 @@
|
||||||
|
scripts_path = "/path/ho/higurashi/sdk/Scripts/"
|
|
@ -0,0 +1,95 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import os
|
||||||
|
import config
|
||||||
|
|
||||||
|
def get_functions_from_file(filepath: str):
|
||||||
|
"""
|
||||||
|
Gets the function calls from a file and returns
|
||||||
|
a list of lists with the following structure:
|
||||||
|
|
||||||
|
["<function_name>", "<argument_1>, <argument2>, ..."]
|
||||||
|
"""
|
||||||
|
|
||||||
|
tokens = []
|
||||||
|
|
||||||
|
with open(filepath, 'r') as file:
|
||||||
|
insideQuotes = False
|
||||||
|
insideComment = False
|
||||||
|
insideToken = False
|
||||||
|
currentWord = ""
|
||||||
|
currentTokenName = ""
|
||||||
|
currentTokenContent = ""
|
||||||
|
|
||||||
|
# TODO: Prettify this
|
||||||
|
while True:
|
||||||
|
char = file.read(1)
|
||||||
|
if len(char) != 1:
|
||||||
|
break
|
||||||
|
|
||||||
|
#print(currentWord)
|
||||||
|
|
||||||
|
if char in " \n\t\r":
|
||||||
|
currentWord = ""
|
||||||
|
else:
|
||||||
|
currentWord += char
|
||||||
|
|
||||||
|
if insideToken and char not in "\n\r":
|
||||||
|
currentTokenContent += char
|
||||||
|
|
||||||
|
# Skip comments
|
||||||
|
if insideComment:
|
||||||
|
if char == "\n":
|
||||||
|
print("Skipped comment....")
|
||||||
|
insideComment = False
|
||||||
|
|
||||||
|
continue
|
||||||
|
|
||||||
|
if char == '"':
|
||||||
|
insideQuotes = not insideQuotes
|
||||||
|
|
||||||
|
if not insideQuotes:
|
||||||
|
if currentWord == "//":
|
||||||
|
insideComment = True
|
||||||
|
|
||||||
|
if char == "(":
|
||||||
|
currentTokenName = currentWord
|
||||||
|
insideToken = True
|
||||||
|
|
||||||
|
if insideToken and char == ")":
|
||||||
|
insideToken = False
|
||||||
|
|
||||||
|
# We have the whole function call, save the result
|
||||||
|
tokens.append([
|
||||||
|
# Using [1:] and [:-1] to remove the parenthesis
|
||||||
|
currentTokenName[:-1].strip(),
|
||||||
|
currentTokenContent[:-1].strip(),
|
||||||
|
])
|
||||||
|
currentTokenName = ""
|
||||||
|
currentTokenContent = ""
|
||||||
|
|
||||||
|
return tokens
|
||||||
|
|
||||||
|
def main():
|
||||||
|
scripts_path = config.get("scripts_path")
|
||||||
|
|
||||||
|
tokens = get_functions_from_file(
|
||||||
|
os.path.join(scripts_path,"onik_005.txt")
|
||||||
|
)
|
||||||
|
|
||||||
|
structure = []
|
||||||
|
|
||||||
|
for token in tokens:
|
||||||
|
#if not token[0].startswith("Output"):
|
||||||
|
if not token[0] == "OutputLineAll":
|
||||||
|
continue
|
||||||
|
|
||||||
|
if "Line_ContinueAfterTyping" in token[1] and "\\n" in token[1]:
|
||||||
|
count = token[1].count("\\n")
|
||||||
|
print(token[1], count)
|
||||||
|
structure.append(["LineBreak", count])
|
||||||
|
|
||||||
|
print(structure)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
Reference in New Issue