title: “file::generate Function” author: “laplante@plcb.ca” date: “2023-01-01” version: “1.0.1”
file::generate Generate a file from a template, with optional compilation, minification, and variable return support.
file::generate or generate(template: string, file: string, mode: integer, jsmin: bool, cssmin: bool, error: variable, compile: bool, save: string, retvar: variable, variable…)
This function reads the specified template, executes it, and returns the result.
The retvar parameter enables storing return values inside a map.
Example usage inside a template:
retvar(x);
retvar(y);
When executed as:
generate(template:"...", retvar:test);
The values will be available as test.x
and test.y
.
With template1:
Template1
{{
5*6;
}}
\{{
5*6;
}}.
Execution:
res={{
template := "../../tests/038-file/template1";
if file::exist("template") {
template = "template";
}
generate(template:template);
}}.
Return:
res=Template1
30
{{
5*6;
}}.
res={{
template := "../../tests/038-file/template1";
file := "../../tests/038-file/file1";
generate(template:template, file:file);
}}.
Return:
res=.
But the output is generated inside file1
.
Template-031:
Template-031 {{ myid; myid := "5"; }}
Execution:
res={{
func f(myid) {
generate(template:"template-031");
myid;
}
myid := "test31";
f(myid);
myid;
}}.
Return:
res=Template-031 test31
5test31.
Template-042:
{{
func f() {
r := { "x1": 1.0, "x2": [1, "2"] };
retvar(r);
}
"abc="; abc;
abc[0] *= 2;
"abc2="; abc;
retvar(abc);
retval := "allo";
retvar(retval);
f();
}}
Execution:
res={{
abc := [4,5,6];
generate(template:"template-042", retvar:x, abc); "\n"
"abc after="; abc; "\n";
"x="; x;
}}.
Return:
res=abc=[4,5,6]abc2=[8,5,6]
abc after=[4,5,6]
x={"abc":[8,5,6],"r":{"x1":1,"x2":[1,"2"]},"retval":"allo"}.