64 lines
2.3 KiB
Python
64 lines
2.3 KiB
Python
|
|
import typing
|
||
|
|
import jinja2
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
HPP_TEMPLATE_FILE: str = 'VxTypes.hpp.jinja'
|
||
|
|
CPP_TEMPLATE_FILE: str = 'VxTypes.cpp.jinja'
|
||
|
|
|
||
|
|
HPP_RENDER_FILE: str = 'VxTypes.hpp'
|
||
|
|
CPP_RENDER_FILE: str = 'VxTypes.cpp'
|
||
|
|
|
||
|
|
def get_root_directory() -> Path:
|
||
|
|
return Path(__file__).resolve().parent
|
||
|
|
|
||
|
|
class TemplateRender:
|
||
|
|
__loader: jinja2.BaseLoader
|
||
|
|
__environment: jinja2.Environment
|
||
|
|
|
||
|
|
__hpp_template: jinja2.Template
|
||
|
|
__cpp_template: jinja2.Template
|
||
|
|
|
||
|
|
__render_hpp: typing.TextIO
|
||
|
|
__render_cpp: typing.TextIO
|
||
|
|
|
||
|
|
def __init__(self, output_hpp_path: str, output_cpp_path: str) -> None:
|
||
|
|
self.__loader = jinja2.FileSystemLoader(get_root_directory())
|
||
|
|
self.__environment = jinja2.Environment(loader=self.__loader)
|
||
|
|
|
||
|
|
self.__hpp_template = self.__environment.get_template(HPP_TEMPLATE_FILE)
|
||
|
|
self.__cpp_template = self.__environment.get_template(CPP_TEMPLATE_FILE)
|
||
|
|
|
||
|
|
self.__render_hpp = open(get_root_directory() / output_hpp_path, 'w', encoding='utf-8')
|
||
|
|
self.__render_cpp = open(get_root_directory() / output_cpp_path, 'w', encoding='utf-8')
|
||
|
|
|
||
|
|
def __enter__(self):
|
||
|
|
return self
|
||
|
|
|
||
|
|
def __exit__(self, exc_type, exc_value, traceback):
|
||
|
|
self.__render_hpp.close()
|
||
|
|
self.__render_cpp.close()
|
||
|
|
|
||
|
|
def __render(self, sname: str, is_vector: bool, svars: tuple[str, ...]) -> None:
|
||
|
|
template_argument: dict[str, typing.Any] = {
|
||
|
|
'sname': sname,
|
||
|
|
'is_vector': is_vector,
|
||
|
|
'svars': svars
|
||
|
|
}
|
||
|
|
self.__render_hpp.write(self.__hpp_template.render(**template_argument))
|
||
|
|
self.__render_cpp.write(self.__cpp_template.render(**template_argument))
|
||
|
|
|
||
|
|
def render_vector(self, sname: str, svars: tuple[str, ...]) -> None:
|
||
|
|
self.__render(sname, True, svars)
|
||
|
|
|
||
|
|
def render_others(self, sname: str, svars: tuple[str, ...]) -> None:
|
||
|
|
self.__render(sname, False, svars)
|
||
|
|
|
||
|
|
if __name__ == '__main__':
|
||
|
|
with TemplateRender(HPP_RENDER_FILE, CPP_RENDER_FILE) as render:
|
||
|
|
render.render_vector('VxVector2', ('x', 'y', ))
|
||
|
|
render.render_vector('VxVector3', ('x', 'y', 'z', ))
|
||
|
|
render.render_vector('VxVector4', ('x', 'y', 'z', 'w', ))
|
||
|
|
render.render_others('VxQuaternion', ('x', 'y', 'z', 'w', ))
|
||
|
|
render.render_others('VxColor', ('r', 'g', 'b', 'a', ))
|
||
|
|
print('Done')
|