| <#ftl strict_syntax="false"> |
| <#-- |
| 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. |
| --> |
| <html> |
| <head> |
| <title>FreeMarker: Function Test</title> |
| </head> |
| <body> |
| |
| <p>A simple test follows:</p> |
| |
| <p>${message}</p> |
| |
| <p>Now perform function tests:</p> |
| |
| <#assign urls = {"home" : "/home.html", "about" : "/about.html"}> |
| <#assign images = {"home" : "/images/home.png", "about" : "/image/about-us.jpeg"}> |
| <#assign preferences = {"showImages" : true}> |
| <assign "español" = français><#macro français(url, image, alt)> |
| <local var = "Kilroy"> |
| <a href="${url}"> |
| <if preferences.showImages> |
| <img src="${image}" border="0" alt="${alt}"> |
| <else> |
| ${alt} |
| </if> |
| </a> |
| ${var} was here. |
| </#macro> |
| |
| <p>Function is defined, now let's call it:</p> |
| |
| <call español(urls.home, images.home, "Home")><#t> |
| |
| <p>Again, but with different parameters:</p> |
| |
| <@français |
| url=urls.about |
| image=images.about |
| alt="About Us" |
| /> |
| |
| <#if var?exists> |
| Something is wrong here. |
| <else> |
| Good. |
| </#if> |
| |
| <p>A recursive function call:</p> |
| |
| <macro recurse(dummy, a=3)> |
| <if (a > 0)> |
| <call recurse(dummy, a - 1)> |
| </if> |
| ${a} |
| </macro> |
| |
| <@recurse urls /> |
| |
| <p>Test "catch-all" macro parameter:</p> |
| |
| <#macro "catch-all" foo bar...> |
| foo=${foo} baz=[<#list bar?keys?sort as key>${key}=${bar[key]}<#if key_has_next>, </#if></#list>] |
| </#macro> |
| <#assign catchall = .namespace["catch-all"]> |
| |
| <@catchall foo="a"/> |
| <@catchall foo="a" bar="b"/> |
| <@catchall foo="a" bar="b" baz="c"/> |
| |
| <#macro fmt pattern args...> |
| <#list args as arg> |
| <#local pattern = pattern?replace("{" + arg_index + "}", arg)> |
| </#list> |
| ${pattern}<#lt> |
| </#macro> |
| |
| <#macro m a=1 b=2> |
| </#macro> |
| <@assertFails message='"c"'><@m c=3 /></@> |
| <@assertFails message='3'><@m 9 8 7 /></@> |
| |
| <call fmt("Hello {0}! Today is {1}.", "World", "Monday")> |
| |
| </body> |
| </html> |