@@ -18,6 +18,14 @@ def parse_decls(decls_text):
1818 decls [name .strip ()] = code .strip ()
1919 return decls
2020
21+ def replace_repl_placeholders (variant , template_map ):
22+
23+ for repl , code in variant ["REPLS" ].items ():
24+ for key , val in template_map .items ():
25+ # Match "key" and avoid matching subsequences using by using \b
26+ code = re .sub (rf'\b{ re .escape (str (key ))} \b' , str (val ), code )
27+ variant ["REPLS" ][repl ] = code
28+ return variant
2129
2230def replace_placeholders (shader_text , replacements ):
2331 for key , val in replacements .items ():
@@ -71,6 +79,10 @@ def generate_variants(fname, input_dir, output_dir, outfile):
7179 decls_map = parse_decls (extract_block (text , "DECLS" ))
7280 except ValueError :
7381 decls_map = {}
82+ try :
83+ templates_map = ast .literal_eval (extract_block (text , "REPL_TEMPLATES" ))
84+ except ValueError :
85+ templates_map = {}
7486
7587 with open (os .path .join (input_dir , "common_decls.tmpl" ), "r" , encoding = "utf-8" ) as f :
7688 common_decls = f .read ()
@@ -85,11 +97,15 @@ def generate_variants(fname, input_dir, output_dir, outfile):
8597 decls_code = ""
8698 for key in decls :
8799 if key not in decls_map :
100+
88101 raise ValueError (f"DECLS key '{ key } ' not found." )
89102 decls_code += decls_map [key ] + "\n \n "
90103
91104 final_shader = re .sub (r'\bDECLS\b' , decls_code , shader_template )
105+
92106 if "REPLS" in variant :
107+ variant = replace_repl_placeholders (variant , templates_map )
108+ final_shader = replace_placeholders (final_shader , variant ["REPLS" ])
93109 final_shader = replace_placeholders (final_shader , variant ["REPLS" ])
94110 final_shader = expand_includes (final_shader , input_dir )
95111
0 commit comments