Directives

Directives have the form $directive{expr}. What the expr may be depends on the directive, e.g. for if and for the difference is that for $if{expr} the expr is a normal expression evaluated as a bool, and for $for{expr in sequence} it must have this specific form.

A directive clause does not always have an expr, and in these cases the curly braces are not present, e.g. $else, $fi, $rof.

Directives must respect their specific context, e.g. if a $for{} is opened inside a nested template, then it must be closed with $rof within the same nested template.

Directives, in general, may be liberally intermixed and nested. A begin/end block may include other begin/end blocks, if blocks, for blocks, an overlay declaration, etc. However, specific constraints apply, e.g. only one prefer and overlay directives are allowed per template, nested or not, and they must be declared at top level of the template to which they pertain.

There is no significance to whether directives and any clauses are specified on a single line or on separate lines. This has benefits such as allowing an inlined if/else e.g. to calculate the value of an attribute, just as easily as multi-line if/else blocks to control which section of a template gets rendered.