Sometimes the generated content uses symbols that clashes with
        the default FreeMarker syntax (typically,
        ${...}-s that FreeMarker
        should print as is, without interpretation), or you use some tool that
        is confused by the default FreeMarker syntax (typically by
        < and >). While usually
        there are tricks to work those cases around (like you can use
        ${'$'}{x} to print ${x} as is) ,
        they are often too inconvenient. Thus, the interpolation syntax can be
        configured to be like [=x] instead of
        ${x}. Also, independently of that, the FreeMarker
        tag syntax can be configured to use [], like in
        [#if x]...[/#if].
While both the "tag syntax" and
          "interpolation syntax" can be configured to use square
          brackets, they are totally independent configuration settings. Thus,
          the overall syntax can be like [#if x]${y}[/#if],
          or like <#if x>[=y]</#if> as
          well.
Square bracket tag syntax
This section is about the tag syntax, not the interpolation syntax. Don't confuse the two, they are independent.
This feature exists since FreeMarker 2.3.4.
FreeMarker supports an alternative tag 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 square tag syntax instead of the default one, the
          programmers should configure FreeMarker so (see
          Configuraton.setTagSyntax, or the
          tag_syntax setting). However, the tag
          syntax can also be enforced in the template, with the ftl directive
          (see later).
For example, this is how the last example of the Getting Started looks with the alternative syntax:
<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 square bracket and the default (angle bracket) syntax are
          mutually exclusive within a template; they can't be mixed. If the
          template uses square bracket tag syntax, then things like
          <#if ...> will
          be just static text, not FTL tags. Similarly, if the template uses
          the angle brackets tag syntax, things like [#if
          ...] are static text, not FTL
          tags.
If you start the file with [#ftl
          ...] (where the
          ... stands for the
          optional parameters; of course [#ftl] works too)
          the file will use square bracket tag syntax
          regardless of the configuration settings (but that does
          not change the interpolation syntax to
          [=...]). Similarly, if you start the file with
          <#ftl ...> the
          file will use the normal (angle bracket) tag syntax. If there is no
          ftl directive in the file, then the programmer
          decides what the tag syntax will be by
          configuring FreeMarker (programmers
          see Configuration.setTagSyntax(int) in the API
          javadocs). Most probably the programmers use the factory
          default.
Square bracket interpolation syntax
This section is about the interpolation syntax, not the tag syntax. Don't confuse the two, they are independent.
This feature exists since FreeMarker 2.3.28
In this case instead of
          ${expression} (and the
          deprecated
          #{expression}) you
          write [=expression].
          This syntax is activated by the programmers from the configuration
          (see
          Configuration.setInterpolationSyntax in the Java
          API); unlike the tag syntax, it can't be specified inside
          the template. It can be used both together with, and without the
          square bracket
          tag syntax, as they are technically
          unrelated, but it's probably more aesthetic to use square bracket
          tag syntax when you use square bracket interpolation syntax:
[#--
  Note:
  This example uses both interpolation_syntax=squareBracket and tag_syntax=squareBracket,
  but you can also use interpolation_syntax=squareBracket and tag_syntax=angleBracket.
--]
<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>    When square bracket interpolation syntax is used,
          ${expression} and
          #{expression} in the
          template will be just static text, which is printed as is. This is
          mostly useful if you generate output that should contain those
          (especially
          ${expression} is
          frequent), such as when generating JSP files.
There's also a third tag syntax, "dollar", where
          only the interpolation syntax is
          ${expression}, and the
          deprecated
          #{expression} is just
          static text. (The one where
          #{expression} is still
          an interpolation is called the "legacy" interpolation
          syntax, and is the default for backward compatibility.)
