<#--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at
  
    http://www.apache.org/licenses/LICENSE-2.0
  
  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
--><#macro m\-a data\-color><#local \.namespace = 123><a-b>${data\-color}<#nested \.namespace></a-b></#macro><#macro m\-b2></#macro><#macro "m/b2"></#macro>
<@m\-a data\-color="red"; loop\-var, loopVar2>${loop\-var}</@m\-a>

<#function f\-a(p\-a)><#return p\-a + " works"/></#function>${f\-a("f-a")}

<#assign \-\-\-\.\: = "dash-dash-dash etc.">${\-\-\-\.\:}
${.vars["---.:"]}
<#assign hash = {"--moz-prop": "propVal"}>${hash.\-\-moz\-prop}
${hash["--moz-prop"]}

<#assign ls\:a = 1..3>List: <#list ls\:a as \:i>${\:i}</#list>

<#assign sw\-a = 1>Switch: <#switch sw\-a><#case 1>OK<#break/>
    <#default>Fails
</#switch>
<#escape \-x as \-x?upper_case>${"escaped"}</#escape>

<#if false && sw\-a == 1><#visit x\-y2 using x\-y1/><#recurse x\-y2 using x\-y1/><#import i\-a as i\-b/><#include i\-c/></#if>
<#assign @as@_a = "as1">${@as@_a}
<#assign as\-c = "as2">${.vars["as-c"]}
<#assign "as/b" = "as3">${.vars["as/b"]}
<#assign "as'c" = "as4">${.vars["as'c"]}
<#assign 'as"d' = "as5">${.vars['as"d']}

<#global g\-a = 1, g\-b = 2, g\-c = 3><#macro dumpNS><#list .namespace?keys?sort as k>${k} = <#local v = .namespace[k]><#if v?is_string>${v}<#else>...</#if>
</#list></#macro><@dumpNS/>