Alternative (square bracket) syntax - FreeMarker Manual

- Home
- Manual
- Java API

- Contribute
- Report a Bug
- Download

Manual
Previous Next

# Alternative (square bracket) syntax

Note:

This feature exists since FreeMarker 2.3.4.

FreeMarker supports an alternative syntax, where `[` and `]` is used instead of `<` and `>` in FreeMarker directives and comments, for example:

- Calling predefined directive: `[#list animals as animal]...[/#list]`
- Calling user-defined directive: `[@myMacro /]`
- Comment: `[#-- the comment --]`

To use the alternative syntax instead of the default one, start the template with the `ftl` directive using the alternative syntax. If you don't know what is the `ftl` directive, just start the template with `[#ftl]`, and remember that it should be the very first thing in the file (except that white-space can precede it). For example, this is how the last example of the Getting Started looks with the alternative syntax (assuming it's a complete template, not just a fragment):

    [#ftl]
    <p>We have these animals:
    <table border=1>
      <tr><th>Name<th>Price
      [#list animals as animal]
      <tr>
        <td>
          [#if animal.size == "large"]<b>[/#if]
          ${animal.name}
          [#if animal.size == "large"]</b>[/#if]
        <td>${animal.price} Euros
      [/#list]
    </table>

The alternative (square bracket) and the default (angle bracket) syntax are mutually exclusive within a template. That is, either the whole template uses alternative syntax, or the whole template uses the default syntax. If the template uses alternative syntax, things like `<#if ...>` are count as static text, not as FTL tags. Similarly, if the template uses the default syntax, things like `[#if ...]` count as static text, not as FTL tags.

If you start the file with `[#ftl ...]` (where the `...` stands for the optional parameters; of course `[#ftl]` works too) the file will surely use the alternative (square bracket) syntax. If you start the file with `<#ftl ...>` the file will surely use the normal (angle bracket) syntax. If there is no `ftl` directive in the file, then the programmer decides what the syntax will be by configuring FreeMarker (programmers see `Configuration.setTagSyntax(int)` in the API javadocs). Most probably the programmers use the factory default however. The factory default in 2.3.x is using the normal syntax. The factory default in 2.4.x will be auto-detection, which means that the first FreeMarker tag determines the syntax (it can be anything, not just `ftl`).

Previous Next