2021-07-19 20:44:15 +01:00
|
|
|
"""
|
|
|
|
Usage: python te2c.py dest src_folder
|
|
|
|
Usage for TE: py te2c.py source/script/builtin scripts
|
|
|
|
Creator: https://github.com/maddiethecafebabe
|
|
|
|
"""
|
|
|
|
|
|
|
|
import os
|
|
|
|
import sys
|
|
|
|
import string
|
|
|
|
from typing import List, Tuple, Dict
|
|
|
|
|
|
|
|
IDENTCHARS = string.ascii_letters + string.digits
|
|
|
|
|
|
|
|
SOURCE_HEADER = """ /* this file has been autogenerated with te2c.py */
|
|
|
|
#include "{}"\n
|
|
|
|
"""
|
|
|
|
|
|
|
|
HEADER_DEF = """ /* this file has been autogenerated with te2c.py */
|
|
|
|
#ifndef TE_EMBEDDED_SCRIPTS_H
|
|
|
|
#define TE_EMBEDDED_SCRIPTS_H
|
|
|
|
|
|
|
|
typedef struct {{
|
|
|
|
const char const * script;
|
|
|
|
const char const * name;
|
|
|
|
}} embedded_script_t;
|
|
|
|
|
|
|
|
extern const embedded_script_t embedded_scripts_g[];
|
|
|
|
|
|
|
|
#define EMBEDDED_SCRIPTS_LEN {}
|
|
|
|
|
|
|
|
#endif /* TE_EMBEDDED_SCRIPTS_H */
|
|
|
|
"""
|
|
|
|
|
|
|
|
def gather_scripts(path: str, suffix: str=".te") -> List[Tuple[str, str]]:
|
|
|
|
files = []
|
|
|
|
for dirname, _, filenames in os.walk(path):
|
|
|
|
files += [(f, os.path.join(dirname, f)) for f in filenames if f.endswith(suffix)]
|
|
|
|
return files
|
|
|
|
|
|
|
|
def process_script(path: str) -> str:
|
|
|
|
with open(path, "r") as fp:
|
|
|
|
raw = fp.readlines()
|
|
|
|
return str().join(line.__repr__()[1:-1].replace("\"", "\\\"").replace("\\t", "") for line in raw)
|
|
|
|
|
|
|
|
def process_name(name: str) -> str:
|
|
|
|
return "script_" + str().join(c for c in name.split(".")[0] if c in IDENTCHARS) + "_g"
|
|
|
|
|
|
|
|
def map_scripts_from(path: str, suffix: str=".te") -> Dict[str, Dict[str, str]]:
|
|
|
|
return {process_name(name): {"script": process_script(path), "og-name": name} for (name, path) in gather_scripts(path, suffix=suffix)}
|
|
|
|
|
|
|
|
def te2c(dest: str, path: str, suffix: str=".te"):
|
|
|
|
script_map = map_scripts_from(path, suffix=suffix)
|
|
|
|
with open(dest + ".c", "w") as fp:
|
|
|
|
fp.write(SOURCE_HEADER.format(os.path.basename(dest) + ".h"))
|
|
|
|
fp.write(
|
|
|
|
"const embedded_script_t embedded_scripts_g[] = {{\n{}}};\n".format(
|
|
|
|
str().join(
|
|
|
|
f"\t{{ .name = \"{vals['og-name']}\", .script = \"{vals['script']}\"}}, \n" for name, vals in script_map.items()
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
with open(dest + ".h", "w") as fp:
|
|
|
|
fp.write(HEADER_DEF.format(len(script_map)))
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
te2c(dest=sys.argv[1], path=sys.argv[2])
|
2021-07-21 00:30:08 +01:00
|
|
|
print("converting .te files done!")
|