Syntax

Variables

${variable} or $variable - plain variable. Outputs variable variable in current context

The shorthand notation of a variable consists of a leading "$" character followed by a Identifier. A Identifier must start with an alphabetic character (a .. z or A .. Z). The rest of the characters are limited to the following types of characters:

  • alphabetic (a .. z, A .. Z)
  • numeric (0 .. 9)
  • underscore ("_")

example:

var templateContent = "hello ${name}";
var template = Engine.CreateTemplate(templateContent);
template.Set("name","jntemplate");
var result = template.Render();
Assert.AreEqual("hello jntemplate", render);

output

hello jntemplate

Property & Field

${object.Name} or $object.Name - object property or field. Outputs Name property(field) in object

example 1:

var templateContent = "hello ${model.Name}";
var template = Engine.CreateTemplate(templateContent);
template.Set("model",new SiteInfo {  Name = "jntemplate" });
var result = template.Render();

output

hello jntemplate

example 2(static property):

var templateContent = "${DateTime.Now}";
var template = Engine.CreateTemplate(templateContent);
template.SetStaticType("DateTime", typeof(DateTime));
var result = template.Render();

output

2022/9/4 00:00:00

WARNING

does not support access to anonymous object properties .

Function & Method

A method is defined in the c# code and is capable of doing something useful, like running a calculation or arriving at a decision.

Instance Method

${ obj.method(parameter1,parameter2....) } or $obj.method(parameter1,parameter2....) - You can call methods of object


example 1:

var templateContent = "${help.Test(\"hello\")}";
var template = Engine.CreateTemplate(templateContent);
template.Set("help", new TestHelper());
var result = template.Render();

TestHelper.cs

using System;

namespace Example
{
    /// <summary>
    /// 
    /// </summary>
    public class TestHelper
    {
        public string Test(string pre)
        {
            return pre + " jntemplate";
        }
    }
}

output

hello jntemplate

Type Method(Static Method)

${ type.method(parameter1,parameter2....) } or $type.method(parameter1,parameter2....) - You can call methods of type(static method):


example 2:

var templateContent = "${string.Concat(\"hello\",\" jntemplate\")}";
var template = Engine.CreateTemplate(templateContent);
template.SetStaticType("string", typeof(string));
var result = template.Render();

output

hello jntemplate

Delegate

${ func(parameter1,parameter2....) } or $func(parameter1,parameter2....) - invoking the delegate.


example 3:

var templateContent = "${add(8,-2)}";
var template = Engine.CreateTemplate(templateContent);
template.Set<Func<int, int, int>>("add", (x, y) =>
{
    return x + y;
});
var result = template.Render();

output

6

Indexing

${ arr[index] } or $arr[index] - Indexing use [] syntax and evaluate to a byte in a string, an element in a array, a value in a dictionary

example 1(dictionary):

var templateContent = "${dict[\"name\"]}";
var template = Engine.CreateTemplate(templateContent);
var dic = new System.Collections.Generic.Dictionary<string, string>();
dic["name"] = "jntemplate";
dic["age"] = "1";
template.Set("dict",dict);
var result = template.Render();

output

jntemplate

example 2(array):

var templateContent = "${arr[0]}";
var template = Engine.CreateTemplate(templateContent);
template.Set("arr",new int[] { 1, 2, 3 });
var result = template.Render(); 

output

1

Set

$set(name=value) or ${set(name=value)} - The set tag allows you to define a variable in the current context, whether it currently exists or not.

$set(userName = "jntemplate")
$set(value=getUser())
$set(id=45)

The left hand side of the assignment must be a variable reference .

example:

var templateContent = @"
$set(input = ""jntemplate"")
you input: $input
";
var template = Engine.CreateTemplate(templateContent);
var result = template.Render(); 

output

you input: jntemplate

Conditionals

Conditions support the typical if, elseif OR elif and else statements.

if

You can branch inside templates depending on a condition using if:

example :

var templateContent = @"
$if(3<5)
3<5:right
$end
";
var template = Engine.CreateTemplate(templateContent);
var result = template.Render(); 

output

3<5:right

if / else

You may provide an else block when using if:

example :

var templateContent = @"
$if(3>5)
3>5:right
$else
3>5:error
$end
";
var template = Engine.CreateTemplate(templateContent);
var result = template.Render(); 

output

3>5:error

if / elseif(elif)

You can test for another condition using elseif or elif:

example :

var templateContent = @"
$if(user.Name==\"duthie\")
Hello duthie.
$elif(user.Name==\"biber\")
Hello biber.
$else
Hello everybody.
$end
";
var template = Engine.CreateTemplate(templateContent);
template.Set("user",new User {  Name = "biber" });
var result = template.Render(); 

output

Hello duthie.

Includes

$include(path) or ${include(path)}- You can either include other templates but does not parse the template content.

example:header.html

<p>hello,$name</p>

code

var templateContent = "$include(\"include.html\")";
var template = Engine.CreateTemplate(templateContent);
template.Set("name","jntemplate");
var result = template.Render();

output:

<p>hello,$name</p>

Load

$load(path) or ${load(path)}- You can either include other templates.

example:header.html

<p>hello,$name</p>

code

var templateContent = "$include(\"include.html\")";
var template = Engine.CreateTemplate(templateContent);
template.Set("name","jntemplate");
var result = template.Render();

output:

<p>hello,jntemplate</p>

Iteration

Iteration is achieved by using the foreach binding on the element you wish to iterate.

$foreach(child in list)...
$end

or

$for(child in list)...
$end

example

var  templateContent = @"
<ul>
$foreach(i in list)
<li>$i</li>
${end}
</ul>
";
var template = Engine.CreateTemplate(templateContent);
template.Set("list", new char[] { 'j', 'n', 't', 'e', 'm', 'p', 'l', 'a', 't', 'e' });
var result = template.Render();

output:

<ul>
<li>j</li>
<li>n</li>
<li>t</li>
<li>e</li>
<li>m</li>
<li>p</li>
<li>l</li>
<li>a</li>
<li>t</li>
<li>e</li>
</ul>

WARNING

The list must implement the IEnumerable interface.

Arithmetic

Basic arithmetic operators are supported: +, -, *, /, %

example:

var templateContent = "the result:${3 + 5 * 10}";
var template = Engine.CreateTemplate(templateContent);
var result = template.Render();

output

the result:53

String concatenation

var templateContent = "the result:${3 + 5 * 10}";
var template = Engine.CreateTemplate(templateContent);
var result = template.Render();

Logical operators

The following operators are supported:

&&: and

||: or

==: equal

!=: not equal

>: greater than

>=: greater than or equal (= not less than)

<: less than

<=: less than or equal (= not greater than)