FILE::GENERATE 1g 2023 laplante@plcb.ca GOWEB/FILE


title: “file::generate Function” author: “laplante@plcb.ca” date: “2023-01-01” version: “1.0.1”

category: “GOWEB/FILE”

Name

file::generate Generate a file from a template, with optional compilation, minification, and variable return support.

Synopsis

file::generate or generate(template: string, file: string, mode: integer, jsmin: bool, cssmin: bool, error: variable, compile: bool, save: string, retvar: variable, variable…)

Description

This function reads the specified template, executes it, and returns the result.

Parameters

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.

Examples

Example 1: Simple Template

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;
}}.

Example 2: Generate to File

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.


Example 3: Using Variables and retvar

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"}.

Author

See also

Version