mirror of
https://github.com/pmret/papermario.git
synced 2024-11-18 08:52:40 +01:00
de800e9c9f
* add process_scripts.py * mass evt rename
70 lines
1.8 KiB
Python
Executable File
70 lines
1.8 KiB
Python
Executable File
#! /usr/bin/python3
|
|
|
|
import sys
|
|
from compile_script import read_until_closing_paren
|
|
|
|
def read_scripts_in_file(in_file):
|
|
line_no = 1
|
|
|
|
macro_name = "" # captures recent UPPER_CASE identifier
|
|
prev_char = ""
|
|
while True:
|
|
char = in_file.read(1)
|
|
|
|
if len(char) == 0:
|
|
# EOF
|
|
break
|
|
|
|
if char == "#" and (prev_char == "\n" or prev_char == ""):
|
|
pass
|
|
elif char == "(":
|
|
# SCRIPT(...)
|
|
if macro_name == "SCRIPT":
|
|
pos_before = in_file.tell()
|
|
read_data = read_until_closing_paren(in_file, lex_strings=True)
|
|
line_no += read_data.count("\n")
|
|
assert read_data[0] == '{'
|
|
yield pos_before, in_file.tell(), read_data
|
|
|
|
macro_name = ""
|
|
elif char == "_" or (char >= 'A' and char <= 'Z'):
|
|
macro_name += char
|
|
else:
|
|
macro_name = ""
|
|
|
|
if char == "\n":
|
|
line_no += 1
|
|
|
|
prev_char = char
|
|
|
|
def process_script(script):
|
|
# TODO
|
|
return script
|
|
|
|
def process_file(filename):
|
|
with open(filename, "r") as f:
|
|
scripts = [k for k in read_scripts_in_file(f)]
|
|
f.seek(0)
|
|
file_content = f.read()
|
|
|
|
pos_delta = 0
|
|
|
|
for start_pos, end_pos, script in scripts:
|
|
start_pos = start_pos - pos_delta
|
|
end_pos = end_pos - pos_delta
|
|
|
|
script_len_before = len(script)
|
|
script = process_script(script)
|
|
script_len_after = len(script)
|
|
|
|
pos_delta += script_len_before - script_len_after
|
|
|
|
file_content = file_content[:start_pos] + script + file_content[end_pos-1:]
|
|
|
|
with open(filename, "w") as f:
|
|
f.write(file_content)
|
|
|
|
if __name__ == "__main__":
|
|
for filename in sys.argv[1:]:
|
|
process_file(filename)
|