Templating Tokens

Tokens

Templating supports two kinds of tokens:

  • Variable Tokens: These are simple variables that are replaced with their corresponding values. They are considered truthy.
  • Expression Tokens: These are more expressive, and can include operations, method calls, and transformations.

Variable Token

Variable tokens are simple identifiers that are replaced with their corresponding values.

{{ identifier }}

  • identifier: A simple token variable.

Expression Token

Expression tokens are runtime compiled lambdas that can perform operations or transformations on data. They are passed a token context that provides invokable methods, and readonly token variables.

{{ x => x.identifier + 1 }}

  • x: The token context.
  • identifier: A token variable.
var parser = new TemplateParser
{
    Variables =
    {
        ["choice"] = "2"
    }
};

const string template =
    """
    hello {{x => {
        return x.choice switch
        {
            "1" => "me",
            "2" => "you",
            _ => "default"
        };
    } }}.
    """;

var result = parser.Render(template);
Console.WriteLine(result); // Output: hello you.

Truthy Tokens

Variable Tokens are Truthy. This means they evaluate to a boolean value (true or false). A token’s Truthy-ness is determined according to the following rules.

  • Falsy Values: The following values are considered falsy:
    • If the identifier does not exist
    • null
    • An empty string (String.Empty)
    • The strings "False", "No", "Off", and "0" (case-insensitive)
  • Truthy Values: Any value that is not falsy is considered truthy. This includes non-empty strings and any string that does not match the falsy values listed above.

Token Delimiters

By default, tokens are enclosed in double curly braces (``). The delimiters can be customized by passing TokenStyle to the TemplateParser constructor.

The available token styles are:

Token Style Description Usage
SingleBrace { and } {identifier}
DoubleBrace ` |`  
PoundBrace #{ and } #{identifier}}
DollarBrace ${ and } ${identifier}}

© Stillpoint Software.