2020-11-05 14:30:52 +08:00
|
|
|
#!python
|
|
|
|
from meta_gen import *
|
|
|
|
import re
|
|
|
|
|
|
|
|
def assemble(template, **kwargs):
|
|
|
|
pattern = re.compile("@@@@(.*?)\n((.|\n)*?)\n####", re.MULTILINE)
|
|
|
|
temp_info = pattern.findall(template)
|
|
|
|
# print(temp_info)
|
|
|
|
mapping = dict()
|
|
|
|
rep_map = dict()
|
|
|
|
|
|
|
|
# drop repetive field from mapping
|
|
|
|
for k, v in kwargs.items():
|
|
|
|
if isinstance(v, list):
|
|
|
|
rep_map[k] = v
|
|
|
|
else:
|
|
|
|
mapping[k] = v
|
|
|
|
|
|
|
|
for k, v, _ in temp_info:
|
|
|
|
info = k.split("@")
|
|
|
|
new_v = replace_all(v, **mapping)
|
|
|
|
assert(1 <= len(info) <= 2)
|
|
|
|
if len(info) == 2:
|
|
|
|
k = info[0]
|
|
|
|
rep = info[1]
|
|
|
|
new_v = "\n\n".join([new_v.replace("@@" + rep + "@@", rep_v) for rep_v in rep_map[rep]])
|
|
|
|
mapping[k] = new_v
|
|
|
|
return mapping["main"]
|
|
|
|
|
|
|
|
|
2021-10-02 09:36:31 +08:00
|
|
|
# import sys
|
2020-11-05 14:30:52 +08:00
|
|
|
# if __name__ == "__main__":
|
|
|
|
# assert(len(sys.argv) == 2)
|
|
|
|
# root_file = sys.argv[1]
|
|
|
|
# namespace, root_base, struct_name = meta_gen(readfile(root_file))
|
|
|
|
# gen_all(readfile("templates/node_full.cpp"), namespace=namespace, root_base=root_base, struct_name=struct_name)
|
|
|
|
|
|
|
|
|