You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by dd...@apache.org on 2017/03/13 10:57:37 UTC
[01/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Repository: incubator-freemarker-site
Updated Branches:
refs/heads/asf-site 127455e59 -> 52c070a95
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/xgui_imperative_formal.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/xgui_imperative_formal.html b/builds/2.3.26-nightly/xgui_imperative_formal.html
new file mode 100644
index 0000000..324910a
--- /dev/null
+++ b/builds/2.3.26-nightly/xgui_imperative_formal.html
@@ -0,0 +1,545 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Details - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Details">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/xgui_imperative_formal.html">
+<link rel="canonical" href="http://freemarker.org/docs/xgui_imperative_formal.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui.html"><span itemprop="name">XML Processing Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui_imperative.html"><span itemprop="name">Imperative XML processing</span></a></li><li class="step
-3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui_imperative_formal.html"><span itemprop="name">Details</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","XML Processing Guide","Imperative XML processing","Details"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="xgui_imperative_learn.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_declarative.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="xgui_imperative_formal" itemprop="headline">Details</h1>
+</div></div><p>Every variable that corresponds to a single node in the DOM tree
+ is a multi-type variable of type node and type hash (for programmers:
+ implements both <code class="inline-code">TemplateNodeModel</code> and
+ <code class="inline-code">TemplateHashModel</code>). Thus, you can use the <a href="ref_builtins_node.html">node built-ins</a> with them. Hash keys
+ are interpreted as XPath expressions, except the special keys shown in
+ the table below. Some of the node variables also have string type, so
+ you can use them as string variables (for programmers: they implement
+ <code class="inline-code">TemplateScalarModel</code>).</p><a name="misc.xguiTable"></a> <div class="table-responsive">
+ <table class="table">
+
+ <thead>
+ <tr>
+ <th>Node type (<code class="inline-code">?node_type</code>)</th>
+
+
+ <th>Node name (<code class="inline-code">?node_name</code>)</th>
+
+
+ <th>String value (e.g.�<code class="inline-code"><p>${node}</code>)</th>
+
+
+ <th>Special hash keys</th>
+
+ </tr>
+
+ </thead>
+
+
+ <tbody>
+ <tr>
+ <td><code class="inline-code">"document"</code></td>
+
+
+ <td><code class="inline-code">"@document"</code></td>
+
+
+ <td>No string value. (Error when you try to use it as
+ string.)</td>
+
+
+ <td><code class="inline-code"><em class="code-color">elementName</em></code>,
+ <code class="inline-code">"<em class="code-color">prefix</em>:<em class="code-color">elementName</em>"</code>,
+ <code class="inline-code">*</code>, <code class="inline-code">**</code>,
+ <code class="inline-code">@@markup</code>, <code class="inline-code">@@nested_markup</code>,
+ <code class="inline-code">@@text</code>, <code class="inline-code">@@local_name</code>,
+ <code class="inline-code">@@qname</code>, <code class="inline-code">@@namespace</code></td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">"element"</code></td>
+
+
+ <td><code class="inline-code">"<em class="code-color">name</em>"</code>: the
+ name of the element. This is the local name (i.e. name without
+ namespace prefix).</td>
+
+
+ <td>If it has no element children, the text of all text node
+ children concatenated together. Error otherwise, when you try to
+ use it as string.</td>
+
+
+ <td><code class="inline-code"><em class="code-color">elementName</em></code>,
+ <code class="inline-code">"<em class="code-color">prefix</em>:<em class="code-color">elementName</em>"</code>,
+ <code class="inline-code">*</code>, <code class="inline-code">**</code>,
+ <code class="inline-code">@<em class="code-color">attrName</em></code>,
+ <code class="inline-code">"@<em class="code-color">prefix</em>:<em class="code-color">attrName</em>"</code>,
+ <code class="inline-code">@@</code>, <code class="inline-code">"@*"</code>,
+ <code class="inline-code">@@start_tag</code>, <code class="inline-code">@@end_tag</code>,
+ <code class="inline-code">@@attributes_markup</code>,
+ <code class="inline-code">@@next_sibling_element</code>,
+ <code class="inline-code">@@previous_sibling_element</code>,
+ <code class="inline-code">@@markup</code>, <code class="inline-code">@@nested_markup</code>,
+ <code class="inline-code">@@text</code>, <code class="inline-code">@@local_name</code>,
+ <code class="inline-code">@@qname</code>, <code class="inline-code">@@namespace</code></td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">"text"</code></td>
+
+
+ <td><code class="inline-code">"@text"</code></td>
+
+
+ <td>The text itself.</td>
+
+
+ <td><code class="inline-code">@@markup</code>,
+ <code class="inline-code">@@nested_markup</code>, <code class="inline-code">@@text</code>,
+ <code class="inline-code">@@local_name</code>, <code class="inline-code">@@qname</code>,
+ <code class="inline-code">@@namespace</code></td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">"pi"</code></td>
+
+
+ <td><code class="inline-code">"@pi$<em class="code-color">target</em>"</code></td>
+
+
+ <td>The part between the target name and the
+ <code class="inline-code">?></code>.</td>
+
+
+ <td><code class="inline-code">@@markup</code>,
+ <code class="inline-code">@@nested_markup</code>, <code class="inline-code">@@text</code>,
+ <code class="inline-code">@@local_name</code>, <code class="inline-code">@@qname</code>,
+ <code class="inline-code">@@namespace</code></td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">"comment"</code></td>
+
+
+ <td><code class="inline-code">"@comment"</code></td>
+
+
+ <td>The text of the comment, without the delimiters
+ <code class="inline-code"><!--</code> and <code class="inline-code">--></code>.</td>
+
+
+ <td><code class="inline-code">@@markup</code>,
+ <code class="inline-code">@@nested_markup</code>, <code class="inline-code">@@text</code>,
+ <code class="inline-code">@@local_name</code>, <code class="inline-code">@@qname</code>,
+ <code class="inline-code">@@namespace</code></td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">"attribute"</code></td>
+
+
+ <td><code class="inline-code">"<em class="code-color">name</em>"</code>: the
+ name of the attribute. This is the local name (i.e. name without
+ namespace prefix).</td>
+
+
+ <td>The value of the attribute.</td>
+
+
+ <td><code class="inline-code">@@markup</code>,
+ <code class="inline-code">@@nested_markup</code>, <code class="inline-code">@@text</code>,
+ <code class="inline-code">@@qname</code>, <code class="inline-code">@@local_name</code>,
+ <code class="inline-code">@@qname</code>, <code class="inline-code">@@namespace</code></td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">"document_type"</code></td>
+
+
+ <td><code class="inline-code">"@document_type$<em class="code-color">name</em>"</code>:
+ <code class="inline-code"><em class="code-color">name</em></code> is the name
+ of the document element.</td>
+
+
+ <td>No string value. (Error when you try to use it as
+ string.)</td>
+
+
+ <td><code class="inline-code">@@markup</code>,
+ <code class="inline-code">@@nested_markup</code>, <code class="inline-code">@@text</code>,
+ <code class="inline-code">@@local_name</code>, <code class="inline-code">@@qname</code>,
+ <code class="inline-code">@@namespace</code></td>
+
+ </tr>
+
+ </tbody>
+
+ </table>
+ </div>
+<p>Notes:</p><ul>
+ <li>
+ <p>There is no CDATA type. CDATA nodes are transparently
+ considered as text nodes.</p>
+ </li>
+
+ <li>
+ <p>These variables do <em>not</em> support
+ <code class="inline-code">?keys</code> and <code class="inline-code">?values</code>.</p>
+ </li>
+
+ <li>
+ <p>Element and attribute node names are local names, that is,
+ they do not contain the namespace prefix. The URI of the namespace
+ the node belongs to can be queried with the
+ <code class="inline-code">?node_namespace</code> built-in.</p>
+ </li>
+
+ <li>
+ <p>XPath expression needs Jaxen (recommended, but please use
+ 1.1-beta-8 or later; <a href="http://jaxen.org/">download
+ it here</a>) or Apache Xalan classes available, or an error
+ will stop template execution. Note, however, that as some special
+ hash keys hide the XPath expressions of the same meaning, those
+ XPath expressions will work even if there is no XPath
+ implementation available. <span class="marked-for-programmers">If both
+ Xalan and Jaxen is available, FreeMarker will use Xalan, unless
+ you choose Jaxen by calling
+ <code class="inline-code">freemarker.ext.dom.NodeModel.useJaxenXPathSupport()</code>
+ from Java.</span></p>
+ </li>
+
+ <li>
+ <p>If Jaxen is used for the XPath support (not Xalan), then
+ FreeMarker variables are visible with XPath variable references
+ (e.g.
+ <code class="inline-code">doc["book/chapter[title=$currentTitle]"]</code>).</p>
+ </li>
+ </ul><p>Meaning of special hash keys:</p><ul>
+ <li>
+ <p><code class="inline-code"><em class="code-color">elementName</em></code>,
+ <code class="inline-code">"<em class="code-color">prefix</em>:<em class="code-color">elementName</em>"</code>:
+ Returns the sequence of child nodes that are elements of name
+ <code class="inline-code"><em class="code-color">elementName</em></code>. (Note
+ that the term "child" means
+ <em>immediate</em> descendant.) The selection is XML
+ name-space aware, unless the XML document was persed with an XML
+ parser that was not in namespace aware mode. In XML name-space
+ aware mode, names without prefix
+ (<em>elementName</em>) selects only elements
+ that doesn't belong to any XML name-space (unless you have
+ registered a default XML namespace), and names with prefix
+ (<em>prefix</em>:<em>elementName</em>)
+ selects only elements that are belonging to the XML namespace
+ denoted by the prefix. The registration of prefixes and the
+ setting of the default XML namespace is done with the
+ <code class="inline-code">ns_prefixes</code> parameter of the <a href="ref_directive_ftl.html#ref.directive.ftl"><code>ftl</code>
+ directive</a>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">*</code>: Returns the sequence of all child
+ (direct descendant) <em>element</em> nodes. The
+ sequence will contain the elements in the "document
+ order", that is, in the order in which the first character
+ of the XML representation of each node occurs (after expansion of
+ general entities).</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">**</code>: Returns the sequence of all
+ descendant <em>element</em> nodes. The sequence will
+ contain the elements in the document order.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">@<em class="code-color">attName</em></code>,
+ <code class="inline-code">"@<em class="code-color">prefix</em>:<em class="code-color">attrName</em>"</code>:
+ Returns the attribute
+ <code class="inline-code"><em class="code-color">attName</em></code> of the
+ element as a sequence of size 1 that contains the attribute node,
+ or as an empty sequence if the attribute does not exist (so to
+ check if an attribute exists use
+ <code class="inline-code">foo.@<em class="code-color">attName</em>[0]??</code>,
+ <em>not</em>
+ <code class="inline-code">foo.@<em class="code-color">attName</em>??</code>). As
+ with special key
+ <code class="inline-code">"<em class="code-color">elementName</em>"</code>, if
+ the length of the sequence is 1, then it also acts as its first
+ subvariable. If no
+ <code class="inline-code"><em class="code-color">prefix</em></code> is used, then
+ it returns only attribute that does not use XML namespace (even if
+ you have set a default XML namespace). If a
+ <code class="inline-code"><em class="code-color">prefix</em></code> is used, it
+ returns only the attribute that belongs to the XML namespace
+ associated with the
+ <code class="inline-code"><em class="code-color">prefix</em></code>. The
+ registration of prefixes is done with the
+ <code class="inline-code">ns_prefixes</code> parameter of the <a href="ref_directive_ftl.html#ref.directive.ftl"><code>ftl</code>
+ directive</a>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">@@</code> or <code class="inline-code">"@*"</code>: Returns
+ the sequence of attribute nodes belonging to the parent element.
+ This is the same as XPath <code class="inline-code">@*</code>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">@@qname</code>: Returns the full-qualified name
+ of the element (such as <code class="inline-code">e:book</code>, in contrast to
+ the local name returned by <code class="inline-code">?node_name</code> that is
+ <code class="inline-code">book</code>) . The prefix used (as
+ <code class="inline-code">e</code>) is chosen based on the prefix registered in
+ the current namespace with the <code class="inline-code">ns_prefixes</code>
+ parameter of the <code class="inline-code">ftl</code> directive, and not
+ influenced by the prefix used in the source XML document. If you
+ have set a default XML namespace, then for nodes that use that,
+ prefix <code class="inline-code">D</code> will be used. For nodes that does not
+ belong to an XML namespace, no prefix is used (even if you have
+ set a default namespace). If there is no prefix registered for the
+ namespace of the node, the result is a non-existent variable
+ (<code class="inline-code">node.@@qname??</code> is
+ <code class="inline-code">false</code>).</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">@@local_mame</code>: The name of the node
+ without the namespace prefix.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">@@namespace</code>: The namespace URL (not the
+ namespace prefix) of the node.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">@@markup</code>: This returns the full XML
+ markup of a node, as a string. (Full XML markup means that it also
+ contains the markup of the child nodes, and the markup of the
+ children of the child nodes, and so on.) The markup you get is not
+ necessary the same as the markup in the source XML file, it's just
+ semantically identical. Especially, note that CDATA sections will
+ become to plain text. Also note that depending on how did you
+ wrapped the original XML document with FreeMarker, comment or
+ processing instruction nodes may were removed, and then they will
+ be missing from the output of course. The first outputted start
+ tag will contain
+ <code class="inline-code">xmlns:<em class="code-color">prefix</em></code>
+ attributes for each XML name-spaces used in the outputted XML
+ fragment, and those prefixes will be used in the outputted element
+ and attribute names. These prefixes will be the same as the
+ prefixes registered with the <code class="inline-code">ns_prefixes</code>
+ parameter of the <code class="inline-code">ftl</code> directive (no prefix will
+ be used for <code class="inline-code">D</code>, as it will be registered as the
+ default name-space with an <code class="inline-code">xmlns</code> attribute), or
+ if no prefix was assigned for a XML name-space with that, then an
+ arbitrary chosen unused prefix is used.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">@@nested_markup</code>: This is similar to
+ <code class="inline-code">@@markup</code>, but it returns the XML markup of an
+ element without its opening and closing tags. For the document
+ node, it returns the same as <code class="inline-code">@@markup</code>. For
+ other node types (text, processing instruction, etc.), it returns
+ an empty string. Unlike with <code class="inline-code">@@markup</code>, no
+ <code class="inline-code">xmlns:<em class="code-color">prefix</em></code>
+ attributes will be placed into the output, but regarding the
+ prefixes used in element and attribute names the rules are the
+ same.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">@@text</code>: This returns the value of all
+ text nodes that occur within the node (all descendant text nodes,
+ not just direct children), concatenated together into a single
+ string. If the node has no text node children, then the result is
+ an empty string.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">@@start_tag</code>: Returns the markup of the
+ <a href="gloss.html#gloss.startTag">start-tag</a> of the element
+ node. As with <code class="inline-code">@@markup</code>, the output is not
+ necessary the same as in the original XML document, but it is
+ semantically equivalent with that. Regarding the XML name-spaces
+ (<code class="inline-code">xmlns:<em class="code-color">prefix</em></code>
+ attributes in the output, etc.) the rules are the same as with
+ <code class="inline-code">"@@markup"</code></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">@@end_tag</code>: Returns the markup of the
+ <a href="gloss.html#gloss.endTag">end-tag</a> of the element node.
+ As with <code class="inline-code">@@markup</code>, the output is not necessary
+ the same as in the original XML document, but it is semantically
+ equivalent with that.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">@@attributes_markup</code>: Returns the markup
+ of the <a href="gloss.html#gloss.attribute">attributes</a> of the
+ element node. As with <code class="inline-code">@@markup</code>, the output is
+ not necessary the same as in the original XML document, but it is
+ semantically equivalent with that.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">@@next_sibling_element</code> (since 2.3.26):
+ The following sibling element of an element node or an empty node
+ sequence if there's no such element. An element counts as a
+ sibling of another element if they are on the same hierarchical
+ level, and there's no other element or non-whitespace character
+ data (text or CDATA) between the two elements. For example in
+ <code class="inline-code"><a/><!-- comment
+ -->#&x20;<b/></code> the two elements are
+ siblings, but not in <code class="inline-code"><a/>text<b/></code>
+ or <code class="inline-code"><a/><x/><b/></code>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">@@previous_sibling_element</code> (since
+ 2.3.26): The previous sibling element of an element node or an
+ empty node sequence if there's no such element. See the last point
+ for the meaning of sibling.</p>
+ </li>
+ </ul>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_151">Node sequences</h2>
+
+
+ <p>Many of the special hash keys (indicated in the above list),
+ and XPath expressions that result in node-sets (see the <a href="http://www.w3.org/TR/xpath">XPath recommendation</a>)
+ return a sequence of nodes.</p>
+
+ <p>These node sequences, if they store exactly 1 subvariable,
+ will also act as the subvariable itself. For example,
+ <code class="inline-code">${book.title[0]}</code> will do the same as
+ <code class="inline-code">${book.title}</code>, if there is only one
+ <code class="inline-code">title</code> element child of element
+ <code class="inline-code">book</code>.</p>
+
+ <p>Returning an empty node sequence is a normal situation. For
+ example, if in a concrete XML document, element
+ <code class="inline-code">book</code> has no child element
+ <code class="inline-code">chapter</code>, then <code class="inline-code">book.chapter</code>
+ results in an empty node sequence. Beware! This also means, that
+ <code class="inline-code">book.chaptre</code> (note the typo) will also return
+ empty node sequence, and will not stop with error. Also,
+ <code class="inline-code">book.chaptre??</code> (note the typo) will return
+ <code class="inline-code">true</code> because the empty sequence exists, so you
+ have to use <code class="inline-code">book.chaptre[0]??</code> for the
+ check.</p>
+
+ <p>Node sequences that store not 1 nodes (but 0 or more than 1
+ nodes) also support some of the hash keys described above. Namely,
+ the following special keys are supported:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code"><em class="code-color">elementName</em></code>,
+ <code class="inline-code">"<em class="code-color">prefix</em>:<em class="code-color">elementName</em>"</code></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">@<em class="code-color">attrName</em></code>,
+ <code class="inline-code">"@<em class="code-color">prefix</em>:<em class="code-color">attrName</em>"</code></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">@@markup</code>,
+ <code class="inline-code">@@nested_markup</code></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">@@text</code></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">*</code>, <code class="inline-code">**</code></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">@@</code>, <code class="inline-code">"@*"</code></p>
+ </li>
+ </ul>
+
+ <p>When you apply one of the above special keys on a node
+ sequence that contains more than 1 or 0 nodes, then for each node in
+ the sequence (where the special key does make sense, e.g. text nodes
+ will be skipped for key <code class="inline-code">*</code> or
+ <code class="inline-code">@foo</code>), the special key will be applied as it was
+ explained for single nodes, and the results will be concatenated to
+ form the final result. The results will be concatenated in the order
+ as the corresponding nodes occur in the node sequence. The
+ concatenation means string or sequence concatenation depending on
+ the type of the results. If the special key would result in a string
+ for a single node, then for multiple nodes the result is a single
+ string too (the results for the single nodes concatenated), and if
+ the special key would return a sequence for a single node, then for
+ multiple nodes the result is a single sequence too. If there are 0
+ nodes in the sequence you apply the special key on, the string
+ result is an empty string or an empty sequence respectively.</p>
+
+ <p>XPath expressions can be used with node sequences. However,
+ for 0 or more than 1 nodes it will work only if you use Jaxen
+ instead of Xalan, because of the limitations of the Xalan XPath
+ implementation.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="xgui_imperative_learn.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_declarative.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/xgui_imperative_learn.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/xgui_imperative_learn.html b/builds/2.3.26-nightly/xgui_imperative_learn.html
new file mode 100644
index 0000000..05c3205
--- /dev/null
+++ b/builds/2.3.26-nightly/xgui_imperative_learn.html
@@ -0,0 +1,656 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Basics - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Basics">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/xgui_imperative_learn.html">
+<link rel="canonical" href="http://freemarker.org/docs/xgui_imperative_learn.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui.html"><span itemprop="name">XML Processing Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui_imperative.html"><span itemprop="name">Imperative XML processing</span></a></li><li class="step
-3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui_imperative_learn.html"><span itemprop="name">Basics</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","XML Processing Guide","Imperative XML processing","Basics"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="xgui_imperative.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_imperative_formal.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="xgui_imperative_learn" itemprop="headline">Basics</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_145" data-menu-target="autoid_145">Accessing elements by name</a></li><li><a class="page-menu-link" href="#autoid_146" data-menu-target="autoid_146">Accessing attributes</a></li><li><a class="page-menu-link" href="#autoid_147" data-menu-target="autoid_147">Exploring the tree</a></li><li><a class="page-menu-link" href="#autoid_148" data-menu-target="autoid_148">Using XPath expressions</a></li><li><a class="page-menu-link" href="#autoid_149" data-menu-target="autoid_149">XML namespaces</a></li><li><a class="page-menu-link" href="#autoid_150" data-menu-target="autoid_150">Don't forget escaping!</a></li></ul> </div> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This section uses the DOM tree and the variable made in the
+ <a href="xgui_expose.html">previous chapter</a>.</p>
+ </div>
+<p>Assume that the programmer has put the XML document into the
+ data-model as variable <code class="inline-code">doc</code>. This variable
+ corresponds to the root of the <a href="xgui_expose_dom.html">DOM
+ tree</a>, the "document". The actual variable
+ structure behind <code class="inline-code">doc</code> is wily enough, and only
+ roughly resembles the DOM tree. So instead of getting lost in the
+ details, let's see how to use it by example.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_145">Accessing elements by name</h2>
+
+
+ <p>This FTL prints the title of the book:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><h1>${doc.book.title}</h1></pre></div>
+
+ <p>The output will be:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"><h1>Test Book</h1></pre></div>
+
+ <p>As you see, both <code class="inline-code">doc</code> and
+ <code class="inline-code">book</code> can be used as hashes; you get their child
+ nodes as sub variables. Basically, you describe the path by which
+ you reach the target (element <code class="inline-code">title</code>) in the DOM
+ tree. You may notice that there was some swindle above: with
+ <code class="inline-code">${doc.book.title}</code>, it seems that we instruct
+ FreeMarker to print the <code class="inline-code">title</code> element itself, but
+ we should print its child text node (check the <a href="xgui_expose_dom.html">DOM tree</a>). It still works, because
+ elements are not only hash variables, but string variables as well.
+ The scalar value of an element node is the string resulting from the
+ concatenation of all its text child nodes. However, trying to use an
+ element as scalar will cause error if the element has child
+ elements. For example <code class="inline-code">${doc.book}</code> would stop with
+ error.</p>
+
+ <p>This FTL prints the titles of the two chapters:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><h2>${doc.book.chapter[0].title}</h2>
+<h2>${doc.book.chapter[1].title}</h2></pre></div>
+
+ <p>Here, as <code class="inline-code">book</code> has 2
+ <code class="inline-code">chapter</code> element children,
+ <code class="inline-code">doc.book.chapter</code> is a sequence that stores the
+ two element nodes. Thus, we can generalize the above FTL, so it
+ works with any number of chapters:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list doc.book.chapter as ch>
+ <h2>${ch.title}</h2>
+</#list></pre></div>
+
+ <p>But what's if there is only one chapter? Actually, when you
+ access an element as hash subvariable, it is
+ <em>always</em> a sequence as well (not only hash and
+ string), but if the sequence contains exactly 1 item, then the
+ variable also acts as that item itself. So, returning to the first
+ example, this would print the book title as well:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><h1>${doc.book[0].title[0]}</h1></pre></div>
+
+ <p>But you know that there is exactly 1 <code class="inline-code">book</code>
+ element, and that a book has exactly 1 title, so you can omit the
+ <code class="inline-code">[0]</code>-s.
+ <code class="inline-code">${doc.book.chapter.title}</code> would work too, if the
+ book happen to have only 1 <code class="inline-code">chapter</code>-s (otherwise
+ it is ambiguous: how is it to know if the <code class="inline-code">title</code>
+ of which <code class="inline-code">chapter</code> you want? So it stops with an
+ error.). But since a book can have multiple chapters, you don't use
+ this form. If the element <code class="inline-code">book</code> has no
+ <code class="inline-code">chapter</code> child, then
+ <code class="inline-code">doc.book.chapter</code> will be a 0 length sequence, so
+ the FTL with <code class="inline-code"><#list ...></code> will still
+ work.</p>
+
+ <p>It is important to realize the consequence that, for example,
+ if <code class="inline-code">book</code> has no <code class="inline-code">chapter</code>-s then
+ <code class="inline-code">book.chapter</code> is an empty sequence, so
+ <code class="inline-code">doc.book.chapter??</code> will <em>not</em>
+ be <code class="inline-code">false</code>, it will be always
+ <code class="inline-code">true</code>! Similarly,
+ <code class="inline-code">doc.book.somethingTotallyNonsense??</code> will not be
+ <code class="inline-code">false</code> either. To check if there was no children
+ found, use <code class="inline-code">doc.book.chapter[0]??</code> (or
+ <code class="inline-code">doc.book.chapter?size == 0</code>). Of course you can
+ use similarly all the <a href="dgui_template_exp.html#dgui_template_exp_missing">missing value handler
+ operators</a> (e.g.
+ <code class="inline-code">doc.book.author[0]!"Anonymous"</code>), just don't
+ forget that <code class="inline-code">[0]</code>.</p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>The rule with sequences of size 1 is a convenience feature
+ of the XML wrapper (implemented via multi-type FTL variables). It
+ will not work with other sequences in general.</p>
+ </div>
+
+
+ <p>Now we finish the example by printing all the
+ <code class="inline-code">para</code>-s of each chapter:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><h1>${doc.book.title}</h1>
+<#list doc.book.chapter as ch>
+ <h2>${ch.title}</h2>
+ <#list ch.para as p>
+ <p>${p}
+ </#list>
+</#list></pre></div>
+
+ <p>this will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"><h1>Test</h1>
+ <h2>Ch1</h2>
+ <p>p1.1
+ <p>p1.2
+ <p>p1.3
+ <h2>Ch2</h2>
+ <p>p2.1
+ <p>p2.2</pre></div>
+
+ <p>The above FTL could be written more nicely as:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign book = doc.book>
+<h1>${book.title}</h1>
+<#list book.chapter as ch>
+ <h2>${ch.title}</h2>
+ <#list ch.para as p>
+ <p>${p}
+ </#list>
+</#list></pre></div>
+
+ <p>Finally, a generalized usage of the child selector mechanism:
+ this template lists all <code class="inline-code">para</code>-s of the example XML
+ document:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list doc.book.chapter.para as p>
+ <p>${p}
+</#list></pre></div>
+
+ <p>The output will be:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> <p>p1.1
+ <p>p1.2
+ <p>p1.3
+ <p>p2.1
+ <p>p2.2
+ </pre></div>
+
+ <p>This example shows that hash sub variables select the children
+ of a sequence of notes (just in the earlier examples that sequence
+ happened to be of size 1). In this concrete case, subvariable
+ <code class="inline-code">chapter</code> returns a sequence of size 2 (since there
+ are two <code class="inline-code">chapter</code>-s), and then subvariable
+ <code class="inline-code">para</code> selects the <code class="inline-code">para</code> child
+ nodes of all nodes in that sequence.</p>
+
+ <p>A negative consequence of this mechanism is that things like
+ <code class="inline-code">doc.somethingNonsense.otherNonsesne.totalNonsense</code>
+ will just evaluate to an empty sequence, and you don't get any error
+ messages.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_146">Accessing attributes</h2>
+
+
+ <p>This XML is the same as the original, except that it uses
+ attributes for the titles, instead of elements:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified"><!-- THIS XML IS USED FOR THE "Accessing attributes" CHAPTER ONLY! -->
+<!-- Outside this chapter examples use the XML from earlier. -->
+
+<book title="Test">
+ <chapter title="Ch1">
+ <para>p1.1</para>
+ <para>p1.2</para>
+ <para>p1.3</para>
+ </chapter>
+ <chapter title="Ch2">
+ <para>p2.1</para>
+ <para>p2.2</para>
+ </chapter>
+</book></pre></div>
+
+ <p>The attributes of an element can be accessed in the same way
+ as the child elements of the element, except that you put an at-sign
+ (@) before the name of the attribute:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign book = doc.book>
+<h1>${book.@title}</h1>
+<#list book.chapter as ch>
+ <h2>${ch.@title}</h2>
+ <#list ch.para as p>
+ <p>${p}
+ </#list>
+</#list></pre></div>
+
+ <p>This will print exactly the same as the previous
+ example.</p>
+
+ <p>Getting attributes follows the same logic as getting child
+ elements, so the result of <code class="inline-code">ch.@title</code> above is a
+ sequence of size 1. If there were no <code class="inline-code">title</code>
+ attribute, then the result would be a sequence of size 0. So be
+ ware, using existence built-ins is tricky here too: if you are
+ curious if <code class="inline-code">foo</code> has attribute
+ <code class="inline-code">bar</code> then you have to write
+ <code class="inline-code">foo.@bar[0]??</code>. (<code class="inline-code">foo.@bar??</code> is
+ wrong, because it always returns <code class="inline-code">true</code>.)
+ Similarly, if you want a default value for the
+ <code class="inline-code">bar</code> attribute, then you have to write
+ <code class="inline-code">foo.@bar[0]!"theDefaultValue"</code>.</p>
+
+ <p>As with child elements, you can select the attributes of
+ multiple nodes. For example, this template prints the titles of all
+ chapters:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list doc.book.chapter.@title as t>
+ ${t}
+</#list></pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_147">Exploring the tree</h2>
+
+
+ <p>This FTL will enumerate all child nodes of the book
+ element:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list doc.book?children as c>
+- ${c?node_type} <#if c?node_type == 'element'>${c?node_name}</#if>
+</#list></pre></div>
+
+ <p>this will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">- text
+- element title
+- text
+- element chapter
+- text
+- element chapter
+- text</pre></div>
+
+ <p>The meaning of <code class="inline-code">?node_type</code> is probably clear
+ without explanation. There are several node types that can occur in
+ a DOM tree, such as <code class="inline-code">"element"</code>,
+ <code class="inline-code">"text"</code>, <code class="inline-code">"comment"</code>,
+ <code class="inline-code">"pi"</code>, ...etc.</p>
+
+ <p>The <code class="inline-code">?node_name</code> returns the name of element
+ for element nodes. For other node types, it also returns something,
+ but that's mainly useful for declarative XML processing, which will
+ be discussed in a <a href="xgui_declarative.html">later
+ chapter</a>.</p>
+
+ <p>If the book element had attributes, they would
+ <em>not</em> appear in the above list, for practical
+ reasons. But you can get a list that contains all attributes of the
+ element, with subvariable <code class="inline-code">@@</code> of the element
+ variable. If you modify the first line of the XML to this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified"><book foo="Foo" bar="Bar" baaz="Baaz"></pre></div>
+
+ <p>and run this FTL:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list doc.book.@@ as attr>
+- ${attr?node_name} = ${attr}
+</#list></pre></div>
+
+ <p>then you get this output (or something similar):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">- baaz = Baaz
+- bar = Bar
+- foo = Foo</pre></div>
+
+ <p>Returning to the listing of children, there is a convenience
+ subvariable to list only the element children of an element:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list doc.book.* as c>
+- ${c?node_name}
+</#list></pre></div>
+
+ <p>This will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">- title
+- chapter
+- chapter</pre></div>
+
+ <p>You get the parent of an element with the
+ <code class="inline-code">parent</code> built-in:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign e = doc.book.chapter[0].para[0]>
+<#-- Now e is the first para of the first chapter -->
+${e?node_name}
+${e?parent?node_name}
+${e?parent?parent?node_name}
+${e?parent?parent?parent?node_name}</pre></div>
+
+ <p>This will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">para
+chapter
+book
+@document</pre></div>
+
+ <p>In the last line you have reached the root of the DOM tree,
+ the document node. It's not an element, and this is why it has that
+ strange name; don't deal with it now. Obviously, the document node
+ has no parent.</p>
+
+ <p>You can quickly go back to the document node using the
+ <code class="inline-code">root</code> built-in:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign e = doc.book.chapter[0].para[0]>
+${e?root?node_name}
+${e?root.book.title}</pre></div>
+
+ <p>This will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">@document
+Test Book</pre></div>
+
+ <p>For the complete list of built-ins you can use to navigate in
+ the DOM tree, read the <a href="ref_builtins_node.html">reference
+ of node built-ins</a>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_148">Using XPath expressions</h2>
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>XPath expressions work only if <a href="http://jaxen.org/">Jaxen</a> (recommended, but use
+ at least Jaxen 1.1-beta-8, not older) or <a href="http://xml.apache.org/xalan/">Apache Xalan</a>
+ classes are available. (Apache Xalan classes are included in Sun
+ J2SE 1.4, 1.5 and 1.6 (and maybe later too); no separate Xalan jar
+ is needed.)</p>
+ </div>
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>Don't use the sample XML from the previous section, where
+ <code class="inline-code">title</code> is an attribute; that applies only to
+ that section.</p>
+ </div>
+
+
+ <p>If a hash key used with a node variable can't be interpreted
+ otherwise (see the <a href="xgui_imperative_formal.html">next
+ section</a> for the precise definition), then it will by
+ interpreted as an XPath expression. For more information on XPath,
+ please visit <a href="http://www.w3.org/TR/xpath">http://www.w3.org/TR/xpath</a>.</p>
+
+ <p>For example, here we list the <code class="inline-code">para</code> elements
+ of the chapter with <code class="inline-code">title</code> element (not
+ attribute!) content "Ch1'':</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list doc["book/chapter[title='Ch1']/para"] as p>
+ <p>${p}
+</#list></pre></div>
+
+ <p>It will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> <p>p1.1
+ <p>p1.2
+ <p>p1.3</pre></div>
+
+ <p>The rule with sequences of length 1 (explained in earlier
+ sections) stands for XPath results as well. That is, if the
+ resulting sequence contains exactly 1 node, it also acts as the node
+ itself. For example, print the first paragraph of chapter
+ "Ch1":</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${doc["book/chapter[title='Ch1']/para[1]"]}</pre></div>
+
+ <p>which prints the same as:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${doc["book/chapter[title='Ch1']/para[1]"][0]}</pre></div>
+
+ <p>The context node of the XPath expression is the node (or
+ sequence of nodes) whose hash subvariable is used to issue the XPath
+ expression. Thus, this prints the same as the previous
+ example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${doc.book["chapter[title='Ch1']/para[1]"]}</pre></div>
+
+ <p>Note that currently you can use a sequence of 0 or multiple
+ (more than 1) nodes as context only if the programmer has set up
+ FreeMarker to use Jaxen instead of Xalan.</p>
+
+ <p>Also note that XPath indexes sequence items from 1, while FTL
+ indexes sequence items from 0. Thus, to select the first chapter,
+ the XPath expression is <code class="inline-code">"/book/chapter[1]"</code>, while
+ the FTL expression is <code class="inline-code">book.chapter[0]</code>.</p>
+
+ <p>If the programmer has set up FreeMarker to use Jaxen instead
+ of Xalan, then FreeMarker variables are visible with XPath variable
+ references:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign <strong>currentTitle</strong> = "Ch1">
+<#list doc["book/chapter[title=<strong>$currentTitle</strong>]/para"] as p>
+<em>...</em></pre></div>
+
+ <p>Note that <code class="inline-code">$currentTitle</code> is not a FreeMarker
+ interpolation, as there are no <code class="inline-code">{</code> and
+ <code class="inline-code">}</code> there. That's an XPath expression.</p>
+
+ <p>The result of some XPath expressions is not a node-set, but a
+ string, a number, or a boolean. For those XPath expressions, the
+ result is an FTL string, number, or boolean variable respectively.
+ For example, the following will count the total number of
+ <code class="inline-code">para</code> elements in the XML document, so the result
+ is a number:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${x["count(//para)"]}</pre></div>
+
+ <p>The output will be:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">5</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_149">XML namespaces</h2>
+
+
+
+
+ <p>Be default, when you write something like
+ <code class="inline-code">doc.book</code>, then it will select the element with
+ name <code class="inline-code">book</code> that does not belongs to any XML
+ namespace (similarly to XPath). If you want to select an element
+ that is inside an XML namespace, you must register a prefix and use
+ that. For example, if element <code class="inline-code">book</code> is in XML
+ namespace <code class="inline-code">http://example.com/ebook</code>, then you have
+ to associate a prefix with it at the top of the template with the
+ <code class="inline-code">ns_prefixes</code> parameter of the <a href="ref_directive_ftl.html#ref.directive.ftl"><code>ftl</code>
+ directive</a>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#ftl ns_prefixes={"e":"http://example.com/ebook"}></pre></div>
+
+ <p>And now you can write expressions as
+ <code class="inline-code">doc["e:book"]</code>. (The usage of square bracket
+ syntax was required because the colon would confuse FreeMarker
+ otherwise.)</p>
+
+ <p>As the value of <code class="inline-code">ns_prefixes</code> is a hash, you
+ can register multiple prefixes:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#ftl ns_prefixes={
+ "e":"http://example.com/ebook",
+ "f":"http://example.com/form",
+ "vg":"http://example.com/vectorGraphics"}
+></pre></div>
+
+ <p>The <code class="inline-code">ns_prefixes</code> parameter affects the whole
+ <a href="dgui_misc_namespace.html">FTL namespace</a>. This means
+ in practice that the prefixes you have registered in the main page
+ template will be visible in all <code class="inline-code"><#include
+ ...></code>-d templates, but not in <code class="inline-code"><#imported
+ ...></code>-d templates (often referred as FTL libraries). Or
+ from another point of view, an FTL library can register XML
+ namespace prefixes for it's own use, without interfering with the
+ prefix registrations of the main template and other
+ libraries.</p>
+
+ <p>Note that, if an input document is dominated by a given XML
+ namespace, you can set that as the default namespace for
+ convenience. This means that if you don't use prefix, as in
+ <code class="inline-code">doc.book</code>, then it selects element that belongs to
+ the default namespace. The setting of the default namespace happens
+ with reserved prefix <code class="inline-code">D</code>, for example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#ftl ns_prefixes={"D":"http://example.com/ebook"}></pre></div>
+
+ <p>Now expression <code class="inline-code">doc.book</code> select the
+ <code class="inline-code">book</code> element that belongs to XML namespace
+ <code class="inline-code">http://example.com/ebook</code>. Unfortunately, XPath
+ does not support this idea of a default namespace. Thus, in XPath
+ expressions, element names without prefixes always select the
+ elements that does not belong to any XML namespace. However, to
+ access elements in the default namespace you can directly use prefix
+ <code class="inline-code">D</code>, for example:
+ <code class="inline-code">doc["D:book/D:chapter[title='Ch1']"]</code>.</p>
+
+ <p>Note that when you use a default namespace, then you can
+ select elements that does not belong to any node namespace with
+ reserved prefix <code class="inline-code">N</code>, for example
+ <code class="inline-code">doc.book["N:foo"]</code>. It doesn't go for XPath
+ expressions, where the above can be witten as
+ <code class="inline-code">doc["D:book/foo"]</code>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_150">Don't forget escaping!</h2>
+
+
+ <p>As we generate output of HTML format in these examples, and
+ HTML format reserves characters as <code class="inline-code"><</code>,
+ <code class="inline-code">&</code>, etc., we have to ensure that those will be
+ escaped. For that, either FreeMarker has to be <a href="pgui_config_outputformatsautoesc.html">properly
+ configured</a>, or add <code class="inline-code">output_format="HTML"</code> in
+ the template to the <code class="inline-code">ftl</code> directive calls.</p>
+
+ <p>So if the book title is "Romeo & Juliet", the resulting
+ HTML output will be correctly:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"><em>...</em>
+<h1>Romeo &amp; Juliet</h1>
+<em>...</em></pre></div>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="xgui_imperative.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_imperative_formal.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/xgui_preface.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/xgui_preface.html b/builds/2.3.26-nightly/xgui_preface.html
new file mode 100644
index 0000000..8e1ad39
--- /dev/null
+++ b/builds/2.3.26-nightly/xgui_preface.html
@@ -0,0 +1,74 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-preface">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Preface - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Preface">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/xgui_preface.html">
+<link rel="canonical" href="http://freemarker.org/docs/xgui_preface.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui.html"><span itemprop="name">XML Processing Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui_preface.html"><span itemprop="name">Preface</span></a></li></ul><div class="bookmarks" title="B
ookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","XML Processing Guide","Preface"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="xgui.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_expose.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-chapter" id="xgui_preface" itemprop="headline">Preface</h1>
+</div></div><p>Although FreeMarker was originally designed as a web page template
+ engine, as of version 2.3 it also targets another application domain:
+ transforming XML into arbitrary textual output (e.g. HTML files). Thus,
+ in many cases, FreeMarker is an XSLT alternative.</p><p>Technically, there is nothing special in transforming XML
+ documents. It's just like when you do anything else with FreeMarker: you
+ drop the XML document into the data-model (and possibly other
+ variables), and then you merge the data-model with the FTL template(s)
+ that generate the output text. The extra features introduced for better
+ XML processing are the node FTL variable type (symbolizes a node in
+ generic tree structures, usable not only for XML) and the built-ins and
+ directives dealing with them, and the XML wrapper you get out-of-the-box
+ that exposes XML documents as FTL variables for the templates.</p><p>What's the difference between using FreeMarker or XSLT? The FTL
+ language has the usual imperative/procedural logic. On the other hand,
+ XSLT is a language with declarative style, designed by "too clever"
+ people, so it's not easy to adopt its logic, nor to use it in many
+ cases. Also its syntax is terribly verbose. However, XSLT's
+ "apply-templates" method can be very handy when you process XML
+ documents, thus FreeMarker supports something similar called the
+ "visitor pattern". So in many applications, it is much
+ easier to write FTL stylesheets than XSLT style-sheets. Another
+ fundamental difference is that FTL "transforms" the node tree to text,
+ while XSLT transforms the tree to another tree. So you cannot always use
+ FreeMarker where you can use XSLT.</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="xgui.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_expose.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[26/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_builtins_node.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_builtins_node.html b/builds/2.3.26-nightly/ref_builtins_node.html
new file mode 100644
index 0000000..f615ae0
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_builtins_node.html
@@ -0,0 +1,287 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Built-ins for nodes (for XML) - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Built-ins for nodes (for XML)">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_builtins_node.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_builtins_node.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins.html"><span itemprop="name">Built-in Reference</span></a></li><li class="step-3"
itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins_node.html"><span itemprop="name">Built-ins for nodes (for XML)</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Built-in Reference","Built-ins for nodes (for XML)"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_builtins_hash.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins_loop_var.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_builtins_node" itemprop="headline">Built-ins for nodes (for XML)</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#ref_builtin_ancestors" data-menu-target="ref_builtin_ancestors">ancestors</a></li><li><a class="page-menu-link" href="#ref_builtin_children" data-menu-target="ref_builtin_children">children</a></li><li><a class="page-menu-link" href="#ref_builtin_node_name" data-menu-target="ref_builtin_node_name">node_name</a></li><li><a class="page-menu-link" href="#ref_builtin_next_sibling" data-menu-target="ref_builtin_next_sibling">next_sibling</a></li><li><a class="page-menu-link" href="#ref_builtin_node_namespace" data-menu-target="ref_builtin_node_namespace">node_namespace</a></li><li><a class="page-menu-link" href="#ref_builtin_node_type" data-menu-target="ref_builtin_node_type">node_type</a></li><li><a class="page-menu-link" href="#ref_builtin_parent" data-menu-target="ref_builtin_parent">parent</a></li><li><a class="page-menu-link" href="#ref_builtin_previous_sibling" data-menu-target="ref_builtin_previous_sibling">previous_sibling</a></li><li><a c
lass="page-menu-link" href="#ref_builtin_root" data-menu-target="ref_builtin_root">root</a></li></ul> </div><p>Note that the variables returned by these built-ins are
+ generated by the node variable implementation it is used with. This
+ means that the returned variables can have extra features in
+ additional to what it stated here, for example, with the <a href="xgui_expose_dom.html">XML DOM nodes</a> the sequence retuned by
+ the <code class="inline-code">children</code> built-in also can be used as hash and
+ maybe as string, as it is described in the <a href="xgui.html">part
+ about XML processing</a>.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_ancestors">ancestors</h2>
+
+
+
+
+ <p>A sequence that contains all the node's ancestors, starting
+ with the immediate parent and ending with the root node. The result
+ of this built-in is also a method, by which you can filter the
+ result with the <a href="gloss.html#gloss.fullQualifiedName">full-qualified name</a> of the
+ node. For example as <code class="inline-code">node?ancestors("section")</code> to
+ get the sequence of all ancestors with name
+ <code class="inline-code">section</code>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_children">children</h2>
+
+
+
+
+ <p>A sequence that contains all of this node's child nodes (i.e.
+ immediate descendant nodes).</p>
+
+ <p>XML: This is almost the same as special hash key
+ <code class="inline-code">*</code>, except that it returns all nodes, not only
+ elements. So the possible children are element nodes, text nodes,
+ comment nodes, processing instruction nodes, etc. but
+ <em>not</em> attribute nodes. Attribute nodes are
+ excluded from the sequence.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_node_name">node_name</h2>
+
+
+
+
+ <p>Returns the string that is used to determine what user-defined
+ directive to invoke to handle this node when it is
+ "visited". See: the <a href="ref_directive_visit.html#ref.directive.visit">visit</a> and <a href="ref_directive_visit.html#ref.directive.recurse">recurse</a> directives.</p>
+
+ <p>XML: If the node is an element or attribute, then the string
+ will be the local (prefix free) name of the element or attribute.
+ Otherwise the name usually starts with <code class="inline-code">@</code> followed
+ by the node type. See <a href="xgui_imperative_formal.html#misc.xguiTable">this
+ table</a>. Note that this node name is not the same as the node
+ name returned in the DOM API; the goal of FreeMarker node names is
+ to give the name of the used-defined directive that will process the
+ node.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_next_sibling">next_sibling</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is only available since 2.3.26</p>
+ </div>
+
+
+ <p>Returns the following sibling node of the node. (Two nodes in
+ a tree are said to be siblings if they are on the same level and are
+ directly next to each other.) If there's no such node, the
+ expression
+ <code class="inline-code"><em class="code-color">node</em>?next_sibling??</code>
+ evaluates to <code class="inline-code">false</code>.</p>
+
+ <p>XML: Note that the value returned by this built-in is also a
+ sequence of length 1 (same as the result of some XPath expressions),
+ however if there's no next sibling, the result is a missing value
+ (null) instead of an empty sequence. Also note that for XML element
+ nodes you can also use
+ <code class="inline-code"><em class="code-color">node</em>.@@next_sibling_element</code>,
+ which is practical if you want to ignore the whitespace that
+ separates two apparently sibling elements; see more <a href="xgui_imperative_formal.html">here...</a></p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>For custom node implementations this built-in is only
+ supported if that implements the
+ <code class="inline-code">freemarker.template.TemplateNodeModelEx</code>
+ interface.</p>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_node_namespace">node_namespace</h2>
+
+
+
+
+ <p>Returns the namespace string of the node. FreeMarker does not
+ define the exact meaning of node namespace; it depends on what your
+ node variables are modeling. It's possible that a node doesn't have
+ any node namespace defined. In this case, the built-in should
+ evaluate to undefined variable (i.e.
+ <code class="inline-code">node?<em class="code-color">node_namespace</em>??</code>
+ is <code class="inline-code">false</code>), so you can't use the returned
+ value.</p>
+
+ <p>XML: In the case of XML, it's the XML namespace URI (such as
+ <code class="inline-code">"http://www.w3.org/1999/xhtml"</code>). If an element or
+ attribute node does not use XML namespace, then this built-in
+ evaluates to an empty string. For other XML nodes this built-in
+ always return undefined variable.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_node_type">node_type</h2>
+
+
+
+
+ <p>A string that describes the type of the node. FreeMarker does
+ not define the exact meaning of node type; it depends on what your
+ variables are modeling. It's possible that a node doesn't support
+ node type at all. In this case, the built-in evaluates to an
+ undefined value, so you can't use the returned value. (You can still
+ check if a node supports the type property with
+ <code class="inline-code"><em class="code-color">node</em>?node_type??</code>.)</p>
+
+ <p>XML: The possible values are: <code class="inline-code">"attribute"</code>,
+ <code class="inline-code">"text"</code>, <code class="inline-code">"comment"</code>,
+ <code class="inline-code">"document_fragment"</code>,
+ <code class="inline-code">"document"</code>, <code class="inline-code">"document_type"</code>,
+ <code class="inline-code">"element"</code>, <code class="inline-code">"entity"</code>,
+ <code class="inline-code">"entity_reference"</code>,
+ <code class="inline-code">"notation"</code>, <code class="inline-code">"pi"</code>. Note that a
+ there is no <code class="inline-code">"cdata"</code> type, because CDATA is
+ considered as plain text node.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_parent">parent</h2>
+
+
+
+
+ <p>Returns the node that is this node's immediate parent in the
+ node tree. The root node has no parent node, so for the root node,
+ the expression
+ <code class="inline-code"><em class="code-color">node</em>?parent??</code>
+ evaluates to <code class="inline-code">false</code>.</p>
+
+ <p>XML: Note that the value returned by this built-in is also a
+ sequence (same as the result of XPath expression
+ <code class="inline-code">..</code>, when you write
+ <code class="inline-code">someNode[".."]</code>), however if there's no parent,
+ the result is a missing value (null) instead of an empty sequence.
+ Also note that for attribute nodes, it returns the element the
+ attribute belongs to, despite that attribute nodes are not counted
+ as children of the element.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_previous_sibling">previous_sibling</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is only available since 2.3.26</p>
+ </div>
+
+
+ <p>Returns the previous sibling node of the node. Apart from the
+ direction, this is the same as <code class="inline-code">next_sibling</code>, so
+ see more details <a href="#ref_builtin_next_sibling">there...</a></p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>For custom node implementations this built-in is only
+ supported if that implements the
+ <code class="inline-code">freemarker.template.TemplateNodeModelEx</code>
+ interface.</p>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_root">root</h2>
+
+
+
+
+ <p>The node that is the root of the tree of nodes to which this
+ node belongs.</p>
+
+ <p>XML: According to W3C, the root of an XML document is not the
+ topmost element node, but the document itself, which is the parent
+ of the topmost element. For example, if you want to get the topmost
+ <em>element</em> of the XML (the so called
+ "document element"; do not mix it with the
+ "document"), which is called <code class="inline-code">foo</code>,
+ then you have to write <code class="inline-code">someNode?root.foo</code>. If you
+ write just <code class="inline-code">someNode?root</code>, then you get the
+ document itself, and not the document element.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_builtins_hash.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins_loop_var.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_builtins_number.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_builtins_number.html b/builds/2.3.26-nightly/ref_builtins_number.html
new file mode 100644
index 0000000..4c99464
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_builtins_number.html
@@ -0,0 +1,797 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Built-ins for numbers - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Built-ins for numbers">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_builtins_number.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_builtins_number.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins.html"><span itemprop="name">Built-in Reference</span></a></li><li class="step-3"
itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins_number.html"><span itemprop="name">Built-ins for numbers</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Built-in Reference","Built-ins for numbers"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_builtins_string.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins_date.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_builtins_number" itemprop="headline">Built-ins for numbers</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#ref_builtin_abs" data-menu-target="ref_builtin_abs">abs</a></li><li><a class="page-menu-link" href="#ref_builtin_c" data-menu-target="ref_builtin_c">c (when used with numerical value)</a></li><li><a class="page-menu-link" href="#ref_builtin_is_infinite" data-menu-target="ref_builtin_is_infinite">is_infinite</a></li><li><a class="page-menu-link" href="#ref_builtin_is_nan" data-menu-target="ref_builtin_is_nan">is_nan</a></li><li><a class="page-menu-link" href="#ref_builtin_lower_abc" data-menu-target="ref_builtin_lower_abc">lower_abc</a></li><li><a class="page-menu-link" href="#ref_builtin_rounding" data-menu-target="ref_builtin_rounding">round, floor, ceiling</a></li><li><a class="page-menu-link" href="#ref_builtin_string_for_number" data-menu-target="ref_builtin_string_for_number">string (when used with a numerical value)</a></li><li><a class="page-menu-link" href="#ref_builtin_upper_abc" data-menu-target="ref_builtin_upper_abc">upper_abc</a>
</li></ul> </div><p>Related FAQs: Do you have things like 1,000,000 or 1�000�000
+ instead of 1000000, or something like 3.14 instead of 3,14 or vice
+ versa? See <a href="app_faq.html#faq_number_grouping">this</a> and <a href="app_faq.html#faq_number_decimal_point">this</a> FAQ entry, also note
+ the <code class="inline-code">c</code> built-in above.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_abs">abs</h2>
+
+
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in exists since FreeMarker 2.3.20.</p>
+ </div>
+
+
+ <p>Gives the absolute value of a number. For example
+ <code class="inline-code">x?abs</code> , if <code class="inline-code">x</code> is -5, will
+ evaluate to 5.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_c">c (when used with numerical value)</h2>
+
+
+
+
+
+
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in exists since FreeMarker 2.3.3.</p>
+ </div>
+
+
+ <p>This built-in converts a number to string for a
+ "computer language" as opposed to for human audience.
+ That is, it formats with the rules that programming languages used
+ to use, which is independent of all the locale and number format
+ settings of FreeMarker. It always uses dot as decimal separator, and
+ it never uses grouping separators (like 3,000,000), nor exponential
+ form (like 5E20), nor superfluous leading or trailing 0-s (like 03
+ or 1.0), nor + sign (like +1). It will print at most 16 digits after
+ the decimal dot, and thus numbers whose absolute value is less than
+ 1E-16 will be shown as 0. This built-in is crucial because be
+ default (like with <code class="inline-code">${x}</code>) numbers are converted to
+ strings with the locale (language, country) specific number
+ formatting, which is for human readers (like 3000000 is possibly
+ printed as 3,000,000). When the number is printed not for human
+ audience (e.g., for a database record ID used as the part of an URL,
+ or as invisible field value in a HTML form, or for printing
+ CSS/JavaScript numerical literals) this built-in must be used to
+ print the number (i.e., use <code class="inline-code">${x?c}</code> instead of
+ <code class="inline-code">${x}</code>), or else the output will be possibly broken
+ depending on the current number formatting settings and locale (like
+ the decimal point is not dot, but comma in many countries) and the
+ value of the number (like big numbers are possibly
+ "damaged" by grouping separators).</p>
+
+ <p>If the <code class="inline-code">incompatible_imporvements</code> FreeMarker
+ configuration setting is set to 2.3.24 or higher (also if it's set
+ to 2.3.20 or higher and you are outside a string literal), this
+ built-in will return <code class="inline-code">"INF"</code>,
+ <code class="inline-code">"-INF"</code> and <code class="inline-code">"NaN"</code> for
+ positive/negative infinity and IEEE floating point Not-a-Number,
+ respectively. These are the XML Schema compatible representations of
+ these special values. (Earlier it has returned what
+ <code class="inline-code">java.text.DecimalFormat</code> did with US locale, none
+ of which is understood by any (common) computer language.)</p>
+
+ <p>Note that this built-in <a href="ref_builtins_boolean.html#ref_builtin_c_boolean">also works on
+ booleans</a>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_is_infinite">is_infinite</h2>
+
+
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in exists since FreeMarker 2.3.20.</p>
+ </div>
+
+
+ <p>Tells if a number is floating point infinite (according to
+ IEEE 754). For example, <code class="inline-code">someNumber?is_infinite</code>
+ evaluates to <code class="inline-code">true</code> or <code class="inline-code">false</code>
+ depending on if the value of <code class="inline-code">someNumber</code> is
+ infinite or not. Of course, if the underlying number is not of
+ floating point type, this will always return
+ <code class="inline-code">false</code>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_is_nan">is_nan</h2>
+
+
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in exists since FreeMarker 2.3.20.</p>
+ </div>
+
+
+ <p>Tells if a number is floating point NaN (according to IEEE
+ 754). For example, <code class="inline-code">someNumber?is_nan</code> evaluates to
+ <code class="inline-code">true</code> or <code class="inline-code">false</code> depending on if
+ the value of <code class="inline-code">someNumber</code> is NaN or not. Of course,
+ if the underlying number is not of floating point type, this will
+ always return <code class="inline-code">false</code>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_lower_abc">lower_abc</h2>
+
+
+
+
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in exists since FreeMarker 2.3.22.</p>
+ </div>
+
+
+ <p>Converts <code class="inline-code">1</code>, <code class="inline-code">2</code>,
+ <code class="inline-code">3</code>, etc., to the string <code class="inline-code">"a"</code>,
+ <code class="inline-code">"b"</code>, <code class="inline-code">"c"</code>, etc. When reaching
+ <code class="inline-code">"z"</code>, it continues like <code class="inline-code">"aa"</code>,
+ <code class="inline-code">"ab"</code>, etc. This is the same logic that you can
+ see in column labels in spreadsheet applications (like Excel or
+ Calc). The lowest allowed number is <code class="inline-code">1</code>. There's no
+ upper limit. If the number is <code class="inline-code">0</code> or less or it
+ isn't an integer number then the template processing will be aborted
+ with error.</p>
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list 1..30 as n>${n?lower_abc} </#list></pre></div>
+
+ <p>Prints:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad </pre></div>
+
+ <p>See also: <a href="#ref_builtin_upper_abc"><code>upper_abc</code></a></p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_rounding">round, floor, ceiling</h2>
+
+
+
+
+
+
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>The rounding built-ins exist since FreeMarker 2.3.13.</p>
+ </div>
+
+
+ <p>Converts a number to a whole number using the specified
+ rounding rule:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">round</code>: Rounds to the nearest whole
+ number. If the number ends with .5, then it rounds upwards
+ (i.e., towards positive infinity)</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">floor</code>: Rounds the number downwards
+ (i.e., towards neagative infinity)</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">ceiling</code>: Rounds the number upwards
+ (i.e., towards positive infinity)</p>
+ </li>
+ </ul>
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign testlist=[
+ 0, 1, -1, 0.5, 1.5, -0.5,
+ -1.5, 0.25, -0.25, 1.75, -1.75]>
+<#list testlist as result>
+ ${result} ?floor=${result?floor} ?ceiling=${result?ceiling} ?round=${result?round}
+</#list></pre></div>
+
+ <p>Prints:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> 0 ?floor=0 ?ceiling=0 ?round=0
+ 1 ?floor=1 ?ceiling=1 ?round=1
+ -1 ?floor=-1 ?ceiling=-1 ?round=-1
+ 0.5 ?floor=0 ?ceiling=1 ?round=1
+ 1.5 ?floor=1 ?ceiling=2 ?round=2
+ -0.5 ?floor=-1 ?ceiling=0 ?round=0
+ -1.5 ?floor=-2 ?ceiling=-1 ?round=-1
+ 0.25 ?floor=0 ?ceiling=1 ?round=0
+ -0.25 ?floor=-1 ?ceiling=0 ?round=0
+ 1.75 ?floor=1 ?ceiling=2 ?round=2
+ -1.75 ?floor=-2 ?ceiling=-1 ?round=-2</pre></div>
+
+ <p>These built-ins may be useful in pagination operations and
+ like. If you just want to <em>display</em> numbers in
+ rounded form, then you should rather use the <a href="#ref_builtin_string_for_number"><code>string</code>
+ built-in</a> or the <a href="ref_directive_setting.html#ref.setting.number_format"><code>number_format</code>
+ setting</a>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_string_for_number">string (when used with a numerical value)</h2>
+
+
+
+
+
+
+
+
+
+
+ <p>Converts a number to a string. In its simplest form
+ (<code class="inline-code"><em class="code-color">expression</em>?string</code>) it
+ uses the default format that the programmer has specified via the
+ <code class="inline-code">number_format</code> and the <code class="inline-code">locale</code>
+ configuration settings. You can also specify a number format
+ explicitly with this built-in, as it will be shown later.</p>
+
+ <p>There are four predefined number formats:
+ <code class="inline-code">computer</code>, <code class="inline-code">currency</code>,
+ <code class="inline-code">number</code>, and <code class="inline-code">percent</code>. The exact
+ meaning of these is locale (nationality) specific, and is controlled
+ by the Java platform installation, not by FreeMarker, except for
+ <code class="inline-code">computer</code>, which uses the same formatting as <a href="#ref_builtin_c">the <code>c</code> built-in</a>.
+ There can also be programmer-defined formats, whose name starts with
+ <code class="inline-code">@</code> (programmers <a href="pgui_config_custom_formats.html">see more here...</a>). You
+ can use these predefined formats like this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign x=42>
+${x}
+${x?string} <#-- the same as ${x} -->
+${x?string.number}
+${x?string.currency}
+${x?string.percent}
+${x?string.computer}</pre></div>
+
+ <p>If your locale is US English, this will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">42
+42
+42
+$42.00
+4,200%
+42</pre></div>
+
+ <p>The output of first three expressions is identical because the
+ first two expressions use the default format, which is
+ "number" here. You can change this default using a
+ setting:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#setting number_format="currency">
+<#assign x=42>
+${x}
+${x?string} <#-- the same as ${x} -->
+${x?string.number}
+${x?string.currency}
+${x?string.percent}</pre></div>
+
+ <p>Will now output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">$42.00
+$42.00
+42
+$42.00
+4,200%</pre></div>
+
+ <p>since the default number format was set to
+ "currency".</p>
+
+ <p>You can also refer to named custom formats that were defined
+ when configuring FreeMarker (programmers <a href="pgui_config_custom_formats.html">see more here</a>),
+ like:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${x?string.@price}
+${x?string.@weight}</pre></div>
+
+ <p>where the custom format names were "price" and
+ "weight". This way the templates can just refer to the
+ application-domain meaning, and the exact format can be specified
+ outside the templates, on a single central place. (Programmers can
+ read about <a href="pgui_config_custom_formats.html">defining such
+ named formats here...</a>)</p>
+
+ <p>Beside named formats, you can specify number format patterns
+ directly, using the <a href="http://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html">Java
+ decimal number format syntax</a> (with some FreeMarker-specific
+ extensions; <a href="#topic.extendedJavaDecimalFormat">see
+ later</a>):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign x = 1.234>
+${x?string["0"]}
+${x?string["0.#"]}
+${x?string["0.##"]}
+${x?string["0.###"]}
+${x?string["0.####"]}
+
+${1?string["000.00"]}
+${12.1?string["000.00"]}
+${123.456?string["000.00"]}
+
+${1.2?string["0"]}
+${1.8?string["0"]}
+${1.5?string["0"]} <-- 1.5, rounded towards even neighbor
+${2.5?string["0"]} <-- 2.5, rounded towards even neighbor
+
+${12345?string["0.##E0"]}</pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">1
+1.2
+1.23
+1.234
+1.234
+
+001.00
+012.10
+123.46
+
+1
+2
+2 <-- 1.5, rounded towards even neighbor
+2 <-- 2.5, rounded towards even neighbor
+
+1.23E4</pre></div>
+
+ <p>Note that as in FreeMarker <code class="inline-code">foo.bar</code> is
+ equivalent with <code class="inline-code">foo["bar"]</code>, you could also write
+ <code class="inline-code">x?string.currency</code> as
+ <code class="inline-code">x?string["currency"]</code>, but of course that wouldn't
+ be practical. But in the above examples we have to use the square
+ bracket syntax, because the characters involved (numbers, dot,
+ <code class="inline-code">#</code>) aren't allowed syntactically after the dot
+ operator.</p>
+
+ <p>For historical reasons, you could also write things like
+ <code class="inline-code">x?string("0.#")</code>, which does exactly the same as
+ <code class="inline-code">x?string["0.#"]</code>.</p>
+
+ <p>Following the financial and statistics practice, by default
+ the rounding goes according the so called half-even rule, which
+ means rounding towards the nearest "neighbor", unless
+ both neighbors are equidistant, in which case, it rounds towards the
+ even neighbor. This was visible in the above example if you look at
+ the rounding of 1.5 and of 2.5, as both were rounded to 2, since 2
+ is even, but 1 and 3 are odds. The other popular rounding rule,
+ where we always round up when the neighbors are equidistant (and so
+ 2.5 is rounded to 3) is called the half-up rule, and it can be
+ activated as <a href="#topic.extendedJavaDecimalFormat">described
+ later</a>.</p>
+
+ <p>As it was shown for the predefined formats earlier, the
+ default formatting of the numbers can be set in the template:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#setting number_format="0.##">
+${1.234}</pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">1.23</pre></div>
+
+ <p>The default number format also can be specified outside the
+ templates with the FreeMarker API (like with
+ <code class="inline-code">Configuration.setNumberFormat(String)</code>).</p>
+
+ <p>Note that as number formatting is locale sensitive, the locale
+ setting also plays role in the formatting:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#setting number_format=",##0.00">
+<#setting locale="en_US">
+US people write: ${12345678}
+<#setting locale="hu">
+German people write: ${12345678}</pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">US people write: 12,345,678.00
+German people write: 12.345.678,00</pre></div>
+
+
+
+
+
+
+<h3 class="content-header header-simplesect" id="topic.extendedJavaDecimalFormat">Extended Java decimal format</h3>
+
+
+
+
+ <p>FreeMarker extends the Java decimal format patterns with
+ extra options. These options are name-value pairs, specified after
+ two semicolons (<code class="inline-code">;;</code>) at the end of the format
+ string, or if you had a negative pattern (which is separated from
+ the normal patter with a semicolon, like in <code class="inline-code">"0.0;minus
+ 0.0"</code>), the after only one semicolon. For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">Standard decimal format: ${10002.5?string[",000"]}
+Extended decimal format: ${10002.5?string[",000<strong>;; roundingMode=halfUp groupingSeparator=_</strong>"]}</pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">Standard decimal format: 10,002
+Extended decimal format: 10<strong>_</strong>00<strong>3</strong></pre></div>
+
+ <p>Above, in the extended decimal format, we have specified
+ half-up rounding mode and group separator <code class="inline-code">"_"</code>.
+ The table of all options follows (note that these are defined by
+ <code class="inline-code">java.text.DecimalFormat</code> and
+ <code class="inline-code">java.text.DecimalFormatSymbols</code>, not by
+ FreeMarker):</p>
+
+ <div class="table-responsive">
+ <table class="table">
+
+ <thead>
+ <tr>
+ <th>Name</th>
+
+
+ <th>Meaning / value</th>
+
+ </tr>
+
+ </thead>
+
+
+ <tbody>
+ <tr>
+ <td><code class="inline-code">roundingMode</code></td>
+
+
+ <td>The value is one of <code class="inline-code">up</code>,
+ <code class="inline-code">down</code>, <code class="inline-code">ceiling</code>,
+ <code class="inline-code">floor</code>, <code class="inline-code">halfUp</code>,
+ <code class="inline-code">halfDown</code>, <code class="inline-code">halfEven</code>,
+ and <code class="inline-code">unnecessary</code>. The behavior that most
+ people learns in school is <code class="inline-code">halfUp</code>, but
+ the Java default is <code class="inline-code">halfEven</code> (also called
+ bankers' rounding). (See <a href="http://docs.oracle.com/javase/7/docs/api/java/math/RoundingMode.html">the
+ <code>java.math.RoundingMode</code> API</a> for
+ explanations.)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">multipier</code></td>
+
+
+ <td>The number will be shown after multiplied with this
+ integer number.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">decimalSeparator</code></td>
+
+
+ <td>The character separating the integer part from the
+ fraction part (like <code class="inline-code">"."</code> in
+ <code class="inline-code">3.14</code>).</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">monetaryDecimalSeparator</code></td>
+
+
+ <td>This is used instead of
+ <code class="inline-code">decimalSeparator</code> when the pattern
+ contains parts that make it a monetary format. (See the
+ <a href="http://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html">Java
+ decimal number format documentation</a> for more.)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">groupingSeparator</code></td>
+
+
+ <td>The single character used for grouping the integer part
+ (like <code class="inline-code">","</code> in
+ <code class="inline-code">1,000,000</code>) Note that grouping is turned
+ on by using <code class="inline-code">","</code> in the pattern, as shown
+ in the earlier example. If it's not turned on, this option
+ won't have visible effect.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">exponentSeparator</code></td>
+
+
+ <td>This string (of arbitrary length) is used to separate
+ the exponent from the part before it. (like
+ <code class="inline-code">"E"</code> in <code class="inline-code">1.23E6</code>). Only
+ has visible effect if the pattern specifies exponential
+ (also known as scientific) format, like
+ <code class="inline-code">"0.##E0"</code>.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">minusSign</code></td>
+
+
+ <td>The single character used as minus sign (like
+ <code class="inline-code">"-"</code> in <code class="inline-code">-1</code>).</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">infinity</code></td>
+
+
+ <td>The string (of arbitrary length) used to show
+ infinity.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">nan</code></td>
+
+
+ <td>The string (of arbitrary length) used to show
+ not-a-number (NaN).</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">percent</code></td>
+
+
+ <td>The single character used as the percent symbol (like
+ <code class="inline-code">"%"</code> in <code class="inline-code">50%</code>). Only has
+ visible effect if the pattern contains
+ <code class="inline-code">%</code>.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">perMill</code></td>
+
+
+ <td>The single character used as the per-mill symbol (like
+ <code class="inline-code">"\u2030"</code> in <code class="inline-code">50021\u2030</code>). Only
+ has visible effect if the pattern contains
+ <code class="inline-code">\u2030</code>.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">zeroDigit</code></td>
+
+
+ <td>The first character in the 10 character range (of
+ character codes) that contains the digits to be used. For
+ example, if this is <code class="inline-code">A</code>, then 1 will
+ <code class="inline-code">B</code>, 2 will be <code class="inline-code">C</code>, and so
+ on.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">currencyCode</code></td>
+
+
+ <td>Currency ISO 4217 code. Only has effect when the pattern
+ contains parts that make it a monetary format. It's an error
+ to specify a code that's not a known ISO 4217 code in the
+ Java installation.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">currencySymbol</code></td>
+
+
+ <td>Currency symbol; shown where the localized currency name
+ is present in the pattern. Overrides the symbol determined
+ based on the <code class="inline-code">currencyCode</code>.</td>
+
+ </tr>
+
+ </tbody>
+
+ </table>
+ </div>
+
+
+ <p>Regarding the syntax of the options:</p>
+
+ <ul>
+ <li>
+ <p>The option name and value are separated by equals
+ character (<code class="inline-code">=</code>).</p>
+ </li>
+
+ <li>
+ <p>Options are separated by whitespace and/or optional
+ comma (<code class="inline-code">,</code>)</p>
+ </li>
+
+ <li>
+ <p>The option value can be quoted with apostrophe
+ (<code class="inline-code">'</code>) or normal quotation mark
+ (<code class="inline-code">"</code>) , like
+ <code class="inline-code">exponentSeparator='*10^'</code> or
+ <code class="inline-code">exponentSeparator="*10^"</code>. If the value
+ itself has to contain the character used for quotation, then
+ it has to be entered twice (like <code class="inline-code">infinity='It''s
+ infinite'</code>, but you could also write
+ <code class="inline-code">infinity="It's infinite"</code>). Backslash has no
+ special meaning.</p>
+ </li>
+
+ <li>
+ <p>Non-string values must not be quoted. Strings only has
+ to be quoted if they contain punctuation or whitespace, or any
+ other non-letter non-digit non-<code class="inline-code">"_"</code>
+ non-<code class="inline-code">"$"</code> characters. Thus, for example, both
+ <code class="inline-code">roundingMode=down</code> and
+ <code class="inline-code">roundingMode="down"</code> are legal.</p>
+ </li>
+ </ul>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_upper_abc">upper_abc</h2>
+
+
+
+
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in exists since FreeMarker 2.3.22.</p>
+ </div>
+
+
+ <p>Same as <a href="#ref_builtin_lower_abc"><code>lower_abc</code></a>,
+ but converts to upper case letters, like <code class="inline-code">"A"</code>,
+ <code class="inline-code">"B"</code>, <code class="inline-code">"C"</code>, \u2026,
+ <code class="inline-code">"AA"</code>, <code class="inline-code">"AB"</code>, etc.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_builtins_string.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins_date.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_builtins_sequence.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_builtins_sequence.html b/builds/2.3.26-nightly/ref_builtins_sequence.html
new file mode 100644
index 0000000..a3fe4ba
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_builtins_sequence.html
@@ -0,0 +1,577 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Built-ins for sequences - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Built-ins for sequences">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_builtins_sequence.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_builtins_sequence.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins.html"><span itemprop="name">Built-in Reference</span></a></li><li class="step-3"
itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins_sequence.html"><span itemprop="name">Built-ins for sequences</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Built-in Reference","Built-ins for sequences"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_builtins_boolean.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins_hash.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_builtins_sequence" itemprop="headline">Built-ins for sequences</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#ref_builtin_chunk" data-menu-target="ref_builtin_chunk">chunk</a></li><li><a class="page-menu-link" href="#ref_builtin_first" data-menu-target="ref_builtin_first">first</a></li><li><a class="page-menu-link" href="#ref_builtin_join" data-menu-target="ref_builtin_join">join</a></li><li><a class="page-menu-link" href="#ref_builtin_last" data-menu-target="ref_builtin_last">last</a></li><li><a class="page-menu-link" href="#ref_builtin_reverse" data-menu-target="ref_builtin_reverse">reverse</a></li><li><a class="page-menu-link" href="#ref_builtin_seq_contains" data-menu-target="ref_builtin_seq_contains">seq_contains</a></li><li><a class="page-menu-link" href="#ref_builtin_seq_index_of" data-menu-target="ref_builtin_seq_index_of">seq_index_of</a></li><li><a class="page-menu-link" href="#ref_builtin_seq_last_index_of" data-menu-target="ref_builtin_seq_last_index_of">seq_last_index_of</a></li><li><a class="page-menu-link" href="#ref_builtin_size" data
-menu-target="ref_builtin_size">size</a></li><li><a class="page-menu-link" href="#ref_builtin_sort" data-menu-target="ref_builtin_sort">sort</a></li><li><a class="page-menu-link" href="#ref_builtin_sort_by" data-menu-target="ref_builtin_sort_by">sort_by</a></li></ul> </div>
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_chunk">chunk</h2>
+
+
+
+
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in exists since FreeMarker 2.3.3.</p>
+ </div>
+
+
+ <p>This built-in splits a sequence into multiple sequences of the
+ size given with the 1st parameter to the built-in (like
+ <code class="inline-code">mySeq?chunk(3)</code>). The result is the sequence of
+ these sequences. The last sequence is possibly shorter than the
+ given size, unless the 2nd parameter is given (like
+ <code class="inline-code">mySeq?chunk(3, '-')</code>), that is the item used to
+ make up the size of the last sequence to the given size.
+ Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign seq = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']>
+
+<#list seq?chunk(4) as row>
+ <#list row as cell>${cell} </#list>
+</#list>
+
+<#list seq?chunk(4, '-') as row>
+ <#list row as cell>${cell} </#list>
+</#list></pre></div>
+
+ <p>The output will be:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">
+ a b c d
+ e f g h
+ i j
+
+ a b c d
+ e f g h
+ i j - -
+ </pre></div>
+
+ <p>This built in is mostly for outputting sequnces in
+ tabular/columnar format. When used with HTML tables, the 2nd
+ parameter is often <code class="inline-code">"\xA0"</code> (that is the code of
+ the no-break space character, also known as "nbsp"), so
+ the border of the empty TD-s will not be missing.</p>
+
+ <p>The 1st parameter must be a number that is at least 1. If the
+ number is not integer, it will be silently rounded down to integer
+ (i.e. both 3.1 and 3.9 will be rounded to 3). The 2nd parameter can
+ be of any type and value.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_first">first</h2>
+
+
+
+
+ <p>Returns the first item of the sequence. Thus
+ <code class="inline-code"><em class="code-color">value</em>?first</code> is the
+ same as <code class="inline-code"><em class="code-color">value</em>[0]</code>,
+ except that, since FreeMarker 2.3.26,
+ <code class="inline-code"><em class="code-color">value</em>?first</code> also works
+ if <code class="inline-code"><em class="code-color">value</em></code> doesn't
+ support getting items with numerical index, but still supports to be
+ listed (i.e., with FTL collection values).</p>
+
+ <p>If the sequence or collection is empty, the result will be a
+ missing value (as in
+ <code class="inline-code"><em class="code-color">empty</em>?first!'No item was
+ found'</code>).</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_join">join</h2>
+
+
+
+
+ <p>Concatenates the items of a sequence to a single string, with
+ the given separator. For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign colors = ["red", "green", "blue"]>
+${colors?join(", ")}</pre></div>
+
+ <p>will output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">red, green, blue</pre></div>
+
+ <p>Sequence items that are not strings will be converted to
+ string with the same conversion rules as of
+ <code class="inline-code">${<em class="code-color">...</em>}</code> (except, of
+ course, no automatic escaping is applied at this stage).</p>
+
+ <p><code class="inline-code">?join(<em class="code-color">...</em>)</code> can
+ have up to 3 parameters:</p>
+
+ <div class="orderedlist"><ol type="1">
+ <li>
+ <p>Separator, required: The string that is inserted between
+ items</p>
+ </li>
+
+ <li>
+ <p>Empty value, defaults to <code class="inline-code">""</code> (empty
+ string): The value used if the sequence contains no
+ items.</p>
+ </li>
+
+ <li>
+ <p>List ending, defaults to <code class="inline-code">""</code> (empty
+ string): The value printed after the last value, if the list
+ sequence wasn't empty.</p>
+ </li>
+ </ol></div>
+
+ <p>So this (where <code class="inline-code">[]</code> means an empty
+ sequence):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${colors?join(", ", "-")}
+${[]?join(", ", "-")}
+
+${colors?join(", ", "-", ".")}
+${[]?join(", ", "-", ".")}</pre></div>
+
+ <p>will output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">red, green, blue
+-
+
+red, green, blue.
+-</pre></div>
+
+ <p class="programmers-note">Sequences coming from Java might contain
+ <code class="inline-code">null</code> values. Those values will be ignored by this
+ built-in, exactly like if they were removed from the list.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_last">last</h2>
+
+
+
+
+ <p>The last subvariable of the sequence. Template processing will
+ die with error if the sequence is empty.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_reverse">reverse</h2>
+
+
+
+
+ <p>The sequence with reversed order.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_seq_contains">seq_contains</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.1. It
+ doesn't exist in 2.3.</p>
+ </div>
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>The <code class="inline-code">seq_</code> prefix is required in the
+ built-in name to differentiate it from the <a href="ref_builtins_string.html#ref_builtin_contains"><code>contains</code>
+ built-in</a> that searches a substring in a string (since a
+ variable can be both string and sequence on the same time).</p>
+ </div>
+
+
+ <p>Tells if the sequence contains the specified value. It has 1
+ parameter, the value to find. Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign x = ["red", 16, "blue", "cyan"]>
+"blue": ${x?seq_contains("blue")?string("yes", "no")}
+"yellow": ${x?seq_contains("yellow")?string("yes", "no")}
+16: ${x?seq_contains(16)?string("yes", "no")}
+"16": ${x?seq_contains("16")?string("yes", "no")}</pre></div>
+
+ <p>The output will be:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">"blue": yes
+"yellow": no
+16: yes
+"16": no</pre></div>
+
+ <p>To find the value the built-in uses FreeMarker's comparison
+ rules (as if you was using <a href="dgui_template_exp.html#dgui_template_exp_comparison"><code>==</code>
+ operator</a>), except that comparing two values of different
+ types or of types for which FreeMarker doesn't support comparison
+ will not cause error, just will be evaluated as the two values are
+ not equal. Thus, you can use it only to find scalar values (i.e.
+ string, number, boolean or date/time values). For other types the
+ result will be always <code class="inline-code">false</code>.</p>
+
+ <p>For fault tolerance, this built-in also works with
+ collections.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_seq_index_of">seq_index_of</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.1. It
+ doesn't exist in 2.3.</p>
+ </div>
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>The <code class="inline-code">seq_</code> prefix is required in the
+ built-in name to differentiate it from the <a href="ref_builtins_string.html#ref_builtin_index_of"><code>index_of</code>
+ built-in</a> that searches a substring in a string (since a
+ variable can be both string and sequence on the same time).</p>
+ </div>
+
+
+ <p>Returns the index of the first occurrence of a value in the
+ sequence, or <code class="inline-code">-1</code> if the sequence doesn't contain
+ the specified value. The value to find is specified as the first
+ parameter. For example this template:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign colors = ["red", "green", "blue"]>
+${colors?seq_index_of("blue")}
+${colors?seq_index_of("red")}
+${colors?seq_index_of("purple")}</pre></div>
+
+ <p>will output this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">2
+0
+-1</pre></div>
+
+ <p>To find the value the built-in uses FreeMarker's comparison
+ rules (as if you was using <a href="dgui_template_exp.html#dgui_template_exp_comparison"><code>==</code>
+ operator</a>), except that comparing two values of different
+ types or of types for which FreeMarker doesn't support comparison
+ will not cause error, just will be evaluated as the two values are
+ not equal. Thus, you can use it only to find scalar values (i.e.
+ string, number, boolean or date/time values). For other types the
+ result will be always <code class="inline-code">-1</code>.</p>
+
+ <p>The index where the searching is started can be optionally
+ given as the 2nd parameter. This may be useful if the same item can
+ occur for multiple times in the same sequence. There is no
+ restriction on the numerical value of the second parameter: if it is
+ negative, it has the same effect as if it were zero, and if it is
+ greater than the length of the sequence, it has the same effect as
+ if it were equal to the length of the sequence. Decimal values will
+ be truncated to integers. For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign names = ["Joe", "Fred", "Joe", "Susan"]>
+No 2nd param: ${names?seq_index_of("Joe")}
+-2: ${names?seq_index_of("Joe", -2)}
+-1: ${names?seq_index_of("Joe", -1)}
+ 0: ${names?seq_index_of("Joe", 0)}
+ 1: ${names?seq_index_of("Joe", 1)}
+ 2: ${names?seq_index_of("Joe", 2)}
+ 3: ${names?seq_index_of("Joe", 3)}
+ 4: ${names?seq_index_of("Joe", 4)}</pre></div>
+
+ <p>will output this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">No 2nd param: 0
+-2: 0
+-1: 0
+ 0: 0
+ 1: 2
+ 2: 2
+ 3: -1
+ 4: -1</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_seq_last_index_of">seq_last_index_of</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.1. It
+ doesn't exist in 2.3.</p>
+ </div>
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>The <code class="inline-code">seq_</code> prefix is required in the
+ built-in name to differentiate it from the <a href="ref_builtins_string.html#ref_builtin_last_index_of"><code>last_index_of</code>
+ built-in</a> that searches a substring in a string (since a
+ variable can be both string and sequence on the same time).</p>
+ </div>
+
+
+ <p>Returns the index of the last occurrence of a value in the
+ sequence, or <code class="inline-code">-1</code> if the sequence doesn't contain
+ the specified value. That is, it is the same as <a href="#ref_builtin_seq_index_of"><code>seq_index_of</code></a>,
+ just it searches backward starting from the last item of the
+ sequence. It also supports the optional 2nd parameter that specifies
+ the index where the searching is started. For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign names = ["Joe", "Fred", "Joe", "Susan"]>
+No 2nd param: ${names?seq_last_index_of("Joe")}
+-2: ${names?seq_last_index_of("Joe", -2)}
+-1: ${names?seq_last_index_of("Joe", -1)}
+ 0: ${names?seq_last_index_of("Joe", 0)}
+ 1: ${names?seq_last_index_of("Joe", 1)}
+ 2: ${names?seq_last_index_of("Joe", 2)}
+ 3: ${names?seq_last_index_of("Joe", 3)}
+ 4: ${names?seq_last_index_of("Joe", 4)}</pre></div>
+
+ <p>will output this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">No 2nd param: 2
+-2: -1
+-1: -1
+ 0: 0
+ 1: 0
+ 2: 2
+ 3: 2
+ 4: 2</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_size">size</h2>
+
+
+
+
+ <p>The number of sub variables in sequence (as a numerical
+ value). The highest possible index in sequence <code class="inline-code">s</code>
+ is <code class="inline-code">s?size�-�1</code> (since the index of the first
+ subvariable is 0) assuming that the sequence has at least one
+ subvariable.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_sort">sort</h2>
+
+
+
+
+
+
+ <p>Returns the sequence sorted in ascending order. (For
+ descending order use this and then the <a href="#ref_builtin_reverse"><code>reverse</code> built
+ in</a>.) This will work only if all sub variables are strings, or
+ if all sub variables are numbers, or if all sub variables are date
+ values (date, time, or date+time), or if all sub variables are
+ booleans (since 2.3.17). If the sub variables are strings, it uses
+ locale (language) specific lexical sorting (which is usually not
+ case sensitive). For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign ls = ["whale", "Barbara", "zeppelin", "aardvark", "beetroot"]?sort>
+<#list ls as i>${i} </#list></pre></div>
+
+ <p>will print (with US locale at least):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">aardvark Barbara beetroot whale zeppelin</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_sort_by">sort_by</h2>
+
+
+
+
+
+
+ <p>Returns the sequence of hashes sorted by the given hash
+ subvariable in ascending order. (For descending order use this and
+ then the <a href="#ref_builtin_reverse"><code>reverse</code> built
+ in</a>.) The rules are the same as with the <a href="#ref_builtin_sort"><code>sort</code> built-in</a>,
+ except that the sub variables of the sequence must be hashes, and
+ you have to give the name of a hash subvariable that will decide the
+ order. For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign ls = [
+ {"name":"whale", "weight":2000},
+ {"name":"Barbara", "weight":53},
+ {"name":"zeppelin", "weight":-200},
+ {"name":"aardvark", "weight":30},
+ {"name":"beetroot", "weight":0.3}
+]>
+Order by name:
+<#list ls?sort_by("name") as i>
+- ${i.name}: ${i.weight}
+</#list>
+
+Order by weight:
+<#list ls?sort_by("weight") as i>
+- ${i.name}: ${i.weight}
+</#list></pre></div>
+
+ <p>will print (with US locale at least):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">Order by name:
+- aardvark: 30
+- Barbara: 53
+- beetroot: 0.3
+- whale: 2000
+- zeppelin: -200
+
+Order by weight:
+- zeppelin: -200
+- beetroot: 0.3
+- aardvark: 30
+- Barbara: 53
+- whale: 2000</pre></div>
+
+ <p>If the subvariable that you want to use for the sorting is on
+ a deeper level (that is, if it is a subvariable of a subvariable and
+ so on), then you can use a sequence as parameter, that specifies the
+ names of the sub variables that lead down to the desired
+ subvariable. For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign members = [
+ {"name": {"first": "Joe", "last": "Smith"}, "age": 40},
+ {"name": {"first": "Fred", "last": "Crooger"}, "age": 35},
+ {"name": {"first": "Amanda", "last": "Fox"}, "age": 25}]>
+Sorted by name.last:
+<#list members?sort_by(['name', 'last']) as m>
+- ${m.name.last}, ${m.name.first}: ${m.age} years old
+</#list></pre></div>
+
+ <p>will print (with US locale at least):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">Sorted by name.last:
+- Crooger, Fred: 35 years old
+- Fox, Amanda: 25 years old
+- Smith, Joe: 40 years old</pre></div>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_builtins_boolean.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins_hash.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[45/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/detailed-toc.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/detailed-toc.html b/builds/2.3.26-nightly/detailed-toc.html
new file mode 100644
index 0000000..3d6ef00
--- /dev/null
+++ b/builds/2.3.26-nightly/detailed-toc.html
@@ -0,0 +1,80 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-docgen-detailed-toc">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Apache FreeMarker Manual">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/index.html">
+<link rel="canonical" href="http://freemarker.org/docs/index.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name">Table of Contents</span></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></
div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = [];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><span class="paging-arrow disabled previous"><span>Previous</span></span><a class="paging-arrow next" href="dgui.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-book" id="autoid_1" itemprop="headline">Apache FreeMarker Manual <span class="subtitle productname">For Freemarker 2.3.26</span>
+</h1>
+</div></div><div class="page-menu">
+<ul><li><a class="page-menu-link" href="dgui.html" data-menu-target="dgui">Template Author's Guide</a><ul><li><a class="page-menu-link" href="dgui_quickstart.html" data-menu-target="dgui_quickstart">Getting Started</a><ul><li><a class="page-menu-link" href="dgui_quickstart_basics.html" data-menu-target="dgui_quickstart_basics">Template + data-model = output</a></li><li><a class="page-menu-link" href="dgui_quickstart_datamodel.html" data-menu-target="dgui_quickstart_datamodel">The data-model at a glance</a></li><li><a class="page-menu-link" href="dgui_quickstart_template.html" data-menu-target="dgui_quickstart_template">The template at a glance</a><ul><li><a class="page-menu-link" href="dgui_quickstart_template.html#autoid_2" data-menu-target="autoid_2">Some basic directives</a><ul><li><a class="page-menu-link" href="dgui_quickstart_template.html#autoid_3" data-menu-target="autoid_3">The if directive</a></li><li><a class="page-menu-link" href="dgui_quickstart_template.html#autoid
_4" data-menu-target="autoid_4">The list directive</a></li><li><a class="page-menu-link" href="dgui_quickstart_template.html#autoid_5" data-menu-target="autoid_5">The include directive</a></li></ul></li><li><a class="page-menu-link" href="dgui_quickstart_template.html#autoid_6" data-menu-target="autoid_6">Using directives together</a></li><li><a class="page-menu-link" href="dgui_quickstart_template.html#autoid_7" data-menu-target="autoid_7">Using built-ins</a></li><li><a class="page-menu-link" href="dgui_quickstart_template.html#autoid_8" data-menu-target="autoid_8">Dealing with missing variables</a></li><li><a class="page-menu-link" href="dgui_quickstart_template.html#dgui_quickstart_template_autoescaping" data-menu-target="dgui_quickstart_template_autoescaping">Escaping for HTML, XML and other markup</a></li></ul></li></ul></li><li><a class="page-menu-link" href="dgui_datamodel.html" data-menu-target="dgui_datamodel">Values, Types</a><ul><li><a class="page-menu-link" href="dgui_da
tamodel_basics.html" data-menu-target="dgui_datamodel_basics">Basics</a><ul><li><a class="page-menu-link" href="dgui_datamodel_basics.html#topic.value" data-menu-target="topic.value">What is a value?</a></li><li><a class="page-menu-link" href="dgui_datamodel_basics.html#autoid_9" data-menu-target="autoid_9">What is type?</a></li><li><a class="page-menu-link" href="dgui_datamodel_basics.html#autoid_10" data-menu-target="autoid_10">The data-model is a hash</a></li></ul></li><li><a class="page-menu-link" href="dgui_datamodel_types.html" data-menu-target="dgui_datamodel_types">The types</a><ul><li><a class="page-menu-link" href="dgui_datamodel_types.html#dgui_datamodel_scalar" data-menu-target="dgui_datamodel_scalar">Scalars</a></li><li><a class="page-menu-link" href="dgui_datamodel_types.html#dgui_datamodel_container" data-menu-target="dgui_datamodel_container">Containers</a></li><li><a class="page-menu-link" href="dgui_datamodel_types.html#autoid_11" data-menu-target="autoid_11">Subro
utines</a><ul><li><a class="page-menu-link" href="dgui_datamodel_types.html#dgui_datamodel_method" data-menu-target="dgui_datamodel_method">Methods and functions</a></li><li><a class="page-menu-link" href="dgui_datamodel_types.html#dgui_datamodel_userdefdir" data-menu-target="dgui_datamodel_userdefdir">User-defined directives</a></li><li><a class="page-menu-link" href="dgui_datamodel_types.html#autoid_12" data-menu-target="autoid_12">Function/method versus user-defined directive</a></li></ul></li><li><a class="page-menu-link" href="dgui_datamodel_types.html#autoid_13" data-menu-target="autoid_13">Miscellaneous</a><ul><li><a class="page-menu-link" href="dgui_datamodel_types.html#dgui_datamodel_node" data-menu-target="dgui_datamodel_node">Nodes</a></li><li><a class="page-menu-link" href="dgui_datamodel_types.html#dgui_datamodel_markupoutput" data-menu-target="dgui_datamodel_markupoutput">Markup output</a></li></ul></li></ul></li></ul></li><li><a class="page-menu-link" href="dgui_templ
ate.html" data-menu-target="dgui_template">The Template</a><ul><li><a class="page-menu-link" href="dgui_template_overallstructure.html" data-menu-target="dgui_template_overallstructure">Overall structure</a></li><li><a class="page-menu-link" href="dgui_template_directives.html" data-menu-target="dgui_template_directives">Directives</a></li><li><a class="page-menu-link" href="dgui_template_exp.html" data-menu-target="dgui_template_exp">Expressions</a><ul><li><a class="page-menu-link" href="dgui_template_exp.html#exp_cheatsheet" data-menu-target="exp_cheatsheet">Quick overview (cheat sheet)</a></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_direct" data-menu-target="dgui_template_exp_direct">Specify values directly</a><ul><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_direct_string" data-menu-target="dgui_template_exp_direct_string">Strings</a></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_e
xp_direct_number" data-menu-target="dgui_template_exp_direct_number">Numbers</a></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_direct_boolean" data-menu-target="dgui_template_exp_direct_boolean">Booleans</a></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_direct_seuqence" data-menu-target="dgui_template_exp_direct_seuqence">Sequences</a></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_direct_ranges" data-menu-target="dgui_template_exp_direct_ranges">Ranges</a></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_direct_hash" data-menu-target="dgui_template_exp_direct_hash">Hashes</a></li></ul></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_var" data-menu-target="dgui_template_exp_var">Retrieving variables</a><ul><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_var_toplevel" data-menu-target="dgu
i_template_exp_var_toplevel">Top-level variables</a></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_var_hash" data-menu-target="dgui_template_exp_var_hash">Retrieving data from a hash</a></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_var_sequence" data-menu-target="dgui_template_exp_var_sequence">Retrieving data from a sequence</a></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_var_special" data-menu-target="dgui_template_exp_var_special">Special variables</a></li></ul></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_stringop" data-menu-target="dgui_template_exp_stringop">String operations</a><ul><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_stringop_interpolation" data-menu-target="dgui_template_exp_stringop_interpolation">Interpolation and concatenation</a></li><li><a class="page-menu-link" href="dgui_template_exp.ht
ml#dgui_template_exp_get_character" data-menu-target="dgui_template_exp_get_character">Getting a character</a></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_stringop_slice" data-menu-target="dgui_template_exp_stringop_slice">String slicing (substrings)</a></li></ul></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_sequenceop" data-menu-target="dgui_template_exp_sequenceop">Sequence operations</a><ul><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_sequenceop_cat" data-menu-target="dgui_template_exp_sequenceop_cat">Concatenation</a></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_seqenceop_slice" data-menu-target="dgui_template_exp_seqenceop_slice">Sequence slicing</a></li></ul></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_hashop" data-menu-target="dgui_template_exp_hashop">Hash operations</a><ul><li><a class="page-menu-li
nk" href="dgui_template_exp.html#dgui_template_exp_hashop_cat" data-menu-target="dgui_template_exp_hashop_cat">Concatenation</a></li></ul></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_arit" data-menu-target="dgui_template_exp_arit">Arithmetical calculations</a></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_comparison" data-menu-target="dgui_template_exp_comparison">Comparison</a></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_logicalop" data-menu-target="dgui_template_exp_logicalop">Logical operations</a></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_builtin" data-menu-target="dgui_template_exp_builtin">Built-ins</a></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_methodcall" data-menu-target="dgui_template_exp_methodcall">Method call</a></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_templat
e_exp_missing" data-menu-target="dgui_template_exp_missing">Handling missing values</a><ul><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_missing_default" data-menu-target="dgui_template_exp_missing_default">Default value operator</a></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_missing_test" data-menu-target="dgui_template_exp_missing_test">Missing value test operator</a></li></ul></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_assignment" data-menu-target="dgui_template_exp_assignment">Assignment Operators</a></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_parentheses" data-menu-target="dgui_template_exp_parentheses">Parentheses</a></li><li><a class="page-menu-link" href="dgui_template_exp.html#dgui_template_exp_whitespace" data-menu-target="dgui_template_exp_whitespace">White-space in expressions</a></li><li><a class="page-menu-link" href="dgui_tem
plate_exp.html#dgui_template_exp_precedence" data-menu-target="dgui_template_exp_precedence">Operator precedence</a></li></ul></li><li><a class="page-menu-link" href="dgui_template_valueinsertion.html" data-menu-target="dgui_template_valueinsertion">Interpolations</a><ul><li><a class="page-menu-link" href="dgui_template_valueinsertion.html#autoid_14" data-menu-target="autoid_14">Overview</a></li><li><a class="page-menu-link" href="dgui_template_valueinsertion.html#autoid_15" data-menu-target="autoid_15">Automatic escaping</a></li><li><a class="page-menu-link" href="dgui_template_valueinsertion.html#autoid_16" data-menu-target="autoid_16">Guide to inserting numerical values</a></li><li><a class="page-menu-link" href="dgui_template_valueinsertion.html#dgui_template_valueinserion_universal_date" data-menu-target="dgui_template_valueinserion_universal_date">Guide to inserting date/time/date-time values</a></li><li><a class="page-menu-link" href="dgui_template_valueinsertion.html#autoid_
17" data-menu-target="autoid_17">Guide to inserting boolean values</a></li><li><a class="page-menu-link" href="dgui_template_valueinsertion.html#autoid_18" data-menu-target="autoid_18">Exact conversion rules</a></li></ul></li></ul></li><li><a class="page-menu-link" href="dgui_misc.html" data-menu-target="dgui_misc">Miscellaneous</a><ul><li><a class="page-menu-link" href="dgui_misc_userdefdir.html" data-menu-target="dgui_misc_userdefdir">Defining your own directives</a><ul><li><a class="page-menu-link" href="dgui_misc_userdefdir.html#autoid_19" data-menu-target="autoid_19">Basics</a></li><li><a class="page-menu-link" href="dgui_misc_userdefdir.html#autoid_20" data-menu-target="autoid_20">Parameters</a></li><li><a class="page-menu-link" href="dgui_misc_userdefdir.html#autoid_21" data-menu-target="autoid_21">Nested content</a></li><li><a class="page-menu-link" href="dgui_misc_userdefdir.html#dgui_misc_userdefdir_loopvar" data-menu-target="dgui_misc_userdefdir_loopvar">Macros with loop
variables</a></li><li><a class="page-menu-link" href="dgui_misc_userdefdir.html#autoid_22" data-menu-target="autoid_22">More about user-defined directives and macros</a></li></ul></li><li><a class="page-menu-link" href="dgui_misc_var.html" data-menu-target="dgui_misc_var">Defining variables in the template</a></li><li><a class="page-menu-link" href="dgui_misc_namespace.html" data-menu-target="dgui_misc_namespace">Namespaces</a><ul><li><a class="page-menu-link" href="dgui_misc_namespace.html#autoid_23" data-menu-target="autoid_23">Creating a library</a></li><li><a class="page-menu-link" href="dgui_misc_namespace.html#autoid_24" data-menu-target="autoid_24">Writing the variables of imported namespaces</a></li><li><a class="page-menu-link" href="dgui_misc_namespace.html#autoid_25" data-menu-target="autoid_25">Namespaces and data-model</a></li><li><a class="page-menu-link" href="dgui_misc_namespace.html#autoid_26" data-menu-target="autoid_26">The life-cycle of namespaces</a></li><li><a
class="page-menu-link" href="dgui_misc_namespace.html#autoid_27" data-menu-target="autoid_27">Auto-importing</a></li></ul></li><li><a class="page-menu-link" href="dgui_misc_autoescaping.html" data-menu-target="dgui_misc_autoescaping">Auto-escaping and output formats</a><ul><li><a class="page-menu-link" href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_outputformat" data-menu-target="dgui_misc_autoescaping_outputformat">Output formats</a></li><li><a class="page-menu-link" href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_overrideoformat" data-menu-target="dgui_misc_autoescaping_overrideoformat">Overriding the output format in templates</a></li><li><a class="page-menu-link" href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_disableautoesc" data-menu-target="dgui_misc_autoescaping_disableautoesc">Disabling auto escaping</a></li><li><a class="page-menu-link" href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_movalues" data-menu-target="dgui_misc_autoescaping_mo
values">"Markup output" values</a></li><li><a class="page-menu-link" href="dgui_misc_autoescaping.html#autoid_28" data-menu-target="autoid_28">Further details and tricky cases</a><ul><li><a class="page-menu-link" href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_nonmarkupof" data-menu-target="dgui_misc_autoescaping_nonmarkupof">Non-markup output formats</a></li><li><a class="page-menu-link" href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_mixingoutputformats" data-menu-target="dgui_misc_autoescaping_mixingoutputformats">Inserting markup output values from other markups</a></li><li><a class="page-menu-link" href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_concatenation" data-menu-target="dgui_misc_autoescaping_concatenation">Markup output values and the "+"
+operator</a></li><li><a class="page-menu-link" href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_stringliteral" data-menu-target="dgui_misc_autoescaping_stringliteral">${...} inside string literals</a></li><li><a class="page-menu-link" href="dgui_misc_autoescaping.html#autoid_29" data-menu-target="autoid_29">Combined output formats</a></li></ul></li></ul></li><li><a class="page-menu-link" href="dgui_misc_whitespace.html" data-menu-target="dgui_misc_whitespace">White-space handling</a><ul><li><a class="page-menu-link" href="dgui_misc_whitespace.html#dgui_misc_whitespace_stripping" data-menu-target="dgui_misc_whitespace_stripping">White-space stripping</a></li><li><a class="page-menu-link" href="dgui_misc_whitespace.html#autoid_30" data-menu-target="autoid_30">Using compress directive</a></li></ul></li><li><a class="page-menu-link" href="dgui_misc_alternativesyntax.html" data-menu-target="dgui_misc_alternativesyntax">Alternative (square bracket) syntax</a></li></ul></li></ul></
li><li><a class="page-menu-link" href="pgui.html" data-menu-target="pgui">Programmer's Guide</a><ul><li><a class="page-menu-link" href="pgui_quickstart.html" data-menu-target="pgui_quickstart">Getting Started</a><ul><li><a class="page-menu-link" href="pgui_quickstart_createconfiguration.html" data-menu-target="pgui_quickstart_createconfiguration">Create a configuration instance</a></li><li><a class="page-menu-link" href="pgui_quickstart_createdatamodel.html" data-menu-target="pgui_quickstart_createdatamodel">Create a data-model</a></li><li><a class="page-menu-link" href="pgui_quickstart_gettemplate.html" data-menu-target="pgui_quickstart_gettemplate">Get the template</a></li><li><a class="page-menu-link" href="pgui_quickstart_merge.html" data-menu-target="pgui_quickstart_merge">Merging the template with the data-model</a></li><li><a class="page-menu-link" href="pgui_quickstart_all.html" data-menu-target="pgui_quickstart_all">Putting all together</a></li></ul></li><li><a class="p
age-menu-link" href="pgui_datamodel.html" data-menu-target="pgui_datamodel">The Data Model</a><ul><li><a class="page-menu-link" href="pgui_datamodel_basics.html" data-menu-target="pgui_datamodel_basics">Basics</a></li><li><a class="page-menu-link" href="pgui_datamodel_scalar.html" data-menu-target="pgui_datamodel_scalar">Scalars</a><ul><li><a class="page-menu-link" href="pgui_datamodel_scalar.html#autoid_31" data-menu-target="autoid_31">Difficulties with the "date-like" types</a></li></ul></li><li><a class="page-menu-link" href="pgui_datamodel_parent.html" data-menu-target="pgui_datamodel_parent">Containers</a><ul><li><a class="page-menu-link" href="pgui_datamodel_parent.html#autoid_32" data-menu-target="autoid_32">Hashes</a></li><li><a class="page-menu-link" href="pgui_datamodel_parent.html#autoid_33" data-menu-target="autoid_33">Sequences</a></li><li><a class="page-menu-link" href="pgui_datamodel_parent.html#autoid_34" data-menu-target="autoid_34">Collections</a></li></ul></li><li
><a class="page-menu-link" href="pgui_datamodel_method.html" data-menu-target="pgui_datamodel_method">Methods</a></li><li><a class="page-menu-link" href="pgui_datamodel_directive.html" data-menu-target="pgui_datamodel_directive">Directives</a><ul><li><a class="page-menu-link" href="pgui_datamodel_directive.html#autoid_35" data-menu-target="autoid_35">Example 1</a></li><li><a class="page-menu-link" href="pgui_datamodel_directive.html#autoid_36" data-menu-target="autoid_36">Example 2</a></li><li><a class="page-menu-link" href="pgui_datamodel_directive.html#autoid_37" data-menu-target="autoid_37">Notices</a></li></ul></li><li><a class="page-menu-link" href="pgui_datamodel_node.html" data-menu-target="pgui_datamodel_node">Node variables</a></li><li><a class="page-menu-link" href="pgui_datamodel_objectWrapper.html" data-menu-target="pgui_datamodel_objectWrapper">Object wrappers</a><ul><li><a class="page-menu-link" href="pgui_datamodel_objectWrapper.html#pgui_datamodel_defaultObjectWrappe
r" data-menu-target="pgui_datamodel_defaultObjectWrapper">The default object wrapper</a></li><li><a class="page-menu-link" href="pgui_datamodel_objectWrapper.html#pgui_datamodel_customObjectWrappingExample" data-menu-target="pgui_datamodel_customObjectWrappingExample">Custom object wrapping example</a></li></ul></li></ul></li><li><a class="page-menu-link" href="pgui_config.html" data-menu-target="pgui_config">The Configuration</a><ul><li><a class="page-menu-link" href="pgui_config_basics.html" data-menu-target="pgui_config_basics">Basics</a></li><li><a class="page-menu-link" href="pgui_config_sharedvariables.html" data-menu-target="pgui_config_sharedvariables">Shared variables</a></li><li><a class="page-menu-link" href="pgui_config_settings.html" data-menu-target="pgui_config_settings">Settings</a></li><li><a class="page-menu-link" href="pgui_config_templateloading.html" data-menu-target="pgui_config_templateloading">Template loading</a><ul><li><a class="page-menu-link" href="pgui_c
onfig_templateloading.html#autoid_38" data-menu-target="autoid_38">Template loaders</a><ul><li><a class="page-menu-link" href="pgui_config_templateloading.html#autoid_39" data-menu-target="autoid_39">Built-in template loaders</a></li><li><a class="page-menu-link" href="pgui_config_templateloading.html#autoid_40" data-menu-target="autoid_40">Loading templates from multiple locations</a></li><li><a class="page-menu-link" href="pgui_config_templateloading.html#autoid_41" data-menu-target="autoid_41">Loading templates from other sources</a></li><li><a class="page-menu-link" href="pgui_config_templateloading.html#autoid_42" data-menu-target="autoid_42">The template name (template path)</a></li></ul></li><li><a class="page-menu-link" href="pgui_config_templateloading.html#pgui_config_templateloading_caching" data-menu-target="pgui_config_templateloading_caching">Template caching</a></li></ul></li><li><a class="page-menu-link" href="pgui_config_errorhandling.html" data-menu-target="pgui_co
nfig_errorhandling">Error handling</a><ul><li><a class="page-menu-link" href="pgui_config_errorhandling.html#autoid_43" data-menu-target="autoid_43">The possible exceptions</a></li><li><a class="page-menu-link" href="pgui_config_errorhandling.html#autoid_44" data-menu-target="autoid_44">Customizing the behavior regarding TemplatException-s</a></li><li><a class="page-menu-link" href="pgui_config_errorhandling.html#autoid_45" data-menu-target="autoid_45">TemplateException logging</a></li><li><a class="page-menu-link" href="pgui_config_errorhandling.html#autoid_46" data-menu-target="autoid_46">Explicit error handling in templates</a></li></ul></li><li><a class="page-menu-link" href="pgui_config_templateconfigurations.html" data-menu-target="pgui_config_templateconfigurations">Template configurations</a></li><li><a class="page-menu-link" href="pgui_config_outputformatsautoesc.html" data-menu-target="pgui_config_outputformatsautoesc">Associating output formats with templates</a></li><li>
<a class="page-menu-link" href="pgui_config_custom_formats.html" data-menu-target="pgui_config_custom_formats">Custom number and date/time formats</a><ul><li><a class="page-menu-link" href="pgui_config_custom_formats.html#autoid_50" data-menu-target="autoid_50">Overview</a></li><li><a class="page-menu-link" href="pgui_config_custom_formats.html#pgui_config_custom_formats_ex_cust_alg_simple" data-menu-target="pgui_config_custom_formats_ex_cust_alg_simple">Simple custom number format example</a></li><li><a class="page-menu-link" href="pgui_config_custom_formats.html#pgui_config_custom_formats_ex_cust_algo_advanced" data-menu-target="pgui_config_custom_formats_ex_cust_algo_advanced">Advanced custom number format example</a></li><li><a class="page-menu-link" href="pgui_config_custom_formats.html#pgui_config_custom_formats_ex_cust_algo_date" data-menu-target="pgui_config_custom_formats_ex_cust_algo_date">Custom date/time format example</a></li><li><a class="page-menu-link" href="pgui_con
fig_custom_formats.html#pgui_config_custom_formats_ex_alias" data-menu-target="pgui_config_custom_formats_ex_alias">Alias format example</a></li><li><a class="page-menu-link" href="pgui_config_custom_formats.html#pgui_config_custom_formats_ex_model_aware" data-menu-target="pgui_config_custom_formats_ex_model_aware">Model-aware format example</a></li></ul></li><li><a class="page-menu-link" href="pgui_config_incompatible_improvements.html" data-menu-target="pgui_config_incompatible_improvements">The "incompatible improvements" setting</a><ul><li><a class="page-menu-link" href="pgui_config_incompatible_improvements.html#autoid_51" data-menu-target="autoid_51">What does it do</a></li><li><a class="page-menu-link" href="pgui_config_incompatible_improvements.html#pgui_config_incompatible_improvements_how_to_set" data-menu-target="pgui_config_incompatible_improvements_how_to_set">How to set it</a></li></ul></li></ul></li><li><a class="page-menu-link" href="pgui_misc.html" data-me
nu-target="pgui_misc">Miscellaneous</a><ul><li><a class="page-menu-link" href="pgui_misc_var.html" data-menu-target="pgui_misc_var">Variables, scopes</a></li><li><a class="page-menu-link" href="pgui_misc_charset.html" data-menu-target="pgui_misc_charset">Charset issues</a><ul><li><a class="page-menu-link" href="pgui_misc_charset.html#autoid_52" data-menu-target="autoid_52">The charset of the input</a></li><li><a class="page-menu-link" href="pgui_misc_charset.html#autoid_53" data-menu-target="autoid_53">The charset of the output</a></li></ul></li><li><a class="page-menu-link" href="pgui_misc_multithreading.html" data-menu-target="pgui_misc_multithreading">Multithreading</a></li><li><a class="page-menu-link" href="pgui_misc_beanwrapper.html" data-menu-target="pgui_misc_beanwrapper">Bean wrapper</a><ul><li><a class="page-menu-link" href="pgui_misc_beanwrapper.html#beanswrapper_hash" data-menu-target="beanswrapper_hash">TemplateHashModel functionality</a></li><li><a class="page-menu-lin
k" href="pgui_misc_beanwrapper.html#autoid_54" data-menu-target="autoid_54">A word on security</a></li><li><a class="page-menu-link" href="pgui_misc_beanwrapper.html#autoid_55" data-menu-target="autoid_55">TemplateScalarModel functionality</a></li><li><a class="page-menu-link" href="pgui_misc_beanwrapper.html#autoid_56" data-menu-target="autoid_56">TemplateNumberModel functionality</a></li><li><a class="page-menu-link" href="pgui_misc_beanwrapper.html#autoid_57" data-menu-target="autoid_57">TemplateCollectionModel functionality</a></li><li><a class="page-menu-link" href="pgui_misc_beanwrapper.html#autoid_58" data-menu-target="autoid_58">TemplateSequenceModel functionality</a></li><li><a class="page-menu-link" href="pgui_misc_beanwrapper.html#beanswrapper_method" data-menu-target="beanswrapper_method">TemplateMethodModel functionality</a></li><li><a class="page-menu-link" href="pgui_misc_beanwrapper.html#autoid_59" data-menu-target="autoid_59">Unwrapping rules</a></li><li><a class="p
age-menu-link" href="pgui_misc_beanwrapper.html#autoid_60" data-menu-target="autoid_60">Accessing static methods</a></li><li><a class="page-menu-link" href="pgui_misc_beanwrapper.html#jdk_15_enums" data-menu-target="jdk_15_enums">Accessing enums</a></li></ul></li><li><a class="page-menu-link" href="pgui_misc_logging.html" data-menu-target="pgui_misc_logging">Logging</a><ul><li><a class="page-menu-link" href="pgui_misc_logging.html#autoid_61" data-menu-target="autoid_61">Logging library selection</a></li><li><a class="page-menu-link" href="pgui_misc_logging.html#autoid_62" data-menu-target="autoid_62">Logging categories</a></li></ul></li><li><a class="page-menu-link" href="pgui_misc_servlet.html" data-menu-target="pgui_misc_servlet">Using FreeMarker with servlets</a><ul><li><a class="page-menu-link" href="pgui_misc_servlet.html#pgui_misc_servlet_model2" data-menu-target="pgui_misc_servlet_model2">Using FreeMarker for "Model 2"</a></li><li><a class="page-menu-link" href="pgui_misc_ser
vlet.html#pgui_misc_servlet_include" data-menu-target="pgui_misc_servlet_include">Including content from other web application
+resources</a></li><li><a class="page-menu-link" href="pgui_misc_servlet.html#autoid_63" data-menu-target="autoid_63">Using JSP custom tags in FTL</a></li><li><a class="page-menu-link" href="pgui_misc_servlet.html#autoid_64" data-menu-target="autoid_64">Embed FTL into JSP pages</a></li></ul></li><li><a class="page-menu-link" href="pgui_misc_secureenv.html" data-menu-target="pgui_misc_secureenv">Configuring security policy for FreeMarker</a></li><li><a class="page-menu-link" href="pgui_misc_xml_legacy.html" data-menu-target="pgui_misc_xml_legacy">Legacy XML wrapper implementation</a><ul><li><a class="page-menu-link" href="pgui_misc_xml_legacy.html#autoid_65" data-menu-target="autoid_65">TemplateScalarModel</a></li><li><a class="page-menu-link" href="pgui_misc_xml_legacy.html#autoid_66" data-menu-target="autoid_66">TemplateCollectionModel</a></li><li><a class="page-menu-link" href="pgui_misc_xml_legacy.html#autoid_67" data-menu-target="autoid_67">TemplateSequenceModel</a></li><li><a cl
ass="page-menu-link" href="pgui_misc_xml_legacy.html#autoid_68" data-menu-target="autoid_68">TemplateHashModel</a></li><li><a class="page-menu-link" href="pgui_misc_xml_legacy.html#autoid_69" data-menu-target="autoid_69">TemplateMethodModel</a></li><li><a class="page-menu-link" href="pgui_misc_xml_legacy.html#autoid_70" data-menu-target="autoid_70">Namespace handling</a></li></ul></li><li><a class="page-menu-link" href="pgui_misc_ant.html" data-menu-target="pgui_misc_ant">Using FreeMarker with Ant</a></li><li><a class="page-menu-link" href="pgui_misc_jythonwrapper.html" data-menu-target="pgui_misc_jythonwrapper">Jython wrapper</a><ul><li><a class="page-menu-link" href="pgui_misc_jythonwrapper.html#autoid_71" data-menu-target="autoid_71">TemplateHashModel functionality</a></li><li><a class="page-menu-link" href="pgui_misc_jythonwrapper.html#autoid_72" data-menu-target="autoid_72">TemplateScalarModel functionality</a></li><li><a class="page-menu-link" href="pgui_misc_jythonwrapper.htm
l#autoid_73" data-menu-target="autoid_73">TemplateBooleanModel functionality</a></li><li><a class="page-menu-link" href="pgui_misc_jythonwrapper.html#autoid_74" data-menu-target="autoid_74">TemplateNumberModel functionality</a></li><li><a class="page-menu-link" href="pgui_misc_jythonwrapper.html#autoid_75" data-menu-target="autoid_75">TemplateSequenceModel functionality</a></li></ul></li></ul></li></ul></li><li><a class="page-menu-link" href="ref.html" data-menu-target="ref">Template Language Reference</a><ul><li><a class="page-menu-link" href="ref_builtins.html" data-menu-target="ref_builtins">Built-in Reference</a><ul><li><a class="page-menu-link" href="ref_builtins_alphaidx.html" data-menu-target="ref_builtins_alphaidx">Alphabetical index</a></li><li><a class="page-menu-link" href="ref_builtins_string.html" data-menu-target="ref_builtins_string">Built-ins for strings</a><ul><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_boolean" data-menu-target="ref_bui
ltin_boolean">boolean</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_cap_first" data-menu-target="ref_builtin_cap_first">cap_first</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_capitalize" data-menu-target="ref_builtin_capitalize">capitalize</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_chop_linebreak" data-menu-target="ref_builtin_chop_linebreak">chop_linebreak</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_contains" data-menu-target="ref_builtin_contains">contains</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_string_date" data-menu-target="ref_builtin_string_date">date, time, datetime</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_ends_with" data-menu-target="ref_builtin_ends_with">ends_with</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_ensure
_ends_with" data-menu-target="ref_builtin_ensure_ends_with">ensure_ends_with</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_ensure_starts_with" data-menu-target="ref_builtin_ensure_starts_with">ensure_starts_with</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_esc" data-menu-target="ref_builtin_esc">esc</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_groups" data-menu-target="ref_builtin_groups">groups</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_html" data-menu-target="ref_builtin_html">html (deprecated)</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_index_of" data-menu-target="ref_builtin_index_of">index_of</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_j_string" data-menu-target="ref_builtin_j_string">j_string</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#r
ef_builtin_js_string" data-menu-target="ref_builtin_js_string">js_string</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_json_string" data-menu-target="ref_builtin_json_string">json_string</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_keep_after" data-menu-target="ref_builtin_keep_after">keep_after</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_keep_after_last" data-menu-target="ref_builtin_keep_after_last">keep_after_last</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_keep_before" data-menu-target="ref_builtin_keep_before">keep_before</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_keep_before_last" data-menu-target="ref_builtin_keep_before_last">keep_before_last</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_last_index_of" data-menu-target="ref_builtin_last_index_of">last_index_of<
/a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_left_pad" data-menu-target="ref_builtin_left_pad">left_pad</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_length" data-menu-target="ref_builtin_length">length</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_lower_case" data-menu-target="ref_builtin_lower_case">lower_case</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_matches" data-menu-target="ref_builtin_matches">matches</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_no_esc" data-menu-target="ref_builtin_no_esc">no_esc</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_number" data-menu-target="ref_builtin_number">number</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_replace" data-menu-target="ref_builtin_replace">replace</a></li><li><a class="page-menu-lin
k" href="ref_builtins_string.html#ref_builtin_right_pad" data-menu-target="ref_builtin_right_pad">right_pad</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_remove_beginning" data-menu-target="ref_builtin_remove_beginning">remove_beginning</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_remove_ending" data-menu-target="ref_builtin_remove_ending">remove_ending</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_rtf" data-menu-target="ref_builtin_rtf">rtf (deprecated)</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_split" data-menu-target="ref_builtin_split">split</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_starts_with" data-menu-target="ref_builtin_starts_with">starts_with</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_string_for_string" data-menu-target="ref_builtin_string_for_string">str
ing (when used with a string value)</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_substring" data-menu-target="ref_builtin_substring">substring (deprecated)</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_trim" data-menu-target="ref_builtin_trim">trim</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_uncap_first" data-menu-target="ref_builtin_uncap_first">uncap_first</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_upper_case" data-menu-target="ref_builtin_upper_case">upper_case</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_url" data-menu-target="ref_builtin_url">url</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_url_path" data-menu-target="ref_builtin_url_path">url_path</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_word_list" data-menu-target="ref_bui
ltin_word_list">word_list</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_xhtml" data-menu-target="ref_builtin_xhtml">xhtml (deprecated)</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_xml" data-menu-target="ref_builtin_xml">xml (deprecated)</a></li><li><a class="page-menu-link" href="ref_builtins_string.html#ref_builtin_string_flags" data-menu-target="ref_builtin_string_flags">Common flags</a></li></ul></li><li><a class="page-menu-link" href="ref_builtins_number.html" data-menu-target="ref_builtins_number">Built-ins for numbers</a><ul><li><a class="page-menu-link" href="ref_builtins_number.html#ref_builtin_abs" data-menu-target="ref_builtin_abs">abs</a></li><li><a class="page-menu-link" href="ref_builtins_number.html#ref_builtin_c" data-menu-target="ref_builtin_c">c (when used with numerical value)</a></li><li><a class="page-menu-link" href="ref_builtins_number.html#ref_builtin_is_infinite" data-menu-target="ref_buil
tin_is_infinite">is_infinite</a></li><li><a class="page-menu-link" href="ref_builtins_number.html#ref_builtin_is_nan" data-menu-target="ref_builtin_is_nan">is_nan</a></li><li><a class="page-menu-link" href="ref_builtins_number.html#ref_builtin_lower_abc" data-menu-target="ref_builtin_lower_abc">lower_abc</a></li><li><a class="page-menu-link" href="ref_builtins_number.html#ref_builtin_rounding" data-menu-target="ref_builtin_rounding">round, floor, ceiling</a></li><li><a class="page-menu-link" href="ref_builtins_number.html#ref_builtin_string_for_number" data-menu-target="ref_builtin_string_for_number">string (when used with a numerical value)</a></li><li><a class="page-menu-link" href="ref_builtins_number.html#ref_builtin_upper_abc" data-menu-target="ref_builtin_upper_abc">upper_abc</a></li></ul></li><li><a class="page-menu-link" href="ref_builtins_date.html" data-menu-target="ref_builtins_date">Built-ins for date/time/date-time values</a><ul><li><a class="page-menu-link" href="ref_b
uiltins_date.html#ref_builtin_date_datetype" data-menu-target="ref_builtin_date_datetype">date, time, datetime (when used with a date/time/date-time
+value)</a></li><li><a class="page-menu-link" href="ref_builtins_date.html#ref_builtin_date_if_unknown" data-menu-target="ref_builtin_date_if_unknown">date_if_unknown, time_if_unknown, datetime_if_unknown</a></li><li><a class="page-menu-link" href="ref_builtins_date.html#ref_builtin_date_iso" data-menu-target="ref_builtin_date_iso">iso_...</a></li><li><a class="page-menu-link" href="ref_builtins_date.html#ref_builtin_string_for_date" data-menu-target="ref_builtin_string_for_date">string (when used with a date/time/date-time value)</a></li></ul></li><li><a class="page-menu-link" href="ref_builtins_boolean.html" data-menu-target="ref_builtins_boolean">Built-ins for booleans</a><ul><li><a class="page-menu-link" href="ref_builtins_boolean.html#ref_builtin_c_boolean" data-menu-target="ref_builtin_c_boolean">c (when used with boolean)</a></li><li><a class="page-menu-link" href="ref_builtins_boolean.html#ref_builtin_string_for_boolean" data-menu-target="ref_builtin_string_for_boolean">strin
g (when used with a boolean value)</a></li><li><a class="page-menu-link" href="ref_builtins_boolean.html#ref_builtin_then" data-menu-target="ref_builtin_then">then</a></li></ul></li><li><a class="page-menu-link" href="ref_builtins_sequence.html" data-menu-target="ref_builtins_sequence">Built-ins for sequences</a><ul><li><a class="page-menu-link" href="ref_builtins_sequence.html#ref_builtin_chunk" data-menu-target="ref_builtin_chunk">chunk</a></li><li><a class="page-menu-link" href="ref_builtins_sequence.html#ref_builtin_first" data-menu-target="ref_builtin_first">first</a></li><li><a class="page-menu-link" href="ref_builtins_sequence.html#ref_builtin_join" data-menu-target="ref_builtin_join">join</a></li><li><a class="page-menu-link" href="ref_builtins_sequence.html#ref_builtin_last" data-menu-target="ref_builtin_last">last</a></li><li><a class="page-menu-link" href="ref_builtins_sequence.html#ref_builtin_reverse" data-menu-target="ref_builtin_reverse">reverse</a></li><li><a class="
page-menu-link" href="ref_builtins_sequence.html#ref_builtin_seq_contains" data-menu-target="ref_builtin_seq_contains">seq_contains</a></li><li><a class="page-menu-link" href="ref_builtins_sequence.html#ref_builtin_seq_index_of" data-menu-target="ref_builtin_seq_index_of">seq_index_of</a></li><li><a class="page-menu-link" href="ref_builtins_sequence.html#ref_builtin_seq_last_index_of" data-menu-target="ref_builtin_seq_last_index_of">seq_last_index_of</a></li><li><a class="page-menu-link" href="ref_builtins_sequence.html#ref_builtin_size" data-menu-target="ref_builtin_size">size</a></li><li><a class="page-menu-link" href="ref_builtins_sequence.html#ref_builtin_sort" data-menu-target="ref_builtin_sort">sort</a></li><li><a class="page-menu-link" href="ref_builtins_sequence.html#ref_builtin_sort_by" data-menu-target="ref_builtin_sort_by">sort_by</a></li></ul></li><li><a class="page-menu-link" href="ref_builtins_hash.html" data-menu-target="ref_builtins_hash">Built-ins for hashes</a><ul>
<li><a class="page-menu-link" href="ref_builtins_hash.html#ref_builtin_keys" data-menu-target="ref_builtin_keys">keys</a></li><li><a class="page-menu-link" href="ref_builtins_hash.html#ref_builtin_values" data-menu-target="ref_builtin_values">values</a></li></ul></li><li><a class="page-menu-link" href="ref_builtins_node.html" data-menu-target="ref_builtins_node">Built-ins for nodes (for XML)</a><ul><li><a class="page-menu-link" href="ref_builtins_node.html#ref_builtin_ancestors" data-menu-target="ref_builtin_ancestors">ancestors</a></li><li><a class="page-menu-link" href="ref_builtins_node.html#ref_builtin_children" data-menu-target="ref_builtin_children">children</a></li><li><a class="page-menu-link" href="ref_builtins_node.html#ref_builtin_node_name" data-menu-target="ref_builtin_node_name">node_name</a></li><li><a class="page-menu-link" href="ref_builtins_node.html#ref_builtin_next_sibling" data-menu-target="ref_builtin_next_sibling">next_sibling</a></li><li><a class="page-menu-l
ink" href="ref_builtins_node.html#ref_builtin_node_namespace" data-menu-target="ref_builtin_node_namespace">node_namespace</a></li><li><a class="page-menu-link" href="ref_builtins_node.html#ref_builtin_node_type" data-menu-target="ref_builtin_node_type">node_type</a></li><li><a class="page-menu-link" href="ref_builtins_node.html#ref_builtin_parent" data-menu-target="ref_builtin_parent">parent</a></li><li><a class="page-menu-link" href="ref_builtins_node.html#ref_builtin_previous_sibling" data-menu-target="ref_builtin_previous_sibling">previous_sibling</a></li><li><a class="page-menu-link" href="ref_builtins_node.html#ref_builtin_root" data-menu-target="ref_builtin_root">root</a></li></ul></li><li><a class="page-menu-link" href="ref_builtins_loop_var.html" data-menu-target="ref_builtins_loop_var">Loop variable built-ins</a><ul><li><a class="page-menu-link" href="ref_builtins_loop_var.html#ref_builtin_counter" data-menu-target="ref_builtin_counter">counter</a></li><li><a class="page-m
enu-link" href="ref_builtins_loop_var.html#ref_builtin_has_next" data-menu-target="ref_builtin_has_next">has_next</a></li><li><a class="page-menu-link" href="ref_builtins_loop_var.html#ref_builtin_index" data-menu-target="ref_builtin_index">index</a></li><li><a class="page-menu-link" href="ref_builtins_loop_var.html#ref_builtin_is_even_item" data-menu-target="ref_builtin_is_even_item">is_even_item</a></li><li><a class="page-menu-link" href="ref_builtins_loop_var.html#ref_builtin_is_first" data-menu-target="ref_builtin_is_first">is_first</a></li><li><a class="page-menu-link" href="ref_builtins_loop_var.html#ref_builtin_is_last" data-menu-target="ref_builtin_is_last">is_last</a></li><li><a class="page-menu-link" href="ref_builtins_loop_var.html#ref_builtin_is_odd_item" data-menu-target="ref_builtin_is_odd_item">is_odd_item</a></li><li><a class="page-menu-link" href="ref_builtins_loop_var.html#ref_builtin_item_cycle" data-menu-target="ref_builtin_item_cycle">item_cycle</a></li><li><a c
lass="page-menu-link" href="ref_builtins_loop_var.html#ref_builtin_item_parity" data-menu-target="ref_builtin_item_parity">item_parity</a></li><li><a class="page-menu-link" href="ref_builtins_loop_var.html#ref_builtin_item_parity_cap" data-menu-target="ref_builtin_item_parity_cap">item_parity_cap</a></li></ul></li><li><a class="page-menu-link" href="ref_builtins_type_independent.html" data-menu-target="ref_builtins_type_independent">Type independent built-ins</a><ul><li><a class="page-menu-link" href="ref_builtins_type_independent.html#ref_builtin_switch" data-menu-target="ref_builtin_switch">switch</a></li></ul></li><li><a class="page-menu-link" href="ref_builtins_expert.html" data-menu-target="ref_builtins_expert">Seldom used and expert built-ins</a><ul><li><a class="page-menu-link" href="ref_builtins_expert.html#ref_buitin_api_and_has_api" data-menu-target="ref_buitin_api_and_has_api">api, has_api</a></li><li><a class="page-menu-link" href="ref_builtins_expert.html#ref_builtin_nu
mType" data-menu-target="ref_builtin_numType">byte, double, float, int, long, short</a></li><li><a class="page-menu-link" href="ref_builtins_expert.html#ref_builtin_eval" data-menu-target="ref_builtin_eval">eval</a></li><li><a class="page-menu-link" href="ref_builtins_expert.html#ref_builtin_has_content" data-menu-target="ref_builtin_has_content">has_content</a></li><li><a class="page-menu-link" href="ref_builtins_expert.html#ref_builtin_interpret" data-menu-target="ref_builtin_interpret">interpret</a></li><li><a class="page-menu-link" href="ref_builtins_expert.html#ref_builtin_isType" data-menu-target="ref_builtin_isType">is_...</a></li><li><a class="page-menu-link" href="ref_builtins_expert.html#ref_builtin_markup_string" data-menu-target="ref_builtin_markup_string">markup_string</a></li><li><a class="page-menu-link" href="ref_builtins_expert.html#ref_builtin_namespace" data-menu-target="ref_builtin_namespace">namespace</a></li><li><a class="page-menu-link" href="ref_builtins_expe
rt.html#ref_builtin_new" data-menu-target="ref_builtin_new">new</a></li><li><a class="page-menu-link" href="ref_builtins_expert.html#ref_builtin_numToDate" data-menu-target="ref_builtin_numToDate">number_to_date, number_to_time, number_to_datetime</a></li></ul></li></ul></li><li><a class="page-menu-link" href="ref_directives.html" data-menu-target="ref_directives">Directive Reference</a><ul><li><a class="page-menu-link" href="ref_directive_alphaidx.html" data-menu-target="ref_directive_alphaidx">Alphabetical index</a></li><li><a class="page-menu-link" href="ref_directive_assign.html" data-menu-target="ref_directive_assign">assign</a><ul><li><a class="page-menu-link" href="ref_directive_assign.html#autoid_76" data-menu-target="autoid_76">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_assign.html#autoid_77" data-menu-target="autoid_77">Description</a></li></ul></li><li><a class="page-menu-link" href="ref_directive_attempt.html" data-menu-target="ref_directive_attem
pt">attempt, recover</a><ul><li><a class="page-menu-link" href="ref_directive_attempt.html#autoid_78" data-menu-target="autoid_78">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_attempt.html#autoid_79" data-menu-target="autoid_79">Description</a></li></ul></li><li><a class="page-menu-link" href="ref_directive_autoesc.html" data-menu-target="ref_directive_autoesc">autoesc</a><ul><li><a class="page-menu-link" href="ref_directive_autoesc.html#autoid_80" data-menu-target="autoid_80">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_autoesc.html#autoid_81" data-menu-target="autoid_81">Description</a></li></ul></li><li><a class="page-menu-link" href="ref_directive_compress.html" data-menu-target="ref_directive_compress">compress</a><ul><li><a class="page-menu-link" href="ref_directive_compress.html#autoid_82" data-menu-target="autoid_82">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_compress.html#autoid_83" data-menu-target="autoid
_83">Description</a></li></ul></li><li><a class="page-menu-link" href="ref_directive_escape.html" data-menu-target="ref_directive_escape">escape, noescape (deprecated)</a><ul><li><a class="page-menu-link" href="ref_directive_escape.html#autoid_84" data-menu-target="autoid_84">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_escape.html#autoid_85" data-menu-target="autoid_85">Description</a></li></ul></li><li><a class="page-menu-link" href="ref_directive_flush.html" data-menu-target="ref_directive_flush">flush</a><ul><li><a class="page-menu-link" href="ref_directive_flush.html#autoid_86" data-menu-target="autoid_86">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_flush.html#autoid_87" data-menu-target="autoid_87">Description</a></li></ul></li><li><a class="page-menu-link" href="ref_directive_ftl.html" data-menu-target="ref_directive_ftl">ftl</a><ul><li><a class="page-menu-link" href="ref_directive_ftl.html#autoid_88" data-menu-target="autoid_88">S
ynopsis</a></li><li><a class="page-menu-link" href="ref_directive_ftl.html#autoid_89" data-menu-target="autoid_89">Description</a></li></ul></li><li><a class="page-menu-link" href="ref_directive_function.html" data-menu-target="ref_directive_function">function, return</a><ul><li><a class="page-menu-link" href="ref_directive_function.html#autoid_90" data-menu-target="autoid_90">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_function.html#autoid_91" data-menu-target="autoid_91">Description</a></li></ul></li><li><a class="page-menu-link" href="ref_directive_global.html" data-menu-target="ref_directive_global">global</a><ul><li><a class="page-menu-link" href="ref_directive_global.html#autoid_92" data-menu-target="autoid_92">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_global.html#autoid_93" data-menu-target="autoid_93">Description</a></li></ul></li><li><a class="page-menu-link" href="ref_directive_if.html" data-menu-target="ref_directive_if">if,
else, elseif</a><ul><li><a class="page-menu-link" href="ref_directive_if.html#autoid_94" data-menu-target="autoid_94">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_if.html#autoid_95" data-menu-target="autoid_95">Description</a></li></ul></li><li><a class="page-menu-link" href="ref_directive_import.html" data-menu-target="ref_directive_import">import</a><ul><li><a class="page-menu-link" href="ref_directive_import.html#autoid_96" data-menu-target="autoid_96">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_import.html#autoid_97" data-menu-target="autoid_97">Description</a></li></ul></li><li><a class="page-menu-link" href="ref_directive_include.html" data-menu-target="ref_directive_include">include</a><ul><li><a class="page-menu-link" href="ref_directive_include.html#autoid_98" data-menu-target="autoid_98">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_include.html#autoid_99" data-menu-target="autoid_99">Description</a><ul><li
><a class="page-menu-link" href="ref_directive_include.html#ref_directive_include_acquisition" data-menu-target="ref_directive_include_acquisition">Using acquisition</a></li><li><a class="page-menu-link" href="ref_directive_include.html#ref_directive_include_localized" data-menu-target="ref_directive_include_localized">Localized lookup</a></li></ul></li></ul></li><li><a class="page-menu-link" href="ref_directive_list.html" data-menu-target="ref_directive_list">list, else, items, sep, break</a><ul><li><a class="page-menu-link" href="ref_directive_list.html#autoid_100" data-menu-target="autoid_100">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_list.html#autoid_101" data-menu-target="autoid_101">Description</a><ul><li><a class="page-menu-link" href="ref_directive_list.html#autoid_102" data-menu-target="autoid_102">Simplest form</a></li><li><a class="page-menu-link" href="ref_directive_list.html#autoid_103" data-menu-target="autoid_103">else directive</a></li><li><a
class="page-menu-link" href="ref_directive_list.html#autoid_104" data-menu-target="autoid_104">items directive</a></li><li><a class="page-menu-link" href="ref_directive_list.html#autoid_105" data-menu-target="autoid_105">sep directive</a></li><li><a class="page-menu-link" href="ref_directive_list.html#autoid_106" data-menu-target="autoid_106">break directive</a></li><li><a class="page-menu-link" href="ref_directive_list.html#autoid_107" data-menu-target="autoid_107">Accessing iteration state</a></li><li><a class="page-menu-link" href="ref_directive_list.html#autoid_108" data-menu-target="autoid_108">Nesting loops into each other</a></li><li><a class="page-menu-link" href="ref_directive_list.html#autoid_109" data-menu-target="autoid_109">Notes for Java programmers</a></li></ul></li></ul></li><li><a class="page-menu-link" href="ref_directive_local.html" data-menu-target="ref_directive_local">local</a><ul><li><a class="page-menu-link" href="ref_directive_local.html#autoid_110" data-me
nu-target="autoid_110">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_local.html#autoid_111" data-menu-target="autoid_111">Description</a></li></ul></li><li><a class="page-menu-link" href="ref_directive_macro.html" data-menu-target="ref_directive_macro">macro, nested, return</a><ul><li><a class="page-menu-link" href="ref_directive_macro.html#autoid_112" data-menu-target="autoid_112">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_macro.html#autoid_113" data-menu-target="autoid_113">Description</a><ul><li><a class="page-menu-link" href="ref_directive_macro.html#autoid_114" data-menu-target="autoid_114">nested</a></li><li><a class="page-menu-link" href="ref_directive_macro.html#autoid_115" data-menu-target="autoid_115">return</a></li></ul></li></ul></li><li><a class="page-menu-link" href="ref_directive_noautoesc.html" data-menu-target="ref_directive_noautoesc">noautoesc</a><ul><li><a class="page-menu-link" href="ref_directive_noautoesc.html#autoi
d_116" data-menu-target="autoid_116">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_noautoesc.html#autoid_117" data-menu-target="autoid_117">Description</a></li></ul></li><li><a class="page-menu-link" href="ref_directive_noparse.html" data-menu-target="ref_directive_noparse">noparse</a><ul><li><a class="page-menu-link" href="ref_directive_noparse.html#autoid_118" data-menu-target="autoid_118">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_noparse.html#autoid_119" data-menu-target="autoid_119">Description</a></li></ul></li><li><a class="page-menu-link" href="ref_directive_nt.html" data-menu-target="ref_directive_nt">nt</a><ul><li><a class="page-menu-link" href="ref_directive_nt.html#autoid_120" data-menu-target="autoid_120">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_nt.html#autoid_121" data-menu-target="autoid_121">Description</a></li></ul></li><li><a class="page-menu-link" href="ref_directive_outputformat.html" data-men
u-target="ref_directive_outputformat">outputformat</a><ul><li><a class="page-menu-link" href="ref_directive_outputformat.html#autoid_122" data-menu-target="autoid_122">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_outputformat.html#autoid_123" data-menu-target="autoid_123">Description</a></li></ul></li><li><a class="page-menu-link" href="ref_directive_setting.html" data-menu-target="ref_directive_setting">setting</a><ul><li><a class="page-menu-link" href="ref_directive_setting.html#autoid_124" data-menu-target="autoid_124">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_setting.html#autoid_125" data-menu-target="autoid_125">Description</a></li></ul></li><li><a class="page-menu-link" href="ref_directive_stop.html" data-menu-target="ref_directive_stop">stop</a><ul><li><a class="page-menu-link" href="ref_directive_stop.html#autoid_126" data-menu-target="autoid_126">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_stop.html#autoi
d_127" data-menu-target="autoid_127">Description</a></li></ul></li><li><a class="page-menu-link" href="ref_directive_switch.html" data-menu-target="ref_directive_switch">switch, case, default, break</a><ul><li><a class="page-menu-link" href="ref_directive_switch.html#autoid_128" data-menu-target="autoid_128">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_switch.html#autoid_129" data-menu-target="autoid_129">Description</a></li></ul></li><li><a class="page-menu-link" href="ref_directive_t.html" data-menu-target="ref_directive_t">t, lt, rt</a><ul><li><a class="page-menu-link" href="ref_directive_t.html#autoid_130" data-menu-target="autoid_130">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_t.html#autoid_131" data-menu-target="autoid_131">Description</a></li></ul></li><li><a class="page-menu-link" href="ref_directive_userDefined.html" data-menu-target="ref_directive_userDefined">User-defined directive (<@...>)</a><ul><li><a class="page-menu
-link" href="ref_directive_userDefined.html#autoid_132" data-menu-target="autoid_132">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_userDefined.html#autoid_133" data-menu-target="autoid_133">Description</a><ul><li><a class="page-menu-link" href="ref_directive_userDefined.html#ref_directive_userDefined_entTag" data-menu-target="ref_directive_userDefined_entTag">End-tag</a></li><li><a class="page-menu-link" href="ref_directive_userDefined.html#ref_directive_userDefined_loopVar" data-menu-target="ref_directive_userDefined_loopVar">Loop variables</a></li><li><a class="page-menu-link" href="ref_directive_userDefined.html#ref_directive_userDefined_positionalParam" data-menu-target="ref_directive_userDefined_positionalParam">Positional parameter passing</a></li></ul></li></ul></li><li><a class="page-menu-link" href="ref_directive_visit.html" data-menu-target="ref_directive_visit">visit, recurse, fallback</a><ul><li><a class="page-menu-link" href="ref_directive_visit.ht
ml#autoid_134" data-menu-target="autoid_134">Synopsis</a></li><li><a class="page-menu-link" href="ref_directive_visit.html#autoid_135" data-menu-target="autoid_135">Description</a><ul><li><a class="page-menu-link" href="ref_directive_visit.html#autoid_136" data-menu-target="autoid_136">Visit</a></li><li><a class="page-menu-link" href="ref_directive_visit.html#autoid_137" data-menu-target="autoid_137">Recurse</a></li><li><a class="page-menu-link" href="ref_directive_visit.html#autoid_138" data-menu-target="autoid_138">Fallback</a></li></ul></li></ul></li></ul></li><li><a class="page-menu-link" href="ref_specvar.html" data-menu-target="ref_specvar">Special Variable Reference</a></li><li><a class="page-menu-link" href="ref_reservednames.html" data-menu-target="ref_reservednames">Reserved names in FTL</a></li><li><a class="page-menu-link" href="ref_deprecated.html" data-menu-target="ref_deprecated">Deprecated FTL constructs</a><ul><li><a class="page-menu-link" href="ref_depr_directive.h
tml" data-menu-target="ref_depr_directive">List of deprecated directives</a></li><li><a class="page-menu-link" href="ref_depr_builtin.html" data-menu-target="ref_depr_builtin">List of deprecated built-ins</a></li><li><a class="page-menu-link" href="ref_depr_oldmacro.html" data-menu-target="ref_depr_oldmacro">Old-style macro and call directives</a><ul><li><a class="page-menu-link" href="ref_depr_oldmacro.html#autoid_139" data-menu-target="autoid_139">Synopsis</a></li><li><a class="page-menu-link" href="ref_depr_oldmacro.html#autoid_140" data-menu-target="autoid_140">Description</a></li></ul></li><li><a class="page-menu-link" href="ref_depr_transform.html" data-menu-target="ref_depr_transform">Transform directive</a><ul><li><a class="page-menu-link" href="ref_depr_transform.html#autoid_141" data-menu-target="autoid_141">Synopsis</a></li><li><a class="page-menu-link" href="ref_depr_transform.html#autoid_142" data-menu-target="autoid_142">Description</a></li></ul></li><li><a class="page
-menu-link" href="ref_depr_oldsyntax.html" data-menu-target="ref_depr_oldsyntax">Old FTL syntax</a></li><li><a class="page-menu-link" href="ref_depr_numerical_interpolation.html" data-menu-target="ref_depr_numerical_interpolation">#{...}: Numerical interpolation</a><ul><li><a class="page-menu-link" href="ref_depr_numerical_interpolation.html#autoid_143" data-menu-target="autoid_143">Synopsis</a></li><li><a class="page-menu-link" href="ref_depr_numerical_interpolation.html#autoid_144" data-menu-target="autoid_144">Description</a></li></ul></li></ul></li></ul></li><li><a class="page-menu-link" href="xgui.html" data-menu-target="xgui">XML Processing Guide</a><ul><li><a class="page-menu-link" href="xgui_preface.html" data-menu-target="xgui_preface">Preface</a></li><li><a class="page-menu-link" href="xgui_expose.html" data-menu-target="xgui_expose">Exposing XML documents</a><ul><li><a class="page-menu-link" href="xgui_expose_dom.html" data-menu-target="xgui_expose_dom">The DOM tree</a></
li><li><a class="page-menu-link" href="xgui_expose_put.html" data-menu-target="xgui_expose_put">Putting the XML into the data-model</a></li></ul></li><li><a class="page-menu-link" href="xgui_imperative.html" data-menu-target="xgui_imperative">Imperative XML processing</a><ul><li><a class="page-menu-link" href="xgui_imperative_learn.html" data-menu-target="xgui_imperative_learn">Basics</a><ul><li><a class="page-menu-link" href="xgui_imperative_learn.html#autoid_145" data-menu-target="autoid_145">Accessing elements by name</a></li><li><a class="page-menu-link" href="xgui_imperative_learn.html#autoid_146" data-menu-target="autoid_146">Accessing attributes</a></li><li><a class="page-menu-link" href="xgui_imperative_learn.html#autoid_147" data-menu-target="autoid_147">Exploring the tree</a></li><li><a class="page-menu-link" href="xgui_imperative_learn.html#autoid_148" data-menu-target="autoid_148">Using XPath expressions</a></li><li><a class="page-menu-link" href="xgui_imperative_learn.h
tml#autoid_149" data-menu-target="autoid_149">XML namespaces</a></li><li><a class="page-menu-link" href="xgui_imperative_learn.html#autoid_150" data-menu-target="autoid_150">Don't forget escaping!</a></li></ul></li><li><a class="page-menu-link" href="xgui_imperative_formal.html" data-menu-target="xgui_imperative_formal">Details</a><ul><li><a class="page-menu-link" href="xgui_imperative_formal.html#autoid_151" data-menu-target="autoid_151">Node sequences</a></li></ul></li></ul></li><li><a class="page-menu-link" href="xgui_declarative.html" data-menu-target="xgui_declarative">Declarative XML processing</a><ul><li><a class="page-menu-link" href="xgui_declarative_basics.html" data-menu-target="xgui_declarative_basics">Basics</a></li><li><a class="page-menu-link" href="xgui_declarative_details.html" data-menu-target="xgui_declarative_details">Details</a><ul><li><a class="page-menu-link" href="xgui_declarative_details.html#autoid_152" data-menu-target="autoid_152">Default handlers</a>
</li><li><a class="page-menu-link" href="xgui_declarative_details.html#autoid_153" data-menu-target="autoid_153">Visiting a single node</a></li><li><a class="page-menu-link" href="xgui_declarative_details.html#autoid_154" data-menu-target="autoid_154">XML namespaces</a></li></ul></li></ul></li></ul></li><li><a class="page-menu-link" href="app.html" data-menu-target="app">Appendixes</a><ul><li><a class="page-menu-link" href="app_faq.html" data-menu-target="app_faq">FAQ</a></li><li><a class="page-menu-link" href="app_versions.html" data-menu-target="app_versions">Version history</a><ul><li><a class="page-menu-link" href="versions_2_3_26.html" data-menu-target="versions_2_3_26">2.3.26 (incubating at Apache)</a><ul><li><a class="page-menu-link" href="versions_2_3_26.html#autoid_155" data-menu-target="autoid_155">Changes on the FTL side</a></li><li><a class="page-menu-link" href="versions_2_3_26.html#autoid_156" data-menu-target="autoid_156">Changes on the Java side</a></li><li><a class=
"page-menu-link" href="versions_2_3_26.html#autoid_157" data-menu-target="autoid_157">Other changes</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_25.html" data-menu-target="versions_2_3_25">2.3.25 (incubating at Apache)</a><ul><li><a class="page-menu-link" href="versions_2_3_25.html#autoid_158" data-menu-target="autoid_158">Changes on the FTL side</a></li><li><a class="page-menu-link" href="versions_2_3_25.html#autoid_159" data-menu-target="autoid_159">Changes on the Java side</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_24.html" data-menu-target="versions_2_3_24">2.3.24 (incubating at Apache)</a><ul><li><a class="page-menu-link" href="versions_2_3_24.html#autoid_160" data-menu-target="autoid_160">Legal changes</a></li><li><a class="page-menu-link" href="versions_2_3_24.html#autoid_161" data-menu-target="autoid_161">Changes on the FTL side</a></li><li><a class="page-menu-link" href="versions_2_3_24.html#autoid_162" data-menu-target="autoid_
162">Changes on the Java side</a></li><li><a class="page-menu-link" href="versions_2_3_24.html#autoid_163" data-menu-target="autoid_163">Changes compared to 2.3.24 Release Candidate 1</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_23.html" data-menu-target="versions_2_3_23">2.3.23</a><ul><li><a class="page-menu-link" href="versions_2_3_23.html#autoid_164" data-menu-target="autoid_164">Changes on the FTL side</a></li><li><a class="page-menu-link" href="versions_2_3_23.html#autoid_165" data-menu-target="autoid_165">Changes on the Java side</a></li><li><a class="page-menu-link" href="versions_2_3_23.html#autoid_166" data-menu-target="autoid_166">Other changes</a></li><li><a class="page-menu-link" href="versions_2_3_23.html#autoid_167" data-menu-target="autoid_167">Notes</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_22.html" data-menu-target="versions_2_3_22">2.3.22</a><ul><li><a class="page-menu-link" href="versions_2_3_22.html#autoid_168" data-
menu-target="autoid_168">Changes on the FTL side</a></li><li><a class="page-menu-link" href="versions_2_3_22.html#autoid_169" data-menu-target="autoid_169">Changes on the Java side</a></li><li><a class="page-menu-link" href="versions_2_3_22.html#autoid_170" data-menu-target="autoid_170">Notes</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_21.html" data-menu-target="versions_2_3_21">2.3.21</a><ul><li><a class="page-menu-link" href="versions_2_3_21.html#autoid_171" data-menu-target="autoid_171">Changes on the FTL side</a></li><li><a class="page-menu-link" href="versions_2_3_21.html#autoid_172" data-menu-target="autoid_172">Changes on the Java side</a></li><li><a class="page-menu-link" href="versions_2_3_21.html#autoid_173" data-menu-target="autoid_173">Other changes</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_20.html" data-menu-target="versions_2_3_20">2.3.20</a><ul><li><a class="page-menu-link" href="versions_2_3_20.html#autoid_174" data-men
u-target="autoid_174">Changes on the FTL side</a></li><li><a class="page-menu-link" href="versions_2_3_20.html#autoid_175" data-menu-target="autoid_175">Changes on the Java side</a></li><li><a class="page-menu-link" href="versions_2_3_20.html#autoid_176" data-menu-target="autoid_176">Other changes</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_19.html" data-menu-target="versions_2_3_19">2.3.19</a><ul><li><a class="page-menu-link" href="versions_2_3_19.html#autoid_177" data-menu-target="autoid_177">Changes on the FTL side</a></li><li><a class="page-menu-link" href="versions_2_3_19.html#autoid_178" data-menu-target="autoid_178">Changes on the Java side</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_18.html" data-menu-target="versions_2_3_18">2.3.18</a><ul><li><a class="page-menu-link" href="versions_2_3_18.html#autoid_179" data-menu-target="autoid_179">Changes on the Java side</a></li><li><a class="page-menu-link" href="versions_2_3_18.html#auto
id_180" data-menu-target="autoid_180">Other changes</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_17.html" data-menu-target="versions_2_3_17">2.3.17</a><ul><li><a class="page-menu-link" href="versions_2_3_17.html#autoid_181" data-menu-target="autoid_181">Changes on the FTL side</a></li><li><a class="page-menu-link" href="versions_2_3_17.html#autoid_182" data-menu-target="autoid_182">Changes on the Java side</a></li><li><a class="page-menu-link" href="versions_2_3_17.html#autoid_183" data-menu-target="autoid_183">Other changes</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_16.html" data-menu-target="versions_2_3_16">2.3.16</a><ul><li><a class="page-menu-link" href="versions_2_3_16.html#autoid_184" data-menu-target="autoid_184">Changes on the Java side</a></li><li><a class="page-menu-link" href="versions_2_3_16.html#autoid_185" data-menu-target="autoid_185">Changes on the FTL side</a></li></ul></li><li><a class="page-menu-link" href="versions_2
_3_15.html" data-menu-target="versions_2_3_15">2.3.15</a><ul><li><a class="page-menu-link" href="versions_2_3_15.html#autoid_186" data-menu-target="autoid_186">Changes on the FTL side</a></li><li><a class="page-menu-link" href="versions_2_3_15.html#autoid_187" data-menu-target="autoid_187">Changes on the Java side</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_14.html" data-menu-target="versions_2_3_14">2.3.14</a><ul><li><a class="page-menu-link" href="versions_2_3_14.html#autoid_188" data-menu-target="autoid_188">Changes on the FTL side</a></li><li><a class="page-menu-link" href="versions_2_3_14.html#autoid_189" data-menu-target="autoid_189">Changes on the Java side</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_13.html" data-menu-target="versions_2_3_13">2.3.13</a><ul><li><a class="page-menu-link" href="versions_2_3_13.html#autoid_190" data-menu-target="autoid_190">Changes on the FTL side</a></li><li><a class="page-menu-link" href="versions_
2_3_13.html#autoid_191" data-menu-target="autoid_191">Changes on the Java side</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_12.html" data-menu-target="versions_2_3_12">2.3.12</a><ul><li><a class="page-menu-link" href="versions_2_3_12.html#autoid_192" data-menu-target="autoid_192">Changes on the Java side</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_11.html" data-menu-target="versions_2_3_11">2.3.11</a><ul><li><a class="page-menu-link" href="versions_2_3_11.html#autoid_193" data-menu-target="autoid_193">Changes on the FTL side</a></li><li><a class="page-menu-link" href="versions_2_3_11.html#autoid_194" data-menu-target="autoid_194">Changes on the Java side</a></li><li><a class="page-menu-link" href="versions_2_3_11.html#autoid_195" data-menu-target="autoid_195">Documentation changes</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_10.html" data-menu-target="versions_2_3_10">2.3.10</a><ul><li><a class="page-menu-link" href=
"versions_2_3_10.html#autoid_196" data-menu-target="autoid_196">Changes on the Java side</a></li><li><a class="page-menu-link" href="versions_2_3_10.html#autoid_197" data-menu-target="autoid_197">Changes on the FTL side</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_9.html" data-menu-target="versions_2_3_9">2.3.9</a><ul><li><a class="page-menu-link" href="versions_2_3_9.html#autoid_198" data-menu-target="autoid_198">Changes on the Java side</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_8.html" data-menu-target="versions_2_3_8">2.3.8</a><ul><li><a class="page-menu-link" href="versions_2_3_8.html#autoid_199" data-menu-target="autoid_199">Changes on the Java side</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_7.html" data-menu-target="versions_2_3_7">2.3.7</a><ul><li><a class="page-menu-link" href="versions_2_3_7.html#autoid_200" data-menu-target="autoid_200">Changes on the Java side</a></li><li><a class="page-menu-link" href
="versions_2_3_7.html#autoid_201" data-menu-target="autoid_201">Changes on the FTL side</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_7rc1.html" data-menu-target="versions_2_3_7rc1">2.3.7 RC1</a><ul><li><a class="page-menu-link" href="versions_2_3_7rc1.html#autoid_202" data-menu-target="autoid_202">Changes on the Java side</a></li><li><a class="page-menu-link" href="versions_2_3_7rc1.html#autoid_203" data-menu-target="autoid_203">Changes on the FTL side</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_6.html" data-menu-target="versions_2_3_6">2.3.6</a><ul><li><a class="page-menu-link" href="versions_2_3_6.html#autoid_204" data-menu-target="autoid_204">Changes on the Java side</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_5.html" data-menu-target="versions_2_3_5">2.3.5</a><ul><li><a class="page-menu-link" href="versions_2_3_5.html#autoid_205" data-menu-target="autoid_205">Changes on the FTL side</a></li><li><a class="page-me
nu-link" href="versions_2_3_5.html#autoid_206" data-menu-target="autoid_206">Changes on the Java side</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_4.html" data-menu-target="versions_2_3_4">2.3.4</a><ul><li><a class="page-menu-link" href="versions_2_3_4.html#autoid_207" data-menu-target="autoid_207">Changes on the FTL side</a></li><li><a class="page-menu-link" href="versions_2_3_4.html#autoid_208" data-menu-target="autoid_208">Changes on the Java side</a></li><li><a class="page-menu-link" href="versions_2_3_4.html#autoid_209" data-menu-target="autoid_209">Other changes</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_3.html" data-menu-target="versions_2_3_3">2.3.3</a><ul><li><a class="page-menu-link" href="versions_2_3_3.html#autoid_210" data-menu-target="autoid_210">Changes on the FTL side</a></li><li><a class="page-menu-link" href="versions_2_3_3.html#autoid_211" data-menu-target="autoid_211">Changes on the Java side</a></li><li><a class="pag
e-menu-link" href="versions_2_3_3.html#autoid_212" data-menu-target="autoid_212">Other changes</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_2.html" data-menu-target="versions_2_3_2">2.3.2</a><ul><li><a class="page-menu-link" href="versions_2_3_2.html#autoid_213" data-menu-target="autoid_213">Changes on the Java side</a></li></ul></li><li><a class="page-menu-link" href="versions_2_3_1.html" data-menu-target="versions_2_3_1">2.3.1</a><ul><li><a class="page-menu-link" href="versions_2_3_1.html#autoid_214" data-menu-target="autoid_214">Possible backward compatibility issue</a></li><li><a class="page-menu-link" href="versions_2_3_1.html#autoid_215" data-menu-target="autoid_215">Changes on the FTL side</a></li><li><a class="page-menu-link" href="versions_2_3_1.html#autoid_216" data-menu-target="autoid_216">Changes on the Java side</a></li><li><a class="page-menu-link" href="versions_2_3_1.html#autoid_217" data-menu-target="autoid_217">Other changes</a></li><li><a cla
ss="page-menu-link" href="versions_2_3_1.html#autoid_218" data-menu-target="autoid_218">The history of the releases before the final version</a><ul><li><a class="page-menu-link" href="versions_2_3_1.html#autoid_219" data-menu-target="autoid_219">Differences between the preview release and final
+release</a></li></ul></li></ul></li><li><a class="page-menu-link" href="versions_2_3.html" data-menu-target="versions_2_3">2.3</a><ul><li><a class="page-menu-link" href="versions_2_3.html#autoid_220" data-menu-target="autoid_220">Non backward-compatible changes!</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_221" data-menu-target="autoid_221">Changes on the FTL side</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_222" data-menu-target="autoid_222">Changes on the Java side</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_223" data-menu-target="autoid_223">Other changes</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_224" data-menu-target="autoid_224">The history of the releases before the final version</a><ul><li><a class="page-menu-link" href="versions_2_3.html#autoid_225" data-menu-target="autoid_225">Differences between the final release and Release Candidate
+4</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_226" data-menu-target="autoid_226">Differences between the Release Candidate 4 and Release
+Candidate 3</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_227" data-menu-target="autoid_227">Differences between the Release Candidate 3 and Release
+Candidate 2</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_228" data-menu-target="autoid_228">Differences between the Release Candidate 2 and Release
+Candidate 1</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_229" data-menu-target="autoid_229">Differences between the Release Candidate 1 and Preview 16
+releases</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_230" data-menu-target="autoid_230">Differences between the Preview 16 and Preview 15
+releases</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_231" data-menu-target="autoid_231">Differences between the Preview 15 and Preview 14
+releases</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_232" data-menu-target="autoid_232">Differences between the Preview 14 and Preview 13
+releases</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_233" data-menu-target="autoid_233">Differences between the Preview 13 and Preview 12
+releases</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_234" data-menu-target="autoid_234">Differences between the Preview 12 and Preview 11
+releases</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_235" data-menu-target="autoid_235">Differences between the Preview 11 and Preview 10
+releases</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_236" data-menu-target="autoid_236">Differences between the Preview 10 and Preview 9
+releases</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_237" data-menu-target="autoid_237">Differences between the Preview 9 and Preview 8
+releases</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_238" data-menu-target="autoid_238">Differences between the Preview 8 and Preview 7
+releases</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_239" data-menu-target="autoid_239">Differences between the Preview 7 and Preview 6
+releases</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_240" data-menu-target="autoid_240">Differences between the Preview 6 and Preview 5
+releases</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_241" data-menu-target="autoid_241">Differences between the Preview 5 and Preview 4
+releases</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_242" data-menu-target="autoid_242">Differences between the Preview 4 and Preview 3
+releases</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_243" data-menu-target="autoid_243">Differences between the Preview 3 and Preview 2
+releases</a></li><li><a class="page-menu-link" href="versions_2_3.html#autoid_244" data-menu-target="autoid_244">Differences between the Preview 2 and Preview 1
+releases</a></li></ul></li></ul></li><li><a class="page-menu-link" href="versions_2_2_8.html" data-menu-target="versions_2_2_8">2.2.8</a><ul><li><a class="page-menu-link" href="versions_2_2_8.html#autoid_245" data-menu-target="autoid_245">Changes on the FTL side</a></li><li><a class="page-menu-link" href="versions_2_2_8.html#autoid_246" data-menu-target="autoid_246">Changes on the Java side</a></li><li><a class="page-menu-link" href="versions_2_2_8.html#autoid_247" data-menu-target="autoid_247">Other changes</a></li></ul></li><li><a class="page-menu-link" href="versions_2_2_7.html" data-menu-target="versions_2_2_7">2.2.7</a><ul><li><a class="page-menu-link" href="versions_2_2_7.html#autoid_248" data-menu-target="autoid_248">Changes on the Java side</a></li></ul></li><li><a class="page-menu-link" href="versions_2_2_6.html" data-menu-target="versions_2_2_6">2.2.6</a><ul><li><a class="page-menu-link" href="versions_2_2_6.html#autoid_249" data-menu-target="autoid_249">Changes on the FTL
side</a></li><li><a class="page-menu-link" href="versions_2_2_6.html#autoid_250" data-menu-target="autoid_250">Changes on the Java side</a></li><li><a class="page-menu-link" href="versions_2_2_6.html#autoid_251" data-menu-target="autoid_251">Other changes</a></li></ul></li><li><a class="page-menu-link" href="versions_2_2_5.html" data-menu-target="versions_2_2_5">2.2.5</a><ul><li><a class="page-menu-link" href="versions_2_2_5.html#autoid_252" data-menu-target="autoid_252">Changes on the Java side</a></li></ul></li><li><a class="page-menu-link" href="versions_2_2_4.html" data-menu-target="versions_2_2_4">2.2.4</a><ul><li><a class="page-menu-link" href="versions_2_2_4.html#autoid_253" data-menu-target="autoid_253">Changes on the Java side</a></li><li><a class="page-menu-link" href="versions_2_2_4.html#autoid_254" data-menu-target="autoid_254">Other changes</a></li></ul></li><li><a class="page-menu-link" href="versions_2_2_3.html" data-menu-target="versions_2_2_3">2.2.3</a><ul><li><a c
lass="page-menu-link" href="versions_2_2_3.html#autoid_255" data-menu-target="autoid_255">Changes on the FTL side</a></li><li><a class="page-menu-link" href="versions_2_2_3.html#autoid_256" data-menu-target="autoid_256">Changes on the Java side</a></li></ul></li><li><a class="page-menu-link" href="versions_2_2_2.html" data-menu-target="versions_2_2_2">2.2.2</a><ul><li><a class="page-menu-link" href="versions_2_2_2.html#autoid_257" data-menu-target="autoid_257">Changes on the Java side</a></li></ul></li><li><a class="page-menu-link" href="versions_2_2_1.html" data-menu-target="versions_2_2_1">2.2.1</a><ul><li><a class="page-menu-link" href="versions_2_2_1.html#autoid_258" data-menu-target="autoid_258">Changes on the FTL side</a></li><li><a class="page-menu-link" href="versions_2_2_1.html#autoid_259" data-menu-target="autoid_259">Changes on the Java side</a></li></ul></li><li><a class="page-menu-link" href="versions_2_2.html" data-menu-target="versions_2_2">2.2</a><ul><li><a class="pa
ge-menu-link" href="versions_2_2.html#autoid_260" data-menu-target="autoid_260">Non backward-compatible changes!</a></li><li><a class="page-menu-link" href="versions_2_2.html#autoid_261" data-menu-target="autoid_261">Changes in FTL (FreeMarker Template Language)</a></li><li><a class="page-menu-link" href="versions_2_2.html#autoid_262" data-menu-target="autoid_262">Changes on the Java side</a></li><li><a class="page-menu-link" href="versions_2_2.html#autoid_263" data-menu-target="autoid_263">Other changes</a></li><li><a class="page-menu-link" href="versions_2_2.html#autoid_264" data-menu-target="autoid_264">The history of the releases before the final version</a><ul><li><a class="page-menu-link" href="versions_2_2.html#autoid_265" data-menu-target="autoid_265">Differences between the final and RC2 releases</a></li><li><a class="page-menu-link" href="versions_2_2.html#autoid_266" data-menu-target="autoid_266">Differences between the RC2 and RC1 releases</a></li><li><a class="page-menu
-link" href="versions_2_2.html#autoid_267" data-menu-target="autoid_267">Differences between the Preview 2 and RC1 releases</a></li><li><a class="page-menu-link" href="versions_2_2.html#autoid_268" data-menu-target="autoid_268">Differences between the Preview 1 and Preview 2
+releases</a></li></ul></li></ul></li><li><a class="page-menu-link" href="versions_2_1_5.html" data-menu-target="versions_2_1_5">2.1.5</a><ul><li><a class="page-menu-link" href="versions_2_1_5.html#autoid_269" data-menu-target="autoid_269">Changes on the Java side</a></li></ul></li><li><a class="page-menu-link" href="versions_2_1_4.html" data-menu-target="versions_2_1_4">2.1.4</a><ul><li><a class="page-menu-link" href="versions_2_1_4.html#autoid_270" data-menu-target="autoid_270">Changes on the Java side</a></li></ul></li><li><a class="page-menu-link" href="versions_2_1_3.html" data-menu-target="versions_2_1_3">2.1.3</a><ul><li><a class="page-menu-link" href="versions_2_1_3.html#autoid_271" data-menu-target="autoid_271">Changes on the FTL side</a></li><li><a class="page-menu-link" href="versions_2_1_3.html#autoid_272" dat
<TRUNCATED>
[28/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_builtins_alphaidx.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_builtins_alphaidx.html b/builds/2.3.26-nightly/ref_builtins_alphaidx.html
new file mode 100644
index 0000000..08c1ad4
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_builtins_alphaidx.html
@@ -0,0 +1,503 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Alphabetical index - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Alphabetical index">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_builtins_alphaidx.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_builtins_alphaidx.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins.html"><span itemprop="name">Built-in Reference</span></a></li><li class="step-3"
itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins_alphaidx.html"><span itemprop="name">Alphabetical index</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li>?builtins</li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Built-in Reference","Alphabetical index"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_builtins.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins_string.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_builtins_alphaidx" itemprop="headline">Alphabetical index</h1>
+</div></div> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>As of FreeMarker 2.3.23, you can use camel case instead of
+ snake case for directive names, like <code class="inline-code">startsWith</code>
+ instead of <code class="inline-code">starts_with</code>. But know that then within
+ the same template, FreeMarker will enforce the usage of camel case
+ for all identifiers that are part of the template language (user
+ defined names are not affected).</p>
+ </div>
+<ul>
+ <li>
+ <a href="ref_builtins_number.html#ref_builtin_abs">abs</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_node.html#ref_builtin_ancestors">ancestors</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_expert.html#ref_buitin_api_and_has_api">api</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_boolean">boolean</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_expert.html#ref_builtin_numType">byte</a>
+ </li>
+
+ <li>
+ c <a href="ref_builtins_number.html#ref_builtin_c">for strings</a>, <a href="ref_builtins_boolean.html#ref_builtin_c_boolean">for booleans</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_cap_first">cap_first</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_capitalize">capitalize</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_number.html#ref_builtin_rounding">ceiling</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_node.html#ref_builtin_children">children</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_chop_linebreak">chop_linebreak</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_sequence.html#ref_builtin_chunk">chunk</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_contains">contains</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_loop_var.html#ref_builtin_counter">counter</a>
+ </li>
+
+ <li>
+ date <a href="ref_builtins_date.html#ref_builtin_date_datetype">for
+ dates</a>, <a href="ref_builtins_string.html#ref_builtin_string_date">for
+ strings</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_date.html#ref_builtin_date_if_unknown">date_if_unknown</a>
+ </li>
+
+ <li>
+ datetime <a href="ref_builtins_date.html#ref_builtin_date_datetype">for
+ dates</a>, <a href="ref_builtins_string.html#ref_builtin_string_date">for
+ strings</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_date.html#ref_builtin_date_if_unknown">datetime_if_unknown</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_expert.html#ref_builtin_numType">double</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_esc">esc</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_ends_with">ends_with</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_ensure_ends_with">ensure_ends_with</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_ensure_starts_with">ensure_starts_with</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_expert.html#ref_builtin_eval">eval</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_sequence.html#ref_builtin_first">first</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_number.html#ref_builtin_rounding">floor</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_groups">groups</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_expert.html#ref_builtin_numType">float</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_expert.html#ref_buitin_api_and_has_api">has_api</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_expert.html#ref_builtin_has_content">has_content</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_loop_var.html#ref_builtin_has_next">has_next</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_html">html</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_loop_var.html#ref_builtin_index">index</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_index_of">index_of</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_expert.html#ref_builtin_numType">int</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_expert.html#ref_builtin_interpret">interpret</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_loop_var.html#ref_builtin_item_cycle">item_cycle</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_loop_var.html#ref_builtin_item_parity">item_parity</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_loop_var.html#ref_builtin_item_parity_cap">item_parity_cap</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_loop_var.html#ref_builtin_is_even_item">is_even_item</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_sequence.html#ref_builtin_first">is_first</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_number.html#ref_builtin_is_infinite">is_infinite</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_loop_var.html#ref_builtin_is_last">is_last</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_number.html#ref_builtin_is_nan">is_nan</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_loop_var.html#ref_builtin_is_odd_item">is_odd_item</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_expert.html#ref_builtin_isType">is_<em>type</em></a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_date.html#ref_builtin_date_iso">iso,
+ iso_...</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_j_string">j_string</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_sequence.html#ref_builtin_join">join</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_js_string">js_string</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_keep_after">keep_after</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_keep_after_last">keep_after_last</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_keep_before">keep_before</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_keep_before_last">keep_before_last</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_hash.html#ref_builtin_keys">keys</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_sequence.html#ref_builtin_last">last</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_last_index_of">last_index_of</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_left_pad">left_pad</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_length">length</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_expert.html#ref_builtin_numType">long</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_number.html#ref_builtin_lower_abc">lower_abc</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_lower_case">lower_case</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_expert.html#ref_builtin_markup_string">markup_string</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_matches">matches</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_expert.html#ref_builtin_namespace">namespace</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_expert.html#ref_builtin_new">new</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_node.html#ref_builtin_next_sibling">next_sibling</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_no_esc">no_esc</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_node.html#ref_builtin_node_namespace">node_namespace</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_node.html#ref_builtin_node_name">node_name</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_node.html#ref_builtin_node_type">node_type</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_number">number</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_expert.html#ref_builtin_numToDate">number_to_date,
+ number_to_datetime, number_to_time</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_node.html#ref_builtin_parent">parent</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_node.html#ref_builtin_previous_sibling">previous_sibling</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_replace">replace</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_remove_beginning">remove_beginning</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_remove_ending">remove_ending</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_sequence.html#ref_builtin_reverse">reverse</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_right_pad">right_pad</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_number.html#ref_builtin_rounding">round</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_node.html#ref_builtin_root">root</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_rtf">rtf</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_expert.html#ref_builtin_numType">short</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_sequence.html#ref_builtin_size">size</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_sequence.html#ref_builtin_sort">sort</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_sequence.html#ref_builtin_seq_contains">seq_contains</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_sequence.html#ref_builtin_seq_index_of">seq_index_of</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_sequence.html#ref_builtin_seq_last_index_of">seq_last_index_of</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_sequence.html#ref_builtin_sort_by">sort_by</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_split">split</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_starts_with">starts_with</a>
+ </li>
+
+ <li>
+ string: <a href="ref_builtins_string.html#ref_builtin_string_for_string">for
+ strings</a>, <a href="ref_builtins_number.html#ref_builtin_string_for_number">for
+ numbers</a>, <a href="ref_builtins_boolean.html#ref_builtin_string_for_boolean">for
+ booleans</a>, <a href="ref_builtins_date.html#ref_builtin_string_for_date">for
+ date/time/date-time</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_substring">substring</a>
+ (deprecated)
+ </li>
+
+ <li>
+ <a href="ref_builtins_type_independent.html#ref_builtin_switch">switch</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_boolean.html#ref_builtin_then">then</a>
+ </li>
+
+ <li>
+ time <a href="ref_builtins_date.html#ref_builtin_date_datetype">for
+ date/time/date-time</a>, <a href="ref_builtins_string.html#ref_builtin_string_date">for strings</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_date.html#ref_builtin_date_if_unknown">time_if_unknown</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_trim">trim</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_uncap_first">uncap_first</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_number.html#ref_builtin_upper_abc">upper_abc</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_upper_case">upper_case</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_url">url</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_hash.html#ref_builtin_values">values</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_word_list">word_list</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_xhtml">xhtml</a>
+ </li>
+
+ <li>
+ <a href="ref_builtins_string.html#ref_builtin_xml">xml</a>
+ </li>
+ </ul><p>See the built-ins filtered by left-hand-value type <a href="ref_builtins.html">here</a>.</p><p>If you don't find a built-in here that you have seen in a
+ working template, probably you will find it here: <a href="ref_deprecated.html">Deprecated FTL constructs</a></p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_builtins.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins_string.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_builtins_boolean.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_builtins_boolean.html b/builds/2.3.26-nightly/ref_builtins_boolean.html
new file mode 100644
index 0000000..5bdd23c
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_builtins_boolean.html
@@ -0,0 +1,229 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Built-ins for booleans - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Built-ins for booleans">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_builtins_boolean.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_builtins_boolean.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins.html"><span itemprop="name">Built-in Reference</span></a></li><li class="step-3"
itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins_boolean.html"><span itemprop="name">Built-ins for booleans</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Built-in Reference","Built-ins for booleans"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_builtins_date.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins_sequence.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_builtins_boolean" itemprop="headline">Built-ins for booleans</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#ref_builtin_c_boolean" data-menu-target="ref_builtin_c_boolean">c (when used with boolean)</a></li><li><a class="page-menu-link" href="#ref_builtin_string_for_boolean" data-menu-target="ref_builtin_string_for_boolean">string (when used with a boolean value)</a></li><li><a class="page-menu-link" href="#ref_builtin_then" data-menu-target="ref_builtin_then">then</a></li></ul> </div>
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_c_boolean">c (when used with boolean)</h2>
+
+
+
+
+
+
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in exists since FreeMarker 2.3.20.</p>
+ </div>
+
+
+ <p>This built-in converts a boolean to string for a
+ "computer language" as opposed to for human audience.
+ The result will be <code class="inline-code">"true"</code> or
+ <code class="inline-code">"false"</code>, regardless of the
+ <code class="inline-code">boolean_format</code> setting. When generating
+ JavaScript and such, this should be used, as otherwise changing the
+ <code class="inline-code">boolean_format</code> can break the generated
+ computer-language output.</p>
+
+ <p>Note that this built-in <a href="ref_builtins_number.html#ref_builtin_c">also
+ works on strings</a>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_string_for_boolean">string (when used with a boolean value)</h2>
+
+
+
+
+
+
+
+
+
+
+
+
+ <p><em>All usages of this built-in has been deprecated; see
+ below.</em></p>
+
+ <p>Converts a boolean to a string. You can use it in two
+ ways:</p>
+
+ <ul>
+ <li>
+ <p>As <code class="inline-code">foo?string("yes", "no")</code>:
+ <em>Deprecated starting from FreeMarker 2.3.23: use <a href="#ref_builtin_then"><code>?then("yes",
+ "no")</code></a> instead. </em>This will return the
+ first parameter (here: <code class="inline-code">"yes"</code>) if the boolean
+ is true, otherwise the second parameter (here:
+ <code class="inline-code">"no"</code>). Note that the return value is always a
+ string; if the parameters were numbers, they would be converted
+ to strings first. Also note that both parameters are evaluated,
+ despite that only one of them will be used; this might have
+ negative impact if the parameters aren't just literals.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">foo?string</code>: <em>Deprecated
+ starting from FreeMarker 2.3.20: use <a href="#ref_builtin_c_boolean"><code>?c</code></a>
+ instead, or set the <code class="inline-code">boolean_format</code> <a href="ref_directive_setting.html">setting</a> to something like
+ <code class="inline-code">"yes,no"</code> and then the conversion can happen
+ automatically</em>. If you still need to know about this,
+ this will convert the boolean to string using the default
+ strings for representing true and false values. By default, true
+ is rendered as <code class="inline-code">"true"</code> and false is rendered
+ as <code class="inline-code">"false"</code>. This is mostly useful if you
+ generate source code with FreeMarker <em>(but use
+ <code class="inline-code">?c</code> for that starting from 2.3.20)</em>,
+ since the values are not locale (language, country) sensitive.
+ To change these default strings, you can use the
+ <code class="inline-code">boolean_format</code> <a href="ref_directive_setting.html">setting</a>.</p>
+
+ <p class="programmers-note">Note, that in the very rare case
+ when a value is multi-typed and is both a boolean and a string,
+ then the string value of the variable will be returned, and so
+ the <code class="inline-code">boolean_format</code> setting will have no
+ effect.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_then">then</h2>
+
+
+
+
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in exists since FreeMarker 2.3.23.</p>
+ </div>
+
+
+ <p>Used like
+ <code class="inline-code"><em class="code-color">booleanExp</em>?then(<em class="code-color">whenTrue</em>,
+ <em class="code-color">whenFalse</em>)</code>, fills the same role
+ as the ternary operator in C-like languages (i.e.,
+ <code class="inline-code"><em class="code-color">booleanExp</em> ?
+ <em class="code-color">whenTrue</em> :
+ <em class="code-color">whenFalse</em></code>). If
+ <code class="inline-code"><em class="code-color">booleanExp</em></code> evaluates
+ to boolean true then it evaluates and returns its first argument, or
+ else if <code class="inline-code"><em class="code-color">booleanExp</em></code>
+ evaluates to boolean false then it evaluates and return its second
+ argument. Off course, all three expression can be arbitrary complex.
+ The argument expressions can have any type, even different
+ types.</p>
+
+ <p>An important special property of this built-in is that only
+ one of the argument expressions will be evaluated. This is unlike
+ with normal method calls, where all argument expressions are
+ evaluated, regardless if the method will need them. This also means
+ that the argument that's not needed can even refer to missing
+ variables without causing error. (It still can't be syntactically
+ invalid of course.)</p>
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign foo = true>
+${foo?then('Y', 'N')}
+
+<#assign foo = false>
+${foo?then('Y', 'N')}
+
+<#assign x = 10>
+<#assign y = 20>
+<#-- Prints 100 plus the maximum of x and y: -->
+${100 + (x > y)?then(x, y)}</pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">Y
+
+N
+
+120</pre></div>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>If you need to choose based on a non-boolean value, you
+ should use the <a href="ref_builtins_type_independent.html#ref_builtin_switch"><code>switch</code>
+ built-in</a> instead of nesting multiple
+ <code class="inline-code">then</code>-s into each other, like
+ <code class="inline-code">priority?switch(1, "low", 2, "medium", 3,
+ "high")</code>, or even <code class="inline-code">true?switch(priority <= 1,
+ "low", priority == 2, "medium", priority >= 3,
+ "high")</code>.</p>
+ </div>
+
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_builtins_date.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins_sequence.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_builtins_date.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_builtins_date.html b/builds/2.3.26-nightly/ref_builtins_date.html
new file mode 100644
index 0000000..1548cdd
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_builtins_date.html
@@ -0,0 +1,545 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Built-ins for date/time/date-time values - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Built-ins for date/time/date-time values">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_builtins_date.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_builtins_date.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins.html"><span itemprop="name">Built-in Reference</span></a></li><li class="step-3"
itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins_date.html"><span itemprop="name">Built-ins for date/time/date-time values</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Built-in Reference","Built-ins for date/time/date-time values"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_builtins_number.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins_boolean.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_builtins_date" itemprop="headline">Built-ins for date/time/date-time values</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#ref_builtin_date_datetype" data-menu-target="ref_builtin_date_datetype">date, time, datetime (when used with a date/time/date-time
+value)</a></li><li><a class="page-menu-link" href="#ref_builtin_date_if_unknown" data-menu-target="ref_builtin_date_if_unknown">date_if_unknown, time_if_unknown, datetime_if_unknown</a></li><li><a class="page-menu-link" href="#ref_builtin_date_iso" data-menu-target="ref_builtin_date_iso">iso_...</a></li><li><a class="page-menu-link" href="#ref_builtin_string_for_date" data-menu-target="ref_builtin_string_for_date">string (when used with a date/time/date-time value)</a></li></ul> </div>
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_date_datetype">date, time, datetime (when used with a date/time/date-time
+ value)</h2>
+
+
+
+
+
+
+
+
+
+
+
+
+ <p>These built-ins can be used to specify which parts of the
+ date-like variable are in use:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">date</code>: Date only, no time of the
+ day.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">time</code>: Only the time of the day, no date
+ part</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">datetime</code>: Both date and time</p>
+ </li>
+ </ul>
+
+ <p>Ideally, you do not need to use these built-ins.
+ Unfortunately, because of the technical limitations of the Java
+ platform, FreeMarker sometimes can't find out which parts of a
+ date-like value is a date, a time or a date-time; ask the
+ programmers which variables has this problem. If FreeMarker has to
+ execute an operation where this information is needed -- such as
+ displaying the value as text -- but it does not know which parts are
+ in use, it will stop with error. This is when you have to use these
+ built-ins. For example, assume <code class="inline-code">openingTime</code> is a
+ such problematic variable:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign x = openingTime> <#-- no problem can occur here -->
+${openingTime?time} <#-- without ?time it would fail -->
+<#-- For the sake of better understanding, consider this: -->
+<#assign openingTime = openingTime?time>
+${openingTime} <#-- this will work now --></pre></div>
+
+ <p>These built-ins can also be used to convert date-time values
+ to date or time. For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">Last updated: ${lastUpdated} <#-- assume that lastUpdated is a date-time value -->
+Last updated date: ${lastUpdated?date}
+Last updated time: ${lastUpdated?time}</pre></div>
+
+ <p>will output something like:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">Last updated: 04/25/2003 08:00:54 PM
+Last updated date: 04/25/2003
+Last updated time: 08:00:54 PM</pre></div>
+
+ <p>If the left side of the <code class="inline-code">?</code> is string, then
+ these built-ins <a href="ref_builtins_string.html#ref_builtin_string_date">convert
+ strings to date/time/date-time</a>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_date_if_unknown">date_if_unknown, time_if_unknown, datetime_if_unknown</h2>
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in exists since FreeMarker 2.3.21.</p>
+ </div>
+
+
+ <p>The <code class="inline-code">date_if_unknown</code>,
+ <code class="inline-code">time_if_unknown</code>,
+ <code class="inline-code">datetime_if_unknown</code> built-ins mark a date-like
+ value with some of the sub-types: date without time, time, or
+ date-time, respectively. However, if the value already holds this
+ information, the built-in has no effect. That is, it will never
+ convert the sub-type of a value, it only adds the sub-type if it was
+ unknown.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_date_iso">iso_...</h2>
+
+
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p><em>These built-ins are deprecated</em> since
+ FreeMarker 2.3.21, where the <code class="inline-code">date_format</code>,
+ <code class="inline-code">time_format</code> and
+ <code class="inline-code">datetime_format</code> settings understand
+ <code class="inline-code">"iso"</code> (for ISO 8601:2004 format) and
+ <code class="inline-code">"xs"</code> (for XML Schema format) in additionally to
+ the Java <code class="inline-code">SimpleDateFormat</code> patterns. Thus the
+ default format can be set to ISO 8601, or for one time ISO
+ formatting you can use <code class="inline-code">myDate?string.iso</code>. <a href="ref_directive_setting.html#topic.dateTimeFormatSettings">See more
+ here...</a></p>
+ </div>
+
+
+ <p>These built-ins convert a date, time or date-time value to
+ string that follows ISO 8601:2004 "extended" format.</p>
+
+ <p>This built-in has several variations:
+ <code class="inline-code">iso_utc</code>, <code class="inline-code">iso_local</code>,
+ <code class="inline-code">iso_utc_nz</code>, <code class="inline-code">iso_local_nz</code>,
+ <code class="inline-code">iso_utc_m</code>, <code class="inline-code">iso_utc_m_nz</code>, etc.
+ The name is constructed from the following words in this order, each
+ separated with a <code class="inline-code">_</code> from the next:</p>
+
+ <div class="orderedlist"><ol type="1">
+ <li>
+ <p><code class="inline-code">iso</code> (required)</p>
+ </li>
+
+ <li>
+ <p>Either <code class="inline-code">utc</code> or <code class="inline-code">local</code>
+ (required (except when it's given with a parameter, but see that
+ later)): Specifies whether you want to print the
+ date/time/date-time according to UTC or according the current
+ time zone. The current time zone is decided by the
+ <code class="inline-code">time_zone</code> FreeMarker setting and is normally
+ configured by the programmers outside the templates (but it can
+ also be set in a template, like <code class="inline-code"><#setting
+ time_zone="America/New_York"></code> for example). Note
+ that if the <code class="inline-code">sql_date_and_time_time_zone</code>
+ FreeMarker setting is set and non-<code class="inline-code">null</code>, then
+ for <code class="inline-code">java.sql.Date</code> and
+ <code class="inline-code">java.sql.Time</code> values (i.e., for date-only and
+ time-only values that are coming from database via SQL)
+ <code class="inline-code">local</code> will mean that time zone instead of the
+ value of the <code class="inline-code">time_zone</code> setting.</p>
+ </li>
+
+ <li>
+ <p>Either <code class="inline-code">h</code> or <code class="inline-code">m</code> or
+ <code class="inline-code">ms</code> (optional): The accuracy of the time part.
+ When omitted, it defaults to seconds accuracy (like
+ <code class="inline-code">12:30:18</code>). <code class="inline-code">h</code> means hours
+ accuracy (like <code class="inline-code">12</code>), <code class="inline-code">m</code>
+ means minutes accuracy (<code class="inline-code">12:30</code>), and
+ <code class="inline-code">ms</code> means milliseconds accuracy
+ (<code class="inline-code">12:30:18.25</code>, where we have 250 ms). Note
+ that when using <code class="inline-code">ms</code>, the milliseconds are
+ displayed as fraction seconds (following the standard) and will
+ not have trailing <code class="inline-code">0</code>-s. Thus, if the the
+ millisecond part happens to be <code class="inline-code">0</code>, the whole
+ fraction second part will be omitted. Also note that the
+ fraction seconds are always separated with a dot , not with
+ comma (to follow the Web conventions and XML Schema
+ time/dateTime canonical format).</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">nz</code> (optional): <code class="inline-code">nz</code>
+ (like in <code class="inline-code">${foo?utc_local_nz}</code>) stands for
+ "no zone", which means that the time zone offset
+ (like <code class="inline-code">+02:00</code> or or <code class="inline-code">-04:30</code>
+ or <code class="inline-code">Z</code>) will not be displayed. If this part is
+ omitted (like in <code class="inline-code">${foo?utc_local}</code>) the zone
+ will be displayed, except in two cases:</p>
+
+ <ul>
+ <li>
+ <p>If the value is a date (no time part) value (again,
+ ISO 8901 doesn't allow it then)</p>
+ </li>
+
+ <li>
+ <p>If the value is a <code class="inline-code">java.sql.Time</code> and
+ the <code class="inline-code">incompatible_improvements</code> (often set
+ via the Java <code class="inline-code">Configuration</code> constructor
+ parameter) FreeMarker configuration setting is at least
+ 2.3.21 (or 2.3.24 when you are inside a string literal).
+ This is because most databases store time values that aren't
+ in any time zone, but just store hour, minute, second, and
+ decimal second field values, so showing the time zone
+ doesn't make sense.</p>
+ </li>
+ </ul>
+
+ <p>Note that since FreeMarker 2.3.19, the offset always
+ contains the minutes for XML Schema date/time/dateTime format
+ compliance. (However, if you primarily generate for the XML
+ Schema format, use the xs format.)</p>
+ </li>
+ </ol></div>
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign aDateTime = .now>
+<#assign aDate = aDateTime?date>
+<#assign aTime = aDateTime?time>
+
+Basic formats:
+${aDate?iso_utc}
+${aTime?iso_utc}
+${aDateTime?iso_utc}
+
+Different accuracies:
+${aTime?iso_utc_ms}
+${aDateTime?iso_utc_m}
+
+Local time zone:
+${aDateTime?iso_local}</pre></div>
+
+ <p>A possible output (depends on current time and time
+ zone):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">Basic formats:
+2011-05-16
+21:32:13Z
+2011-05-16T21:32:13Z
+
+Different accuracies:
+21:32:13.868Z
+2011-05-16T21:32Z
+
+Local time zone:
+2011-05-16T23:32:13+02:00</pre></div>
+
+ <p>There is yet another group of <code class="inline-code">iso_...</code>
+ built-in variants, where you omit the <code class="inline-code">local</code> or
+ <code class="inline-code">utc</code> word from the name and instead specify the
+ time zone as a parameter to the built-in. Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign aDateTime = .now>
+${aDateTime?iso("UTC")}
+${aDateTime?iso("GMT-02:30")}
+${aDateTime?iso("Europe/Rome")}
+
+The usual variations are supported:
+${aDateTime?iso_m("GMT+02")}
+${aDateTime?iso_m_nz("GMT+02")}
+${aDateTime?iso_nz("GMT+02")}</pre></div>
+
+ <p>A possible output (depends on current time and time
+ zone):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">2011-05-16T21:43:58Z
+2011-05-16T19:13:58-02:30
+2011-05-16T23:43:58+02:00
+
+The usual variations are supported:
+2011-05-16T23:43+02:00
+2011-05-16T23:43
+2011-05-16T23:43:58</pre></div>
+
+ <p>If the time zone parameter can't be interpreted, the template
+ processing will be terminated with error.</p>
+
+ <p class="programmers-note">The parameter can be a
+ <code class="inline-code">java.util.TimeZone</code> object too (which is possibly
+ the return value of a Java method, or it's in the data-model), not
+ just a string.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_string_for_date">string (when used with a date/time/date-time value)</h2>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <p>This built-in converts a date to a string, with the specified
+ formatting.</p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>You should need this built-in rarely, as the default format
+ of date/time/date-time values can be specified globally <a href="ref_directive_setting.html#topic.dateTimeFormatSettings">with the
+ <code>date_format</code>, <code>time_format</code> and
+ <code>datetime_format</code> settings</a> of FreeMarker.
+ Use this built-in only at the places where the desired format
+ differs from the one normally used. For the other places the
+ default format should be set properly by the programmers, outside
+ the templates.</p>
+ </div>
+
+
+ <p>The desired format can be specified like
+ <code class="inline-code">?string.<em class="code-color">format</em></code> or
+ <code class="inline-code">?string["<em class="code-color">format</em>"]</code>(or
+ the historical equivalent,
+ <code class="inline-code">?string("<em class="code-color">format</em>")</code>).
+ These are equivalent, except that with the quoted formats you can
+ include any characters in the
+ <code class="inline-code"><em class="code-color">format</em></code>, like spaces.
+ The syntax of <code class="inline-code"><em class="code-color">format</em></code>
+ is exactly the same as of the <code class="inline-code">date_format</code>,
+ <code class="inline-code">time_format</code> and
+ <code class="inline-code">datetime_format</code> configuration settings; <a href="ref_directive_setting.html#topic.dateTimeFormatSettings">see the documentation of the
+ possible values there</a>.</p>
+
+ <p>Example: If the locale of the output is U.S. English, and the
+ time zone is the U.S. Pacific Time zone, and
+ <code class="inline-code">openingTime</code> is a
+ <code class="inline-code">java.sql.Time</code>, <code class="inline-code">nextDiscountDay</code>
+ is <code class="inline-code">java.sql.Date</code> and
+ <code class="inline-code">lastUpdated</code> is
+ <code class="inline-code">java.sql.Timestamp</code> or
+ <code class="inline-code">java.util.Date</code> then this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#-- Predefined format names: -->
+
+${openingTime?string.short}
+${openingTime?string.medium}
+${openingTime?string.long}
+${openingTime?string.full}
+${openingTime?string.xs} <#-- XSD xs:time -->
+${openingTime?string.iso} <#-- ISO 8601 time -->
+
+${nextDiscountDay?string.short}
+${nextDiscountDay?string.medium}
+${nextDiscountDay?string.long}
+${nextDiscountDay?string.full}
+${nextDiscountDay?string.xs} <#-- XSD xs:date -->
+${nextDiscountDay?string.iso} <#-- ISO 8601 date -->
+
+${lastUpdated?string.short}
+${lastUpdated?string.medium}
+${lastUpdated?string.long}
+${lastUpdated?string.full}
+${lastUpdated?string.medium_short} <#-- medium date, short time -->
+${lastUpdated?string.xs} <#-- XSD xs:dateTime -->
+${lastUpdated?string.iso} <#-- ISO 8601 combined date and time -->
+
+<#-- <a href="pgui_config_custom_formats.html">Programmer-defined named format</a> (@ + name): -->
+${lastUpdated?string.@fileDate}
+
+<#-- Advanced ISO 8601 and XSD formatting: -->
+${lastUpdated?string.iso_m_u}
+${lastUpdated?string.xs_ms_nz}
+
+<#-- SimpleDateFormat patterns: -->
+${lastUpdated?string["dd.MM.yyyy, HH:mm"]}
+${lastUpdated?string["EEEE, MMMM dd, yyyy, hh:mm a '('zzz')'"]}
+${lastUpdated?string["EEE, MMM d, ''yy"]}
+${lastUpdated?string.yyyy} <#-- Same as ${lastUpdated?string["yyyy"]} --></pre></div>
+
+ <p>will print something like this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">01:45 PM
+01:45:09 PM
+01:45:09 PM PST
+01:45:09 PM PST
+13:45:09-08:00
+13:45:09-08:00
+
+2/20/07
+Apr 20, 2007
+April 20, 2007
+Friday, April 20, 2007
+2007-02-20-08:00
+2007-02-20
+
+2/20/07 01:45 PM
+Feb 20, 2007 01:45:09 PM
+February 20, 2007 01:45:09 PM PST
+Friday, February 20, 2007 01:45:09 PM PST
+Feb 8, 2003 9:24 PM
+2007-02-20T13:45:09-08:00
+2007-02-20T13:45:09-08:00
+
+Apr/20/2007 13:45
+
+2007-02-20T21:45Z
+2007-02-20T13:45:09.000
+
+08.04.2003 21:24
+Tuesday, April 08, 2003, 09:24 PM (PDT)
+Tue, Apr 8, '03
+2003</pre></div>
+
+ <p>Note that with custom formats like in
+ <code class="inline-code">lastUpdated?string.@fileDate</code> above, templates can
+ just refer to the application-domain meaning, and the exact format
+ can be specified outside the templates, on a central place.
+ (Programmers can read about <a href="pgui_config_custom_formats.html">defining such named formats
+ here...</a>)</p>
+
+ <div class="callout warning">
+ <strong class="callout-label">Warning!</strong>
+
+ <p>Unfortunately, because of the limitations of the Java
+ platform, it can happen that you have date-like variables in the
+ data-model, where FreeMarker can't decide if the variable is a
+ date (year, month, day), or a time (hour, minute, second,
+ millisecond) or a date-time. In this case, FreeMarker doesn't know
+ how to display the value when you write something like
+ <code class="inline-code">${lastUpdated?string.short}</code> or
+ <code class="inline-code">${lastUpdated?string.xs}</code>, i.e., a format that
+ doesn't specify the exact fields to display, or if you simply use
+ <code class="inline-code">${lastUpdated}</code>. Then it will have to stop with
+ error. To prevent this, you can help FreeMarker with the <a href="#ref_builtin_date_datetype"><code>?date</code>,
+ <code>?time</code> and <code>?datetime</code>
+ built-ins</a>. For example:
+ <code class="inline-code">${lastUpdated?datetime?string.short}</code>. Ask the
+ programmers if certain variables of the data-model have this
+ problem, or always use <code class="inline-code">?date</code>,
+ <code class="inline-code">?time</code> and <code class="inline-code">?datetime</code>
+ built-ins to be on the safe side.</p>
+ </div>
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>You never need to use <code class="inline-code">?date</code>,
+ <code class="inline-code">?time</code> or <code class="inline-code">?datetime</code> with
+ format patterns like <code class="inline-code">"yyyy.MM.dd HH:mm"</code>, since
+ with the pattern you tell FreeMarker what parts of the date to
+ show. However, FreeMarker will trust you blindly, so you can show
+ "noise" if you display parts that are actually not stored in the
+ variable. For example, <code class="inline-code">${openingTime?string["yyyy-MM-dd
+ hh:mm:ss a"]}</code>, where <code class="inline-code">openingTime</code>
+ stores only time, will display <code class="inline-code">1970-01-01 09:24:44
+ PM</code>.</p>
+ </div>
+
+
+ <p>To prevent misunderstandings, the format need not be a string
+ literal, it can be a variable or any other expression as far as it
+ evaluates to a string. For example, it can be like
+ <code class="inline-code">"<em class="code-color">...</em>"?string[myFormat]</code>.</p>
+
+ <p>See also: <a href="dgui_template_valueinsertion.html#dgui_template_valueinserion_universal_date">the
+ interpolation of dates</a></p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_builtins_number.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins_boolean.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[38/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/dgui_template_overallstructure.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/dgui_template_overallstructure.html b/builds/2.3.26-nightly/dgui_template_overallstructure.html
new file mode 100644
index 0000000..fadc9c8
--- /dev/null
+++ b/builds/2.3.26-nightly/dgui_template_overallstructure.html
@@ -0,0 +1,131 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Overall structure - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Overall structure">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/dgui_template_overallstructure.html">
+<link rel="canonical" href="http://freemarker.org/docs/dgui_template_overallstructure.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui.html"><span itemprop="name">Template Author's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_template.html"><span itemprop="name">The Template</span></a></li><li class="step-3" item
prop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_template_overallstructure.html"><span itemprop="name">Overall structure</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Author\'s Guide","The Template","Overall structure"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="dgui_template.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_template_directives.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="dgui_template_overallstructure" itemprop="headline">Overall structure</h1>
+</div></div><p>Templates are in fact programs you write in a language called
+ <strong>FTL</strong> (for FreeMarker
+ Template Language). This is a quite simple programming language
+ designed for writing templates and nothing else.</p><p>A template (= FTL program) is a mix of the following
+ sections:</p><ul>
+ <li>
+ <p><strong>Text</strong>: Text that will be printed to the output as
+ is.</p>
+ </li>
+
+ <li>
+ <p><strong>Interpolation</strong>: These sections will be replaced with a calculated
+ value in the output. Interpolations are delimited by
+ <code class="inline-code">${</code> and <code class="inline-code">}</code> (or with
+ <code class="inline-code">#{</code> and <code class="inline-code">}</code>, but that shouldn't
+ be used anymore; <a href="ref_depr_numerical_interpolation.html">see more
+ here</a>).</p>
+ </li>
+
+ <li>
+ <p><strong>FTL tags</strong>: FTL tags are a bit similar to HTML tags, but they
+ are instructions to FreeMarker and will not be printed to the
+ output.</p>
+ </li>
+
+ <li>
+ <p><strong>Comments</strong>: Comments are similar to HTML comments, but they
+ are delimited by <code class="inline-code"><#--</code> and
+ <code class="inline-code">--></code>. Comments will be ignored by FreeMarker,
+ and will not be written to the output.</p>
+ </li>
+ </ul><p>Let's see a concrete template. I have marked the template's
+ components with colors: <span class="marked-text">text</span>,
+ <span class="marked-interpolation">interpolation</span>, <span class="marked-ftl-tag">FTL tag</span>, <span class="marked-comment">comment</span>. With the <em><span class="marked-invisible-text">[BR]</span></em>-s I intend to visualize the
+ <a href="gloss.html#gloss.lineBreak">line breaks</a>.</p>
+
+<div class="code-wrapper"><pre class="code-block code-template"><span class="marked-text"><html><em><span class="marked-invisible-text">[BR]</span></em>
+<head><em><span class="marked-invisible-text">[BR]</span></em>
+��<title>Welcome!</title><em><span class="marked-invisible-text">[BR]</span></em>
+</head><em><span class="marked-invisible-text">[BR]</span></em>
+<body><em><span class="marked-invisible-text">[BR]</span></em>
+��<span class="marked-comment"><#--�Greet�the�user�with�his/her�name�--></span><em><span class="marked-invisible-text">[BR]</span></em>
+��<h1>Welcome�<span class="marked-interpolation">${user}</span>!</h1><em><span class="marked-invisible-text">[BR]</span></em>
+��<p>We�have�these�animals:<em><span class="marked-invisible-text">[BR]</span></em>
+��<ul><em><span class="marked-invisible-text">[BR]</span></em>
+��<span class="marked-ftl-tag"><#list�animals�as�animal></span><em><span class="marked-invisible-text">[BR]</span></em>
+����<li><span class="marked-interpolation">${animal.name}</span>�for�<span class="marked-interpolation">${animal.price}</span> Euros<em><span class="marked-invisible-text">[BR]</span></em>
+��<span class="marked-ftl-tag"></#list></span><em><span class="marked-invisible-text">[BR]</span></em>
+��</ul><em><span class="marked-invisible-text">[BR]</span></em>
+</body><em><span class="marked-invisible-text">[BR]</span></em>
+</html></span></pre></div><p>FTL distinguishes upper case and lower case letters. So
+ <code class="inline-code">list</code> is good directive name, while
+ <code class="inline-code">List</code> is not. Similarly <code class="inline-code">${name}</code>
+ is not the same as <code class="inline-code">${Name}</code> or
+ <code class="inline-code">${NAME}</code></p><p>It is important to realize that <span class="marked-interpolation">interpolations</span> can be used in
+ <span class="marked-text">text</span> (and in string literal
+ expressions; see <a href="dgui_template_exp.html#dgui_template_exp_stringop_interpolation">later</a>)
+ only.</p><p>An <span class="marked-ftl-tag">FTL tag</span> can't be inside
+ another <span class="marked-ftl-tag">FTL tag</span> nor inside an
+ <span class="marked-interpolation">interpolation</span>. For example
+ this is <em>WRONG</em>: <code class="inline-code"><#if <#include
+ 'foo'>='bar'>...</#if></code></p><p><span class="marked-comment">Comments</span> can be placed
+ inside <span class="marked-ftl-tag">FTL tags</span> and <span class="marked-interpolation">interpolations</span>. For
+ example:</p>
+
+<div class="code-wrapper"><pre class="code-block code-template"><span class="marked-text"><h1>Welcome�<span class="marked-interpolation">${user <span class="marked-comment"><#-- The name of user --></span>}</span>!</h1><em><span class="marked-invisible-text">[BR]</span></em>
+<p>We�have�these�animals:<em><span class="marked-invisible-text">[BR]</span></em>
+<ul><em><span class="marked-invisible-text">[BR]</span></em>
+<span class="marked-ftl-tag"><#list�<span class="marked-comment"><#-- some comment... --></span> animals as�<span class="marked-comment"><#-- again... --></span> animal></span><em><span class="marked-invisible-text">[BR]</span></em></span>
+<em>...</em></pre></div> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>For those of you who have tried the above examples: You may
+ notice that some of spaces, tabs and line breaks are missing from
+ the template output, even though we said that <span class="marked-text">text</span> is printed as is. Don't bother with
+ it now. This is because the feature called ''white-space stripping''
+ is turned on, and that automatically removes some superfluous
+ spaces, tabs and line breaks. This will be explained <a href="dgui_misc_whitespace.html">later</a>.</p>
+ </div>
+<div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="dgui_template.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_template_directives.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/dgui_template_valueinsertion.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/dgui_template_valueinsertion.html b/builds/2.3.26-nightly/dgui_template_valueinsertion.html
new file mode 100644
index 0000000..4ed0f09
--- /dev/null
+++ b/builds/2.3.26-nightly/dgui_template_valueinsertion.html
@@ -0,0 +1,310 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Interpolations - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Interpolations">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/dgui_template_valueinsertion.html">
+<link rel="canonical" href="http://freemarker.org/docs/dgui_template_valueinsertion.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui.html"><span itemprop="name">Template Author's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_template.html"><span itemprop="name">The Template</span></a></li><li class="step-3" item
prop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_template_valueinsertion.html"><span itemprop="name">Interpolations</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Author\'s Guide","The Template","Interpolations"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="dgui_template_exp.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_misc.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="dgui_template_valueinsertion" itemprop="headline">Interpolations</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_14" data-menu-target="autoid_14">Overview</a></li><li><a class="page-menu-link" href="#autoid_15" data-menu-target="autoid_15">Automatic escaping</a></li><li><a class="page-menu-link" href="#autoid_16" data-menu-target="autoid_16">Guide to inserting numerical values</a></li><li><a class="page-menu-link" href="#dgui_template_valueinserion_universal_date" data-menu-target="dgui_template_valueinserion_universal_date">Guide to inserting date/time/date-time values</a></li><li><a class="page-menu-link" href="#autoid_17" data-menu-target="autoid_17">Guide to inserting boolean values</a></li><li><a class="page-menu-link" href="#autoid_18" data-menu-target="autoid_18">Exact conversion rules</a></li></ul> </div>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_14">Overview</h2>
+
+
+ <p>The format of interpolations is
+ <code class="inline-code">${<em class="code-color">expression</em>}</code>, where
+ <code class="inline-code"><em class="code-color">expression</em></code> can be all
+ kind of expression (e.g. <code class="inline-code">${100 + x}</code>).</p>
+
+ <p>The interpolation is used to insert the value of the
+ <code class="inline-code"><em class="code-color">expression</em></code> converted
+ to text (to string). Interpolations can be used only on two places:
+ in <a href="dgui_template_overallstructure.html"><span class="marked-text">text</span> sections</a> (e.g.,
+ <code class="inline-code"><h1>Hello ${name}!</h1></code>) and <a href="dgui_template_exp.html#dgui_template_exp_stringop_interpolation">in string literal
+ expressions</a> (e.g., <code class="inline-code"><#include
+ "/footer/${company}.html"></code>).</p>
+
+ <p>The result of the expression must be a string, number or
+ date/time/date-time value, because (by default) only these types are
+ converted to string by interpolation automatically. Values of other
+ types (such as booleans, sequences) must be converted to string
+ "manually" (see some advices later), or an error will
+ stop the template processing.</p>
+
+ <div class="callout warning">
+ <strong class="callout-label">Warning!</strong>
+
+ <p>It's a frequent mistake to use interpolations on places
+ where they needn't/shouldn't/can't be used. Interpolations work
+ <em>only</em> in <a href="dgui_template_overallstructure.html"><span class="marked-text">text</span> sections</a> (e.g.
+ <code class="inline-code"><h1>Hello ${name}!</h1></code>) and in
+ <a href="dgui_template_exp.html#dgui_template_exp_direct_string">string
+ literals</a> (e.g. <code class="inline-code"><#include
+ "/footer/${company}.html"></code>). A typical
+ <em>WRONG</em> usage is <code class="inline-code"><#if
+ ${big}>...</#if></code>, which will give syntactical
+ error. You should simply write <code class="inline-code"><#if
+ big>...</#if></code>. Also, <code class="inline-code"><#if
+ "${big}">...</#if></code> is
+ <em>WRONG</em>, since it converts the parameter value
+ to string and the <code class="inline-code">if</code> directive wants a boolean
+ value, so it will cause a runtime error.</p>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_15">Automatic escaping</h2>
+
+
+ <p>If the interpolation is in a <a href="dgui_template_overallstructure.html"><span class="marked-text">text</span> section</a> (not in a <a href="dgui_template_exp.html#dgui_template_exp_stringop_interpolation">string literal
+ expression</a>), the text that it inserts goes through
+ automatically escaping, <em>if FreeMarker was properly
+ configured</em>. <a href="dgui_quickstart_template.html#dgui_quickstart_template_autoescaping">See more about
+ escaping here...</a>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_16">Guide to inserting numerical values</h2>
+
+
+ <p>If the expression evaluates to a number then the numerical
+ value will be converted to string according the default number
+ format. This may includes the maximum number of decimals, grouping,
+ and like. Usually the programmer should set the default number
+ format; the template author doesn't have to deal with it (but he can
+ with the <code class="inline-code">number_format</code> setting; see in the <a href="ref_directive_setting.html">documentation of
+ <code>setting</code> directive</a>). Also, you can override
+ the default number format for a single interpolation with the <a href="ref_builtins_number.html#ref_builtin_string_for_number"><code>string</code>
+ built-in</a>.</p>
+
+ <p>The decimal separator used (and other such symbols, like the
+ group separator) depends on the current locale (language, country),
+ that also should be set by the programmer. For example, this
+ template:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${1.5}</pre></div>
+
+ <p>will print something like this if the current locale is
+ English:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">1.5</pre></div>
+
+ <p>but if the current locale is German then it will print
+ something like:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">1,5</pre></div>
+
+ <p>since German people use comma as decimal separator.</p>
+
+ <div class="callout warning">
+ <strong class="callout-label">Warning!</strong>
+
+ <p>As you can see, interpolations print for human audience (by
+ default at least), as opposed to ''computer audience''. In some
+ cases this is not good, like when you print a database record ID
+ as the part of an URL or as an invisible field value in a HTML
+ form, or when you print CSS/JavaScript numerical literals, because
+ these printed values will be read by computer programs and not by
+ humans. Most computer programs are very particular about the
+ format of the numbers, and understand only a kind of simple US
+ number formatting. For that, use the <a href="ref_builtins_number.html#ref_builtin_c"><code>c</code></a> (stands for
+ ''computer audience'') built-in, for example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><a href="/shop/productdetails?id=${product.id?c}">Details...</a></pre></div>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="dgui_template_valueinserion_universal_date">Guide to inserting date/time/date-time values</h2>
+
+
+ <p>If the expression evaluates to a date-like value then that
+ will be transformed to a text according to a default format. Usually
+ the programmer should set the default format; the template author
+ doesn't have to deal with it (but if you care, <a href="ref_directive_setting.html#topic.dateTimeFormatSettings">see the
+ <code>date_format</code>, <code>time_format</code> and
+ <code>datetime_format</code> settings</a> in the
+ documentation of the <a href="ref_directive_setting.html#ref.directive.setting"><code>setting</code>
+ directive</a>). Also, you can override the default formatting for
+ a single interpolation with the <a href="ref_builtins_date.html#ref_builtin_string_for_date"><code>string</code>
+ built-in</a>.</p>
+
+ <div class="callout warning">
+ <strong class="callout-label">Warning!</strong>
+
+ <p>To display a date-like value as text, FreeMarker must know
+ which parts of it are in use, that is, if only the date part
+ (year, month, day), or only the time part (hour, minute, second,
+ millisecond), or both. Unfortunately, because of the technical
+ limitations of Java platform, for some variables it is not
+ possible to detect this automatically; ask the programmer if the
+ data-model contains such problematic variables. When it's not
+ possible to find out which parts of the date are in use, then you
+ must help FreeMarker with the <a href="ref_builtins_date.html#ref_builtin_date_datetype"><code>date</code>,
+ <code>time</code> and <code>datetime</code></a>
+ built-ins (like <code class="inline-code">${lastUpdated?datetime}</code>), or it
+ will stop with error.</p>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_17">Guide to inserting boolean values</h2>
+
+
+ <p>By default an attempt to print boolean values with
+ interpolation causes an error and aborts template processing. For
+ example this will cause an error: <code class="inline-code">${a == 2}</code> and
+ will not print ''true'' or something like that. That's because
+ there's no universally useful way of representing booleans
+ (sometimes you want to print yes/no, sometimes enabled/disabled,
+ on/off, etc.).</p>
+
+ <p>However, you can convert booleans to strings with the <a href="ref_builtins_boolean.html#ref_builtin_string_for_boolean"><code>?string</code>
+ built-in</a>. For example, to print the value of the "married"
+ variable (assuming it's a boolean), you could write
+ <code class="inline-code">${married?string("yes", "no")}</code>.</p>
+
+ <p>FreeMarker can be configured with a default boolean format
+ with the <code class="inline-code">boolean_format</code> setting, then
+ <code class="inline-code">${married}</code> and such will work. However, in most
+ applications it's not recommended, as boolean should be rendered
+ differently on different places, and leaving the formatting on the
+ default is possibly just an oversight and thus should generate
+ error.</p>
+
+ <p>When you want to generate JavaScript or other computer
+ language parts, then <code class="inline-code">${someBoolean?c}</code>
+ ("c" stands for computer audience) should be used to
+ print true/false. (Remember that <code class="inline-code">?c</code> was also used
+ to print numbers for computer audience.)</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_18">Exact conversion rules</h2>
+
+
+ <p>For those who are interested, the exact rules of conversion
+ from the expression value to string (which is then still subject to
+ escaping) are these, in this order:</p>
+
+ <div class="orderedlist"><ol type="1">
+ <li>
+ <p>If the value is a number, then it is converted to string
+ in the format specified with the
+ <code class="inline-code">number_format</code> setting. So this usually
+ formats for human audience, as opposed to computer
+ audience.</p>
+ </li>
+
+ <li>
+ <p>Else if the value is date, time or date-time, then it is
+ converted to string in the format specified with the
+ <code class="inline-code">date_format</code>, <code class="inline-code">time_format</code>
+ or <code class="inline-code">datetime_format</code> setting, respectively. If
+ it can't be detected what kind of date-like value it is (date vs
+ time vs date-time), an error will occur.</p>
+ </li>
+
+ <li>
+ <p>Else if the value is a string, then there is no
+ conversion.</p>
+ </li>
+
+ <li>
+ <p>Else if the engine is in classic compatibility
+ mode:</p>
+
+ <div class="orderedlist"><ol type="1">
+ <li>
+ <p>If the value is a boolean, true values are converted
+ to "true", false values are converted to an empty
+ string.</p>
+ </li>
+
+ <li>
+ <p>If the expression is undefined
+ (<code class="inline-code">null</code> or a variable is undefined), it is
+ converted to an empty string.</p>
+ </li>
+
+ <li>
+ <p>Else an error will abort the template
+ processing.</p>
+ </li>
+ </ol></div>
+ </li>
+
+ <li>
+ <p>Else an error will abort the template processing.</p>
+ </li>
+ </ol></div>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="dgui_template_exp.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_misc.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/docgen.min.css
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/docgen.min.css b/builds/2.3.26-nightly/docgen-resources/docgen.min.css
new file mode 100644
index 0000000..3d88f72
--- /dev/null
+++ b/builds/2.3.26-nightly/docgen-resources/docgen.min.css
@@ -0,0 +1 @@
+@font-face{font-family:icomoon;src:url(fonts/icomoon.eot?-fbty7i);src:url(fonts/icomoon.eot?#iefix-fbty7i) format('embedded-opentype'),url(fonts/icomoon.woff?-fbty7i) format('woff'),url(fonts/icomoon.ttf?-fbty7i) format('truetype'),url(fonts/icomoon.svg?-fbty7i#icomoon) format('svg');font-weight:400;font-style:normal}html{font-family:Roboto,"Helvetica Neue",Arial,sans-serif;font-size:14px;color:#333;line-height:1.5;font-weight:400;background-color:#fff;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%;height:100%}body{min-height:100%;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}a{color:#0050b2;text-decoration:none;-ms-touch-action:manipulation;touch-action:manipulation}a:hover{color:#0973f5}h1,h2,h3,h4,h5,h6{font-family:Roboto,"Helvetica Neue",Arial,sans-serif;line-height:1.5;font-weig
ht:500;color:#0050b2;word-break:break-word}h1{font-size:36px}h2{font-size:21px}code,pre{font-size:13px;font-family:"Droid Sans Mono","Courier New",Courier,Monaco,Consolas,monospace;-webkit-font-smoothing:antialiased}code{padding:0 2px;color:#C5351F;word-break:break-word}a>code{color:#0050b2}a:hover>code{color:#0973f5}pre{display:block;border:0;padding:6px 12px;margin:0 0 9px;overflow-x:auto;word-break:normal;white-space:pre}@-moz-document url-prefix(){pre{white-space:pre-wrap;word-break:break-all}}img{border:0;vertical-align:middle}fieldset{margin:0;padding:0;border:0}input[type=search]::-webkit-search-cancel-button{display:none}table{border:0;border-collapse:collapse}td,th{padding:0}.header-top-bg{background-color:#0050b2;background-image:-webkit-radial-gradient(50% 15px circle,rgba(0,0,0,0) 0,rgba(0,0,0,0) 50%,#00276c 100%),url(img/patterned-bg.png);background-image:radial-gradient(circle at 50% 15px,rgba(0,0,0,0) 0,rgba(0,0,0,0) 50%,#00276c 100%),url(img/patterned-bg.png);box-sha
dow:0 3px 9px #c1c1c1;border-bottom:3px solid #003270;position:relative;z-index:2}.header-top{text-align:center;padding:12px 0}@media (min-width:568px){.header-top{padding-bottom:18px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}}.header-bottom-bg{background-color:#efefef;border-bottom:1px solid #dedede;box-shadow:0 0 7px #eee;position:relative;z-index:1}.search-row{padding-top:12px}@media (min-width:568px){.search-row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:end;-webkit-align-items:flex
-end;-ms-flex-align:end;align-items:flex-end}}.search-row .navigation-header,.search-row .search-form{padding-top:3px;padding-bottom:3px}.search-row .navigation-header{display:block;font-size:18px;line-height:1;-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}@media (min-width:568px){.search-row .navigation-header{font-size:27px}}@media (min-width:768px){.search-row .navigation-header{-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}}.breadcrumb-row{padding-top:9px;padding-bottom:9px}.search-row+.breadcrumb-row{padding-top:0}@media (min-width:568px){.breadcrumb-row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}}.main-content{-webkit-box-flex:1;-webkit-
flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.content-wrapper{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-top:18px;padding-bottom:18px}@media (min-width:768px){.content-wrapper{padding-top:30px;padding-bottom:48px}}.content-wrapper.no-toc{display:block}.content-wrapper .col-left{-webkit-box-flex:0;-webkit-flex:0 0 160px;-ms-flex:0 0 160px;flex:0 0 160px;max-width:160px;margin-right:18px;display:none}@media (min-width:568px){.content-wrapper .col-left{display:block}}@media (min-width:768px){.content-wrapper .col-left{-webkit-flex-basis:210px;-ms-flex-preferred-size:210px;flex-basis:210px;max-width:210px;margin-right:48px}.content-wrapper .col-left.expanded{max-width:10
0%}}.content-wrapper .col-right{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;position:relative}@media (min-width:768px){.page-content{padding-bottom:42px}}.page-content a{word-break:break-word}.page-content .page-title{border-bottom:1px solid #eee;padding-bottom:12px;margin-bottom:12px}.page-type-docgen-search-results .page-content .page-title{border:none;padding-bottom:0;margin-bottom:0}@media (min-width:768px){.page-content .page-title{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}}@media (min-width:768px){.page-content .page-title{padding-bottom:24px;margin-bottom:24px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:baseline;-webkit-align-items:baseline;-ms-flex-align:baseline;align-items:baseline;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}}.page-content .page-title .title-wr
apper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.page-content .page-title h1{margin:0;font-size:24px}@media (min-width:768px){.page-content .page-title h1{font-size:30px}}.page-content .page-title .subtitle{display:block;font-size:14px}@media (min-width:768px){.page-content .page-title .subtitle{font-size:18px}}@media (min-width:992px){.page-content .page-title .subtitle{font-size:24px}}.page-content .content-header::before{font-family:icomoon;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f1dd";margin-left:-18px;margin-top:2px;width:18px;font-weight:400;font-size:18px;color:#C82222;float:left;visibility:hidden}@media (min-width:768px){.page-content .content-header::before{margin-left:-24px}}.page-content .active::before{-webkit-animation:header-pulse .3s 3 steps(2,end);animation:header-pulse .3s 3 steps(2,end)}@-webkit-keyframes header-pulse{0%{visibility:hidden}100%{visibility:visible}}@keyframes header-pulse{0%{visibility:hidden}100%{visi
bility:visible}}.site-footer{border-top:3px solid #003270;background-color:#0050b2;background-image:-webkit-radial-gradient(50% -50px ellipse,rgba(0,0,0,0) 0,rgba(0,0,0,0) 24%,#000c3b 86%,#000c3b 100%),url(img/patterned-bg.png);background-image:radial-gradient(ellipse at 50% -50px,rgba(0,0,0,0) 0,rgba(0,0,0,0) 24%,#000c3b 86%,#000c3b 100%),url(img/patterned-bg.png);font-weight:300;color:#fff}.site-footer a{color:#fff}.site-footer a:hover{color:rgba(255,255,255,.8)}@media (min-width:568px){.footer-top{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}}@media (min-width:992px){.footer-top{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}}.footer-top .col-left{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.foote
r-top .col-right{padding-top:12px;padding-bottom:12px;-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}@media (min-width:992px){.footer-top .col-right{padding-top:24px}}@media (min-width:768px){.footer-top .col-right{text-align:right}}@media (min-width:568px){.sitemap{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}}.sitemap .column{padding-top:12px;padding-bottom:12px;margin-right:12px;-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}@media (min-width:992px){.sitemap .column{padding-top:24px}}.sitemap .column:last-child{margin-right:0}@media (min-width:768px){.sitemap .column{margin-right:54px}}.sitemap .column .column-header{color:#fff;border-bottom:2px solid #4c76ab;margin:0 0 6px;padding-bottom:6px;font-weight:400}.sitemap .column ul{padding:0;margin:0;list-style-type:none}.sitemap .column a{padding-right:9px;display:block}.xxe{display:inline-block;w
idth:110px;height:34px;margin-top:15px;background:#fff url(img/xxe.png) 50% no-repeat;border:1px solid #002254}.xxe span{display:none}.footer-bottom{padding:45px 0 25px;font-size:12px}.footer-bottom p{margin:0 0 6px}.logo{padding:6px 0 0;display:block}.logo img{display:block;margin:0 auto;width:204px;height:19px}.tabs{list-style-type:none;margin:0;padding:6px 0 0;text-align:center;font-weight:300}@media (min-width:568px){.tabs{margin-left:24px;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding-top:0}}.tabs li{display:inline-block}.tabs li.current a{color:#fff;font-weight:400}.secondary-tabs li::after,.tabs li::after{width:1px;background-color:#96a5b8;height:9px;display:inline-block;content:'';margin:0 15px}.secondary-tabs li:last-child::after,.tabs li:last-child::after{display:none}.secondary-tabs .tab,.tabs li a{color:#c9dbf1}.secondary-tabs li a:hover,.tabs li a:hover{color:#fff}.secondary-tabs{margin:0;list-style-type:none;padding:6px 0 0;display:non
e;text-align:center}@media (min-width:768px){.secondary-tabs{display:block;text-align:right;-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}}.secondary-tabs li{display:inline-block}.secondary-tabs li:last-child{margin-right:0}.secondary-tabs li a:hover strong{border-bottom-color:transparent}.secondary-tabs .tab::before{font-family:icomoon;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:18px;height:18px;display:inline-block;font-size:12px;text-align:center}@media (min-width:992px){.secondary-tabs .tab::before{padding-right:6px}}.secondary-tabs .tab.icon-heart::before{content:"\e609"}.secondary-tabs .tab.icon-star::before{content:"\e608"}.secondary-tabs .tab.icon-bug::before{content:"\f188"}.secondary-tabs .tab.icon-download::before{content:"\e606"}.secondary-tabs .tab strong{font-weight:400;border-bottom:1px solid #8fafd7}.secondary-tabs .tab span{display:none}@media (min-width:992px){.secondary-tabs .tab span{display:inline}}.bread
crumb{list-style-type:none;margin:0;padding:6px 0 0 0;font-size:12px;display:block;white-space:nowrap;overflow:hidden}@media (min-width:768px){.breadcrumb{font-size:13px}}.breadcrumb li{display:inline-block}.breadcrumb li::after{content:'/';color:#979797;margin:0 3px}@media (min-width:768px){.breadcrumb li::after{margin:0 6px}}.breadcrumb li:last-child a{color:#333}.breadcrumb li:last-child::after{display:none}.breadcrumb li.step-0 a::after{font-family:icomoon;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\e60a";display:inline-block;width:14px;height:14px;font-size:12px;position:relative;top:1px}.breadcrumb li.step-0 a span{display:none}.table-of-contents{list-style-type:none;padding:0;margin:6px 0 0;font-size:12px}@media (min-width:768px){.table-of-contents{margin-top:12px;font-size:13px}}.table-of-contents .current::before{color:#0973f5}.table-of-contents .current>a:first-child{color:#0973f5}.table-of-contents ul{list-style-type:none}.section{border
-bottom:1px solid #eee;margin-bottom:12px;padding-bottom:12px}@media (min-width:768px){.section{margin-bottom:24px;padding-bottom:24px}}.section.last{border-bottom:0;margin-bottom:0}.section.last .depth-0-link{margin-bottom:0}.depth-0-link{color:#0050b2;text-transform:uppercase;font-weight:400;display:block;line-height:1;margin-bottom:12px}@media (min-width:768px){.depth-0-link{margin-bottom:24px}}a.depth-0-link:hover{color:#0973f5}.depth-1{margin:0;padding:0}.depth-1 li{padding-left:14px;position:relative}.depth-1 li::before{font-family:icomoon;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\e602";width:14px;height:14px;display:block;position:absolute;left:-3px;top:2px;font-size:14px;line-height:1}.depth-1 li.has-children::before{content:"\e600";font-size:13px;cursor:pointer}.depth-1 li.has-children.open::before{content:"\e601";font-size:13px}.depth-1 li.has-children .last::before{content:"\e602";top:3px}.depth-1 a{display:block;color:#444}.depth-1 a:
hover{color:#888}.depth-2{margin:0;padding:0}.closed ul{display:none}.open ul{display:block}.page-menu{margin:0 0 12px;padding:0 0 12px 18px;border-bottom:1px solid #eee}.page-menu .page-menu-title{margin-top:0;margin-bottom:1em;color:#0050b2;font-weight:700}@media (min-width:768px){.page-menu{margin-bottom:24px;margin-top:-12px}}.page-menu ul{margin:0 0 0 18px;padding:0}.page-menu a:visited{color:purple}.search-form{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;height:26px;width:100%;display:inline-block}.search-form.offline{display:none}@media (min-width:768px){.search-form{max-width:300px}}.search-form fieldset{height:26px}.search-form .search-btn{color:#0050b2;line-height:1;background-color:#fff;background-image:none;border:0;border-radius:0;padding:0 3px;width:26px;height:24px;position:relative;top:-25px;float:right;right:1px}.search-form .search-btn:focus,.search-form .search-btn:hover{color:#4c9cff;cursor:pointer;outline:0}.search-form .search-btn::
before{font-family:icomoon;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f002";box-sizing:border-box;font-size:16px;width:18px;height:18px;display:block}.search-form .search-input{-webkit-appearance:none;font-family:Roboto,"Helvetica Neue",Arial,sans-serif;background-image:none;background:#fff;font-size:16px;line-height:21px;border:1px solid #aec0d6;border-radius:0;box-sizing:border-box;padding:3px 24px 3px 9px;height:26px;width:100%;-webkit-transition:border-color .2s ease-in;transition:border-color .2s ease-in}.search-form .search-input::-moz-placeholder{color:#0050b2;opacity:.6;font-size:14px}.search-form .search-input:-ms-input-placeholder{color:#0050b2;font-size:14px;line-height:21px}.search-form .search-input::-webkit-input-placeholder{color:#0050b2;opacity:.6;font-size:14px}.search-form .search-input:focus{outline:0;border-color:#0050b2}.search-results .gsc-control-cse{padding:0}.search-results .gs-title,.search-results .gs-title *{color:#0050
b2!important;text-decoration:none!important}.search-results .gs-title :hover,.search-results .gs-title:hover{color:#0973f5!important}.bottom-pagers-wrapper::after,.bottom-pagers-wrapper::before{content:" ";display:table}.bottom-pagers-wrapper::after{clear:both}@media (min-width:768px){.bottom-pagers-wrapper{position:absolute;bottom:0;right:0}}.pagers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;white-space:nowrap}@media (min-width:768px){.pagers{float:right;font-size:14px}}.pagers.top{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1;margin-bottom:6px}@media (min-width:768px){.pagers.top{margin-left:12px;margin-bottom:0}}.paging-arrow{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;word-break:normal}.paging-arrow::before{font-family:icomoon;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:block;line-height:21px;vertical-align:middle;width:17px}@media (min-width:568px){.paging-arrow.p
revious{margin-right:12px}}.paging-arrow.previous::before{content:"\f190";padding-right:3px;float:left}.paging-arrow.next{text-align:right}.paging-arrow.next::before{content:"\f18e";padding-left:3px;float:right}.bookmarks{text-align:right;display:none}@media (min-width:992px){.bookmarks{display:block}}.bookmarks::before{font-family:icomoon;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\e607";width:14px;height:14px;display:inline-block;position:relative;top:2px;margin-right:1px;color:#0050b2}.bookmarks ul{list-style-type:none;margin:0;padding:0;display:inline-block;font-size:13px}.bookmarks ul li{display:inline-block}.bookmarks ul li::after{content:",";display:inline-block;margin:0 3px 0 0}.bookmarks ul li:last-child::after{display:none}.callout{padding:15px 18px;margin:12px 0;border-left:4px solid #eee;background-color:#f9f9f9;max-width:600px}.callout.note{border-left-color:#A181AE;background-color:#F9F2FA}.callout.note .callout-label{color:#7D578C}.c
allout.warning{border-left-color:#EDBABA;background-color:#FCEAEA}.callout.warning .callout-label{color:#900}.callout p:first-of-type{margin-top:3px}.callout p:last-child{margin-bottom:0}.callout-label{display:block;padding-bottom:3px}.callout-label::before{font-family:icomoon;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:12px}.note .callout-label::before{content:"\e605";margin-right:3px}.warning .callout-label::before{content:"\e604";font-size:14px;margin-right:6px}.marked-text{background-color:#AEDDFF}.marked-interpolation{background-color:#FFC070}.marked-ftl-tag{background-color:#FFEE6B}.marked-comment{background-color:#5CFF6A}.marked-template{background-color:#e4e4e4}.marked-data-model{background-color:#D2E2EF}.marked-output{background-color:#D5EAD7}.marked-invisible-text{opacity:.33}.marked-for-programmers{color:#339;font-style:italic}.code-color{color:red}.code-block{border:0;position:relative;padding:3px 6px 4px;margin:12px 0;background-color:
#f4f4f4}@media (min-width:992px){.code-block{display:inline-block;min-width:600px;margin:0}ul .code-block{min-width:300px;display:block}}.callout .code-block{background-color:transparent!important;padding:0!important;margin:0!important}.callout .code-block::after{display:none!important}.code-block.code-template{background-color:#f4f4f4;padding-top:23px}.code-block.code-template::after{position:absolute;top:0;right:0;left:0;padding:3px 9px;font-size:10px;font-weight:700;font-family:Roboto,"Helvetica Neue",Arial,sans-serif;text-transform:uppercase;color:rgba(94,94,94,.8);background-color:#e4e4e4;content:"Template"}.code-block.code-data-model{background-color:#ecf3f8;padding-top:23px}.code-block.code-data-model::after{position:absolute;top:0;right:0;left:0;padding:3px 9px;font-size:10px;font-weight:700;font-family:Roboto,"Helvetica Neue",Arial,sans-serif;text-transform:uppercase;color:rgba(94,94,94,.8);background-color:#D2E2EF;content:"Data Model"}.code-block.code-output{background-col
or:#ECF8EE;padding-top:23px}.code-block.code-output::after{position:absolute;top:0;right:0;left:0;padding:3px 9px;font-size:10px;font-weight:700;font-family:Roboto,"Helvetica Neue",Arial,sans-serif;text-transform:uppercase;color:rgba(94,94,94,.8);background-color:#D5EAD7;content:"Output"}.table-responsive{min-height:.01%;overflow-x:auto}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar}}.table{background-color:transparent;border-spacing:0;border-collapse:collapse;border:1px solid #ddd;width:100%;max-width:100%}.table th{font-weight:500;text-align:left;background-color:#f9f9f9;border-bottom:1px solid #ddd;white-space:nowrap}.table td,.table th{padding:3px 6px;border:1px solid #ddd;vertical-align:top}.table td{white-space:nowrap}@media (min-width:992px){.table td{white-space:normal}}.table a{word-break:normal}.social-icons{margin:0;padding:0;list-style-type:none}.social-icons li{display:inline-block;m
argin-right:18px}.social-icons li:last-child{margin-right:0}.social-icons li a::before{font-family:icomoon;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:14px;height:22px;display:inline-block;padding-right:3px}.social-icons li .github::before{content:"\f09b"}.social-icons li .twitter::before{content:"\f099"}.social-icons li .stack-overflow::before{content:"\f16c"}.site-width{margin-left:auto;margin-right:auto;padding-left:18px;padding-right:18px}@media (min-width:768px){.site-width{padding-left:24px;padding-right:24px;width:700px}}@media (min-width:992px){.site-width{width:924px}}@media (min-width:1200px){.site-width{width:1132px}}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.center-img{text-align:center}.center-img img{max-width:100%}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/fonts/NOTICE
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/fonts/NOTICE b/builds/2.3.26-nightly/docgen-resources/fonts/NOTICE
new file mode 100644
index 0000000..8bf197f
--- /dev/null
+++ b/builds/2.3.26-nightly/docgen-resources/fonts/NOTICE
@@ -0,0 +1,20 @@
+The "icomoon" fonts in this directory were generated with
+https://icomoon.io/app/, from a selection of icons from these fonts:
+
+* Entypo pictograms, version 2.0, by Daniel Bruce (www.entypo.com).
+ Each included pictogram is either licensed under Creative
+ Commons Attribution-ShareAlike 3.0 (CC BY-SA 3.0)
+ (http://creativecommons.org/licenses/by-sa/3.0/legalcode), or
+ under SIL Open Font License 1.1 (http://scripts.sil.org/OFL).
+
+* Font Awesome by Dave Gandy (http://fontawesome.io), licensed under
+ SIL Open Font License 1.1 (http://scripts.sil.org/OFL).
+
+* Material Design icons by Google
+ (http://google.github.io/material-design-icons/), licensed under
+ Creative Common Attribution 4.0 International License (CC-BY 4.0)
+ (https://creativecommons.org/licenses/by/4.0/).
+
+If "selection.json" is present in this directory, it stores the
+IcoMoon App selection, and is only stored here for reproducibility.
+It's not used for anything.
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/fonts/icomoon.eot
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/fonts/icomoon.eot b/builds/2.3.26-nightly/docgen-resources/fonts/icomoon.eot
new file mode 100644
index 0000000..6d5cc05
Binary files /dev/null and b/builds/2.3.26-nightly/docgen-resources/fonts/icomoon.eot differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/fonts/icomoon.svg
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/fonts/icomoon.svg b/builds/2.3.26-nightly/docgen-resources/fonts/icomoon.svg
new file mode 100644
index 0000000..0c1e073
--- /dev/null
+++ b/builds/2.3.26-nightly/docgen-resources/fonts/icomoon.svg
@@ -0,0 +1,29 @@
+<?xml version="1.0" standalone="no"?>
+<!-- See NOTICE file for copyright information! -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>Generated by IcoMoon</metadata>
+<defs>
+<font id="icomoon" horiz-adv-x="1024">
+<font-face units-per-em="1024" ascent="960" descent="-64" />
+<missing-glyph horiz-adv-x="1024" />
+<glyph unicode=" " d="" horiz-adv-x="512" />
+<glyph unicode="" d="M810.667 384h-256v-256h-85.333v256h-256v85.333h256v256h85.333v-256h256v-85.333z" />
+<glyph unicode="" d="M810.667 384h-597.333v85.333h597.333v-85.333z" />
+<glyph unicode="" d="M399.36 460.8c0-62.208 50.483-112.64 112.691-112.64s112.589 50.483 112.589 112.64c0 62.208-50.381 112.589-112.589 112.589s-112.691-50.381-112.691-112.589z" />
+<glyph unicode="" d="M998.963 52.224l-456.038 851.558c-6.349 11.008-18.125 17.818-30.925 17.818-12.851 0-24.627-6.81-30.925-17.818l-455.987-851.558c-6.195-10.803-6.093-24.115 0.256-34.816 6.4-10.803 18.022-17.408 30.618-17.408h912.077c12.544 0 24.269 6.605 30.618 17.408 6.349 10.701 6.451 24.013 0.307 34.816zM563.2 102.4h-102.4v102.4h102.4v-102.4zM563.2 281.6h-102.4v332.8h102.4v-332.8z" />
+<glyph unicode="" d="M636.518 972.8c68.608 0 102.912-46.694 102.912-100.198 0-66.816-59.597-128.614-137.165-128.614-64.973 0-102.861 38.4-101.069 101.888 0 53.402 45.107 126.925 135.322 126.925zM425.421-51.2c-54.17 0-93.85 33.382-55.962 180.429l62.157 260.71c10.803 41.677 12.595 58.419 0 58.419-16.23 0-86.477-28.774-128.102-57.19l-27.034 45.056c131.686 111.923 283.187 177.51 348.211 177.51 54.118 0 63.13-65.178 36.096-165.376l-71.219-274.022c-12.595-48.384-7.219-65.075 5.427-65.075 16.23 0 69.478 20.070 121.805 61.798l30.72-41.677c-128.102-130.406-268.032-180.582-322.099-180.582z" />
+<glyph unicode="" d="M768 614.4h-153.6v307.2h-204.8v-307.2h-153.6l256-256 256 256zM990.106 279.962c-10.752 11.469-82.483 88.218-102.963 108.237-13.568 13.261-32.973 21.402-53.35 21.402h-89.958l156.877-153.293h-181.453c-5.222 0-9.933-2.662-12.288-6.81l-41.779-95.898h-306.381l-41.779 95.898c-2.355 4.147-7.117 6.81-12.288 6.81h-181.453l156.826 153.293h-89.907c-20.326 0-39.731-8.141-53.35-21.402-20.48-20.070-92.211-96.819-102.963-108.237-25.037-26.675-38.81-47.923-32.256-74.189l28.723-157.389c6.554-26.317 35.379-47.923 64.102-47.923h835.174c28.723 0 57.549 21.606 64.102 47.923l28.723 157.389c6.451 26.266-7.27 47.514-32.358 74.189z" />
+<glyph unicode="" d="M768 972.8h-204.8c-28.314 0-51.2-22.886-51.2-51.2l1.178-11.366c56.422 0 102.4-45.926 102.4-102.4v-581.581l50.022 60.467 153.6-184.32v819.2c0 28.314-22.886 51.2-51.2 51.2zM461.978 819.2h-205.978c-28.314 0-51.2-22.886-51.2-51.2v-819.2l153.6 184.32 153.6-184.32v819.2c0 28.314-21.709 51.2-50.022 51.2z" />
+<glyph unicode="" d="M512 906.24l122.266-344.166h328.294l-267.878-202.138 95.795-354.714-278.477 212.685-278.426-212.685 95.744 354.714-267.93 202.138h328.294l122.317 344.166z" />
+<glyph unicode="" d="M880.128 760.013c-85.606 78.592-224.41 78.592-310.016 0l-58.112-53.299-58.163 53.299c-85.606 78.592-224.358 78.592-309.965 0-96.307-88.371-96.307-231.373 0-319.744l368.128-337.869 368.128 337.869c96.256 88.371 96.256 231.424 0 319.744zM825.549 492.8l-313.549-292.608-313.6 292.608c-31.59 29.030-43.827 66.918-43.827 107.213s7.066 73.37 38.707 102.349c27.904 25.651 65.434 39.782 105.626 39.782 40.141 0 77.67-24.371 105.574-50.074l107.52-93.44 107.469 93.491c27.955 25.702 65.434 50.074 105.626 50.074s77.722-14.131 105.626-39.782c31.642-28.979 38.656-62.054 38.656-102.349s-12.186-78.234-43.827-107.264z" />
+<glyph unicode="" d="M737.28 512h-296.96c-28.262 0-30.72-22.886-30.72-51.2s2.458-51.2 30.72-51.2h296.96c28.262 0 30.72 22.886 30.72 51.2s-2.458 51.2-30.72 51.2zM839.68 256h-399.36c-28.262 0-30.72-22.886-30.72-51.2s2.458-51.2 30.72-51.2h399.36c28.262 0 30.72 22.886 30.72 51.2s-2.458 51.2-30.72 51.2zM440.32 665.6h399.36c28.262 0 30.72 22.886 30.72 51.2s-2.458 51.2-30.72 51.2h-399.36c-28.262 0-30.72-22.886-30.72-51.2s2.458-51.2 30.72-51.2zM276.48 512h-92.16c-28.262 0-30.72-22.886-30.72-51.2s2.458-51.2 30.72-51.2h92.16c28.262 0 30.72 22.886 30.72 51.2s-2.458 51.2-30.72 51.2zM276.48 256h-92.16c-28.262 0-30.72-22.886-30.72-51.2s2.458-51.2 30.72-51.2h92.16c28.262 0 30.72 22.886 30.72 51.2s-2.458 51.2-30.72 51.2zM276.48 768h-92.16c-28.262 0-30.72-22.886-30.72-51.2s2.458-51.2 30.72-51.2h92.16c28.262 0 30.72 22.886 30.72 51.2s-2.458 51.2-30.72 51.2z" />
+<glyph unicode="" d="M658.286 475.428q0 105.714-75.143 180.857t-180.857 75.143-180.857-75.143-75.143-180.857 75.143-180.857 180.857-75.143 180.857 75.143 75.143 180.857zM950.857 0q0-29.714-21.714-51.429t-51.429-21.714q-30.857 0-51.429 21.714l-196 195.429q-102.286-70.857-228-70.857-81.714 0-156.286 31.714t-128.571 85.714-85.714 128.571-31.714 156.286 31.714 156.286 85.714 128.571 128.571 85.714 156.286 31.714 156.286-31.714 128.571-85.714 85.714-128.571 31.714-156.286q0-125.714-70.857-228l196-196q21.143-21.143 21.143-51.429z" horiz-adv-x="951" />
+<glyph unicode="" d="M925.714 717.714q-38.286-56-92.571-95.429 0.571-8 0.571-24 0-74.286-21.714-148.286t-66-142-105.429-120.286-147.429-83.429-184.571-31.143q-154.857 0-283.429 82.857 20-2.286 44.571-2.286 128.571 0 229.143 78.857-60 1.143-107.429 36.857t-65.143 91.143q18.857-2.857 34.857-2.857 24.571 0 48.571 6.286-64 13.143-106 63.714t-42 117.429v2.286q38.857-21.714 83.429-23.429-37.714 25.143-60 65.714t-22.286 88q0 50.286 25.143 93.143 69.143-85.143 168.286-136.286t212.286-56.857q-4.571 21.714-4.571 42.286 0 76.571 54 130.571t130.571 54q80 0 134.857-58.286 62.286 12 117.143 44.571-21.143-65.714-81.143-101.714 53.143 5.714 106.286 28.571z" horiz-adv-x="951" />
+<glyph unicode="" d="M877.714 438.857q0-143.429-83.714-258t-216.286-158.571q-15.429-2.857-22.571 4t-7.143 17.143v120.571q0 55.429-29.714 81.143 32.571 3.429 58.571 10.286t53.714 22.286 46.286 38 30.286 60 11.714 86q0 69.143-45.143 117.714 21.143 52-4.571 116.571-16 5.143-46.286-6.286t-52.571-25.143l-21.714-13.714q-53.143 14.857-109.714 14.857t-109.714-14.857q-9.143 6.286-24.286 15.429t-47.714 22-49.143 7.714q-25.143-64.571-4-116.571-45.143-48.571-45.143-117.714 0-48.571 11.714-85.714t30-60 46-38.286 53.714-22.286 58.571-10.286q-22.857-20.571-28-58.857-12-5.714-25.714-8.571t-32.571-2.857-37.429 12.286-31.714 35.714q-10.857 18.286-27.714 29.714t-28.286 13.714l-11.429 1.714q-12 0-16.571-2.571t-2.857-6.571 5.143-8 7.429-6.857l4-2.857q12.571-5.714 24.857-21.714t18-29.143l5.714-13.143q7.429-21.714 25.143-35.143t38.286-17.143 39.714-4 31.714 2l13.143 2.286q0-21.714 0.286-50.857t0.286-30.857q0-10.286-7.429-17.143t-22.857-4q-132.571 44-216.286 158.571t-83.714 258q0 119.429 58.857 220
.286t159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
+<glyph unicode="" d="M530.286 150.286v-86.286l-404-0.571v86.286zM668 348v-400.571l-0.571-20v-0.571l-667.429 0.571v420.571h69.143v-353.143h530.286v353.143h68.571zM137.714 297.714l402.286-37.143-7.429-85.714-402.857 37.143zM176.571 478.286l390.286-104.571-22.286-83.429-390.286 104.571zM269.714 677.714l348-205.714-44-74.286-348 205.714zM475.429 866.857l227.429-334.286-70.857-48.571-228 333.714zM734.286 950.857l69.143-398.286-85.143-14.857-69.143 398.286z" horiz-adv-x="805" />
+<glyph unicode="" d="M932.571 402.286q0-14.857-10.857-25.714t-25.714-10.857h-128q0-97.714-38.286-165.714l118.857-119.429q10.857-10.857 10.857-25.714t-10.857-25.714q-10.286-10.857-25.714-10.857t-25.714 10.857l-113.143 112.571q-2.857-2.857-8.571-7.429t-24-16.286-37.143-20.857-46.857-16.571-55.429-7.429v512h-73.143v-512q-29.143 0-58 7.714t-49.714 18.857-37.714 22.286-24.857 18.571l-8.571 8-104.571-118.286q-11.429-12-27.429-12-13.714 0-24.571 9.143-10.857 10.286-11.714 25.429t8.857 26.571l115.429 129.714q-33.143 65.143-33.143 156.571h-128q-14.857 0-25.714 10.857t-10.857 25.714 10.857 25.714 25.714 10.857h128v168l-98.857 98.857q-10.857 10.857-10.857 25.714t10.857 25.714 25.714 10.857 25.714-10.857l98.857-98.857h482.286l98.857 98.857q10.857 10.857 25.714 10.857t25.714-10.857 10.857-25.714-10.857-25.714l-98.857-98.857v-168h128q14.857 0 25.714-10.857t10.857-25.714zM658.286 731.428h-365.714q0 76 53.429 129.429t129.429 53.429 129.429-53.429 53.429-129.429z" horiz-adv-x="951" />
+<glyph unicode="" d="M658.286 438.857q0-8-5.143-13.143l-182.857-182.857q-5.143-5.143-13.143-5.143-7.429 0-12.857 5.429t-5.429 12.857v109.714h-201.143q-7.429 0-12.857 5.429t-5.429 12.857v109.714q0 7.429 5.429 12.857t12.857 5.429h201.143v109.714q0 8 5.143 13.143t13.143 5.143q6.857 0 13.714-5.714l182.286-182.286q5.143-5.143 5.143-13.143zM749.714 438.857q0 84.571-41.714 156t-113.143 113.143-156 41.714-156-41.714-113.143-113.143-41.714-156 41.714-156 113.143-113.143 156-41.714 156 41.714 113.143 113.143 41.714 156zM877.714 438.857q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
+<glyph unicode="" d="M658.286 493.714v-109.714q0-7.429-5.429-12.857t-12.857-5.429h-201.143v-109.714q0-8-5.143-13.143t-13.143-5.143q-6.857 0-13.714 5.714l-182.286 182.286q-5.143 5.143-5.143 13.143t5.143 13.143l182.857 182.857q5.143 5.143 13.143 5.143 7.429 0 12.857-5.429t5.429-12.857v-109.714h201.143q7.429 0 12.857-5.429t5.429-12.857zM749.714 438.857q0 84.571-41.714 156t-113.143 113.143-156 41.714-156-41.714-113.143-113.143-41.714-156 41.714-156 113.143-113.143 156-41.714 156 41.714 113.143 113.143 41.714 156zM877.714 438.857q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
+<glyph unicode="" d="M730.286 842.857v-41.714q0-16.571-10.571-34.857t-24.286-18.286q-28.571 0-30.857-0.571-14.857-3.429-18.286-17.714-1.714-6.286-1.714-36.571v-658.286q0-14.286-10.286-24.571t-24.571-10.286h-61.714q-14.286 0-24.571 10.286t-10.286 24.571v696h-81.714v-696q0-14.286-10-24.571t-24.857-10.286h-61.714q-14.857 0-24.857 10.286t-10 24.571v283.429q-84 6.857-140 33.714-72 33.143-109.714 102.286-36.571 66.857-36.571 148 0 94.857 50.286 163.429 50.286 67.429 119.429 90.857 63.429 21.143 238.286 21.143h273.714q14.286 0 24.571-10.286t10.286-24.571z" horiz-adv-x="731" />
+</font></defs></svg>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/fonts/icomoon.ttf
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/fonts/icomoon.ttf b/builds/2.3.26-nightly/docgen-resources/fonts/icomoon.ttf
new file mode 100644
index 0000000..f643244
Binary files /dev/null and b/builds/2.3.26-nightly/docgen-resources/fonts/icomoon.ttf differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/fonts/icomoon.woff
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/fonts/icomoon.woff b/builds/2.3.26-nightly/docgen-resources/fonts/icomoon.woff
new file mode 100644
index 0000000..7f40846
Binary files /dev/null and b/builds/2.3.26-nightly/docgen-resources/fonts/icomoon.woff differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/img/callouts/1.gif
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/img/callouts/1.gif b/builds/2.3.26-nightly/docgen-resources/img/callouts/1.gif
new file mode 100644
index 0000000..0d66977
Binary files /dev/null and b/builds/2.3.26-nightly/docgen-resources/img/callouts/1.gif differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/img/callouts/10.gif
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/img/callouts/10.gif b/builds/2.3.26-nightly/docgen-resources/img/callouts/10.gif
new file mode 100644
index 0000000..fb50b06
Binary files /dev/null and b/builds/2.3.26-nightly/docgen-resources/img/callouts/10.gif differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/img/callouts/11.gif
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/img/callouts/11.gif b/builds/2.3.26-nightly/docgen-resources/img/callouts/11.gif
new file mode 100644
index 0000000..9f5dba4
Binary files /dev/null and b/builds/2.3.26-nightly/docgen-resources/img/callouts/11.gif differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/img/callouts/12.gif
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/img/callouts/12.gif b/builds/2.3.26-nightly/docgen-resources/img/callouts/12.gif
new file mode 100644
index 0000000..a373d0b
Binary files /dev/null and b/builds/2.3.26-nightly/docgen-resources/img/callouts/12.gif differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/img/callouts/13.gif
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/img/callouts/13.gif b/builds/2.3.26-nightly/docgen-resources/img/callouts/13.gif
new file mode 100644
index 0000000..b00b163
Binary files /dev/null and b/builds/2.3.26-nightly/docgen-resources/img/callouts/13.gif differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/img/callouts/14.gif
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/img/callouts/14.gif b/builds/2.3.26-nightly/docgen-resources/img/callouts/14.gif
new file mode 100644
index 0000000..6d6642e
Binary files /dev/null and b/builds/2.3.26-nightly/docgen-resources/img/callouts/14.gif differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/img/callouts/2.gif
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/img/callouts/2.gif b/builds/2.3.26-nightly/docgen-resources/img/callouts/2.gif
new file mode 100644
index 0000000..100ff79
Binary files /dev/null and b/builds/2.3.26-nightly/docgen-resources/img/callouts/2.gif differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/img/callouts/3.gif
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/img/callouts/3.gif b/builds/2.3.26-nightly/docgen-resources/img/callouts/3.gif
new file mode 100644
index 0000000..5008ca7
Binary files /dev/null and b/builds/2.3.26-nightly/docgen-resources/img/callouts/3.gif differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/img/callouts/4.gif
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/img/callouts/4.gif b/builds/2.3.26-nightly/docgen-resources/img/callouts/4.gif
new file mode 100644
index 0000000..0e5617d
Binary files /dev/null and b/builds/2.3.26-nightly/docgen-resources/img/callouts/4.gif differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/img/callouts/5.gif
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/img/callouts/5.gif b/builds/2.3.26-nightly/docgen-resources/img/callouts/5.gif
new file mode 100644
index 0000000..9bc75ad
Binary files /dev/null and b/builds/2.3.26-nightly/docgen-resources/img/callouts/5.gif differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/img/callouts/6.gif
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/img/callouts/6.gif b/builds/2.3.26-nightly/docgen-resources/img/callouts/6.gif
new file mode 100644
index 0000000..d396407
Binary files /dev/null and b/builds/2.3.26-nightly/docgen-resources/img/callouts/6.gif differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/img/callouts/7.gif
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/img/callouts/7.gif b/builds/2.3.26-nightly/docgen-resources/img/callouts/7.gif
new file mode 100644
index 0000000..c90b2f3
Binary files /dev/null and b/builds/2.3.26-nightly/docgen-resources/img/callouts/7.gif differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/img/callouts/8.gif
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/img/callouts/8.gif b/builds/2.3.26-nightly/docgen-resources/img/callouts/8.gif
new file mode 100644
index 0000000..6fe3287
Binary files /dev/null and b/builds/2.3.26-nightly/docgen-resources/img/callouts/8.gif differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/img/callouts/9.gif
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/img/callouts/9.gif b/builds/2.3.26-nightly/docgen-resources/img/callouts/9.gif
new file mode 100644
index 0000000..bc5c812
Binary files /dev/null and b/builds/2.3.26-nightly/docgen-resources/img/callouts/9.gif differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/img/patterned-bg.png
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/img/patterned-bg.png b/builds/2.3.26-nightly/docgen-resources/img/patterned-bg.png
new file mode 100644
index 0000000..a476f88
Binary files /dev/null and b/builds/2.3.26-nightly/docgen-resources/img/patterned-bg.png differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/img/xxe.png
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/img/xxe.png b/builds/2.3.26-nightly/docgen-resources/img/xxe.png
new file mode 100644
index 0000000..17b82aa
Binary files /dev/null and b/builds/2.3.26-nightly/docgen-resources/img/xxe.png differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/docgen-resources/main.min.js
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/docgen-resources/main.min.js b/builds/2.3.26-nightly/docgen-resources/main.min.js
new file mode 100644
index 0000000..c153067
--- /dev/null
+++ b/builds/2.3.26-nightly/docgen-resources/main.min.js
@@ -0,0 +1 @@
+"use strict";!function(t,e){function n(t){var e=null!=t.url,n=document.createElement(e?"a":"span");return n.innerHTML=t.title,e&&(n.href=t.url),n.className="depth-"+d+"-link",n}function a(t){t.stopPropagation();var e=t.target.parentNode;39===t.which?(e.classList.remove("closed"),e.classList.add("open")):37===t.which&&(e.classList.add("closed"),e.classList.remove("open"))}function i(t){if(t.children.length){for(var e=0;e<t.children.length;e++)if(t.children[e].isFile)return!1;return!0}return!0}function s(t){t.stopPropagation();var e=t.target;"LI"===e.tagName.toUpperCase()&&(e.classList.toggle("closed"),e.classList.toggle("open"))}function o(t,c,l){var r=document.createElement("ul");r.classList.add("depth-"+d);for(var u=0;u<t.length;u++){var f=t[u],p=document.createElement("li"),h=i(f);0===d&&p.classList.add("section"),"Search"===f.title&&(p.style.display="none"),p.addEventListener("click",s),p.addEventListener("keydown",a),p.appendChild(n(f)),f.title===e[c+1]&&l?(c+2===e.length&&p.cla
ssList.add("current"),0!==d&&p.classList.add("open"),c++):d>0&&p.classList.add("closed"),h?(p.classList.add("last"),"undefined"!=typeof f.flags&&p.classList.add(f.flags.join(" "))):d>0&&p.classList.add("has-children"),h||(d++,p.appendChild(o(f.children,c,f.title===e[c])),d--),r.appendChild(p)}return r}function c(t){var e=document.getElementById("table-of-contents-wrapper"),n=o(t.children,0,!0);n.classList.add("table-of-contents"),e.appendChild(n)}var d=0;c(t)}(toc,breadcrumb),function(){function t(t){var e=t.offsetTop+t.offsetParent.offsetTop-5,n=window.pageYOffset;return e===n||n>e}function e(t){var e=document.getElementById(t);e&&e.classList.remove("active")}function n(n){var a=document.getElementById(n);window.setTimeout(function(){a&&!t(a)&&(a.classList.add("active"),window.setTimeout(function(){e(n)},1e3))},1)}function a(t){var e=t.target;e.classList.contains("page-menu-link")&&n(e.getAttribute("data-menu-target"))}function i(){return window.location.hash?window.location.hash.s
ubstring(1):""}function s(){var t=i();""!==t&&n(t)}function o(){document.addEventListener("click",a),document.addEventListener("DOMContentLoaded",s)}o()}(),function(){function t(t){t=t.replace(/\+/g," "),t=decodeURIComponent(t),a.value=t}function e(){var e=window.location.search;if(""!==e)for(var n=e.split("&"),a=0;a<n.length;a++){var s=n[a],o=s.split("=");o[0]==="?"+i&&t(o[1])}}function n(){a=document.getElementById("search-field"),null!==a&&e()}var a,i="q";n()}();
\ No newline at end of file
[08/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_20.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_20.html b/builds/2.3.26-nightly/versions_2_3_20.html
new file mode 100644
index 0000000..3170642
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_20.html
@@ -0,0 +1,691 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.20 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.20">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_20.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_20.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_20.html"><span itemprop="name">2.3.20</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.20"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_21.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_19.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_20" itemprop="headline">2.3.20</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_174" data-menu-target="autoid_174">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_175" data-menu-target="autoid_175">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_176" data-menu-target="autoid_176">Other changes</a></li></ul> </div><p>Date of release: 2013-06-27</p><p>If you are IDE/tools author, <a href="#version_2_3_20_ide">note these changes</a>.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_174">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>Error message quality improvements:</p>
+
+ <ul>
+ <li>
+ <p>Many error messages are now more helpful, especially
+ for users who are not experienced with FreeMarker. For
+ example, some of the most common user mistakes are
+ recognized and tips are shown to fix them, reducing support
+ costs or the time employees spend to figure them out.</p>
+ </li>
+
+ <li>
+ <p>It's now ensured that the error location in the
+ template is included in the message returned by
+ <code class="inline-code">TemplateException.getMessage()</code>. The stack
+ trace always showed this information anyway, but some users
+ only see the "message", not the stack trace,
+ and that often didn't contained the location.</p>
+ </li>
+
+ <li>
+ <p>The template language part of the stack trace is now
+ more detailed, and easier to understand. This is especially
+ helpful in applications that use a complex library of macros
+ and functions.</p>
+ </li>
+
+ <li>
+ <p>Several smaller bugs were fixed that made the error
+ information wrong or lacking.</p>
+ </li>
+
+ <li>
+ <p>The layout of the error messages is now more
+ consistent, and generally easier to read.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Changes regarding boolean to string conversions and
+ formatting:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">?c</code> (computer-language formatting)
+ now works with booleans too, always giving
+ <code class="inline-code">"true"</code> or <code class="inline-code">"false"</code>
+ regardless of the <code class="inline-code">boolean_format</code>. This
+ way it's safe for generating JavaScript in a context where
+ human-readable text is also rendered.</p>
+ </li>
+
+ <li>
+ <p>If the <code class="inline-code">boolean_format</code> setting is
+ set to anything but the default
+ <code class="inline-code">"true,false"</code> value, boolean values will
+ be automatically converted to string where a string value is
+ expected by the template language, instead of giving an
+ error. This helps you spare
+ those<code class="inline-code">?string</code>-s after boolean values. This
+ is the same logic as with numbers and dates, which were
+ always automatically converted to string, according the
+ corresponding format setting. Except, the provided default
+ boolean format is useless for automatic conversion (but it's
+ still there for <code class="inline-code">?string</code>, for backward
+ compatibility), hence it must be set manually. (We certainly
+ couldn't come up with a sensible default anyway, as for
+ booleans it depends too much on the application, not to
+ mention the localisation issues.)</p>
+
+ <p>Exactly like with numbers and dates, automatic
+ conversion doesn't happen in these cases:</p>
+
+ <ul>
+ <li>
+ <p>Comparisons, i.e., <code class="inline-code">someBoolean ==
+ 'true'</code> is still an error</p>
+ </li>
+
+ <li>
+ <p>Method calls where the declared type of the
+ parameter is <code class="inline-code">String</code> but the actual
+ value is a boolean; still an error</p>
+ </li>
+
+ <li>
+ <p>When the boolean value is used as key in
+ <code class="inline-code"><em class="code-color">expr</em>[<em class="code-color">key</em>]</code>,
+ it's still an error (there was no automatic conversion
+ there for other types either, as numerical and string
+ keys have different meaning)</p>
+ </li>
+
+ <li>
+ <p>The opposite direction, i.e., string to boolean
+ conversion; won't happen</p>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>New built-ins for numbers: <a href="ref_builtins_number.html#ref_builtin_abs"><code>abs</code></a>, <a href="ref_builtins_number.html#ref_builtin_is_nan"><code>is_nan</code></a>,
+ <a href="ref_builtins_number.html#ref_builtin_is_infinite"><code>is_infinite</code></a>.
+ Like <code class="inline-code">n?abs</code> will give the absolute value of
+ <code class="inline-code">n</code>.</p>
+ </li>
+
+ <li>
+ <p>New built-in for sequences: <a href="ref_builtins_sequence.html#ref_builtin_join"><code>join</code></a>. Like
+ <code class="inline-code">[1, 2, 3]?join(", ")</code> will give the string
+ <code class="inline-code">"1, 2, 3"</code>.</p>
+ </li>
+
+ <li>
+ <p>If you set the
+ <code class="inline-code">incompatible_improvements</code> setting (see <a href="http://freemarker.org/docs/api/freemarker/template/Configuration.html#setIncompatibleImprovements%28freemarker.core.Version%29">here</a>)
+ to <code class="inline-code">2.3.20</code> or higher, <code class="inline-code">?html</code>
+ will escape apostrophe-quotes just like
+ <code class="inline-code">?xhtml</code> does. Utilizing this is highly
+ recommended, because otherwise if interpolations are used inside
+ attribute values that use apostrophe-quotation (<code class="inline-code"><foo
+ bar='${val}'></code>) instead of plain quotation mark
+ (<code class="inline-code"><foo bar="${val}"></code>), they might
+ produce HTML/XML that's not well-formed. Note that
+ <code class="inline-code">?html</code> didn't do this because long ago there
+ was no cross-browser way of doing this, but it's not a real
+ concern anymore. Also note that this will be the default
+ behavior starting from 2.4.</p>
+ </li>
+
+ <li>
+ <p>Bug fix [<a href="https://sourceforge.net/p/freemarker/bugs/390/">390</a>]
+ (and other improvements): <code class="inline-code">?js_string</code> and
+ <code class="inline-code">?json_string</code> didn't escape the
+ <code class="inline-code">u2028</code>-<code class="inline-code">u2029</code> line
+ terminators (problem for JavaScript) and the
+ <code class="inline-code">u007F</code>-<code class="inline-code">u009F</code> control
+ characters (maybe a problem in JSON, depending on
+ implementation). Furthermore, the escaping of
+ <code class="inline-code">\</code>, <code class="inline-code"><</code>, and
+ <code class="inline-code">></code> become safer in that now they are
+ escaped whenever it can't be guaranteed that they won't be part
+ of <code class="inline-code"><!</code>, <code class="inline-code">]]></code> or
+ <code class="inline-code"></</code>. Earlier they were only escaped when it
+ was known that they are part of these patterns, thus it was
+ possible to assemble these patterns from two adjacent
+ interpolations. Additionally, from now on
+ <code class="inline-code"><?</code> and <code class="inline-code">--></code> also
+ count as dangerous patterns, and will trigger
+ <code class="inline-code"><</code> and <code class="inline-code">></code>
+ escaping.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: The following string built-ins didn't coerce
+ the numerical, date (and now the boolean) left-values to string,
+ instead they threw a type error: contains,
+ <code class="inline-code">index_of</code>, <code class="inline-code">last_index_of</code>,
+ <code class="inline-code">left_pad</code>, <code class="inline-code">right_pad</code>,
+ <code class="inline-code">matches</code>, <code class="inline-code">replace</code>,
+ <code class="inline-code">split</code>, <code class="inline-code">new</code>. The other
+ string built-ins already did this conversion for a long time;
+ this was an accidental inconsistency.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: With the default arithmetic engine, it's now
+ supported to compare infinite (positive or negative) with 0, to
+ decide its sign.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_175">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p><code class="inline-code">BeansWrapper</code> introspection cache
+ improvements:</p>
+
+ <ul>
+ <li>
+ <p>Added public API to <code class="inline-code">BeansWrapper</code>
+ for clearing the class cache:
+ <code class="inline-code">clearClassIntrospecitonCache()</code>,
+ <code class="inline-code">removeFromClassIntrospectionCache(Class)</code></p>
+ </li>
+
+ <li>
+ <p>Significantly improved multi-core performance:</p>
+
+ <ul>
+ <li>
+ <p>Uses <code class="inline-code">ConcurrentHashMap</code> when
+ running on Java 5 or later.</p>
+ </li>
+
+ <li>
+ <p>The cache won't block readers while introspecting
+ a class after a cache miss</p>
+ </li>
+
+ <li>
+ <p>If multiple threads need to introspect the same
+ class that's not in the cache yet, only one of them will
+ do it, the others will wait for its results.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Bug fix [<a href="https://sourceforge.net/p/freemarker/bugs/361/">361</a>]:
+ There was a small chance of deadlock when class-reloading
+ was detected. Locking was redesigned to prevent such
+ oversights in the future.</p>
+ </li>
+
+ <li>
+ <p>The internal package-visible
+ <code class="inline-code">freemarker.ext.beans</code> API was slightly
+ changed as the result of internal cleanup. Nobody but the
+ FreeMarker developers should define classes in that package,
+ so it shouldn't break anything. But if somebody did some
+ in-house hacks there, re-compile to see if it still
+ works.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Nameless templates (those directly created with
+ <code class="inline-code">new Template(null,
+ <em class="code-color">...</em>)</code> instead of loaded
+ through <code class="inline-code">Configuration</code>) couldn't include or
+ import other templates, and thrown a
+ <code class="inline-code">NullPointerException</code> when they tried to. Now
+ they resolve relative paths as if they were in the template root
+ directory.</p>
+ </li>
+
+ <li>
+ <p>Bug fix: Regular expression built-ins and some logger
+ libraries (most importantly Log4J) were unavailable on the
+ Google App Engine platform. This fix is only present in the
+ GAE-compatible build, 2.3.20-gae.</p>
+ </li>
+
+ <li>
+ <p>Added new method to <code class="inline-code">Configuration</code>:
+ <code class="inline-code">CacheStorage getCacheStorage()</code></p>
+ </li>
+
+ <li>
+ <p>Added new methods to <code class="inline-code">Environment</code> to
+ make comparisons among <code class="inline-code">TemplateModel</code>-s
+ according the rules of the template language operators:
+ <code class="inline-code">applyEqualsOperator</code>,
+ <code class="inline-code">applyEqualsOperatorLenient</code>,
+ <code class="inline-code">applyLessThanOperator</code>,
+ <code class="inline-code">applyLessThanOrEqualsOperator</code>,
+ <code class="inline-code">applyGreaterThanOperator</code>,
+ <code class="inline-code">applyWithGreaterThanOrEqualsOperator</code></p>
+ </li>
+
+ <li>
+ <p>Added new method,
+ <code class="inline-code">Environment.isInAttemptBlock()</code> to check if we
+ are within an <code class="inline-code">#attempt</code> block. This can be
+ useful for <code class="inline-code">TemplateExceptionHandler</code>-s, as
+ then they don't need to print the error to the output since
+ <code class="inline-code">#attempt</code> will roll it back anyway. This is
+ already utilized by the built-in
+ <code class="inline-code">TemplateExceptionHandler</code>-s
+ (<code class="inline-code">DEBUG_HANDLER</code> and
+ <code class="inline-code">HTML_DEBUG_HANDLER</code>).</p>
+ </li>
+
+ <li>
+ <p>Added convenience constructor <code class="inline-code">Template(String
+ name, String sourceCode, Configuration cfg)</code>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">TemplateException</code>-s and
+ <code class="inline-code">TemplateModelExcepton</code>-s now can have
+ <code class="inline-code">Throwable</code> cause, not just
+ <code class="inline-code">Exception</code> (it was an old oversight that
+ somehow wasn't fixed so far).</p>
+ </li>
+
+ <li>
+ <p>Parsing error messages under the JBoss Tools FreeMarker
+ IDE now doesn't contain the usual location line, so that the
+ actual error description is immediately visible in the Eclipse
+ "Problems" view. (It's a "hack" in
+ FreeMarler itself; it tries to detect if it runs under the
+ plugin and then changes its behavior.)</p>
+ </li>
+
+ <li>
+ <p><a name="version_2_3_20_ide"></a>Mostly concerning tool (like IDE plugin) authors:</p>
+
+ <ul>
+ <li>
+ <p>The error message formats (what
+ <code class="inline-code">Throwable.getMessage()</code> returns) were
+ heavily changed for <code class="inline-code">TemplateException</code>-s,
+ and somewhat for <code class="inline-code">ParseException</code>-s. It's
+ unlikely that anybody depends on these, but if you tried to
+ parse these messages, be aware of this.</p>
+ </li>
+
+ <li>
+ <p>Fixed bug where <code class="inline-code">ParseException</code> has
+ contained 0 as line and column number for lexical errors.
+ Now it contains the correct information.</p>
+ </li>
+
+ <li>
+ <p>Added
+ <code class="inline-code">ParseException.getEditorMessage()</code>: As in
+ IDE-s the error markers show the error location to the user
+ already, the location should not be repeated in the error
+ message. So in IDE-s you should use this method instead of
+ <code class="inline-code">getMessage()</code>. (Under JBoss Tools:
+ FreeMarker now <em>tries</em> to detect that it
+ runs under the plugin, and then it already does this, except
+ that it still shows the column number as that's missing from
+ the error marker location.)</p>
+ </li>
+
+ <li>
+ <p>Added
+ <code class="inline-code">ParseException.getTemplateName()</code></p>
+ </li>
+
+ <li>
+ <p>Added
+ <code class="inline-code">Configuration.getSupportedBuiltInNames()</code>.
+ As new built-ins
+ (<code class="inline-code"><em class="code-color">expr</em>?<em class="code-color">builtin_name</em></code>)
+ are very often added to new FreeMarker versions,
+ auto-completion or syntax highlighting should use this set
+ instead of a fixed set of a names.</p>
+ </li>
+
+ <li>
+ <p>The format returned by
+ <code class="inline-code">TemplateElement.getDescription()</code> was
+ heavily changed. It's what FTL stack traces and maybe some
+ outline views (tree-views) show. It was always for human
+ reading (and till now was too inconsistent for anything
+ else), so it's unlikely that this breaks anything.</p>
+ </li>
+
+ <li>
+ <p>There were some smaller changes in
+ <code class="inline-code">freemarker.debug</code>, and it's expected that
+ there will be more, so it was marked as experimental. As far
+ as we know, nobody used it, so it shouldn't break
+ anything.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>In <em>experimental status only</em>, but
+ <code class="inline-code">freemarker.jar</code> is now an OSGi bundle (see
+ <code class="inline-code">freemarker.jar/META-INF/MANIFEST.MF</code>).
+ Depending on user feedback, the bundle description may change in
+ the future. So please give feedback, especially if you are an
+ OSGi expert!</p>
+ </li>
+
+ <li>
+ <p>Improved the HTML generated by
+ <code class="inline-code">HTML_DEBUG_HANDLER</code> (the
+ red-on-yellow-background error message). Most importantly, now
+ it will word-wrap. Other changes are minor, like now it can
+ break out of CDATA sections, or now it has less intense
+ colors.</p>
+ </li>
+
+ <li>
+ <p>New <code class="inline-code">Template</code> method,
+ <code class="inline-code">getActualTagSyntax()</code>: Tells if the template
+ is using traditional or square-bracket syntax. As the syntax can
+ be overridden in the template, also it's possibly decided by
+ auto-detection, it wasn't trivial to it tell till now.</p>
+ </li>
+
+ <li>
+ <p>Added some utility methods that are useful for generating
+ error messages in custom directives:
+ <code class="inline-code">ClassUtil.getFTLTypeDescription(TemplateModel)</code>,
+ <code class="inline-code">getShortClassName</code>,
+ <code class="inline-code">getShortClassNameOfObject</code></p>
+ </li>
+
+ <li>
+ <p>Bug fix [<a href="https://sourceforge.net/p/freemarker/bugs/364/">364</a>]:
+ <code class="inline-code">freemarker.template.EmptyMap</code> (which is passed
+ to <code class="inline-code">TemplateDirectiveModel</code>-s if there are no
+ parameters) now allows <code class="inline-code">remove(key)</code>,
+ <code class="inline-code">clear()</code> and
+ <code class="inline-code">putAll(anyEmptyMap)</code> as these do nothing
+ anyway.</p>
+ </li>
+
+ <li>
+ <p>Bug fix [<a href="https://sourceforge.net/p/freemarker/bugs/375/">375</a>]:
+ <code class="inline-code">NullPointerException</code> on IBM J9 VM (not on the
+ Sun/Oracle implementation) in <code class="inline-code">BeansWrapper</code>
+ when the Java implementation legally returns
+ <code class="inline-code">null</code> for some <code class="inline-code">BeanInfo</code>
+ getters.</p>
+ </li>
+
+ <li>
+ <p>Bug fix: Cloning a <code class="inline-code">Configuration</code> didn't
+ deep-clone the data structures storing the
+ <code class="inline-code">auto_imports</code> and
+ <code class="inline-code">auto_includes</code> settings, hence possibly
+ leading to aliasing problems.</p>
+ </li>
+
+ <li>
+ <p>Bug fix [<a href="https://sourceforge.net/p/freemarker/bugs/377/">377</a>]:
+ After a failed method call the exception handler could fail in
+ the rare occasion when
+ <code class="inline-code">targetObject.toString()</code> fails, raising a
+ runtime exception that not even the <code class="inline-code">attempt</code>
+ directive will catch.</p>
+ </li>
+
+ <li>
+ <p>Bug fix [<a href="https://sourceforge.net/p/freemarker/bugs/391/">391</a>]:
+ If a template name has contained <code class="inline-code">*</code> that was
+ not the only character in the path step, it threw
+ <code class="inline-code">NegativeArraySizeException</code> instead of
+ <code class="inline-code">FileNotFoundException</code>.</p>
+ </li>
+
+ <li>
+ <p>With the default arithmetic engine, performance
+ optimizations of comparison operations when some of the numbers
+ is 0, and when the sign of the numbers differ.</p>
+ </li>
+
+ <li>
+ <p>Some smaller fixes in
+ <code class="inline-code">TemplateElement.getCanonicalForm()</code>, also some
+ quality improvements there.</p>
+ </li>
+
+ <li>
+ <p>Bug fixes in <code class="inline-code">classic_compatible</code> mode
+ (this mode is to help migrating from FreeMarker 1), thanks to
+ Information Mosaic:</p>
+
+ <ul>
+ <li>
+ <p>When a macro was called with a
+ <code class="inline-code">null</code>/missing parameter value, it has
+ caused error like in FreeMarker 2.3</p>
+ </li>
+
+ <li>
+ <p>When a hash literal contained reference to a
+ <code class="inline-code">null</code>/missing variable, like in <code class="inline-code">{
+ 'a': missingVar }</code>, it has caused an error like in
+ 2.3</p>
+ </li>
+
+ <li>
+ <p>When a sequence literal contained reference to a
+ <code class="inline-code">null</code>/missing variable, like in
+ <code class="inline-code">[1, missingVar]</code>, it has caused an error
+ like in 2.3</p>
+ </li>
+
+ <li>
+ <p>When a the left-side of the <code class="inline-code">.</code> (dot)
+ or <code class="inline-code">[<em class="code-color">key</em>]</code>
+ operator was <code class="inline-code">null</code> or missing variable,
+ like in <code class="inline-code">missingVar.subVar</code>, it has caused
+ an error like in 2.3</p>
+ </li>
+
+ <li>
+ <p>When <code class="inline-code">BeanModel</code>-s are tried to be
+ treated as strings, for most subclasses it has failed with
+ type error, like in 2.3. In FreeMarker 1 all
+ <code class="inline-code">BeanModel</code>-s were
+ <code class="inline-code">TemplateScalarModel</code>-s, so it should
+ succeed. The fix for this only works where FreeMarker
+ <em>coerces</em> to string (string built-ins on
+ the left-side and concatenation (<code class="inline-code">+</code>) and
+ interpolation
+ (<code class="inline-code">${<em class="code-color">...</em>}</code>) do
+ that), otherwise unfortunately it will still fail.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">classic_compatible</code> setting now
+ accepts value <code class="inline-code">2</code> along
+ <code class="inline-code">true</code> (alias <code class="inline-code">1</code>) and
+ <code class="inline-code">false</code> (alias <code class="inline-code">0</code>).
+ <code class="inline-code">2</code> means <code class="inline-code">true</code> but with
+ emulating bugs in early 2.x classic-compatibility mode.
+ Currently this only affects how booleans are converted to
+ string; with <code class="inline-code">1</code> it's always
+ <code class="inline-code">"true"</code>/<code class="inline-code">""</code>, but with
+ <code class="inline-code">2</code> it's <code class="inline-code">"true"/"false"</code>
+ for values wrapped by <code class="inline-code">BeansWrapper</code> as
+ then <code class="inline-code">Boolean.toString()</code> prevails. Note
+ that
+ <code class="inline-code"><em class="code-color">someBoolean</em>?string</code>
+ will always consistently format the boolean according the
+ <code class="inline-code">boolean_format</code> setting, just like in
+ FreeMarker 2.3.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Bug fix [<a href="https://sourceforge.net/p/freemarker/bugs/394/">394</a>]:
+ When trying to access the optional Jython (or W3C DOM) classes
+ has failed in <code class="inline-code">DefaultObjectWrapper</code> with an
+ <code class="inline-code">Error</code>, rather than with an
+ <code class="inline-code">Exception</code>, loading the
+ <code class="inline-code">DefaultObjectWrapper</code> class itself has failed,
+ instead of the Jython (or W3C DOM) support being disabled. From
+ now in, it will survive any kind of <code class="inline-code">Throwable</code>
+ there, and if the <code class="inline-code">Throwable</code> is not an
+ <code class="inline-code">ClassNotFoundException</code>, it will also log the
+ <code class="inline-code">Throwable</code>.</p>
+ </li>
+
+ <li>
+ <p>Improved the performance of
+ <code class="inline-code">(thisVarIsMissing.foo)!default</code> and similar
+ <em>parenthetical</em> existence operators and
+ existence built-ins in the case when the
+ <code class="inline-code">null</code>/missing variable is not the last step
+ inside the parenthesis. In that case it's about 30 times faster
+ now, measured on Java 6. In other cases (when all variables
+ exists, or the the last step is missing) the performance is
+ about the same (relatively fast) as before.</p>
+ </li>
+
+ <li>
+ <p>Added interface
+ <code class="inline-code">freemarker.cache.CacheStorageWithGetSize</code>
+ which allows querying the current number of cache entries in a
+ <code class="inline-code">CacheStorage</code> that implements it. It's
+ implemented by all out-of-the-box
+ <code class="inline-code">CacheStorage</code> implementations. Also added
+ <code class="inline-code">getStrongSize()</code> and
+ <code class="inline-code">getSoftSize()</code> to
+ <code class="inline-code">MRUCacheStorage</code>.</p>
+ </li>
+
+ <li>
+ <p>Version and build information changes:</p>
+
+ <ul>
+ <li>
+ <p>The form of the nightly build version numbers has
+ changed to be Maven/JSR 277 compliant. What earlier was
+ <code class="inline-code">2.3.19mod</code> is now something like
+ <code class="inline-code">2.3.20-nightly_20130605T130506Z</code> (note how
+ the last points to the target release version instead of the
+ last release version).</p>
+ </li>
+
+ <li>
+ <p>The form of the Release Candidate and Preview version
+ numbers where changed to be Maven/JSP 277 compliant:
+ <code class="inline-code">2.4pre2</code> is now
+ <code class="inline-code">2.4.0-pre02</code>, <code class="inline-code">2.4rc1</code> is
+ now <code class="inline-code">2.4.0-rc01</code>.</p>
+ </li>
+
+ <li>
+ <p>Added new static method to
+ <code class="inline-code">Configuration</code> to query build date:
+ <code class="inline-code">getBuildDate()</code>. This is also printed by
+ the main command line class.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Various internal code cleanups.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_176">Other changes</h2>
+
+
+ <ul>
+ <li>
+ <p>Many JavaDoc improvements, mostly in the documentation of
+ the basic (most frequently used) classes.</p>
+ </li>
+
+ <li>
+ <p>FreeMarker source code has moved to GitHub (<a href="???">https://github.com/freemarker/freemarker</a>),
+ other project resources has remained on sourceforge.net.</p>
+ </li>
+
+ <li>
+ <p>Project structure cleanup, Ivy-based build script.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_21.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_19.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[40/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/dgui_template_directives.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/dgui_template_directives.html b/builds/2.3.26-nightly/dgui_template_directives.html
new file mode 100644
index 0000000..cbd5bcd
--- /dev/null
+++ b/builds/2.3.26-nightly/dgui_template_directives.html
@@ -0,0 +1,136 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Directives - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Directives">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/dgui_template_directives.html">
+<link rel="canonical" href="http://freemarker.org/docs/dgui_template_directives.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui.html"><span itemprop="name">Template Author's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_template.html"><span itemprop="name">The Template</span></a></li><li class="step-3" item
prop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_template_directives.html"><span itemprop="name">Directives</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Author\'s Guide","The Template","Directives"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="dgui_template_overallstructure.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_template_exp.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="dgui_template_directives" itemprop="headline">Directives</h1>
+</div></div><a name="term.designer.directive"></a><p>You use FTL tags to call <strong>directives</strong>. In the example you have called the
+ <code class="inline-code">list</code> directive. Syntactically you have done it with
+ two tags: <code class="inline-code"><#list animals as animal></code> and
+ <code class="inline-code"></#list></code>.</p><p>There are two kind of FTL tags:</p><ul>
+ <li>
+ <p>Start-tag:
+ <code class="inline-code"><#<em class="code-color">directivename</em>
+ <em class="code-color">parameters</em>></code></p>
+ </li>
+
+ <li>
+ <p>End-tag:
+ <code class="inline-code"></#<em class="code-color">directivename</em>></code></p>
+ </li>
+ </ul><p>This is similar to HTML or XML syntax, except that the tag name
+ starts with <code class="inline-code">#</code>. If the directive doesn't have nested
+ content (content between the start-tag and the end-tag), you must use
+ the start-tag with no end-tag. For example you write <code class="inline-code"><#if
+ <em class="code-color">something</em>><em class="code-color">...</em></#if></code>,
+ but just <code class="inline-code"><#include
+ <em class="code-color">something</em>></code> as FreeMarker knows
+ that the <code class="inline-code">include</code> directive can't have nested
+ content.</p><p>The format of the
+ <code class="inline-code"><em class="code-color">parameters</em></code> depends on
+ the
+ <code class="inline-code"><em class="code-color">directivename</em></code>.</p><p>In fact there are two types of directives: <a href="gloss.html#gloss.predefinedDirective">predefined directives</a> and
+ <a href="gloss.html#gloss.userDefinedDirective">user-defined
+ directives</a>. For user-defined directives you use
+ <code class="inline-code">@</code> instead of <code class="inline-code">#</code>, for example
+ <code class="inline-code"><@mydirective
+ <em class="code-color">parameters</em>><em class="code-color">...</em></@mydirective></code>.
+ Further difference is that if the directive has no nested content, you
+ must use a tag like <code class="inline-code"><@mydirective
+ <em class="code-color">parameters</em> /></code>, similarly as in
+ XML (e.g. <code class="inline-code"><img <em class="code-color">...</em>
+ /></code>). But user-defined directives is an advanced topic
+ that will be discussed <a href="dgui_misc_userdefdir.html">later</a>.</p><p>FTL tags, like HTML tags, must be properly nested. So the code
+ below is wrong, as the <code class="inline-code">if</code> directive is both inside
+ and outside of the nested content of the <code class="inline-code">list</code>
+ directive:</p>
+
+<div class="code-wrapper"><pre class="code-block code-template"><ul>
+<strong><#list animals as animal></strong>
+ <li>${animal.name} for ${animal.price} Euros
+ <strong><#if user == "Big Joe"></strong>
+ (except for you)
+<strong></#list></strong> <#-- WRONG! The "if" has to be closed first. -->
+<strong></#if></strong>
+</ul></pre></div><p>Note that FreeMarker doesn't care about the nesting of HTML
+ tags, only about the nesting of FTL tags. It just sees HTML as flat
+ text, it doesn't interpret it in any way.</p><p>If you try to use a non-existing directive (e.g., you mistype
+ the directive name), FreeMarker will decline to use the template and
+ produce an error message.</p><p>FreeMarker ignores superfluous <a href="gloss.html#gloss.whiteSpace">white-space</a> inside FTL tags. So you
+ can write this:</p>
+
+<div class="code-wrapper"><pre class="code-block code-template"><span class="marked-text"><span class="marked-ftl-tag"><#list<em><span class="marked-invisible-text">[BR]</span></em>
+��animals�������as<em><span class="marked-invisible-text">[BR]</span></em>
+�����animal<em><span class="marked-invisible-text">[BR]</span></em>
+></span><em><span class="marked-invisible-text">[BR]</span></em>
+<span class="marked-interpolation">${animal.name}</span>�for�<span class="marked-interpolation">${animal.price}</span>�Euros<em><span class="marked-invisible-text">[BR]</span></em>
+<span class="marked-ftl-tag"></#list����></span></span></pre></div><p>You may not, however, insert white-space between the
+ <code class="inline-code"><</code> or <code class="inline-code"></</code> and the directive
+ name.</p><p>The complete list and description of all directives can be found
+ in the <a href="ref_directives.html">Template Language Reference/Directive Reference</a> (but I recommend that you look
+ at the chapter about expressions first).</p> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>FreeMarker can be configured to use <code class="inline-code">[</code> and
+ <code class="inline-code">]</code> instead of <code class="inline-code"><</code> and
+ <code class="inline-code">></code> in the FTL tags and FTL comments, like
+ <code class="inline-code">[#if user == "Big
+ Joe"]<em class="code-color">...</em>[/#if]</code>. For more
+ information read: <a href="dgui_misc_alternativesyntax.html">Miscellaneous/Alternative (square bracket) syntax</a>.</p>
+ </div>
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>FreeMarker can be configured so that it understands predefined
+ directives without <code class="inline-code">#</code> (like <code class="inline-code"><if user
+ == "Big
+ Joe"><em class="code-color">...</em></if></code>).
+ However we don't recommend the usage of this mode. For more
+ information read: <a href="ref_depr_oldsyntax.html">Template Language Reference/Deprecated FTL constructs/Old FTL syntax</a></p>
+ </div>
+<div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="dgui_template_overallstructure.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_template_exp.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[12/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_2_3.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_2_3.html b/builds/2.3.26-nightly/versions_2_2_3.html
new file mode 100644
index 0000000..dbfd3f7
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_2_3.html
@@ -0,0 +1,106 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.2.3 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.2.3">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_2_3.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_2_3.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_2_3.html"><span itemprop="name">2.2.3</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.2.3"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_2_4.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_2_2.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_2_3" itemprop="headline">2.2.3</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_255" data-menu-target="autoid_255">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_256" data-menu-target="autoid_256">Changes on the Java side</a></li></ul> </div><p>Date of release: 2003-07-19</p><p>Bugfix release.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_255">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>Added the <code class="inline-code">is_date</code> built-in.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: Various <code class="inline-code">is_xxx</code> built-ins were
+ returning <code class="inline-code">false</code> when applied to undefined
+ expressions. Now they correctly fail on them.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_256">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>Bugfix: The JSP taglib support can now read JSP 1.2
+ compliant TLD XML files.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: The JSP taglib support now emits more helpful
+ exception messages when the specified TLD XML file is not found
+ (previously it threw a
+ <code class="inline-code">NullPointerException</code>).</p>
+ </li>
+
+ <li>
+ <p>Bugfix: The JSP taglib support now initializes a custom
+ tag after its parent and page context is set as some tags expect
+ them to be set when attribute setters are called.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: The <code class="inline-code">BeansWrapper</code> could fail to
+ analyze classes under very rare circumstances due to a premature
+ storage optimization.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_2_4.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_2_2.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_2_4.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_2_4.html b/builds/2.3.26-nightly/versions_2_2_4.html
new file mode 100644
index 0000000..2f7adb1
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_2_4.html
@@ -0,0 +1,103 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.2.4 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.2.4">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_2_4.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_2_4.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_2_4.html"><span itemprop="name">2.2.4</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.2.4"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_2_5.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_2_3.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_2_4" itemprop="headline">2.2.4</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_253" data-menu-target="autoid_253">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_254" data-menu-target="autoid_254">Other changes</a></li></ul> </div><p>Date of release: 2003-09-03</p><p>Maintenance and bugfix release.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_253">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>Improvements to JSP taglib support. If some third party
+ taglib didn't work for you with FreeMarker, maybe now it
+ will.</p>
+
+ <ul>
+ <li>
+ <p>The JSP <code class="inline-code">PageContext</code> now implements
+ <code class="inline-code">forward</code> and <code class="inline-code">include</code>
+ methods.</p>
+ </li>
+
+ <li>
+ <p>Accepting <code class="inline-code">EVAL_PAGE</code> as an alias to
+ <code class="inline-code">SKIP_BODY</code> in return values from
+ <code class="inline-code">doStartTag</code>. It's a common bug in some
+ widespread tag libraries, and now FreeMarker is less strict
+ and accepts it.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Fixes for some rare problems regarding namespaces of
+ macros.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_254">Other changes</h2>
+
+
+ <ul>
+ <li>
+ <p>Minor improvements to the documentation.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_2_5.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_2_3.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_2_5.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_2_5.html b/builds/2.3.26-nightly/versions_2_2_5.html
new file mode 100644
index 0000000..07a1d7a
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_2_5.html
@@ -0,0 +1,68 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.2.5 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.2.5">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_2_5.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_2_5.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_2_5.html"><span itemprop="name">2.2.5</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.2.5"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_2_6.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_2_4.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_2_5" itemprop="headline">2.2.5</h1>
+</div></div><p>Date of release: 2003-09-19</p><p>Maintenance and bugfix release.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_252">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>Creating a <code class="inline-code">Configuration</code> instance using
+ the default constructor no longer fails if the current directory
+ is unreadable due to I/O problems, lack of security permissions,
+ or any other exception.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_2_6.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_2_4.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_2_6.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_2_6.html b/builds/2.3.26-nightly/versions_2_2_6.html
new file mode 100644
index 0000000..8f5fdd2
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_2_6.html
@@ -0,0 +1,144 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.2.6 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.2.6">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_2_6.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_2_6.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_2_6.html"><span itemprop="name">2.2.6</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.2.6"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_2_7.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_2_5.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_2_6" itemprop="headline">2.2.6</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_249" data-menu-target="autoid_249">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_250" data-menu-target="autoid_250">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_251" data-menu-target="autoid_251">Other changes</a></li></ul> </div><p>Date of release: 2004-March-13</p><p>Maintenance and bugfix release. Some of improvements are
+ back-portings from FreeMarker 2.3rc1.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_249">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>New <a href="ref_specvar.html">special variable</a>:
+ <code class="inline-code">.vars</code>. This is useful to read top-level
+ variables with square bracket syntax, for example
+ <code class="inline-code">.vars["name-with-hyphens"]</code> and
+ <code class="inline-code">.vars[dynamicName]</code>.</p>
+ </li>
+
+ <li>
+ <p>New built-ins for Java and JavaScript string escaping:
+ <a href="ref_builtins_string.html#ref_builtin_j_string">j_string</a> and <a href="ref_builtins_string.html#ref_builtin_js_string">js_string</a></p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_250">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>Bugfix: The template cache didn't reload the template when
+ it was replaced with an older version.</p>
+ </li>
+
+ <li>
+ <p>Bugfix:
+ <code class="inline-code">freemarker.template.utility.DeepUnwrap</code>
+ unwrapped sequences to empty
+ <code class="inline-code">ArrayList</code>-s.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: In error messages, when the quoted FTL directive
+ had nested content, that was quoted as well, so the quotation
+ could be very long and expose nested lines needlessly.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">freemarker.template.TemplateExceptionHandler.HTML_DEBUG_HANDLER</code>
+ now prints more HTML-context-proof messages.</p>
+ </li>
+
+ <li>
+ <p>You can query the FreeMarker version number with static
+ method <code class="inline-code">Configuration.getVersionNumber()</code>.
+ Also, the <code class="inline-code">Manifest.mf</code> included in
+ <code class="inline-code">freemarker.jar</code> now contains the FreeMarker
+ version number, furthermore, executing it with <code class="inline-code">java
+ -jar freemarker.jar</code> will print the version number to
+ the stdout.</p>
+ </li>
+
+ <li>
+ <p>Date support is now labeled as final. (It was experimental
+ earlier.) There was no change since FreeMarker 2.2.1.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_251">Other changes</h2>
+
+
+ <ul>
+ <li>
+ <p>Fixes and improvements in the Manual and in the API
+ JavaDoc. The documentation now works with the Eclipse help
+ plugin (accessible in the "Editor/IDE plugins"
+ section of the FreeMarker Web page).</p>
+ </li>
+
+ <li>
+ <p>Minor site improvements.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_2_7.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_2_5.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_2_7.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_2_7.html b/builds/2.3.26-nightly/versions_2_2_7.html
new file mode 100644
index 0000000..f251449
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_2_7.html
@@ -0,0 +1,70 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.2.7 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.2.7">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_2_7.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_2_7.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_2_7.html"><span itemprop="name">2.2.7</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.2.7"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_2_8.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_2_6.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_2_7" itemprop="headline">2.2.7</h1>
+</div></div><p>Date of release: 2004-March-17</p><p>Important bugfix release.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_248">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>Bugfix: Fixing a fatal bug in the template cache that was
+ introduced with the latest cache "bugfix". The
+ template cache has always reloaded the unchanged template when
+ the update delay has been elapsed, until the template has been
+ actually changed, in which case it has never reloaded the
+ template anymore.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_2_8.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_2_6.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_2_8.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_2_8.html b/builds/2.3.26-nightly/versions_2_2_8.html
new file mode 100644
index 0000000..f582884
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_2_8.html
@@ -0,0 +1,112 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.2.8 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.2.8">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_2_8.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_2_8.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_2_8.html"><span itemprop="name">2.2.8</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.2.8"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_2_7.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_2_8" itemprop="headline">2.2.8</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_245" data-menu-target="autoid_245">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_246" data-menu-target="autoid_246">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_247" data-menu-target="autoid_247">Other changes</a></li></ul> </div><p>Date of release: 2004-June-15</p><p>Bugfix and maintenance release.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_245">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>Added a new special variable to print the FreeMarker
+ version number: <code class="inline-code">version</code>. See more <a href="ref_specvar.html">in the reference...</a></p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_246">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>The <code class="inline-code">BeansWrapper</code> has been improved to
+ prevent some security exceptions when introspecting.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: The <code class="inline-code">FileTemplateLoader</code> is now
+ more robust when it receives paths that are malformed according
+ the native file system. In the earlier version such paths
+ sometimes caused unexpected <code class="inline-code">IOException</code> that
+ aborted the searching for the template in further
+ <code class="inline-code">FileTemplateLoader</code>-s when you use the
+ <code class="inline-code">MultiTemplateLoader</code>.</p>
+ </li>
+
+ <li>
+ <p>Some parts of the FreeMarker code has been marked as
+ privileged code section, so you can grant extra privileges to
+ FreeMarker when you use a security manager (this is a
+ backporting from 2.3). See more <a href="pgui_misc_secureenv.html">here...</a></p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_247">Other changes</h2>
+
+
+ <ul>
+ <li>
+ <p>Minor documentation fixes and improvements.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_2_7.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[31/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_misc_charset.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_misc_charset.html b/builds/2.3.26-nightly/pgui_misc_charset.html
new file mode 100644
index 0000000..1958707
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_misc_charset.html
@@ -0,0 +1,172 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Charset issues - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Charset issues">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_misc_charset.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_misc_charset.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_misc.html"><span itemprop="name">Miscellaneous</span></a></li><li class="step-3" itemprop="it
emListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_misc_charset.html"><span itemprop="name">Charset issues</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","Miscellaneous","Charset issues"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_misc_var.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_misc_multithreading.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_misc_charset" itemprop="headline">Charset issues</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_52" data-menu-target="autoid_52">The charset of the input</a></li><li><a class="page-menu-link" href="#autoid_53" data-menu-target="autoid_53">The charset of the output</a></li></ul> </div><p>FreeMarker, as most Java applications, works with "<a href="gloss.html#gloss.unicode">UNICODE</a> text" (UTF-16). Nonetheless,
+ there are situations when it must deal with <a href="gloss.html#gloss.charset">charsets</a>, because it has to exchange
+ data with the outer world that may uses various other charsets.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_52">The charset of the input</h2>
+
+
+ <p>When FreeMarker has to load a template file (or an unparsed
+ text file), then it must know the charset of the file, since files
+ are just raw byte sequences. You can use the
+ <code class="inline-code">encoding</code> <a href="pgui_config_settings.html">setting</a> to specify the
+ charset. This setting takes effect only when FreeMarker loads a
+ template (parsed or unparsed) with the
+ <code class="inline-code">getTemplate</code> method of
+ <code class="inline-code">Configuration</code>. Note that the <a href="ref_directive_include.html#ref.directive.include"><code>include</code>
+ directive</a> uses this method internally, so the value of the
+ <code class="inline-code">encoding</code> setting is significant for an already
+ loaded template if the template contains <code class="inline-code">include</code>
+ directive call.</p>
+
+ <p>The getter and setter method of the
+ <code class="inline-code">encoding</code> setting is special in the first
+ (configuration) layer. The getter method guesses the return value
+ based on a <code class="inline-code">Locale</code> passed as parameter; it looks
+ up the encoding in a table that maps locales to encodings (called
+ encoding map), and if the locale was not found there, it returns the
+ default encoding. You can fill the encoding map with the
+ <code class="inline-code">setEncoding(Locale locale, String encoding)</code>
+ method of the configuration; the encoding map is initially empty.
+ The default encoding is initially the value of the
+ <code class="inline-code">file.encoding</code> system property, but you always
+ should set a default default with the
+ <code class="inline-code">setDefaultEncoding</code> method, rather than relying on
+ that. For new projects, a popular default encoding is
+ <code class="inline-code">utf-8</code>.</p>
+
+ <p>You can give the charset directly by overriding the
+ <code class="inline-code">encoding</code> setting in the template layer or runtime
+ environment layer (When you specify an encoding as the parameter of
+ <code class="inline-code">getTemplate</code> method, you override the
+ <code class="inline-code">encoding</code> setting in the template layer.). If you
+ don't override it, the effective value will be what the
+ <code class="inline-code">configuration.getEncoding(Locale)</code> method returns
+ for the effective value of the <code class="inline-code">locale</code>
+ setting.</p>
+
+ <p>Also, instead of relying on this charset guessing mechanism,
+ you can specify the charset of the template in the template file
+ itself, with the <a href="ref_directive_ftl.html#ref.directive.ftl"><a href="ref_directive_ftl.html#ref.directive.ftl"><code>ftl</code></a>
+ directive</a>, like <code class="inline-code"><#ftl
+ encoding="utf-8"></code>.</p>
+
+ <p>Note that the charset of the template is independent from the
+ charset of the output that the tempalte generates (unless the
+ enclosing software deliberately sets the output charset to the same
+ as the template charset).</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_53">The charset of the output</h2>
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>The <code class="inline-code">output_encoding</code> setting/variable and
+ the <a href="ref_builtins_string.html#ref_builtin_url"><code>url</code>
+ built-in</a> is available since FreeMarker 2.3.1. It doesn't
+ exist in 2.3.</p>
+ </div>
+
+
+ <p>In principle FreeMarker does not deal with the charset
+ of the output, since it writes the output to a
+ <code class="inline-code">java.io.Writer</code>. Since the
+ <code class="inline-code">Writer</code> is made by the software that encapsulates
+ FreeMarker (such as a Web application framework), the output charset
+ is controlled by the encapsulating software. Still, FreeMarker has a
+ setting called <code class="inline-code">output_encoding</code> (starting from
+ FreeMarker version 2.3.1). The enclosing software should set this
+ setting (to the charset that the <code class="inline-code">Writer</code> uses), to
+ inform FreeMarker what charset is used for the output (otherwise
+ FreeMarker can't find it out). Some features, such as the <a href="ref_builtins_string.html#ref_builtin_url"><code>url</code> built-in</a>,
+ and the <a href="ref_specvar.html"><code>output_encoding</code> special
+ variable</a> utilize this information. Thus, if the enclosing
+ software doesn't set this setting then FreeMarker features that need
+ to know the output charset can't be used.</p>
+
+ <p>If you write software that will use FreeMarker, you may wonder
+ what output charset should you choose. Of course it depends on the
+ consumer of the FreeMarker output, but if the consumer is flexible
+ regarding this question, then the common practice is either using
+ the charset of the template file for the output, or using UTF-8.
+ Using UTF-8 is usually a better practice, because arbitrary text may
+ comes from the data-model, which then possibly contains characters
+ that couldn't be encoded with the charset of the template.</p>
+
+ <p>FreeMarker settings can be set for each individual template
+ processing if you use
+ <code class="inline-code">Template.createProcessingEnvironment(<em class="code-color">...</em>)</code>
+ plus
+ <code class="inline-code">Environment.process(<em class="code-color">...</em>)</code>
+ instead of
+ <code class="inline-code">Template.process(<em class="code-color">...</em>)</code>.
+ Thus, you can set the <code class="inline-code">output_encoding</code> setting for
+ each template execution independently:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">Writer w = new OutputStreamWriter(out, outputCharset);
+Environment env = template.createProcessingEnvironment(dataModel, w);
+env.setOutputEncoding(outputCharset);
+env.process();</pre></div>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_misc_var.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_misc_multithreading.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_misc_jythonwrapper.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_misc_jythonwrapper.html b/builds/2.3.26-nightly/pgui_misc_jythonwrapper.html
new file mode 100644
index 0000000..b29ad5b
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_misc_jythonwrapper.html
@@ -0,0 +1,133 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Jython wrapper - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Jython wrapper">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_misc_jythonwrapper.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_misc_jythonwrapper.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_misc.html"><span itemprop="name">Miscellaneous</span></a></li><li class="step-3" itemprop="it
emListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_misc_jythonwrapper.html"><span itemprop="name">Jython wrapper</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","Miscellaneous","Jython wrapper"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_misc_ant.html"><span>Previous</span></a><a class="paging-arrow next" href="ref.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_misc_jythonwrapper" itemprop="headline">Jython wrapper</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_71" data-menu-target="autoid_71">TemplateHashModel functionality</a></li><li><a class="page-menu-link" href="#autoid_72" data-menu-target="autoid_72">TemplateScalarModel functionality</a></li><li><a class="page-menu-link" href="#autoid_73" data-menu-target="autoid_73">TemplateBooleanModel functionality</a></li><li><a class="page-menu-link" href="#autoid_74" data-menu-target="autoid_74">TemplateNumberModel functionality</a></li><li><a class="page-menu-link" href="#autoid_75" data-menu-target="autoid_75">TemplateSequenceModel functionality</a></li></ul> </div><p>The <code class="inline-code">freemarker.ext.jython</code> package consists of
+ models that enable any Jython object to be used as a
+ <code class="inline-code">TemplateModel</code>. In the very basic case, you only
+ need to call the</p>
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">public TemplateModel wrap(Object obj);</pre></div><p>method of the
+ <code class="inline-code">freemarker.ext.jython.JythonWrapper</code> class. This
+ method will wrap the passed object into an appropriate
+ <code class="inline-code">TemplateModel</code>. Below is a summary of the properties
+ of returned model wrappers. Let's assume that the model that resulted
+ from the <code class="inline-code">JythonWrapper</code> call on object
+ <code class="inline-code">obj</code> is named <code class="inline-code">model</code> in the
+ template model root for the sake of the following discussion.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_71">TemplateHashModel functionality</h2>
+
+
+ <p><code class="inline-code">PyDictionary</code> and
+ <code class="inline-code">PyStringMap</code> will be wrapped into a hash model.
+ Key lookups are mapped to the <code class="inline-code">__finditem__</code>
+ method; if an item is not found, a model for <code class="inline-code">None</code>
+ is returned.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_72">TemplateScalarModel functionality</h2>
+
+
+ <p>Every python object will implement
+ <code class="inline-code">TemplateScalarModel</code> whose
+ <code class="inline-code">getAsString()</code> method simply delegates to
+ <code class="inline-code">toString()</code>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_73">TemplateBooleanModel functionality</h2>
+
+
+ <p>Every python object will implement
+ <code class="inline-code">TemplateBooleanModel</code> whose
+ <code class="inline-code">getAsBoolean()</code> method simply delegates to
+ <code class="inline-code">__nonzero__()</code> in accordance with Python semantics
+ of true/false.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_74">TemplateNumberModel functionality</h2>
+
+
+ <p>Model wrappers for <code class="inline-code">PyInteger</code>,
+ <code class="inline-code">PyLong</code>, and <code class="inline-code">PyFloat</code> objects
+ implement <code class="inline-code">TemplateNumberModel</code> whose
+ <code class="inline-code">getAsNumber()</code> method returns
+ <code class="inline-code">__tojava__(java.lang.Number.class)</code>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_75">TemplateSequenceModel functionality</h2>
+
+
+ <p>Model wrappers for all classes that extend
+ <code class="inline-code">PySequence</code> will implement
+ <code class="inline-code">TemplateSequenceModel</code> and thus their elements
+ will be accessible by index using the <code class="inline-code">model[i]</code>
+ syntax, which will delegate to <code class="inline-code">__finditem__(i)</code>.
+ You can also query the length of the array or the size of the list
+ using the <code class="inline-code">model?size</code> built-in, which will
+ delegate to <code class="inline-code">__len__()</code>.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_misc_ant.html"><span>Previous</span></a><a class="paging-arrow next" href="ref.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_misc_logging.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_misc_logging.html b/builds/2.3.26-nightly/pgui_misc_logging.html
new file mode 100644
index 0000000..6a0fce1
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_misc_logging.html
@@ -0,0 +1,239 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Logging - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Logging">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_misc_logging.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_misc_logging.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_misc.html"><span itemprop="name">Miscellaneous</span></a></li><li class="step-3" itemprop="it
emListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_misc_logging.html"><span itemprop="name">Logging</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","Miscellaneous","Logging"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_misc_beanwrapper.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_misc_servlet.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_misc_logging" itemprop="headline">Logging</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_61" data-menu-target="autoid_61">Logging library selection</a></li><li><a class="page-menu-link" href="#autoid_62" data-menu-target="autoid_62">Logging categories</a></li></ul> </div>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_61">Logging library selection</h2>
+
+
+ <p>Is short, the recommended setup in contemporary application
+ (as of 2015) is using SLF4J API for logging everywhere. To get
+ FreeMarker 2.3.x. to use SLF4J, simply add the
+ <code class="inline-code">org.slf4j:log4j-over-slf4j</code> dependency to your
+ project, and ensure that <code class="inline-code">log4j:log4j</code> isn't
+ present. (Starting from FreeMarker 2.4.x you don't need
+ <code class="inline-code">log4j-over-slf4j</code> anymore, though it does no harm
+ either.)</p>
+
+ <p>Read on if you are curious about the details, or if you can't
+ use SLF4J...</p>
+
+ <p>FreeMarker integrates with the following logging libraries:
+ <a href="http://www.slf4j.org/">SLF4J</a>, <a href="http://commons.apache.org/logging/">Apache Commons
+ Logging</a>, <a href="http://jakarta.apache.org/log4j">Log4J</a> 1.x, <a href="http://jakarta.apache.org/avalon/logkit">Avalon
+ LogKit</a>, and <a href="http://java.sun.com/j2se/1.4/docs/api/java/util/logging/package-summary.html"><code>java.util.logging</code></a>.
+ By default, FreeMarker will look for the these logging libraries in
+ the following order, and will automatically use the first one it
+ finds (in 2.3.x): Log4J (will use SLF4J instead if it's a
+ properly installed <code class="inline-code">log4j-over-slf4j</code>, since
+ 2.3.22), Apache Avalon LogKit, <code class="inline-code">java.util.logging</code>.
+ As you can see, Log4j has the highest priority. The presence of
+ Log4j is simply detected from the presence of the
+ <code class="inline-code">org.apache.log4j.Logger</code> class, which means that
+ Log4j redirections like <code class="inline-code">log4j-over-slf4j</code> or
+ <code class="inline-code">log4j-1.2-api</code> will also get the highest
+ priority.</p>
+
+ <p>Prior to FreeMarker 2.4, SLF4J and Apache Commons Logging
+ aren't searched automatically due to backward compatibility
+ constraints. But if you have
+ <code class="inline-code">org.slf4j:log4j-over-slf4j</code> properly installed
+ (means, you have no real Log4j in your class path, and SLF4J has a
+ backing implementation like <code class="inline-code">logback-classic</code>),
+ then FreeMarker will use the SLF4J API directly instead of the Log4j
+ API (since FreeMarker 2.3.22).</p>
+
+ <p>Note that a similar trick can be applied for logging into
+ Log4j2: If <code class="inline-code">org.apache.logging.log4j:log4j-1.2-api</code>
+ is present, FreeMarker 2.3.x will pick that as it looks like Log4j,
+ but all the messages will actually go to Log4j2.</p>
+
+ <p>If the auto detection doesn't give you the result that you
+ want, you can set the
+ <code class="inline-code">org.freemarker.loggerLibrary</code> system property to
+ select a logger library explicitly (since 2.3.22), like:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">java <em>...</em> -Dorg.freemarker.loggerLibrary=SLF4J</pre></div>
+
+ <p>The supported system property values are:
+ <code class="inline-code">SLF4J</code>, <code class="inline-code">CommonsLogging</code>,
+ <code class="inline-code">JUL</code> (for <code class="inline-code">java.util.logging</code>),
+ <code class="inline-code">Avalon</code>, <code class="inline-code">auto</code> (the default
+ behavior), <code class="inline-code">none</code> (disables logging).</p>
+
+ <p>Note that for reliable operation, the system property should
+ be set when the JVM starts (like above), not later from Java
+ code.</p>
+
+ <p>Using SLF4J is recommended, as it works best with FreeMarker,
+ and also because it will be the highest priority auto detected
+ logger starting from FreeMarker 2.4.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_62">Logging categories</h2>
+
+
+ <p>All log messages produced by FreeMarker are logged with a
+ logger category that starts with <code class="inline-code">freemarker.</code>. The
+ currently used logger categories are:</p>
+
+ <div class="table-responsive">
+ <table class="table">
+
+ <thead>
+ <tr>
+ <th>Log category name</th>
+
+
+ <th>Purpose</th>
+
+ </tr>
+
+ </thead>
+
+
+ <tbody>
+ <tr>
+ <td><code class="inline-code">freemarker.beans</code></td>
+
+
+ <td>Logs messages of the Beans wrapper module.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">freemarker.cache</code></td>
+
+
+ <td>Logs messages related to template loading and
+ caching.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">freemarker.runtime</code></td>
+
+
+ <td>Logs messages related to template execution that doesn't
+ fit any of the more specific categories. Most importantly, it
+ logs template exceptions thrown during template processing
+ (however that should be disabled in modern application; see
+ later).</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">freemarker.runtime.attempt</code></td>
+
+
+ <td>Logs template exceptions thrown during template processing
+ and caught by
+ <code class="inline-code">attempt</code>/<code class="inline-code">recover</code>
+ directives, with DEBUG severity. Note that such exceptions
+ will be still also logged with their normal logger (like
+ <code class="inline-code">freemarker.runtime</code>).</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">freemarker.servlet</code></td>
+
+
+ <td>Logs messages of the <code class="inline-code">FreemarkerServlet</code>
+ class.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">freemarker.jsp</code></td>
+
+
+ <td>Logs messages of the FreeMarker JSP support.</td>
+
+ </tr>
+
+ </tbody>
+
+ </table>
+ </div>
+
+
+ <p>One quirk relating this is that FreeMarker will log exceptions
+ during template execution under the
+ <code class="inline-code">freemarker.runtime</code> category even if the exception
+ continues propagating and so eventually will be thrown by
+ <code class="inline-code">Template.process</code> or
+ <code class="inline-code">Environment.process</code> anyway. (Those are the API
+ calls with which the template was invoked from the application or
+ the application framework.) Well behaving applications log the
+ exceptions thrown at them, or rarely, handle them and deliberately
+ don't want to log them. But as FreeMarker has already logged that
+ exception, you will end up one more log entry than expected. To fix
+ that (since 2.3.22), set the
+ <code class="inline-code">log_template_exceptions</code>
+ (<code class="inline-code">Configurable.setLogTemplateExceptions(boolean)</code>)
+ setting to <code class="inline-code">false</code>.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_misc_beanwrapper.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_misc_servlet.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_misc_multithreading.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_misc_multithreading.html b/builds/2.3.26-nightly/pgui_misc_multithreading.html
new file mode 100644
index 0000000..1e6d2f0
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_misc_multithreading.html
@@ -0,0 +1,73 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Multithreading - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Multithreading">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_misc_multithreading.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_misc_multithreading.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_misc.html"><span itemprop="name">Miscellaneous</span></a></li><li class="step-3" itemprop="it
emListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_misc_multithreading.html"><span itemprop="name">Multithreading</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","Miscellaneous","Multithreading"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_misc_charset.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_misc_beanwrapper.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_misc_multithreading" itemprop="headline">Multithreading</h1>
+</div></div><p>In a multithreaded environment <code class="inline-code">Configuration</code>
+ instances, <code class="inline-code">Template</code> instances and data-models
+ should be handled as immutable (read-only) objects. That is, you
+ create and initialize them (for example with
+ <code class="inline-code">set<em class="code-color">...</em></code> methods), and
+ then you don't modify them later (e.g. you don't call
+ <code class="inline-code">set<em class="code-color">...</em></code>). This allows us
+ to avoid expensive synchronized blocks in a multithreaded environment.
+ Beware with <code class="inline-code">Template</code> instances; when you get a
+ <code class="inline-code">Template</code> instance with
+ <code class="inline-code">Configuration.getTemplate</code>, you may get an instance
+ from the template cache that is already used by other threads, so do
+ not call its <code class="inline-code">set<em class="code-color">...</em></code>
+ methods (calling <code class="inline-code">process</code> is of course fine).</p><p>The above restrictions do not apply if you access all objects
+ from the <em>same</em> single thread only.</p><p>It is impossible to modify the data-model object or a <a href="pgui_config_sharedvariables.html">shared variable</a> with FTL,
+ unless you put methods (or other objects) into the data-model that do
+ that. We discourage you from writing methods that modify the
+ data-model object or the shared variables. Try to use variables that
+ are stored in the environment object instead (this object is created
+ for a single <code class="inline-code">Template.process</code> call to store the
+ runtime state of processing), so you don't modify data that are
+ possibly used by multiple threads. For more information read: <a href="pgui_misc_var.html">Variables, scopes</a></p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_misc_charset.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_misc_beanwrapper.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_misc_secureenv.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_misc_secureenv.html b/builds/2.3.26-nightly/pgui_misc_secureenv.html
new file mode 100644
index 0000000..3f5a966
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_misc_secureenv.html
@@ -0,0 +1,85 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Configuring security policy for FreeMarker - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Configuring security policy for FreeMarker">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_misc_secureenv.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_misc_secureenv.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_misc.html"><span itemprop="name">Miscellaneous</span></a></li><li class="step-3" itemprop="it
emListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_misc_secureenv.html"><span itemprop="name">Configuring security policy for FreeMarker</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","Miscellaneous","Configuring security policy for FreeMarker"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_misc_servlet.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_misc_xml_legacy.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_misc_secureenv" itemprop="headline">Configuring security policy for FreeMarker</h1>
+</div></div><p>When FreeMarker is used in a Java virtual machine with a
+ security manager installed, you have to grant it few permissions to
+ ensure it operates properly. Most notably, you need these entries to
+ your security policy file for
+ <code class="inline-code">freemarker.jar</code>:</p>
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">grant codeBase "file:/path/to/freemarker.jar"
+{
+ permission java.util.PropertyPermission "file.encoding", "read";
+ permission java.util.PropertyPermission "freemarker.*", "read";
+}</pre></div><p>Additionally, if you are loading templates from a directory, you
+ need to give FreeMarker permissions to read files from that directory
+ using the following permission:</p>
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">grant codeBase "file:/path/to/freemarker.jar"
+{
+ ...
+ permission java.io.FilePermission "/path/to/templates/-", "read";
+}</pre></div><p>Finally, if you're just using the default template loading
+ mechanism which loads templates from the current directory, then
+ specify these permissions additionally: (note that the expression
+ <code class="inline-code">${user.dir}</code> will be evaluated at run time by the
+ policy interpreter, pretty much as if it were a FreeMarker
+ template)</p>
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">
+grant codeBase "file:/path/to/freemarker.jar"
+{
+ ...
+ permission java.util.PropertyPermission "user.dir", "read";
+ permission java.io.FilePermission "${user.dir}/-", "read";
+}</pre></div><p>Naturally, if you're running under Windows, use double backslash
+ instead of a single slash for separating directory components in
+ paths.</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_misc_servlet.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_misc_xml_legacy.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[37/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/eclipse-toc.xml
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/eclipse-toc.xml b/builds/2.3.26-nightly/eclipse-toc.xml
new file mode 100644
index 0000000..a8fcc31
--- /dev/null
+++ b/builds/2.3.26-nightly/eclipse-toc.xml
@@ -0,0 +1,698 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?NLS TYPE="org.eclipse.help.toc"?>
+
+<toc label="Apache FreeMarker Manual">
+
+<topic
+ label="I: Template Author's Guide"
+ href="dgui.html"
+ >
+<topic
+ label="1: Getting Started"
+ href="dgui_quickstart.html"
+ >
+<topic
+ label="Template + data-model = output"
+ href="dgui_quickstart_basics.html"
+ ></topic>
+<topic
+ label="The data-model at a glance"
+ href="dgui_quickstart_datamodel.html"
+ ></topic>
+<topic
+ label="The template at a glance"
+ href="dgui_quickstart_template.html"
+ ></topic></topic>
+<topic
+ label="2: Values, Types"
+ href="dgui_datamodel.html"
+ >
+<topic
+ label="Basics"
+ href="dgui_datamodel_basics.html"
+ ></topic>
+<topic
+ label="The types"
+ href="dgui_datamodel_types.html"
+ ></topic></topic>
+<topic
+ label="3: The Template"
+ href="dgui_template.html"
+ >
+<topic
+ label="Overall structure"
+ href="dgui_template_overallstructure.html"
+ ></topic>
+<topic
+ label="Directives"
+ href="dgui_template_directives.html"
+ ></topic>
+<topic
+ label="Expressions"
+ href="dgui_template_exp.html"
+ ></topic>
+<topic
+ label="Interpolations"
+ href="dgui_template_valueinsertion.html"
+ ></topic></topic>
+<topic
+ label="4: Miscellaneous"
+ href="dgui_misc.html"
+ >
+<topic
+ label="Defining your own directives"
+ href="dgui_misc_userdefdir.html"
+ ></topic>
+<topic
+ label="Defining variables in the template"
+ href="dgui_misc_var.html"
+ ></topic>
+<topic
+ label="Namespaces"
+ href="dgui_misc_namespace.html"
+ ></topic>
+<topic
+ label="Auto-escaping and output formats"
+ href="dgui_misc_autoescaping.html"
+ ></topic>
+<topic
+ label="White-space handling"
+ href="dgui_misc_whitespace.html"
+ ></topic>
+<topic
+ label="Alternative (square bracket) syntax"
+ href="dgui_misc_alternativesyntax.html"
+ ></topic></topic></topic>
+<topic
+ label="II: Programmer's Guide"
+ href="pgui.html"
+ >
+<topic
+ label="1: Getting Started"
+ href="pgui_quickstart.html"
+ >
+<topic
+ label="Create a configuration instance"
+ href="pgui_quickstart_createconfiguration.html"
+ ></topic>
+<topic
+ label="Create a data-model"
+ href="pgui_quickstart_createdatamodel.html"
+ ></topic>
+<topic
+ label="Get the template"
+ href="pgui_quickstart_gettemplate.html"
+ ></topic>
+<topic
+ label="Merging the template with the data-model"
+ href="pgui_quickstart_merge.html"
+ ></topic>
+<topic
+ label="Putting all together"
+ href="pgui_quickstart_all.html"
+ ></topic></topic>
+<topic
+ label="2: The Data Model"
+ href="pgui_datamodel.html"
+ >
+<topic
+ label="Basics"
+ href="pgui_datamodel_basics.html"
+ ></topic>
+<topic
+ label="Scalars"
+ href="pgui_datamodel_scalar.html"
+ ></topic>
+<topic
+ label="Containers"
+ href="pgui_datamodel_parent.html"
+ ></topic>
+<topic
+ label="Methods"
+ href="pgui_datamodel_method.html"
+ ></topic>
+<topic
+ label="Directives"
+ href="pgui_datamodel_directive.html"
+ ></topic>
+<topic
+ label="Node variables"
+ href="pgui_datamodel_node.html"
+ ></topic>
+<topic
+ label="Object wrappers"
+ href="pgui_datamodel_objectWrapper.html"
+ ></topic></topic>
+<topic
+ label="3: The Configuration"
+ href="pgui_config.html"
+ >
+<topic
+ label="Basics"
+ href="pgui_config_basics.html"
+ ></topic>
+<topic
+ label="Shared variables"
+ href="pgui_config_sharedvariables.html"
+ ></topic>
+<topic
+ label="Settings"
+ href="pgui_config_settings.html"
+ ></topic>
+<topic
+ label="Template loading"
+ href="pgui_config_templateloading.html"
+ ></topic>
+<topic
+ label="Error handling"
+ href="pgui_config_errorhandling.html"
+ ></topic>
+<topic
+ label="Template configurations"
+ href="pgui_config_templateconfigurations.html"
+ ></topic>
+<topic
+ label="Associating output formats with templates"
+ href="pgui_config_outputformatsautoesc.html"
+ ></topic>
+<topic
+ label="Custom number and date/time formats"
+ href="pgui_config_custom_formats.html"
+ ></topic>
+<topic
+ label="The "incompatible improvements" setting"
+ href="pgui_config_incompatible_improvements.html"
+ ></topic></topic>
+<topic
+ label="4: Miscellaneous"
+ href="pgui_misc.html"
+ >
+<topic
+ label="Variables, scopes"
+ href="pgui_misc_var.html"
+ ></topic>
+<topic
+ label="Charset issues"
+ href="pgui_misc_charset.html"
+ ></topic>
+<topic
+ label="Multithreading"
+ href="pgui_misc_multithreading.html"
+ ></topic>
+<topic
+ label="Bean wrapper"
+ href="pgui_misc_beanwrapper.html"
+ ></topic>
+<topic
+ label="Logging"
+ href="pgui_misc_logging.html"
+ ></topic>
+<topic
+ label="Using FreeMarker with servlets"
+ href="pgui_misc_servlet.html"
+ ></topic>
+<topic
+ label="Configuring security policy for FreeMarker"
+ href="pgui_misc_secureenv.html"
+ ></topic>
+<topic
+ label="Legacy XML wrapper implementation"
+ href="pgui_misc_xml_legacy.html"
+ ></topic>
+<topic
+ label="Using FreeMarker with Ant"
+ href="pgui_misc_ant.html"
+ ></topic>
+<topic
+ label="Jython wrapper"
+ href="pgui_misc_jythonwrapper.html"
+ ></topic></topic></topic>
+<topic
+ label="III: Template Language Reference"
+ href="ref.html"
+ >
+<topic
+ label="1: Built-in Reference"
+ href="ref_builtins.html"
+ >
+<topic
+ label="Alphabetical index"
+ href="ref_builtins_alphaidx.html"
+ ></topic>
+<topic
+ label="Built-ins for strings"
+ href="ref_builtins_string.html"
+ ></topic>
+<topic
+ label="Built-ins for numbers"
+ href="ref_builtins_number.html"
+ ></topic>
+<topic
+ label="Built-ins for date/time/date-time values"
+ href="ref_builtins_date.html"
+ ></topic>
+<topic
+ label="Built-ins for booleans"
+ href="ref_builtins_boolean.html"
+ ></topic>
+<topic
+ label="Built-ins for sequences"
+ href="ref_builtins_sequence.html"
+ ></topic>
+<topic
+ label="Built-ins for hashes"
+ href="ref_builtins_hash.html"
+ ></topic>
+<topic
+ label="Built-ins for nodes (for XML)"
+ href="ref_builtins_node.html"
+ ></topic>
+<topic
+ label="Loop variable built-ins"
+ href="ref_builtins_loop_var.html"
+ ></topic>
+<topic
+ label="Type independent built-ins"
+ href="ref_builtins_type_independent.html"
+ ></topic>
+<topic
+ label="Seldom used and expert built-ins"
+ href="ref_builtins_expert.html"
+ ></topic></topic>
+<topic
+ label="2: Directive Reference"
+ href="ref_directives.html"
+ >
+<topic
+ label="Alphabetical index"
+ href="ref_directive_alphaidx.html"
+ ></topic>
+<topic
+ label="assign"
+ href="ref_directive_assign.html"
+ ></topic>
+<topic
+ label="attempt, recover"
+ href="ref_directive_attempt.html"
+ ></topic>
+<topic
+ label="autoesc"
+ href="ref_directive_autoesc.html"
+ ></topic>
+<topic
+ label="compress"
+ href="ref_directive_compress.html"
+ ></topic>
+<topic
+ label="escape, noescape (deprecated)"
+ href="ref_directive_escape.html"
+ ></topic>
+<topic
+ label="flush"
+ href="ref_directive_flush.html"
+ ></topic>
+<topic
+ label="ftl"
+ href="ref_directive_ftl.html"
+ ></topic>
+<topic
+ label="function, return"
+ href="ref_directive_function.html"
+ ></topic>
+<topic
+ label="global"
+ href="ref_directive_global.html"
+ ></topic>
+<topic
+ label="if, else, elseif"
+ href="ref_directive_if.html"
+ ></topic>
+<topic
+ label="import"
+ href="ref_directive_import.html"
+ ></topic>
+<topic
+ label="include"
+ href="ref_directive_include.html"
+ ></topic>
+<topic
+ label="list, else, items, sep, break"
+ href="ref_directive_list.html"
+ ></topic>
+<topic
+ label="local"
+ href="ref_directive_local.html"
+ ></topic>
+<topic
+ label="macro, nested, return"
+ href="ref_directive_macro.html"
+ ></topic>
+<topic
+ label="noautoesc"
+ href="ref_directive_noautoesc.html"
+ ></topic>
+<topic
+ label="noparse"
+ href="ref_directive_noparse.html"
+ ></topic>
+<topic
+ label="nt"
+ href="ref_directive_nt.html"
+ ></topic>
+<topic
+ label="outputformat"
+ href="ref_directive_outputformat.html"
+ ></topic>
+<topic
+ label="setting"
+ href="ref_directive_setting.html"
+ ></topic>
+<topic
+ label="stop"
+ href="ref_directive_stop.html"
+ ></topic>
+<topic
+ label="switch, case, default, break"
+ href="ref_directive_switch.html"
+ ></topic>
+<topic
+ label="t, lt, rt"
+ href="ref_directive_t.html"
+ ></topic>
+<topic
+ label="User-defined directive (<@...>)"
+ href="ref_directive_userDefined.html"
+ ></topic>
+<topic
+ label="visit, recurse, fallback"
+ href="ref_directive_visit.html"
+ ></topic></topic>
+<topic
+ label="3: Special Variable Reference"
+ href="ref_specvar.html"
+ ></topic>
+<topic
+ label="4: Reserved names in FTL"
+ href="ref_reservednames.html"
+ ></topic>
+<topic
+ label="5: Deprecated FTL constructs"
+ href="ref_deprecated.html"
+ >
+<topic
+ label="List of deprecated directives"
+ href="ref_depr_directive.html"
+ ></topic>
+<topic
+ label="List of deprecated built-ins"
+ href="ref_depr_builtin.html"
+ ></topic>
+<topic
+ label="Old-style macro and call directives"
+ href="ref_depr_oldmacro.html"
+ ></topic>
+<topic
+ label="Transform directive"
+ href="ref_depr_transform.html"
+ ></topic>
+<topic
+ label="Old FTL syntax"
+ href="ref_depr_oldsyntax.html"
+ ></topic>
+<topic
+ label="#{...}: Numerical interpolation"
+ href="ref_depr_numerical_interpolation.html"
+ ></topic></topic></topic>
+<topic
+ label="IV: XML Processing Guide"
+ href="xgui.html"
+ >
+<topic
+ label="Preface"
+ href="xgui_preface.html"
+ ></topic>
+<topic
+ label="1: Exposing XML documents"
+ href="xgui_expose.html"
+ >
+<topic
+ label="The DOM tree"
+ href="xgui_expose_dom.html"
+ ></topic>
+<topic
+ label="Putting the XML into the data-model"
+ href="xgui_expose_put.html"
+ ></topic></topic>
+<topic
+ label="2: Imperative XML processing"
+ href="xgui_imperative.html"
+ >
+<topic
+ label="Basics"
+ href="xgui_imperative_learn.html"
+ ></topic>
+<topic
+ label="Details"
+ href="xgui_imperative_formal.html"
+ ></topic></topic>
+<topic
+ label="3: Declarative XML processing"
+ href="xgui_declarative.html"
+ >
+<topic
+ label="Basics"
+ href="xgui_declarative_basics.html"
+ ></topic>
+<topic
+ label="Details"
+ href="xgui_declarative_details.html"
+ ></topic></topic></topic>
+<topic
+ label="V: Appendixes"
+ href="app.html"
+ >
+<topic
+ label="A: FAQ"
+ href="app_faq.html"
+ ></topic>
+<topic
+ label="B: Version history"
+ href="app_versions.html"
+ >
+<topic
+ label="2.3.26 (incubating at Apache)"
+ href="versions_2_3_26.html"
+ ></topic>
+<topic
+ label="2.3.25 (incubating at Apache)"
+ href="versions_2_3_25.html"
+ ></topic>
+<topic
+ label="2.3.24 (incubating at Apache)"
+ href="versions_2_3_24.html"
+ ></topic>
+<topic
+ label="2.3.23"
+ href="versions_2_3_23.html"
+ ></topic>
+<topic
+ label="2.3.22"
+ href="versions_2_3_22.html"
+ ></topic>
+<topic
+ label="2.3.21"
+ href="versions_2_3_21.html"
+ ></topic>
+<topic
+ label="2.3.20"
+ href="versions_2_3_20.html"
+ ></topic>
+<topic
+ label="2.3.19"
+ href="versions_2_3_19.html"
+ ></topic>
+<topic
+ label="2.3.18"
+ href="versions_2_3_18.html"
+ ></topic>
+<topic
+ label="2.3.17"
+ href="versions_2_3_17.html"
+ ></topic>
+<topic
+ label="2.3.16"
+ href="versions_2_3_16.html"
+ ></topic>
+<topic
+ label="2.3.15"
+ href="versions_2_3_15.html"
+ ></topic>
+<topic
+ label="2.3.14"
+ href="versions_2_3_14.html"
+ ></topic>
+<topic
+ label="2.3.13"
+ href="versions_2_3_13.html"
+ ></topic>
+<topic
+ label="2.3.12"
+ href="versions_2_3_12.html"
+ ></topic>
+<topic
+ label="2.3.11"
+ href="versions_2_3_11.html"
+ ></topic>
+<topic
+ label="2.3.10"
+ href="versions_2_3_10.html"
+ ></topic>
+<topic
+ label="2.3.9"
+ href="versions_2_3_9.html"
+ ></topic>
+<topic
+ label="2.3.8"
+ href="versions_2_3_8.html"
+ ></topic>
+<topic
+ label="2.3.7"
+ href="versions_2_3_7.html"
+ ></topic>
+<topic
+ label="2.3.7 RC1"
+ href="versions_2_3_7rc1.html"
+ ></topic>
+<topic
+ label="2.3.6"
+ href="versions_2_3_6.html"
+ ></topic>
+<topic
+ label="2.3.5"
+ href="versions_2_3_5.html"
+ ></topic>
+<topic
+ label="2.3.4"
+ href="versions_2_3_4.html"
+ ></topic>
+<topic
+ label="2.3.3"
+ href="versions_2_3_3.html"
+ ></topic>
+<topic
+ label="2.3.2"
+ href="versions_2_3_2.html"
+ ></topic>
+<topic
+ label="2.3.1"
+ href="versions_2_3_1.html"
+ ></topic>
+<topic
+ label="2.3"
+ href="versions_2_3.html"
+ ></topic>
+<topic
+ label="2.2.8"
+ href="versions_2_2_8.html"
+ ></topic>
+<topic
+ label="2.2.7"
+ href="versions_2_2_7.html"
+ ></topic>
+<topic
+ label="2.2.6"
+ href="versions_2_2_6.html"
+ ></topic>
+<topic
+ label="2.2.5"
+ href="versions_2_2_5.html"
+ ></topic>
+<topic
+ label="2.2.4"
+ href="versions_2_2_4.html"
+ ></topic>
+<topic
+ label="2.2.3"
+ href="versions_2_2_3.html"
+ ></topic>
+<topic
+ label="2.2.2"
+ href="versions_2_2_2.html"
+ ></topic>
+<topic
+ label="2.2.1"
+ href="versions_2_2_1.html"
+ ></topic>
+<topic
+ label="2.2"
+ href="versions_2_2.html"
+ ></topic>
+<topic
+ label="2.1.5"
+ href="versions_2_1_5.html"
+ ></topic>
+<topic
+ label="2.1.4"
+ href="versions_2_1_4.html"
+ ></topic>
+<topic
+ label="2.1.3"
+ href="versions_2_1_3.html"
+ ></topic>
+<topic
+ label="2.1.2"
+ href="versions_2_1_2.html"
+ ></topic>
+<topic
+ label="2.1.1"
+ href="versions_2_1_1.html"
+ ></topic>
+<topic
+ label="2.1"
+ href="versions_2_1.html"
+ ></topic>
+<topic
+ label="2.01"
+ href="versions_2_01.html"
+ ></topic>
+<topic
+ label="2.0"
+ href="versions_2_0.html"
+ ></topic>
+<topic
+ label="2.0 RC3"
+ href="versions_2_0RC3.html"
+ ></topic>
+<topic
+ label="2.0 RC2"
+ href="versions_2_0RC2.html"
+ ></topic>
+<topic
+ label="2.0 RC1"
+ href="versions_2_0RC1.html"
+ ></topic></topic>
+<topic
+ label="C: Installing FreeMarker"
+ href="app_install.html"
+ ></topic>
+<topic
+ label="D: Legal"
+ href="app_legal.html"
+ >
+<topic
+ label="License"
+ href="app_license.html"
+ ></topic>
+<topic
+ label="Export Control"
+ href="app_eccn.html"
+ ></topic></topic></topic>
+<topic
+ label="Glossary"
+ href="gloss.html"
+ ></topic>
+<topic
+ label="Alphabetical Index"
+ href="alphaidx.html"
+ ></topic></toc>
+
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/favicon.png
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/favicon.png b/builds/2.3.26-nightly/favicon.png
new file mode 100644
index 0000000..ce0de20
Binary files /dev/null and b/builds/2.3.26-nightly/favicon.png differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/figures/model2sketch.png
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/figures/model2sketch.png b/builds/2.3.26-nightly/figures/model2sketch.png
new file mode 100644
index 0000000..93f9a6b
Binary files /dev/null and b/builds/2.3.26-nightly/figures/model2sketch.png differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/figures/overview.png
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/figures/overview.png b/builds/2.3.26-nightly/figures/overview.png
new file mode 100644
index 0000000..b32e0bd
Binary files /dev/null and b/builds/2.3.26-nightly/figures/overview.png differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/figures/tree.png
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/figures/tree.png b/builds/2.3.26-nightly/figures/tree.png
new file mode 100644
index 0000000..dcd9bf3
Binary files /dev/null and b/builds/2.3.26-nightly/figures/tree.png differ
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/gloss.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/gloss.html b/builds/2.3.26-nightly/gloss.html
new file mode 100644
index 0000000..c9bffc2
--- /dev/null
+++ b/builds/2.3.26-nightly/gloss.html
@@ -0,0 +1,770 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-glossary">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Glossary - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Glossary">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/gloss.html">
+<link rel="canonical" href="http://freemarker.org/docs/gloss.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="gloss.html"><span itemprop="name">Glossary</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li>Glossary</li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a>
</li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Glossary"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="app_eccn.html"><span>Previous</span></a><a class="paging-arrow next" href="alphaidx.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-part" id="gloss" itemprop="headline">Glossary</h1>
+</div></div> <p>
+<a href="#gloss.attribute">A</a> | <a href="#gloss.boolean">B</a> | <a href="#gloss.character">C</a> | <a href="#gloss.dataModel">D</a> | <a href="#gloss.element">E</a> | <a href="#gloss.FTL">F</a> | <a href="#gloss.hashVariable">H</a> | <a href="#gloss.lineBreak">L</a> | <a href="#gloss.macroDefinitionBody">M</a> | <a href="#gloss.outputEncoding">O</a> | <a href="#gloss.parseTimeError">P</a> | <a href="#gloss.regularExpression">R</a> | <a href="#gloss.scalarVariable">S</a> | <a href="#gloss.tag">T</a> | <a href="#gloss.UCS">U</a> | <a href="#gloss.whiteSpace">W</a> | <a href="#autoid_295">X</a> </p>
+
+ <dl>
+
+ <dt><a name="gloss.attribute"></a>Attribute</dt>
+
+
+ <dd>
+ <p>In connection with <a href="#gloss.XML">XML</a> or HTML
+ (or <a href="#gloss.SGML">SGML</a> in general), attributes are
+ the named values associated with elements. For example, in
+ <code class="inline-code"><body bgcolor=black
+ text=green><em class="code-color">...</em></body></code>,
+ the attributes are <code class="inline-code">bgcolor=black</code> and
+ <code class="inline-code">text=green</code>. On the left side of
+ <code class="inline-code">=</code> is the name of the attribute, while on the right
+ side is the value of the attribute. Note that in XML, the values must
+ be quoted (for example: <code class="inline-code"><body bgcolor="black"
+ text='green'></code>), while in HTML it is optional for certain
+ values.</p>
+
+
+
+ <p>See Also
+ <a href="#gloss.startTag">Start-tag</a>
+ </p>
+ </dd>
+
+
+ <dt><a name="gloss.boolean"></a>Boolean</dt>
+
+
+ <dd>
+ <p>This is a variable type. A boolean variable represents a logical
+ true or false (yes or no). For example, if the visitor has been logged
+ in or not. There are only two possible boolean values:
+ <code class="inline-code">true</code> and <code class="inline-code">false</code>. Typically, you
+ will use booleans with an <code class="inline-code"><#if
+ <em class="code-color">...</em>></code> directive when you want
+ to display text based on some condition, say, you show a certain part
+ of the page only for visitors who has logged in.</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.character"></a>Character</dt>
+
+
+ <dd>
+ <p>A symbol that people use in writing. Examples of characters:
+ Latin capital letter A ("A"), Latin small letter A
+ ("a"), digit four ("4"), number sign
+ ("#"), colon (":")</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.charset"></a>Charset</dt>
+
+
+ <dd>
+ <p>A charset is a rule (algorithm) for transforming a sequence of
+ <a href="#gloss.character">characters</a> (text) to a sequence
+ of bits (or in practice, to a sequence of bytes). Whenever a character
+ sequence is stored on a digital media, or sent through a digital
+ channel (network), a charset must be applied. Examples of charsets are
+ ISO-8859-1, ISO-8859-6, Shift_JIS , UTF-8.</p>
+
+ <p>The capabilities of different charsers are different, that is,
+ not all charsets can be used for all languages. For example ISO-8859-1
+ can't represent Arabic letters, but ISO-8859-6 can, however it can't
+ represent the accented letters that that ISO-8859-1 can. Most charsets
+ are highly restrictive regarding the allowed characters. UTF-8 allows
+ virtually all possible characters, but most text editors can't handle
+ it yet (2004).</p>
+
+ <p>When different software components exchange text (as the HTTP
+ server and the browser, or the text editor you use for saving
+ templates and FreeMarker who loads them), it's very important that
+ they agree in the charset used for the binary encoding of the text. If
+ they don't, then the binary data will be misinterpreted by the
+ receiver (loader) component, which usually results in the distortion
+ of the non-English letters.</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.collectionVariable"></a>Collection</dt>
+
+
+ <dd>
+ <p>A variable that (in conjunction with the <code class="inline-code">list</code>
+ directive) can spit out a series of variables.</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.dataModel"></a>Data-model</dt>
+
+
+ <dd>
+ <p>Something that holds the information the template has to show
+ (or use in some other ways) when the template processor assembles the
+ output (e.g. a Web page). In FreeMarker this is best visualized as a
+ tree.</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.directive"></a>Directive</dt>
+
+
+ <dd>
+ <p>Instructions to FreeMarker used in <a href="#gloss.FTL">FTL</a> <a href="#gloss.template">templates</a>. They are invoked by <a href="#gloss.FTLTag">FTL tags</a>.</p>
+
+
+
+
+
+ <p>See Also
+ <a href="#gloss.predefinedDirective">Predefined directive</a>,
+ <a href="#gloss.userDefinedDirective">User-defined directive</a>
+ </p>
+ </dd>
+
+
+ <dt><a name="gloss.element"></a>Element</dt>
+
+
+ <dd>
+ <p>Elements are the most fundamental building pieces of <a href="#gloss.SGML">SGML</a> documents; an SGML document is
+ basically a tree of elements. Example of elements used in HTML: body,
+ head, title, p, h1, h2.</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.endTag"></a>End-tag</dt>
+
+
+ <dd>
+ <p><a href="#gloss.tag">Tag</a>, which indicates that the
+ following content is not under the element. Example:
+ <code class="inline-code"></body></code>.</p>
+
+
+
+ <p>See Also
+ <a href="#gloss.startTag">Start-tag</a>
+ </p>
+ </dd>
+
+
+ <dt><a name="gloss.environment"></a>Environment</dt>
+
+
+ <dd>
+ <p>An <code class="inline-code">Environment</code> object stores the runtime
+ state of a single template <a href="#gloss.templateProcessingJob">template processing job</a>.
+ That is, for each
+ <code class="inline-code">Template.process(<em class="code-color">...</em>)</code>
+ call, an <code class="inline-code">Environment</code> instance will be created, and
+ then discarded when <code class="inline-code">process</code> returns. This object
+ stores the set of temporary variables created by the template, the
+ value of settings set by the template, the reference to the data-model
+ root, etc. Everything that is needed to fulfill the template
+ processing job.</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.XML"></a>Extensible Markup Language</dt>
+
+
+ <dd>
+ <p>A subset (restricted version) of <a href="#gloss.SGML">SGML</a>. This is less powerful than SGML, but
+ it easier to learn and much easier to process with programs. If you
+ are an HTML author: XML documents are similar to HTML documents, but
+ the XML standard doesn't specify the usable elements. XML is a much
+ more general-purpose thing than HTML. For example you can use XML to
+ describe Web pages (like HTML) or to describe non-visual information
+ like a phone book database.</p>
+
+
+
+ <p>See Also
+ <a href="#gloss.SGML">Standard Generalized Markup Language</a>
+ </p>
+ </dd>
+
+
+ <dt><a name="gloss.FTL"></a>FreeMarker Template Language</dt>
+
+
+ <dd>
+ <p>Simple programming language designed to write text file
+ templates, especially HTML templates.</p>
+
+ </dd>
+
+
+ <dt><a name="autoid_293"></a>FTL</dt>
+
+
+ <dd>See
+ <a href="#gloss.FTL">FreeMarker Template Language</a>
+ </dd>
+
+
+ <dt><a name="gloss.FTLTag"></a>FTL tag</dt>
+
+
+ <dd>
+ <p><a href="#gloss.tag">Tag</a>-like text fragment used to
+ invoke FreeMarker <a href="#gloss.directive">directives</a> in
+ <a href="#gloss.FTL">FTL</a> <a href="#gloss.template">templates</a>. These are similar to HTML
+ or XML tags at the first glance. The most prominent difference is that
+ the tag name is started with <code class="inline-code">#</code> or
+ <code class="inline-code">@</code>. Another important difference is that FTL tags do
+ not use <a href="#gloss.attribute">attributes</a>, but a
+ substantially different syntax to specify parameters. Examples of FTL
+ tags: <code class="inline-code"><#if newUser></code>,
+ <code class="inline-code"></#if></code>, <code class="inline-code"><@menuitem
+ title="Projects" link="projects.html"/></code></p>
+
+ </dd>
+
+
+ <dt><a name="gloss.fullQualifiedName"></a>Full-qualified name</dt>
+
+
+ <dd>
+ <p>... of nodes (XML node or other FTL node variable): The
+ full-qualified name of a node specifies not only the node name
+ (<code class="inline-code"><em class="code-color">node</em>?node_name</code>), but
+ also the node namespace
+ (<code class="inline-code"><em class="code-color">node</em>?node_namespace</code>),
+ this way it unambiguously identify a certain kind of node. The format
+ of the full-qualified name is
+ <code class="inline-code"><em class="code-color">nodeName</em></code> or
+ <code class="inline-code"><em class="code-color">prefix</em>:<em class="code-color">nodeName</em></code>.
+ The prefix is shorthand to identify the node namespace (the a node
+ namespace is usually specified with a long ugly URI). In FTL, prefixes
+ are associated with the node namespaces with the
+ <code class="inline-code">ns_prefixes</code> parameter of <a href="ref_directive_ftl.html#ref.directive.ftl">the <code>ftl</code>
+ directive</a>. In XML files, prefixes are associated with the node
+ namespaces with the
+ <code class="inline-code">xmlns:<em class="code-color">prefix</em></code> attributes.
+ The lack of the prefix means that the node uses the default node
+ namespace, if a default node namespace is defined; otherwise it means
+ that the node does not belong to any node namespace. The default node
+ namespace is defined in FTL by registering reserved prefix
+ <code class="inline-code">D</code> with the <code class="inline-code">ns_prefixes</code> parameter
+ of the <code class="inline-code">ftl</code> directive. In XML files it is defined
+ with attribute <code class="inline-code">xmlns</code>.</p>
+
+ <p>... of Java classes: The full-qualified name of a Java class
+ contains both the class name and the name of the package the class
+ belongs to. This way it unambiguously specifies the class, regardless
+ of the context. An example of full-qualifed class name:
+ <code class="inline-code">java.util.Map</code> (as opposed to
+ <code class="inline-code">Map</code>).</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.functionDefinitionBody"></a>Function definition body</dt>
+
+
+ <dd>
+ <p>The template fragment between the <code class="inline-code"><#function
+ <em class="code-color">...</em>></code> and
+ <code class="inline-code"></#function></code>. This template fragment will be
+ executed when you call the function (for example as
+ <code class="inline-code">myFuction(1, 2)</code>).</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.hashVariable"></a>Hash</dt>
+
+
+ <dd>
+ <p>A variable that acts as a container that stores sub variables
+ that can be retrieved via a string that is a lookup name.</p>
+
+
+
+ <p>See Also
+ <a href="#gloss.sequenceVariable">Sequence</a>
+ </p>
+ </dd>
+
+
+ <dt><a name="gloss.lineBreak"></a>Line break</dt>
+
+
+ <dd>
+ <p>Line break is a special character (or a sequence of special
+ characters) that causes a line breaking when you see the text as plain
+ text (say, when you read the text with Windows notepad). Typically you
+ type this character by hitting ENTER or RETURN key. The line break is
+ represented with different characters on different platforms (to cause
+ incompatibility and confusion...): "line feed" character
+ on UNIX-es, "carriage return" character on Macintosh,
+ "carriage return" + "line feed" (two
+ characters!) on Windows and DOS. Note that line breaks in HTML do not
+ have a visual effect when viewed in a browser; you must use markup
+ such as <code class="inline-code"><BR></code> for that. This manual never
+ means <code class="inline-code"><BR></code> when it says
+ "line-break".</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.macroDefinitionBody"></a>Macro definition body</dt>
+
+
+ <dd>
+ <p>The template fragment between the <code class="inline-code"><#macro
+ <em class="code-color">...</em>></code> and
+ <code class="inline-code"></#macro></code>. This template fragment will be
+ executed when you call the macro (for example as
+ <code class="inline-code"><@myMacro/></code>).</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.markupOutputValue"></a>Markup output value</dt>
+
+
+ <dd>
+ <p>A value with FTL type "markup output". This type is
+ related to <a href="dgui_misc_autoescaping.html">auto-escaping
+ mechanism</a>; you can <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_movalues">read about this type
+ there</a>. But in short, this is a value that stores text that's
+ already in the output markup format (like HTML, XML, RTF, etc.), and
+ hence must not be auto-escaped.</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.methodVariable"></a>Method</dt>
+
+
+ <dd>
+ <p>A variable that calculates something based on parameters you
+ give, and returns the result.</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.MVC"></a>MVC pattern</dt>
+
+
+ <dd>
+ <p>MVC stands for Model View Controller. It's a design pattern
+ started his life in the 70's as a framework developer by Trygve
+ Reenskaug for Smalltalk, and was used primary for for UI-s (user
+ interfaces). MVC considers three roles:</p>
+
+ <ul>
+ <li>
+ Model: Model represents application (domain) specific
+ information in a non-visual way. For example, an array of product
+ objects in the memory of your computer is the part of the
+ model.
+ </li>
+
+ <li>
+ View: View displays the model and provides UI. For example,
+ it's the task of the view component to render the array of product
+ objects to a HTML page.
+ </li>
+
+ <li>
+ Controller: The controller handles user input, modifies the
+ model, and ensures that the view is updated when needed. For
+ example it is the task of controller to take the incoming HTTP
+ requests, parse the received parameters (forms), dispatch the
+ requests to the proper business logic object, and chose the right
+ template for the HTTP response.
+ </li>
+ </ul>
+
+ <p>The most important thing for us when applying MVC for Web
+ applications is the separation of View from the other two roles. This
+ allows the separation of designers (HTML authors) from programmers.
+ Designers deal with the visual aspects, programmers deal with the
+ application logic and other technical issues; everybody works on what
+ he is good at. Designers and programmers are less dependent on each
+ other. Designers can change the appearance without programmers having
+ to change or recompile the program.</p>
+
+ <p>For more information I recommend reading <a href="http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/web-tier/web-tier5.html">chapter
+ 4.4</a> of Designing Enterprise Applications with the J2EE Platform
+ blueprint.</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.outputEncoding"></a>Output encoding</dt>
+
+
+ <dd>
+ <p>Means output <a href="#gloss.charset">charset</a>. In
+ the Java world the term "encoding" is commonly (mis)used
+ as a synonym to charset.</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.parseTimeError"></a>Parse-time error</dt>
+
+
+ <dd>
+ <p>An error occurring during the template parsing phase, as opposed
+ to the later template execution phase (see more explanation below).
+ The presence of a such error prevents the execution of the whole
+ template, even if the execution wouldn't use the part where the error
+ is. This is seen as an advantage, as it helps early (before
+ deployment, ideally in-editor) error detection.</p>
+
+ <p>A FreeMarker template is processed in two phases. First the
+ <em>whole</em> template is analyzed syntactically, which
+ is called parsing. The result of the parsing is a
+ <code class="inline-code">Template</code> Java object, which is usually cached for
+ fast reuse. Later, the already parsed template can be executed for
+ unlimited times to produce output based on the content of a <a href="#gloss.dataModel">data-model</a>. Errors occurring during
+ the parsing are called parse-time errors.</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.predefinedDirective"></a>Predefined directive</dt>
+
+
+ <dd>
+ <p>Directive what is defined by FreeMarker, thus always available.
+ Example of predefined directives: <code class="inline-code">if</code>,
+ <code class="inline-code">list</code>, <code class="inline-code">include</code></p>
+
+
+
+ <p>See Also
+ <a href="#gloss.userDefinedDirective">User-defined directive</a>
+ </p>
+ </dd>
+
+
+ <dt><a name="gloss.regularExpression"></a>Regular expression</dt>
+
+
+ <dd>
+ <p>A regular expression is a string that specifies a set of strings
+ that matches it. For example, the regular expression
+ <code class="inline-code">"fo*"</code> matches <code class="inline-code">"f"</code>,
+ <code class="inline-code">"fo"</code>, <code class="inline-code">"foo"</code>, etc. Regular
+ expressions are used in several languages and other tools. In
+ FreeMarker, the usage of them is a "power user" option.
+ So if you have never used them before, there is no need to worry about
+ not being familiar with them. But if you are interested in regular
+ expressions, you can find several Web pages and books about them.
+ FreeMarker uses the variation of regular expressions described at:
+ <a href="http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html">http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html</a></p>
+
+ </dd>
+
+
+ <dt><a name="gloss.scalarVariable"></a>Scalar</dt>
+
+
+ <dd>
+ <p>A scalar variable stores a single value. A scalar is either a
+ string or a number or a date/time or a <a href="#gloss.boolean">boolean</a>.</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.sequenceVariable"></a>Sequence</dt>
+
+
+ <dd>
+ <p>A sequence is a variable that contains a sequence of sub
+ variables. The sequence's sub variables are accessible via numerical
+ index, where the index of the very first object is 0, the index of the
+ second objects is 1, the index of the third object is 2, etc.</p>
+
+
+
+ <p>See Also
+ <a href="#gloss.hashVariable">Hash</a>
+ </p>
+ </dd>
+
+
+ <dt><a name="autoid_294"></a>SGML</dt>
+
+
+ <dd>See
+ <a href="#gloss.SGML">Standard Generalized Markup Language</a>
+ </dd>
+
+
+ <dt><a name="gloss.SGML"></a>Standard Generalized Markup Language</dt>
+
+
+ <dd>
+ <p>This is an international standard (ISO 8879) that specifies the
+ rules for the creation of platform-independent markup languages. HTML
+ is a markup language created with SGML. <a href="#gloss.XML">XML</a> is a subset (restricted version) of
+ SGML.</p>
+
+
+
+ <p>See Also
+ <a href="#gloss.XML">Extensible Markup Language</a>
+ </p>
+ </dd>
+
+
+ <dt><a name="gloss.startTag"></a>Start-tag</dt>
+
+
+ <dd>
+ <p><a href="#gloss.tag">Tag</a>, which indicates that the
+ following content is under the element, up to the <a href="#gloss.endTag">end-tag</a>. The start-tag may also
+ specifies <a href="#gloss.attribute">attributes</a> for the
+ element. An example of a start-tag: <code class="inline-code"><body
+ bgcolor=black></code></p>
+
+ </dd>
+
+
+ <dt><a name="gloss.string"></a>String</dt>
+
+
+ <dd>
+ <p>A sequence of <a href="#gloss.character">characters</a>
+ such as "m", "o", "u",
+ "s", "e".</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.tag"></a>Tag</dt>
+
+
+ <dd>
+ <p>Text fragment indicating the usage of an element in SGML.
+ Examples of tags: <code class="inline-code"><body bgcolor=black></code>,
+ <code class="inline-code"></body></code></p>
+
+
+
+
+
+ <p>See Also
+ <a href="#gloss.startTag">Start-tag</a>,
+ <a href="#gloss.endTag">End-tag</a>
+ </p>
+ </dd>
+
+
+ <dt><a name="gloss.template"></a>Template</dt>
+
+
+ <dd>
+ <p>A template is a text file with some special character sequences
+ embedded into it. A template processor (e.g. FreeMarker) will
+ interpret special character sequences and it outputs a more or less
+ different text from the original text file, where the differences are
+ often based on a <a href="#gloss.dataModel">data-model</a>.
+ Thus, the original text acts as a template of the possible
+ outputs.</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.templateEncoding"></a>Template encoding</dt>
+
+
+ <dd>
+ <p>Means template <a href="#gloss.charset">charset</a>. In
+ the Java world the term "encoding" is commonly (mis)used
+ as a synonym to charset.</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.templateProcessingJob"></a>Template processing job</dt>
+
+
+ <dd>
+ <p>A template processing job is the process during which FreeMarker
+ merges the main (top-level) template with a data-model to produce the
+ output. Because templates can <code class="inline-code">include</code> and
+ <code class="inline-code">import</code> other templates, this may involves the
+ processing of multiple templates, but those will all belong to the
+ same template processing job, which was started with the processing of
+ the main template. A template-processing job only exists for the short
+ time period until the processing of the main template is finished, and
+ then it vanishes with all the variables created during the process
+ (variables created with <code class="inline-code">assign</code>,
+ <code class="inline-code">macro</code>, <code class="inline-code">global</code>, etc.
+ directives).</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.threadSafe"></a>Thread-safe</dt>
+
+
+ <dd>
+ <p>An object is thread-safe if it is safe to call its methods from
+ multiple threads, even in parallel (i.e. multiple threads execute the
+ methods of the object at the same time). Non-thread-safe objects may
+ behave unpredictably in this situation, and generate wrong results,
+ corrupt internal data structures, etc. Thread-safety is typically
+ achieved in two ways with Java: with the usage
+ <code class="inline-code">synchronized</code> statement (or
+ <code class="inline-code">synchronized</code> methods), and with the immutability of
+ encapsulated data (i.e. you can't modify the field after you have
+ created the object).</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.transformVariable"></a>Transform</dt>
+
+
+ <dd>
+ <p>This term refers to user-defined directives that are implemetned
+ with the now obsolete <code class="inline-code">TemplateTransformModel</code> Java
+ interface. The feature was originally made for implementing output
+ filters, hence the name.</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.UCS"></a>UCS</dt>
+
+
+ <dd>
+ <p>This is international standard (ISO-10646) that defines a huge
+ set of <a href="#gloss.character">characters</a> and assigns a
+ unique number for each character ("!" is 33, ...,
+ "A" is 61, "B" is 62, ..., Arabic letter
+ hamza is 1569... etc.). This character set (not charset) contains
+ almost all characters used today (Latin alphabet, Cyrillic alphabet,
+ Chinese letters, etc.). The idea behind UCS is that we can specify any
+ character with a unique number, not mater what the platform or the
+ language is.</p>
+
+
+
+ <p>See Also
+ <a href="#gloss.unicode">Unicode</a>
+ </p>
+ </dd>
+
+
+ <dt><a name="gloss.unicode"></a>Unicode</dt>
+
+
+ <dd>
+ <p>De-facto standard developed by Unicode organization. It deals
+ with the classification of the characters in <a href="#gloss.UCS">UCS</a> (which is letter, which is digit, which
+ is uppercase, which is lowercase, etc.), and with other problems of
+ processing text made from the characters of UCS (e.g.
+ normalization).</p>
+
+ </dd>
+
+
+ <dt><a name="gloss.userDefinedDirective"></a>User-defined directive</dt>
+
+
+ <dd>
+ <p>Directive that is not defined by the FreeMarker core, but by the
+ user. These are typically application domain specific directives, like
+ pull-down menu generation directives, HTML form handling
+ directives.</p>
+
+
+
+ <p>See Also
+ <a href="#gloss.predefinedDirective">Predefined directive</a>
+ </p>
+ </dd>
+
+
+ <dt><a name="gloss.whiteSpace"></a>White-space</dt>
+
+
+ <dd>
+ <p>Characters that are totally transparent but have impact on the
+ visual appearance of the text. Examples of white-space characters:
+ space, tab (horizontal and vertical), line breaks (CR and LF), form
+ feed.</p>
+
+
+
+ <p>See Also
+ <a href="#gloss.lineBreak">Line break</a>
+ </p>
+ </dd>
+
+
+ <dt><a name="autoid_295"></a>XML</dt>
+
+
+ <dd>See
+ <a href="#gloss.XML">Extensible Markup Language</a>
+ </dd>
+
+ </dl>
+<div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="app_eccn.html"><span>Previous</span></a><a class="paging-arrow next" href="alphaidx.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/index.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/index.html b/builds/2.3.26-nightly/index.html
new file mode 100644
index 0000000..fb72cf0
--- /dev/null
+++ b/builds/2.3.26-nightly/index.html
@@ -0,0 +1,55 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-book">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Apache FreeMarker Manual">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/index.html">
+<link rel="canonical" href="http://freemarker.org/docs/index.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name">Table of Contents</span></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></
div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = [];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><span class="paging-arrow disabled previous"><span>Previous</span></span><a class="paging-arrow next" href="dgui.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-book" id="autoid_1" itemprop="headline">Apache FreeMarker Manual <span class="subtitle productname">For Freemarker 2.3.26</span>
+</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Table of Contents</div>
+<ul><li><a class="page-menu-link" href="dgui.html" data-menu-target="dgui">Template Author's Guide</a><ul><li><a class="page-menu-link" href="dgui_quickstart.html" data-menu-target="dgui_quickstart">Getting Started</a><ul><li><a class="page-menu-link" href="dgui_quickstart_basics.html" data-menu-target="dgui_quickstart_basics">Template + data-model = output</a></li><li><a class="page-menu-link" href="dgui_quickstart_datamodel.html" data-menu-target="dgui_quickstart_datamodel">The data-model at a glance</a></li><li><a class="page-menu-link" href="dgui_quickstart_template.html" data-menu-target="dgui_quickstart_template">The template at a glance</a></li></ul></li><li><a class="page-menu-link" href="dgui_datamodel.html" data-menu-target="dgui_datamodel">Values, Types</a><ul><li><a class="page-menu-link" href="dgui_datamodel_basics.html" data-menu-target="dgui_datamodel_basics">Basics</a></li><li><a class="page-menu-link" href="dgui_datamodel_types.html" data-menu-target="dgui_datam
odel_types">The types</a></li></ul></li><li><a class="page-menu-link" href="dgui_template.html" data-menu-target="dgui_template">The Template</a><ul><li><a class="page-menu-link" href="dgui_template_overallstructure.html" data-menu-target="dgui_template_overallstructure">Overall structure</a></li><li><a class="page-menu-link" href="dgui_template_directives.html" data-menu-target="dgui_template_directives">Directives</a></li><li><a class="page-menu-link" href="dgui_template_exp.html" data-menu-target="dgui_template_exp">Expressions</a></li><li><a class="page-menu-link" href="dgui_template_valueinsertion.html" data-menu-target="dgui_template_valueinsertion">Interpolations</a></li></ul></li><li><a class="page-menu-link" href="dgui_misc.html" data-menu-target="dgui_misc">Miscellaneous</a><ul><li><a class="page-menu-link" href="dgui_misc_userdefdir.html" data-menu-target="dgui_misc_userdefdir">Defining your own directives</a></li><li><a class="page-menu-link" href="dgui_misc_var.html" da
ta-menu-target="dgui_misc_var">Defining variables in the template</a></li><li><a class="page-menu-link" href="dgui_misc_namespace.html" data-menu-target="dgui_misc_namespace">Namespaces</a></li><li><a class="page-menu-link" href="dgui_misc_autoescaping.html" data-menu-target="dgui_misc_autoescaping">Auto-escaping and output formats</a></li><li><a class="page-menu-link" href="dgui_misc_whitespace.html" data-menu-target="dgui_misc_whitespace">White-space handling</a></li><li><a class="page-menu-link" href="dgui_misc_alternativesyntax.html" data-menu-target="dgui_misc_alternativesyntax">Alternative (square bracket) syntax</a></li></ul></li></ul></li><li><a class="page-menu-link" href="pgui.html" data-menu-target="pgui">Programmer's Guide</a><ul><li><a class="page-menu-link" href="pgui_quickstart.html" data-menu-target="pgui_quickstart">Getting Started</a><ul><li><a class="page-menu-link" href="pgui_quickstart_createconfiguration.html" data-menu-target="pgui_quickstart_createconfigu
ration">Create a configuration instance</a></li><li><a class="page-menu-link" href="pgui_quickstart_createdatamodel.html" data-menu-target="pgui_quickstart_createdatamodel">Create a data-model</a></li><li><a class="page-menu-link" href="pgui_quickstart_gettemplate.html" data-menu-target="pgui_quickstart_gettemplate">Get the template</a></li><li><a class="page-menu-link" href="pgui_quickstart_merge.html" data-menu-target="pgui_quickstart_merge">Merging the template with the data-model</a></li><li><a class="page-menu-link" href="pgui_quickstart_all.html" data-menu-target="pgui_quickstart_all">Putting all together</a></li></ul></li><li><a class="page-menu-link" href="pgui_datamodel.html" data-menu-target="pgui_datamodel">The Data Model</a><ul><li><a class="page-menu-link" href="pgui_datamodel_basics.html" data-menu-target="pgui_datamodel_basics">Basics</a></li><li><a class="page-menu-link" href="pgui_datamodel_scalar.html" data-menu-target="pgui_datamodel_scalar">Scalars</a></li><li><a
class="page-menu-link" href="pgui_datamodel_parent.html" data-menu-target="pgui_datamodel_parent">Containers</a></li><li><a class="page-menu-link" href="pgui_datamodel_method.html" data-menu-target="pgui_datamodel_method">Methods</a></li><li><a class="page-menu-link" href="pgui_datamodel_directive.html" data-menu-target="pgui_datamodel_directive">Directives</a></li><li><a class="page-menu-link" href="pgui_datamodel_node.html" data-menu-target="pgui_datamodel_node">Node variables</a></li><li><a class="page-menu-link" href="pgui_datamodel_objectWrapper.html" data-menu-target="pgui_datamodel_objectWrapper">Object wrappers</a></li></ul></li><li><a class="page-menu-link" href="pgui_config.html" data-menu-target="pgui_config">The Configuration</a><ul><li><a class="page-menu-link" href="pgui_config_basics.html" data-menu-target="pgui_config_basics">Basics</a></li><li><a class="page-menu-link" href="pgui_config_sharedvariables.html" data-menu-target="pgui_config_sharedvariables">Shared var
iables</a></li><li><a class="page-menu-link" href="pgui_config_settings.html" data-menu-target="pgui_config_settings">Settings</a></li><li><a class="page-menu-link" href="pgui_config_templateloading.html" data-menu-target="pgui_config_templateloading">Template loading</a></li><li><a class="page-menu-link" href="pgui_config_errorhandling.html" data-menu-target="pgui_config_errorhandling">Error handling</a></li><li><a class="page-menu-link" href="pgui_config_templateconfigurations.html" data-menu-target="pgui_config_templateconfigurations">Template configurations</a></li><li><a class="page-menu-link" href="pgui_config_outputformatsautoesc.html" data-menu-target="pgui_config_outputformatsautoesc">Associating output formats with templates</a></li><li><a class="page-menu-link" href="pgui_config_custom_formats.html" data-menu-target="pgui_config_custom_formats">Custom number and date/time formats</a></li><li><a class="page-menu-link" href="pgui_config_incompatible_improvements.html" data-
menu-target="pgui_config_incompatible_improvements">The "incompatible improvements" setting</a></li></ul></li><li><a class="page-menu-link" href="pgui_misc.html" data-menu-target="pgui_misc">Miscellaneous</a><ul><li><a class="page-menu-link" href="pgui_misc_var.html" data-menu-target="pgui_misc_var">Variables, scopes</a></li><li><a class="page-menu-link" href="pgui_misc_charset.html" data-menu-target="pgui_misc_charset">Charset issues</a></li><li><a class="page-menu-link" href="pgui_misc_multithreading.html" data-menu-target="pgui_misc_multithreading">Multithreading</a></li><li><a class="page-menu-link" href="pgui_misc_beanwrapper.html" data-menu-target="pgui_misc_beanwrapper">Bean wrapper</a></li><li><a class="page-menu-link" href="pgui_misc_logging.html" data-menu-target="pgui_misc_logging">Logging</a></li><li><a class="page-menu-link" href="pgui_misc_servlet.html" data-menu-target="pgui_misc_servlet">Using FreeMarker with servlets</a></li><li><a class="page-menu-link" h
ref="pgui_misc_secureenv.html" data-menu-target="pgui_misc_secureenv">Configuring security policy for FreeMarker</a></li><li><a class="page-menu-link" href="pgui_misc_xml_legacy.html" data-menu-target="pgui_misc_xml_legacy">Legacy XML wrapper implementation</a></li><li><a class="page-menu-link" href="pgui_misc_ant.html" data-menu-target="pgui_misc_ant">Using FreeMarker with Ant</a></li><li><a class="page-menu-link" href="pgui_misc_jythonwrapper.html" data-menu-target="pgui_misc_jythonwrapper">Jython wrapper</a></li></ul></li></ul></li><li><a class="page-menu-link" href="ref.html" data-menu-target="ref">Template Language Reference</a><ul><li><a class="page-menu-link" href="ref_builtins.html" data-menu-target="ref_builtins">Built-in Reference</a><ul><li><a class="page-menu-link" href="ref_builtins_alphaidx.html" data-menu-target="ref_builtins_alphaidx">Alphabetical index</a></li><li><a class="page-menu-link" href="ref_builtins_string.html" data-menu-target="ref_builtins_string">Built-
ins for strings</a></li><li><a class="page-menu-link" href="ref_builtins_number.html" data-menu-target="ref_builtins_number">Built-ins for numbers</a></li><li><a class="page-menu-link" href="ref_builtins_date.html" data-menu-target="ref_builtins_date">Built-ins for date/time/date-time values</a></li><li><a class="page-menu-link" href="ref_builtins_boolean.html" data-menu-target="ref_builtins_boolean">Built-ins for booleans</a></li><li><a class="page-menu-link" href="ref_builtins_sequence.html" data-menu-target="ref_builtins_sequence">Built-ins for sequences</a></li><li><a class="page-menu-link" href="ref_builtins_hash.html" data-menu-target="ref_builtins_hash">Built-ins for hashes</a></li><li><a class="page-menu-link" href="ref_builtins_node.html" data-menu-target="ref_builtins_node">Built-ins for nodes (for XML)</a></li><li><a class="page-menu-link" href="ref_builtins_loop_var.html" data-menu-target="ref_builtins_loop_var">Loop variable built-ins</a></li><li><a class="page-menu-lin
k" href="ref_builtins_type_independent.html" data-menu-target="ref_builtins_type_independent">Type independent built-ins</a></li><li><a class="page-menu-link" href="ref_builtins_expert.html" data-menu-target="ref_builtins_expert">Seldom used and expert built-ins</a></li></ul></li><li><a class="page-menu-link" href="ref_directives.html" data-menu-target="ref_directives">Directive Reference</a><ul><li><a class="page-menu-link" href="ref_directive_alphaidx.html" data-menu-target="ref_directive_alphaidx">Alphabetical index</a></li><li><a class="page-menu-link" href="ref_directive_assign.html" data-menu-target="ref_directive_assign">assign</a></li><li><a class="page-menu-link" href="ref_directive_attempt.html" data-menu-target="ref_directive_attempt">attempt, recover</a></li><li><a class="page-menu-link" href="ref_directive_autoesc.html" data-menu-target="ref_directive_autoesc">autoesc</a></li><li><a class="page-menu-link" href="ref_directive_compress.html" data-menu-target="ref_directiv
e_compress">compress</a></li><li><a class="page-menu-link" href="ref_directive_escape.html" data-menu-target="ref_directive_escape">escape, noescape (deprecated)</a></li><li><a class="page-menu-link" href="ref_directive_flush.html" data-menu-target="ref_directive_flush">flush</a></li><li><a class="page-menu-link" href="ref_directive_ftl.html" data-menu-target="ref_directive_ftl">ftl</a></li><li><a class="page-menu-link" href="ref_directive_function.html" data-menu-target="ref_directive_function">function, return</a></li><li><a class="page-menu-link" href="ref_directive_global.html" data-menu-target="ref_directive_global">global</a></li><li><a class="page-menu-link" href="ref_directive_if.html" data-menu-target="ref_directive_if">if, else, elseif</a></li><li><a class="page-menu-link" href="ref_directive_import.html" data-menu-target="ref_directive_import">import</a></li><li><a class="page-menu-link" href="ref_directive_include.html" data-menu-target="ref_directive_include">include</a
></li><li><a class="page-menu-link" href="ref_directive_list.html" data-menu-target="ref_directive_list">list, else, items, sep, break</a></li><li><a class="page-menu-link" href="ref_directive_local.html" data-menu-target="ref_directive_local">local</a></li><li><a class="page-menu-link" href="ref_directive_macro.html" data-menu-target="ref_directive_macro">macro, nested, return</a></li><li><a class="page-menu-link" href="ref_directive_noautoesc.html" data-menu-target="ref_directive_noautoesc">noautoesc</a></li><li><a class="page-menu-link" href="ref_directive_noparse.html" data-menu-target="ref_directive_noparse">noparse</a></li><li><a class="page-menu-link" href="ref_directive_nt.html" data-menu-target="ref_directive_nt">nt</a></li><li><a class="page-menu-link" href="ref_directive_outputformat.html" data-menu-target="ref_directive_outputformat">outputformat</a></li><li><a class="page-menu-link" href="ref_directive_setting.html" data-menu-target="ref_directive_setting">setting</a></
li><li><a class="page-menu-link" href="ref_directive_stop.html" data-menu-target="ref_directive_stop">stop</a></li><li><a class="page-menu-link" href="ref_directive_switch.html" data-menu-target="ref_directive_switch">switch, case, default, break</a></li><li><a class="page-menu-link" href="ref_directive_t.html" data-menu-target="ref_directive_t">t, lt, rt</a></li><li><a class="page-menu-link" href="ref_directive_userDefined.html" data-menu-target="ref_directive_userDefined">User-defined directive (<@...>)</a></li><li><a class="page-menu-link" href="ref_directive_visit.html" data-menu-target="ref_directive_visit">visit, recurse, fallback</a></li></ul></li><li><a class="page-menu-link" href="ref_specvar.html" data-menu-target="ref_specvar">Special Variable Reference</a></li><li><a class="page-menu-link" href="ref_reservednames.html" data-menu-target="ref_reservednames">Reserved names in FTL</a></li><li><a class="page-menu-link" href="ref_deprecated.html" data-menu-target="ref_de
precated">Deprecated FTL constructs</a><ul><li><a class="page-menu-link" href="ref_depr_directive.html" data-menu-target="ref_depr_directive">List of deprecated directives</a></li><li><a class="page-menu-link" href="ref_depr_builtin.html" data-menu-target="ref_depr_builtin">List of deprecated built-ins</a></li><li><a class="page-menu-link" href="ref_depr_oldmacro.html" data-menu-target="ref_depr_oldmacro">Old-style macro and call directives</a></li><li><a class="page-menu-link" href="ref_depr_transform.html" data-menu-target="ref_depr_transform">Transform directive</a></li><li><a class="page-menu-link" href="ref_depr_oldsyntax.html" data-menu-target="ref_depr_oldsyntax">Old FTL syntax</a></li><li><a class="page-menu-link" href="ref_depr_numerical_interpolation.html" data-menu-target="ref_depr_numerical_interpolation">#{...}: Numerical interpolation</a></li></ul></li></ul></li><li><a class="page-menu-link" href="xgui.html" data-menu-target="xgui">XML Processing Guide</a><ul><li><a cl
ass="page-menu-link" href="xgui_preface.html" data-menu-target="xgui_preface">Preface</a></li><li><a class="page-menu-link" href="xgui_expose.html" data-menu-target="xgui_expose">Exposing XML documents</a><ul><li><a class="page-menu-link" href="xgui_expose_dom.html" data-menu-target="xgui_expose_dom">The DOM tree</a></li><li><a class="page-menu-link" href="xgui_expose_put.html" data-menu-target="xgui_expose_put">Putting the XML into the data-model</a></li></ul></li><li><a class="page-menu-link" href="xgui_imperative.html" data-menu-target="xgui_imperative">Imperative XML processing</a><ul><li><a class="page-menu-link" href="xgui_imperative_learn.html" data-menu-target="xgui_imperative_learn">Basics</a></li><li><a class="page-menu-link" href="xgui_imperative_formal.html" data-menu-target="xgui_imperative_formal">Details</a></li></ul></li><li><a class="page-menu-link" href="xgui_declarative.html" data-menu-target="xgui_declarative">Declarative XML processing</a><ul><li><a class="page-
menu-link" href="xgui_declarative_basics.html" data-menu-target="xgui_declarative_basics">Basics</a></li><li><a class="page-menu-link" href="xgui_declarative_details.html" data-menu-target="xgui_declarative_details">Details</a></li></ul></li></ul></li><li><a class="page-menu-link" href="app.html" data-menu-target="app">Appendixes</a><ul><li><a class="page-menu-link" href="app_faq.html" data-menu-target="app_faq">FAQ</a></li><li><a class="page-menu-link" href="app_versions.html" data-menu-target="app_versions">Version history</a><ul><li><a class="page-menu-link" href="versions_2_3_26.html" data-menu-target="versions_2_3_26">2.3.26 (incubating at Apache)</a></li><li><a class="page-menu-link" href="versions_2_3_25.html" data-menu-target="versions_2_3_25">2.3.25 (incubating at Apache)</a></li><li><a class="page-menu-link" href="versions_2_3_24.html" data-menu-target="versions_2_3_24">2.3.24 (incubating at Apache)</a></li><li><a class="page-menu-link" href="versions_2_3_23.html" data-men
u-target="versions_2_3_23">2.3.23</a></li><li><a class="page-menu-link" href="versions_2_3_22.html" data-menu-target="versions_2_3_22">2.3.22</a></li><li><a class="page-menu-link" href="versions_2_3_21.html" data-menu-target="versions_2_3_21">2.3.21</a></li><li><a class="page-menu-link" href="versions_2_3_20.html" data-menu-target="versions_2_3_20">2.3.20</a></li><li><a class="page-menu-link" href="versions_2_3_19.html" data-menu-target="versions_2_3_19">2.3.19</a></li><li><a class="page-menu-link" href="versions_2_3_18.html" data-menu-target="versions_2_3_18">2.3.18</a></li><li><a class="page-menu-link" href="versions_2_3_17.html" data-menu-target="versions_2_3_17">2.3.17</a></li><li><a class="page-menu-link" href="versions_2_3_16.html" data-menu-target="versions_2_3_16">2.3.16</a></li><li><a class="page-menu-link" href="versions_2_3_15.html" data-menu-target="versions_2_3_15">2.3.15</a></li><li><a class="page-menu-link" href="versions_2_3_14.html" data-menu-target="versions_2_3_14
">2.3.14</a></li><li><a class="page-menu-link" href="versions_2_3_13.html" data-menu-target="versions_2_3_13">2.3.13</a></li><li><a class="page-menu-link" href="versions_2_3_12.html" data-menu-target="versions_2_3_12">2.3.12</a></li><li><a class="page-menu-link" href="versions_2_3_11.html" data-menu-target="versions_2_3_11">2.3.11</a></li><li><a class="page-menu-link" href="versions_2_3_10.html" data-menu-target="versions_2_3_10">2.3.10</a></li><li><a class="page-menu-link" href="versions_2_3_9.html" data-menu-target="versions_2_3_9">2.3.9</a></li><li><a class="page-menu-link" href="versions_2_3_8.html" data-menu-target="versions_2_3_8">2.3.8</a></li><li><a class="page-menu-link" href="versions_2_3_7.html" data-menu-target="versions_2_3_7">2.3.7</a></li><li><a class="page-menu-link" href="versions_2_3_7rc1.html" data-menu-target="versions_2_3_7rc1">2.3.7 RC1</a></li><li><a class="page-menu-link" href="versions_2_3_6.html" data-menu-target="versions_2_3_6">2.3.6</a></li><li><a class=
"page-menu-link" href="versions_2_3_5.html" data-menu-target="versions_2_3_5">2.3.5</a></li><li><a class="page-menu-link" href="versions_2_3_4.html" data-menu-target="versions_2_3_4">2.3.4</a></li><li><a class="page-menu-link" href="versions_2_3_3.html" data-menu-target="versions_2_3_3">2.3.3</a></li><li><a class="page-menu-link" href="versions_2_3_2.html" data-menu-target="versions_2_3_2">2.3.2</a></li><li><a class="page-menu-link" href="versions_2_3_1.html" data-menu-target="versions_2_3_1">2.3.1</a></li><li><a class="page-menu-link" href="versions_2_3.html" data-menu-target="versions_2_3">2.3</a></li><li><a class="page-menu-link" href="versions_2_2_8.html" data-menu-target="versions_2_2_8">2.2.8</a></li><li><a class="page-menu-link" href="versions_2_2_7.html" data-menu-target="versions_2_2_7">2.2.7</a></li><li><a class="page-menu-link" href="versions_2_2_6.html" data-menu-target="versions_2_2_6">2.2.6</a></li><li><a class="page-menu-link" href="versions_2_2_5.html" data-menu-targ
et="versions_2_2_5">2.2.5</a></li><li><a class="page-menu-link" href="versions_2_2_4.html" data-menu-target="versions_2_2_4">2.2.4</a></li><li><a class="page-menu-link" href="versions_2_2_3.html" data-menu-target="versions_2_2_3">2.2.3</a></li><li><a class="page-menu-link" href="versions_2_2_2.html" data-menu-target="versions_2_2_2">2.2.2</a></li><li><a class="page-menu-link" href="versions_2_2_1.html" data-menu-target="versions_2_2_1">2.2.1</a></li><li><a class="page-menu-link" href="versions_2_2.html" data-menu-target="versions_2_2">2.2</a></li><li><a class="page-menu-link" href="versions_2_1_5.html" data-menu-target="versions_2_1_5">2.1.5</a></li><li><a class="page-menu-link" href="versions_2_1_4.html" data-menu-target="versions_2_1_4">2.1.4</a></li><li><a class="page-menu-link" href="versions_2_1_3.html" data-menu-target="versions_2_1_3">2.1.3</a></li><li><a class="page-menu-link" href="versions_2_1_2.html" data-menu-target="versions_2_1_2">2.1.2</a></li><li><a class="page-menu-
link" href="versions_2_1_1.html" data-menu-target="versions_2_1_1">2.1.1</a></li><li><a class="page-menu-link" href="versions_2_1.html" data-menu-target="versions_2_1">2.1</a></li><li><a class="page-menu-link" href="versions_2_01.html" data-menu-target="versions_2_01">2.01</a></li><li><a class="page-menu-link" href="versions_2_0.html" data-menu-target="versions_2_0">2.0</a></li><li><a class="page-menu-link" href="versions_2_0RC3.html" data-menu-target="versions_2_0RC3">2.0 RC3</a></li><li><a class="page-menu-link" href="versions_2_0RC2.html" data-menu-target="versions_2_0RC2">2.0 RC2</a></li><li><a class="page-menu-link" href="versions_2_0RC1.html" data-menu-target="versions_2_0RC1">2.0 RC1</a></li></ul></li><li><a class="page-menu-link" href="app_install.html" data-menu-target="app_install">Installing FreeMarker</a></li><li><a class="page-menu-link" href="app_legal.html" data-menu-target="app_legal">Legal</a><ul><li><a class="page-menu-link" href="app_license.html" data-menu-target
="app_license">License</a></li><li><a class="page-menu-link" href="app_eccn.html" data-menu-target="app_eccn">Export Control</a></li></ul></li></ul></li><li><a class="page-menu-link" href="gloss.html" data-menu-target="gloss">Glossary</a></li><li><a class="page-menu-link" href="alphaidx.html" data-menu-target="alphaidx">Alphabetical Index</a></li></ul> </div><div class="bottom-pagers-wrapper"><div class="pagers bottom"><span class="paging-arrow disabled previous"><span>Previous</span></span><a class="paging-arrow next" href="dgui.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/logo.png
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/logo.png b/builds/2.3.26-nightly/logo.png
new file mode 100644
index 0000000..193dc11
Binary files /dev/null and b/builds/2.3.26-nightly/logo.png differ
[47/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/app_faq.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/app_faq.html b/builds/2.3.26-nightly/app_faq.html
new file mode 100644
index 0000000..fda425b
--- /dev/null
+++ b/builds/2.3.26-nightly/app_faq.html
@@ -0,0 +1,1797 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-appendix">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>FAQ - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="FAQ">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/app_faq.html">
+<link rel="canonical" href="http://freemarker.org/docs/app_faq.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_faq.html"><span itemprop="name">FAQ</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span clas
s="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li>FAQ</li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","FAQ"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="app.html"><span>Previous</span></a><a class="paging-arrow next" href="app_versions.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-chapter" id="app_faq" itemprop="headline">FAQ</h1>
+</div></div> <div class="qandaset">
+
+ <ol>
+ <li>
+ <a href="#faq_jsp_vs_freemarker">
+
+ JSP versus FreeMarker?
+
+
+ </a>
+ </li>
+ <li>
+ <a href="#faq_picky_about_missing_vars">
+
+ Why is FreeMarker so picky about <code class="inline-code">null</code>-s
+ and missing variables, and what to do with it?
+ </a>
+ </li>
+ <li>
+ <a href="#faq_number_grouping">
+
+ Why does FreeMarker print the numbers with strange
+ formatting (as 1,000,000 or 1�000�000 instead of 1000000)?
+ </a>
+ </li>
+ <li>
+ <a href="#faq_number_decimal_point">
+
+ Why does FreeMarker print bad decimal and/or grouping
+ separator symbol (as 3.14 instead of 3,14)?
+ </a>
+ </li>
+ <li>
+ <a href="#faq_number_boolean_formatting">
+
+ Why does FreeMarker give an error when I try to print a
+ boolean like <code class="inline-code">${aBoolean}</code>, and how to fix
+ it?
+ </a>
+ </li>
+ <li>
+ <a href="#faq_template_not_found">
+
+ FreeMarker can't find my templates
+ (<code class="inline-code">TemplateNotFoundException</code> or
+ <code class="inline-code">FileNotFoundException</code>, "Template not
+ found" error message)
+ </a>
+ </li>
+ <li>
+ <a href="#faq_check_version">
+
+ The documentation writes about feature
+ <em>X</em>, but it seems that FreeMarker doesn't
+ know that, or it behaves in a different way as documented, or a
+ bug that was supposedly fixed is still present.
+ </a>
+ </li>
+ <li>
+ <a href="#faq_alternative_syntax">
+
+ The <code class="inline-code"><</code> and <code class="inline-code">></code> of
+ FreeMarker tags confuses my editor or the XML parser. What to
+ do?
+ </a>
+ </li>
+ <li>
+ <a href="#faq_legal_variable_names">
+
+ What are the legal variable names?
+
+
+ </a>
+ </li>
+ <li>
+ <a href="#faq_strange_variable_name">
+
+ How can I use variable names (macro name, parameter name)
+ that contain minus sign (<code class="inline-code">-</code>), colon
+ (<code class="inline-code">:</code>), dot (<code class="inline-code">.</code>), or or other
+ special characters?
+ </a>
+ </li>
+ <li>
+ <a href="#faq_jsp_custom_tag_syntax">
+
+ Why do I get "java.lang.IllegalArgumentException: argument
+ type mismatch" when I try to use <em>X</em> JSP
+ custom tag?
+ </a>
+ </li>
+ <li>
+ <a href="#faq_servlet_include">
+
+ How to include other resources in a way as
+ <code class="inline-code">jsp:include</code> does it?
+ </a>
+ </li>
+ <li>
+ <a href="#faq_parameter_unwrapping">
+
+ How can I get the parameters to my
+ plain-Java-method/<code class="inline-code">TemplateMethodModelEx</code>/<code class="inline-code">TemplateTransformModel</code>/<code class="inline-code">TemplateDirectiveModel</code>
+ implementation as plain
+ <code class="inline-code">java.lang.*</code>/<code class="inline-code">java.util.*</code>
+ objects?
+ </a>
+ </li>
+ <li>
+ <a href="#faq_nonstring_keys">
+
+ Why I can't use non-string key in the
+ <code class="inline-code">myMap[myKey]</code> expression? And what to do
+ now?
+
+
+ </a>
+ </li>
+ <li>
+ <a href="#faq_simple_map">
+
+ When I list the contents of a map (a hash) with
+ <code class="inline-code">?keys</code>/<code class="inline-code">?values</code>, I get the
+ <code class="inline-code">java.util.Map</code> methods mixed with the real map
+ entries. Of course, I only want to get the map entries.
+ </a>
+ </li>
+ <li>
+ <a href="#faq_modify_seq_and_map">
+
+ How can I modify sequences (lists) and hashes (maps) in
+ FreeMarker templates?
+
+
+
+
+
+
+
+
+ </a>
+ </li>
+ <li>
+ <a href="#faq_null">
+
+ What about <code class="inline-code">null</code> and the FreeMarker
+ template language?
+ </a>
+ </li>
+ <li>
+ <a href="#faq_capture">
+
+ How can I use the output of a directive (macro) in
+ expressions (as a parameter to another directive)?
+ </a>
+ </li>
+ <li>
+ <a href="#faq_questionmark">
+
+ Why do I have "?"-s in the output instead of
+ character <em>X</em>?
+ </a>
+ </li>
+ <li>
+ <a href="#faq_retrieve_calculated_values">
+
+ How to retrieve values calculated in templates after
+ template execution done?
+ </a>
+ </li>
+ <li>
+ <a href="#faq_assign_to_dynamic_variable_name">
+
+ How to assign to (or <code class="inline-code">#import</code> into) a
+ dynamically constructed variable name (like to name that's stored
+ in another variable)?
+ </a>
+ </li>
+ <li>
+ <a href="#faq_template_uploading_security">
+
+
+
+ Can I allow users to upload templates and what are the
+ security implications?
+ </a>
+ </li>
+ <li>
+ <a href="#faq_implement_function_or_macro_in_java">
+
+ How to implement a function or macro in Java Language
+ instead of in the template language?
+ </a>
+ </li>
+ <li>
+ <a href="#faq_nice_error_page">
+
+ In my Servlet
+ based application, how do I show a nice error page instead of a
+ stack trace when error occurs during template processing?
+ </a>
+ </li>
+ <li>
+ <a href="#faq_html_editor_mangles">
+
+ I'm using a visual HTML editor that mangles template tags.
+ Will you change the template language syntax to accommodate my
+ editor?
+ </a>
+ </li>
+ </ol>
+ <dl>
+
+
+
+ <dt class="question" id="faq_jsp_vs_freemarker">
+ 1.
+ JSP versus FreeMarker?
+
+
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>We compare FreeMarker with the JSP 2.0 + JSTL combo
+ here.</p>
+
+ <p>FreeMarker Pros:</p>
+
+ <ul>
+ <li>
+ <p>FreeMarker is not tied to Servlets or networking/Web; it
+ is just a class library to generate text output by merging a
+ template with Java objects (the data-model). You can execute
+ templates anywhere and anytime; no HTTP request forwarding or
+ similar tricks needed, no Servlet environment needed at all.
+ Because of this you can easily integrate it into any
+ system.</p>
+ </li>
+
+ <li>
+ <p>Terser syntax. Consider this JSP (assuming
+ <code class="inline-code"><%@ taglib prefix="c"
+ uri="http://java.sun.com/jsp/jstl/core"
+ %></code>):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><c:if test="${t}">
+ True
+</c:if>
+
+<c:choose>
+ <c:when test="${n == 123}">
+ Do this
+ </c:when>
+ <c:otherwise>
+ Do that
+ </c:otherwise>
+</c:choose>
+
+<c:forEach var="i" items="${ls}">
+- ${i}
+</c:forEach></pre></div>
+
+ <p>and the equivalent FTL:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#if t>
+ True
+</#if>
+
+<#if n == 123>
+ Do this
+<#else>
+ Do that
+</#if>
+
+<#list ls as i>
+- ${i}
+</#list></pre></div>
+ </li>
+
+ <li>
+ <p>No servlet specific scopes and other highly technical
+ things in templates (unless, of course, you expose them into
+ the data-model deliberately). It was made for MVC from the
+ beginning, it focuses only on the presentation.</p>
+ </li>
+
+ <li>
+ <p>You can load the templates from anywhere; from the class
+ path, from a data-base, etc.</p>
+ </li>
+
+ <li>
+ <p>Locale-sensitive number and date formatting by default.
+ When you output for a human audience, all you need to do is
+ just write <code class="inline-code">${x}</code> rather than
+ <code class="inline-code"><fmt:formatNumber value="${x}"
+ /></code>.</p>
+ </li>
+
+ <li>
+ <p>Easier to define ad-hoc macros and functions.</p>
+ </li>
+
+ <li>
+ <p>No sweeping errors under the carpet. Missing variables
+ and <code class="inline-code">null</code>-s will not silently default to
+ <code class="inline-code">0</code>/<code class="inline-code">false</code>/empty-string,
+ but cause error. <a href="#faq_picky_about_missing_vars">See more about this
+ here...</a></p>
+ </li>
+
+ <li>
+ <p>"Object wrapping". This lets you show the
+ objects to templates in a customized, presentation oriented
+ way (e.g. <a href="xgui_imperative_learn.html">see
+ here</a> how a W3C DOM nodes can be seen by templates using
+ this technology.)</p>
+ </li>
+
+ <li>
+ <p>Macros and functions are just variables, so they can be
+ easily passed around as parameter values, put into the
+ data-model, etc., just like any other values.</p>
+ </li>
+
+ <li>
+ <p>Virtually unnoticeable delay when visiting a page for
+ the first time (or after it was changed), because no expensive
+ compilation happens.</p>
+ </li>
+ </ul>
+
+ <p>FreeMarker Cons:</p>
+
+ <ul>
+ <li>
+ <p>Not a "standard". There are fewer tools and
+ IDE integrations, fewer developers knows it and there's much
+ less industry support in general. (However, most JSP tag
+ libraries can work in FreeMarker templates with the proper
+ setup, unless they are base on <code class="inline-code">.tag</code>
+ files.)</p>
+ </li>
+
+ <li>
+ <p>Its syntax doesn't follow the HTML/XML rules apart from
+ some visual similarity, which is confusing for new users (it's
+ the price of the terseness). JSP doesn't follow it either, but
+ it's closer to it.</p>
+ </li>
+
+ <li>
+ <p>Since macros and functions are just variables, incorrect
+ directive and parameter names and missing required parameters
+ can be detected only on runtime.</p>
+ </li>
+
+ <li>
+ <p>Doesn't work with JSF. (It could work technically, but
+ nobody has implemented that yet.)</p>
+ </li>
+ </ul>
+
+ <p>You may read this if you are considering replacing JSP with
+ FreeMarker in an existing application or in a legacy framework
+ that only supports JSP: <a href="pgui_misc_servlet.html#pgui_misc_servlet_model2">Programmer's Guide/Miscellaneous/Using FreeMarker with servlets/Using FreeMarker for "Model 2"</a></p>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_picky_about_missing_vars">
+ 2.
+ Why is FreeMarker so picky about <code class="inline-code">null</code>-s
+ and missing variables, and what to do with it?
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>To recapitulate what's this entry is about: FreeMarker by
+ default treats an attempt to access a non-existent variable or a
+ <code class="inline-code">null</code> value (<a href="#faq_null">this two
+ is the same for FreeMarker</a>) as error, which aborts the
+ template execution.</p>
+
+ <p>First of all, you should understand the reason of being
+ picky. Most scripting languages and template languages are rather
+ forgiving with missing variables (and with
+ <code class="inline-code">null</code>-s), and they usually treat them as empty
+ string and/or 0 and/or logical false. This behavior has several
+ problems:</p>
+
+ <ul>
+ <li>
+ <p>It potentially hides accidental mistakes, like a typo in
+ a variable name, or when the template author refers to a
+ variable that the programmer doesn't put into the data-model
+ for that template, or for which the programmer uses a
+ different name. Humans are prone to do such mistakes, while
+ computers are not, so missing this opportunity that the
+ template engine can show these errors is a bad business. Even
+ if you very carefully check the output of the templates during
+ development, it is easy to look over mistakes like
+ <code class="inline-code"><#if hasWarnigs><em class="code-color">print warnings
+ here...</em></#if></code>, which would then
+ silently never print the warnings, since you have mistyped the
+ variable name (have you noticed it?). Also think about
+ maintenance, when you later modify your application; probably
+ you will not re-check templates (many applications has
+ hundreds of them) that carefully each time, for all possible
+ scenarios. Unit tests typically doesn't cover web page content
+ very good either (if you have them at all...); they mostly
+ only check certain manually set patterns in the web page, so
+ they will often gloss though changes that are actually bugs.
+ But if the page fails with exception, that's something human
+ testers will notice and unit test will notice (as the whole
+ page will fail), and in production the maintainers will notice
+ (assuming somebody check error logs).</p>
+ </li>
+
+ <li>
+ <p>Makes dangerous assumptions. The script language or
+ template engine knows nothing about the application domain, so
+ when it decides the value of something that it doesn't know to
+ be 0/false, it is a quite irresponsible and arbitrary thing.
+ Just because it's not know what's your current balance at your
+ bank, can we just say it's $0? Just because it is not known if
+ a patient has penicillin allergy, can we just say he/she
+ doesn't have it? Just consider the implications of such
+ mistakes. Showing an error page is often better than showing
+ incorrect information that looks good, leading to bad
+ decisions on the user side.</p>
+ </li>
+ </ul>
+
+ <p>Being not picky is mostly sweeping under the carpet in this
+ case (not facing the problems), which of course most people feels
+ more convenient, but still, we believe that in most cases being
+ strict will save your time and increase your software quality on
+ the long run.</p>
+
+ <p>On the other hand, we recognize that there are cases where
+ you don't want FreeMarker to be that picky for good reason, and
+ there is solution for them:</p>
+
+ <ul>
+ <li>
+ <p>It's often normal that your data-model contains
+ <code class="inline-code">null</code>-s or have optional variables. In such
+ cases use <a href="dgui_template_exp.html#dgui_template_exp_missing">these
+ operators</a>. If you use them too often, try to rethink
+ your data-model, because depending on them too much won't just
+ make the templates too verbose, but increases the probability
+ of hiding errors and printing arbitrary incorrect output (for
+ the reasons described earlier).</p>
+ </li>
+
+ <li>
+ <p>In some application you may rather want to show an
+ incomplete/damaged page than an error page. In this case you
+ can <a href="pgui_config_errorhandling.html">use another
+ error handler</a> than the default one. A custom error
+ handler can skip the problematic part, or show an error
+ indicator there, instead of aborting the whole page rendering.
+ Note, however, that although the error handlers don't give
+ arbitrary default values to variables, for pages that show
+ critical information it's maybe still better to show an error
+ page.</p>
+ </li>
+
+ <li>
+ <p>If the pages contain parts that aren't critically
+ important (like some side bars), another feature you may
+ interested in is <a href="ref_directive_attempt.html">the
+ <code>attempt</code>/<code>recover</code>
+ directives</a>.</p>
+ </li>
+ </ul>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_number_grouping">
+ 3.
+ Why does FreeMarker print the numbers with strange
+ formatting (as 1,000,000 or 1�000�000 instead of 1000000)?
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>FreeMarker uses the locale-sensitive number formatting
+ capability of the Java platform. The default number format for
+ your locale may uses grouping or other formatting. If you don't
+ want that, you have to override the number format suggested by the
+ Java platform with the <code class="inline-code">number_format</code> <a href="pgui_config_settings.html">FreeMarker setting</a>. For
+ example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">cfg.setNumberFormat("0.######"); // now it will print 1000000
+// where cfg is a freemarker.template.Configuration object</pre></div>
+
+ <p>Note however than humans often find it hard to read big
+ numbers without grouping separator. So in general it is
+ recommended to keep them, and in cases where the numbers are for
+ ''computer audience'' (which is confused on the grouping
+ separators), use the <a href="ref_builtins_number.html#ref_builtin_c"><code>c</code> built-in</a>. For
+ example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><a href="/shop/productdetails?id=${<strong>product.id?c</strong>}">Details...</a></pre></div>
+
+ <p>For computer audience you need <code class="inline-code">?c</code> anyway,
+ as the decimal separators can also wary depending on the
+ locale.</p>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_number_decimal_point">
+ 4.
+ Why does FreeMarker print bad decimal and/or grouping
+ separator symbol (as 3.14 instead of 3,14)?
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>Different countries use different decimal/grouping separator
+ symbols. If you see incorrect symbols, then probably your locale
+ is not set properly. Set the default locale of the JVM or override
+ the default locale with the <code class="inline-code">locale</code> <a href="pgui_config_settings.html">FreeMarker setting</a>. For
+ example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">cfg.setLocale(java.util.Locale.ITALY);
+// where cfg is a freemarker.template.Configuration object</pre></div>
+
+ <p>However, sometimes you want to output a number not for human
+ audience, but for "computer audience" (like you want
+ to print a size in CSS), in which case you must use dot as decimal
+ separator, regardless of the locale (language) of the page. For
+ that use the <a href="ref_builtins_number.html#ref_builtin_c"><code>c</code>
+ built-in</a>, for example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">font-size: ${<strong>fontSize?c</strong>}pt;</pre></div>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_number_boolean_formatting">
+ 5.
+ Why does FreeMarker give an error when I try to print a
+ boolean like <code class="inline-code">${aBoolean}</code>, and how to fix
+ it?
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>Unlike numbers, booleans has no commonly accepted format,
+ not even a common format within the same page. Like when you show
+ on a HTML page if a product is washable, you will hardly want to
+ show for the visitor "Washable: true", but rather "Washable: yes".
+ So we force the template author (by <code class="inline-code">${washable}</code>
+ causing error) to find out with his human knowledge how the
+ boolean value should be shown at the given place. The common way
+ of formatting a boolean is like <code class="inline-code">${washable?string("yes",
+ "no")}</code>, <code class="inline-code">${caching?string("Enabled",
+ "Disabled")}</code>, <code class="inline-code">${heating?string("on",
+ "off")}</code>, etc.</p>
+
+ <p>However, there are two cases where this gets
+ impractical:</p>
+
+ <ul>
+ <li>
+ <p>When printing boolean to generate computer language
+ output, and hence you want
+ <code class="inline-code">true</code>/<code class="inline-code">false</code>, use
+ <code class="inline-code">${<em class="code-color">someBoolean</em>?c}</code>.
+ (This requires at least FreeMarker 2.3.20. Before that, the
+ common practice was writing
+ <code class="inline-code">${<em class="code-color">someBoolean</em>?string}</code>,
+ however that's dangerous because its output depends on the
+ current boolean format setting, whose default is
+ <code class="inline-code">"true"</code>/<code class="inline-code">"false"</code>.)</p>
+ </li>
+
+ <li>
+ <p>When you have format most of the booleans on the same
+ way. In this case you can set the
+ <code class="inline-code">boolean_format</code> setting
+ (<code class="inline-code">Configuration.setBooleanFormat</code>) to reflect
+ that, and then since FreeMarker 2.3.20 you can just write
+ <code class="inline-code">${<em class="code-color">someBoolean</em>}</code>.
+ (Note that this doesn't work for
+ <code class="inline-code">true</code>/<code class="inline-code">false</code> though - you
+ have to use <code class="inline-code">?c</code> there.)</p>
+ </li>
+ </ul>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_template_not_found">
+ 6.
+ FreeMarker can't find my templates
+ (<code class="inline-code">TemplateNotFoundException</code> or
+ <code class="inline-code">FileNotFoundException</code>, "Template not
+ found" error message)
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>First of all, you should know that FreeMarker doesn't load
+ templates from file system paths directly. Instead, it uses a
+ simple virtual file system that might reads non-filesystem
+ resources (templates from inside jar-s, from inside a database
+ table, etc.). What that virtual file is decided by a configuration
+ setting,
+ <code class="inline-code">Configuration.setTemplateLoader(TemplateLoader)</code>.
+ Even if the <code class="inline-code">TemplateLoader</code> your are using maps
+ to the file system, it will have a base directory that contains
+ all the templates, and that will be the root of your virtual file
+ system that you can't reach out from (i.e., absolute paths will be
+ still relative to the virtual file system root).</p>
+
+ <p>Tips to solve the problem:</p>
+
+ <ul>
+ <li>
+ <p>If you are the one who configure FreeMarker, be sure
+ that you set a proper
+ <code class="inline-code">TemplateLoader</code>.</p>
+ </li>
+
+ <li>
+ <p>Otherwise see if the template-not-found error's message
+ contains the description of the
+ <code class="inline-code">TemplateLoader</code> used. If it doesn't, you are
+ using an old FreeMarker version, so update it. Getting
+ <code class="inline-code">FileNotFoundException</code> instead of
+ <code class="inline-code">TemplateNotFoundException</code> is also a sign of
+ that, and so you will get less helpful error messages. (If the
+ <code class="inline-code">TemplateLoader</code> in the error message is like
+ <code class="inline-code">foo.SomeTemplateLoader@64f6106c</code> and so
+ doesn't show some relevant parameters, you may should ask the
+ author to define a nicer
+ <code class="inline-code">toString()</code>.)</p>
+ </li>
+
+ <li>
+ <p>A frequent mistake is using a
+ <code class="inline-code">FileTemplateLoader</code> for a Servlet-based web
+ application, instead of a
+ <code class="inline-code">WebappTemplateLoader</code>. It may works in one
+ environment, but not in another, as the Servlet specification
+ makes no promises about your resources being accessible as
+ plain files, not even when the <code class="inline-code">war</code> file is
+ extracted.</p>
+ </li>
+
+ <li>
+ <p>Know that when you are including/importing a template
+ from another template, if you don't start the template name
+ with <code class="inline-code">/</code>, it will be interpreted relatively
+ to the directory of the including template. The error message
+ contains the full (resolved) name, so you should notice this
+ there.</p>
+ </li>
+
+ <li>
+ <p>Check that you aren't using <code class="inline-code">\</code>
+ (backslash) instead of <code class="inline-code">/</code> (slash).
+ (FreeMarker 2.3.22 and later will warn you about that in the
+ error message.)</p>
+ </li>
+
+ <li>
+ <p>As a last resort, turn on debug level logging (in the
+ logging framework that you are using) for the category
+ <code class="inline-code">freemarker.cache</code>, to see more of what's
+ going on.</p>
+ </li>
+ </ul>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_check_version">
+ 7.
+ The documentation writes about feature
+ <em>X</em>, but it seems that FreeMarker doesn't
+ know that, or it behaves in a different way as documented, or a
+ bug that was supposedly fixed is still present.
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>Are you sure that you are using the documentation written
+ for the same version of FreeMarker that you actually use?
+ Especially, note that our online documentation is for the latest
+ stable FreeMarker release. You may use an older release; update
+ it.</p>
+
+ <p>Are you sure that the Java class loader finds the same
+ <code class="inline-code">freemarker.jar</code> that you expect to use? Maybe
+ there is an older version of <code class="inline-code">freemarker.jar</code>
+ around, which shadows the never. To check this, try to print the
+ version number in a template with <code class="inline-code">${.version}</code>.
+ (If it dies with "Unknown built-in variable: version"
+ error message, then you use a very, very old release.).</p>
+
+ <p>If you suspect that the problem is that you have multiple
+ <code class="inline-code">freemarker.jar</code>-s, the typical culprit is that
+ some module has a Maven or Ivy dependency with the old
+ <code class="inline-code">freemarker</code> group ID, as opposed to the more
+ modern <code class="inline-code">org.freemarker</code> group ID. Because of the
+ different group ID-s these aren't seen as conflicting artifacts by
+ Maven or Ivy, and so both version gets in. In this case you have
+ to exclude the <code class="inline-code">freemarker</code> dependency.</p>
+
+ <p>If you think that the documentation or FreeMarker is wrong,
+ please report it using the bug tracker, or the mailing list. Thank
+ you!</p>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_alternative_syntax">
+ 8.
+ The <code class="inline-code"><</code> and <code class="inline-code">></code> of
+ FreeMarker tags confuses my editor or the XML parser. What to
+ do?
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>Starting from FreeMarker 2.3.4 you can use
+ <code class="inline-code">[</code> and <code class="inline-code">]</code> instead of
+ <code class="inline-code"><</code> and <code class="inline-code">></code>. For more
+ details <a href="dgui_misc_alternativesyntax.html">read
+ this...</a></p>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_legal_variable_names">
+ 9.
+ What are the legal variable names?
+
+
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>FreeMarker has no limitations regarding the characters used
+ in variable names, nor regarding the length of the variable names,
+ but for your convenience try to chose variable names that can be
+ used with the simple variable reference expressions (see it <a href="dgui_template_exp.html#dgui_template_exp_var_toplevel">here</a>). If you have
+ to choose a more extreme variable name, that's not a big problem
+ either: <a href="#faq_strange_variable_name">see
+ here</a>.</p>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_strange_variable_name">
+ 10.
+ How can I use variable names (macro name, parameter name)
+ that contain minus sign (<code class="inline-code">-</code>), colon
+ (<code class="inline-code">:</code>), dot (<code class="inline-code">.</code>), or or other
+ special characters?
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>If you have a variable with strange name like
+ "foo-bar", FreeMarker will misunderstand what you
+ mean if you just use it like in <code class="inline-code">${foo-bar}</code>. In
+ this case, it will believe that you want to subtract the value of
+ <code class="inline-code">bar</code> from <code class="inline-code">foo</code>. This FAQ entry
+ explains how to handle situations like this.</p>
+
+ <p>First of all it should be clear that these are just
+ syntactical problems, as otherwise FreeMarker has no limitations
+ regarding the characters used in variable names, nor regarding the
+ length of them.</p>
+
+ <p>If the special character is one of minus sign
+ (<code class="inline-code">-</code>, UCS 0x2D) or dot (<code class="inline-code">.</code>, UCS
+ 0x2E) or colon (<code class="inline-code">:</code>, UCS 0x3A), then all you have
+ to do is putting a backslash (<code class="inline-code">\</code>) before these
+ characters, like in <code class="inline-code">foo\-bar</code> (since FreeMarker
+ 2.3.22). Then FreeMarker will know that you didn't mean the
+ operator with the same symbol. This works everywhere where you
+ specify unquoted identifiers, like for macro and function names,
+ parameter names, and all kind of variable references in general.
+ (Note that these escapes only work in identifiers, not in string
+ literals.)</p>
+
+ <p>When the special character is not one of minus sign, dot, or
+ colon, then it gets trickier. Let's say the problematic variable
+ name is "a+b". Then:</p>
+
+ <ul>
+ <li>
+ <p>If you want to read the variable: If it's a subvariable
+ of something, you can write
+ <code class="inline-code">something["a+b"]</code> (remember,
+ <code class="inline-code">something.x</code> is equivalent to
+ <code class="inline-code">something["x"])</code>. If it's a top-level
+ variable, those are accessible through the special hash
+ variable ,<code class="inline-code">.vars</code>, so you can write
+ <code class="inline-code">.vars["a+b"]</code>. Naturally, this trick works
+ with macro and function invocations too:
+ <code class="inline-code"><@.vars["a+b"]/></code>,
+ <code class="inline-code">.vars["a+b"](1, 2)</code>.</p>
+ </li>
+
+ <li>
+ <p>If you want to create or modify the variable: All
+ directives that let you create or modify a variable (such as
+ <code class="inline-code">assign</code>, <code class="inline-code">local</code>,
+ <code class="inline-code">global</code>, <code class="inline-code">macro</code>,
+ <code class="inline-code">function</code>, etc.) allows the quotation of the
+ destination variable name. For example, <code class="inline-code"><#assign
+ foo = 1></code> is the same as <code class="inline-code"><#assign
+ "foo" = 1></code>. So you can write things like
+ <code class="inline-code"><#assign "a+b" = 1></code> and
+ <code class="inline-code"><#macro "a+b"></code>.</p>
+ </li>
+
+ <li>
+ <p>Unfortunately, you can't use such a variable name (that
+ contains special characters other than <code class="inline-code">-</code>,
+ <code class="inline-code">.</code> and <code class="inline-code">:</code>) as macro
+ parameter name.</p>
+ </li>
+ </ul>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_jsp_custom_tag_syntax">
+ 11.
+ Why do I get "java.lang.IllegalArgumentException: argument
+ type mismatch" when I try to use <em>X</em> JSP
+ custom tag?
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>Fist of all, update FreeMarker, because 2.3.22 and later
+ gives a much more helpful error message, that pretty much answers
+ the question. Anyway, the reason is as follows. On JSP pages you
+ quote all parameter (attribute) values, it does not mater if the
+ type of the parameter is string or boolean or number. But since
+ custom tags are accessible in FTL templates as plain user-defined
+ FTL directives, you have to use the FTL syntax rules inside the
+ custom tags, not the JSP rules. Thus, according to FTL rules, you
+ must not quote boolean and numerical parameter values, or they are
+ interpreted as string values, and this will cause a type mismatch
+ error when FreeMarker tries to pass the value to the custom tag
+ that expects non-string value.</p>
+
+ <p>For example, the <code class="inline-code">flush</code> parameter to
+ Struts Tiles <code class="inline-code">insert</code> tag is boolean. In JSP the
+ correct syntax was:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><tiles:insert page="/layout.jsp" <strong>flush="true"</strong>/>
+<em>...</em></pre></div>
+
+ <p>but in FTL you should write:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><@tiles.insert page="/layout.ftl" <strong>flush=true</strong>/>
+<em>...</em></pre></div>
+
+ <p>Also, for similar reasons, this is wrong:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><tiles:insert page="/layout.jsp" <strong>flush="${needFlushing}"</strong>/>
+<em>...</em></pre></div>
+
+ <p>and you should write:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><tiles:insert page="/layout.jsp" <strong>flush=needFlushing</strong>/>
+<em>...</em></pre></div>
+
+ <p>(Not <code class="inline-code">flush=${needFlushing}</code>!)</p>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_servlet_include">
+ 12.
+ How to include other resources in a way as
+ <code class="inline-code">jsp:include</code> does it?
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>Not with <code class="inline-code"><#include ...></code>, as that
+ just includes another FreeMarker template without involving the
+ Servlet container.</p>
+
+ <p>Since the inclusion method you look for is Servlet-related,
+ and pure FreeMarker is unaware of Servlets or even HTTP, it's the
+ Web Application Framework that decides if you can do this and if
+ so how. For example, in Struts 2 you can do this like this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><@s.include value="/WEB-INF/just-an-example.jspf" /></pre></div>
+
+ <p>If the FreeMarker support of the Web Application Framework
+ is based on
+ <code class="inline-code">freemarker.ext.servlet.FreemarkerServlet</code>, then
+ you can also do this (since FreeMarker 2.3.15):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><@include_page path="/WEB-INF/just-an-example.jspf" /></pre></div>
+
+ <p>but if the Web Application Framework provides its own
+ solution, then you may prefer that, after all it may does
+ something special.</p>
+
+ <p>For more information about <code class="inline-code">include_page</code>
+ <a href="pgui_misc_servlet.html#pgui_misc_servlet_include">read
+ this...</a></p>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_parameter_unwrapping">
+ 13.
+ How can I get the parameters to my
+ plain-Java-method/<code class="inline-code">TemplateMethodModelEx</code>/<code class="inline-code">TemplateTransformModel</code>/<code class="inline-code">TemplateDirectiveModel</code>
+ implementation as plain
+ <code class="inline-code">java.lang.*</code>/<code class="inline-code">java.util.*</code>
+ objects?
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>Unfortunately, there is no simple general-purpose solution
+ for this problem. The problem is that FreeMarker object wrapping
+ is very flexible, which is good when you access variables from
+ templates, but makes unwrapping on the Java side a tricky
+ question. For example, it is possible to wrap a
+ non-<code class="inline-code">java.util.Map</code> object as
+ <code class="inline-code">TemplateHashModel</code> (FTL hash variable). But
+ then, it can't be unwrapped to <code class="inline-code">java.util.Map</code>,
+ since there is no wrapped <code class="inline-code">java.util.Map</code> around
+ at all.</p>
+
+ <p>So what to do then? Basically there are two cases:</p>
+
+ <ul>
+ <li>
+ <p>Directives and methods that are written for presentation
+ purposes (like kind of "tools" for helping
+ FreeMarker templates) should declare their arguments as
+ <code class="inline-code">TemplateModel</code>-s and the more specific sub
+ interfaces of that. After all, the object wrapping is about
+ transforming the data-model to something that serves the
+ purpose of the presentation layer, and these methods are part
+ of the presentation layer. If you still need a plain Java type
+ there, you may turn to the
+ <code class="inline-code">ObjectWrapperAndUnwrapper</code> interface of the
+ current <code class="inline-code">ObjectWrapper</code> (can be get with
+ <code class="inline-code">Environment.getObjectWrapper()</code>).</p>
+ </li>
+
+ <li>
+ <p>Methods that are not for presentation related tasks (but
+ for business logic and like) should be implemented as plain
+ Java methods, and should not use any FreeMarker specific
+ classes at all, since according the MVC paradigm they must be
+ independent of the presentation technology (FreeMarker). If
+ such a method is called from a template, then it is the
+ responsibility of the <a href="pgui_datamodel_objectWrapper.html">object wrapper</a>
+ to ensure the conversion of the arguments to the proper type.
+ If you use the <a href="pgui_datamodel_objectWrapper.html#pgui_datamodel_defaultObjectWrapper"><code>DefaultObjectWrapper</code></a>
+ or the <a href="pgui_misc_beanwrapper.html"><code>BeansWrapper</code></a>
+ then this will happen automatically. For
+ <code class="inline-code">DefaultObjectWrapper</code>, this mechanism works
+ much better, if you <a href="pgui_datamodel_objectWrapper.html#topic.defaultObjectWrapperIcI">set its
+ <code>incompatibleImprovements</code> to
+ 2.3.22</a>.</p>
+ </li>
+ </ul>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_nonstring_keys">
+ 14.
+ Why I can't use non-string key in the
+ <code class="inline-code">myMap[myKey]</code> expression? And what to do
+ now?
+
+
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>The "hash" type of the FreeMarker Template
+ Language (FTL) is not the same as Java's <code class="inline-code">Map</code>.
+ FTL's hash is an associative array too, but it uses string keys
+ exclusively. This is because it was introduced for sub variables
+ (as <code class="inline-code">password</code> in
+ <code class="inline-code">user.password</code>, which is the same as
+ <code class="inline-code">user["password"]</code>), and variable names are
+ strings.</p>
+
+ <p>If you only need to list the key-value pairs of a
+ <code class="inline-code">Map</code>, you can just write something like
+ <code class="inline-code"><#list myMap as k, v>${k}:
+ ${v}</#list></code> (see more about <a href="ref_directive_list.html#ref.directive.list">the <code>list directive</code>
+ here</a>). This enumerates the <code class="inline-code">Map</code> entries,
+ and supports non-string keys. This requires FreeMarker 2.3.25 or
+ later. (If for some reason you can't upgrade to 2.3.25, you can
+ use the Java API of <code class="inline-code">Map</code> instead, like
+ <code class="inline-code"><#list myMap?api.entrySet() as kvp>${kvp.key}:
+ ${kvp.value}</#list></code>.)</p>
+
+ <p>If you need to do more than listing, you will have to turn
+ to the Java API of the <code class="inline-code">Map</code>. You can do it like
+ this: <code class="inline-code">myMap?api.get(nonStringKey)</code>. However, for
+ <code class="inline-code">?api</code> to be enabled, you may need to configure
+ FreeMarker a bit (<a href="ref_builtins_expert.html#ref_buitin_api_and_has_api">see
+ more here</a>).</p>
+
+ <p>Note that as Java's <code class="inline-code">Map</code> is particular
+ about the exact class of the key, at least for numerical keys
+ calculated inside the templates you will have to cast them to the
+ proper Java type, otherwise the item will not be found. For
+ example if you use <code class="inline-code">Integer</code> keys in a Map, then
+ you should write <code class="inline-code">${myMap.get(numKey?int)}</code>. This
+ is because of FTL's deliberately simplified type system has only a
+ single numerical type, while Java distinguishes a lot of numerical
+ types. Note that the casting is not needed when the key value
+ comes directly from the data-model (i.e., you didn't modified its
+ value with arithmetical calculations in the template), including
+ the case when it's the return value of a method, and it was of the
+ proper class before wrapping, because then the result of the
+ unwrapping will be of the original type.</p>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_simple_map">
+ 15.
+ When I list the contents of a map (a hash) with
+ <code class="inline-code">?keys</code>/<code class="inline-code">?values</code>, I get the
+ <code class="inline-code">java.util.Map</code> methods mixed with the real map
+ entries. Of course, I only want to get the map entries.
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>Certainly you are using pure <code class="inline-code">BeansWrapper</code>
+ as your object wrapper (instead of the default,
+ <code class="inline-code">DefaultObjectWrapper</code>), or a custom subclass of
+ it, and the <code class="inline-code">simpleMapWrapper</code> property of that
+ is left to <code class="inline-code">false</code>. Unfortunately, that's the
+ default of <code class="inline-code">BeansWrapper</code> (for backward
+ compatibility), so you have to explicitly set it to
+ <code class="inline-code">true</code> where you instantiate it. Also, at least
+ since 2.3.22, applications should just use
+ <code class="inline-code">DefaultObjectWrapper</code> (with <a href="pgui_datamodel_objectWrapper.html#topic.defaultObjectWrapperIcI">its
+ <code>incompatibleImprovements</code> set to at least
+ 2.3.22</a> - that's especially important if you are switching
+ from pure <code class="inline-code">BeansWrapper</code>), which never had this
+ problem.</p>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_modify_seq_and_map">
+ 16.
+ How can I modify sequences (lists) and hashes (maps) in
+ FreeMarker templates?
+
+
+
+
+
+
+
+
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>First of all, you may don't want to modify the
+ sequence/hash, just concatenate (add) two or more of them, which
+ results in a new sequence/hash, rather than modifying an existing
+ one. In this case use the <a href="dgui_template_exp.html#dgui_template_exp_sequenceop_cat">sequence
+ concatenation</a> and <a href="dgui_template_exp.html#dgui_template_exp_hashop_cat">hash concatenation
+ operators</a>. Also, you may use the <a href="dgui_template_exp.html#dgui_template_exp_seqenceop_slice">subsequence
+ operator</a> instead of removing sequence items. However, be
+ aware of the performance implications: these operations are fast,
+ but the hashes/sequences that are the result of many subsequent
+ applications of these operations (i.e., when you use the result of
+ the operation as the input of yet another operation, and so on)
+ will be slow to read.</p>
+
+ <p>Now if you still want to modify sequences/hashes, then read
+ on...</p>
+
+ <p>The FreeMarkes Template Language doesn't support the
+ modification of sequences/hashes. It's for displaying already
+ calculated things, not for calculating data. Keep templates
+ simple. But don't give it up, you will see some advices and tricks
+ bellow.</p>
+
+ <p>The best is if you can divide the work between the
+ data-model builder program and the template so that the template
+ doesn't need to modify sequences/hashes. Maybe if you rethink your
+ data-model, you will realize this is possible. But, seldom there
+ are cases where you need to modify sequences/hashes for some
+ complex but purely presentation related algorithms. It seldom
+ happens, so think twice whether that calculation (or parts of it)
+ rather belongs to the data-model domain than to the presentation
+ domain. Let's assume you are sure it belongs to the presentation
+ domain. For example, you want to display a keyword index on some
+ very smart way, whose algorithm need you to create and write some
+ sequence variables. Then you should do something like this (ugly
+ situations has ugly solutions...):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign caculatedResults =
+ 'com.example.foo.SmartKeywordIndexHelper'?new().calculate(keywords)>
+<#-- some simple algorithms comes here, like: -->
+<ul>
+ <#list caculatedResults as kw>
+ <li><a href="${kw.link}">${kw.word}</a>
+ </#list>
+</ul></pre></div>
+
+ <p>That is, you move out the complex part of the presentation
+ task from the template into Java code. Note that it doesn't affect
+ the data-model, so the presentation is still kept separated from
+ other the other application logic. Of course the drawback is that
+ for this the template author will need the help of a Java
+ programmer, but for complex algorithms that's probably needed
+ anyway.</p>
+
+ <p>Now, if you still say you need to modify sequences/hashes
+ directly with the FreeMarker template, here are some solutions,
+ but please read the warning after them:</p>
+
+ <ul>
+ <li>
+ <p>You can access the Java API of a
+ <code class="inline-code">java.util.Map</code> with the help of the
+ <code class="inline-code">api</code> built-in, like
+ <code class="inline-code">myMap?api.put(11, "eleven")</code>. You will need
+ to get a <code class="inline-code">Map</code> from somewhere though (an FTL
+ hash literal like <code class="inline-code">{}</code> won't suffice, as it's
+ read only and doesn't support <code class="inline-code">api</code> either).
+ For example, you could expose a Java method or
+ <code class="inline-code">TemplateMethodModelEx</code> to the template that
+ returns a <code class="inline-code">new LinkeHashMap()</code>, so you can do
+ <code class="inline-code"><#assign myMap =
+ utils.newLinkedHashMap()></code>.</p>
+ </li>
+
+ <li>
+ <p>You can write a <code class="inline-code">TemplateMethodModelEx</code>
+ and <code class="inline-code">TemplateDirectiveModel</code> implementation
+ that can modify certain types of sequences/hashes. Just
+ certain types, because
+ <code class="inline-code">TemplateSequenceModel</code> and
+ <code class="inline-code">TemplateHashModel</code> doesn't have methods for
+ modification, so you will need the sequence or hash to
+ implement some additional methods. An example of this solution
+ can be seen in FMPP. It allows you to do things like this
+ (<code class="inline-code">pp</code> stores the services provided by FMPP
+ for templates):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign a = pp.newWritableSequence()>
+<@pp.add seq=a value="red" /></pre></div>
+
+ <p>The <code class="inline-code">pp.add</code> directive works only with
+ sequences that were created with
+ <code class="inline-code">pp.newWritableSequence()</code>. So for example
+ the template author can't modify a sequence that comes from
+ the data-model with this.</p>
+ </li>
+
+ <li>
+ <p>A sequence can have some methods/directives if you use a
+ customized wrapper (so you can write something like
+ <code class="inline-code"><@myList.append foo /></code>).</p>
+ </li>
+ </ul>
+
+ <p>But beware, these solutions have a problem: The <a href="dgui_template_exp.html#dgui_template_exp_sequenceop_cat">sequence
+ concatenation</a>, <a href="dgui_template_exp.html#dgui_template_exp_seqenceop_slice">sequence slice</a>
+ operator (like <code class="inline-code">seq[5..10]</code>) and
+ <code class="inline-code">?reverse</code> do not copy the original sequence,
+ just wraps it (for efficiency), so the resulting sequence will
+ change if the original sequence is changed later (an abnormal
+ aliasing effect). The same problem exists with the result of <a href="dgui_template_exp.html#dgui_template_exp_hashop_cat">hash concatenation</a>;
+ it just wraps the two hashes, so the resulting hash will magically
+ change if you modify the hashes you have added earlier. As a
+ work-around, after you did the above problematic operations,
+ either be sure you will not modify the objects that were used as
+ input, or create a copy of the result with a method provided by
+ the solution described in above two points (e.g. in FMPP you could
+ do <code class="inline-code"><#assign b =
+ pp.newWritableSequence(a[5..10])></code> and
+ <code class="inline-code"><#assign c = pp.newWritableHash(hashA +
+ hashB)></code>). Of course this is easy to miss... so again,
+ rather try to build the data-model so you will not need to modify
+ collections, or use a presentation task helper class as was shown
+ earlier.</p>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_null">
+ 17.
+ What about <code class="inline-code">null</code> and the FreeMarker
+ template language?
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>The FreeMarker template language doesn't know the Java
+ language <code class="inline-code">null</code> at all. It doesn't have
+ <code class="inline-code">null</code> keyword, and it can't test if something is
+ <code class="inline-code">null</code> or not. When it technically faces with a
+ <code class="inline-code">null</code>, it treats it exactly as a missing
+ variable. For example, both if <code class="inline-code">x</code> is
+ <code class="inline-code">null</code> in the data-model and if it's not present
+ at all, <code class="inline-code">${x!'missing'}</code> will print
+ "missing", you can't tell the difference. Also, if
+ for example you want to test if a Java method has returned
+ <code class="inline-code">null</code>, just write something like
+ <code class="inline-code"><#if foo.bar()??></code>.</p>
+
+ <p>You may interested in the rationale behind this. From the
+ viewpoint of the presentation layer a <code class="inline-code">null</code> and
+ non-existent thing is almost always the same. The difference
+ between this two is usually just a technical detail, which is
+ rather the result of implementation details than of the
+ application logic. That you can't compare something to
+ <code class="inline-code">null</code> (unlike in Java); it doesn't make sense to
+ compare something with <code class="inline-code">null</code> in a template,
+ since the template language doesn't do identity comparison (like
+ the Java <code class="inline-code">==</code> operator when you compare two
+ objects) but the more common sense value comparison (like Java's
+ <code class="inline-code">Object.equals(Object)</code>; that doesn't work with
+ <code class="inline-code">null</code> either). And how could FreeMarker tell if
+ something concrete equals with something that is missing and thus
+ unknown? Or if two missing (unknown) things are equal? Of course
+ these questions can't be answered.</p>
+
+ <p>There is at least one problem with this
+ <code class="inline-code">null</code>-unaware approach. When you call a Java
+ method from a template, you may want to pass a
+ <code class="inline-code">null</code> value as argument (since the method was
+ designed to be used in Java language, where the concept of
+ <code class="inline-code">null</code> is known). In this case you can exploit a
+ bug of FreeMarker (that we will not fix until we provide a correct
+ solution for passing <code class="inline-code">null</code> values to a method):
+ if you specify a missing variable as the argument, then it will
+ not cause an error, but a <code class="inline-code">null</code> will be passed
+ to the method instead. Like <code class="inline-code">foo.bar(nullArg)</code>
+ will call the <code class="inline-code">bar</code> method with
+ <code class="inline-code">null</code> as argument, assuming that there is no
+ variable exists with "nullArg" name.</p>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_capture">
+ 18.
+ How can I use the output of a directive (macro) in
+ expressions (as a parameter to another directive)?
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>Capture the output into a variable with the
+ <code class="inline-code">assign</code> or <code class="inline-code">local</code> directive.
+ For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign capturedOutput><@outputSomething /></#assign>
+<@otherDirective someParam=capturedOutput /></pre></div>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_questionmark">
+ 19.
+ Why do I have "?"-s in the output instead of
+ character <em>X</em>?
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>This is because the character that you want to print can't
+ be represented with the <a href="gloss.html#gloss.charset">charset</a> (encoding) used for the
+ output stream, so the Java platform (not FreeMarker) substitutes
+ the problematic character with question mark. In general you
+ should use the same charset for the output as for the template
+ (use the <code class="inline-code">getEncoding()</code> method of the template
+ object), or which is even safer, you should always use UTF-8
+ charset for the output. The charset used for the output stream is
+ not decided by FreeMarker, but by you, when you create the
+ <code class="inline-code">Writer</code> that you pass to the
+ <code class="inline-code">process</code> method of the template.</p>
+
+ <p>Example: Here I use UTF-8 charset in a servlet:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">...
+resp.setContentType("text/html; charset=utf-8");
+Writer out = resp.getWriter();
+...
+t.process(root, out);
+...</pre></div>
+
+ <p>Note that the question marks (or other substitution
+ characters) may be produced outside FreeMarker, in which case the
+ above obviously will not help. For example a bad/missconfigured
+ database connection or JDBC driver may bring the text already with
+ substitution characters in it. HTML forms are another potential
+ source of encoding problems. It's a good idea to print the
+ numerical code of the characters of the string on various places,
+ to see where the problem occurs first.</p>
+
+ <p>You can read more about charsets and FreeMarker <a href="pgui_misc_charset.html">here...</a></p>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_retrieve_calculated_values">
+ 20.
+ How to retrieve values calculated in templates after
+ template execution done?
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>First of all, be sure your application is designed well:
+ templates should display data, and almost never calculate data. If
+ you are still sure you want to do it, read on...</p>
+
+ <p>When you use <code class="inline-code"><#assign x = "foo"></code>,
+ then you do not actually modify the data-model (since that is
+ read-only, see: <a href="pgui_misc_multithreading.html">Programmer's Guide/Miscellaneous/Multithreading</a>), but
+ create the <code class="inline-code">x</code> variable in the runtime <a href="gloss.html#gloss.environment">environment</a> of the processing
+ (see <a href="pgui_misc_var.html">Programmer's Guide/Miscellaneous/Variables, scopes</a>). The problem is that this
+ runtime environment will be discarded when
+ <code class="inline-code">Template.process</code> returns, as it was created for
+ a single <code class="inline-code">Template.process</code> call:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">// internally an Environment will be created, and then discarded
+myTemplate.process(root, out);</pre></div>
+
+ <p>To prevent this, you can do the below, which is equivalent
+ with the above, except that you have chance to return the
+ variables created in the template:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">Environment env = myTemplate.createProcessingEnvironment(root, out);
+env.process(); // process the template
+TemplateModel x = env.getVariable("x"); // get variable x</pre></div>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_assign_to_dynamic_variable_name">
+ 21.
+ How to assign to (or <code class="inline-code">#import</code> into) a
+ dynamically constructed variable name (like to name that's stored
+ in another variable)?
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>If you really can't avoid doing that (you should, as it's
+ confusing), you can solve that with constructing the appropriate
+ FTL source code dynamically in a string, then using the <a href="ref_builtins_expert.html#ref_builtin_interpret"><code>interpret</code>
+ built-in</a>. For example, if you want to assign to the
+ variable whose name is stored in the <code class="inline-code">varName</code>
+ variable:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><@"<#assign ${varName}='example'>"?interpret /></pre></div>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_template_uploading_security">
+ 22.
+
+
+ Can I allow users to upload templates and what are the
+ security implications?
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>In general you shouldn't allow that, unless those users are
+ system administrators or other trusted personnel. Consider
+ templates as part of the source code just like
+ <code class="inline-code">*.java</code> files are. If you still want to allow
+ users to upload templates, here are what to consider:</p>
+
+ <ul>
+ <li>
+ <p>Denial-of-Service (DoS) attacks: It's trivial to create
+ templates that run practically forever (with a loop), or
+ exhaust memory (by concatenating to a string in a loop).
+ FreeMarker can't enforce CPU or memory usage limits, so this
+ is something that has no solution on the
+ FreeMarker-level.</p>
+ </li>
+
+ <li>
+ <p>Data-model and wrapping
+ (<code class="inline-code">Configuration.setObjectWrapper</code>): The
+ data-model might gives access to the public Java API of some
+ objects that you have put into the data-model. By default, for
+ objects that aren't instances of a the bunch of specially
+ handler types (<code class="inline-code">String</code>,
+ <code class="inline-code">Number</code>, <code class="inline-code">Boolean</code>,
+ <code class="inline-code">Date</code>, <code class="inline-code">Map</code>,
+ <code class="inline-code">List</code>, array, and a few others), their
+ public Java API will be exposed. To avoid that, you have to
+ construct the data-model so that it only exposes the things
+ that are really necessary for the template. For that, you may
+ want to use <code class="inline-code">SimpleObjectWrapper</code> (via
+ <code class="inline-code">Configuration.setObjectWrapper</code> or the
+ <code class="inline-code">object_wrapper</code> setting) and then create the
+ data-model purely from <code class="inline-code">Map</code>-s,
+ <code class="inline-code">List</code>-s, <code class="inline-code">Array</code>-s,
+ <code class="inline-code">String</code>-s, <code class="inline-code">Number</code>-s,
+ <code class="inline-code">Boolean</code>-s and <code class="inline-code">Date</code>-s.
+ Or, you can implement your own extremely restrictive
+ <code class="inline-code">ObjectWrapper</code>, which for example could
+ expose your POJO-s safely.</p>
+ </li>
+
+ <li>
+ <p>Template-loader
+ (<code class="inline-code">Configuration.setTemplateLoader</code>):
+ Templates may load other templates by name (by path), like
+ <code class="inline-code"><#include "../secret.txt"></code>. To avoid
+ loading sensitive data, you have to use a
+ <code class="inline-code">TemplateLoader</code> that double-checks that the
+ file to load is something that should be exposed. FreeMarker
+ tries to prevent the loading of files outside the template
+ root directory regardless of template loader, but depending on
+ the underlying storage mechanism, exploits may exist that
+ FreeMarker can't consider (like, just as an example,
+ <code class="inline-code">~</code> jumps to the current user's home
+ directory). Note that
+ <code class="inline-code">freemarker.cache.FileTemplateLoader</code> checks
+ the canonical paths, so that's maybe a good candidate for this
+ task, yet, adding a file extension check (file must be
+ <code class="inline-code">*.ftl</code>) is maybe a good idea.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">new</code> built-in
+ (<code class="inline-code">Configuration.setNewBuiltinClassResolver</code>,
+ <code class="inline-code">Environment.setNewBuiltinClassResolver</code>):
+ It's used in templates like
+ <code class="inline-code">"com.example.SomeClass"?new()</code>, and is
+ important for FTL libraries that are partially implemented in
+ Java, but shouldn't be needed in normal templates. While
+ <code class="inline-code">new</code> will not instantiate classes that are
+ not <code class="inline-code">TemplateModel</code>-s, FreeMarker contains a
+ <code class="inline-code">TemplateModel</code> class that can be used to
+ create arbitrary Java objects. Other "dangerous"
+ <code class="inline-code">TemplateModel</code>-s can exist in you
+ class-path. Plus, even if a class doesn't implement
+ <code class="inline-code">TemplateModel</code>, its static initialization
+ will be run. To avoid these, you should use a
+ <code class="inline-code">TemplateClassResolver</code> that restricts the
+ accessible classes (possibly based on which template asks for
+ them), such as
+ <code class="inline-code">TemplateClassResolver.ALLOWS_NOTHING_RESOLVER</code>.</p>
+ </li>
+ </ul>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_implement_function_or_macro_in_java">
+ 23.
+ How to implement a function or macro in Java Language
+ instead of in the template language?
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>It's not possible (yet), but something very similar is
+ possible if you write a class that implements
+ <code class="inline-code">freemarker.template.TemplateMethodModelEx</code> or
+ <code class="inline-code">freemarker.template.TemplateDirectiveModel</code>
+ respectively, and then where you were write <code class="inline-code"><#function
+ my
+ <em class="code-color">...</em>><em class="code-color">...</em></#function></code>
+ or <code class="inline-code"><#macro my
+ <em class="code-color">...</em>><em class="code-color">...</em></#macro></code>
+ you write <code class="inline-code"><#assign my = "your.package.YourClass
+ "?</code><a href="ref_builtins_expert.html#ref_builtin_new"><code>new</code></a><code class="inline-code">()></code>
+ instead. Note that using the <code class="inline-code">assign</code> directive
+ for this works because functions (and methods) and macros are just
+ plain variables in FreeMarker. (For the same reason you could also
+ put <code class="inline-code">TemplateMethodModelEx</code> or
+ <code class="inline-code">TemplateDirectiveModel</code> instances into the
+ data-model before calling the template, or into the shared
+ variable map (see:
+ <code class="inline-code">freemarker.template.Configuration.setSharedVariable(String,
+ TemplateModel)</code>) when you initialize the
+ application.)</p>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_nice_error_page">
+ 24.
+ <a name="misc.faq.niceErrorPage"></a> In my Servlet
+ based application, how do I show a nice error page instead of a
+ stack trace when error occurs during template processing?
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>First of all, use <code class="inline-code">RETHROW_HANDLER</code> instead
+ of the default <code class="inline-code">DEBUG_HANDLER</code> (for more
+ information about template exception handlers <a href="pgui_config_errorhandling.html">read this...</a>). Now
+ FreeMarker will not print anything to the output when an error
+ occurs, so the control is in your hands. After you have caught the
+ exception of
+ <code class="inline-code">Template.process(<em class="code-color">...</em>)</code>
+ basically you can follow two strategies:</p>
+
+ <ul>
+ <li>
+ <p>Call <code class="inline-code">httpResp.isCommitted()</code>, and if
+ that returns <code class="inline-code">false</code>, then you call
+ <code class="inline-code">httpResp.reset()</code> and print a "nice
+ error page" for the visitor. If the return value was
+ <code class="inline-code">true</code>, then try to finish the page be
+ printing something that makes clear for the visitor that the
+ page generation was abruptly interrupted because of an error
+ on the Web server. You may have to print a lot of redundant
+ HTML end-tags and set colors and font size to ensure that the
+ error message will be actually readable in the browser window
+ (check the source code of the
+ <code class="inline-code">HTML_DEBUG_HANDLER</code> in
+ <code class="inline-code">src\freemarker\template\TemplateException.java</code>
+ to see an example).</p>
+ </li>
+
+ <li>
+ <p>Use full page buffering. This means that the
+ <code class="inline-code">Writer</code> doesn't send the output to the
+ client progressively, but buffers the whole page in the
+ memory. Since you provide the <code class="inline-code">Writer</code>
+ instance for the
+ <code class="inline-code">Template.process(<em class="code-color">...</em>)</code>
+ method, this is your responsibility, FreeMarker has nothing to
+ do with it. For example, you may use a
+ <code class="inline-code">StringWriter</code>, and if
+ <code class="inline-code">Template.process(<em class="code-color">...</em>)</code>
+ returns by throwing an exception, then ignore the content
+ accumulated by the <code class="inline-code">StringWriter</code>, and send
+ an error page instead, otherwise you print the content of
+ <code class="inline-code">StringWriter</code> to the output. With this
+ method you surely don't have to deal with partially sent
+ pages, but it can have negative performance implications
+ depending on the characteristic of the pages (for example, the
+ user will experience more response delay for a long page that
+ is generated slowly, also the server will consume more RAM).
+ Note that using a <code class="inline-code">StringWriter</code> is surely
+ not the most efficient solution, as it often reallocates its
+ buffer as the accumulated content grows.</p>
+ </li>
+ </ul>
+ </dd>
+
+
+
+
+
+ <dt class="question" id="faq_html_editor_mangles">
+ 25.
+ I'm using a visual HTML editor that mangles template tags.
+ Will you change the template language syntax to accommodate my
+ editor?
+
+ </dt>
+
+
+ <dd class="answer">
+
+ <p>We won't change the standard version, because a lot of
+ templates depend on it.</p>
+
+ <p>Our view is that the editors that break template code are
+ themselves broken. A good editor should ignore, not mangle, what
+ it doesn't understand.</p>
+
+ <p>You maybe interested in that starting from FreeMarker 2.3.4
+ you can use <code class="inline-code">[</code> and <code class="inline-code">]</code> instead
+ of <code class="inline-code"><</code> and <code class="inline-code">></code>. For more
+ details <a href="dgui_misc_alternativesyntax.html">read
+ this...</a></p>
+ </dd>
+
+
+ </dl>
+
+ </div>
+<div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="app.html"><span>Previous</span></a><a class="paging-arrow next" href="app_versions.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" hr
<TRUNCATED>
[23/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_depr_transform.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_depr_transform.html b/builds/2.3.26-nightly/ref_depr_transform.html
new file mode 100644
index 0000000..3e5974c
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_depr_transform.html
@@ -0,0 +1,163 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Transform directive - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Transform directive">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_depr_transform.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_depr_transform.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_deprecated.html"><span itemprop="name">Deprecated FTL constructs</span></a></li><li class=
"step-3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_depr_transform.html"><span itemprop="name">Transform directive</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Deprecated FTL constructs","Transform directive"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_depr_oldmacro.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_depr_oldsyntax.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_depr_transform" itemprop="headline">Transform directive</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_141" data-menu-target="autoid_141">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_142" data-menu-target="autoid_142">Description</a></li></ul> </div><a name="ref.directive.transform"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_141">Synopsis</h2>
+
+
+
+<pre class="metaTemplate">
+<code class="inline-code"><transform <em class="code-color">transVar</em>>
+ <em class="code-color">...</em>
+</transform></code>
+or
+<code class="inline-code"><transform <em class="code-color">transVar</em> <em class="code-color">name1</em>=<em class="code-color">value1</em> <em class="code-color">name2</em>=<em class="code-color">value2</em> <em class="code-color">...</em> <em class="code-color">nameN</em>=<em class="code-color">valueN</em>>
+ <em class="code-color">...</em>
+</transform></code>
+</pre>
+
+
+ <p>Where:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code"><em class="code-color">transVar</em></code>:
+ Expression evaluates to a transform
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">name1</em></code>,
+ <code class="inline-code"><em class="code-color">name2</em></code>, ...
+ <code class="inline-code"><em class="code-color">nameN</em></code>: Name of
+ parameters. Literal value, not expression.
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">value1</em></code>,
+ <code class="inline-code"><em class="code-color">value2</em></code>, ...
+ <code class="inline-code"><em class="code-color">valueN</em></code>:
+ Expressions evaluate to the values of parameters
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_142">Description</h2>
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This directive is still working, but deprecated. You may
+ want to read about <a href="ref_directive_userDefined.html#ref.directive.userDefined">user-defined directive
+ calls</a> to see the replacement.</p>
+ </div>
+
+
+ <p>Captures the output generated inside its body (i.e. between
+ its start-tag and end-tag), and let the given transform modify it
+ before it is written to the final output.</p>
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><p>A very simple HTML file:
+<pre>
+<strong><transform html_escape></strong>
+<html>
+ <body>
+ <p>Hello word!
+ </body>
+</html>
+<strong></transform></strong>
+</pre></pre></div>
+
+ <p>the output will be:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"><p>A very simple HTML file:
+<pre>
+&lt;html&gt;
+ &lt;body&gt;
+ &lt;p&gt;Hello word!
+ &lt;/body&gt;
+&lt;/html&gt;
+</pre></pre></div>
+
+ <p>Some transforms may take parameters. The name and meaning of
+ parameters depends on the transform in question. For example here we
+ give a parameter called "var":</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#-- This transform stores the output in the variable x,
+ rather than sending it to the output -->
+<transform capture_output<strong> var="x"</strong>>
+some test
+</transform></pre></div>
+
+ <p>It is the task of the programmers to put the necessary
+ transforms into the data-model. For the name and usage of accessible
+ transforms ask the programmers. <span class="marked-for-programmers">Initially there is a <a href="pgui_config_sharedvariables.html">shared variable</a> for
+ most transforms in the
+ <code class="inline-code">freemarker.template.utility</code> package. For more
+ information see: <a href="pgui_config_sharedvariables.html">Programmer's Guide/The Configuration/Shared variables</a></span></p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_depr_oldmacro.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_depr_oldsyntax.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_deprecated.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_deprecated.html b/builds/2.3.26-nightly/ref_deprecated.html
new file mode 100644
index 0000000..ff1ec5d
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_deprecated.html
@@ -0,0 +1,54 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-chapter">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Deprecated FTL constructs - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Deprecated FTL constructs">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_deprecated.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_deprecated.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_deprecated.html"><span itemprop="name">Deprecated FTL constructs</span></a></li></ul><div
class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Deprecated FTL constructs"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_reservednames.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_depr_directive.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-chapter" id="ref_deprecated" itemprop="headline">Deprecated FTL constructs</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Section Contents</div>
+<ul><li><a class="page-menu-link" href="ref_depr_directive.html" data-menu-target="ref_depr_directive">List of deprecated directives</a></li><li><a class="page-menu-link" href="ref_depr_builtin.html" data-menu-target="ref_depr_builtin">List of deprecated built-ins</a></li><li><a class="page-menu-link" href="ref_depr_oldmacro.html" data-menu-target="ref_depr_oldmacro">Old-style macro and call directives</a></li><li><a class="page-menu-link" href="ref_depr_transform.html" data-menu-target="ref_depr_transform">Transform directive</a></li><li><a class="page-menu-link" href="ref_depr_oldsyntax.html" data-menu-target="ref_depr_oldsyntax">Old FTL syntax</a></li><li><a class="page-menu-link" href="ref_depr_numerical_interpolation.html" data-menu-target="ref_depr_numerical_interpolation">#{...}: Numerical interpolation</a></li></ul> </div><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_reservednames.html"><span>Previous</span></a><a cl
ass="paging-arrow next" href="ref_depr_directive.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_alphaidx.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_alphaidx.html b/builds/2.3.26-nightly/ref_directive_alphaidx.html
new file mode 100644
index 0000000..7adbeda
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_alphaidx.html
@@ -0,0 +1,228 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Alphabetical index - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Alphabetical index">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_alphaidx.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_alphaidx.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_alphaidx.html"><span itemprop="name">Alphabetical index</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li>#directives</li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","Alphabetical index"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directives.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_assign.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_alphaidx" itemprop="headline">Alphabetical index</h1>
+</div></div> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>As of FreeMarker 2.3.23, you can use camel case instead of
+ all-lower-case for directive names, like <code class="inline-code">noParse</code>
+ instead of <code class="inline-code">noparse</code>. But know that then within the
+ same template, FreeMarker will enforce the usage of camel case for
+ all identifiers that are part of the template language (user defined
+ names are not affected).</p>
+ </div>
+<ul>
+ <li>
+ <a href="ref_directive_assign.html#ref.directive.assign">assign</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_attempt.html#ref.directive.attempt">attempt</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_autoesc.html">autoesc</a>
+ </li>
+
+ <li>
+ break: <a href="ref_directive_switch.html#ref.directive.switch.break">in
+ switch</a>, <a href="ref_directive_list.html#ref.directive.list.break">in
+ list</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_switch.html#ref.directive.case">case</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_compress.html#ref.directive.compress">compress</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_switch.html#ref.directive.default">default</a>
+ </li>
+
+ <li>
+ else: <a href="ref_directive_if.html#ref.directive.else">in if</a>, <a href="ref_directive_list.html#ref.directive.list.else">in list</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_if.html#ref.directive.elseif">elseif</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_escape.html#ref.directive.escape">escape</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_visit.html#ref.directive.fallback">fallback</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_function.html#ref.directive.function">function</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_flush.html#ref.directive.flush">flush</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_ftl.html#ref.directive.ftl">ftl</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_global.html#ref.directive.global">global</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_if.html#ref.directive.if">if</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_import.html#ref.directive.import">import</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_include.html#ref.directive.include">include</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_list.html#ref.directive.items">items</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_list.html#ref.directive.list">list</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_local.html#ref.directive.local">local</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_t.html#ref.directive.lt">lt</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_macro.html#ref.directive.macro">macro</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_macro.html#ref.directive.nested">nested</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_noautoesc.html">noautoesc</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_escape.html#ref.directive.noescape">noescape</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_noparse.html">noparse</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_nt.html#ref.directive.nt">nt</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_outputformat.html">outputformat</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_attempt.html#ref.directive.attempt">recover</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_visit.html#ref.directive.recurse">recurse</a>
+ </li>
+
+ <li>
+ return: <a href="ref_directive_macro.html#ref.directive.macro.return">in
+ macro</a>, <a href="ref_directive_function.html#ref.directive.function.return">in
+ function</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_t.html#ref.directive.rt">rt</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_list.html#ref.directive.sep">sep</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_setting.html#ref.directive.setting">setting</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_stop.html#ref.directive.stop">stop</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_switch.html#ref.directive.switch">switch</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_t.html#ref.directive.t">t</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_userDefined.html#ref.directive.userDefined">User-defined
+ directive (<@...>)</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_visit.html#ref.directive.visit">visit</a>
+ </li>
+ </ul><p>If you don't find a directive here that you have seen in a
+ working template, probably you will find it in: <a href="ref_deprecated.html">Deprecated FTL constructs</a></p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directives.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_assign.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_assign.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_assign.html b/builds/2.3.26-nightly/ref_directive_assign.html
new file mode 100644
index 0000000..c6c3ebf
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_assign.html
@@ -0,0 +1,212 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>assign - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="assign">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_assign.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_assign.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_assign.html"><span itemprop="name">assign</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","assign"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_alphaidx.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_attempt.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_assign" itemprop="headline">assign</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_76" data-menu-target="autoid_76">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_77" data-menu-target="autoid_77">Description</a></li></ul> </div><a name="ref.directive.assign"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_76">Synopsis</h2>
+
+
+
+<pre class="metaTemplate"><code class="inline-code"><#assign <em class="code-color">name1</em>=<em class="code-color">value1</em> <em class="code-color">name2</em>=<em class="code-color">value2</em> <em class="code-color">... nameN</em>=<em class="code-color">valueN</em>></code>
+or
+<code class="inline-code"><#assign <em class="code-color">same as above...</em> in <em class="code-color">namespacehash</em>></code>
+or
+<code class="inline-code"><#assign <em class="code-color">name</em>>
+ <em class="code-color">capture this</em>
+</#assign></code>
+or
+<code class="inline-code"><#assign <em class="code-color">name</em> in <em class="code-color">namespacehash</em>>
+ <em class="code-color">capture this</em>
+</#assign></code></pre>
+
+
+ <p>Where:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code"><em class="code-color">name</em></code>: name
+ of the variable. It is not expression. However, it can be
+ written as a string literal, which is useful if the variable
+ name contains reserved characters, for example
+ <code class="inline-code"><#assign "foo-bar" = 1></code>. Note that this
+ string literal does not expand interpolations (as
+ <code class="inline-code">"${foo}"</code>); if you need to assign to a
+ dynamically constructed name, the you have to use <a href="app_faq.html#faq_assign_to_dynamic_variable_name">this
+ trick</a>.
+ </li>
+
+ <li>
+ <code class="inline-code">=</code>: Assignment operator. It can also be
+ one of the assignment shorthand operators (since FreeMarker
+ 2.3.23): <code class="inline-code">++</code>, <code class="inline-code">--</code>,
+ <code class="inline-code">+=</code>, <code class="inline-code">-=</code>,
+ <code class="inline-code">*=</code>, <code class="inline-code">/=</code> or
+ <code class="inline-code">%=</code>. Like <code class="inline-code"><#assign
+ x++></code> is similar to <code class="inline-code"><#assign x = x +
+ 1></code>, and <code class="inline-code"><#assign x += 2></code>
+ is the same as <code class="inline-code"><#assign x = x + 2></code>.
+ Note that <code class="inline-code">++</code> always means arithmetical
+ addition (an so it will fail on non-numbers), unlike
+ <code class="inline-code">+</code> or <code class="inline-code">+=</code> that are
+ overloaded to do string concatenation and such.
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">value</em></code>: the
+ value to store. Expression.
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">namespacehash</em></code>:
+ a hash that was created for a namespace (by <a href="ref_directive_import.html#ref.directive.import"><code>import</code></a>).
+ Expression.
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_77">Description</h2>
+
+
+ <p>With this you can create a new variable, or replace an
+ existing variable. Note that only top-level variables can be
+ created/replaced (i.e. you can't create/replace
+ <code class="inline-code">some_hash.subvar</code>, but
+ <code class="inline-code">some_hash</code>).</p>
+
+ <p>For more information about variables, read this: <a href="dgui_misc_var.html">Template Author's Guide/Miscellaneous/Defining variables in the template</a></p>
+
+ <p>Example: variable <code class="inline-code">seq</code> will store a
+ sequence:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign seq = ["foo", "bar", "baz"]></pre></div>
+
+ <p>Example: Increments the numerical value stored in variable
+ <code class="inline-code">x</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign x++></pre></div>
+
+ <p>As a convenience feature, you can do more assignments with one
+ <code class="inline-code">assign</code> tag. For example this will do the same as
+ the two previous examples:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign
+ seq = ["foo", "bar", "baz"]
+ x++
+></pre></div>
+
+ <p>If you know what namespaces are: <code class="inline-code">assign</code>
+ directive creates variables in namespaces. Normally it creates the
+ variable in the current namespace (i.e. in the namespace associated
+ with the template where the tag is). However, if you use <code class="inline-code">in
+ <em class="code-color">namespacehash</em></code> then you can
+ create/replace a variable of another <a href="dgui_misc_namespace.html">namespace</a> than the current
+ namespace. For example, here you create/replace variable
+ <code class="inline-code">bgColor</code> of the namespace used for
+ <code class="inline-code">/mylib.ftl</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#import "/mylib.ftl" as my>
+<#assign bgColor="red" in my></pre></div>
+
+ <p>An extreme usage of <code class="inline-code">assign</code> is when it
+ captures the output generated between its start-tag and end-tag.
+ That is, things that are printed between the tags will not be shown
+ on the page, but will be stored in the variable. For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro myMacro>foo</#macro>
+<#assign x>
+ <#list 1..3 as n>
+ ${n} <@myMacro />
+ </#list>
+</#assign>
+Number of words: ${x?word_list?size}
+${x}</pre></div>
+
+ <p>will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">Number of words: 6
+ 1 foo
+ 2 foo
+ 3 foo
+ </pre></div>
+
+ <p>Please note that you should not to use this to insert
+ variables into strings:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign x>Hello ${user}!</#assign> <#-- BAD PRACTICE! --></pre></div>
+
+ <p>You should simply write:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign x="Hello ${user}!"></pre></div>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_alphaidx.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_attempt.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_attempt.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_attempt.html b/builds/2.3.26-nightly/ref_directive_attempt.html
new file mode 100644
index 0000000..625ff61
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_attempt.html
@@ -0,0 +1,206 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>attempt, recover - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="attempt, recover">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_attempt.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_attempt.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_attempt.html"><span itemprop="name">attempt, recover</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","attempt, recover"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_assign.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_autoesc.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_attempt" itemprop="headline">attempt, recover</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_78" data-menu-target="autoid_78">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_79" data-menu-target="autoid_79">Description</a></li></ul> </div><a name="ref.directive.attempt"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_78">Synopsis</h2>
+
+
+
+<pre class="metaTemplate">
+<code class="inline-code"><#attempt>
+ <em class="code-color">attempt block</em>
+<#recover>
+ <em class="code-color">recover block</em>
+</#attempt>
+</code>
+</pre>
+
+
+ <p>Where:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code"><em class="code-color">attempt
+ block</em></code>: Template block with any content.
+ This will be always executed, but if an error occurs during
+ that, all output from this block is rolled back, and the
+ <code class="inline-code"><em class="code-color">recover block</em></code> will
+ be executed.
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">recover
+ block</em></code>: Template block with any content.
+ This will be executed only if there was an error during the
+ execution of the <code class="inline-code"><em class="code-color">attempt
+ block</em></code>. You may print an error messages
+ here and such.
+ </li>
+ </ul>
+
+ <p>The <code class="inline-code"><em class="code-color">recover</em></code> is
+ mandatory. <code class="inline-code">attempt</code>/<code class="inline-code">recover</code> can
+ be nested freely into other <code class="inline-code"><em class="code-color">attempt
+ block</em></code>s or <code class="inline-code"><em class="code-color">recover
+ block</em></code>s.</p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>The format shown here is supported starting from 2.3.3;
+ earlier it was
+ <code class="inline-code"><#attempt><em class="code-color">...</em><#recover><em class="code-color">...</em></#recover></code>,
+ which is still supported for backward compatibility. Furthermore,
+ these directives were introduced with FreeMarker 2.3.1, so they
+ aren't exist in 2.3.</p>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_79">Description</h2>
+
+
+ <p>These directives are used if you want the page successfully
+ outputted even if the outputting of a certain part of the page
+ fails. If an error occurs during the execution of the
+ <code class="inline-code"><em class="code-color">attempt block</em></code>, then
+ the template execution is not aborted, but the
+ <code class="inline-code"><em class="code-color">recover block</em></code> is
+ executed instead of the <code class="inline-code"><em class="code-color">attempt
+ block</em></code>. If no error occurs during the
+ execution of the <code class="inline-code"><em class="code-color">attempt
+ block</em></code>, then the
+ <code class="inline-code"><em class="code-color">recover block</em></code> is
+ ignored. A simple example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">Primary content
+<#attempt>
+ Optional content: ${thisMayFails}
+<#recover>
+ Ops! The optional content is not available.
+</#attempt>
+Primary content continued</pre></div>
+
+ <p>If the <code class="inline-code">thisMayFails</code> variable doesn't exist,
+ then the output is:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">Primary content
+ Ops! The optional content is not available.
+Primary content continued</pre></div>
+
+ <p>If the <code class="inline-code">thisMayFails</code> variable exists and
+ it's value is <code class="inline-code">123</code>, then the output is:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">Primary content
+ Optional content: 123
+Primary content continued</pre></div>
+
+ <p>The <code class="inline-code"><em class="code-color">attempt
+ block</em></code> has an all-or-none semantic: either
+ the entire content of the <code class="inline-code"><em class="code-color">attempt
+ block</em></code> is output (when there was no error),
+ or no output at all results from the execution of the
+ <code class="inline-code"><em class="code-color">attempt block</em></code> (when
+ there was an error). For example, above, the failure happens after
+ "Optional content: " was printed, still it is not there
+ in the output before the "Ops!". (<span class="marked-for-programmers">This is implemented with the aggressive
+ buffering of the output inside the <code class="inline-code"><em class="code-color">attempt
+ block</em></code>. Not even the <code class="inline-code">flush</code>
+ directive will send the output to the client.</span>)</p>
+
+ <p>To prevent misunderstandings coming from the above example:
+ <code class="inline-code">attempt</code>/<code class="inline-code">recover</code> is not (only)
+ for handling undefined variables (for that use <a href="dgui_template_exp.html#dgui_template_exp_missing">missing value handler
+ operators</a>). It can handle all kind of errors that occurs when
+ the block is executed (i.e. not syntactical errors, which are
+ detected earlier). And it's meant to enclose bigger template
+ fragments, where error can occur at various points. For example, you
+ have a part in your template that deals with printing
+ advertisements, but that's not the primary content of the page, so
+ you don't want your whole page be down just because some error
+ occurs with the printing of the advertisements (say, because of a
+ temporal database server faliure). So you put the whole
+ advertisement printing into an <code class="inline-code"><em class="code-color">attempt
+ block</em></code>.</p>
+
+ <p>In some environments programmers configure FreeMarker so that
+ it doesn't abort template execution for certain errors, but
+ continues execution, possibly after printing some error indicator to
+ the output (<span class="marked-for-programmers">see more <a href="pgui_config_errorhandling.html">here...</a></span>). The
+ <code class="inline-code">attempt</code> directive doesn't consider such
+ suppressed errors as errors.</p>
+
+ <p>Inside a <code class="inline-code"><em class="code-color">recover
+ block</em></code> the error message of the error is
+ available with the <code class="inline-code">error</code> <a href="ref_specvar.html">special variable</a>. Don't forget that
+ references to special variable are started with dot (for example:
+ <code class="inline-code">${.error}</code>).</p>
+
+ <p><span class="marked-for-programmers">Errors occurring during template
+ execution are always <a href="pgui_misc_logging.html">logged</a>, even if they occur inside
+ an <code class="inline-code"><em class="code-color">attempt
+ block</em></code>.</span></p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_assign.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_autoesc.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_autoesc.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_autoesc.html b/builds/2.3.26-nightly/ref_directive_autoesc.html
new file mode 100644
index 0000000..6168252
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_autoesc.html
@@ -0,0 +1,125 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>autoesc - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="autoesc">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_autoesc.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_autoesc.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_autoesc.html"><span itemprop="name">autoesc</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","autoesc"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_attempt.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_compress.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_autoesc" itemprop="headline">autoesc</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_80" data-menu-target="autoid_80">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_81" data-menu-target="autoid_81">Description</a></li></ul> </div><a name="ref.directive.autoesc"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_80">Synopsis</h2>
+
+
+
+<pre class="metaTemplate"><code class="inline-code"><#autoesc>
+ <em class="code-color">...</em>
+</#autoesc></code>
+</pre>
+
+
+ <p>Camel case name variant: <code class="inline-code">autoEsc</code></p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_81">Description</h2>
+
+
+ <p>Turns on <a href="dgui_misc_autoescaping.html">auto-escaping</a> in the nested
+ section. Auto-escaping is usually enabled by default if the current
+ <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_outputformat">output
+ format</a> has auto-escaping by default, so you rarely need this.
+ Note that to escape just a single
+ <code class="inline-code">${<em class="code-color">expression</em>}</code> where
+ auto-escaping is disabled you should use
+ <code class="inline-code">${<em class="code-color">expression</em>?esc}</code>
+ instead.</p>
+
+ <p>This directive only has effect on the section that is
+ literally (as in the text editor) inside the nested bock, not on the
+ parts that are called/included from there.</p>
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#ftl output_format="XML" auto_esc=false>
+${"&"}
+<#autoesc>
+ ${"&"}
+ ...
+ ${"&"}
+</#autoesc>
+${"&"}</pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">&
+ &amp;
+ ...
+ &amp;
+&</pre></div>
+
+ <p><code class="inline-code">autoesc</code> can't be used where the current
+ <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_outputformat">output
+ format</a> is a <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_nonmarkupof">non-markup output
+ format</a> (and hence can't do escaping). Doing so is a <a href="gloss.html#gloss.parseTimeError">parse-time error</a>.</p>
+
+ <p><code class="inline-code">autoesc</code> can also be used nested into <a href="ref_directive_noautoesc.html"><code>noautoesc</code>
+ directive</a> to re-enable auto-escaping.</p>
+
+ <p><code class="inline-code">autoesc</code> can be used on places where
+ auto-escaping is already enabled, such as even inside another
+ <code class="inline-code">autoesc</code> block. Doing so is redundant but
+ allowed.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_attempt.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_compress.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[16/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/toc.js
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/toc.js b/builds/2.3.26-nightly/toc.js
new file mode 100644
index 0000000..505fb87
--- /dev/null
+++ b/builds/2.3.26-nightly/toc.js
@@ -0,0 +1,4945 @@
+
+var toc = {
+"title": "Apache FreeMarker Manual",
+"url": "index.html",
+"isFile": true,
+"children": [
+{
+"title": "Template Author's Guide",
+"url": "dgui.html",
+"isFile": true,
+"children": [
+{
+"title": "Getting Started",
+"url": "dgui_quickstart.html",
+"isFile": true,
+"children": [
+{
+"title": "Template + data-model = output",
+"url": "dgui_quickstart_basics.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "The data-model at a glance",
+"url": "dgui_quickstart_datamodel.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "The template at a glance",
+"url": "dgui_quickstart_template.html",
+"isFile": true,
+"children": [
+{
+"title": "Some basic directives",
+"url": "dgui_quickstart_template.html#autoid_2",
+"isFile": false,
+"children": [
+{
+"title": "The if directive",
+"url": "dgui_quickstart_template.html#autoid_3",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "The list directive",
+"url": "dgui_quickstart_template.html#autoid_4",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "The include directive",
+"url": "dgui_quickstart_template.html#autoid_5",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Using directives together",
+"url": "dgui_quickstart_template.html#autoid_6",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Using built-ins",
+"url": "dgui_quickstart_template.html#autoid_7",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Dealing with missing variables",
+"url": "dgui_quickstart_template.html#autoid_8",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Escaping for HTML, XML and other markup",
+"url": "dgui_quickstart_template.html#dgui_quickstart_template_autoescaping",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+]
+}
+,
+{
+"title": "Values, Types",
+"url": "dgui_datamodel.html",
+"isFile": true,
+"children": [
+{
+"title": "Basics",
+"url": "dgui_datamodel_basics.html",
+"isFile": true,
+"children": [
+{
+"title": "What is a value?",
+"url": "dgui_datamodel_basics.html#topic.value",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "What is type?",
+"url": "dgui_datamodel_basics.html#autoid_9",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "The data-model is a hash",
+"url": "dgui_datamodel_basics.html#autoid_10",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "The types",
+"url": "dgui_datamodel_types.html",
+"isFile": true,
+"children": [
+{
+"title": "Scalars",
+"url": "dgui_datamodel_types.html#dgui_datamodel_scalar",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Containers",
+"url": "dgui_datamodel_types.html#dgui_datamodel_container",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Subroutines",
+"url": "dgui_datamodel_types.html#autoid_11",
+"isFile": false,
+"children": [
+{
+"title": "Methods and functions",
+"url": "dgui_datamodel_types.html#dgui_datamodel_method",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "User-defined directives",
+"url": "dgui_datamodel_types.html#dgui_datamodel_userdefdir",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Function/method versus user-defined directive",
+"url": "dgui_datamodel_types.html#autoid_12",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Miscellaneous",
+"url": "dgui_datamodel_types.html#autoid_13",
+"isFile": false,
+"children": [
+{
+"title": "Nodes",
+"url": "dgui_datamodel_types.html#dgui_datamodel_node",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Markup output",
+"url": "dgui_datamodel_types.html#dgui_datamodel_markupoutput",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+]
+}
+]
+}
+,
+{
+"title": "The Template",
+"url": "dgui_template.html",
+"isFile": true,
+"children": [
+{
+"title": "Overall structure",
+"url": "dgui_template_overallstructure.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Directives",
+"url": "dgui_template_directives.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Expressions",
+"url": "dgui_template_exp.html",
+"isFile": true,
+"children": [
+{
+"title": "Quick overview (cheat sheet)",
+"url": "dgui_template_exp.html#exp_cheatsheet",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Specify values directly",
+"url": "dgui_template_exp.html#dgui_template_exp_direct",
+"isFile": false,
+"children": [
+{
+"title": "Strings",
+"url": "dgui_template_exp.html#dgui_template_exp_direct_string",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Numbers",
+"url": "dgui_template_exp.html#dgui_template_exp_direct_number",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Booleans",
+"url": "dgui_template_exp.html#dgui_template_exp_direct_boolean",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Sequences",
+"url": "dgui_template_exp.html#dgui_template_exp_direct_seuqence",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Ranges",
+"url": "dgui_template_exp.html#dgui_template_exp_direct_ranges",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Hashes",
+"url": "dgui_template_exp.html#dgui_template_exp_direct_hash",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Retrieving variables",
+"url": "dgui_template_exp.html#dgui_template_exp_var",
+"isFile": false,
+"children": [
+{
+"title": "Top-level variables",
+"url": "dgui_template_exp.html#dgui_template_exp_var_toplevel",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Retrieving data from a hash",
+"url": "dgui_template_exp.html#dgui_template_exp_var_hash",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Retrieving data from a sequence",
+"url": "dgui_template_exp.html#dgui_template_exp_var_sequence",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Special variables",
+"url": "dgui_template_exp.html#dgui_template_exp_var_special",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "String operations",
+"url": "dgui_template_exp.html#dgui_template_exp_stringop",
+"isFile": false,
+"children": [
+{
+"title": "Interpolation and concatenation",
+"url": "dgui_template_exp.html#dgui_template_exp_stringop_interpolation",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Getting a character",
+"url": "dgui_template_exp.html#dgui_template_exp_get_character",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "String slicing (substrings)",
+"url": "dgui_template_exp.html#dgui_template_exp_stringop_slice",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Sequence operations",
+"url": "dgui_template_exp.html#dgui_template_exp_sequenceop",
+"isFile": false,
+"children": [
+{
+"title": "Concatenation",
+"url": "dgui_template_exp.html#dgui_template_exp_sequenceop_cat",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Sequence slicing",
+"url": "dgui_template_exp.html#dgui_template_exp_seqenceop_slice",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Hash operations",
+"url": "dgui_template_exp.html#dgui_template_exp_hashop",
+"isFile": false,
+"children": [
+{
+"title": "Concatenation",
+"url": "dgui_template_exp.html#dgui_template_exp_hashop_cat",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Arithmetical calculations",
+"url": "dgui_template_exp.html#dgui_template_exp_arit",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Comparison",
+"url": "dgui_template_exp.html#dgui_template_exp_comparison",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Logical operations",
+"url": "dgui_template_exp.html#dgui_template_exp_logicalop",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Built-ins",
+"url": "dgui_template_exp.html#dgui_template_exp_builtin",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Method call",
+"url": "dgui_template_exp.html#dgui_template_exp_methodcall",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Handling missing values",
+"url": "dgui_template_exp.html#dgui_template_exp_missing",
+"isFile": false,
+"children": [
+{
+"title": "Default value operator",
+"url": "dgui_template_exp.html#dgui_template_exp_missing_default",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Missing value test operator",
+"url": "dgui_template_exp.html#dgui_template_exp_missing_test",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Assignment Operators",
+"url": "dgui_template_exp.html#dgui_template_exp_assignment",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Parentheses",
+"url": "dgui_template_exp.html#dgui_template_exp_parentheses",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "White-space in expressions",
+"url": "dgui_template_exp.html#dgui_template_exp_whitespace",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Operator precedence",
+"url": "dgui_template_exp.html#dgui_template_exp_precedence",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Interpolations",
+"url": "dgui_template_valueinsertion.html",
+"isFile": true,
+"children": [
+{
+"title": "Overview",
+"url": "dgui_template_valueinsertion.html#autoid_14",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Automatic escaping",
+"url": "dgui_template_valueinsertion.html#autoid_15",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Guide to inserting numerical values",
+"url": "dgui_template_valueinsertion.html#autoid_16",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Guide to inserting date/time/date-time values",
+"url": "dgui_template_valueinsertion.html#dgui_template_valueinserion_universal_date",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Guide to inserting boolean values",
+"url": "dgui_template_valueinsertion.html#autoid_17",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Exact conversion rules",
+"url": "dgui_template_valueinsertion.html#autoid_18",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+]
+}
+,
+{
+"title": "Miscellaneous",
+"url": "dgui_misc.html",
+"isFile": true,
+"children": [
+{
+"title": "Defining your own directives",
+"url": "dgui_misc_userdefdir.html",
+"isFile": true,
+"children": [
+{
+"title": "Basics",
+"url": "dgui_misc_userdefdir.html#autoid_19",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Parameters",
+"url": "dgui_misc_userdefdir.html#autoid_20",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Nested content",
+"url": "dgui_misc_userdefdir.html#autoid_21",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Macros with loop variables",
+"url": "dgui_misc_userdefdir.html#dgui_misc_userdefdir_loopvar",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "More about user-defined directives and macros",
+"url": "dgui_misc_userdefdir.html#autoid_22",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Defining variables in the template",
+"url": "dgui_misc_var.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Namespaces",
+"url": "dgui_misc_namespace.html",
+"isFile": true,
+"children": [
+{
+"title": "Creating a library",
+"url": "dgui_misc_namespace.html#autoid_23",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Writing the variables of imported namespaces",
+"url": "dgui_misc_namespace.html#autoid_24",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Namespaces and data-model",
+"url": "dgui_misc_namespace.html#autoid_25",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "The life-cycle of namespaces",
+"url": "dgui_misc_namespace.html#autoid_26",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Auto-importing",
+"url": "dgui_misc_namespace.html#autoid_27",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Auto-escaping and output formats",
+"url": "dgui_misc_autoescaping.html",
+"isFile": true,
+"children": [
+{
+"title": "Output formats",
+"url": "dgui_misc_autoescaping.html#dgui_misc_autoescaping_outputformat",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Overriding the output format in templates",
+"url": "dgui_misc_autoescaping.html#dgui_misc_autoescaping_overrideoformat",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Disabling auto escaping",
+"url": "dgui_misc_autoescaping.html#dgui_misc_autoescaping_disableautoesc",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "\u201cMarkup output\u201d values",
+"url": "dgui_misc_autoescaping.html#dgui_misc_autoescaping_movalues",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Further details and tricky cases",
+"url": "dgui_misc_autoescaping.html#autoid_28",
+"isFile": false,
+"children": [
+{
+"title": "Non-markup output formats",
+"url": "dgui_misc_autoescaping.html#dgui_misc_autoescaping_nonmarkupof",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Inserting markup output values from other markups",
+"url": "dgui_misc_autoescaping.html#dgui_misc_autoescaping_mixingoutputformats",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "\u201c+\u201d\n operator",
+"url": "dgui_misc_autoescaping.html#dgui_misc_autoescaping_concatenation",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "${...} inside string literals",
+"url": "dgui_misc_autoescaping.html#dgui_misc_autoescaping_stringliteral",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Combined output formats",
+"url": "dgui_misc_autoescaping.html#autoid_29",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+]
+}
+,
+{
+"title": "White-space handling",
+"url": "dgui_misc_whitespace.html",
+"isFile": true,
+"children": [
+{
+"title": "White-space stripping",
+"url": "dgui_misc_whitespace.html#dgui_misc_whitespace_stripping",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Using compress directive",
+"url": "dgui_misc_whitespace.html#autoid_30",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Alternative (square bracket) syntax",
+"url": "dgui_misc_alternativesyntax.html",
+"isFile": true,
+"children": [
+]
+}
+]
+}
+]
+}
+,
+{
+"title": "Programmer's Guide",
+"url": "pgui.html",
+"isFile": true,
+"children": [
+{
+"title": "Getting Started",
+"url": "pgui_quickstart.html",
+"isFile": true,
+"children": [
+{
+"title": "Create a configuration instance",
+"url": "pgui_quickstart_createconfiguration.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Create a data-model",
+"url": "pgui_quickstart_createdatamodel.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Get the template",
+"url": "pgui_quickstart_gettemplate.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Merging the template with the data-model",
+"url": "pgui_quickstart_merge.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Putting all together",
+"url": "pgui_quickstart_all.html",
+"isFile": true,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "The Data Model",
+"url": "pgui_datamodel.html",
+"isFile": true,
+"children": [
+{
+"title": "Basics",
+"url": "pgui_datamodel_basics.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Scalars",
+"url": "pgui_datamodel_scalar.html",
+"isFile": true,
+"children": [
+{
+"title": "\u201cdate-like\u201d types",
+"url": "pgui_datamodel_scalar.html#autoid_31",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Containers",
+"url": "pgui_datamodel_parent.html",
+"isFile": true,
+"children": [
+{
+"title": "Hashes",
+"url": "pgui_datamodel_parent.html#autoid_32",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Sequences",
+"url": "pgui_datamodel_parent.html#autoid_33",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Collections",
+"url": "pgui_datamodel_parent.html#autoid_34",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Methods",
+"url": "pgui_datamodel_method.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Directives",
+"url": "pgui_datamodel_directive.html",
+"isFile": true,
+"children": [
+{
+"title": "Example 1",
+"url": "pgui_datamodel_directive.html#autoid_35",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Example 2",
+"url": "pgui_datamodel_directive.html#autoid_36",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Notices",
+"url": "pgui_datamodel_directive.html#autoid_37",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Node variables",
+"url": "pgui_datamodel_node.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Object wrappers",
+"url": "pgui_datamodel_objectWrapper.html",
+"isFile": true,
+"children": [
+{
+"title": "The default object wrapper",
+"url": "pgui_datamodel_objectWrapper.html#pgui_datamodel_defaultObjectWrapper",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Custom object wrapping example",
+"url": "pgui_datamodel_objectWrapper.html#pgui_datamodel_customObjectWrappingExample",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+]
+}
+,
+{
+"title": "The Configuration",
+"url": "pgui_config.html",
+"isFile": true,
+"children": [
+{
+"title": "Basics",
+"url": "pgui_config_basics.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Shared variables",
+"url": "pgui_config_sharedvariables.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Settings",
+"url": "pgui_config_settings.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Template loading",
+"url": "pgui_config_templateloading.html",
+"isFile": true,
+"children": [
+{
+"title": "Template loaders",
+"url": "pgui_config_templateloading.html#autoid_38",
+"isFile": false,
+"children": [
+{
+"title": "Built-in template loaders",
+"url": "pgui_config_templateloading.html#autoid_39",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Loading templates from multiple locations",
+"url": "pgui_config_templateloading.html#autoid_40",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Loading templates from other sources",
+"url": "pgui_config_templateloading.html#autoid_41",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "The template name (template path)",
+"url": "pgui_config_templateloading.html#autoid_42",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Template caching",
+"url": "pgui_config_templateloading.html#pgui_config_templateloading_caching",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Error handling",
+"url": "pgui_config_errorhandling.html",
+"isFile": true,
+"children": [
+{
+"title": "The possible exceptions",
+"url": "pgui_config_errorhandling.html#autoid_43",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Customizing the behavior regarding TemplatException-s",
+"url": "pgui_config_errorhandling.html#autoid_44",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "TemplateException logging",
+"url": "pgui_config_errorhandling.html#autoid_45",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Explicit error handling in templates",
+"url": "pgui_config_errorhandling.html#autoid_46",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Template configurations",
+"url": "pgui_config_templateconfigurations.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Associating output formats with templates",
+"url": "pgui_config_outputformatsautoesc.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Custom number and date/time formats",
+"url": "pgui_config_custom_formats.html",
+"isFile": true,
+"children": [
+{
+"title": "Overview",
+"url": "pgui_config_custom_formats.html#autoid_50",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Simple custom number format example",
+"url": "pgui_config_custom_formats.html#pgui_config_custom_formats_ex_cust_alg_simple",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Advanced custom number format example",
+"url": "pgui_config_custom_formats.html#pgui_config_custom_formats_ex_cust_algo_advanced",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Custom date/time format example",
+"url": "pgui_config_custom_formats.html#pgui_config_custom_formats_ex_cust_algo_date",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Alias format example",
+"url": "pgui_config_custom_formats.html#pgui_config_custom_formats_ex_alias",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Model-aware format example",
+"url": "pgui_config_custom_formats.html#pgui_config_custom_formats_ex_model_aware",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "The \"incompatible improvements\" setting",
+"url": "pgui_config_incompatible_improvements.html",
+"isFile": true,
+"children": [
+{
+"title": "What does it do",
+"url": "pgui_config_incompatible_improvements.html#autoid_51",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "How to set it",
+"url": "pgui_config_incompatible_improvements.html#pgui_config_incompatible_improvements_how_to_set",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+]
+}
+,
+{
+"title": "Miscellaneous",
+"url": "pgui_misc.html",
+"isFile": true,
+"children": [
+{
+"title": "Variables, scopes",
+"url": "pgui_misc_var.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Charset issues",
+"url": "pgui_misc_charset.html",
+"isFile": true,
+"children": [
+{
+"title": "The charset of the input",
+"url": "pgui_misc_charset.html#autoid_52",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "The charset of the output",
+"url": "pgui_misc_charset.html#autoid_53",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Multithreading",
+"url": "pgui_misc_multithreading.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Bean wrapper",
+"url": "pgui_misc_beanwrapper.html",
+"isFile": true,
+"children": [
+{
+"title": "TemplateHashModel functionality",
+"url": "pgui_misc_beanwrapper.html#beanswrapper_hash",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "A word on security",
+"url": "pgui_misc_beanwrapper.html#autoid_54",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "TemplateScalarModel functionality",
+"url": "pgui_misc_beanwrapper.html#autoid_55",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "TemplateNumberModel functionality",
+"url": "pgui_misc_beanwrapper.html#autoid_56",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "TemplateCollectionModel functionality",
+"url": "pgui_misc_beanwrapper.html#autoid_57",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "TemplateSequenceModel functionality",
+"url": "pgui_misc_beanwrapper.html#autoid_58",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "TemplateMethodModel functionality",
+"url": "pgui_misc_beanwrapper.html#beanswrapper_method",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Unwrapping rules",
+"url": "pgui_misc_beanwrapper.html#autoid_59",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Accessing static methods",
+"url": "pgui_misc_beanwrapper.html#autoid_60",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Accessing enums",
+"url": "pgui_misc_beanwrapper.html#jdk_15_enums",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Logging",
+"url": "pgui_misc_logging.html",
+"isFile": true,
+"children": [
+{
+"title": "Logging library selection",
+"url": "pgui_misc_logging.html#autoid_61",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Logging categories",
+"url": "pgui_misc_logging.html#autoid_62",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Using FreeMarker with servlets",
+"url": "pgui_misc_servlet.html",
+"isFile": true,
+"children": [
+{
+"title": "\u201cModel 2\u201d",
+"url": "pgui_misc_servlet.html#pgui_misc_servlet_model2",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Including content from other web application\n resources",
+"url": "pgui_misc_servlet.html#pgui_misc_servlet_include",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Using JSP custom tags in FTL",
+"url": "pgui_misc_servlet.html#autoid_63",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Embed FTL into JSP pages",
+"url": "pgui_misc_servlet.html#autoid_64",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Configuring security policy for FreeMarker",
+"url": "pgui_misc_secureenv.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Legacy XML wrapper implementation",
+"url": "pgui_misc_xml_legacy.html",
+"isFile": true,
+"children": [
+{
+"title": "TemplateScalarModel",
+"url": "pgui_misc_xml_legacy.html#autoid_65",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "TemplateCollectionModel",
+"url": "pgui_misc_xml_legacy.html#autoid_66",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "TemplateSequenceModel",
+"url": "pgui_misc_xml_legacy.html#autoid_67",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "TemplateHashModel",
+"url": "pgui_misc_xml_legacy.html#autoid_68",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "TemplateMethodModel",
+"url": "pgui_misc_xml_legacy.html#autoid_69",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Namespace handling",
+"url": "pgui_misc_xml_legacy.html#autoid_70",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Using FreeMarker with Ant",
+"url": "pgui_misc_ant.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Jython wrapper",
+"url": "pgui_misc_jythonwrapper.html",
+"isFile": true,
+"children": [
+{
+"title": "TemplateHashModel functionality",
+"url": "pgui_misc_jythonwrapper.html#autoid_71",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "TemplateScalarModel functionality",
+"url": "pgui_misc_jythonwrapper.html#autoid_72",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "TemplateBooleanModel functionality",
+"url": "pgui_misc_jythonwrapper.html#autoid_73",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "TemplateNumberModel functionality",
+"url": "pgui_misc_jythonwrapper.html#autoid_74",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "TemplateSequenceModel functionality",
+"url": "pgui_misc_jythonwrapper.html#autoid_75",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+]
+}
+]
+}
+,
+{
+"title": "Template Language Reference",
+"url": "ref.html",
+"isFile": true,
+"children": [
+{
+"title": "Built-in Reference",
+"url": "ref_builtins.html",
+"isFile": true,
+"children": [
+{
+"title": "Alphabetical index",
+"url": "ref_builtins_alphaidx.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Built-ins for strings",
+"url": "ref_builtins_string.html",
+"isFile": true,
+"children": [
+{
+"title": "boolean",
+"url": "ref_builtins_string.html#ref_builtin_boolean",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "cap_first",
+"url": "ref_builtins_string.html#ref_builtin_cap_first",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "capitalize",
+"url": "ref_builtins_string.html#ref_builtin_capitalize",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "chop_linebreak",
+"url": "ref_builtins_string.html#ref_builtin_chop_linebreak",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "contains",
+"url": "ref_builtins_string.html#ref_builtin_contains",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "date, time, datetime",
+"url": "ref_builtins_string.html#ref_builtin_string_date",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "ends_with",
+"url": "ref_builtins_string.html#ref_builtin_ends_with",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "ensure_ends_with",
+"url": "ref_builtins_string.html#ref_builtin_ensure_ends_with",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "ensure_starts_with",
+"url": "ref_builtins_string.html#ref_builtin_ensure_starts_with",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "esc",
+"url": "ref_builtins_string.html#ref_builtin_esc",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "groups",
+"url": "ref_builtins_string.html#ref_builtin_groups",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "html (deprecated)",
+"url": "ref_builtins_string.html#ref_builtin_html",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "index_of",
+"url": "ref_builtins_string.html#ref_builtin_index_of",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "j_string",
+"url": "ref_builtins_string.html#ref_builtin_j_string",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "js_string",
+"url": "ref_builtins_string.html#ref_builtin_js_string",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "json_string",
+"url": "ref_builtins_string.html#ref_builtin_json_string",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "keep_after",
+"url": "ref_builtins_string.html#ref_builtin_keep_after",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "keep_after_last",
+"url": "ref_builtins_string.html#ref_builtin_keep_after_last",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "keep_before",
+"url": "ref_builtins_string.html#ref_builtin_keep_before",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "keep_before_last",
+"url": "ref_builtins_string.html#ref_builtin_keep_before_last",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "last_index_of",
+"url": "ref_builtins_string.html#ref_builtin_last_index_of",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "left_pad",
+"url": "ref_builtins_string.html#ref_builtin_left_pad",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "length",
+"url": "ref_builtins_string.html#ref_builtin_length",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "lower_case",
+"url": "ref_builtins_string.html#ref_builtin_lower_case",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "matches",
+"url": "ref_builtins_string.html#ref_builtin_matches",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "no_esc",
+"url": "ref_builtins_string.html#ref_builtin_no_esc",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "number",
+"url": "ref_builtins_string.html#ref_builtin_number",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "replace",
+"url": "ref_builtins_string.html#ref_builtin_replace",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "right_pad",
+"url": "ref_builtins_string.html#ref_builtin_right_pad",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "remove_beginning",
+"url": "ref_builtins_string.html#ref_builtin_remove_beginning",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "remove_ending",
+"url": "ref_builtins_string.html#ref_builtin_remove_ending",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "rtf (deprecated)",
+"url": "ref_builtins_string.html#ref_builtin_rtf",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "split",
+"url": "ref_builtins_string.html#ref_builtin_split",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "starts_with",
+"url": "ref_builtins_string.html#ref_builtin_starts_with",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "string (when used with a string value)",
+"url": "ref_builtins_string.html#ref_builtin_string_for_string",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "substring (deprecated)",
+"url": "ref_builtins_string.html#ref_builtin_substring",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "trim",
+"url": "ref_builtins_string.html#ref_builtin_trim",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "uncap_first",
+"url": "ref_builtins_string.html#ref_builtin_uncap_first",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "upper_case",
+"url": "ref_builtins_string.html#ref_builtin_upper_case",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "url",
+"url": "ref_builtins_string.html#ref_builtin_url",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "url_path",
+"url": "ref_builtins_string.html#ref_builtin_url_path",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "word_list",
+"url": "ref_builtins_string.html#ref_builtin_word_list",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "xhtml (deprecated)",
+"url": "ref_builtins_string.html#ref_builtin_xhtml",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "xml (deprecated)",
+"url": "ref_builtins_string.html#ref_builtin_xml",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Common flags",
+"url": "ref_builtins_string.html#ref_builtin_string_flags",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Built-ins for numbers",
+"url": "ref_builtins_number.html",
+"isFile": true,
+"children": [
+{
+"title": "abs",
+"url": "ref_builtins_number.html#ref_builtin_abs",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "c (when used with numerical value)",
+"url": "ref_builtins_number.html#ref_builtin_c",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "is_infinite",
+"url": "ref_builtins_number.html#ref_builtin_is_infinite",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "is_nan",
+"url": "ref_builtins_number.html#ref_builtin_is_nan",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "lower_abc",
+"url": "ref_builtins_number.html#ref_builtin_lower_abc",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "round, floor, ceiling",
+"url": "ref_builtins_number.html#ref_builtin_rounding",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "string (when used with a numerical value)",
+"url": "ref_builtins_number.html#ref_builtin_string_for_number",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "upper_abc",
+"url": "ref_builtins_number.html#ref_builtin_upper_abc",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Built-ins for date/time/date-time values",
+"url": "ref_builtins_date.html",
+"isFile": true,
+"children": [
+{
+"title": "date, time, datetime (when used with a date/time/date-time\n value)",
+"url": "ref_builtins_date.html#ref_builtin_date_datetype",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "date_if_unknown, time_if_unknown, datetime_if_unknown",
+"url": "ref_builtins_date.html#ref_builtin_date_if_unknown",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "iso_...",
+"url": "ref_builtins_date.html#ref_builtin_date_iso",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "string (when used with a date/time/date-time value)",
+"url": "ref_builtins_date.html#ref_builtin_string_for_date",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Built-ins for booleans",
+"url": "ref_builtins_boolean.html",
+"isFile": true,
+"children": [
+{
+"title": "c (when used with boolean)",
+"url": "ref_builtins_boolean.html#ref_builtin_c_boolean",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "string (when used with a boolean value)",
+"url": "ref_builtins_boolean.html#ref_builtin_string_for_boolean",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "then",
+"url": "ref_builtins_boolean.html#ref_builtin_then",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Built-ins for sequences",
+"url": "ref_builtins_sequence.html",
+"isFile": true,
+"children": [
+{
+"title": "chunk",
+"url": "ref_builtins_sequence.html#ref_builtin_chunk",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "first",
+"url": "ref_builtins_sequence.html#ref_builtin_first",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "join",
+"url": "ref_builtins_sequence.html#ref_builtin_join",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "last",
+"url": "ref_builtins_sequence.html#ref_builtin_last",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "reverse",
+"url": "ref_builtins_sequence.html#ref_builtin_reverse",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "seq_contains",
+"url": "ref_builtins_sequence.html#ref_builtin_seq_contains",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "seq_index_of",
+"url": "ref_builtins_sequence.html#ref_builtin_seq_index_of",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "seq_last_index_of",
+"url": "ref_builtins_sequence.html#ref_builtin_seq_last_index_of",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "size",
+"url": "ref_builtins_sequence.html#ref_builtin_size",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "sort",
+"url": "ref_builtins_sequence.html#ref_builtin_sort",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "sort_by",
+"url": "ref_builtins_sequence.html#ref_builtin_sort_by",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Built-ins for hashes",
+"url": "ref_builtins_hash.html",
+"isFile": true,
+"children": [
+{
+"title": "keys",
+"url": "ref_builtins_hash.html#ref_builtin_keys",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "values",
+"url": "ref_builtins_hash.html#ref_builtin_values",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Built-ins for nodes (for XML)",
+"url": "ref_builtins_node.html",
+"isFile": true,
+"children": [
+{
+"title": "ancestors",
+"url": "ref_builtins_node.html#ref_builtin_ancestors",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "children",
+"url": "ref_builtins_node.html#ref_builtin_children",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "node_name",
+"url": "ref_builtins_node.html#ref_builtin_node_name",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "next_sibling",
+"url": "ref_builtins_node.html#ref_builtin_next_sibling",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "node_namespace",
+"url": "ref_builtins_node.html#ref_builtin_node_namespace",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "node_type",
+"url": "ref_builtins_node.html#ref_builtin_node_type",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "parent",
+"url": "ref_builtins_node.html#ref_builtin_parent",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "previous_sibling",
+"url": "ref_builtins_node.html#ref_builtin_previous_sibling",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "root",
+"url": "ref_builtins_node.html#ref_builtin_root",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Loop variable built-ins",
+"url": "ref_builtins_loop_var.html",
+"isFile": true,
+"children": [
+{
+"title": "counter",
+"url": "ref_builtins_loop_var.html#ref_builtin_counter",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "has_next",
+"url": "ref_builtins_loop_var.html#ref_builtin_has_next",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "index",
+"url": "ref_builtins_loop_var.html#ref_builtin_index",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "is_even_item",
+"url": "ref_builtins_loop_var.html#ref_builtin_is_even_item",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "is_first",
+"url": "ref_builtins_loop_var.html#ref_builtin_is_first",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "is_last",
+"url": "ref_builtins_loop_var.html#ref_builtin_is_last",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "is_odd_item",
+"url": "ref_builtins_loop_var.html#ref_builtin_is_odd_item",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "item_cycle",
+"url": "ref_builtins_loop_var.html#ref_builtin_item_cycle",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "item_parity",
+"url": "ref_builtins_loop_var.html#ref_builtin_item_parity",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "item_parity_cap",
+"url": "ref_builtins_loop_var.html#ref_builtin_item_parity_cap",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Type independent built-ins",
+"url": "ref_builtins_type_independent.html",
+"isFile": true,
+"children": [
+{
+"title": "switch",
+"url": "ref_builtins_type_independent.html#ref_builtin_switch",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Seldom used and expert built-ins",
+"url": "ref_builtins_expert.html",
+"isFile": true,
+"children": [
+{
+"title": "api, has_api",
+"url": "ref_builtins_expert.html#ref_buitin_api_and_has_api",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "byte, double, float, int, long, short",
+"url": "ref_builtins_expert.html#ref_builtin_numType",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "eval",
+"url": "ref_builtins_expert.html#ref_builtin_eval",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "has_content",
+"url": "ref_builtins_expert.html#ref_builtin_has_content",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "interpret",
+"url": "ref_builtins_expert.html#ref_builtin_interpret",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "is_...",
+"url": "ref_builtins_expert.html#ref_builtin_isType",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "markup_string",
+"url": "ref_builtins_expert.html#ref_builtin_markup_string",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "namespace",
+"url": "ref_builtins_expert.html#ref_builtin_namespace",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "new",
+"url": "ref_builtins_expert.html#ref_builtin_new",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "number_to_date, number_to_time, number_to_datetime",
+"url": "ref_builtins_expert.html#ref_builtin_numToDate",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+]
+}
+,
+{
+"title": "Directive Reference",
+"url": "ref_directives.html",
+"isFile": true,
+"children": [
+{
+"title": "Alphabetical index",
+"url": "ref_directive_alphaidx.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "assign",
+"url": "ref_directive_assign.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_assign.html#autoid_76",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_assign.html#autoid_77",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "attempt, recover",
+"url": "ref_directive_attempt.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_attempt.html#autoid_78",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_attempt.html#autoid_79",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "autoesc",
+"url": "ref_directive_autoesc.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_autoesc.html#autoid_80",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_autoesc.html#autoid_81",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "compress",
+"url": "ref_directive_compress.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_compress.html#autoid_82",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_compress.html#autoid_83",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "escape, noescape (deprecated)",
+"url": "ref_directive_escape.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_escape.html#autoid_84",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_escape.html#autoid_85",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "flush",
+"url": "ref_directive_flush.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_flush.html#autoid_86",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_flush.html#autoid_87",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "ftl",
+"url": "ref_directive_ftl.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_ftl.html#autoid_88",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_ftl.html#autoid_89",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "function, return",
+"url": "ref_directive_function.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_function.html#autoid_90",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_function.html#autoid_91",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "global",
+"url": "ref_directive_global.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_global.html#autoid_92",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_global.html#autoid_93",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "if, else, elseif",
+"url": "ref_directive_if.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_if.html#autoid_94",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_if.html#autoid_95",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "import",
+"url": "ref_directive_import.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_import.html#autoid_96",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_import.html#autoid_97",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "include",
+"url": "ref_directive_include.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_include.html#autoid_98",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_include.html#autoid_99",
+"isFile": false,
+"children": [
+{
+"title": "Using acquisition",
+"url": "ref_directive_include.html#ref_directive_include_acquisition",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Localized lookup",
+"url": "ref_directive_include.html#ref_directive_include_localized",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+]
+}
+,
+{
+"title": "list, else, items, sep, break",
+"url": "ref_directive_list.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_list.html#autoid_100",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_list.html#autoid_101",
+"isFile": false,
+"children": [
+{
+"title": "Simplest form",
+"url": "ref_directive_list.html#autoid_102",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "else directive",
+"url": "ref_directive_list.html#autoid_103",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "items directive",
+"url": "ref_directive_list.html#autoid_104",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "sep directive",
+"url": "ref_directive_list.html#autoid_105",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "break directive",
+"url": "ref_directive_list.html#autoid_106",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Accessing iteration state",
+"url": "ref_directive_list.html#autoid_107",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Nesting loops into each other",
+"url": "ref_directive_list.html#autoid_108",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Notes for Java programmers",
+"url": "ref_directive_list.html#autoid_109",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+]
+}
+,
+{
+"title": "local",
+"url": "ref_directive_local.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_local.html#autoid_110",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_local.html#autoid_111",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "macro, nested, return",
+"url": "ref_directive_macro.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_macro.html#autoid_112",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_macro.html#autoid_113",
+"isFile": false,
+"children": [
+{
+"title": "nested",
+"url": "ref_directive_macro.html#autoid_114",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "return",
+"url": "ref_directive_macro.html#autoid_115",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+]
+}
+,
+{
+"title": "noautoesc",
+"url": "ref_directive_noautoesc.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_noautoesc.html#autoid_116",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_noautoesc.html#autoid_117",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "noparse",
+"url": "ref_directive_noparse.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_noparse.html#autoid_118",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_noparse.html#autoid_119",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "nt",
+"url": "ref_directive_nt.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_nt.html#autoid_120",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_nt.html#autoid_121",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "outputformat",
+"url": "ref_directive_outputformat.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_outputformat.html#autoid_122",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_outputformat.html#autoid_123",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "setting",
+"url": "ref_directive_setting.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_setting.html#autoid_124",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_setting.html#autoid_125",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "stop",
+"url": "ref_directive_stop.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_stop.html#autoid_126",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_stop.html#autoid_127",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "switch, case, default, break",
+"url": "ref_directive_switch.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_switch.html#autoid_128",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_switch.html#autoid_129",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "t, lt, rt",
+"url": "ref_directive_t.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_t.html#autoid_130",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_t.html#autoid_131",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "User-defined directive (<@...>)",
+"url": "ref_directive_userDefined.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_userDefined.html#autoid_132",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_userDefined.html#autoid_133",
+"isFile": false,
+"children": [
+{
+"title": "End-tag",
+"url": "ref_directive_userDefined.html#ref_directive_userDefined_entTag",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Loop variables",
+"url": "ref_directive_userDefined.html#ref_directive_userDefined_loopVar",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Positional parameter passing",
+"url": "ref_directive_userDefined.html#ref_directive_userDefined_positionalParam",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+]
+}
+,
+{
+"title": "visit, recurse, fallback",
+"url": "ref_directive_visit.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_directive_visit.html#autoid_134",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_directive_visit.html#autoid_135",
+"isFile": false,
+"children": [
+{
+"title": "Visit",
+"url": "ref_directive_visit.html#autoid_136",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Recurse",
+"url": "ref_directive_visit.html#autoid_137",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Fallback",
+"url": "ref_directive_visit.html#autoid_138",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+]
+}
+]
+}
+,
+{
+"title": "Special Variable Reference",
+"url": "ref_specvar.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Reserved names in FTL",
+"url": "ref_reservednames.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Deprecated FTL constructs",
+"url": "ref_deprecated.html",
+"isFile": true,
+"children": [
+{
+"title": "List of deprecated directives",
+"url": "ref_depr_directive.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "List of deprecated built-ins",
+"url": "ref_depr_builtin.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Old-style macro and call directives",
+"url": "ref_depr_oldmacro.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_depr_oldmacro.html#autoid_139",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_depr_oldmacro.html#autoid_140",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Transform directive",
+"url": "ref_depr_transform.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_depr_transform.html#autoid_141",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_depr_transform.html#autoid_142",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Old FTL syntax",
+"url": "ref_depr_oldsyntax.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "#{...}: Numerical interpolation",
+"url": "ref_depr_numerical_interpolation.html",
+"isFile": true,
+"children": [
+{
+"title": "Synopsis",
+"url": "ref_depr_numerical_interpolation.html#autoid_143",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Description",
+"url": "ref_depr_numerical_interpolation.html#autoid_144",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+]
+}
+]
+}
+,
+{
+"title": "XML Processing Guide",
+"url": "xgui.html",
+"isFile": true,
+"children": [
+{
+"title": "Preface",
+"url": "xgui_preface.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Exposing XML documents",
+"url": "xgui_expose.html",
+"isFile": true,
+"children": [
+{
+"title": "The DOM tree",
+"url": "xgui_expose_dom.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Putting the XML into the data-model",
+"url": "xgui_expose_put.html",
+"isFile": true,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Imperative XML processing",
+"url": "xgui_imperative.html",
+"isFile": true,
+"children": [
+{
+"title": "Basics",
+"url": "xgui_imperative_learn.html",
+"isFile": true,
+"children": [
+{
+"title": "Accessing elements by name",
+"url": "xgui_imperative_learn.html#autoid_145",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Accessing attributes",
+"url": "xgui_imperative_learn.html#autoid_146",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Exploring the tree",
+"url": "xgui_imperative_learn.html#autoid_147",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Using XPath expressions",
+"url": "xgui_imperative_learn.html#autoid_148",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "XML namespaces",
+"url": "xgui_imperative_learn.html#autoid_149",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Don't forget escaping!",
+"url": "xgui_imperative_learn.html#autoid_150",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "Details",
+"url": "xgui_imperative_formal.html",
+"isFile": true,
+"children": [
+{
+"title": "Node sequences",
+"url": "xgui_imperative_formal.html#autoid_151",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+]
+}
+,
+{
+"title": "Declarative XML processing",
+"url": "xgui_declarative.html",
+"isFile": true,
+"children": [
+{
+"title": "Basics",
+"url": "xgui_declarative_basics.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Details",
+"url": "xgui_declarative_details.html",
+"isFile": true,
+"children": [
+{
+"title": "Default handlers",
+"url": "xgui_declarative_details.html#autoid_152",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Visiting a single node",
+"url": "xgui_declarative_details.html#autoid_153",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "XML namespaces",
+"url": "xgui_declarative_details.html#autoid_154",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+]
+}
+]
+}
+,
+{
+"title": "Appendixes",
+"url": "app.html",
+"isFile": true,
+"children": [
+{
+"title": "FAQ",
+"url": "app_faq.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Version history",
+"url": "app_versions.html",
+"isFile": true,
+"children": [
+{
+"title": "2.3.26 (incubating at Apache)",
+"url": "versions_2_3_26.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_3_26.html#autoid_155",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_26.html#autoid_156",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Other changes",
+"url": "versions_2_3_26.html#autoid_157",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.25 (incubating at Apache)",
+"url": "versions_2_3_25.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_3_25.html#autoid_158",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_25.html#autoid_159",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.24 (incubating at Apache)",
+"url": "versions_2_3_24.html",
+"isFile": true,
+"children": [
+{
+"title": "Legal changes",
+"url": "versions_2_3_24.html#autoid_160",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_3_24.html#autoid_161",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_24.html#autoid_162",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes compared to 2.3.24 Release Candidate 1",
+"url": "versions_2_3_24.html#autoid_163",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.23",
+"url": "versions_2_3_23.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_3_23.html#autoid_164",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_23.html#autoid_165",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Other changes",
+"url": "versions_2_3_23.html#autoid_166",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Notes",
+"url": "versions_2_3_23.html#autoid_167",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.22",
+"url": "versions_2_3_22.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_3_22.html#autoid_168",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_22.html#autoid_169",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Notes",
+"url": "versions_2_3_22.html#autoid_170",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.21",
+"url": "versions_2_3_21.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_3_21.html#autoid_171",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_21.html#autoid_172",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Other changes",
+"url": "versions_2_3_21.html#autoid_173",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.20",
+"url": "versions_2_3_20.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_3_20.html#autoid_174",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_20.html#autoid_175",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Other changes",
+"url": "versions_2_3_20.html#autoid_176",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.19",
+"url": "versions_2_3_19.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_3_19.html#autoid_177",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_19.html#autoid_178",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.18",
+"url": "versions_2_3_18.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_18.html#autoid_179",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Other changes",
+"url": "versions_2_3_18.html#autoid_180",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.17",
+"url": "versions_2_3_17.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_3_17.html#autoid_181",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_17.html#autoid_182",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Other changes",
+"url": "versions_2_3_17.html#autoid_183",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.16",
+"url": "versions_2_3_16.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_16.html#autoid_184",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_3_16.html#autoid_185",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.15",
+"url": "versions_2_3_15.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_3_15.html#autoid_186",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_15.html#autoid_187",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.14",
+"url": "versions_2_3_14.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_3_14.html#autoid_188",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_14.html#autoid_189",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.13",
+"url": "versions_2_3_13.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_3_13.html#autoid_190",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_13.html#autoid_191",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.12",
+"url": "versions_2_3_12.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_12.html#autoid_192",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.11",
+"url": "versions_2_3_11.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_3_11.html#autoid_193",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_11.html#autoid_194",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Documentation changes",
+"url": "versions_2_3_11.html#autoid_195",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.10",
+"url": "versions_2_3_10.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_10.html#autoid_196",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_3_10.html#autoid_197",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.9",
+"url": "versions_2_3_9.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_9.html#autoid_198",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.8",
+"url": "versions_2_3_8.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_8.html#autoid_199",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.7",
+"url": "versions_2_3_7.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_7.html#autoid_200",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_3_7.html#autoid_201",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.7 RC1",
+"url": "versions_2_3_7rc1.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_7rc1.html#autoid_202",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_3_7rc1.html#autoid_203",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.6",
+"url": "versions_2_3_6.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_6.html#autoid_204",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.5",
+"url": "versions_2_3_5.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_3_5.html#autoid_205",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_5.html#autoid_206",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.4",
+"url": "versions_2_3_4.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_3_4.html#autoid_207",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_4.html#autoid_208",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Other changes",
+"url": "versions_2_3_4.html#autoid_209",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.3",
+"url": "versions_2_3_3.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_3_3.html#autoid_210",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_3.html#autoid_211",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Other changes",
+"url": "versions_2_3_3.html#autoid_212",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.2",
+"url": "versions_2_3_2.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_2.html#autoid_213",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.3.1",
+"url": "versions_2_3_1.html",
+"isFile": true,
+"children": [
+{
+"title": "Possible backward compatibility issue",
+"url": "versions_2_3_1.html#autoid_214",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_3_1.html#autoid_215",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3_1.html#autoid_216",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Other changes",
+"url": "versions_2_3_1.html#autoid_217",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "The history of the releases before the final version",
+"url": "versions_2_3_1.html#autoid_218",
+"isFile": false,
+"children": [
+{
+"title": "Differences between the preview release and final\n release",
+"url": "versions_2_3_1.html#autoid_219",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+]
+}
+,
+{
+"title": "2.3",
+"url": "versions_2_3.html",
+"isFile": true,
+"children": [
+{
+"title": "Non backward-compatible changes!",
+"url": "versions_2_3.html#autoid_220",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_3.html#autoid_221",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_3.html#autoid_222",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Other changes",
+"url": "versions_2_3.html#autoid_223",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "The history of the releases before the final version",
+"url": "versions_2_3.html#autoid_224",
+"isFile": false,
+"children": [
+{
+"title": "Differences between the final release and Release Candidate\n 4",
+"url": "versions_2_3.html#autoid_225",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the Release Candidate 4 and Release\n Candidate 3",
+"url": "versions_2_3.html#autoid_226",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the Release Candidate 3 and Release\n Candidate 2",
+"url": "versions_2_3.html#autoid_227",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the Release Candidate 2 and Release\n Candidate 1",
+"url": "versions_2_3.html#autoid_228",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the Release Candidate 1 and Preview 16\n releases",
+"url": "versions_2_3.html#autoid_229",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the Preview 16 and Preview 15\n releases",
+"url": "versions_2_3.html#autoid_230",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the Preview 15 and Preview 14\n releases",
+"url": "versions_2_3.html#autoid_231",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the Preview 14 and Preview 13\n releases",
+"url": "versions_2_3.html#autoid_232",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the Preview 13 and Preview 12\n releases",
+"url": "versions_2_3.html#autoid_233",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the Preview 12 and Preview 11\n releases",
+"url": "versions_2_3.html#autoid_234",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the Preview 11 and Preview 10\n releases",
+"url": "versions_2_3.html#autoid_235",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the Preview 10 and Preview 9\n releases",
+"url": "versions_2_3.html#autoid_236",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the Preview 9 and Preview 8\n releases",
+"url": "versions_2_3.html#autoid_237",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the Preview 8 and Preview 7\n releases",
+"url": "versions_2_3.html#autoid_238",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the Preview 7 and Preview 6\n releases",
+"url": "versions_2_3.html#autoid_239",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the Preview 6 and Preview 5\n releases",
+"url": "versions_2_3.html#autoid_240",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the Preview 5 and Preview 4\n releases",
+"url": "versions_2_3.html#autoid_241",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the Preview 4 and Preview 3\n releases",
+"url": "versions_2_3.html#autoid_242",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the Preview 3 and Preview 2\n releases",
+"url": "versions_2_3.html#autoid_243",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the Preview 2 and Preview 1\n releases",
+"url": "versions_2_3.html#autoid_244",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+]
+}
+,
+{
+"title": "2.2.8",
+"url": "versions_2_2_8.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_2_8.html#autoid_245",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_2_8.html#autoid_246",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Other changes",
+"url": "versions_2_2_8.html#autoid_247",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.2.7",
+"url": "versions_2_2_7.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the Java side",
+"url": "versions_2_2_7.html#autoid_248",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.2.6",
+"url": "versions_2_2_6.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_2_6.html#autoid_249",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_2_6.html#autoid_250",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Other changes",
+"url": "versions_2_2_6.html#autoid_251",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.2.5",
+"url": "versions_2_2_5.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the Java side",
+"url": "versions_2_2_5.html#autoid_252",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.2.4",
+"url": "versions_2_2_4.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the Java side",
+"url": "versions_2_2_4.html#autoid_253",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Other changes",
+"url": "versions_2_2_4.html#autoid_254",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.2.3",
+"url": "versions_2_2_3.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_2_3.html#autoid_255",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_2_3.html#autoid_256",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.2.2",
+"url": "versions_2_2_2.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the Java side",
+"url": "versions_2_2_2.html#autoid_257",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.2.1",
+"url": "versions_2_2_1.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_2_1.html#autoid_258",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_2_1.html#autoid_259",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.2",
+"url": "versions_2_2.html",
+"isFile": true,
+"children": [
+{
+"title": "Non backward-compatible changes!",
+"url": "versions_2_2.html#autoid_260",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes in FTL (FreeMarker Template Language)",
+"url": "versions_2_2.html#autoid_261",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_2.html#autoid_262",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Other changes",
+"url": "versions_2_2.html#autoid_263",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "The history of the releases before the final version",
+"url": "versions_2_2.html#autoid_264",
+"isFile": false,
+"children": [
+{
+"title": "Differences between the final and RC2 releases",
+"url": "versions_2_2.html#autoid_265",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the RC2 and RC1 releases",
+"url": "versions_2_2.html#autoid_266",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the Preview 2 and RC1 releases",
+"url": "versions_2_2.html#autoid_267",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the Preview 1 and Preview 2\n releases",
+"url": "versions_2_2.html#autoid_268",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+]
+}
+,
+{
+"title": "2.1.5",
+"url": "versions_2_1_5.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the Java side",
+"url": "versions_2_1_5.html#autoid_269",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.1.4",
+"url": "versions_2_1_4.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the Java side",
+"url": "versions_2_1_4.html#autoid_270",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.1.3",
+"url": "versions_2_1_3.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes on the FTL side",
+"url": "versions_2_1_3.html#autoid_271",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Other changes",
+"url": "versions_2_1_3.html#autoid_272",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.1.2",
+"url": "versions_2_1_2.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes in FTL (FreeMarker Template Language)",
+"url": "versions_2_1_2.html#autoid_273",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Other changes",
+"url": "versions_2_1_2.html#autoid_274",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.1.1",
+"url": "versions_2_1_1.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes in FTL (FreeMarker Template Language)",
+"url": "versions_2_1_1.html#autoid_275",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_1_1.html#autoid_276",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.1",
+"url": "versions_2_1.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes in FTL (FreeMarker Template Language)",
+"url": "versions_2_1.html#autoid_277",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes on the Java side",
+"url": "versions_2_1.html#autoid_278",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Other changes",
+"url": "versions_2_1.html#autoid_279",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Differences between the RC1 and final release",
+"url": "versions_2_1.html#autoid_280",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.01",
+"url": "versions_2_01.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "2.0",
+"url": "versions_2_0.html",
+"isFile": true,
+"children": [
+{
+"title": "Bugfixes",
+"url": "versions_2_0.html#autoid_281",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes to the Template language",
+"url": "versions_2_0.html#autoid_282",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes to the API",
+"url": "versions_2_0.html#autoid_283",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Miscellany",
+"url": "versions_2_0.html#autoid_284",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.0 RC3",
+"url": "versions_2_0RC3.html",
+"isFile": true,
+"children": [
+{
+"title": "Bug Fixes",
+"url": "versions_2_0RC3.html#autoid_285",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Changes to the Template Language",
+"url": "versions_2_0RC3.html#autoid_286",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "API changes",
+"url": "versions_2_0RC3.html#autoid_287",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.0 RC2",
+"url": "versions_2_0RC2.html",
+"isFile": true,
+"children": [
+{
+"title": "Changes to Template Language",
+"url": "versions_2_0RC2.html#autoid_288",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "API Changes",
+"url": "versions_2_0RC2.html#autoid_289",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+,
+{
+"title": "2.0 RC1",
+"url": "versions_2_0RC1.html",
+"isFile": true,
+"children": [
+{
+"title": "Support for Numerical operations, both arithmetic and\n boolean, as well as numerical ranges.",
+"url": "versions_2_0RC1.html#autoid_290",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "API Changes",
+"url": "versions_2_0RC1.html#autoid_291",
+"isFile": false,
+"children": [
+]
+}
+,
+{
+"title": "Syntactical Miscellany",
+"url": "versions_2_0RC1.html#autoid_292",
+"isFile": false,
+"children": [
+]
+}
+]
+}
+]
+}
+,
+{
+"title": "Installing FreeMarker",
+"url": "app_install.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Legal",
+"url": "app_legal.html",
+"isFile": true,
+"children": [
+{
+"title": "License",
+"url": "app_license.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Export Control",
+"url": "app_eccn.html",
+"isFile": true,
+"children": [
+]
+}
+]
+}
+]
+}
+,
+{
+"title": "Glossary",
+"url": "gloss.html",
+"isFile": true,
+"children": [
+]
+}
+,
+{
+"title": "Alphabetical Index",
+"url": "alphaidx.html",
+"isFile": true,
+"children": [
+]
+}
+]
+}
+;
[15/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_0.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_0.html b/builds/2.3.26-nightly/versions_2_0.html
new file mode 100644
index 0000000..ba13c93
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_0.html
@@ -0,0 +1,147 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.0 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.0">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_0.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_0.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_0.html"><span itemprop="name">2.0</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.0"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_01.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_0RC3.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_0" itemprop="headline">2.0</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_281" data-menu-target="autoid_281">Bugfixes</a></li><li><a class="page-menu-link" href="#autoid_282" data-menu-target="autoid_282">Changes to the Template language</a></li><li><a class="page-menu-link" href="#autoid_283" data-menu-target="autoid_283">Changes to the API</a></li><li><a class="page-menu-link" href="#autoid_284" data-menu-target="autoid_284">Miscellany</a></li></ul> </div><p>FreeMarker 2.0 final was released on 18 April 2002. The changes
+ with respect to the previous release, 2.0 RC3 are fairly minor.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_281">Bugfixes</h2>
+
+
+ <ul>
+ <li>
+ <p>There were a couple of bugs in handling null values, where
+ Lazarus did not do the same thing as FreeMarker Classic.
+ Traditionally, in FreeMarker, nulls were treated as being
+ equivalent to an empty string in the appropriate context. At
+ this point, to the best of our knowledge, there is backward
+ compatibility with FreeMarker Classic in this respect.</p>
+ </li>
+
+ <li>
+ <p>Literal strings can now include line breaks. This was a
+ backward compatibility issue with FreeMarker Classic that has
+ been fixed.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_282">Changes to the Template language</h2>
+
+
+ <ul>
+ <li>
+ <p>You can use the extra built-in of
+ <code class="inline-code">myString?web_safe</code> to convert a string to its
+ "web-safe" equivalent, where problematic characters such as
+ '<' are converted to &lt;.</p>
+ </li>
+
+ <li>
+ <p>In displaying numbers with a fractional part, the
+ rendering apparatus now respects the decimal separator of the
+ template's locale, so that, for example, in continental Europe,
+ you would see 1,1 and in the U.S. locale, 1.1.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_283">Changes to the API</h2>
+
+
+ <ul>
+ <li>
+ <p>The <code class="inline-code">getAsString()</code> method in the
+ <code class="inline-code">TemplateScalarModel</code> interface now takes a
+ <code class="inline-code">java.util.Locale</code> as a parameter. For the most
+ part, this is a hook for later use. In the default
+ implementation, <code class="inline-code">SimpleScalar</code>, this parameter
+ is unused. If you are implementing this interface yourself, your
+ implementation may ignore the parameter. However, it will be
+ appealing for certain implementations.</p>
+ </li>
+
+ <li>
+ <p>The constructors of <code class="inline-code">FileTemplateCache</code>
+ have changed. If you are using an absolute directory on the file
+ system as the location of your templates, you need to pass in an
+ instance of <code class="inline-code">java.io.File</code> to indicate the
+ location. If you use the constructors that take a string, this
+ is taken to mean relative to the classloader classpath.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_284">Miscellany</h2>
+
+
+ <p>The ant build script build.xml now contains a target that
+ builds a .war file containing the Hello, World and Guestbook
+ examples. It builds a fmexamples.war. For example, if you are using
+ Tomcat in its out-of-the-box configuration, you would place this
+ under <TOMCAT_HOME>/webapps and then you would use
+ http://localhost:8080/fmexamples/servlet/hello and
+ http://localhost:8080/fmexamples/servlet/guestbook for the Hello,
+ World and Guestbook examples respectively.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_01.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_0RC3.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_01.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_01.html b/builds/2.3.26-nightly/versions_2_01.html
new file mode 100644
index 0000000..d9f68f1
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_01.html
@@ -0,0 +1,59 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.01 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.01">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_01.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_01.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_01.html"><span itemprop="name">2.01</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.01"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_1.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_0.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_01" itemprop="headline">2.01</h1>
+</div></div><p>The main improvement is in error reporting. Now exceptions are
+ much more informative since they come with complete line number and
+ column information.</p><p>The only API change between 2.0 and 2.01 was the elimination of
+ the CacheListener/CacheEvent API. Now, if the updating of a template
+ file fails, the exception is thrown back to the caller to handle. If
+ you want logging to occur when a template file is updated
+ successfully, you can override the logFileUpdate() method in
+ FileTemplateCache.</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_1.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_0.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_0RC1.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_0RC1.html b/builds/2.3.26-nightly/versions_2_0RC1.html
new file mode 100644
index 0000000..c6de54a
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_0RC1.html
@@ -0,0 +1,268 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.0 RC1 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.0 RC1">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_0RC1.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_0RC1.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_0RC1.html"><span itemprop="name">2.0 RC1</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.0 RC1"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_0RC2.html"><span>Previous</span></a><a class="paging-arrow next" href="app_install.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_0RC1" itemprop="headline">2.0 RC1</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_290" data-menu-target="autoid_290">Support for Numerical operations, both arithmetic and
+boolean, as well as numerical ranges.</a></li><li><a class="page-menu-link" href="#autoid_291" data-menu-target="autoid_291">API Changes</a></li><li><a class="page-menu-link" href="#autoid_292" data-menu-target="autoid_292">Syntactical Miscellany</a></li></ul> </div><p>The first public release of FreeMarker 2.0 was on 18 March 2002.
+ Here is a summary of the changes in the Lazarus release, with respect
+ to the last stable release of FreeMarker Classic.</p><p><em>NOTA BENE</em>:</p><p>Despite the changes delineated above, the Lazarus release is
+ almost entirely backward-compatible with FreeMarker Classic. We
+ believe that <em>most</em> existing code and templates
+ that work under FreeMarker Classic will continue working under
+ Lazarus, with at most minimal changes. In practice, the most common
+ cases where legacy template code is broken will be where assumptions
+ were made about numbers and strings being equivalent. Note that in
+ FreeMarker 2, 2 + 2 does not result in "22". The String "1" and the
+ number 1 are entirely different animals and thus, any code will be
+ broken if it relies on the boolean expression ("1"==1) being true.
+ There is a "classic compatibility mode" that can be set via:
+ <code class="inline-code">Template.setClassCompatibility()</code> that can be set so
+ that Lazarus emulates some of the quirky behavior of FreeMarker
+ Classic. However, any code that relied on the above "features" of
+ FreeMarker classic really should be reworked. You are less likely to
+ run into the other incompatibilities that are listed above. If you
+ come across any other anomalies, please do tell us about them.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_290">Support for Numerical operations, both arithmetic and
+ boolean, as well as numerical ranges.</h2>
+
+
+ <ul>
+ <li>
+ <p>Scalars can now be either strings or numbers. (In
+ FreeMarker Classic all scalars were strings.) The basic
+ operations allowed are addition, subtraction, multiplication,
+ division, and modulus using the <code class="inline-code">+</code>,
+ <code class="inline-code">-</code>, <code class="inline-code">*</code>,
+ <code class="inline-code">/</code>, and <code class="inline-code">%</code> operators
+ respectively. Arbitrary-precision arithmetic with integers and
+ floating point numbers are provided. Though our goal is
+ definitely to follow the principle of least surprise, for
+ backward compatibility, the <code class="inline-code">+</code> operator still
+ is used for string concatenation. If either the left hand side
+ or the right hand side of <code class="inline-code">lhs + rhs</code> is
+ non-numerical, we revert to interpreting this as string
+ concatenation. Thus, in FreeMarker 2, 2+2 evaluates to the
+ number 4, while any of "2"+2 or 2+"2" or "2"+"2" evaluate to the
+ string "22". In FreeMarker Classic, rather embarrassingly, all
+ of the above, including 2+2, evaluated to the string "22". An
+ attempt to use any other arithmetic operator besides the
+ <code class="inline-code">+</code> with non-numerical operands will cause an
+ exception to be thrown.</p>
+ </li>
+
+ <li>
+ <p>Output of a numerical expression can be made explicit via
+ the alternative <code class="inline-code">#{....}</code> syntax. If the
+ expression within the curly parentheses does not evaluate to a
+ numerical value, an exception is thrown. The older ${....}
+ syntax can evaluate to either a number or a string. In general,
+ if, for logical reasons, the output <em>must</em> be
+ numerical, it is preferable to use the #{...} syntax, since it
+ adds an extra sanity check. Note that if, by some miracle, the
+ character sequence "#{" occurs in your template, you will have
+ to use a workaround to prevent problems. (The <noparse>
+ directive is one possibility.)</p>
+ </li>
+
+ <li>
+ <p>In this release, there is a facility for specifying the
+ number of digits to show after the decimal point. The following
+ code specifies to show at least 3 digits after the decimal point
+ but not more than 6. This is optional. This option is only
+ available if you use the #{...} syntax.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">#{foo + bar ; m3M6} </pre></div>
+
+ <p>(Note that the above is something of a stopgap measure.
+ Future releases will move toward supporting fully
+ internationalization and localization of number and currency
+ formatting.</p>
+ </li>
+
+ <li>
+ <p>Numerical expressions can be used in boolean expressions
+ via the comparison operators: <code class="inline-code">lt</code>,
+ <code class="inline-code">gt</code>, <code class="inline-code">lte</code>, and
+ <code class="inline-code">gte</code>. In the web space, where FreeMarker is
+ most used in practice, using the more natural operators such as
+ < and > would tend to confuse HTML-oriented editors. An
+ attempt to compare non-numerical expressions using these
+ operators leads to a <code class="inline-code">TemplateException</code> being
+ thrown. If, by some coincidence, you have variables named "lt",
+ "gt", "lte", or "gte", you will have to change their names,
+ since they are now keywords in the language.</p>
+ </li>
+
+ <li>
+ <p>Numerical ranges are supported.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list 1990..2001 as year>
+ blah blah in the year ${year} blah
+</#list> </pre></div>
+
+ <p>The left hand and right hand sides of the
+ <code class="inline-code">..</code> operator must be numerical, or an
+ exception is thrown. They also need not be literal numbers, but
+ can be more complex expressions that evaluate to a numerical
+ scalar value. Note that it is also possible to write a range
+ that descends in value:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list 2001..1990 as year>
+ blah blah in the year ${year} blah blah
+</#list> </pre></div>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_291">API Changes</h2>
+
+
+ <ul>
+ <li>
+ <p>The <code class="inline-code">TemplateNumberModel</code> interface and
+ the <code class="inline-code">SimpleNumber</code> implementation were added to
+ support exposing numerical values.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">TemplateListModel</code> API in FreeMarker
+ Classic had some design problems -- particularly in terms of
+ supporting thread-safe code. It has been deprecated in favor of
+ the following API's: <code class="inline-code">TemplateCollectionModel</code>
+ and <code class="inline-code">TemplateSequenceModel</code>. The
+ <code class="inline-code">SimpleList</code> class was refactored to implement
+ the above interfaces (and paradoxically, does not implement the
+ TemplateListModel interface.) Code that uses the deprecated
+ <code class="inline-code">TemplateListModel</code> should be
+ refactored.</p>
+ </li>
+
+ <li>
+ <p>The Expose Package by Attila Szegedi has been made an
+ integral part of the FreeMarker distribution and is now under
+ the freemarker.ext.* hierarchy. This package provides advanced
+ models for representing arbitrary Java objects as template
+ models, for representing XML documents as template models, as
+ well as classes to facilitate the integration of FreeMarker with
+ servlets and Ant.</p>
+ </li>
+
+ <li>
+ <p>In FreeMarker Classic, there were some utility classes
+ such as <code class="inline-code">freemarker.template.utility.Addition</code>
+ etcetera that existed as workarounds for the lack of numerical
+ operations in FreeMarker. Those have been removed and will
+ probably not be missed.</p>
+ </li>
+
+ <li>
+ <p>In FreeMarker Classic, the <code class="inline-code">SimpleScalar</code>
+ object was mutable, it had a <code class="inline-code">setValue</code> method.
+ This was fairly obviously a design mistake. Any code that relied
+ on this must be refactored. Note that in this release, both
+ <code class="inline-code">SimpleScalar</code> and the newly introduced
+ <code class="inline-code">SimpleNumber</code> are both immutable and
+ final.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_292">Syntactical Miscellany</h2>
+
+
+ <ul>
+ <li>
+ <p>The if-elseif-else syntax was introduced. FreeMarker
+ classic only had if-else. This construct should probably (in the
+ opinion of the author of this document -- Revusky) be used in
+ preference to switch-case since the switch-case with
+ fall-through is a notoriously error-prone construct for most
+ mortal men.</p>
+ </li>
+
+ <li>
+ <p>You can now do a multiple assignment in one
+ <assign...> directive. For example: <code class="inline-code"><assign x
+ = 1, y = price*items, message="foo"></code></p>
+ </li>
+
+ <li>
+ <p>A scalar will no longer be interpreted as a one-item list
+ in a <list...> or <#foreach...> block. If you have
+ code that relied on this feature, there is an easy workaround,
+ since you can simply define a list literal with exactly one
+ item.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"> <assign y=[x]>
+ <strong>and then...</strong>
+ <list y as item>...</list> </pre></div>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_0RC2.html"><span>Previous</span></a><a class="paging-arrow next" href="app_install.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_0RC2.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_0RC2.html b/builds/2.3.26-nightly/versions_2_0RC2.html
new file mode 100644
index 0000000..618427e
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_0RC2.html
@@ -0,0 +1,219 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.0 RC2 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.0 RC2">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_0RC2.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_0RC2.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_0RC2.html"><span itemprop="name">2.0 RC2</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.0 RC2"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_0RC3.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_0RC1.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_0RC2" itemprop="headline">2.0 RC2</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_288" data-menu-target="autoid_288">Changes to Template Language</a></li><li><a class="page-menu-link" href="#autoid_289" data-menu-target="autoid_289">API Changes</a></li></ul> </div><p>FreeMarker 2.0 RC 2 was released on 4 April 2002. Here is a
+ summary of changes wrt to the first release.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_288">Changes to Template Language</h2>
+
+
+ <ul>
+ <li>
+ <p>Certain built-in functionality is provided via a new
+ operator, '?'. Thus, <code class="inline-code">myList?size</code> provides the
+ number of elements in a list. Similarly,
+ <code class="inline-code">myString?length</code> provides the length of a
+ string, <code class="inline-code">myString?upper_case</code> puts the string
+ all in capital letters, and <code class="inline-code">myHash?keys</code>
+ provides a sequence containing the keys in the hash. See <a href="ref_builtins.html">Template Language Reference/Built-in Reference</a> for list of all available
+ built-ins.</p>
+ </li>
+
+ <li>
+ <p>Numerical comparisons can now be made using the "natural"
+ operators < and > but there are also "web-safe"
+ alternatives, such as <em>\lt</em> and
+ <em>\gt</em>, since the use of these characters may
+ confuse HTML editors and parsers. Note that these changed
+ between rc1 and rc2, they now start with a backslash. A little
+ asymmetry is the fact that if you use the natural greater-than
+ or greater-than-or-equals operators (i.e. > or >=) the
+ expression must be in parentheses. With any other operator, the
+ parentheses are optional.</p>
+ </li>
+
+ <li>
+ <p>Within an iteration loop -- i.e. a
+ <code class="inline-code">foreach</code> or a <code class="inline-code">list</code> block --
+ the current count in the loop is available as the special
+ variable
+ <code class="inline-code"><em class="code-color">index</em>_count</code>. where
+ <em>index</em> is the name of the variable in
+ the iteration. A boolean variable called
+ <code class="inline-code"><em class="code-color">index</em>_has_next</code> is
+ also defined that indicates whether there are any more items in
+ the iteration after this one. Note that the index starts at
+ zero, so you will often be adding one to it in practice.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code"><#break></code> directive can now be
+ used to break out of a <code class="inline-code"><#foreach...></code> or
+ a <code class="inline-code"><list...></code> loop. (Prior to this
+ version, it only worked within a switch-case block.) There is a
+ new directive called <code class="inline-code"><#stop></code> that, when
+ encountered, simply halts processing of the template. This can
+ be useful for debugging purposes.</p>
+ </li>
+
+ <li>
+ <p>When invoking java methods that have been exposed to the
+ page, using the code in freemarker.ext.*, there are built-ins
+ that allow you to indicate the numerical type that you wish to
+ pass as the value. For instance, if you had two methods, one
+ that takes an int and another that takes a long, and you wanted
+ to pass in a value, you would have to specify which method.
+ <code class="inline-code">myMethod(1?int)</code> or
+ <code class="inline-code">myMethod(1?long)</code>. This is unnecessary if
+ there is only one method of the given name.</p>
+ </li>
+
+ <li>
+ <p>Ranges can be used to get the sublist from a list or the
+ substring of a string. For example:
+ <code class="inline-code">myList[0..3]</code> will return items 0 through 3 of
+ the list in question. Or, for example, you could get all the
+ elements of the list except for the first and last ones via:
+ <code class="inline-code">myList[1..(myList?size-2)]</code></p>
+ </li>
+
+ <li>
+ <p>Or we could get the first 6 characters of a string via
+ <code class="inline-code">myString[0..5]</code></p>
+ </li>
+
+ <li>
+ <p>Lists can be concatenated using the '+' operator.
+ Previously, this overloading of '+' only applied to
+ strings.</p>
+ </li>
+
+ <li>
+ <p>An attempt to compare a number to a string now throws an
+ exception, since it is indicative of a coding error. Note that
+ there is a backward compatibility mode that can be set (see
+ below) that loosens this up in order to be able to process
+ legacy templates.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_289">API Changes</h2>
+
+
+ <ul>
+ <li>
+ <p>The <code class="inline-code">TemplateSequenceModel</code> interface now
+ has a <code class="inline-code">size()</code> method for getting the number of
+ elements in the sequence in question.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">TemplateModelIterator</code> interface now
+ has a <code class="inline-code">hasNext()</code> method.</p>
+ </li>
+
+ <li>
+ <p>The default sequence and hash implementations,
+ <code class="inline-code">freemarker.template.SimpleSequence</code> and
+ <code class="inline-code">freemarker.template.SimpleHash</code> are now
+ unsynchronized. If you need the methods to be synchronized, you
+ can get a synchronized wrapper via the
+ <code class="inline-code">synchronizedWrapper()</code> in either class.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">freemarker.utility.ExtendedList</code> and
+ <code class="inline-code">freemarker.utility.ExtendedHash</code> classes were
+ removed, since all of the extra keys that it defined are now
+ available using the appropriate '?' built-in operation, i.e.
+ <code class="inline-code">myHash?keys</code> or <code class="inline-code">myList?size</code>
+ or <code class="inline-code">myList?last</code>.</p>
+ </li>
+
+ <li>
+ <p>There is a method in
+ <code class="inline-code">java.freemarker.Configuration</code> named
+ <code class="inline-code">setDebugMode()</code> which allows you to decide
+ whether stack traces are simply output to the web client (the
+ best situation in development) or thrown back to the caller to
+ be handled more gracefully (the best situation in
+ production).</p>
+ </li>
+
+ <li>
+ <p>There is a flag that can be set to turn on a processing
+ mode that is more backward-compatible with FreeMarker Classic.
+ This is off by default, but you can set it via
+ <code class="inline-code">Template.setClassicCompatibility(true)</code>. What
+ this does is that it allows scalars to be treated as a
+ single-item list in a list directive. Also, it allows somewhat
+ more looseness about types. In FreeMarker 1.x, <code class="inline-code"><#if
+ x=="1"></code> and <code class="inline-code"><#if x==1></code>
+ were in fact equivalent. This meant that legacy templates might
+ tend to be slack about this. If classic compatibility is not
+ set, an attempt to compare the string "1" with the number 1 will
+ result in an exception being thrown. (Note that it is preferable
+ to get your templates working without the backward compatibility
+ flag, since it usually will require only minor changes. However,
+ for people with a lot of templates and no time to check over
+ them, this flag may be of use.)</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_0RC3.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_0RC1.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_0RC3.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_0RC3.html b/builds/2.3.26-nightly/versions_2_0RC3.html
new file mode 100644
index 0000000..a378259
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_0RC3.html
@@ -0,0 +1,138 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.0 RC3 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.0 RC3">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_0RC3.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_0RC3.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_0RC3.html"><span itemprop="name">2.0 RC3</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.0 RC3"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_0.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_0RC2.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_0RC3" itemprop="headline">2.0 RC3</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_285" data-menu-target="autoid_285">Bug Fixes</a></li><li><a class="page-menu-link" href="#autoid_286" data-menu-target="autoid_286">Changes to the Template Language</a></li><li><a class="page-menu-link" href="#autoid_287" data-menu-target="autoid_287">API changes</a></li></ul> </div><p>FreeMarker 2.0 RC3 was released on 11 April 2002. This release
+ was primarily devoted to fixing bugs that were reported in RC2.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_285">Bug Fixes</h2>
+
+
+ <ul>
+ <li>
+ <p>Variables defined in an <include...> were not
+ available in the enclosing page. This has been fixed.</p>
+ </li>
+
+ <li>
+ <p>The JavaCC parser was not configured to handle Unicode
+ input correctly. Now, Unicode support is working.</p>
+ </li>
+
+ <li>
+ <p>There was a bug when comparing a number with null. It
+ should have returned false, but threw an exception instead. This
+ has been fixed.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_286">Changes to the Template Language</h2>
+
+
+ <ul>
+ <li>
+ <p>The syntax of the include directive has changed. To
+ indicate an unparsed include file, you do as follows:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><include "included.html" ; parsed="n" ></pre></div>
+
+ <p>You can also indicate the encoding of the included file
+ this way:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"> <include "included.html" ; encoding="ISO-8859-5"></pre></div>
+ </li>
+
+ <li>
+ <p>The built-in myString?trim was added for trimming the
+ leading and trailing white-space from strings.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_287">API changes</h2>
+
+
+ <ul>
+ <li>
+ <p>The TemplateEventAdapter machinery was taken out. This was
+ never set up in a very useful manner and we anticipate that
+ version 2.1 will have more complete support for logging
+ events.</p>
+ </li>
+
+ <li>
+ <p>The template caching mechanism was streamlined and
+ simplified.</p>
+ </li>
+
+ <li>
+ <p>The FileTemplateCache can now be configured to load files
+ relative to a class loader, using the Class.getResource() call.
+ This allows templates to be bundled up in .jar files or in a
+ .war file for easy deployment of web-based apps.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_0.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_0RC2.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[14/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_1.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_1.html b/builds/2.3.26-nightly/versions_2_1.html
new file mode 100644
index 0000000..ea18477
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_1.html
@@ -0,0 +1,539 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.1 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.1">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_1.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_1.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_1.html"><span itemprop="name">2.1</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.1"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_1_1.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_01.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_1" itemprop="headline">2.1</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_277" data-menu-target="autoid_277">Changes in FTL (FreeMarker Template Language)</a></li><li><a class="page-menu-link" href="#autoid_278" data-menu-target="autoid_278">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_279" data-menu-target="autoid_279">Other changes</a></li><li><a class="page-menu-link" href="#autoid_280" data-menu-target="autoid_280">Differences between the RC1 and final release</a></li></ul> </div><p>Date of release: 2002-10-17</p><p>Templates and the Java API are <em>not</em> fully
+ compatible with 2.0 releases. You will need to revisit existing code
+ and templates, or use 2.1 for new projects only. Sorry for this
+ inconvenience; FreeMarker has undergone some revolutionary changes
+ since the 1.x series. We hope things will soon be sufficiently mature
+ for us to offer (almost) backward-compatible releases. Note that there
+ is a backward-compatibility flag that can be set via
+ <code class="inline-code">Configuration.setClassicCompatible(true)</code> that
+ causes the new FreeMarker to emulate most of FreeMarker 1.x's
+ quirks.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_277">Changes in FTL (FreeMarker Template Language)</h2>
+
+
+ <ul>
+ <li>
+ <p>More strict, reveals accidental mistakes in the templates,
+ prevents showing incorrect information when something went
+ wrong:</p>
+
+ <ul>
+ <li>
+ <p>An attempt to access an undefined variable causes an
+ error and aborts template processing (by default at least;
+ see later). In earlier versions undefined variables were
+ silently treated as empty (zero-length) strings. However,
+ you can handle undefined variables in the template with some
+ new built-ins. For example,
+ <code class="inline-code">${foo?if_exists}</code> is equivalent with the
+ <code class="inline-code">${foo}</code> of earlier versions. Another way
+ of looking at this is that null values no longer exist from
+ the viewpoint of a template designer. Anything referenced
+ must be a defined variable.</p>
+
+ <p>Note however that the programmer can configure
+ FreeMarker so that it ignores certain errors (say, undefined
+ variables), and continues template processing by skipping
+ the problematic part. This "loose" policy
+ should be used only for sites that don't show critical
+ information.</p>
+ </li>
+
+ <li>
+ <p>New variable type: <a href="gloss.html#gloss.boolean">boolean</a>. Conditions in
+ <code class="inline-code">if</code>/<code class="inline-code">elseif</code> and operands
+ of logical operators (<code class="inline-code">&&</code>,
+ <code class="inline-code">||</code>, <code class="inline-code">!</code>) must be
+ booleans. Empty strings are no longer treated as a logical
+ false.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Local and global variables. More info: <a href="dgui_misc_var.html">Template Author's Guide/Miscellaneous/Defining variables in the template</a></p>
+
+ <ul>
+ <li>
+ <p>Local variables for macros. You can create/replace
+ local variables in macro definition bodies with the <a href="ref_directive_local.html#ref.directive.local"><code>local</code>
+ directive</a></p>
+ </li>
+
+ <li>
+ <p>You can create/replace global (non-local) variables
+ with the <a href="ref_directive_global.html#ref.directive.global"><code>global</code>
+ directive</a></p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>The <a href="ref_directive_include.html#ref.directive.include"><code>include</code></a>
+ directive now by default treats the passed filename as being
+ relative to the including template's path. To specify absolute
+ template paths, you now have to prepend them with a
+ slash.</p>
+ </li>
+
+ <li>
+ <p>The <a href="ref_directive_include.html#ref.directive.include"><code>include</code></a>
+ directive can now use the <em>acquisition
+ algorithm</em> (familiar from the Zope system) to look up
+ the template to include. Basically, if a template is not found
+ where it is looked up first, it is looked up in parent
+ directories. This is however not a default behavior, rather it
+ is triggered by a new syntactic element.</p>
+ </li>
+
+ <li>
+ <p>Strict syntax mode: Allows you to generate arbitrary SGML
+ (XML) without worrying about clashes with FreeMarker directives.
+ For more information read: <a href="ref_depr_oldsyntax.html">Template Language Reference/Deprecated FTL constructs/Old FTL syntax</a></p>
+ </li>
+
+ <li>
+ <p>Terse comments: you can use <code class="inline-code"><#--
+ <em class="code-color">...</em> --></code> instead of
+ <code class="inline-code"><comment><em class="code-color">...</em></comment></code></p>
+ </li>
+
+ <li>
+ <p>Directive that you can use to change the locale (and other
+ settings) inside the template: <a href="ref_directive_setting.html#ref.directive.setting"><code>setting</code></a></p>
+ </li>
+
+ <li>
+ <p>Directive to explicitly flush the output buffer: <a href="ref_directive_flush.html#ref.directive.flush"><code>flush</code></a></p>
+ </li>
+
+ <li>
+ <p>The top-level (root) hash is available via the variable
+ <code class="inline-code">root</code>, which is now a reserved name.</p>
+ </li>
+
+ <li>
+ <p>The misnamed <code class="inline-code">function</code> directive has
+ been renamed to <code class="inline-code">macro</code>.</p>
+ </li>
+
+ <li>
+ <p>String literals support various new <a href="dgui_template_exp.html#topic.escapeSequence">escape sequences</a>,
+ including UNICODE escapes
+ (<code class="inline-code">\x<em class="code-color">CODE</em></code>)</p>
+ </li>
+
+ <li>
+ <p>The <a href="ref_directive_compress.html#ref.directive.compress"><code>compress</code></a>
+ directive is now more conservative in removing line
+ breaks.</p>
+ </li>
+
+ <li>
+ <p>Built-in to capitalize the first word: <a href="ref_builtins_string.html#ref_builtin_cap_first"><code>cap_first</code></a></p>
+ </li>
+
+ <li>
+ <p>Built-in to generate on-the-fly templates: <a href="ref_builtins_expert.html#ref_builtin_interpret"><code>interpret</code></a></p>
+ </li>
+
+ <li>
+ <p><a href="ref_directive_stop.html#ref.directive.stop"><code>stop</code></a>
+ directive has an optional parameter to describe the reason of
+ termination</p>
+ </li>
+
+ <li>
+ <p>Better error messages.</p>
+ </li>
+
+ <li>
+ <p>New variable type: date. <em>Date support is
+ experimental. It can change substantially in the future. Keep
+ this in mind if you use it.</em></p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_278">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p><code class="inline-code">ObjectWrapper</code>: You can put
+ non-<code class="inline-code">TemplateModel</code> objects directly into
+ hashes, sequences and collections, and they will be
+ automatically wrapped with the appropriate
+ <code class="inline-code">TemplateModel</code> implementation. The API of
+ objects that are exposed to templates
+ (<code class="inline-code">Simple<em class="code-color">XXX</em></code>) has
+ been changed according to this, for example in
+ <code class="inline-code">SimpleHash</code> the old <code class="inline-code">put(String key,
+ TemplateModel value)</code> is now <code class="inline-code">put(String key,
+ Object object)</code>. Also, you can pass any kind of object
+ as data-model to <code class="inline-code">Template.process</code>. The
+ alternative reflection based <code class="inline-code">ObjectWrapper</code>
+ can expose the members of any Java object automatically for the
+ designer. More information: <a href="pgui_datamodel_objectWrapper.html">Object wrapping</a>,
+ <a href="pgui_misc_beanwrapper.html">Bean wrapper</a>, <a href="pgui_misc_jythonwrapper.html">Jython wrapper</a>.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">Configuration</code> object was introduced
+ as a central point to hold all your FreeMarker-related global
+ settings, as well as commonly used variables that you want to
+ have available from any template. Also it encapsulates the
+ template cache and can be used to load templates. For more
+ information read <a href="pgui_config.html">Programmer's Guide/The Configuration</a>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">TemplateLoader</code>: pluggable template
+ loader, separates caching from template loading</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">TemplateNumberModel</code>-s do not control
+ their formatting anymore. They just store the data (i.e. a
+ number). Number formatting is done by the FreeMarker core based
+ on the <code class="inline-code">locale</code> and
+ <code class="inline-code">number_format</code> settings. This logic applies to
+ the new experimental date type as well.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">TemplateBooleanModel</code> introduced: Only
+ objects that implements this interface can be used as a boolean
+ in true/false conditions. More info: <a href="pgui_datamodel_scalar.html">Programmer's Guide/The Data Model/Scalars</a></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">TemplateDateModel</code> introduced: objects
+ that implements this interface are recognized as dates and can
+ be locale-sensitively formatted. <em>Date support is
+ experimental in FreeMarker 2.1. It can change substantially in
+ the future. Keep this in mind if you use it.</em></p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">TemplateModelRoot</code> interface was
+ deprecated. As of FreeMarker 2.1, you can simply use any
+ instance of <code class="inline-code">TemplateHashModel</code> instead. This
+ actually is due to a significant architectural change. Variables
+ set or defined in a template are stored in a separate
+ <code class="inline-code">Environment</code> object that only exists while the
+ template is being rendered. Thus, the template doesn't modify
+ the root hash.</p>
+ </li>
+
+ <li>
+ <p>Changes to transformations</p>
+
+ <ul>
+ <li>
+ <p>Completely rewritten
+ <code class="inline-code">TemplateTransformModel</code> interface. More
+ flexible, and does not impose output holding. More
+ information: <a href="pgui_datamodel_directive.html">Programmer's Guide/The Data Model/Directives</a></p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">transform</code> directive now takes
+ an optional set of key/value pairs. <code class="inline-code"><transform
+ myTransform;
+ <em class="code-color">key1</em>=<em class="code-color">value1</em>,
+ <em class="code-color">key2</em>=<em class="code-color">value2</em>
+ <em class="code-color">...</em>></code>. More
+ information: <a href="ref_depr_transform.html#ref.directive.transform"><code>transform</code>
+ directive</a></p>
+ </li>
+
+ <li>
+ <p>The transforms that ship with the FreeMarker core are
+ now available by default to all templates - i.e.
+ <code class="inline-code"><transform html_escape></code> will invoke
+ the
+ <code class="inline-code">freemarker.template.utility.HtmlEscape</code>
+ transform. More information: <a href="pgui_config_sharedvariables.html">Programmer's Guide/The Configuration/Shared variables</a></p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>User-defined <code class="inline-code">TemplateModel</code> objects now
+ can access the runtime environment (read and set variables, get
+ the current locale, etc.) using an
+ <code class="inline-code">Environment</code> instance, which can be obtained
+ by the static
+ <code class="inline-code">Environment.getCurrentEnvironment()</code> method.
+ As a result, <code class="inline-code">TemplateScalarModel.getAsString</code>
+ has been changed: it has no locale parameter.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">TemplateExceptionHandler</code>-s make it
+ possible to define your own rules on what to do when a runtime
+ error occurs (e.g. accessing a non existing variable) during
+ template processing. For example, you can abort template
+ processing (recommended for most sites), or skip the problematic
+ statement and continue template processing (similar to old
+ behavior). DebugMode has been removed, use
+ <code class="inline-code">TemplateExceptionHandler.DEBUG_HANDLER</code> or
+ <code class="inline-code">HTML_DEBUG_HANDLER</code> instead.</p>
+ </li>
+
+ <li>
+ <p>Logging: FreeMarker logs certain events (runtime errors
+ for example). For more information read <a href="pgui_misc_logging.html">Programmer's Guide/Miscellaneous/Logging</a>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">SimpleIterator</code> was removed, but we
+ provide a <code class="inline-code">TemplateCollectionModel</code>
+ implementation: <code class="inline-code">SimpleCollection</code>.</p>
+ </li>
+
+ <li>
+ <p>Arithmetic engine is pluggable
+ (<code class="inline-code">Configuration.setArithmeticEngine</code>). The core
+ distribution comes with two engines:
+ <code class="inline-code">ArithmeticEngine.BIGDECIMAL_ENGINE</code> (the
+ default) that converts all numbers to
+ <code class="inline-code">BigDecimal</code> and then operates on them, and
+ <code class="inline-code">ArithmeticEngine.CONSERVATIVE_ENGINE</code> that
+ uses (more-or-less) the widening conversions of Java language,
+ instead of converting everything to
+ <code class="inline-code">BigDecimal</code>.</p>
+ </li>
+
+ <li>
+ <p>Changes to <code class="inline-code">freemarker.ext.beans</code>
+ package: The JavaBeans adapter layer has suffered several major
+ changes. First, <code class="inline-code">BeansWrapper</code> is no longer a
+ static utility class - you can now create instances of it, and
+ every instance can have its own instance caching policy and
+ security settings. These security settings are also new - you
+ can now create JavaBeans wrappers that hide methods that are
+ considered unsafe or inappropriate in a templating environment.
+ By default, you can no longer call methods like
+ <code class="inline-code">System.exit()</code> from the template (although you
+ can manually turn off these safeguards). The
+ <code class="inline-code">StaticModel</code> and
+ <code class="inline-code">StaticModels</code> classes are gone; their
+ functionality is now replaced with the
+ <code class="inline-code">BeansWrapper.getStaticModels()</code> method.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">freemarker.ext.jython</code> package:
+ FreeMarker can now directly use Jython objects as data-models
+ using the <a href="pgui_misc_jythonwrapper.html">Jython
+ wrapper</a>.</p>
+ </li>
+
+ <li>
+ <p>Changes to <code class="inline-code">freemarker.ext.jdom</code> package:
+ The package now uses the <em>Jaxen</em> package
+ instead of its predecessor, the
+ <em>werken.xpath</em> package to evaluate XPath
+ expressions. Since <em>Jaxen</em> is a successor to
+ <em>werken.xpath</em>, this can be considered to be
+ an upgrade. As a consequence, namespace prefixes are now
+ recognized in XPath expressions and the overall XPath
+ conformance is better.</p>
+ </li>
+
+ <li>
+ <p>Better error reporting: If the processing of a template is
+ aborted by a <code class="inline-code">TemplateException</code> being thrown,
+ or using a <code class="inline-code"><#stop></code> directive,
+ FreeMarker will now output an execution trace with line and
+ column numbers relative to the template source.</p>
+ </li>
+
+ <li>
+ <p>The output is written to a simple
+ <code class="inline-code">Writer</code>; no more
+ <code class="inline-code">PrintWriter</code>. This redesign causes FreeMarker
+ to no longer swallow <code class="inline-code">IOException</code>s during
+ template processing.</p>
+ </li>
+
+ <li>
+ <p>Various API cleanups, primarily the removing of
+ superfluous constructor and method overloads.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_279">Other changes</h2>
+
+
+ <ul>
+ <li>
+ <p>Documentation has been rewritten from scratch</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_280">Differences between the RC1 and final release</h2>
+
+
+ <ul>
+ <li>
+ <p>Added the support for date models and locale-sensitive
+ date formatting. <em>Date support is experimental in
+ FreeMarker 2.1. It can change substantially in the future. Keep
+ this in mind if you use it.</em></p>
+ </li>
+
+ <li>
+ <p>Added the <code class="inline-code">default</code> built-in which makes
+ it possible to specify default values for undefined
+ expressions.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">SimpleIterator</code> has been removed,
+ <code class="inline-code">SimpleCollection</code> has been introduced</p>
+ </li>
+
+ <li>
+ <p>Arithmetic engine is pluggable. The core now contains two
+ arithmetic engines:
+ <code class="inline-code">ArithmeticEngine.BIGDECIMAL_ENGINE</code> and
+ <code class="inline-code">ArithmeticEngine.CONSERVATIVE_ENGINE</code>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">BeansWrapper</code> supports a new exposure
+ level: <code class="inline-code">EXPOSE_NOTHING</code></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">Constants</code> interface was removed.
+ <code class="inline-code"><em class="code-color">...</em>_WRAPPER</code>
+ constants have been moved from <code class="inline-code">Constants</code> to
+ <code class="inline-code">ObjectWrapper</code>,
+ <code class="inline-code">EMPTY_STRING</code> constant was moved to
+ <code class="inline-code">TemplateScalarModel</code>,
+ <code class="inline-code">NOTHING</code> constant was moved to
+ <code class="inline-code">TemplateModel</code>, <code class="inline-code">TRUE</code> and
+ <code class="inline-code">FALSE</code> constants were moved to
+ <code class="inline-code">TemplateBooleanModel</code>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">JAVABEANS_WRAPPER</code> was renamed to
+ <code class="inline-code">BEANS_WRAPPER</code></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">Configuration.get</code> and
+ <code class="inline-code">put</code>, <code class="inline-code">putAll</code> were renamed
+ to <code class="inline-code">getSharedVariable</code> and
+ <code class="inline-code">setSharedVariable</code>,
+ <code class="inline-code">setAllSharedVariables</code></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">Configuration.getClassicCompatibility</code>,
+ <code class="inline-code">setClassicCompatibility</code> were renamed to
+ <code class="inline-code">isClassicCompatible</code>,
+ <code class="inline-code">setClassicCompatible</code></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">Template.process</code> method overloads with
+ <code class="inline-code">useReflection</code> parameter was removed. But now
+ we have <code class="inline-code">setObjectWrapper</code> method in the
+ <code class="inline-code">Configuration</code>, so you can set the preferred
+ root-object wrapper there.</p>
+ </li>
+
+ <li>
+ <p>Some superfluous method overloads were removed; these
+ changes are backward compatible with RC1</p>
+ </li>
+
+ <li>
+ <p>Various minor JavaDoc and Manual improvements</p>
+ </li>
+
+ <li>
+ <p>Bugfix: <code class="inline-code">include</code> directive has
+ calculated the base path of relative paths wrongly</p>
+ </li>
+
+ <li>
+ <p>Bugfix: We have accidentally used a J2SE 1.3 class, but
+ FreeMarker 2.1 must able to run on J2SE 1.2</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_1_1.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_01.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_1_1.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_1_1.html b/builds/2.3.26-nightly/versions_2_1_1.html
new file mode 100644
index 0000000..8c919ae
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_1_1.html
@@ -0,0 +1,125 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.1.1 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.1.1">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_1_1.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_1_1.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_1_1.html"><span itemprop="name">2.1.1</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.1.1"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_1_2.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_1.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_1_1" itemprop="headline">2.1.1</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_275" data-menu-target="autoid_275">Changes in FTL (FreeMarker Template Language)</a></li><li><a class="page-menu-link" href="#autoid_276" data-menu-target="autoid_276">Changes on the Java side</a></li></ul> </div><p>Date of release: 2002-11-04</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_275">Changes in FTL (FreeMarker Template Language)</h2>
+
+
+ <ul>
+ <li>
+ <p>Multi-type variables that are both string and number or
+ string and date are now output using their number or date value
+ instead of the string value when used in the
+ <code class="inline-code">${...}</code> interpolation. This practically makes
+ the string part of a string/number or a string/date variables
+ useless.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: operator "or" (<code class="inline-code">||</code>)
+ worked wrongly when its left operand was a composite expression
+ (e.g., the second <code class="inline-code">||</code> in <code class="inline-code">false ||
+ true || false</code>; this was evaluated to
+ <code class="inline-code">false</code>, but it should be
+ <code class="inline-code">true</code>)</p>
+ </li>
+
+ <li>
+ <p>Bugfix: Less-than sign inside comments confused the FTL
+ parser (e.g. <code class="inline-code"><#-- blah < blah --></code>);
+ it commented out everything after the problematic
+ comment.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: Comparing two numerical constants (e.g. <code class="inline-code">3
+ == 3</code>) caused internal error in the FTL parser, and
+ aborted template processing with error.</p>
+ </li>
+
+ <li>
+ <p>Experimental date/time type support was removed, since it
+ seems that this initial implementation was misguided. FreeMarker
+ 2.2 will certainly support data/time.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_276">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>Bugfix: <code class="inline-code">Number</code>s wrapped with
+ <code class="inline-code">BEANS_WRAPPER</code> was displayed with the
+ <code class="inline-code">toString()</code> method of wrapped object. Now they
+ are rendered according to the <code class="inline-code">number_format</code>
+ setting, because multi-type variables that are both string and
+ number are now output using their number value instead of the
+ string value.</p>
+ </li>
+
+ <li>
+ <p>Experimental date/time type support was removed, since it
+ seems that this initial implementation was misguided. FreeMarker
+ 2.2 will certainly support data/time.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_1_2.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_1.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_1_2.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_1_2.html b/builds/2.3.26-nightly/versions_2_1_2.html
new file mode 100644
index 0000000..81203aa
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_1_2.html
@@ -0,0 +1,130 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.1.2 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.1.2">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_1_2.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_1_2.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_1_2.html"><span itemprop="name">2.1.2</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.1.2"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_1_3.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_1_1.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_1_2" itemprop="headline">2.1.2</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_273" data-menu-target="autoid_273">Changes in FTL (FreeMarker Template Language)</a></li><li><a class="page-menu-link" href="#autoid_274" data-menu-target="autoid_274">Other changes</a></li></ul> </div><p>Date of release: 2002-11-28</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_273">Changes in FTL (FreeMarker Template Language)</h2>
+
+
+ <ul>
+ <li>
+ <p><code class="inline-code">FreeMarkerServlet</code> now has a setting for
+ the <code class="inline-code">Content-Type</code> header of the response,
+ defaulting to <code class="inline-code">text/html</code>. Previously it set no
+ content type, which made it not play nicely when integrated with
+ software that expected it (i.e. OpenSymphony SiteMesh).</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">FreeMarkerServlet</code> now works correctly
+ when mapped to an URL extension instead of URL path
+ prefix.</p>
+ </li>
+
+ <li>
+ <p>You can emulate <code class="inline-code">include</code> directive call
+ within Java code by calling
+ <code class="inline-code">Environment.include(<em class="code-color">templateName</em>,
+ <em class="code-color">charset</em>,
+ <em class="code-color">parse</em>)</code>.</p>
+ </li>
+ </ul>
+
+ <ul>
+ <li>
+ <p>Bugfix: When <code class="inline-code">Template.process()</code> was
+ called from another template processing, it set
+ <code class="inline-code">currentEnvironment</code> to null when it returned,
+ thus crashed the parent template processing.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: the <code class="inline-code">_descendant</code> key in JDOM
+ support incorrectly left the document root element out of the
+ result when applied to a Document node.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: because we incorrectly assumed certain behavior of
+ JDK 1.4 Beans introspector, calls to public interface methods on
+ non-public classes that implement the interface were causing
+ exceptions on JDK 1.4</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_274">Other changes</h2>
+
+
+ <ul>
+ <li>
+ <p>Various minor supplements to the manual.</p>
+ </li>
+
+ <li>
+ <p>Documentation HTML pages don't try to load the SourceForge
+ logo from the Internet anymore.</p>
+ </li>
+
+ <li>
+ <p>The default ant target is <code class="inline-code">jar</code>, not
+ <code class="inline-code">dist</code>.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_1_3.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_1_1.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_1_3.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_1_3.html b/builds/2.3.26-nightly/versions_2_1_3.html
new file mode 100644
index 0000000..a7e5335
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_1_3.html
@@ -0,0 +1,94 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.1.3 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.1.3">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_1_3.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_1_3.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_1_3.html"><span itemprop="name">2.1.3</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.1.3"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_1_4.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_1_2.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_1_3" itemprop="headline">2.1.3</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_271" data-menu-target="autoid_271">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_272" data-menu-target="autoid_272">Other changes</a></li></ul> </div><p>Date of release: 2002-12-09</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_271">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>Bugfix: <code class="inline-code">cap_first</code> built-in did what
+ <code class="inline-code">double</code> built-in does.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_272">Other changes</h2>
+
+
+ <ul>
+ <li>
+ <p>The official extension of FreeMarker template files is
+ <code class="inline-code">ftl</code> from now, not <code class="inline-code">fm</code>.
+ (This is the name of the template language; FTL, for FreeMarker
+ Template Language.) Of course you can use any extensions, since
+ FreeMarker does not deal with the file extension. But we
+ recommend <code class="inline-code">ftl</code> extension as default.</p>
+ </li>
+
+ <li>
+ <p>Web application examples got tweaked again, as under JDK
+ 1.4 a class in an explicit (named) package can no longer import
+ classes from the default (unnamed) package. Our webapp example
+ was using classes in the default package, they are now moved
+ into named packages.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_1_4.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_1_2.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_1_4.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_1_4.html b/builds/2.3.26-nightly/versions_2_1_4.html
new file mode 100644
index 0000000..80de0ac
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_1_4.html
@@ -0,0 +1,73 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.1.4 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.1.4">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_1_4.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_1_4.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_1_4.html"><span itemprop="name">2.1.4</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.1.4"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_1_5.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_1_3.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_1_4" itemprop="headline">2.1.4</h1>
+</div></div><p>Date of release: 2002-12-26</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_270">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>Bugfix: Log4J is now found when automatically discovering
+ the logging library to use.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: An exception is no longer thrown in the static
+ initializer of the <code class="inline-code">Configuration</code> if the
+ directory specified in the <code class="inline-code">"user.dir"</code> system
+ property is not readable.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_1_5.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_1_3.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_1_5.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_1_5.html b/builds/2.3.26-nightly/versions_2_1_5.html
new file mode 100644
index 0000000..0277751
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_1_5.html
@@ -0,0 +1,88 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.1.5 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.1.5">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_1_5.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_1_5.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_1_5.html"><span itemprop="name">2.1.5</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.1.5"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_2.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_1_4.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_1_5" itemprop="headline">2.1.5</h1>
+</div></div><p>Date of release: 2003-02-08</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_269">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>Bugfix: Fixed a bug that forced the cache to frequently
+ reload templates accessed through URL and multi template
+ loaders: Templates loaded with
+ <code class="inline-code">URLTemplateLoader</code> subclasses and
+ <code class="inline-code">MultiTemplateLoader</code> was removed from the
+ template cache after the template update delay has elapsed (5
+ seconds by default) even if the template file was unchanged.
+ This can cause lot of extra load for a high-traffic server if
+ you have many templates or if the template update delay was set
+ to 0 second.)</p>
+ </li>
+
+ <li>
+ <p>Bugfix: Many anomalies in the
+ <code class="inline-code">JythonWrapper</code> were resolved, making the
+ integration with Jython much smoother: Jython wrapper can now
+ wrap arbitrary Java objects, not only
+ <code class="inline-code">PyObject</code>-s. If an object is passed to the
+ wrapper that is neither a <code class="inline-code">TemplateModel</code>, nor
+ a <code class="inline-code">PyObject</code>, it is first coerced into a
+ <code class="inline-code">PyObject</code> using Jython's own wrapping
+ machinery, and then wrapped into a
+ <code class="inline-code">TemplateModel</code> as any other
+ <code class="inline-code">PyObject</code>.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_2.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_1_4.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[41/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/dgui_quickstart_basics.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/dgui_quickstart_basics.html b/builds/2.3.26-nightly/dgui_quickstart_basics.html
new file mode 100644
index 0000000..be35670
--- /dev/null
+++ b/builds/2.3.26-nightly/dgui_quickstart_basics.html
@@ -0,0 +1,138 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Template + data-model = output - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Template + data-model = output">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/dgui_quickstart_basics.html">
+<link rel="canonical" href="http://freemarker.org/docs/dgui_quickstart_basics.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui.html"><span itemprop="name">Template Author's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_quickstart.html"><span itemprop="name">Getting Started</span></a></li><li class="step-3"
itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_quickstart_basics.html"><span itemprop="name">Template + data-model = output</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Author\'s Guide","Getting Started","Template + data-model = output"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="dgui_quickstart.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_quickstart_datamodel.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="dgui_quickstart_basics" itemprop="headline">Template + data-model = output</h1>
+</div></div><p>Let's assume that you need a HTML page on a website, similar to
+ this:</p>
+
+<div class="code-wrapper"><pre class="code-block code-output"><html>
+<head>
+ <title>Welcome!</title>
+</head>
+<body>
+ <h1>Welcome <strong>John Doe</strong>!</h1>
+ <p>Our latest product:
+ <a href="<strong>products/greenmouse.html</strong>"><strong>green mouse</strong></a>!
+</body>
+</html></pre></div><p>But the user's name ("John Doe" above) depends on who the
+ logged-in user is, and the latest product information should come from
+ a database. Because this data changes, you cannot you cannot use
+ static HTML. Instead, you can use a <strong>template</strong> of the desired output. The template is
+ the same as the static HTML would be, except that it contains some
+ instructions to FreeMarker that makes it dynamic:</p>
+
+<div class="code-wrapper"><pre class="code-block code-template"><a name="example.first"></a><html>
+<head>
+ <title>Welcome!</title>
+</head>
+<body>
+ <h1>Welcome <strong>${user}</strong>!</h1>
+ <p>Our latest product:
+ <a href="<strong>${latestProduct.url}</strong>"><strong>${latestProduct.name}</strong></a>!
+</body>
+</html></pre></div><p>The template is stored on the Web server, usually just like the
+ static HTML page would be. But whenever someone visits this page,
+ FreeMarker will step in and transform the template on-the-fly to plain
+ HTML by replacing the
+ <code class="inline-code">${<em class="code-color">...</em>}</code>-s with up-to-date
+ content, and send the result to the visitor's Web browser. So the
+ visitor's Web browser will receive something like the first example
+ HTML (i.e., plain HTML without FreeMarker instructions), and it will
+ not perceive that FreeMarker is used on the server. (Of course, the
+ template file stored on the Web server is not changed by this; the
+ substitutions only appear in the Web server's response.)</p><p>Note that the template doesn't contain the programming logic to
+ find out who the current visitor is, or to query the database to get
+ the latest product. The data to be displayed is prepared outside
+ FreeMarker, usually by parts written in some "real"
+ programming language like Java. The template author needn't know how
+ these values were calculated. In fact, the way these values are
+ calculated can be completely changed while the templates can remain
+ exactly the same, and also, the look of the page can be completely
+ changed without touching anything but the template. This separation of
+ presentation logic and business logic can be especially useful when
+ the template authors (designers) and the programmers are different
+ individuals, but also helps managing application complexity if they
+ are the same person. Keeping templates focused on presentation issues
+ (visual design, layout and formatting) is a key for using template
+ engines like FreeMarker efficiently.</p><p>The totality of data that was prepared for the template
+ is called the <strong>data-model</strong>. As far as
+ the template author is concerned, the data-model is a tree-like
+ structure (like folders and files on your hard disk), which, in this
+ case, could be visualized as:</p>
+
+<div class="code-wrapper"><pre class="code-block code-data-model">(root)
+ |
+ +- <strong>user</strong> = "Big Joe"
+ |
+ +- <strong>latestProduct</strong>
+ |
+ +- <strong>url</strong> = "products/greenmouse.html"
+ |
+ +- <strong>name</strong> = "green mouse"</pre></div> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>The above is just a visualization; the data-model is not in a
+ textual format, it's from Java objects. For the Java programmers,
+ the root is perhaps a Java object with <code class="inline-code">getUser()</code>
+ and <code class="inline-code">getLatestProduct()</code> methods, or maybe a Java
+ <code class="inline-code">Map</code> with <code class="inline-code">"user"</code> and
+ <code class="inline-code">"latestProducts"</code> keys. Similarly,
+ <code class="inline-code">latestProduct</code> is perhaps a Java Object with
+ <code class="inline-code">getUrl()</code> and <code class="inline-code">getName()</code>
+ methods.</p>
+ </div>
+<p>Earlier, you have picked values from this data-model, with the
+ <code class="inline-code">user</code> and <code class="inline-code">latestProduct.name</code>
+ expressions. If we go on with the analogy that the data model is like
+ a file system, then "(root)" and
+ <code class="inline-code">latestProduct</code> correspond to directories (folders),
+ and <code class="inline-code">user</code>, <code class="inline-code">url</code> and
+ <code class="inline-code">name</code> are files in those directories.</p><p>To recapitulate, a template and a data-model is needed for
+ FreeMarker to generate the output (like the HTML shown first):</p><p><span class="marked-template">Template</span> + <span class="marked-data-model">data-model</span> = <span class="marked-output">output</span></p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="dgui_quickstart.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_quickstart_datamodel.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/dgui_quickstart_datamodel.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/dgui_quickstart_datamodel.html b/builds/2.3.26-nightly/dgui_quickstart_datamodel.html
new file mode 100644
index 0000000..5f5b57e
--- /dev/null
+++ b/builds/2.3.26-nightly/dgui_quickstart_datamodel.html
@@ -0,0 +1,199 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>The data-model at a glance - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="The data-model at a glance">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/dgui_quickstart_datamodel.html">
+<link rel="canonical" href="http://freemarker.org/docs/dgui_quickstart_datamodel.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui.html"><span itemprop="name">Template Author's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_quickstart.html"><span itemprop="name">Getting Started</span></a></li><li class="step-3"
itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_quickstart_datamodel.html"><span itemprop="name">The data-model at a glance</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Author\'s Guide","Getting Started","The data-model at a glance"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="dgui_quickstart_basics.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_quickstart_template.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="dgui_quickstart_datamodel" itemprop="headline">The data-model at a glance</h1>
+</div></div><p>As you have seen, the data-model is basically a tree. This tree
+ can be arbitrarily complicated and deep, for example:</p>
+
+<div class="code-wrapper"><pre class="code-block code-data-model"><a name="example.qStart.dataModelWithHashes"></a>(root)
+ |
+ +- animals
+ | |
+ | +- mouse
+ | | |
+ | | +- size = "small"
+ | | |
+ | | +- price = 50
+ | |
+ | +- elephant
+ | | |
+ | | +- size = "large"
+ | | |
+ | | +- price = 5000
+ | |
+ | +- python
+ | |
+ | +- size = "medium"
+ | |
+ | +- price = 4999
+ |
+ +- message = "It is a test"
+ |
+ +- misc
+ |
+ +- foo = "Something"</pre></div><p>The variables that act like directories (the root,
+ <code class="inline-code">animals</code>, <code class="inline-code">mouse</code>,
+ <code class="inline-code">elephant</code>, <code class="inline-code">python</code>,
+ <code class="inline-code">misc</code>) are called <strong>hashes</strong>. Hashes store other variables (the so
+ called <a name="topic.dataModel.subVar"></a><em>sub
+ variables</em>) by a lookup name (e.g., "animals",
+ "mouse" or "price").</p><p>The variables that store a single value
+ (<code class="inline-code">size</code>, <code class="inline-code">price</code>,
+ <code class="inline-code">message</code> and <code class="inline-code">foo</code>) are called
+ <strong>scalars</strong>.</p><p><a name="topic.qStart.accessVariables"></a>When you want to
+ use a subvariable in a template, you specify its path from the root,
+ and separate the steps with dots. To access the
+ <code class="inline-code">price</code> of a <code class="inline-code">mouse</code>, you start from
+ the root and go into <code class="inline-code">animals</code>, and then go into
+ <code class="inline-code">mouse</code> then go into <code class="inline-code">price</code>. So you
+ write <code class="inline-code">animals.mouse.price</code>.</p><p>Another important kind of variables are <strong>sequences</strong>. They store subvariables like hashes,
+ but here subvariables doesn't have a name, they are just items in a
+ list. For example, in this data-model, <code class="inline-code">animals</code> and
+ <code class="inline-code">misc.fruits</code> are sequences:</p>
+
+<div class="code-wrapper"><pre class="code-block code-data-model"><a name="example.qStart.dataModelWithSequences"></a>(root)
+ |
+ +- animals
+ | |
+ | +- (1st)
+ | | |
+ | | +- name = "mouse"
+ | | |
+ | | +- size = "small"
+ | | |
+ | | +- price = 50
+ | |
+ | +- (2nd)
+ | | |
+ | | +- name = "elephant"
+ | | |
+ | | +- size = "large"
+ | | |
+ | | +- price = 5000
+ | |
+ | +- (3rd)
+ | |
+ | +- name = "python"
+ | |
+ | +- size = "medium"
+ | |
+ | +- price = 4999
+ |
+ +- misc
+ |
+ +- fruits
+ |
+ +- (1st) = "orange"
+ |
+ +- (2nd) = "banana"</pre></div><p>To access a subvariable of a sequence you use a numerical index
+ in square brackets. Indexes start from 0 (it's a programmer tradition
+ to start with 0), thus the index of the 1st item is 0, the index of
+ the 2nd item is 1, and so on. So to get the name of the first animal
+ you write <code class="inline-code">animals[0].name</code>. To get the second item
+ in <code class="inline-code">misc.fruits</code> (the string
+ <code class="inline-code">"banana"</code>) you write
+ <code class="inline-code">misc.fruits[1]</code>. (In practice, you usually just walk
+ through sequences in order, not caring about the index, but that will
+ be <a href="dgui_quickstart_template.html#topic.tutorial.list">shown later</a>.)</p><p>Scalars can be further divided into these categories:</p><ul>
+ <li>
+ <p>String: Text, that is, an arbitrary sequence of characters
+ such as ''m'', ''o'', ''u'', ''s'', ''e'' above. For example the
+ <code class="inline-code">name</code>-s and <code class="inline-code">size</code>-s are
+ strings above.</p>
+ </li>
+
+ <li>
+ <p>Number: It's a numerical value, like the
+ <code class="inline-code">price</code>-s above. The string
+ <code class="inline-code">"50"</code> and the number <code class="inline-code">50</code> are
+ two totally different things in FreeMarker. The former is just a
+ sequence of two characters (which happens to be readable as a
+ number for humans), while the latter is a numerical value that you
+ can use in arithmetical calculations.</p>
+ </li>
+
+ <li>
+ <p>Date-like: Either a date-time (stores a date with time of
+ the day), or a date (no time of day), or a time (time of day, no
+ date).</p>
+ </li>
+
+ <li>
+ <p>Boolean: A true/false (yes/no, on/off, etc.) thing. Like
+ animals could have a <code class="inline-code">protected</code> subvariable,
+ which store if the animal is protected or not.</p>
+ </li>
+ </ul><p>Summary:</p><ul>
+ <li>
+ <p>The data-model can be visualized as a tree.</p>
+ </li>
+
+ <li>
+ <p>Scalars store a single value. The value can be a string or a
+ number or a date-time/date/time or a boolean.</p>
+ </li>
+
+ <li>
+ <p>Hashes are containers that store other variables and
+ associate them with a unique lookup name.</p>
+ </li>
+
+ <li>
+ <p>Sequences are containers that store other variables in an
+ ordered sequence. The stored variables can be retrieved via their
+ numerical index, starting from 0.</p>
+ </li>
+ </ul> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>There are other, more advanced value types that we don't cover
+ here, such as methods and directives.</p>
+ </div>
+<div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="dgui_quickstart_basics.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_quickstart_template.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/dgui_quickstart_template.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/dgui_quickstart_template.html b/builds/2.3.26-nightly/dgui_quickstart_template.html
new file mode 100644
index 0000000..9626066
--- /dev/null
+++ b/builds/2.3.26-nightly/dgui_quickstart_template.html
@@ -0,0 +1,707 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>The template at a glance - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="The template at a glance">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/dgui_quickstart_template.html">
+<link rel="canonical" href="http://freemarker.org/docs/dgui_quickstart_template.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui.html"><span itemprop="name">Template Author's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_quickstart.html"><span itemprop="name">Getting Started</span></a></li><li class="step-3"
itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_quickstart_template.html"><span itemprop="name">The template at a glance</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Author\'s Guide","Getting Started","The template at a glance"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="dgui_quickstart_datamodel.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_datamodel.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="dgui_quickstart_template" itemprop="headline">The template at a glance</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_2" data-menu-target="autoid_2">Some basic directives</a><ul><li><a class="page-menu-link" href="#autoid_3" data-menu-target="autoid_3">The if directive</a></li><li><a class="page-menu-link" href="#autoid_4" data-menu-target="autoid_4">The list directive</a></li><li><a class="page-menu-link" href="#autoid_5" data-menu-target="autoid_5">The include directive</a></li></ul></li><li><a class="page-menu-link" href="#autoid_6" data-menu-target="autoid_6">Using directives together</a></li><li><a class="page-menu-link" href="#autoid_7" data-menu-target="autoid_7">Using built-ins</a></li><li><a class="page-menu-link" href="#autoid_8" data-menu-target="autoid_8">Dealing with missing variables</a></li><li><a class="page-menu-link" href="#dgui_quickstart_template_autoescaping" data-menu-target="dgui_quickstart_template_autoescaping">Escaping for HTML, XML and other markup</a></li></ul> </div><p>The simplest template is a plain HTML file (or whateve
r text
+ file; FreeMarker is not confined to HTML). When the client visits that
+ page, FreeMarker will send that HTML to the client as is. However if
+ you want that page to be more dynamic then you begin to put special
+ parts into the HTML which will be understood by FreeMarker:</p><ul>
+ <li>
+ <p><code class="inline-code">${<em class="code-color">...</em>}</code>:
+ FreeMarker will replace it in the output with the actual value of
+ the expression inside the curly brackets. They are called
+ <strong>interpolation</strong>s.</p>
+ </li>
+
+ <li>
+ <p><strong>FTL tags</strong> (for FreeMarker
+ Template Language tags): FTL tags are a bit similar to HTML tags,
+ but they are instructions to FreeMarker and will not be printed to
+ the output. The name of these tags start with
+ <code class="inline-code">#</code>. (User-defined FTL tags use
+ <code class="inline-code">@</code> instead of <code class="inline-code">#</code>, but they are
+ an advanced topic.)</p>
+ </li>
+
+ <li>
+ <p><strong>Comments:</strong> Comments are
+ similar to HTML comments, but they are delimited by
+ <code class="inline-code"><#--</code> and <code class="inline-code">--></code>. Unlike
+ HTML comments, FTL comments won't get into the output (won't be
+ visible in the page source for the visitor), because FreeMarker
+ skips them.</p>
+ </li>
+ </ul><p>Anything not an FTL tag or an interpolation or comment is
+ considered static text and will not be interpreted by FreeMarker; it
+ is just printed to the output as-is.</p><p>With FTL tags you refer to so-called <strong>directives</strong>. This is the same kind of
+ relationship as between HTML tags (e.g.:
+ <code class="inline-code"><table></code> and
+ <code class="inline-code"></table></code>) and HTML elements (e.g., the
+ <code class="inline-code">table</code> element) to which you refer to with the HTML
+ tags. (If you don't understand this difference then consider "FTL tag"
+ and "directive" synonyms.)</p> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>You can easily try writing templates on <a href="http://freemarker-online.kenshoo.com/">http://freemarker-online.kenshoo.com/</a></p>
+ </div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_2">Some basic directives</h2>
+
+
+ <p>Here we will look at some of the most commonly used directives
+ (<a href="ref_directives.html">but there are much
+ more</a>).</p>
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_3">The if directive</h3>
+
+
+ <p>With the <code class="inline-code">if</code> directive you can
+ conditionally skip a section of the template. For example, assume
+ that in the <a href="dgui_quickstart_basics.html#example.first">very first
+ example</a> you want to greet your boss, Big Joe, differently
+ than other users:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><html>
+<head>
+ <title>Welcome!</title>
+</head>
+<body>
+ <h1>
+ Welcome ${user}<strong><#if user == "Big Joe"></strong>, our beloved leader<strong></#if></strong>!
+ </h1>
+ <p>Our latest product:
+ <a href="${latestProduct.url}">${latestProduct.name}</a>!
+</body>
+</html></pre></div>
+
+ <p>Here you have told FreeMarker that the ", our beloved
+ leader" should be there only if the value of the variable
+ <code class="inline-code">user</code> is equal to the string <code class="inline-code">"Big
+ Joe"</code>. In general, things between <code class="inline-code"><#if
+ <em class="code-color">condition</em>></code> and
+ <code class="inline-code"></#if></code> tags are skipped if
+ <code class="inline-code"><em class="code-color">condition</em></code> is false
+ (the boolean value).</p>
+
+ <p>Let's look at
+ <code class="inline-code"><em class="code-color">condition</em></code> more
+ closely: <code class="inline-code">==</code> is an operator that tests if the
+ values at its left and right side are equivalent, and the results
+ is a boolean value, true or false accordingly. On the left side of
+ <code class="inline-code">==</code> I have <a href="dgui_quickstart_datamodel.html#topic.qStart.accessVariables">referenced a
+ variable</a> with the syntax that should be already familiar;
+ this will be replaced with the value of the variable. In general,
+ unquoted words inside directives or interpolations are treated as
+ references to variables. On the right side I have specified a
+ literal string. Literal strings in templates must
+ <em>always</em> be put inside quotation marks.</p>
+
+ <p>This will print "Pythons are free today!" if
+ their price is 0:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#if animals.python.price == <strong>0</strong>>
+ Pythons are free today!
+</#if></pre></div>
+
+ <p>Similarly as earlier when a string was specified directly,
+ here a number is specified directly (<code class="inline-code">0</code>). Note
+ that the number is <em>not</em> quoted. If you quoted
+ it (<code class="inline-code">"0"</code>), FreeMarker would misinterpret it as a
+ string literal, and because the price to compare it to is a
+ number, you get an error.</p>
+
+ <p>This will print "Pythons are not free today!" if their price
+ is not 0:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#if animals.python.price <strong>!=</strong> 0>
+ Pythons are not free today!
+</#if></pre></div>
+
+ <p>As you probably guessed, <code class="inline-code">!=</code> means
+ "not equals".</p>
+
+ <p>You can write things like this too (using <a href="dgui_quickstart_datamodel.html#example.qStart.dataModelWithHashes">the data-model used
+ to demonstrate hashes</a>):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#if <strong>animals.python.price < animals.elephant.price</strong>>
+ Pythons are cheaper than elephants today.
+</#if></pre></div>
+
+ <p>With the <code class="inline-code"><#else></code> tag you can
+ specify what to do if the condition is false. For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#if animals.python.price < animals.elephant.price>
+ Pythons are cheaper than elephants today.
+<strong><#else></strong>
+ Pythons are not cheaper than elephants today.
+</#if></pre></div>
+
+ <p>This prints "Pythons are cheaper than elephants
+ today." if the price of python is less than the price of
+ elephant, or else it prints "Pythons are not cheaper than
+ elephants today." You can refine this further by using
+ <code class="inline-code">elseif</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#if animals.python.price < animals.elephant.price>
+ Pythons are cheaper than elephants today.
+<strong><#elseif animals.elephant.price < animals.python.price></strong>
+ Elephants are cheaper than pythons today.
+<#else>
+ Elephants and pythons cost the same today.
+</#if></pre></div>
+
+ <p>If you have a variable with boolean value (a true/false
+ thing) then you can use it directly as the
+ <code class="inline-code"><em class="code-color">condition</em></code> of
+ <code class="inline-code">if</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#if animals.python.protected>
+ Pythons are protected animals!
+</#if></pre></div>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_4">The list directive</h3>
+
+
+ <a name="topic.tutorial.list"></a>
+
+ <p>This is needed when you want to list something. For example
+ if you merge this template with the <a href="dgui_quickstart_datamodel.html#example.qStart.dataModelWithSequences">data-model used
+ earlier to demonstrate sequences</a>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><p>We have these animals:
+<table border=1>
+ <strong><#list animals as animal></strong>
+ <tr><td>${<strong>animal</strong>.name}<td>${<strong>animal</strong>.price} Euros
+ <strong></#list></strong>
+</table></pre></div>
+
+ <p>then the output will be:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"><p>We have these animals:
+<table border=1>
+ <strong><tr><td>mouse<td>50 Euros
+ <tr><td>elephant<td>5000 Euros
+ <tr><td>python<td>4999 Euros</strong>
+</table></pre></div>
+
+ <p>The generic form of the <code class="inline-code">list</code> directive
+ is:<code class="inline-code"> <#list <em class="code-color">sequence</em> as
+ <em class="code-color">loopVariable</em>><em class="code-color">repeatThis</em></#list></code>.
+ The <code class="inline-code"><em class="code-color">repeatThis</em></code> part
+ will be repeated for each item in the sequence that you have
+ specified with
+ <code class="inline-code"><em class="code-color">sequence</em></code>, one after
+ the other, starting from the first item. In all repetitions
+ <code class="inline-code"><em class="code-color">loopVariable</em></code> will
+ hold the value of the current item. This variable exists only
+ between the <code class="inline-code"><#list
+ <em class="code-color">...</em>></code> and
+ <code class="inline-code"></#list></code> tags.</p>
+
+ <p>The <code class="inline-code"><em class="code-color">sequence</em></code>
+ can be any kind of expression. For example we could list the
+ fruits of the example data model like this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><ul>
+<strong><#list misc.fruits as fruit></strong>
+ <li>${fruit}
+<strong></#list></strong>
+</ul></pre></div>
+
+ <p>The <code class="inline-code">misc.fruits</code> expression should be
+ familiar to you; it <a href="dgui_quickstart_datamodel.html#topic.qStart.accessVariables">references a variable in
+ the data-model</a>.</p>
+
+ <p>A problem with the above example is that if we happen to
+ have 0 fruits, it will still print an empty
+ <code class="inline-code"><ul></ul></code> instead of just nothing.
+ To avoid that, you can use this form of
+ <code class="inline-code">list</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list misc.fruits>
+ <ul>
+ <strong> <#items as fruit></strong>
+ <li>${fruit}
+ <strong> </#items></strong>
+ </ul>
+</#list></pre></div>
+
+ <p>Here, the <code class="inline-code">list</code> directive represents the
+ listing as a whole, and only the part inside the
+ <code class="inline-code">items</code> directive is repeated for each fruit. If
+ we have 0 fruits, everything inside <code class="inline-code">list</code> is
+ skipped, hence we will not have <code class="inline-code">ul</code> tags in
+ case.</p>
+
+ <p>Another frequent listing-related task: let's list the fruits
+ separating them with something, like a comma:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><p>Fruits: <#list misc.fruits as fruit>${fruit}<strong><#sep>, </strong></#list></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"><p>Fruits: orange, banana</pre></div>
+
+ <p>The section covered by <code class="inline-code">sep</code> (which we
+ could be written like this too:
+ <code class="inline-code"><em class="code-color">...</em><#sep>,
+ </#sep></#list></code>) will be only executed when
+ there will be a next item. Hence there's no comma after the last
+ fruit.</p>
+
+ <p>Here again, what if we have 0 fruits? Just printing
+ "Fruits:" and then nothing is awkward. A
+ <code class="inline-code">list</code>, just like an <code class="inline-code">if</code>, can
+ have an <code class="inline-code">else</code>, which is executed if there were 0
+ list items:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><p>Fruits: <#list misc.fruits as fruit>${fruit}<#sep>, <strong><#else>None</strong></#list></pre></div>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>As a matter of fact, this simplistic example could be
+ written like this, but it uses language devices that are off
+ topic here:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><p>Fruits: ${fruits?join(", ", "None")}</pre></div>
+ </div>
+
+
+ <p>All these directives (<code class="inline-code">list</code>,
+ <code class="inline-code">items</code>, <code class="inline-code">sep</code>,
+ <code class="inline-code">else</code>) can be used together:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list misc.fruits>
+ <p>Fruits:
+ <ul>
+ <#items as fruit>
+ <li>${fruit}<#sep> and</#sep>
+ </#items>
+ </ul>
+<#else>
+ <p>We have no fruits.
+</#list></pre></div>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>You can read more about these directives <a href="ref_directive_list.html">in the Reference</a>.</p>
+ </div>
+
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_5">The include directive</h3>
+
+
+ <p>With the <code class="inline-code">include</code> directive you can insert
+ the content of another file into the template.</p>
+
+ <p>Suppose you have to show the same copyright notice on
+ several pages. You can create a file that contains the copyright
+ notice only, and insert that file everywhere where you need that
+ copyright notice. Say, you store this copyright notice in
+ <code class="inline-code">copyright_footer.html</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><hr>
+<i>
+Copyright (c) 2000 <a href="http://www.acmee.com">Acmee Inc</a>,
+<br>
+All Rights Reserved.
+</i></pre></div>
+
+ <p>Whenever you need that file you simply insert it with the
+ <code class="inline-code">include</code> directive:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><html>
+<head>
+ <title>Test page</title>
+</head>
+<body>
+ <h1>Test page</h1>
+ <p>Blah blah...
+<strong> <#include "/copyright_footer.html"></strong>
+</body>
+</html></pre></div>
+
+ <p>and the output will be:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"><html>
+<head>
+ <title>Test page</title>
+</head>
+<body>
+ <h1>Test page</h1>
+ <p>Blah blah...
+<strong><hr>
+<i>
+Copyright (c) 2000 <a href="http://www.acmee.com">Acmee Inc</a>,
+<br>
+All Rights Reserved.
+</i></strong>
+</body>
+</html></pre></div>
+
+ <p>If you change the <code class="inline-code">copyright_footer.html</code>,
+ then the visitor will see the new copyright notice on all
+ pages.</p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>A much more powerful way of reusing snippets is using
+ macros, but that's an advanced topic <a href="dgui_misc_userdefdir.html">discussed later</a>.</p>
+ </div>
+
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_6">Using directives together</h2>
+
+
+ <p>You can use directives as many times on a page as you want,
+ and you can nest directives into each other freely. For example,
+ here you nest <code class="inline-code">if</code> directive inside a
+ <code class="inline-code">list</code> directive:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><strong><#list animals as animal></strong>
+ <div<strong><#if animal.protected></strong><strong> </strong>class="protected"<strong></#if></strong>>
+ ${animal.name} for ${animal.price} Euros
+ </div>
+<strong></#list></strong></pre></div>
+
+ <p>Note that since FreeMarker does not interpret text outside FTL
+ tags, interpolations and FTL comments, above you could use the FTL
+ tags inside HTML attributes without problem.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_7">Using built-ins</h2>
+
+
+ <p>The so-called built-ins are like subvariables (or rather like
+ methods, if you know that Java term) that aren't coming from the
+ data-model, but added by FreeMarker to the values. In order to make
+ it clear where subvariables comes from, you have to use
+ <code class="inline-code">?</code> (question mark) instead of <code class="inline-code">.</code>
+ (dot) to access them. <a name="topic.commonlyUsedBuiltIns"></a>Examples with some of the most
+ commonly used built-ins:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">user?upper_case</code> gives the upper case
+ version of the value of <code class="inline-code">user</code> (like
+ "JOHN DOE" instead of "John
+ Doe")</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">animal.name?cap_first</code> give the
+ <code class="inline-code">animal.name</code> with its first letter converted
+ to upper case (like "Mouse" instead of
+ "mouse")</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">user?length</code> gives the number of
+ <em>characters</em> in the value of
+ <code class="inline-code">user</code> (8 for "John Doe")</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">animals?size</code> gives the number of
+ <em>items</em> in the <code class="inline-code">animals</code>
+ sequence (3 in our example data-model)</p>
+ </li>
+
+ <li>
+ <p>If you are between <code class="inline-code"><#list animals as
+ animal></code> and the corresponding
+ <code class="inline-code"></#list></code> tag:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">animal?index</code> gives the 0-based
+ index of <code class="inline-code">animal</code> inside
+ <code class="inline-code">animals</code></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">animal?counter</code> is like
+ <code class="inline-code">index</code>, but gives the 1-based index</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">animal?item_parity</code> gives the
+ strings "odd" or "even", depending
+ on the current counter parity. This is commonly used for
+ coloring rows with alternating colors, like in
+ <code class="inline-code"><td
+ class="${animal?item_parity}Row"></code>.</p>
+ </li>
+ </ul>
+ </li>
+ </ul>
+
+ <p>Some built-ins require parameters to specify the behavior
+ more, for example:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">animal.protected?string("Y", "N")</code>
+ return the string "Y" or "N" depending
+ on the boolean value of
+ <code class="inline-code">animal.protected</code>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">animal?item_cycle('lightRow',
+ 'darkRow')</code> is the more generic variant of
+ <code class="inline-code">item_parity</code> from earlier.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">fruits?join(", ")</code>: converts the list to
+ a string by concatenating items, and inserting the parameter
+ separator between each items (like "orange,
+ banana")</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">user?starts_with("J")</code> gives boolean
+ true of false depending on if <code class="inline-code">user</code> starts
+ with the letter "J" or not.</p>
+ </li>
+ </ul>
+
+ <p>Built-in applications can be chained, like
+ <code class="inline-code">fruits?join(", ")?upper_case</code> will first convert
+ the list a to a string, then converts it to upper case. (This is
+ just like you can chain <code class="inline-code">.</code>-s (dots) too.)</p>
+
+ <p>You can find the <a href="ref_builtins.html">full set of
+ built-ins in the Reference</a>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_8">Dealing with missing variables</h2>
+
+
+ <p>The data-model often has variables that are optional (i.e.,
+ sometimes missing). To spot some typical human mistakes, FreeMarker
+ doesn't tolerate references to missing variables unless you tell
+ explicitly what to do if the variable is missing. Here we will show
+ the two most typical ways of doing that.</p>
+
+ <p><span class="marked-for-programmers">Note for programmers: A
+ non-existent variable and a variable with <code class="inline-code">null</code>
+ value is the same for FreeMarker. The "missing" term used here
+ covers both cases.</span></p>
+
+ <p>Wherever you refer to a variable, you can specify a default
+ value for the case the variable is missing by following the variable
+ name with a <code class="inline-code">!</code> and the default value. Like in the
+ following example, when <code class="inline-code">user</code> is missing from data
+ model, the template will behave like if <code class="inline-code">user</code>'s
+ value were the string <code class="inline-code">"visitor"</code>. (When
+ <code class="inline-code">user</code> isn't missing, this template behaves exactly
+ like with <code class="inline-code">${user}</code>):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><h1>Welcome ${user<strong>!"visitor"</strong>}!</h1></pre></div>
+
+ <p>You can ask whether a variable isn't missing by putting
+ <code class="inline-code">??</code> after its name. Combining this with the
+ already introduced <code class="inline-code">if</code> directive you can skip the
+ whole greeting if the <code class="inline-code">user</code> variable is
+ missing:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#if <strong>user??</strong>><h1>Welcome ${user}!</h1></#if></pre></div>
+
+ <p>Regarding variable accessing with multiple steps, like
+ <code class="inline-code">animals.python.price</code>, writing
+ <code class="inline-code">animals.python.price!0</code> is correct only if
+ <code class="inline-code">animals.python</code> is never missing and only the last
+ subvariable, <code class="inline-code">price</code>, is possibly missing (in which
+ case here we assume it's <code class="inline-code">0</code>). If
+ <code class="inline-code">animals</code> or <code class="inline-code">python</code> is missing,
+ the template processing will stop with an "undefined variable"
+ error. To prevent that, you have to write
+ <code class="inline-code">(animals.python.price)!0</code>. In that case the
+ expression will be <code class="inline-code">0</code> even if
+ <code class="inline-code">animals</code> or <code class="inline-code">python</code> is missing.
+ Same logic goes for <code class="inline-code">??</code>;
+ <code class="inline-code">animals.python.price??</code> versus
+ <code class="inline-code">(animals.python.price)??</code>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="dgui_quickstart_template_autoescaping">Escaping for HTML, XML and other markup</h2>
+
+
+ <p>Let's say the template generates HTML, and you insert values
+ with <code class="inline-code">${<em class="code-color">...</em>}</code> that are
+ plain text (not HTML), like company names coming from a database.
+ Characters that has special meaning in HTML must be
+ <em>escaped</em> in such values, like if
+ <code class="inline-code">name</code> is "Someone & Co." then
+ <code class="inline-code">${name}</code> should print "Someone
+ <em>&amp;</em> Co.".</p>
+
+ <p>FreeMarker automatically escapes all values printed with
+ <code class="inline-code">${<em class="code-color">...</em>}</code> <em>if
+ it's properly configured</em> (that's the responsibility of
+ the programmers; <a href="pgui_config_outputformatsautoesc.html">see here how</a>). The
+ recommended practice is using <code class="inline-code">ftlh</code> file extension
+ to activate HTML auto-escaping, and <code class="inline-code">ftlx</code> file
+ extension to activate XML auto-escaping.</p>
+
+ <p>You can try if auto-escaping is on like
+ <code class="inline-code">${"<"}</code> and then checking the raw output (for
+ HTML or XML escaping). If it's not, and the configuration won't be
+ adjusted, add this as the very first line of the template:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#ftl output_format="HTML"></pre></div>
+
+ <p>(Use <code class="inline-code">"XML"</code> instead of
+ <code class="inline-code">"HTML"</code> above if you generate XML.)</p>
+
+ <p>If the string value to print deliberately contains markup,
+ auto-escaping must be prevented like
+ <code class="inline-code">${<em class="code-color">value</em>?no_esc}</code>.</p>
+
+ <p>You can find out much more about auto-escaping and output
+ formats <a href="dgui_misc_autoescaping.html">here...</a></p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>The kind of automatic escaping described here requires at
+ least FreeMarker 2.3.24. If you have to use an earlier version,
+ use the deprecated <a href="ref_directive_escape.html"><code>escape</code>
+ directive</a> instead.</p>
+ </div>
+
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="dgui_quickstart_datamodel.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_datamodel.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/dgui_template.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/dgui_template.html b/builds/2.3.26-nightly/dgui_template.html
new file mode 100644
index 0000000..16c53e0
--- /dev/null
+++ b/builds/2.3.26-nightly/dgui_template.html
@@ -0,0 +1,60 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-chapter">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>The Template - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="The Template">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/dgui_template.html">
+<link rel="canonical" href="http://freemarker.org/docs/dgui_template.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui.html"><span itemprop="name">Template Author's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_template.html"><span itemprop="name">The Template</span></a></li></ul><div class="bookma
rks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Author\'s Guide","The Template"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="dgui_datamodel_types.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_template_overallstructure.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-chapter" id="dgui_template" itemprop="headline">The Template</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Section Contents</div>
+<ul><li><a class="page-menu-link" href="dgui_template_overallstructure.html" data-menu-target="dgui_template_overallstructure">Overall structure</a></li><li><a class="page-menu-link" href="dgui_template_directives.html" data-menu-target="dgui_template_directives">Directives</a></li><li><a class="page-menu-link" href="dgui_template_exp.html" data-menu-target="dgui_template_exp">Expressions</a></li><li><a class="page-menu-link" href="dgui_template_valueinsertion.html" data-menu-target="dgui_template_valueinsertion">Interpolations</a></li></ul> </div> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>It is assumed that you have already read the <a href="dgui_quickstart.html">Getting Started</a> and the <a href="dgui_datamodel.html">Values, Types</a>
+ chapter.</p>
+ </div>
+<div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="dgui_datamodel_types.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_template_overallstructure.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[13/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_2.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_2.html b/builds/2.3.26-nightly/versions_2_2.html
new file mode 100644
index 0000000..a4854d3
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_2.html
@@ -0,0 +1,1107 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.2 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.2">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_2.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_2.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_2.html"><span itemprop="name">2.2</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.2"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_2_1.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_1_5.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_2" itemprop="headline">2.2</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_260" data-menu-target="autoid_260">Non backward-compatible changes!</a></li><li><a class="page-menu-link" href="#autoid_261" data-menu-target="autoid_261">Changes in FTL (FreeMarker Template Language)</a></li><li><a class="page-menu-link" href="#autoid_262" data-menu-target="autoid_262">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_263" data-menu-target="autoid_263">Other changes</a></li><li><a class="page-menu-link" href="#autoid_264" data-menu-target="autoid_264">The history of the releases before the final version</a><ul><li><a class="page-menu-link" href="#autoid_265" data-menu-target="autoid_265">Differences between the final and RC2 releases</a></li><li><a class="page-menu-link" href="#autoid_266" data-menu-target="autoid_266">Differences between the RC2 and RC1 releases</a></li><li><a class="page-menu-link" href="#autoid_267" data-menu-target="autoid_267">Differences between the Preview 2 and RC1 r
eleases</a></li><li><a class="page-menu-link" href="#autoid_268" data-menu-target="autoid_268">Differences between the Preview 1 and Preview 2
+releases</a></li></ul></li></ul> </div><p>Date of release: 2003-03-27</p><p>This release introduces some really important new features.
+ Unfortunately, evolution was painful again; we have a few non-backward
+ compatible changes (see below). Also, for those of you awaiting
+ desired native date/time type, sorry, it is still not here (because of
+ some internal chaos in the team... stand by, it's coming).</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_260">Non backward-compatible changes!</h2>
+
+
+ <ul>
+ <li>
+ <p>Macros are now plain variables. This means that if you are
+ unlucky and you have both a macro and another variable with the
+ same name, now the variable will overwrite the macro, so your
+ old template will malfunction. If you have a collection of
+ common macros, you should use the new <a href="dgui_misc_namespace.html">namespace feature</a> to
+ prevent accidental clashes with the variables used in the
+ templates.</p>
+ </li>
+
+ <li>
+ <p>With the introduction of the new <a href="dgui_misc_namespace.html">namespace support</a>,
+ <code class="inline-code">global</code> and <code class="inline-code">assign</code>
+ directives are no longer synonyms. <code class="inline-code">assign</code>
+ creates a variable in the current <code class="inline-code">namespace</code>,
+ while <code class="inline-code">global</code> creates variable that is visible
+ from all namespaces (as if the variable would be in the
+ data-model). Thus, the variable created with
+ <code class="inline-code">assign</code> is more specific, and hides the
+ variable of the same name created with
+ <code class="inline-code">global</code>. As a result, if you use both
+ <code class="inline-code">global</code> and <code class="inline-code">assign</code> mixed
+ for the same variable in your templates, now they will
+ malfunction. The solution is to search-and-replace all
+ <code class="inline-code">global</code>s in your old templates with
+ <code class="inline-code">assign</code>.</p>
+ </li>
+
+ <li>
+ <p>The reserved hash <code class="inline-code">root</code> no longer exists
+ as a predefined variable (we no longer have reserved variables).
+ Use <a href="dgui_template_exp.html#dgui_template_exp_var_special">special
+ variable expressions</a> to achieve similar effects. However,
+ we have no equivalent replacement for <code class="inline-code">root</code>
+ because of the changes in the variable scopes caused by the
+ introduction of namespaces. You may should use
+ <code class="inline-code">.globals</code> or
+ <code class="inline-code">.namespace</code>.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">BeansWrapper</code> no longer exposes
+ native Java arrays, booleans, numbers, enumerations, iterators,
+ and resource bundles as <code class="inline-code">TemplateScalarModel</code>.
+ This way, number objects wrapped through
+ <code class="inline-code">BeansWrapper</code> are subject to FreeMarker's
+ number formatting machinery. Also, booleans can be formatted
+ using the <code class="inline-code">?string</code> built-in.</p>
+ </li>
+
+ <li>
+ <p>The signature of
+ <code class="inline-code">Configuration.setServletContextForTemplateLoading</code>
+ has been changed: the first parameter is now
+ <code class="inline-code">Object</code> instead of
+ <code class="inline-code">javax.servlet.ServletContext</code>. Thus, you have
+ to recompile your classes that call this method. The change was
+ required to prevent class-loading failure when
+ <code class="inline-code">javax.servlet</code> classes are not available and
+ you would not call this method.</p>
+ </li>
+
+ <li>
+ <p>This release introduces a <a href="dgui_misc_whitespace.html">parse-time white-space
+ remover</a> that strips some of the typical superfluous
+ white-space around FreeMarker tags and comments. <em>This
+ feature is on by default!</em> Most probably this will not
+ cause problems if you generate white-space neutral output like
+ HTML. But if it does cause undesirable reformatting in output
+ you generate, you can disable it with
+ <code class="inline-code">config.setWhitespaceStripping(false)</code>. Also,
+ you can enable/disable it on a per-template basis with the new
+ <a href="ref_directive_ftl.html#ref.directive.ftl"><code>ftl</code></a>
+ directive.</p>
+ </li>
+
+ <li>
+ <p>Some new directives were introduced:
+ <code class="inline-code">nested</code>, <code class="inline-code">import</code>,
+ <code class="inline-code">escape</code>, <code class="inline-code">noescape</code>,
+ <code class="inline-code">t</code>, <code class="inline-code">rt</code>,
+ <code class="inline-code">lt</code>. This means that if you are unlucky and
+ the text of your template contains something like
+ <code class="inline-code"><nested></code>, then that will be
+ misinterpreted as a directive. To prevent this kind of problem
+ in the future, we recommend everybody to switch from the old
+ syntax to the new syntax ("strict syntax"). The
+ strict syntax will be the the default syntax starting from some
+ of the later releases anyway. We plan to release a conversion
+ tool for converting old templates. For more information please
+ read: <a href="ref_depr_oldsyntax.html">Template Language Reference/Deprecated FTL constructs/Old FTL syntax</a></p>
+ </li>
+
+ <li>
+ <p>The data-model created by the
+ <code class="inline-code">FreemarkerServlet</code> now uses automatic scope
+ discovery, so writing
+ <code class="inline-code">Application.<em class="code-color">attrName</em></code>,
+ <code class="inline-code">Session.<em class="code-color">attrName</em></code>,
+ <code class="inline-code">Request.<em class="code-color">attrName</em></code>
+ is no longer mandatory; it's enough to write
+ <code class="inline-code"><em class="code-color">attrName</em></code> (for more
+ information <a href="pgui_misc_servlet.html#topic.servlet.scopeAttr">read
+ this</a>). This may break an old template if that rely on the
+ non-existence of certain top-level variables.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">FreemarkerServlet</code> now uses the encoding
+ of the template file for the output, unless you specify the
+ encoding in the <code class="inline-code">ContentType</code> init-param, such
+ as <code class="inline-code">text/html; charset=UTF-8</code>.</p>
+ </li>
+
+ <li>
+ <p>The format of template paths is now more restricted than
+ before. The path must not use <code class="inline-code">/</code>,
+ <code class="inline-code">./</code> and <code class="inline-code">../</code> and
+ <code class="inline-code">://</code> with other meaning as they have in URL
+ paths (or in UN*X paths). The characters <code class="inline-code">*</code>
+ and <code class="inline-code">?</code> are reserved. Also, the template loader
+ must not want paths starting with <code class="inline-code">/</code>. For more
+ information please read: <a href="pgui_config_templateloading.html">Programmer's Guide/The Configuration/Template loading</a></p>
+ </li>
+
+ <li>
+ <p>Till now
+ <code class="inline-code">TemplateTransformModel.getWriter</code> has received
+ null as parameter map if the transform was called without
+ parameters. From now, it will receive an empty Map instead. Note
+ that the previous API documentation didn't state that it always
+ receives null if there are no parameters, so hopelessly only
+ very few classes exploit this design mistake.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_261">Changes in FTL (FreeMarker Template Language)</h2>
+
+
+ <ul>
+ <li>
+ <p>User-defined directives: Transform and macro call syntax
+ has been unified; they can be called in the same way, as
+ user-defined directives. This also means that macros support
+ named parameters and nested content (like the -- now deprecated
+ -- <code class="inline-code">transform</code> directive did). For example, if
+ you have a macro called <code class="inline-code">sect</code>, you may call it
+ via <code class="inline-code"><@sect title="Blah" style="modern">Blah
+ blah...</@sect></code>. For more information read:
+ <a href="dgui_misc_userdefdir.html">Template Author's Guide/Miscellaneous/Defining your own directives</a></p>
+ </li>
+
+ <li>
+ <p>Macros are now plain variables. This significantly
+ simplifies FreeMarker semantics, while providing more
+ flexibility; for example you can pass macros as parameters to
+ other macros and transforms. As for the problem of clashing
+ commonly-used-macro and variable names, we provide a more
+ powerful solution: namespaces.</p>
+ </li>
+
+ <li>
+ <p>Namespaces: Names-spaces are invaluable if you want to
+ assemble collections ("libraries") of macros and
+ transforms (and other variables), and then use them in any
+ template without worrying about accidental name clashes with the
+ application specific and temporary variables, or with the
+ variables of other collections you want to use in the same
+ template. This is extremely important if FreeMarker users want
+ to share their macro/transform collections. For more information
+ read: <a href="dgui_misc_namespace.html">Template Author's Guide/Miscellaneous/Namespaces</a></p>
+ </li>
+
+ <li>
+ <p>With the introduction of namespaces our variable related
+ terminology changed. As a result, <code class="inline-code">assign</code> is
+ no longer synonymous with <code class="inline-code">global</code>. The
+ <code class="inline-code">assign</code> directive has been undeprecated, and
+ should be used instead of <code class="inline-code">global</code> almost
+ everywhere. In the new approach <code class="inline-code">assign</code>
+ creates variables in the current namespace, while
+ <code class="inline-code">global</code> creates a variable that is visible
+ from all namespaces (as if the variable were in the root of the
+ data-model). A variable created with <code class="inline-code">assign</code>
+ in the current namespace hides the variable of the same name
+ that was created with <code class="inline-code">global</code>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">ftl</code> directive: With this directive you
+ can give information about the template for FreeMarker, like the
+ encoding (charset) of the template, the used FTL syntax variant,
+ etc. Also, this directive helps you to write templates that are
+ less dependent on FreeMarker configuration settings, also it
+ helps third-party tools to identify and correctly parse
+ FreeMarker templates. For more information see: <a href="ref_directive_ftl.html#ref.directive.ftl"><code>ftl</code>
+ directive</a></p>
+ </li>
+
+ <li>
+ <p>White-space stripping: FreeMarker now automatically
+ removes some of the typical superfluous white-spaces around
+ FreeMarker tags and comments, like the indentation spaces
+ before- and line-break after <code class="inline-code"><#if ...></code>
+ tags. For more information read: <a href="dgui_misc_whitespace.html#dgui_misc_whitespace_stripping">Template Author's Guide/Miscellaneous/White-space handling/White-space stripping</a></p>
+ </li>
+
+ <li>
+ <p>New directive to apply a common ("escaping") expression to
+ all interpolations in a block: <a href="ref_directive_escape.html#ref.directive.escape"><code>escape</code></a>.
+ The name comes from the common usage of this directive for
+ automatic HTML-escaping of interpolations.</p>
+ </li>
+
+ <li>
+ <p>The new and preferred way of number formatting with
+ <code class="inline-code">string</code> built-in is
+ <code class="inline-code">foo?string(format)</code>, instead of the less
+ natural <code class="inline-code">foo?string[format]</code>.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">string</code> built-in works for boolean
+ values. For example: <code class="inline-code">${spamFilter?string("enabled",
+ "disabled")}</code>. For more information <a href="ref_builtins_boolean.html#ref_builtin_string_for_boolean">read the
+ reference</a>.</p>
+ </li>
+
+ <li>
+ <p>The default strings for outputting boolean value using the
+ <code class="inline-code">string</code> built-in can be set using the
+ <code class="inline-code">boolean_format</code> setting.</p>
+ </li>
+
+ <li>
+ <p>Comments can be placed inside FTL tags and interpolations.
+ For example: <code class="inline-code"><#assign <#-- a comment --> x =
+ 3></code></p>
+ </li>
+
+ <li>
+ <p>All letters and numbers are enabled in variable names,
+ also <code class="inline-code">$</code> is allowed (as in Java programming
+ language). Thus you can use accents, Arabic letters, Chinese
+ letters, etc.</p>
+ </li>
+
+ <li>
+ <p>String literals can be quoted with apostrophe-quote.
+ <code class="inline-code">"foo"</code> and <code class="inline-code">'foo'</code> are
+ equivalent.</p>
+ </li>
+
+ <li>
+ <p>New <a href="ref_builtins_string.html">string
+ built-ins</a>: <code class="inline-code">index_of</code>,
+ <code class="inline-code">last_index_of</code>,
+ <code class="inline-code">starts_with</code>, <code class="inline-code">ends_with</code>,
+ <code class="inline-code">replace</code>, <code class="inline-code">split</code>,
+ <code class="inline-code">chop_linebreak</code>,
+ <code class="inline-code">uncap_first</code>.</p>
+ </li>
+
+ <li>
+ <p>New <a href="ref_builtins_sequence.html">sequence
+ built-ins</a>: <code class="inline-code">sort</code>,
+ <code class="inline-code">sort_by</code>.</p>
+ </li>
+
+ <li>
+ <p>New built-ins for experts to check the type of a variable.
+ See: <a href="ref_builtins_expert.html#ref_builtin_isType"><code>is_<em>...</em></code>
+ built-ins</a></p>
+ </li>
+
+ <li>
+ <p>New built-in for experts to create a variable of certain
+ Java <code class="inline-code">TemplateModel</code> implementation. See: <a href="ref_builtins_expert.html#ref_builtin_new"><code>new</code>
+ built-in</a></p>
+ </li>
+
+ <li>
+ <p>New built-in, <a href="ref_builtins_expert.html#ref_builtin_namespace"><code>namespace</code></a>,
+ to get the namespace of a macro.</p>
+ </li>
+
+ <li>
+ <p>New expression type: special variable expression. To
+ prevent backward compatibility problems when we introduce new
+ predefined variables, from now <a href="dgui_template_exp.html#dgui_template_exp_var_special">special variable
+ expressions</a> are used to access them.</p>
+ </li>
+
+ <li>
+ <p>New directives: <code class="inline-code">t</code>,
+ <code class="inline-code">rt</code> and <code class="inline-code">lt</code> directives allow
+ you to do explicit white-space removal in extreme FTL
+ applications. For more information read <a href="ref_directive_t.html#ref.directive.t">the reference</a>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">assign</code>, <code class="inline-code">local</code> and
+ <code class="inline-code">global</code> now can capture the output generated
+ be the nested template fragment into the variable. This
+ deprecates <code class="inline-code">capture_output</code> transform. More
+ information: <a href="ref_directive_assign.html#ref.directive.assign">assign
+ directive reference</a></p>
+ </li>
+
+ <li>
+ <p>Bulk assignments (as <code class="inline-code"><#assign x=1, y=2,
+ z=3></code>) no longer need colon to separate the
+ assignments (as <code class="inline-code"><#assign x=1 y=2 z=3></code>),
+ although it is still allowed to preserve backward
+ compatibility.</p>
+ </li>
+
+ <li>
+ <p>Path that contains <code class="inline-code">//:</code> is considered as
+ absolute path.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">include</code> and
+ <code class="inline-code">transform</code> directives no longer need a
+ semicolon to separate the template or transform name from the
+ parameter list, although it is still allowed to preserve
+ backward compatibility.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">#</code>-less tag syntax is deprecated (but
+ still working). That is, you should write
+ <code class="inline-code"><#<em class="code-color">directive
+ ...</em>></code> instead of
+ <code class="inline-code"><<em class="code-color">directive
+ ...</em>></code>, and
+ <code class="inline-code"></#<em class="code-color">directive
+ ...</em>></code> instead of
+ <code class="inline-code"></<em class="code-color">directive
+ ...</em>></code>. For more info read: <a href="ref_depr_oldsyntax.html">Template Language Reference/Deprecated FTL constructs/Old FTL syntax</a></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">foreach</code> is depreciated (but still
+ working). Use <a href="ref_directive_list.html#ref.directive.list"><code>list</code></a>
+ instead.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: Undefined variables in hash and sequence
+ constructors (as <code class="inline-code">[a, b, c]</code>) didn't caused
+ errors.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: String concatenation had performance problem if
+ there was multiple concatenations chained, as:
+ <code class="inline-code">"a"+x+"a"+x+"a"+x+"a"+x+"a"+x</code>.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_262">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>Arbitrary JSP custom tags can be used as FreeMarker
+ transforms in <code class="inline-code">FreemarkerServlet</code>-driven
+ templates. More information: <a href="pgui_misc_servlet.html">Programmer's Guide/Miscellaneous/Using FreeMarker with servlets</a></p>
+ </li>
+
+ <li>
+ <p>Various improvements for
+ <code class="inline-code">BeansWrapper</code>:</p>
+
+ <ul>
+ <li>
+ <p>The <code class="inline-code">BeansWrapper</code> no longer exposes
+ arbitrary objects as
+ <code class="inline-code">TemplateScalarModel</code>s, only
+ <code class="inline-code">java.lang.String</code> and
+ <code class="inline-code">Character</code> objects. This way, number
+ objects wrapped through <code class="inline-code">BeansWrapper</code> are
+ subject to FreeMarker's number formatting machinery. As a
+ side effect, non-string and non-number objects that were
+ previously accepted in equality and inequality operations
+ (because they had a string representation) will now cause
+ the engine to throw exception on comparison attempt.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">java.lang.Character</code> objects are
+ exposed as scalars through
+ <code class="inline-code">BeansWrapper</code>.</p>
+ </li>
+
+ <li>
+ <p>Experimental feature: With the
+ <code class="inline-code">setSimpleMapWrapper</code> method of
+ <code class="inline-code">BeansWrapper</code> you can configure it to wrap
+ <code class="inline-code">java.util.Map</code>-s as
+ <code class="inline-code">TemplateHashModelEx</code>-s, and do not expose
+ the methods of the object.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p><code class="inline-code">TransformControl</code> interface (was
+ experimental earlier): If the <code class="inline-code">Writer</code> returned
+ by <code class="inline-code">TemplateTransformModel.getWriter</code>
+ implements this interface, it can instruct the engine to skip or
+ to repeat evaluation of the nested content, and gets notified
+ about exceptions that are thrown during the nested content
+ evaluation. Note that the <code class="inline-code">onStart</code> and
+ <code class="inline-code">afterBody</code> methods now are allowed to throw
+ <code class="inline-code">IOException</code>. For more information please read
+ the API documentation.</p>
+ </li>
+
+ <li>
+ <p>Localized lookup can be disabled with the new
+ <code class="inline-code">Configuration</code> methods:
+ <code class="inline-code">set/getLocalizedLookup</code>,
+ <code class="inline-code">clearTemplateCache</code></p>
+ </li>
+
+ <li>
+ <p>The new interface
+ <code class="inline-code">freemarker.cache.CacheStorage</code> allows users to
+ plug custom template caching strategies with the
+ <code class="inline-code">cache_storage</code> setting. The core package now
+ ships with two implementations:
+ <code class="inline-code">SoftCacheStorage</code> and
+ <code class="inline-code">StrongCacheStorage</code>. For more information
+ read: <a href="pgui_config_templateloading.html">Programmer's Guide/The Configuration/Template loading</a></p>
+ </li>
+
+ <li>
+ <p>You can set settings with string name and string value
+ with the new <code class="inline-code">setSetting(String key, String
+ value)</code> method of <code class="inline-code">Configurable</code>
+ super-classes (as <code class="inline-code">Configuration</code>). Also you
+ can load settings from <code class="inline-code">.properties</code> file with
+ the <code class="inline-code">setSettings</code> method.</p>
+ </li>
+
+ <li>
+ <p>Other new <code class="inline-code">Configuration</code> methods:
+ <code class="inline-code">clearTemplateCache</code>,
+ <code class="inline-code">clearSharedVariables</code>,
+ <code class="inline-code">getTemplateLoader</code>, and
+ <code class="inline-code">clone</code>.</p>
+ </li>
+
+ <li>
+ <p>Changes to <code class="inline-code">TemplateTransformModel</code>
+ interface: <code class="inline-code">getWriter</code> can throw
+ <code class="inline-code">IOException</code>, and can return
+ <code class="inline-code">null</code> if the transform does not support body
+ content.</p>
+ </li>
+
+ <li>
+ <p>Till now
+ <code class="inline-code">TemplateTransformModel.getWriter</code> has received
+ null as parameter map if the transform was called without
+ parameters. From now, it will receive an empty Map instead. Note
+ that the previous API documentation didn't state that it always
+ receives null if there are no parameters, so hopelessly only
+ very few classes exploit this design mistake.</p>
+ </li>
+
+ <li>
+ <p>Various improvements for
+ <code class="inline-code">FreemarkerServlet</code>:</p>
+
+ <ul>
+ <li>
+ <p>The data-model now uses automatic scope discovery, so
+ writing
+ <code class="inline-code">Application.<em class="code-color">attrName</em></code>,
+ <code class="inline-code">Session.<em class="code-color">attrName</em></code>,
+ <code class="inline-code">Request.<em class="code-color">attrName</em></code>
+ is no longer mandatory; it's enough to write
+ <code class="inline-code"><em class="code-color">attrName</em></code>. For
+ more information <a href="pgui_misc_servlet.html#topic.servlet.scopeAttr">read this</a>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">FreemarkerServlet</code> now uses the
+ encoding of the template file for the output, unless you
+ specify the encoding in the <code class="inline-code">ContentType</code>
+ init-param, such as <code class="inline-code">text/html;
+ charset=UTF-8</code>.</p>
+ </li>
+
+ <li>
+ <p>All <code class="inline-code">Configuration</code> level settings
+ can by set with Servlet init-params
+ (<code class="inline-code">template_exception_handler</code>,
+ <code class="inline-code">locale</code>, <code class="inline-code">number_format</code>,
+ etc.).</p>
+ </li>
+
+ <li>
+ <p>The object wrapper the servlet internally uses is now
+ set as the default object wrapper for its
+ <code class="inline-code">Configuration</code> instance.</p>
+ </li>
+
+ <li>
+ <p>It no longer forces session creation for requests that
+ don't belong to an existing session, improving
+ scalability.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>JDOM independent XML-wrapping:
+ <code class="inline-code">freemarker.ext.xml.NodeListModel</code> is a
+ re-implementation of
+ <code class="inline-code">freemarker.ext.jdom.NodeListModel</code> that does
+ not rely on JDOM; you don't need JDOM .jar anymore. The new
+ <code class="inline-code">NodeListModel</code> automatically uses W3C DOM,
+ dom4j, or JDOM, depending on which library is available (that
+ is, depending on what object do you pass to its
+ constructor).</p>
+ </li>
+
+ <li>
+ <p>Bugfix: <code class="inline-code">WebappTemplateLoader</code>: Template
+ updating didn't worked correctly with Tomcat due the caching of
+ resources. Now <code class="inline-code">WebappTemplateLoader</code> tries to
+ access the resources directly as <code class="inline-code">File</code>, if it
+ is possible, thus bypasses the caching.</p>
+ </li>
+
+ <li>
+ <p>Various bug-fixes for
+ <code class="inline-code">FreemarkerServlet</code>:</p>
+
+ <ul>
+ <li>
+ <p>The servlet now loads the correct template if it was
+ called through
+ <code class="inline-code">RequestDispatcher.include</code>.</p>
+ </li>
+
+ <li>
+ <p>The caching of <code class="inline-code">HttpServletRequest</code>
+ objects is now compliant with the servlet
+ specification.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">TemplateException</code>s was suppressed
+ in certain situations resulting in half-rendered pages
+ without error message.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Bugfix: FreeMarker didn't work if the
+ <code class="inline-code">javax.servlet</code> classes was not available,
+ because <code class="inline-code">Configuration</code> explicitly referred to
+ <code class="inline-code">javax.servlet.ServletContext</code>.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: classes may were not found if they was available
+ only in the <code class="inline-code">WEB-INF</code>, and FreeMarker tried to
+ load the class dynamically.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: the <code class="inline-code">Template</code> constructor (and
+ thus <code class="inline-code">Configuration.getTemplate</code>) sometimes
+ threw <code class="inline-code">TokenMgrError</code> (a non-checked exception)
+ instead of <code class="inline-code">ParseException</code>.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_263">Other changes</h2>
+
+
+ <ul>
+ <li>
+ <p>The Web application related examples has been
+ replaced.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_264">The history of the releases before the final version</h2>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_265">Differences between the final and RC2 releases</h3>
+
+
+ <ul>
+ <li>
+ <p>You can load settings from
+ <code class="inline-code">.properties</code> file with the
+ <code class="inline-code">setSettings</code> method of
+ <code class="inline-code">Configuration</code> and other
+ <code class="inline-code">Configurable</code> subclasses.</p>
+ </li>
+
+ <li>
+ <p>New string built-in:
+ <code class="inline-code">uncap_first</code></p>
+ </li>
+
+ <li>
+ <p>Bugfix: When exposing an XML document to a template and
+ accessing it with XPath using Jaxen a
+ <code class="inline-code">ClassCastException</code> has occurred.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: The template cache has loaded templates with bad
+ <code class="inline-code">Configuration</code> instance in certain
+ situations if you use not the static default
+ <code class="inline-code">Configuration</code> instance.</p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_266">Differences between the RC2 and RC1 releases</h3>
+
+
+ <ul>
+ <li>
+ <p>Non backward compatible change!:
+ <code class="inline-code">FreemarkerServlet</code> now uses the encoding of
+ the template file for the output, unless you specify the
+ encoding in the <code class="inline-code">ContentType</code> init-param,
+ such as <code class="inline-code">text/html; charset=UTF-8</code>.</p>
+ </li>
+
+ <li>
+ <p>Non backward compatible change compared to RC1!: The
+ <code class="inline-code">capture_output</code> transform creates variable
+ in the current namespace (as <code class="inline-code">assign</code>
+ directive) with the <code class="inline-code">var</code> parameter, not a
+ global variable.</p>
+ </li>
+
+ <li>
+ <p>The new and preferred way of number formatting with
+ <code class="inline-code">string</code> built-in is
+ <code class="inline-code">foo?string(format)</code>, instead of the less
+ natural <code class="inline-code">foo?string[format]</code>.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">string</code> built-in works for boolean
+ values. For example: <code class="inline-code">${spamFilter?string("enabled",
+ "disabled")}</code>. For more information <a href="ref_builtins_boolean.html#ref_builtin_string_for_boolean">read the
+ reference</a>.</p>
+ </li>
+
+ <li>
+ <p>The default strings for outputting boolean value using
+ the <code class="inline-code">string</code> built-in can be set using the
+ <code class="inline-code">boolean_format</code> setting.</p>
+ </li>
+
+ <li>
+ <p>String literals can be quoted with apostrophe-quote.
+ <code class="inline-code">"foo"</code> and <code class="inline-code">'foo'</code> are
+ equivalent.</p>
+ </li>
+
+ <li>
+ <p>The new interface
+ <code class="inline-code">freemarker.cache.CacheStorage</code> allows users
+ to plug custom template caching strategies with the
+ <code class="inline-code">cache_storage</code> setting. The core package now
+ ships with two implementations:
+ <code class="inline-code">SoftCacheStorage</code> and
+ <code class="inline-code">StrongCacheStorage</code>. For more information
+ read: <a href="pgui_config_templateloading.html">Programmer's Guide/The Configuration/Template loading</a></p>
+ </li>
+
+ <li>
+ <p>You can set settings with string name and string value
+ with the new <code class="inline-code">setSetting(String key, String
+ value)</code> method of <code class="inline-code">Configurable</code>
+ super-classes (as <code class="inline-code">Configuration</code>).</p>
+ </li>
+
+ <li>
+ <p>Other new <code class="inline-code">Configuration</code> methods:
+ <code class="inline-code">getTemplateLoader</code>,
+ <code class="inline-code">clone</code>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">assign</code>, <code class="inline-code">local</code> and
+ <code class="inline-code">global</code> now can capture the output generated
+ be the nested template fragment into the variable. This
+ deprecates <code class="inline-code">capture_output</code> transform. More
+ information: <a href="ref_directive_assign.html#ref.directive.assign">assign
+ directive reference</a></p>
+ </li>
+
+ <li>
+ <p>Other new <code class="inline-code">Configuration</code> methods:
+ <code class="inline-code">getTemplateLoader</code>,
+ <code class="inline-code">clone</code>.</p>
+ </li>
+
+ <li>
+ <p>Changes to <code class="inline-code">TemplateTransformModel</code>
+ interface: <code class="inline-code">getWriter</code> can throw
+ <code class="inline-code">IOException</code>, and can return
+ <code class="inline-code">null</code> if the transform does not support body
+ content.</p>
+ </li>
+
+ <li>
+ <p>Till now
+ <code class="inline-code">TemplateTransformModel.getWriter</code> has
+ received null as parameter map if the transform was called
+ without parameters. From now, it will receive an empty Map
+ instead. Note that the previous API documentation didn't state
+ that it always receives null if there are no parameters, so
+ hopelessly only very few classes exploit this design
+ mistake.</p>
+ </li>
+
+ <li>
+ <p>Changes to <code class="inline-code">TemplateControl</code> interface:
+ <code class="inline-code">onStart</code> and <code class="inline-code">afterBody</code>
+ methods are now allowed to throw
+ <code class="inline-code">IOException</code>.</p>
+ </li>
+
+ <li>
+ <p>Path that contains <code class="inline-code">//:</code> is considered
+ as absolute path.</p>
+ </li>
+
+ <li>
+ <p>New <a href="ref_builtins_string.html">string
+ built-ins</a>: <code class="inline-code">index_of</code>,
+ <code class="inline-code">last_index_of</code>,
+ <code class="inline-code">starts_with</code>, <code class="inline-code">ends_with</code>,
+ <code class="inline-code">replace</code>, <code class="inline-code">split</code>,
+ <code class="inline-code">chop_linebreak</code>.</p>
+ </li>
+
+ <li>
+ <p>New <a href="ref_builtins_sequence.html">sequence
+ built-ins</a>: <code class="inline-code">sort</code>,
+ <code class="inline-code">sort_by</code>.</p>
+ </li>
+
+ <li>
+ <p>All <code class="inline-code">Configuration</code> level settings can
+ by set with Servlet init-params
+ (<code class="inline-code">template_exception_handler</code>,
+ <code class="inline-code">locale</code>, <code class="inline-code">number_format</code>,
+ etc.).</p>
+ </li>
+
+ <li>
+ <p>Bugfix: classes may were not found if they was available
+ only in the <code class="inline-code">WEB-INF</code>, and FreeMarker tried
+ to load the class dynamically.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: <code class="inline-code">setLocalizedLookup(false)</code> of
+ <code class="inline-code">Configuration</code> was overridden when you have
+ called <code class="inline-code">setTemplateLoader</code>.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: String concatenation had performance problem if
+ there was multiple concatenations chained, as:
+ <code class="inline-code">"a"+x+"a"+x+"a"+x+"a"+x+"a"+x</code>.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: white-space stripping was not worked with tags
+ spanning over multiple lines.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: Removing several dependencies on JDK 1.3, so
+ FreeMarker can be build for JDK 1.2.2.</p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_267">Differences between the Preview 2 and RC1 releases</h3>
+
+
+ <ul>
+ <li>
+ <p><code class="inline-code">ftl</code> is now stricter, and does not
+ allow custom parameters. To associate custom attributes to
+ templates, we may add a new directive later, if there is a
+ demand for it.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">escape</code> directive does not affect
+ numerical interpolations
+ (<code class="inline-code">#{<em class="code-color">...</em>}</code>)
+ anymore, as it has caused errors with string escapes as
+ <code class="inline-code">?html</code>.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">normalizeName</code> method of
+ <code class="inline-code">freemarker.cache.TemplateLoader</code> has been
+ removed, because it has caused too many complications.
+ Instead, normalization happens on a single point in the
+ <code class="inline-code">TempateCache</code>. In consequence, FreeMarker is
+ now stricter about the format of template paths, as things
+ like <code class="inline-code">/../</code> are interpreted by the
+ core.</p>
+ </li>
+
+ <li>
+ <p>Experimental feature: With the
+ <code class="inline-code">setSimpleMapWrapper</code> method of
+ <code class="inline-code">BeansWrapper</code> you can configure it to wrap
+ <code class="inline-code">java.util.Map</code>-s as
+ <code class="inline-code">TemplateHashModelEx</code>-s, and do not expose
+ the methods of the object.</p>
+ </li>
+
+ <li>
+ <p>New <code class="inline-code">Configuration</code> methods:
+ <code class="inline-code">set/getLocalizedLookup</code>,
+ <code class="inline-code">clearTemplateCache</code>,
+ <code class="inline-code">clearSharedVariables</code>.</p>
+ </li>
+
+ <li>
+ <p>More cleanups in the <code class="inline-code">Environment</code>
+ API.</p>
+ </li>
+
+ <li>
+ <p>Better JSP standard compliance: JSP page-scope variables
+ are the global variables that were created in the template
+ (not the variables of the data-model).</p>
+ </li>
+
+ <li>
+ <p>JDOM independent XML-wrapping:
+ <code class="inline-code">freemarker.ext.xml.NodeListModel</code> is a
+ re-implementation of
+ <code class="inline-code">freemarker.ext.jdom.NodeListModel</code> that does
+ not rely on JDOM; you don't need JDOM .jar anymore. The new
+ <code class="inline-code">NodeListModel</code> automatically uses W3C DOM,
+ dom4j, or JDOM, depending on which library is available (that
+ is, depending on what object do you pass to its
+ constructor).</p>
+ </li>
+
+ <li>
+ <p>Bugfix: <code class="inline-code">WebappTemplateLoader</code>:
+ Template updating didn't worked correctly with Tomcat due the
+ caching of resources. Now
+ <code class="inline-code">WebappTemplateLoader</code> tries to access the
+ resources directly as <code class="inline-code">File</code>, if it is
+ possible, thus bypasses the caching.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: Templates loaded with
+ <code class="inline-code">MultiTemplateLoader</code> subclasses was removed
+ from the template cache after the template update delay has
+ elapsed (5 seconds by default) even if the template file was
+ unchanged. This can cause lot of extra load for a high-traffic
+ server if you have many templates or if the template update
+ delay was set to 0 second.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: Undefined variables in hash and sequence
+ constructors (as <code class="inline-code">[a, b, c]</code>) didn't caused
+ errors.</p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_268">Differences between the Preview 1 and Preview 2
+ releases</h3>
+
+
+ <ul>
+ <li>
+ <p>All 16-bit Unicode letters and numbers are allowed in
+ identifiers, as well as the <code class="inline-code">$</code> character (as
+ in Java programming language). Thus you can use accented
+ letters, Arabic letters, Chinese letters, etc. as identifiers
+ in templates</p>
+ </li>
+
+ <li>
+ <p>Macros now can create loop variables for the nested
+ content. For more information <a href="dgui_misc_userdefdir.html#dgui_misc_userdefdir_loopvar">read
+ this</a>.</p>
+ </li>
+
+ <li>
+ <p>New directives: <code class="inline-code">t</code>,
+ <code class="inline-code">rt</code> and <code class="inline-code">lt</code> directives
+ allow you to do explicit white-space removal in extreme FTL
+ applications. For more information read <a href="ref_directive_t.html#ref.directive.t">the reference</a>.</p>
+ </li>
+
+ <li>
+ <p>The syntax of assignment-with-namespace has changed from
+ <code class="inline-code"><#assign foo=123 namespace=myLib></code>) to
+ <code class="inline-code"><#assign foo=123 in myLib></code>, since the
+ previous syntax was confusing because its similarity to a
+ bulk-assignment.</p>
+ </li>
+
+ <li>
+ <p>Bulk assignments (as <code class="inline-code"><#assign x=1, y=2,
+ z=3></code>) no longer need colon to separate the
+ assignments (as <code class="inline-code"><#assign x=1 y=2
+ z=3></code>), although it is still allowed to preserve
+ backward compatibility.</p>
+ </li>
+
+ <li>
+ <p>Positional parameter passing is supported for macro
+ calls as shorthand form of normal named parameter passing. For
+ more details read <a href="ref_directive_userDefined.html#ref_directive_userDefined_positionalParam">read the
+ reference</a>.</p>
+ </li>
+
+ <li>
+ <p>New built-in, <code class="inline-code">namespace</code>, to get the
+ namespace of the currently executing macro.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">TransformControl</code> interface (was
+ experimental earlier): If the <code class="inline-code">Writer</code>
+ returned by
+ <code class="inline-code">TemplateTransformModel.getWriter</code> implements
+ this interface, it can instruct the engine to skip or to
+ repeat evaluation of the nested content, and gets notified
+ about exceptions that are thrown during the nested content
+ evaluation. For more information please read the API
+ documentation.</p>
+ </li>
+
+ <li>
+ <p>Jython wrapper can now wrap arbitrary Java objects, not
+ only <code class="inline-code">PyObject</code>-s. If an object is passed to
+ the wrapper that is neither a
+ <code class="inline-code">TemplateModel</code>, nor a
+ <code class="inline-code">PyObject</code>, it is first coerced into a
+ <code class="inline-code">PyObject</code> using Jython's own wrapping
+ machinery, and then wrapped into a
+ <code class="inline-code">TemplateModel</code> as any other
+ <code class="inline-code">PyObject</code>.</p>
+ </li>
+
+ <li>
+ <p>Some cleanups in the <code class="inline-code">Environment</code>
+ API.</p>
+ </li>
+
+ <li>
+ <p>The Web application related examples has been
+ replaced.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: Templates loaded with
+ <code class="inline-code">URLTemplateLoader</code> subclasses was removed
+ from the template cache after the template update delay has
+ elapsed (5 seconds by default) even if the template file was
+ unchanged. This can cause lot of extra load for a high-traffic
+ server if you have many templates or if the template update
+ delay was set to 0 second.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: <code class="inline-code">FreeMarkerServlet</code> has thrown
+ <code class="inline-code">ServletException</code> even if a debug
+ <code class="inline-code">TemplateException</code> handler was in use (so
+ you may got Error 500 page instead of debug
+ information).</p>
+ </li>
+ </ul>
+
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_2_1.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_1_5.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_2_1.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_2_1.html b/builds/2.3.26-nightly/versions_2_2_1.html
new file mode 100644
index 0000000..02c3c3d
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_2_1.html
@@ -0,0 +1,126 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.2.1 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.2.1">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_2_1.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_2_1.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_2_1.html"><span itemprop="name">2.2.1</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.2.1"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_2_2.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_2.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_2_1" itemprop="headline">2.2.1</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_258" data-menu-target="autoid_258">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_259" data-menu-target="autoid_259">Changes on the Java side</a></li></ul> </div><p>Date of release: 2003-04-11</p><p>This version introduces important new features, such as the
+ native FTL date/time type, and the auto-include and auto-import
+ settings.</p><p>The date/time support is experimental, but we hope it will not
+ substantially change. We would like to label it as final ASAP, so we
+ urge everybody to send feedback on this topic to the mailing
+ lists.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_258">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>New scalar type: date. For more information read: <a href="dgui_datamodel_types.html#dgui_datamodel_scalar">Template Author's Guide/Values, Types/The types/Scalars</a>, <a href="dgui_datamodel_types.html#dgui_datamodel_scalar">Template Author's Guide/Values, Types/The types/Scalars</a>, <a href="dgui_template_valueinsertion.html#dgui_template_valueinserion_universal_date">interpolation</a>,
+ <a href="ref_builtins_date.html#ref_builtin_string_for_date">?string built-in for
+ dates</a></p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_259">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>New <code class="inline-code">TemplateModel</code> subinterface:
+ <code class="inline-code">TemplateDateModel</code>. For more information read
+ <a href="pgui_datamodel_scalar.html">Programmer's Guide/The Data Model/Scalars</a></p>
+ </li>
+
+ <li>
+ <p>auto-include and auto-import: With these new configuration
+ level settings, you can include and import commonly used
+ templates (usually collection of macro definitions) at the top
+ of all templates, without actually typing <code class="inline-code"><#include
+ <em class="code-color">...</em>></code> or
+ <code class="inline-code"><#import
+ <em class="code-color">...</em>></code> into the templates
+ again and again. For more information please read the Java API
+ documentation of <code class="inline-code">Configuration</code></p>
+ </li>
+
+ <li>
+ <p>New template method:
+ <code class="inline-code">createProcessingEnvironment</code>. This method
+ makes it possible for you to do some special initialization on
+ the <a href="gloss.html#gloss.environment"><code>Environment</code></a>
+ before template processing, or to read the environment after
+ template processing. For more information please read the Java
+ API documentation.</p>
+ </li>
+
+ <li>
+ <p>Changes to <code class="inline-code">freemarker.ext.beans</code>
+ package: <code class="inline-code">BeanModel</code>,
+ <code class="inline-code">MapModel</code>, and
+ <code class="inline-code">ResourceModel</code> now implement
+ <code class="inline-code">TemplateHashModelEx</code>.</p>
+ </li>
+
+ <li>
+ <p>Bugfix:
+ <code class="inline-code">Configurable.setSettings(Properties)</code> didn't
+ removed redundant spaces/tabs at the end of property
+ values.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_2_2.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_2.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_2_2.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_2_2.html b/builds/2.3.26-nightly/versions_2_2_2.html
new file mode 100644
index 0000000..395c9e8
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_2_2.html
@@ -0,0 +1,74 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.2.2 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.2.2">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_2_2.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_2_2.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_2_2.html"><span itemprop="name">2.2.2</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.2.2"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_2_3.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_2_1.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_2_2" itemprop="headline">2.2.2</h1>
+</div></div><p>Date of release: 2003-05-02</p><p>Bugfix release.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_257">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>Bugfix: The <code class="inline-code">_text</code> key of the
+ <code class="inline-code">freemarker.ext.xml.NodeListModel</code> was not
+ returning the text of the element when used with W3C DOM
+ trees.</p>
+ </li>
+
+ <li>
+ <p>The classes are now built against JDK 1.2.2 classes,
+ ensuring the binary compatibility of FreeMarker distribution
+ with JDK 1.2.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_2_3.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_2_1.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[34/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_config_sharedvariables.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_config_sharedvariables.html b/builds/2.3.26-nightly/pgui_config_sharedvariables.html
new file mode 100644
index 0000000..d90f624
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_config_sharedvariables.html
@@ -0,0 +1,143 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Shared variables - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Shared variables">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_config_sharedvariables.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_config_sharedvariables.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config.html"><span itemprop="name">The Configuration</span></a></li><li class="step-3" itempr
op="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config_sharedvariables.html"><span itemprop="name">Shared variables</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","The Configuration","Shared variables"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_config_basics.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_settings.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_config_sharedvariables" itemprop="headline">Shared variables</h1>
+</div></div><p><strong>Shared variables</strong> are variables
+ that are defined for all templates. You can add shared variables to
+ the configuration with the <code class="inline-code">setSharedVariable</code>
+ methods:</p>
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">Configuration cfg = new Configuration(Configuration.VERSION_2_3_25);
+<em>..</em>.
+cfg.setSharedVariable("warp", new WarpDirective());
+cfg.setSharedVariable("company", "Foo Inc.");</pre></div><p>In all templates that use this configuration, an user-defined
+ directive with name <code class="inline-code">wrap</code> and a string with name
+ <code class="inline-code">company</code> will be visible in the data-model root, so
+ you don't have to add them to the root hash again and again. A
+ variable in the root object that you pass to the
+ <code class="inline-code">Template.process</code> will hide the shared variable with
+ the same name.</p> <div class="callout warning">
+ <strong class="callout-label">Warning!</strong>
+
+ <p>Never use <code class="inline-code">TemplateModel</code> implementation that
+ is not <a href="gloss.html#gloss.threadSafe">thread-safe</a> for
+ shared variables, if the configuration is used by multiple threads!
+ This is the typical situation for Servlet based applications.</p>
+ </div>
+<p>Due to backward compatibility heritage, the set of shared
+ variables is initially (i.e., for a new
+ <code class="inline-code">Configuration</code> instance) not empty. It contains the
+ following user-defined directives (they are "user-defined" in the
+ sense that you use <code class="inline-code">@</code> to call them instead of
+ <code class="inline-code">#</code>):</p> <div class="table-responsive">
+ <table class="table">
+
+ <thead>
+ <tr>
+ <th>name</th>
+
+
+ <th>class</th>
+
+ </tr>
+
+ </thead>
+
+
+ <tbody>
+ <tr>
+ <td><code class="inline-code">capture_output</code></td>
+
+
+ <td><code class="inline-code">freemarker.template.utility.CaptureOutput</code></td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">compress</code></td>
+
+
+ <td><code class="inline-code">freemarker.template.utility.StandardCompress</code></td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">html_escape</code></td>
+
+
+ <td><code class="inline-code">freemarker.template.utility.HtmlEscape</code></td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">normalize_newlines</code></td>
+
+
+ <td><code class="inline-code">freemarker.template.utility.NormalizeNewlines</code></td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">xml_escape</code></td>
+
+
+ <td><code class="inline-code">freemarker.template.utility.XmlEscape</code></td>
+
+ </tr>
+
+ </tbody>
+
+ </table>
+ </div>
+<div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_config_basics.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_settings.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_config_templateconfigurations.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_config_templateconfigurations.html b/builds/2.3.26-nightly/pgui_config_templateconfigurations.html
new file mode 100644
index 0000000..2c2f86c
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_config_templateconfigurations.html
@@ -0,0 +1,314 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Template configurations - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Template configurations">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_config_templateconfigurations.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_config_templateconfigurations.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config.html"><span itemprop="name">The Configuration</span></a></li><li class="step-3" itempr
op="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config_templateconfigurations.html"><span itemprop="name">Template configurations</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","The Configuration","Template configurations"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_config_errorhandling.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_outputformatsautoesc.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_config_templateconfigurations" itemprop="headline">Template configurations</h1>
+</div></div><p>"Template configurations" refers to the
+ <code class="inline-code">template_configurations</code> setting of
+ <code class="inline-code">Configuration</code>
+ (<code class="inline-code">Configuration.setTemplateConfigurations(<em class="code-color">...</em>)</code>).
+ This setting lets you override individual settings coming from the
+ common <code class="inline-code">Configuration</code> object, depending on the name
+ (path) of the template.</p><p>It's important to understand, however, that this setting only
+ has effect if you get templates with
+ <code class="inline-code">Configuration.getTemplate(<em class="code-color">...</em>)</code>,
+ not when you create templates directly with the
+ <code class="inline-code">Template</code> constructors. In that case it's up to you
+ to invoke this mechanism (see <code class="inline-code">TemplateCache</code> source
+ code as an example).</p><p>You will use these kind of objects to declare your template
+ configuration rules:</p><ul>
+ <li>
+ <p><code class="inline-code">TemplateConfiguration</code>-s: These store the
+ actual setting assignments that you want to apply. For example,
+ this <code class="inline-code">TemplateConfiguration</code> will set the
+ encoding and the output format of the matched template (and leave
+ all other settings of it alone):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">TemplateConfiguration tcUTF8XML = new TemplateConfiguration();
+tc.setEncoding("utf-8");
+tc.setOutputFormat(XMLOutputFormat.INSTANCE);</pre></div>
+ </li>
+
+ <li>
+ <p><code class="inline-code">TemplateSourceMatcher</code> (abstract)
+ subclasses: These define a rule that matches templates based on
+ their source name (their source path; as in
+ <code class="inline-code">Template.getSourceName()</code>), and possibly on
+ other <code class="inline-code">TemplateLoader</code>-dependent properties. For
+ example, <code class="inline-code">new FileExtensionMatcher("xml")</code>
+ matches templates that has <code class="inline-code">xml</code> file extension.
+ See all the subclasses in the Java API documentation.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">TemplateConfigurationFactory</code>-es: This is
+ what connects <code class="inline-code">TemplateConfiguration</code>-s and
+ <code class="inline-code">TemplateSourceMatcher</code>-s together. This is the
+ Java type of the <code class="inline-code">template_configurations</code>
+ setting. See the examples below for more.</p>
+ </li>
+ </ul>
+
+
+
+
+<h2 class="content-header header-simplesect" id="autoid_47">Example 1</h2>
+
+
+ <p>This setup combines our earlier two example objects with a
+ <code class="inline-code">ConditionalTemplateConfigurationFactory</code>, causing
+ all templates with <code class="inline-code">xml</code> extension to get UTF-8
+ encoding and XML output format:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">cfg.setTemplateConfigurations(
+ new ConditionalTemplateConfigurationFactory(
+ new FileExtensionMatcher("xml"),
+ tcUTF8XML));</pre></div>
+
+ <p>The same configuring is also doable if you don't have access
+ to the configuring Java code, but only to a Java
+ <code class="inline-code">*.properties</code> file or other kind of string-string
+ key value pairs (the <code class="inline-code">\</code>-s are prescribed by the
+ Java Properties file format for multi-line values):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">templateConfigurations = \
+ ConditionalTemplateConfigurationFactory( \
+ FileExtensionMatcher("xml"), \
+ TemplateConfiguration( \
+ encoding = "utf-8", \
+ outputFormat = XMLOutputFormat() \
+ ) \
+ )</pre></div>
+
+
+
+
+
+<h2 class="content-header header-simplesect" id="autoid_48">Example 2</h2>
+
+
+ <p>Let's say you only need to handle templates in the
+ <code class="inline-code">mail</code> directory specially, other templates can use
+ the setting coming from the shared <code class="inline-code">Configuration</code>
+ singleton. The names of templates there must contain
+ <code class="inline-code">".subject."</code> or <code class="inline-code">".body."</code>.
+ Subject templates must get <code class="inline-code">plainText</code> output
+ format, while body templates must get <code class="inline-code">HTML</code> output
+ format. So we have to make a choice here, and that's when you need a
+ <code class="inline-code">FirstMatchTemplateConfigurationFactory</code>.</p>
+
+ <p>Assuming <code class="inline-code">cfg</code> stores the shared
+ <code class="inline-code">Configuration</code> singleton, you set this up like
+ this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">cfg.setTemplateConfigurations(
+ new ConditionalTemplateConfigurationFactory(
+ new PathGlobMatcher("mail/**"),
+ new FirstMatchTemplateConfigurationFactory(
+ new ConditionalTemplateConfigurationFactory(
+ new FileNameGlobMatcher("*.subject.*"),
+ tcSubject),
+ new ConditionalTemplateConfigurationFactory(
+ new FileNameGlobMatcher("*.body.*"),
+ tcBody)
+ )
+ .noMatchErrorDetails(
+ "Mail template names must contain \".subject.\" or \".body.\"!")
+ ));</pre></div>
+
+ <p>The equivalent configuration using a Java
+ <code class="inline-code">*.properties</code> file or other kind of string-string
+ key value pairs (the <code class="inline-code">\</code>-s are prescribed by the
+ Java Properties file format only):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">templateConfigurations = \
+ ConditionalTemplateConfigurationFactory( \
+ PathGlobMatcher("mail/**"), \
+ FirstMatchTemplateConfigurationFactory( \
+ ConditionalTemplateConfigurationFactory( \
+ FileNameGlobMatcher("*.subject.*"), \
+ TemplateConfiguration(outputFormat = PlainTextOutputFormat()) \
+ ), \
+ ConditionalTemplateConfigurationFactory( \
+ FileNameGlobMatcher("*.body.*"), \
+ TemplateConfiguration(outputFormat = HTMLOutputFormat()) \
+ ), \
+ noMatchErrorDetails = 'Mail template names must contain ".subject." or ".body."!' \
+ ) \
+ )</pre></div>
+
+
+
+
+
+<h2 class="content-header header-simplesect" id="autoid_49">Example 3</h2>
+
+
+ <p>Let's say you want the following deviations from the shared
+ <code class="inline-code">Configuration</code> settings in your
+ application:</p>
+
+ <ul>
+ <li>
+ <p>All templates whose name contains
+ <code class="inline-code">".stats."</code> should use ISO date/time format and
+ UTC time zone</p>
+ </li>
+
+ <li>
+ <p>All templates inside the <code class="inline-code">mail</code> directory
+ should use UTF-8 encoding</p>
+ </li>
+
+ <li>
+ <p>Templates with <code class="inline-code">xml</code> file extension
+ should use XML <code class="inline-code">output_format</code>, templates with
+ <code class="inline-code">html</code> or <code class="inline-code">htm</code> extension
+ should use HTML output format. For other templates, the shared
+ <code class="inline-code">Configuration</code> can dictate the
+ <code class="inline-code">output_format</code>.</p>
+ </li>
+ </ul>
+
+ <p>Here we have 3 independent concerns, and possibly multiple (or
+ none) of those apply to a template; that's when you need a
+ <code class="inline-code">MergingTemplateConfigurationFactory</code>. The last
+ point describes a rule where you have mutually exclusive choices;
+ that's when you need a
+ <code class="inline-code">FirstMatchTemplateConfigurationFactory</code>, but this
+ time no choice is also allowed. Here's the source code, assuming
+ <code class="inline-code">cfg</code> stores the shared
+ <code class="inline-code">Configuration</code> instance:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">TemplateConfiguration tcStats = new TemplateConfiguration();
+tcStats.setDateTimeFormat("iso");
+tcStats.setDateFormat("iso");
+tcStats.setTimeFormat("iso");
+tcStats.setTimeZone(DateUtil.UTC);
+
+TemplateConfiguration tcMail = new TemplateConfiguration();
+tcMail.setEncoding("utf-8");
+
+TemplateConfiguration tcHTML = new TemplateConfiguration();
+tcHTML.setOutputFormat(HTMLOutputFormat.INSTANCE);
+
+TemplateConfiguration tcXML = new TemplateConfiguration();
+tcXML.setOutputFormat(XMLOutputFormat.INSTANCE);
+
+cfg.setTemplateConfigurations(
+ new MergingTemplateConfigurationFactory(
+ new ConditionalTemplateConfigurationFactory(
+ new FileNameGlobMatcher("*.stats.*"),
+ tcStats),
+ new ConditionalTemplateConfigurationFactory(
+ new PathGlobMatcher("mail/**"),
+ tcMail),
+ new FirstMatchTemplateConfigurationFactory(
+ new ConditionalTemplateConfigurationFactory(
+ new FileExtensionMatcher("xml"),
+ tcXML),
+ new ConditionalTemplateConfigurationFactory(
+ new OrMatcher(
+ new FileExtensionMatcher("html"),
+ new FileExtensionMatcher("htm")),
+ tcHTML)
+ ).allowNoMatch(true)
+ )
+);</pre></div>
+
+ <p>The equivalent configuration using a Java
+ <code class="inline-code">*.properties</code> file or other kind of string-string
+ key value pairs (the <code class="inline-code">\</code>-s are prescribed by the
+ Java Properties file format only):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">templateConfigurations = \
+ MergingTemplateConfigurationFactory( \
+ ConditionalTemplateConfigurationFactory( \
+ FileNameGlobMatcher("*.stats.*"), \
+ TemplateConfiguration( \
+ dateTimeFormat = "iso", \
+ dateFormat = "iso", \
+ timeFormat = "iso", \
+ timeZone = TimeZone("UTC") \
+ ) \
+ ), \
+ ConditionalTemplateConfigurationFactory( \
+ PathGlobMatcher("mail/**"), \
+ TemplateConfiguration(encoding = "utf-8") \
+ ), \
+ FirstMatchTemplateConfigurationFactory( \
+ ConditionalTemplateConfigurationFactory( \
+ FileExtensionMatcher("xml"), \
+ TemplateConfiguration(outputFormat = XMLOutputFormat()) \
+ ), \
+ ConditionalTemplateConfigurationFactory( \
+ OrMatcher( \
+ FileExtensionMatcher("html"), \
+ FileExtensionMatcher("htm") \
+ ), \
+ TemplateConfiguration(outputFormat = HTMLOutputFormat()) \
+ ), \
+ allowNoMatch = true \
+ ) \
+ )</pre></div>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_config_errorhandling.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_outputformatsautoesc.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_config_templateloading.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_config_templateloading.html b/builds/2.3.26-nightly/pgui_config_templateloading.html
new file mode 100644
index 0000000..62595bb
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_config_templateloading.html
@@ -0,0 +1,364 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Template loading - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Template loading">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_config_templateloading.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_config_templateloading.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config.html"><span itemprop="name">The Configuration</span></a></li><li class="step-3" itempr
op="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config_templateloading.html"><span itemprop="name">Template loading</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","The Configuration","Template loading"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_config_settings.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_errorhandling.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_config_templateloading" itemprop="headline">Template loading</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_38" data-menu-target="autoid_38">Template loaders</a><ul><li><a class="page-menu-link" href="#autoid_39" data-menu-target="autoid_39">Built-in template loaders</a></li><li><a class="page-menu-link" href="#autoid_40" data-menu-target="autoid_40">Loading templates from multiple locations</a></li><li><a class="page-menu-link" href="#autoid_41" data-menu-target="autoid_41">Loading templates from other sources</a></li><li><a class="page-menu-link" href="#autoid_42" data-menu-target="autoid_42">The template name (template path)</a></li></ul></li><li><a class="page-menu-link" href="#pgui_config_templateloading_caching" data-menu-target="pgui_config_templateloading_caching">Template caching</a></li></ul> </div>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_38">Template loaders</h2>
+
+
+
+
+ <p>Template loaders are objects that load raw textual data based
+ on abstract template paths like <code class="inline-code">"index.ftl"</code> or
+ <code class="inline-code">"products/catalog.ftl"</code>. It's up to the concrete
+ template loader if from where and how the template
+ "files" are loaded. They could be real files inside a
+ specified directory, or values in a data base table, or
+ <code class="inline-code">String</code>-s in a Java Map, etc. When you call
+ <code class="inline-code">cfg.getTemplate</code> (where <code class="inline-code">cfg</code> is
+ a <code class="inline-code">Configuration</code> instance), FreeMarker asks the
+ template loader (<code class="inline-code">cfg.getTemplateLoader</code>) to return
+ the text for the given template path, and then FreeMarker parses
+ that text as template. It doesn't care or even know if the template
+ is a real file or not, and where it is physically; those details are
+ only known by the template loader.</p>
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_39">Built-in template loaders</h3>
+
+
+ <p>You can set up the three most common template loading
+ mechanism in the <code class="inline-code">Configuration</code> using the
+ following <em>convenience</em> methods:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">void setDirectoryForTemplateLoading(File
+ dir)</code>: Sets a directory on the file system from which
+ to load templates. Template names (template paths) will be
+ interpreted relatively to this physical directory. It won't
+ let you load files outside this directory.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">void setClassForTemplateLoading(Class cl,
+ String basePackagePath)</code> and <code class="inline-code">void
+ setClassLoaderForTemplateLoading(ClassLoader classLoader,
+ String basePackagePath)</code>: These are for when you want
+ to load templates via the same mechanism with which Java loads
+ classes (from the class-path, as they used to say vaguely).
+ This is very likely be the preferred means of loading
+ templates for production code, as it allows you to keep
+ everything inside the deployment <code class="inline-code">jar</code> files.
+ The first parameter decides which Java
+ <code class="inline-code">ClassLoader</code> will be used. The second
+ parameter specifies the package that contains the templates,
+ in <code class="inline-code">/</code>-separated format. Note that if you
+ don't start it with <code class="inline-code">/</code>, it will be
+ interpreted relatively to the package of the
+ <code class="inline-code">Class</code> parameter.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">void setServletContextForTemplateLoading(Object
+ servletContext, String path)</code>: Takes the context of
+ your Servlet-based web application, and a base path, which is
+ interpreted relative to the web application root directory
+ (that's the parent of the <code class="inline-code">WEB-INF</code>
+ directory). Note that we refer to "directory" here although
+ this loading method works even for unpacked
+ <code class="inline-code">.war</code> files, since it uses
+ <code class="inline-code">ServletContext.getResource()</code> to access the
+ templates. If you omit the second parameter (or use
+ <code class="inline-code">""</code>), you can simply store the static files
+ (<code class="inline-code">.html</code>, <code class="inline-code">.jpg</code>, etc.)
+ mixed with the <code class="inline-code">.ftl</code> files. Of course, you
+ must set up a Servlet for the <code class="inline-code">*.ftl</code>,
+ <code class="inline-code">*.ftlh</code>, <code class="inline-code">*.ftlx</code>
+ uri-patterns in <code class="inline-code">WEB-INF/web.xml</code> for this,
+ otherwise the client will get the raw templates as is! To
+ avoid a such accident, many prefers storing the templates
+ somewhere inside the <code class="inline-code">WEB-INF</code> directory,
+ which is never visitable directly. This mechanism will very
+ likely be the preferred means of loading templates for servlet
+ applications, since the templates can be updated without
+ restarting the web application, while this often doesn't work
+ with the class-loader mechanism.</p>
+ </li>
+ </ul>
+
+ <p>If you want to use a custom
+ <code class="inline-code">TemplateLoader</code> implementation, or need to set
+ up some extra settings of a built-in template loader, you need to
+ instantiate the <code class="inline-code">TemplateLoader</code> object yourself,
+ and then call
+ <code class="inline-code">Configuration.setTemplateLoader(TemplateLoader)</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">WebappTemplateLoader templateLoader = new WebappTemplateLoader(servletContext, "WEB-INF/templates");
+templateLoader.setURLConnectionUsesCaches(false);
+templateLoader.setAttemptFileAccess(false);
+cfg.setTemplateLoader(templateLoader);</pre></div>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_40">Loading templates from multiple locations</h3>
+
+
+ <p>If you need to load templates from multiple locations, you
+ have to instantiate the template loader objects for every
+ location, wrap them into a <code class="inline-code">MultiTemplateLoader</code>,
+ and finally pass that loader to the
+ <code class="inline-code">setTemplateLoader(TemplateLoader loader)</code> method
+ of <code class="inline-code">Configuration</code>. Here's an example for loading
+ templates from two distinct directories and with the
+ class-loader:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">import freemarker.cache.*; // template loaders live in this package
+
+<em>...</em>
+
+FileTemplateLoader ftl1 = new FileTemplateLoader(new File("/tmp/templates"));
+FileTemplateLoader ftl2 = new FileTemplateLoader(new File("/usr/data/templates"));
+ClassTemplateLoader ctl = new ClassTemplateLoader(getClass(), "/com/example/templates");
+
+MultiTemplateLoader mtl = new MultiTemplateLoader(new TemplateLoader[] { ftl1, ftl2, ctl });
+
+cfg.setTemplateLoader(mtl);</pre></div>
+
+ <p>Now FreeMarker will try to load templates from
+ <code class="inline-code">/tmp/templates</code> directory, and if it does not
+ find the requested template there, it will try to load that from
+ <code class="inline-code">/usr/data/templates</code>, and if it still does not
+ find the requested template, then it tries to load it from the
+ <code class="inline-code">com.example.templates</code> Java package.</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_41">Loading templates from other sources</h3>
+
+
+ <p>If none of the built-in class loaders fit your needs, you
+ can write your own class that implements the
+ <code class="inline-code">freemarker.cache.TemplateLoader</code> interface and
+ pass it to the <code class="inline-code">setTemplateLoader(TemplateLoader
+ loader)</code> method of <code class="inline-code">Configuration</code>.
+ Please read the API JavaDoc for more information.</p>
+
+ <p>If your template source accesses the templates through an
+ URL, you needn't implement a <code class="inline-code">TemplateLoader</code>
+ from scratch; you can choose to subclass
+ <code class="inline-code">freemarker.cache.URLTemplateLoader</code> instead and
+ just implement the <code class="inline-code">URL getURL(String
+ templateName)</code> method.</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_42">The template name (template path)</h3>
+
+
+
+
+
+
+
+
+ <p>It is up to the template loader how it interprets template
+ names (also known as template paths). But to work together with
+ other components there are restrictions regarding the format of
+ the path. In general, it is strongly recommended that template
+ loaders use URL-style paths. The path must not use
+ <code class="inline-code">/</code> (path step separator) character, nor the
+ <code class="inline-code">.</code> (same-directory) and <code class="inline-code">..</code>
+ (parent directory) path steps with other meaning than they have in
+ URL paths (or in UN*X paths). The <code class="inline-code">*</code> (asterisk)
+ step is also reserved, and used for "template
+ acquisition" feature of FreeMarker.</p>
+
+ <p><code class="inline-code">://</code> (or with
+ <code class="inline-code">template_name_format</code> setting set to
+ <code class="inline-code">DEFAULT_2_4_0</code>, the <code class="inline-code">:</code> (colon)
+ character) is reserved for specifying a scheme part, similarly as
+ it works with URI-s. For example
+ <code class="inline-code">someModule://foo/bar.ftl</code> uses the
+ <code class="inline-code">someModule</code>, or assuming the
+ <code class="inline-code">DEFAULT_2_4_0</code> format,
+ <code class="inline-code">classpath:foo/bar.ftl</code> uses the
+ <code class="inline-code">classpath</code> scheme. Interpreting the scheme part
+ is completely up to the <code class="inline-code">TemplateLoader</code>. (The
+ FreeMarker core is only aware of the idea of schemes because
+ otherwise it couldn't resolve relative template names
+ properly.)</p>
+
+ <p>FreeMarker always normalizes the paths before passing them
+ to the <code class="inline-code">TemplateLoader</code>, so the paths don't
+ contain <code class="inline-code">/../</code> or such, and are relative to the
+ imaginary template root directory (that is, they don't start with
+ <code class="inline-code">/</code>). They don't contain the <code class="inline-code">*</code>
+ step either, as template acquisition happens in an earlier stage.
+ Furthermore, with <code class="inline-code">template_name_format</code> setting
+ set to <code class="inline-code">DEFAULT_2_4_0</code>, multiple consecutive
+ <code class="inline-code">/</code>-s will be normalized to a single
+ <code class="inline-code">/</code> (unless they are part of the
+ <code class="inline-code">://</code> scheme separator).</p>
+
+ <p>Note that FreeMarker template path should always uses slash
+ (not backslash) regardless of the host OS.</p>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="pgui_config_templateloading_caching">Template caching</h2>
+
+
+
+
+
+
+ <p>FreeMarker caches templates (assuming you use the
+ <code class="inline-code">Configuration</code> methods to create
+ <code class="inline-code">Template</code> objects). This means that when you call
+ <code class="inline-code">getTemplate</code>, FreeMarker not only returns the
+ resulting <code class="inline-code">Template</code> object, but stores it in a
+ cache, so when next time you call <code class="inline-code">getTemplate</code>
+ with the same (or equivalent) path, it just returns the cached
+ <code class="inline-code">Template</code> instance, and will not load and parse
+ the template file again.</p>
+
+ <p>If you change the template file, then FreeMarker will re-load
+ and re-parse the template automatically when you get the template
+ next time. However, since always checking for changes can be burden
+ for a system that processes lot of templates, there is a
+ <code class="inline-code">Configuration</code> level setting called "update
+ delay" (defaults is 5 seconds). Until this much time has
+ elapsed since the last checking for a newer version, FreeMarker will
+ not check again if the template was changed. If you want to see the
+ changes without delay, set this setting to 0. Note that some
+ template loaders won't see that a template was changed because of
+ the underlying storage mechanism doesn't support that; for example,
+ class-loader based template loaders may have this problem.</p>
+
+ <p>A template will be removed from the cache if you call
+ <code class="inline-code">getTemplate</code> and FreeMarker realizes that the
+ template file has been removed meanwhile. Also, if the JVM thinks
+ that it begins to run out of memory, by default it can arbitrarily
+ drop templates from the cache. Furthermore, you can empty the cache
+ manually with the <code class="inline-code">clearTemplateCache</code> method of
+ <code class="inline-code">Configuration</code>. You can also drop selected
+ template from the cache with
+ <code class="inline-code">removeTemplateFromCache</code>; this can be also
+ utilized to force re-loading a template regardless of the
+ "update delay" setting.</p>
+
+ <p>The actual strategy of when a cached template should be thrown
+ away is pluggable with the <code class="inline-code">cache_storage</code> setting,
+ by which you can plug any <code class="inline-code">CacheStorage</code>
+ implementation. For most users
+ <code class="inline-code">freemarker.cache.MruCacheStorage</code> will be
+ sufficient. This cache storage implements a two-level Most Recently
+ Used cache. In the first level, items are strongly referenced up to
+ the specified maximum (strongly referenced items can't be dropped by
+ the JVM, as opposed to softly referenced items). When the maximum is
+ exceeded, the least recently used item is moved into the second
+ level cache, where they are softly referenced, up to another
+ specified maximum. The size of the strong and soft parts can be
+ specified with the constructor. For example, set the size of the
+ strong part to 20, and the size of soft part to 250:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">cfg.setCacheStorage(new freemarker.cache.MruCacheStorage(20, 250))</pre></div>
+
+ <p>Or, since <code class="inline-code">MruCacheStorage</code> is the default
+ cache storage implementation:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">cfg.setSetting(Configuration.CACHE_STORAGE_KEY, "strong:20, soft:250");</pre></div>
+
+ <p>When you create a new <code class="inline-code">Configuration</code> object,
+ initially it uses an <code class="inline-code">MruCacheStorage</code> where
+ <code class="inline-code">strongSizeLimit</code> is 0, and
+ <code class="inline-code">softSizeLimit</code> is
+ <code class="inline-code">Integer.MAX_VALUE</code> (that is, in practice,
+ infinite). Depending on how smart the JVM is, using non-0
+ <code class="inline-code">strongSizeLimit</code> is maybe a safer option, as with
+ only softly referenced items the JVM could even throw the most
+ frequently used templates when there's a resource shortage, which
+ then have to be re-loaded and re-parsed, burdening the system even
+ more.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_config_settings.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_errorhandling.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_datamodel.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_datamodel.html b/builds/2.3.26-nightly/pgui_datamodel.html
new file mode 100644
index 0000000..d660cee
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_datamodel.html
@@ -0,0 +1,55 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-chapter">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>The Data Model - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="The Data Model">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_datamodel.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_datamodel.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_datamodel.html"><span itemprop="name">The Data Model</span></a></li></ul><div class="bookmark
s" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","The Data Model"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_quickstart_all.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_datamodel_basics.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-chapter" id="pgui_datamodel" itemprop="headline">The Data Model</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Section Contents</div>
+<ul><li><a class="page-menu-link" href="pgui_datamodel_basics.html" data-menu-target="pgui_datamodel_basics">Basics</a></li><li><a class="page-menu-link" href="pgui_datamodel_scalar.html" data-menu-target="pgui_datamodel_scalar">Scalars</a></li><li><a class="page-menu-link" href="pgui_datamodel_parent.html" data-menu-target="pgui_datamodel_parent">Containers</a></li><li><a class="page-menu-link" href="pgui_datamodel_method.html" data-menu-target="pgui_datamodel_method">Methods</a></li><li><a class="page-menu-link" href="pgui_datamodel_directive.html" data-menu-target="pgui_datamodel_directive">Directives</a></li><li><a class="page-menu-link" href="pgui_datamodel_node.html" data-menu-target="pgui_datamodel_node">Node variables</a></li><li><a class="page-menu-link" href="pgui_datamodel_objectWrapper.html" data-menu-target="pgui_datamodel_objectWrapper">Object wrappers</a></li></ul> </div><p>This is just an introductory explanation. See the <a href="api/index.html">FreeMarker Java API
documentation</a> for more
+ detailed information.</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_quickstart_all.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_datamodel_basics.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_datamodel_basics.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_datamodel_basics.html b/builds/2.3.26-nightly/pgui_datamodel_basics.html
new file mode 100644
index 0000000..eae2c70
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_datamodel_basics.html
@@ -0,0 +1,105 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Basics - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Basics">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_datamodel_basics.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_datamodel_basics.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_datamodel.html"><span itemprop="name">The Data Model</span></a></li><li class="step-3" itempr
op="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_datamodel_basics.html"><span itemprop="name">Basics</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","The Data Model","Basics"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_datamodel.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_datamodel_scalar.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_datamodel_basics" itemprop="headline">Basics</h1>
+</div></div><p>You have seen how to build a data-model in the <a href="pgui_quickstart.html">Getting Started</a> using the standard
+ Java classes (<code class="inline-code">Map</code>, <code class="inline-code">String</code>,
+ etc.). Internally, the variables available in the template are Java
+ objects that implement the
+ <code class="inline-code">freemarker.template.TemplateModel</code> interface. But
+ you could use standard Java collections as variables in your
+ data-model, because these were replaced with the appropriate
+ <code class="inline-code">TemplateModel</code> instances behind the scenes. This
+ facility is called <strong>object wrapping</strong>.
+ The object wrapping facility can convert <em>any</em> kind
+ of object transparently to the instances of classes that implement
+ <code class="inline-code">TemplateModel</code> interface. This makes it possible,
+ for example, to access <code class="inline-code">java.sql.ResultSet</code> as
+ sequence variable in templates, or to access
+ <code class="inline-code">javax.servlet.ServletRequest</code> objects as a hash
+ variable that contains the request attributes, or even to traverse XML
+ documents as FTL variables (<a href="xgui.html">see here</a>). To
+ wrap (convert) these objects, however, you need to plug the proper
+ <code class="inline-code">ObjectWrapper</code> implementation (possibly your custom
+ implementation); this will be discussed <a href="pgui_datamodel_objectWrapper.html">later</a>. The point for now
+ is that any object that you want to access from the templates, sooner
+ or later must be converted to an object that implements
+ <code class="inline-code">TemplateModel</code> interface. So first you should
+ familiarize yourself with writing of <code class="inline-code">TemplateModel</code>
+ implementations.</p><p>There is roughly one
+ <code class="inline-code">freemarker.template.TemplateModel</code> descendant
+ interface corresponding to each basic type of variable
+ (<code class="inline-code">TemplateHashModel</code> for hashes,
+ <code class="inline-code">TemplateSequenceModel</code> sequences,
+ <code class="inline-code">TemplateNumberModel</code> for numbers, etc.). For
+ example, if you want to expose a <code class="inline-code">java.sql.ResultSet</code>
+ as a sequence for the templates, then you have to write a
+ <code class="inline-code">TemplateSequenceModel</code> implementation that can read
+ <code class="inline-code">java.sql.ResultSet</code>-s. We used to say on this, that
+ you <em>wrap</em> the
+ <code class="inline-code">java.sql.ResultSet</code> with your
+ <code class="inline-code">TemplateModel</code> implementation, as basically you just
+ encapsulate the <code class="inline-code">java.sql.ResultSet</code> to provide
+ access to it with the common <code class="inline-code">TemplateSequenceModel</code>
+ interface. Note that a class can implement multiple
+ <code class="inline-code">TemplateModel</code> interfaces; this is why FTL variables
+ can have multiple types (see: <a href="dgui_datamodel_basics.html">Template Author's Guide/Values, Types/Basics</a>)</p><p>Note that a trivial implementation of these interfaces is
+ provided with the <code class="inline-code">freemarker.template</code> package. For
+ example, to convert a <code class="inline-code">String</code> to FTL string
+ variable, you can use <code class="inline-code">SimpleScalar</code>, to convert a
+ <code class="inline-code">java.util.Map</code> to FTL hash variable, you can use
+ <code class="inline-code">SimpleHash</code>, etc.</p><p>An easy way to try your own <code class="inline-code">TemplateModel</code>
+ implementation, is to create an instance of that, and drop it directly
+ into the data-model (as <code class="inline-code">put</code> it into the root hash).
+ The object wrapper will expose it untouched for the template, as it
+ already implements <code class="inline-code">TemplateModel</code>, so no conversion
+ (wrapping) needed. (This trick is also useful in cases when you do not
+ want the object wrapper to try to wrap (convert) a certain
+ object.)</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_datamodel.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_datamodel_scalar.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[20/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_local.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_local.html b/builds/2.3.26-nightly/ref_directive_local.html
new file mode 100644
index 0000000..60fe864
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_local.html
@@ -0,0 +1,114 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>local - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="local">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_local.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_local.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_local.html"><span itemprop="name">local</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","local"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_list.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_macro.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_local" itemprop="headline">local</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_110" data-menu-target="autoid_110">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_111" data-menu-target="autoid_111">Description</a></li></ul> </div><a name="ref.directive.local"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_110">Synopsis</h2>
+
+
+
+<pre class="metaTemplate">
+<code class="inline-code"><#local <em class="code-color">name</em>=<em class="code-color">value</em>></code>
+or
+<code class="inline-code"><#local <em class="code-color">name1</em>=<em class="code-color">value1</em> <em class="code-color">name2</em>=<em class="code-color">value2</em> <em class="code-color">... nameN</em>=<em class="code-color">valueN</em>></code>
+or
+<code class="inline-code"><#local <em class="code-color">name</em>>
+ <em class="code-color">capture this</em>
+</#local>
+</code>
+</pre>
+
+
+ <p>Where:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code"><em class="code-color">name</em></code>: the
+ name of the local object in the root. It is not an expression.
+ However, it can be written as a string literal, which is useful
+ if the variable name contains reserved characters, for example
+ <code class="inline-code"><#local "foo-bar" = 1></code>. Note that this
+ string literal does not expand interpolations (as
+ <code class="inline-code">"${foo}"</code>).
+ </li>
+
+ <li>
+ <code class="inline-code">=</code>: Assignment operator, which can also
+ be one of the shorthand assignment operators
+ (<code class="inline-code">++</code>, <code class="inline-code">+=</code>, etc.), just like
+ with <a href="ref_directive_assign.html">the
+ <code>assign</code> directive</a>,
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">value</em></code>: the
+ value to store. Expression.
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_111">Description</h2>
+
+
+ <p>It is similar to <a href="ref_directive_assign.html#ref.directive.assign">assign
+ directive</a>, but it creates or replaces local variables. This
+ only works inside macro definitions and function definitons.</p>
+
+ <p>For more information about variables, read this: <a href="dgui_misc_var.html">Template Author's Guide/Miscellaneous/Defining variables in the template</a></p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_list.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_macro.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_macro.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_macro.html b/builds/2.3.26-nightly/ref_directive_macro.html
new file mode 100644
index 0000000..0c5ee41
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_macro.html
@@ -0,0 +1,450 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>macro, nested, return - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="macro, nested, return">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_macro.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_macro.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_macro.html"><span itemprop="name">macro, nested, return</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","macro, nested, return"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_local.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_noautoesc.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_macro" itemprop="headline">macro, nested, return</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_112" data-menu-target="autoid_112">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_113" data-menu-target="autoid_113">Description</a><ul><li><a class="page-menu-link" href="#autoid_114" data-menu-target="autoid_114">nested</a></li><li><a class="page-menu-link" href="#autoid_115" data-menu-target="autoid_115">return</a></li></ul></li></ul> </div><a name="ref.directive.macro"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_112">Synopsis</h2>
+
+
+
+<pre class="metaTemplate">
+<code class="inline-code"><#macro <em class="code-color">name</em> <em class="code-color">param1</em> <em class="code-color">param2</em> <em class="code-color">... paramN</em>>
+ <em class="code-color">...</em>
+ <#nested <em class="code-color">loopvar1</em>, <em class="code-color">loopvar2</em>, <em class="code-color">...</em>, <em class="code-color">loopvarN</em>>
+ <em class="code-color">...</em>
+ <#return>
+ <em class="code-color">...</em>
+</#macro></code>
+</pre>
+
+
+ <p>Where:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code"><em class="code-color">name</em></code>: name
+ of macro variable. It's not an expression. It follows the same
+ syntax as <a href="dgui_template_exp.html#dgui_template_exp_var_toplevel">like
+ top-level variable references</a>, like
+ <code class="inline-code">myMacro</code> or <code class="inline-code">my\-macro</code>.
+ However, it can also be written as a string literal, which is
+ useful if the macro name contains characters that can't be
+ specified in an identifier, for example <code class="inline-code"><#macro
+ "foo~bar"><em class="code-color">...</em></code>. Note that
+ this string literal does not expand interpolations (as
+ <code class="inline-code">"${foo}"</code>).
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">param1</em></code>,
+ <code class="inline-code"><em class="code-color">param2</em></code>, ...etc.:
+ the name of the <a href="dgui_misc_var.html">local
+ variables</a> store the parameter values (not expression),
+ optionally followed by <code class="inline-code">=</code> and the default
+ value (that's an expression). The default value can even be
+ another parameter, for example <code class="inline-code"><#macro section title
+ label=title></code>. The parameter name uses the same
+ syntax as <a href="dgui_template_exp.html#dgui_template_exp_var_toplevel">like
+ top-level variable references</a>, so the same features and
+ restrictions apply.
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">paramN</em></code>,
+ the last parameter may optionally has 3 trailing dots
+ (<code class="inline-code">...</code>), which indicates that the macro takes a
+ variable number of parameters and the parameters that doesn't
+ match any other parameters will be collected in this last
+ parameter (also called the catch-all parameter). When the macro
+ is called with named parameters,
+ <code class="inline-code"><em class="code-color">paramN</em></code> will be a
+ hash containing all of the undeclared key/value pairs passed to
+ the macro. When the macro is called using positional parameters,
+ <code class="inline-code"><em class="code-color">paramN</em></code> will be the
+ sequence of the extra parameter values. (Inside the macro, to
+ find out which was the case, you can use
+ <code class="inline-code"><em class="code-color">myCatchAllParam</em>?is_sequence</code>.)
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">loopvar1</em></code>,
+ <code class="inline-code"><em class="code-color">loopvar2</em></code>, ...etc.:
+ Optional. The values of <a href="dgui_misc_var.html">loop
+ variables</a> that the <code class="inline-code">nested</code> directive
+ wants to create for the nested content. These are
+ expressions.
+ </li>
+ </ul>
+
+ <p>The <code class="inline-code">return</code> and <code class="inline-code">nested</code>
+ directives are optional and can be used anywhere and for any times
+ between the <code class="inline-code"><#macro
+ <em class="code-color">...</em>></code> and
+ <code class="inline-code"></#macro></code>.</p>
+
+ <p>Parameters without default value must precede parameters with
+ default value
+ (<code class="inline-code"><em class="code-color">paramName</em>=<em class="code-color">defaultValue</em></code>).</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_113">Description</h2>
+
+
+ <p>Creates a macro variable (in the current namespace, if you
+ know namespace feature). If you are new to macros and user-defined
+ directives you should read the <a href="dgui_misc_userdefdir.html">the tutorial about user-defined
+ directives</a>.</p>
+
+ <p>Macro variable stores a template fragment (called macro
+ definition body) that can be used as <a href="ref_directive_userDefined.html#ref.directive.userDefined">user-defined directive</a>.
+ The variable also stores the name of allowed parameters to the
+ user-defined directive. You must give value for all of those
+ parameters when you use the variable as directive, except for
+ parameters that has a default value. The default value will be used
+ if and only if you don't give value for the parameter when you call
+ the macro.</p>
+
+ <p>The variable will be created at the beginning of the template;
+ it does not mater where the <code class="inline-code">macro</code> directive is
+ placed in the template. Thus, this will work:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#-- call the macro; the macro variable is already created: -->
+<@test/>
+...
+
+<#-- create the macro variable: -->
+<#macro test>
+ Test text
+</#macro></pre></div>
+
+ <p>However, if the macro definitions are inserted with
+ <code class="inline-code">include</code> directive, they will not be available
+ until FreeMarker has executed the <code class="inline-code">include</code>
+ directive.</p>
+
+ <p>Example: Macro without parameters:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro test>
+ Test text
+</#macro>
+<#-- call the macro: -->
+<@test/></pre></div>
+
+ <p>Output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> Test text
+ </pre></div>
+
+ <p>Example: Macro with parameters:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro test foo bar baaz>
+ Test text, and the params: ${foo}, ${bar}, ${baaz}
+</#macro>
+<#-- call the macro: -->
+<@test foo="a" bar="b" baaz=5*5-2/></pre></div>
+
+ <p>Output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> Test text, and the params: a, b, 23
+ </pre></div>
+
+ <p>Example: Macro with parameters and default parameter
+ values:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro test foo bar="Bar" baaz=-1>
+ Test text, and the params: ${foo}, ${bar}, ${baaz}
+</#macro>
+<@test foo="a" bar="b" baaz=5*5-2/>
+<@test foo="a" bar="b"/>
+<@test foo="a" baaz=5*5-2/>
+<@test foo="a"/></pre></div>
+
+ <p>Output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> Test text, and the params: a, b, 23
+ Test text, and the params: a, b, -1
+ Test text, and the params: a, Bar, 23
+ Test text, and the params: a, Bar, -1
+ </pre></div>
+
+ <p>Example: A more complex macro.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro list title items>
+ <p>${title?cap_first}:
+ <ul>
+ <#list items as x>
+ <li>${x?cap_first}
+ </#list>
+ </ul>
+</#macro>
+<@list items=["mouse", "elephant", "python"] title="Animals"/></pre></div>
+
+ <p>Output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> <p>Animals:
+ <ul>
+ <li>Mouse
+ <li>Elephant
+ <li>Python
+ </ul>
+ </pre></div>
+
+ <p>Example: A macro with support for a variable number of named
+ parameters:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro img src extra...>
+ <img src="/myapp${src?ensure_starts_with('/')}"
+ <#list extra as attrName, attrVal>
+ ${attrName}="${attrVal}"
+ </#list>
+ >
+</#macro>
+<@img src="/images/test.png" width=100 height=50 alt="Test"/></pre></div>
+
+ <p>Output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> <img src="/context/images/test.png"
+ alt="Test"
+ height="50"
+ width="100"
+ ></pre></div>
+
+ <p>Example: A macro that supports a variable number of positional
+ parameters, regardless if it uses named or positional parameter
+ passing:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro m a b ext...>
+ a = ${a}
+ b = ${b}
+ <#if ext?is_sequence>
+ <#list ext as e>
+ ${e?index} = ${e}
+ </#list>
+ <#else>
+ <#list ext as k, v>
+ ${k} = ${v}
+ </#list>
+ </#if>
+</#macro>
+
+<@m 1 2 3 4 5 />
+
+<@m a=1 b=2 c=3 d=4 e=5 data\-foo=6 myns\:bar=7 /></pre></div>
+
+ <p>Output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> a = 1
+ b = 2
+ 0 = 3
+ 1 = 4
+ 2 = 5
+
+ a = 1
+ b = 2
+ c = 3
+ d = 4
+ e = 5
+ data-foo=6
+ myns:bar=7</pre></div>
+
+ <div class="callout warning">
+ <strong class="callout-label">Warning!</strong>
+
+ <p>Currently, named catch-all parameters are unordered, that
+ is, you don't know what order will they be enumerated. That is,
+ they aren't returned in the same order as they were passed in
+ (that above example output shows them in the same order for
+ understandability only).</p>
+ </div>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_114">nested</h3>
+
+
+ <a name="ref.directive.nested"></a>
+
+ <p>The <code class="inline-code">nested</code> directive executes the
+ template fragment between the start-tag and end-tags of the
+ user-defined directive. The nested part can contain anything what
+ is valid in templates; interpolations, directives, ...etc. It is
+ executed in the context where the macro was called from, rather
+ than in the context of the macro definition body. Thus, for
+ example, you don't see the local variables of the macro in the
+ nested part. If you don't call the <code class="inline-code">nested</code>
+ directive, the part between the start-tag and end-tags of the
+ user-defined directive will be ignored.</p>
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro do_twice>
+ 1. <#nested>
+ 2. <#nested>
+</#macro>
+<@do_twice>something</@do_twice></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> 1. something
+ 2. something
+ </pre></div>
+
+ <p>The nested directive can create loop variables for the
+ nested content. For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro do_thrice>
+ <#nested <strong>1</strong>>
+ <#nested <strong>2</strong>>
+ <#nested <strong>3</strong>>
+</#macro>
+<@do_thrice <strong>; x</strong>>
+ ${<strong>x</strong>} Anything.
+</@do_thrice></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> 1 Anything.
+ 2 Anything.
+ 3 Anything.
+ </pre></div>
+
+ <p>A more complex example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro repeat count>
+ <#list 1..count as x>
+ <#nested <strong>x, x/2, x==count</strong>>
+ </#list>
+</#macro>
+<@repeat count=4 ; <strong>c, halfc, last</strong>>
+ ${<strong>c</strong>}. ${<strong>halfc</strong>}<#if <strong>last</strong>> Last!</#if>
+</@repeat></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> 1. 0.5
+ 2. 1
+ 3. 1.5
+ 4. 2 Last!
+ </pre></div>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_115">return</h3>
+
+
+ <a name="ref.directive.macro.return"></a>
+
+ <p>With the <code class="inline-code">return</code> directive, you can leave
+ a macro or function definition body anywhere. Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro test>
+ Test text
+ <#return>
+ Will not be printed.
+</#macro>
+<@test/></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> Test text
+ </pre></div>
+
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_local.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_noautoesc.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_noautoesc.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_noautoesc.html b/builds/2.3.26-nightly/ref_directive_noautoesc.html
new file mode 100644
index 0000000..7664b2f
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_noautoesc.html
@@ -0,0 +1,123 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>noautoesc - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="noautoesc">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_noautoesc.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_noautoesc.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_noautoesc.html"><span itemprop="name">noautoesc</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","noautoesc"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_macro.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_noparse.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_noautoesc" itemprop="headline">noautoesc</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_116" data-menu-target="autoid_116">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_117" data-menu-target="autoid_117">Description</a></li></ul> </div><a name="ref.directive.noautoesc"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_116">Synopsis</h2>
+
+
+
+<pre class="metaTemplate"><code class="inline-code"><#noautoesc>
+ <em class="code-color">...</em>
+</#noautoesc></code>
+</pre>
+
+
+ <p>Camel case name variant: <code class="inline-code">noAutoEsc</code></p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_117">Description</h2>
+
+
+ <p>Disables <a href="dgui_misc_autoescaping.html">auto-escaping</a> in the nested
+ section. Note that to prevent escaping for just a single
+ <code class="inline-code">${<em class="code-color">expression</em>}</code> you
+ should use
+ <code class="inline-code">${<em class="code-color">expression</em>?no_esc}</code>
+ instead.</p>
+
+ <p>This directive only has effect on the section that is
+ literally (as in the text editor) inside the nested bock, not on the
+ parts that are called/included from there.</p>
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#ftl output_format="XML">
+${"&"}
+<#noautoesc>
+ ${"&"}
+ ...
+ ${"&"}
+</#noautoesc>
+${"&"}</pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">&amp;
+ &
+ ...
+ &
+&amp;</pre></div>
+
+ <p><code class="inline-code">noautoesc</code> can be used regardless of what
+ the current <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_outputformat">output format</a>
+ is (unlike the <a href="ref_directive_autoesc.html"><code>autoesc</code>
+ directive</a>).</p>
+
+ <p><code class="inline-code">noautoesc</code> can also be used nested into
+ <a href="ref_directive_autoesc.html"><code>autoesc</code>
+ directive</a> to re-enable escaping.</p>
+
+ <p><code class="inline-code">noautoesc</code> can be used on places where
+ auto-escaping is already disabled, such as even inside another
+ <code class="inline-code">noautoesc</code> block. Doing so is redundant but
+ allowed.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_macro.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_noparse.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_noparse.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_noparse.html b/builds/2.3.26-nightly/ref_directive_noparse.html
new file mode 100644
index 0000000..d22261c
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_noparse.html
@@ -0,0 +1,105 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>noparse - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="noparse">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_noparse.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_noparse.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_noparse.html"><span itemprop="name">noparse</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","noparse"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_noautoesc.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_nt.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_noparse" itemprop="headline">noparse</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_118" data-menu-target="autoid_118">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_119" data-menu-target="autoid_119">Description</a></li></ul> </div><a name="ref.directive.noparse"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_118">Synopsis</h2>
+
+
+
+<pre class="metaTemplate">
+<code class="inline-code"><#noparse>
+ <em class="code-color">...</em>
+</#noparse></code>
+</pre>
+
+
+ <p>Camel case name variant: <code class="inline-code">noParse</code></p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_119">Description</h2>
+
+
+ <p>FreeMarker will not search FTL tags and interpolations and
+ other special character sequences in the body of this directive,
+ except the noparse end-tag.</p>
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">Example:
+--------
+
+<strong><#noparse></strong>
+ <#list animals as animal>
+ <tr><td>${animal.name}<td>${animal.price} Euros
+ </#list>
+<strong></#noparse></strong></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">Example:
+--------
+
+ <#list animals as animal>
+ <tr><td>${animal.name}<td>${animal.price} Euros
+ </#list>
+ </pre></div>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_noautoesc.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_nt.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_nt.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_nt.html b/builds/2.3.26-nightly/ref_directive_nt.html
new file mode 100644
index 0000000..5b59a63
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_nt.html
@@ -0,0 +1,80 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>nt - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="nt">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_nt.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_nt.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_nt.html"><span itemprop="name">nt</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","nt"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_noparse.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_outputformat.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_nt" itemprop="headline">nt</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_120" data-menu-target="autoid_120">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_121" data-menu-target="autoid_121">Description</a></li></ul> </div><a name="ref.directive.nt"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_120">Synopsis</h2>
+
+
+
+<pre class="metaTemplate">
+<code class="inline-code"><#nt></code>
+</pre>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_121">Description</h2>
+
+
+ <p>"No Trim". This directive disables <a href="dgui_misc_whitespace.html#dgui_misc_whitespace_stripping">white-space
+ stripping</a> in the line where it occurs. It also disables the
+ effect of other trim directives occurring in the same line (the
+ effect of <code class="inline-code">t</code>, <code class="inline-code">rt</code>,
+ <code class="inline-code">lt</code>).</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_noparse.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_outputformat.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_outputformat.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_outputformat.html b/builds/2.3.26-nightly/ref_directive_outputformat.html
new file mode 100644
index 0000000..85e6bd8
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_outputformat.html
@@ -0,0 +1,194 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>outputformat - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="outputformat">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_outputformat.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_outputformat.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_outputformat.html"><span itemprop="name">outputformat</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","outputformat"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_nt.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_setting.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_outputformat" itemprop="headline">outputformat</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_122" data-menu-target="autoid_122">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_123" data-menu-target="autoid_123">Description</a></li></ul> </div><a name="ref.directive.outputformat"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_122">Synopsis</h2>
+
+
+
+<pre class="metaTemplate"><code class="inline-code"><#outputformat <em class="code-color">formatName</em>>
+ <em class="code-color">...</em>
+</#outputFormat></code>
+</pre>
+
+
+ <p>Where:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code"><em class="code-color">formatName</em></code>:
+ A string constant; can't contain runtime expressions! This is
+ the name of the output format, like <code class="inline-code">"HTML"</code>,
+ <code class="inline-code">"XML"</code>, etc.; see the <a href="dgui_misc_autoescaping.html#topic.predefinedOutputFormats">table of the predefined
+ output formats here</a>. The referred output format must be
+ known by the <code class="inline-code">Configuration</code>, or else a <a href="gloss.html#gloss.parseTimeError">parse-time error</a> will
+ occur. The name can also be like
+ <code class="inline-code">"<em class="code-color">outerFormatName</em>{<em class="code-color">innerFormatName</em>}"</code>,
+ or
+ <code class="inline-code">"{<em class="code-color">innerFormatName</em>}"</code>;
+ <a href="#topic.combinedOutputFormats">see combined output
+ formats later</a>.
+ </li>
+ </ul>
+
+ <p>Camel case name variant: <code class="inline-code">outputFormat</code> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p><code class="inline-code">outputformat</code> exists since FreeMarker
+ 2.3.24.</p>
+ </div>
+</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_123">Description</h2>
+
+
+ <p>Sets the <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_outputformat">output format</a>
+ to the specified one, inside the nested block. At the end of the
+ block, the earlier output format is restored.</p>
+
+ <p>This directive only has effect on the section that is
+ literally (as in the text editor) inside the nested bock, not on the
+ parts that are called/included from there.</p>
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#ftl output_format="XML">
+XML escaping: ${"&{}"}
+<#outputformat "RTF">
+ RTF escaping: ${"&{}"}
+</#outputformat>
+<#outputformat "plainText">
+ No escsaping: ${"&{}"}
+</#outputformat>
+XML escsaping: ${"&{}"}</pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">XML escsaping: &amp;{}
+ RTF escaping: &\{\}
+ No escsaping: &{}
+XML escsaping: &amp;{}</pre></div>
+
+
+
+
+
+
+<h3 class="content-header header-simplesect" id="topic.combinedOutputFormats">Combined (nested) output formats</h3>
+
+
+ <p>When <code class="inline-code">outputformat</code>-s are nested into each
+ other, normally, only the innermost output format will count. For
+ example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#ftl output_format="XML">
+${"'{}"}
+<#outputformat "HTML">
+ ${"'{}"}
+ <#outputformat "RTF">
+ ${"'{}"}
+ </#outputformat>
+</#outputformat></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">&apos;{}
+ &#39;{}
+ '\{\}</pre></div>
+
+ <p>But sometimes you want all enclosing output format escaping
+ to be applied at once. In that case the 2nd
+ <code class="inline-code">${<em class="code-color">...</em>}</code> above should
+ be escaped with <code class="inline-code">"HTML"</code> and then with
+ <code class="inline-code">"XML"</code>, and the 3rd
+ <code class="inline-code">${<em class="code-color">...</em>}</code> should be
+ escaped with <code class="inline-code">"RTF"</code> and then with
+ <code class="inline-code">"HTML"</code> and then with <code class="inline-code">"XML"</code>.
+ These are called combined output formats, and can be referred by
+ names like <code class="inline-code">"XML{HTML}"</code> and
+ <code class="inline-code">"XML{HTLM{RTF}}"</code>, respectively. We could use
+ these names in the earlier two <code class="inline-code">outputformat</code>
+ calls, however, there's a shorthand where you inherit the part
+ outside the <code class="inline-code">{<em class="code-color">...</em>}</code>
+ from the enclosing output format:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#ftl outputFormat="XML">
+${"'{}"}
+<#outputFormat "{HTML}"><#-- Same as "XML{HTML}" -->
+ ${"'{}"}
+ <#outputFormat '{RTF}'><#-- Same as "XML{HTML{RTF}}" -->
+ ${"'{}"}
+ </#outputFormat>
+</#outputFormat></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">&apos;{}
+ &amp;#39;{}
+ &amp;#39;\{\}</pre></div>
+
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_nt.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_setting.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[05/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_23.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_23.html b/builds/2.3.26-nightly/versions_2_3_23.html
new file mode 100644
index 0000000..53bbb7d
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_23.html
@@ -0,0 +1,423 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.23 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.23">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_23.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_23.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_23.html"><span itemprop="name">2.3.23</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.23"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_24.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_22.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_23" itemprop="headline">2.3.23</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_164" data-menu-target="autoid_164">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_165" data-menu-target="autoid_165">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_166" data-menu-target="autoid_166">Other changes</a></li><li><a class="page-menu-link" href="#autoid_167" data-menu-target="autoid_167">Notes</a></li></ul> </div><p>Date of release: 2015-07-05</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_164">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>Listing (<code class="inline-code">#list</code>) has received some
+ specialized convenience features that target typical tasks
+ people do again and again in templates.</p>
+
+ <ul>
+ <li>
+ <p>New <code class="inline-code">list</code> directive child
+ directives. There are <code class="inline-code">else</code> and
+ <code class="inline-code">items</code> to deal with special cases with
+ 0-length lists, and <code class="inline-code">sep</code> for inserting
+ separators between items. For more details, see the <a href="ref_directive_list.html"><code>list</code>
+ directive in the Reference</a>.</p>
+ </li>
+
+ <li>
+ <p><a href="ref_builtins_loop_var.html">New built-ins
+ that act on loop variables</a>:
+ <code class="inline-code"><em class="code-color">var</em>?index</code>
+ (deprecates
+ <code class="inline-code"><em class="code-color">var</em>_index</code>),
+ <code class="inline-code"><em class="code-color">var</em>?counter</code>
+ (1-based index),
+ <code class="inline-code"><em class="code-color">var</em>?has_next</code>
+ (deprecates
+ <code class="inline-code"><em class="code-color">var</em>_has_next</code>),
+ <code class="inline-code"><em class="code-color">var</em>?is_first</code>,
+ <code class="inline-code"><em class="code-color">var</em>?is_last</code>,
+ <code class="inline-code"><em class="code-color">var</em>?item_parity</code>
+ (returns <code class="inline-code">"odd"</code> or
+ <code class="inline-code">"even"</code>),
+ <code class="inline-code"><em class="code-color">var</em>?item_parity_cap</code>,
+ <code class="inline-code"><em class="code-color">var</em>?item_cycle</code><code class="inline-code">(<em class="code-color">...</em>)</code>,
+ etc.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Added convenience assignment operators, which can be used
+ in assignment directives (<code class="inline-code">#assign</code>,
+ <code class="inline-code">#global</code> and <code class="inline-code">#local</code>
+ currently) only:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">++</code> and <code class="inline-code">--</code>: For
+ example, <code class="inline-code"><#assign counter++></code> is
+ equivalent to <code class="inline-code"><#assign counter = counter +
+ 1></code>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">+=</code>, <code class="inline-code">-=</code>,
+ <code class="inline-code">*=</code>, <code class="inline-code">/=</code> and
+ <code class="inline-code">%=</code>: For example, <code class="inline-code"><#assign
+ counter += 2></code> is equivalent to
+ <code class="inline-code"><#assign counter = counter +
+ 2></code>.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Added the <code class="inline-code">then</code> built-in, which can be
+ used like a ternary operator:
+ <code class="inline-code"><em class="code-color">someBoolean</em>?then(<em class="code-color">whenTrue</em>,
+ <em class="code-color">whenFalse</em>)</code>. Just like with
+ the ternary operator of most other languages, only one of the
+ parameter expressions will be evaluated. <a href="ref_builtins_boolean.html#ref_builtin_then">More details...</a></p>
+ </li>
+
+ <li>
+ <p>Added the <code class="inline-code">switch</code> built-in, which can be
+ used like an in-line (expression) switch-case-default statement:
+ <code class="inline-code"><em class="code-color">someValue</em>?switch(<em class="code-color">case1</em>,
+ <em class="code-color">result1</em>,
+ <em class="code-color">case2</em>,
+ <em class="code-color">result2</em>, ...
+ <em class="code-color">caseN</em>,
+ <em class="code-color">resultN</em>,
+ <em class="code-color">defaultResult</em>)</code>, where
+ <code class="inline-code"><em class="code-color">defaultResult</em></code> can
+ be omitted (then it will be error if none of the cases matches).
+ <a href="ref_builtins_type_independent.html#ref_builtin_switch">More details...</a></p>
+ </li>
+
+ <li>
+ <p>Added camel case support for the identifiers that are part
+ of the template language (user defined names aren't affected).
+ For example, now
+ <code class="inline-code"><#noEscape>${x?upperCase}</#noEscape></code>
+ or <code class="inline-code"><#setting numberFormat="0.0"></code> or
+ <code class="inline-code"><#ftl stripText=true></code> are valid.
+ However, within the same template, FreeMarker will require you
+ to use the same naming convention consistently for all
+ identifiers that are part of the template language. It's also
+ possible to enforce the same naming convention on all templates
+ from Java via
+ <code class="inline-code">Configuration.setNamingConvention(int)</code>. It's
+ certain that camel case will be the recommended convention
+ starting from some future version, because the Java API-s users
+ call from templates use that too.</p>
+ </li>
+
+ <li>
+ <p>Added new <a href="ref_specvar.html">special
+ variables</a>, <code class="inline-code">.current_template_name</code> and
+ <code class="inline-code">.main_template_name</code>. These deprecate
+ <code class="inline-code">.template_name</code>, which was always broken when
+ it comes to macro calls. The new
+ <code class="inline-code">.current_template_name</code> always returns the
+ name of the template that contains the reference to the special
+ variable, and <code class="inline-code">.main_template_name</code> always
+ returns the name of the topmost template.</p>
+ </li>
+
+ <li>
+ <p>Smaller error message improvements. Like, added tip in the
+ error message for the frequent issue when
+ <code class="inline-code"><em class="code-color">someMap</em>[<em class="code-color">someNumber</em>]</code>
+ complains that
+ <code class="inline-code"><em class="code-color">someMap</em></code> is not a
+ sequence nor is coercible to string.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed, activated with setting
+ <code class="inline-code">incompatible_improvements</code> to 2.3.23: There's
+ a long existing parse-time rule that says that
+ <code class="inline-code">#break</code>, in the FTL source code itself, must
+ occur nested inside a breakable directive, such as
+ <code class="inline-code">#list</code> or <code class="inline-code">#switch</code>. This
+ check could be circumvented with <code class="inline-code">#macro</code> or
+ <code class="inline-code">#function</code>, like this: <code class="inline-code"><#list 1..1
+ as x><#macro
+ callMeLater><#break></#macro></#list><@callMeLater
+ /></code>. After activating this fix, this will be caught
+ as parse time error.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_165">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>Added
+ <code class="inline-code">Configuration.setNamingConvention(int)</code>. By
+ default FreeMarker will auto-detect the naming convention
+ (legacy VS camel case) used for the identifiers that are part of
+ the template language, for each template independently. This
+ setting lets you enforce a naming convention instead.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">Configuration</code> (and in fact any
+ <code class="inline-code">Configurable</code>) setting names now can be
+ written with camel case as well. For example, if you are
+ configuring FreeMarker from properties file, you can have
+ <code class="inline-code">defaultEncoding=utf-8</code> instead of
+ <code class="inline-code">default_encoding=utf-8</code>. You can use the two
+ naming conventions (camel case, and tradition snake case) mixed,
+ and <code class="inline-code">Configuration.setNamingConvention(int)</code>
+ does not influence this behavior.</p>
+ </li>
+
+ <li>
+ <p>Added
+ <code class="inline-code">Configuration.setTemplateUpdateDelayMilliseconds(long)</code>
+ and
+ <code class="inline-code">Configuration.getTemplateUpdateDelayMilliseconds()</code>.
+ This deprecates <code class="inline-code">setTemplateUpdateDelay(int)</code>,
+ which uses seconds resolution, hence going against Java
+ conventions and often leading to misunderstandings. (Also that
+ couldn't have a getter pair.)</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">template_update_delay</code> setting, when
+ specified as a string (as inside
+ <code class="inline-code">java.util.Properties</code>), supports time units,
+ like in <code class="inline-code">template_update_delay=500 ms</code>.</p>
+ </li>
+
+ <li>
+ <p>Added <code class="inline-code">Environment.getCurrentTemplate()</code>
+ method, which return the currently executed template (as opposed
+ to the main template).</p>
+ </li>
+
+ <li>
+ <p>Added
+ <code class="inline-code">WebappTemplateLoader.setAttemptFileAccess(boolean)</code>,
+ which can be used to disable the legacy trick where we try to
+ load templates through direct file access, so that template
+ updating works without restarting. Disabling URL connection
+ caches
+ (<code class="inline-code">someURLBasedTemplateLoader.setURLConnectionUsesCaches(false)</code>,
+ which is also the default since
+ <code class="inline-code">incompatible_improvements</code> 2.3.21) probably
+ solves that on modern Servlet containers.</p>
+ </li>
+
+ <li>
+ <p>In the <code class="inline-code">FreemarkerServlet</code>
+ <code class="inline-code">TemplatePath</code> init-param, paths (like
+ <code class="inline-code">/templates</code>) can have a
+ <code class="inline-code">?settings(<em class="code-color">...</em>)</code>
+ postfix, with which you can set the JavaBean properties of the
+ resulting <code class="inline-code">TemplateLoader</code>. For example:
+ <code class="inline-code"><param-value>/templates?settings(attemptFileAccess=false,
+ URLConnectionUsesCaches=false)</param-value></code></p>
+ </li>
+
+ <li>
+ <p>Added
+ <code class="inline-code">FileTemplateLoader.setEmulateCaseSensitiveFileSystem(boolean)</code>.
+ This is handy when you are developing on Windows but will deploy
+ to a platform with case sensitive file system. The default is
+ <code class="inline-code">false</code>, and <code class="inline-code">true</code> is only
+ meant for development, not for production installations. The
+ default can be overridden by setting the
+ <code class="inline-code">org.freemarker.emulateCaseSensitiveFileSystem</code>
+ system property to <code class="inline-code">true</code>.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed [<a href="https://sourceforge.net/p/freemarker/bugs/424">424</a>]:
+ <code class="inline-code">WebappTemplateLoader</code> didn't find templates
+ that are stored in
+ <code class="inline-code">WEB-INF/lib/*.jar/META-INF/resources</code>. Files
+ under that directory are visible as
+ <code class="inline-code">ServletContext</code> resources since Servlet 3.0,
+ yet <code class="inline-code">WebappTemplateLoader</code> has usually failed
+ to see them because of some internal tricks.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: If a template "file" was
+ successfully opened for reading, but then there was an
+ <code class="inline-code">IOException</code> during reading its content, the
+ parser (JavaCC) acted like if the template "file"
+ was ended there, and the exception was suppressed. It's actually
+ a JavaCC quirk that affects many other JavaCC-based languages
+ too, but now FreeMarker has added a workaround in the
+ <code class="inline-code">Template</code> constructor, and so now an exception
+ will be thrown as expected.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed:
+ <code class="inline-code">InvalidReferenceException.FAST_INSTANCE</code> could
+ accidentally store reference to an
+ <code class="inline-code">Environment</code> instance, which hence was never
+ garbage collected.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed [<a href="https://sourceforge.net/p/freemarker/bugs/426/">426</a>]:
+ When setting <code class="inline-code">incompatible_improvements</code> to
+ 2.3.22, the special variable reference
+ <code class="inline-code">.template_name</code> in templates always returns
+ the name of the main (topmost) template, due to an oversight in
+ 2.3.22. Setting <code class="inline-code">incompatible_improvements</code> to
+ 2.3.23 restores the old, backward compatible behavior. (Note
+ that the old behavior that we emulate is itself broken, as it
+ doesn't work well with macro calls; you should use
+ <code class="inline-code">.current_template_name</code> or
+ <code class="inline-code">.main_template_name</code> instead.)</p>
+ </li>
+
+ <li>
+ <p>Bug fixed [<a href="https://sourceforge.net/p/freemarker/bugs/53/">53</a>]:
+ Template parsing was abnormally slow for templates with very
+ high number AST (abstract syntax tree) nodes on the same
+ hierarchy level.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: When the template was concurrently replaced on
+ the backing store during its first loading was still ongoing,
+ the older version of the template could get into the cache with
+ the time stamp of the new version, hence it wasn't reloaded
+ after the configured update delay.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: The <code class="inline-code">log_template_exceptions</code>
+ setting (added in 2.3.22) couldn't be set through the
+ <code class="inline-code">Configurable.setSetting(String, String)</code>
+ API.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed:
+ <code class="inline-code">StringUtil.FTLStringLiteralEnc</code> has escaped
+ <code class="inline-code">$</code> (hence generating an illegal escape) and
+ haven't escaped <code class="inline-code">{</code> after <code class="inline-code">$</code>
+ and <code class="inline-code">#</code>. While this function is only used for
+ generating error messages by FreeMarker, it's a public methods
+ so anyone could use it.</p>
+ </li>
+
+ <li>
+ <p>Bugs fixed: Various canonical form glitches (they only
+ affect error messages as far as FreeMarker is concerned).</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_166">Other changes</h2>
+
+
+ <ul>
+ <li>
+ <p>Modernized Manual and site design with improved
+ functionality (always visible navigation tree, search inside the
+ Manual, etc.), thanks to Evangelia Dendramis. (Also now the Site
+ uses the same format and HTML generator as the Manual.)</p>
+ </li>
+
+ <li>
+ <p>Many smaller Manual and site content
+ updates/improvements.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_167">Notes</h2>
+
+
+ <p>Changes compared to 2.3.23 RC1:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">.current_name_name</code> and
+ <code class="inline-code">.main_template_name</code> is now missing
+ (<code class="inline-code">null</code>) instead of <code class="inline-code">""</code> if
+ the template has no name</p>
+ </li>
+
+ <li>
+ <p>Some minor error message improvements</p>
+ </li>
+
+ <li>
+ <p>Documentation refinements</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_24.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_22.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_24.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_24.html b/builds/2.3.26-nightly/versions_2_3_24.html
new file mode 100644
index 0000000..da73713
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_24.html
@@ -0,0 +1,925 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.24 (incubating at Apache) - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.24 (incubating at Apache)">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_24.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_24.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_24.html"><span itemprop="name">2.3.24 (incubating at Apache)</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.24 (incubating at Apache)"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_25.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_23.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_24" itemprop="headline">2.3.24 (incubating at Apache)</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_160" data-menu-target="autoid_160">Legal changes</a></li><li><a class="page-menu-link" href="#autoid_161" data-menu-target="autoid_161">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_162" data-menu-target="autoid_162">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_163" data-menu-target="autoid_163">Changes compared to 2.3.24 Release Candidate 1</a></li></ul> </div><p>Release date: 2016-03-28</p><p><strong>This is a stable, final
+ release.</strong> The "incubating" suffix is required
+ by the Apache Software Foundation until the project becomes a fully
+ accepted (graduated) Apache project. See disclaimer below.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_160">Legal changes</h2>
+
+
+ <p>The owner of FreeMarker is now the Apache Software Foundation.
+ The license is still Apache License Version 2.0, just like earlier,
+ but the owner is different. The official full product name has
+ changed to Apache FreeMarker.</p>
+
+ <p><strong>Disclaimer:</strong><em> Apache
+ FreeMarker is an effort undergoing incubation at The Apache Software
+ Foundation (ASF), sponsored by the <a href="http://incubator.apache.org">Apache Incubator</a>.
+ Incubation is required of all newly accepted projects until a
+ further review indicates that the infrastructure, communications,
+ and decision making process have stabilized in a manner consistent
+ with other successful ASF projects. While incubation status is not
+ necessarily a reflection of the completeness or stability of the
+ code, it does indicate that the project has yet to be fully endorsed
+ by the ASF.</em></p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_161">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>The most important new feature of this release is the
+ <a href="dgui_misc_autoescaping.html">auto-escaping and output
+ formats mechanism</a>, which deprecates escaping with the
+ <a href="ref_directive_escape.html"><code>escape</code>
+ directive</a>. These are the changes related to this new
+ mechanism (see earlier link for a guide):</p>
+
+ <ul>
+ <li>
+ <p>New <code class="inline-code">ftl</code> header options,
+ <code class="inline-code">ouput_format</code> and
+ <code class="inline-code">auto_esc</code> to override the
+ <code class="inline-code">output_format</code> and
+ <code class="inline-code">auto_escaping</code> settings of the template,
+ like <code class="inline-code"><#ftl
+ output_format='HTML'</code><code class="inline-code">
+ auto_esc=false></code>.</p>
+ </li>
+
+ <li>
+ <p>New built-in: <a href="ref_builtins_string.html#ref_builtin_no_esc"><code>no_esc</code></a>.
+ Used to prevent auto-escaping, like
+ <code class="inline-code">${descriptionInHtml?no_esc}</code>. This doesn't
+ work with <code class="inline-code"><#escape
+ <em class="code-color">...</em>></code>, only with the
+ new auto-escaping mechanism.</p>
+ </li>
+
+ <li>
+ <p>New FTL type, "markup output". This is
+ somewhat similar to string, but values of this type aren't
+ auto-escaped by the new escaping mechanism, because they are
+ known to already hold markup. (For example,
+ <code class="inline-code">?esc</code> and <code class="inline-code">?no_esc</code>
+ returns a value of this type, hence their results are
+ protected from double-escaping problems.)</p>
+ </li>
+
+ <li>
+ <p>New built-in: <a href="ref_builtins_string.html#ref_builtin_esc"><code>esc</code></a>.
+ Used for escaping with the current output format when
+ auto-escaping is disabled.</p>
+ </li>
+
+ <li>
+ <p>New built-in: <code class="inline-code">markup_string</code>. This
+ returns the markup of a <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_movalues">markup output
+ value</a> as string.</p>
+ </li>
+
+ <li>
+ <p>New built-in: <code class="inline-code">is_markup_output</code>,
+ returns <code class="inline-code">true</code> if the value is of type
+ "markup output".</p>
+ </li>
+
+ <li>
+ <p>New directive: <code class="inline-code">outputformat</code>, used
+ to change the output format for a section of a template,
+ like <code class="inline-code"><#outputformat
+ "XML"><em class="code-color">...</em></#outputformat></code></p>
+ </li>
+
+ <li>
+ <p>New directives: <code class="inline-code">noautoesc</code> and
+ <code class="inline-code">autoesc</code>, used to turn auto-escaping off
+ and on for a section of a template, like
+ <code class="inline-code"><#noautoesc><em class="code-color">...</em></#noautoesc></code>.</p>
+ </li>
+
+ <li>
+ <p>New built-in variable,
+ <code class="inline-code">.output_format</code>, returns the current
+ output format at the place of invocation.</p>
+ </li>
+
+ <li>
+ <p>New built-in variable, <code class="inline-code">.auto_esc</code>,
+ returns the boolean that tells if auto-escaping is active at
+ the place of invocation.</p>
+ </li>
+
+ <li>
+ <p>Block assignments, like <code class="inline-code"><#assign
+ <em class="code-color">captured</em>><em class="code-color">...</em></#assign></code>,
+ when the current <code class="inline-code">output_format</code> is some
+ kind of markup (like HTML), will store the captured output
+ not with string type, but with "markup output"
+ type. Thus
+ <code class="inline-code">${<em class="code-color">captured</em>}</code>
+ will not get unwanted escaping.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">+</code> operator (concatenation)
+ works with the new "markup output" type as
+ well. Like <code class="inline-code">someMarkup + somePlainText</code>
+ will result in markup where <code class="inline-code">somePlainText</code>
+ is escaped automatically before it's appended to the
+ markup.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">has_content</code> built-in now
+ supports "markup output" values, considering 0
+ length markup as empty.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>You can now define custom number and date/time/datetime
+ formatters. These are defined by the programmers (and thus can
+ implement any kind of exotic formatting rules) when configuring
+ FreeMarker, and can be referred with strings starting with
+ <code class="inline-code">"@"</code>, like in <code class="inline-code"><#setting
+ number_format='@foo'></code>, or
+ <code class="inline-code">${n?string.@foo_params}</code>,
+ <code class="inline-code"><#setting number_format='@foo params'></code>,
+ or <code class="inline-code">${n?string.@foo}</code>,
+ <code class="inline-code">${n?string.@foo_params}</code>. For backward
+ compatibility, the initial <code class="inline-code">@</code> only has this
+ special meaning if either you have any custom formats or <a href="pgui_config_incompatible_improvements.html">the
+ <code>incompatible_improvements</code> setting</a> is
+ at lest 2.3.24.</p>
+ </li>
+
+ <li>
+ <p>Everywhere where Java <code class="inline-code">DecimalFormat</code>
+ patterns are used (like in <code class="inline-code">?string('0.##')</code> or
+ <code class="inline-code"><#setting number_format="0.##"></code>), now
+ it's possible to specify options like rounding mode or the
+ symbols used, with a FreeMarker-specific <a href="ref_builtins_number.html#topic.extendedJavaDecimalFormat">extension to the
+ <code>DecimalFormat</code> pattern syntax</a>.</p>
+ </li>
+
+ <li>
+ <p>Added new special variable:
+ <code class="inline-code">.incompatible_improvements</code>, which returns the
+ <a href="pgui_config_incompatible_improvements.html"><code>incompatbile_improvements</code>
+ setting</a> of the current FreeMarker configuration, as a
+ string.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">?date</code>, <code class="inline-code">?time</code> and
+ <code class="inline-code">?datetime</code> now can be called as 0 argument
+ method, like <code class="inline-code">?date()</code>, etc., which returns the
+ exact object that <code class="inline-code">TemplateDateFormat.parse</code>
+ returns, instead of the tricky multi-type object that just using
+ <code class="inline-code">?date</code> returns. Because custom
+ <code class="inline-code">TemplateDateFormat</code> implementations may return
+ custom <code class="inline-code">TemplateDateModel</code> implementations,
+ keeping the exact class can be important in some
+ applications.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code"><@</code> and <code class="inline-code"></@</code> is
+ now allowed in string literals that contain
+ <code class="inline-code">${<em class="code-color">exp</em>}</code>, and will
+ be part of the literal as is. Earlier it was a syntactical
+ error.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: With
+ <code class="inline-code">incompatible_improvements</code> set to 2.3.24
+ (<a href="pgui_datamodel_objectWrapper.html#topic.defaultObjectWrapperIcI">see how
+ here...</a>),
+ <code class="inline-code"><em class="code-color">m</em>?is_sequence</code>
+ doesn't return <code class="inline-code">true</code> for Java methods wrapped
+ by <code class="inline-code">BeansWrapper</code> and its subclasses (most
+ notably <code class="inline-code">DefaultObjectWrapper</code>) anymore, as
+ they only implement the
+ <code class="inline-code">[<em class="code-color">index</em>]</code> operator,
+ but not <code class="inline-code">?size</code>, which causes
+ <code class="inline-code"><#list <em class="code-color">...</em>></code>
+ to fail, among others.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_162">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p><em>Attention!</em> FreeMarker
+ now requires at least Java 1.5 (aka. Java 5). 2.3.24 has only
+ required Java 1.4. (Reason: Without this, new public API-s
+ couldn't use generics, which affect negatively the majority of
+ users, while old installations that are still using 1.4 are
+ unlikely to update FreeMarker anyway.)</p>
+ </li>
+
+ <li>
+ <p><em>Attention!</em> FreeMarker's
+ JSP support (if it's used) now requires at least JSP 2.0.
+ Earlier it only required JSP 1.1. (Reason: The
+ <code class="inline-code">jsp-api</code> dependency for JSP 1.x, which was
+ needed for building, can't be legally present in the Maven
+ Central Repository, nor be provided by freemarker.org.)</p>
+ </li>
+
+ <li>
+ <p>Added new configuration setting:
+ <code class="inline-code">template_configurations</code>. This allows
+ overriding the settings coming from the shared
+ <code class="inline-code">Configuration</code> object for individual
+ templates, based on template name patterns. <a href="pgui_config_templateconfigurations.html">See more
+ here...</a></p>
+ </li>
+
+ <li>
+ <p>Related to the <a href="dgui_misc_autoescaping.html">new
+ auto-escaping mechanism</a>:</p>
+
+ <ul>
+ <li>
+ <p>As FTL has now a new type, "markup
+ output", there's also a corresponding new model
+ interface, <code class="inline-code">TemplateMarkupOutputModel</code>.
+ This also means that you can prevent the auto-escaping of
+ values coming from the data-model by returning a
+ <code class="inline-code">TemplateMarkupOutputModel</code> instead of a
+ <code class="inline-code">String</code>. Like the template author can just
+ write <code class="inline-code">${messages.foo}</code>, and it will be
+ auto-escaped or not depending on if the message is known to
+ be markup or not.</p>
+ </li>
+
+ <li>
+ <p>Added new configuration setting:
+ <code class="inline-code">recognize_standard_file_extensions</code>. When
+ <code class="inline-code">true</code>, templates whose source name ends
+ with <code class="inline-code">".ftlh"</code> will get
+ <code class="inline-code">HTML</code> <code class="inline-code">output_format</code>,
+ and those whose name ends with <code class="inline-code">".ftlx"</code>
+ get <code class="inline-code">XML</code> <code class="inline-code">output_format</code>,
+ in both cases with auto-escaping on. If <a href="pgui_config_incompatible_improvements.html#pgui_config_incompatible_improvements_how_to_set">the
+ <code>incompatible_improvements</code> setting</a>
+ is set to 2.3.24 (or higher) then this setting defaults to
+ <code class="inline-code">true</code>. Otherwise it's default is
+ <code class="inline-code">false</code>, but enabling it is highly
+ recommended.</p>
+ </li>
+
+ <li>
+ <p>Added new configuration setting:
+ <code class="inline-code">output_format</code>. This specifies the <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_outputformat">output
+ format</a> object to use (such as
+ <code class="inline-code">HTMLOutputFormat.INSTANCE</code>,
+ <code class="inline-code">XMLOutputFormat.INSTANCE</code>, etc.) that
+ governs auto-escaping. The output format can be different
+ for different templates, using the
+ <code class="inline-code">template_configurations</code> setting (<a href="pgui_config_outputformatsautoesc.html">see here
+ how...</a>).</p>
+ </li>
+
+ <li>
+ <p>Added new configuration setting:
+ <code class="inline-code">registered_custom_output_formats</code>. With
+ this you can add new <code class="inline-code">OutputFormat</code>-s that
+ templates can refer to by name (like in <code class="inline-code"><#ftl
+ output_format="foo"></code>).</p>
+ </li>
+
+ <li>
+ <p>Added new configuration setting:
+ <code class="inline-code">auto_escaping_policy</code>. This decides when
+ auto-escaping should be enabled depending on the current
+ output format.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Changes related to the custom number and
+ date/time/datetime formating feature:</p>
+
+ <ul>
+ <li>
+ <p>Added new classes for implementing custom formatters:
+ <code class="inline-code">freemarker.core.TemplateNumberFormat</code>,
+ <code class="inline-code">TemplateNumberFormatFactory</code>,
+ <code class="inline-code">TemplateDateFormat</code>,
+ <code class="inline-code">TemplateDateFormatFactory</code>, also the
+ exceptions these can throw. These allow implementing any
+ kind of formatting rule that's doable in Java (i.e., they
+ aren't restricted to any <code class="inline-code">java.text</code>
+ formatters). Furthermore these formatters get the
+ <code class="inline-code">TemplateModel</code> instead of a the bare
+ <code class="inline-code">java.lang.Number</code> or
+ <code class="inline-code">java.util.Date</code>, which lets you use the
+ extra application-specific meta information that you may
+ pack into the <code class="inline-code">TemplateModel</code>-s, such as
+ physical unit, preferred precision, and so on.</p>
+ </li>
+
+ <li>
+ <p>Added <code class="inline-code">custom_number_formats</code> and
+ <code class="inline-code">custom_date_formats</code> settings
+ (<code class="inline-code">Configurable.setCustomNumberFormats(Map<String,
+ TemplateNumberFormatFactory>)</code> and
+ <code class="inline-code">Configurable.setCustomDateFormats(Map<String,
+ TemplateDateFormatFactory>)</code>) with which you can
+ register your own formats. These formats can be referred
+ from everywhere where you can use a string to define a
+ format, with a format string like <code class="inline-code">"@foo"</code>
+ or <code class="inline-code">"@foo params"</code>, where
+ <code class="inline-code">"foo"</code> is the key in the
+ <code class="inline-code">Map<String, ...></code> parameter of the
+ earlier shown methods, and the parameters (if any) are
+ interpreted by the
+ <code class="inline-code">Template<em class="code-color">Xxx</em>FormatFactory</code>
+ implementation that you provide. Like, you can issue
+ <code class="inline-code">cfg.setNumberFormat("@foo params")</code>, or
+ <code class="inline-code"><#setting number_format='@foo
+ params'></code>, or
+ <code class="inline-code">${n?string.@foo_params}</code>, similarly as you
+ can issue <code class="inline-code">cfg.setNumberFormat("0.##")</code>,
+ etc. For backward compatibility, the initial
+ <code class="inline-code">@</code> only has this special meaning if either
+ you have any custom formats or <a href="pgui_config_incompatible_improvements.html">the
+ <code>incompatible_improvements</code> setting</a>
+ is at least 2.3.24. Note that the
+ <code class="inline-code">custom_number_formats</code> and
+ <code class="inline-code">custom_date_formats</code> settings can be set
+ per-template (via the new
+ <code class="inline-code">template_configurations</code> settings) or
+ per-<code class="inline-code">Environment</code> too, thus
+ <code class="inline-code">@foo</code> can mean something different in
+ different templates.</p>
+ </li>
+
+ <li>
+ <p>Added new <code class="inline-code">Environment</code> methods
+ returning <code class="inline-code">TemplateNumberFormat</code> and
+ <code class="inline-code">TemplateDateFormat</code> objects. See the
+ <code class="inline-code">getTemplateNumberFormat(<em class="code-color">...</em>)</code>
+ and
+ <code class="inline-code">getTemplateDateFormat(<em class="code-color">...</em>)</code>
+ variations in the API.</p>
+ </li>
+
+ <li>
+ <p>Added
+ <code class="inline-code">freemarker.core.AliasTemplateNumberFormatFactory</code>
+ and <code class="inline-code">AliasTemplateDateFormatFactory</code>, which
+ can be used to create custom formats that are aliases to
+ other formats. For example, instead of writing
+ <code class="inline-code">${n?string["0.00"]}</code> again and again, you
+ can define the custom format <code class="inline-code">"price"</code> as
+ the alias to the format string <code class="inline-code">"0.00"</code> in
+ the configuration, and then use
+ <code class="inline-code">${n?string.@price}</code>. Thus, you can control
+ at a central place how prices look. Furthermore, the alias
+ can chose a different target format string depending on the
+ current locale; this is especially useful for dates, where
+ conventions can significantly differ in different
+ countries.</p>
+ </li>
+
+ <li>
+ <p>It's now possible to have HTML or other markup in
+ number and date/time/datetime formatting results, like
+ <code class="inline-code">1.23*10<sup>6</sup></code>, which
+ won't be accidentally auto-escaped, as FreeMarker knows that
+ it's already HTML. This is done by returning a
+ <code class="inline-code">TemplateMarkupOutputModel</code> instead of a
+ <code class="inline-code">String</code>; see the new auto-escaping
+ mechanism earlier. Note that no out-of-the-box format
+ utilizes this (at the moment), but you could write such
+ custom format.</p>
+ </li>
+
+ <li>
+ <p>The internal format object caching architecture has
+ been reworked, so that it can handle custom formats too.
+ This reworking also fixes some bottlenecks under highly
+ concurrent load, and some (otherwise unlikely) memory leak
+ possibilities.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>In the <code class="inline-code">number_format</code> configuration
+ setting, when it holds a Java <code class="inline-code">DecimalFormat</code>
+ pattern (like <code class="inline-code">"0.##"</code>), it's now possible to
+ specify options like rounding mode or the symbols used, with a
+ FreeMarker-specific <a href="ref_builtins_number.html#topic.extendedJavaDecimalFormat">extension to the
+ pattern syntax</a>.</p>
+ </li>
+
+ <li>
+ <p>New <code class="inline-code">FreemarkerServlet</code> init-params (see
+ <a href="http://freemarker.org/docs/api/freemarker/ext/servlet/FreemarkerServlet.html">the
+ <code>FreemarkerSerlvet</code> API documentation</a>
+ for details):</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">OverrideResponseContentType</code>:
+ Specifies when should we override the
+ <code class="inline-code">contentType</code> that's already set (i.e.,
+ non-<code class="inline-code">null</code>) in the
+ <code class="inline-code">HttpServletResponse</code>. Earlier, we have
+ always set it, and that's still the default behavior. But
+ now that this init-param exists, you can change that
+ behavior, so that the <code class="inline-code">contentType</code> you
+ have specified before forwarding to
+ <code class="inline-code">FreemarkerServlet</code> matters.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">OverrideResponseLocale</code>: Specifies
+ if we should override the <code class="inline-code">locale</code> that's
+ already set (i.e., non-<code class="inline-code">null</code>) in the
+ <code class="inline-code">HttpServletResponse</code>. Earlier, we have
+ always set it, but now this behavior can be changed so that
+ we only set it if it wasn't already set.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">ResponseCharacterEncoding</code>:
+ Deprecates the old (and quirky) logic of specifying the
+ output charset, which is putting it into the
+ <code class="inline-code">ContentType</code> init-param after the MIME
+ type, otherwise falling back to the template file charset.
+ The possible values are <code class="inline-code">legacy</code> (the
+ default for backward compatibility),
+ <code class="inline-code">fromTemplate</code> (which is
+ <code class="inline-code">legacy</code> without quirks, and is aware of
+ the <code class="inline-code">outputEncoding</code> setting),
+ <code class="inline-code">doNotSet</code> (keeps what the caller has
+ already set in the <code class="inline-code">ServletRespone</code>) and
+ <code class="inline-code">force</code> followed by a charset name (forces
+ a specific output charset).</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Added
+ <code class="inline-code">freemarker.cache.ByteArrayTemplateLoader</code>,
+ which is similar to <code class="inline-code">StringTemplateLoader</code>, but
+ stores the templates as <code class="inline-code">byte[]</code>-s instead of
+ as <code class="inline-code">String</code>-s.</p>
+ </li>
+
+ <li>
+ <p>Upgraded JavaCC (used during build to generate the FTL
+ parser) from 3.2 to 6.1.2.</p>
+ </li>
+
+ <li>
+ <p>Added <code class="inline-code">Configurable.getSettingNames(boolean
+ camelCase)</code>, which returns the set of valid setting
+ names. This can be useful for auto-completion and such.</p>
+ </li>
+
+ <li>
+ <p>Fixes and improvements in the "object
+ builder" mini-language used for configuring FreeMarker
+ from <code class="inline-code">java.util.Properties</code> or other
+ string-only sources (not used in templates). This is
+ <em>not to be confused with the template language
+ syntax</em>, which has nothing to do with the
+ "object builder" syntax we are writing about here.
+ The improvements are:</p>
+
+ <ul>
+ <li>
+ <p>Bug fixed: For nested builder expressions, the
+ top-level result class restriction were applied
+ accidentally.</p>
+ </li>
+
+ <li>
+ <p>When resolving an expression like
+ <code class="inline-code">com.example.Foo()</code>, if there's a builder
+ class (<code class="inline-code">com.example.FooBuilder</code>), the
+ non-builder class (<code class="inline-code">com.example.Foo</code>) need
+ not exist anymore. After all,
+ <code class="inline-code">FooBuilder.build()</code> instantiates from any
+ class it wants to anyway.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">TimeZone</code> objects can be created
+ like <code class="inline-code">TimeZone("UTC")</code>, despite that
+ there's no a such constructor.</p>
+ </li>
+
+ <li>
+ <p>Added support for creating lists with <code class="inline-code">[
+ <em class="code-color">item1</em>,
+ <em class="code-color">item2</em>,
+ <em class="code-color">...</em>
+ <em class="code-color">itemN</em> ]</code> syntax.</p>
+ </li>
+
+ <li>
+ <p>Added support for creating maps with <code class="inline-code">{
+ <em class="code-color">key1</em>:
+ <em class="code-color">value1</em>,
+ <em class="code-color">key2</em>:
+ <em class="code-color">value2</em>,
+ <em class="code-color">...</em>
+ <em class="code-color">keyN</em>:
+ <em class="code-color">valueN</em> }</code> syntax.</p>
+ </li>
+
+ <li>
+ <p>A number without decimal point will now be parsed to
+ <code class="inline-code">Integer</code>, <code class="inline-code">Long</code>, or
+ <code class="inline-code">BigInteger</code>, depending on the size of the
+ number. Earlier all numbers were parsed to
+ <code class="inline-code">BigDecimal</code>-s, but that had little
+ importance before lists and maps were added, as the number
+ was converted to the constructor or setter parameter type
+ anyway.</p>
+ </li>
+
+ <li>
+ <p>Number literals can have Java type suffixes
+ (<code class="inline-code">f</code>, <code class="inline-code">d</code>,
+ <code class="inline-code">l</code>), plus <code class="inline-code">bd</code> for
+ <code class="inline-code">BigDecimal</code> and <code class="inline-code">bi</code> for
+ <code class="inline-code">BigInteger</code>.</p>
+ </li>
+
+ <li>
+ <p>Public static fields can be referred, like
+ <code class="inline-code">com.example.MyClass.MY_CONSTANT</code> or
+ <code class="inline-code">Configuration.AUTO_DETECT_TAG_SYNTAX</code>.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Decreased the stack usage of template execution, which can
+ have importance if you have very very deeply nested
+ templates.</p>
+ </li>
+
+ <li>
+ <p>Added
+ <code class="inline-code">MultiTemplateLoader.setSticky(boolean)</code> and
+ <code class="inline-code">MultiTemplateLoader.isSticky()</code>, with which
+ you can disable the default behavior, where once a template was
+ found in a child <code class="inline-code">TemplateLoader</code>, it will be
+ searched there first next time (typically, when the template
+ update delay is expired). With the <code class="inline-code">sticky</code>
+ property set to <code class="inline-code">false</code>, the child
+ <code class="inline-code">TemplateLoader</code>-s will be always searched in
+ the order as they were added to the
+ <code class="inline-code">MultiTemplateLoader</code>.</p>
+ </li>
+
+ <li>
+ <p>Added
+ <code class="inline-code">StringTemplateLoader.removeTemplate(String)</code>
+ method.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed, only with
+ <code class="inline-code">incompatible_improvements</code> set to 2.3.24
+ (<a href="pgui_datamodel_objectWrapper.html#topic.defaultObjectWrapperIcI">see how
+ here...</a>): Expressions inside interpolations that were
+ inside <em>string literal expressions</em> (not
+ <code class="inline-code">${<em class="code-color">...</em>}</code>-s in
+ general), like in <code class="inline-code"><#assign s="Hello
+ ${name}!"></code>, always used
+ <code class="inline-code">incompatibleImprovements</code> 0 (2.3.0 in effect).
+ This means that expressions inside string literals had missed
+ the <code class="inline-code">?html</code>,
+ <code class="inline-code">?iso_<em class="code-color">...</em></code>,
+ <code class="inline-code">?is_enumerable</code>, <code class="inline-code">?c</code>, etc.
+ fixes/improvements.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed [<a href="https://sourceforge.net/p/freemarker/bugs/439/">439</a>]:
+ <code class="inline-code">FileTemplateLoader</code> with
+ <code class="inline-code">emulateCaseSensitiveFileSystem</code> set to
+ <code class="inline-code">true</code> (used for development) wasn't properly
+ synchronized, leading to random
+ <code class="inline-code">NullPointerException</code>-s or other
+ misbehavior.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: It wasn't well defined when a Java
+ <code class="inline-code">Iterator</code> counts as empty. Depending on what
+ <code class="inline-code">ObjectWrapper</code> you are using, one of these
+ fixes apply:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">DefaultObjectWrapper</code> (fix is always
+ active): Operations on the <code class="inline-code">Iterator</code> that
+ only check if it's empty without reading an element from it,
+ such as <code class="inline-code">?has_content</code>, won't cause a later
+ iteration (or further emptiness check) to fail anymore.
+ Earlier, in certain situations, the second operation has
+ failed saying that the iterator "can be listed only
+ once".</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">BeansWrapper</code> (when it's not
+ extended by <code class="inline-code">DefaultObjectWrapper</code>), if
+ it's <code class="inline-code">incompatibleImprovements</code> property is
+ set to 2.3.24 (or higher): <code class="inline-code">Iterator</code>-s
+ were always said to be non-empty when using
+ <code class="inline-code">?has_content</code> and such (i.e., operators
+ that check emptiness without reading any elements). Now an
+ <code class="inline-code">Iterator</code> counts as empty exactly if it
+ has no elements left. (Note that this bug has never affected
+ basic functionality, like <code class="inline-code"><#list
+ ...></code>.)</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Bug fixed: The (rarely used) cause exception of
+ <code class="inline-code">ParseException</code>-s wasn't set</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: When the
+ <code class="inline-code">incomaptible_improvements</code> setting of an
+ existing <code class="inline-code">Configuration</code> was changed, the
+ template cache sometimes wasn't recreated, hence old templates
+ could survive.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed, with
+ <code class="inline-code">incompatible_improvements</code> set to 2.3.24
+ (<a href="pgui_datamodel_objectWrapper.html#topic.defaultObjectWrapperIcI">see how
+ here...</a>): The <code class="inline-code">#import</code> directive meant
+ to copy the library variable into a global variable if it's
+ executed in the main namespace, but that haven't happened when
+ the imported template was already imported earlier in another
+ namespace.</p>
+ </li>
+
+ <li>
+ <p>Fixes in the XML processing feature
+ (<code class="inline-code">freemarker.ext.dom</code>):</p>
+
+ <ul>
+ <li>
+ <p>Bug fixed: XPath queries that has only contained
+ characters that are valid in XML element names and has also
+ contained <code class="inline-code">::</code> (which is valid in names in
+ namespace-unware documents), like
+ <code class="inline-code">e['following-sibling::foo']</code>, were
+ interpreted as literal element names (giving 0 hits) rather
+ than as XPath expressions. Note that there were no such
+ problem with <code class="inline-code">e['following-sibling::*']</code>
+ for example, as it's not a valid XML element name according
+ the XML specification. This fix can actually break
+ applications that has processed namespace unaware XML that
+ use <code class="inline-code">::</code> as part of element or attribute
+ names, but such an application is highly unlikely, unlike
+ running into the fixed problem. (Unfortunately, using
+ <code class="inline-code">incompatible_improvements</code> wasn't
+ technically possible here.)</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: The <code class="inline-code">@@qname</code> of elements
+ that belong to the XML namespace declared as the default via
+ <code class="inline-code"><#ftl ns_prefixes={'D':'...', ...
+ }></code> no longer starts with <code class="inline-code">D:</code>,
+ instead they just start with no name space prefix.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: In the markup returned by the
+ <code class="inline-code">@@markup</code> key, when there were multiple
+ namespaces for which there was no prefix associated with via
+ <code class="inline-code"><#ftl
+ ns_prefixes=<em class="code-color">...</em>></code>,
+ all those namespaces were assigned to the same
+ auto-generated <code class="inline-code">xmlns</code> prefix (usually
+ "a"). Now they will get "a",
+ "b", "c", etc. prefixes.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>JSP TLD loading now quotes the location of
+ <code class="inline-code">jar</code>-s (and other <code class="inline-code">zip</code>-s)
+ which can't be loaded due to zip format errors in the error
+ message.</p>
+ </li>
+
+ <li>
+ <p>Added an overload to
+ <code class="inline-code">Configuration.getSupportedBuiltInNames</code> and
+ <code class="inline-code">Configuration.getSupportedBuiltInDirectiveNames</code>
+ that has a <code class="inline-code">namingConvention</code> parameter. This
+ is useful for tooling as since 2.3.23 we support both camel case
+ naming convention (like
+ <code class="inline-code"><em class="code-color">s</em>?upperCase</code>) and
+ the legacy one (like
+ <code class="inline-code"><em class="code-color">s</em>?upper_case</code>).
+ Furthermore the old 0 argument overload will now utilize
+ <code class="inline-code">Configuration.getNamingConvention()</code> to only
+ return the relevant names if it's not
+ <code class="inline-code">AUTO_DETECT_NAMING_CONVENTION</code>.</p>
+ </li>
+
+ <li>
+ <p>Internal reworking to simplify the AST (the
+ <code class="inline-code">TemplateElement</code> structure). The related
+ technically public API was marked as internal for a good while.
+ For those who still use that API, the visible change is that
+ <code class="inline-code">TemplateElement</code>-s now almost never has a
+ <code class="inline-code">MixedContent</code> parent, instead, the parent is
+ directly whatever element the child element indeed belongs under
+ when you look at the source code (like the enclosing
+ <code class="inline-code">#list</code> for example, while earlier you often
+ had to go through a <code class="inline-code">MixedContent</code> first whose
+ parent was the <code class="inline-code">#list</code>). Note that when you
+ have moved downwards, i.e., towards the child elements, these
+ <code class="inline-code">MixedContent</code> parents weren't visible and were
+ silently skipped, so the tree traversal API was inconsistent.
+ Now it's consistent.</p>
+ </li>
+
+ <li>
+ <p>Due to the above change again, the return type of
+ <code class="inline-code">freemarker.core.DebugBreak.accept()</code> and
+ <code class="inline-code">freemarker.core.TextBlock.accept()</code> has
+ changed from <code class="inline-code">void</code> to
+ <code class="inline-code">TemplateElement[]</code>. This again is highly
+ unlikely to affect anyone, and these meant to be internal API-s
+ anyway, but as these two <code class="inline-code">accept</code> methods has
+ wider than package visibility for historical reasons, we mention
+ this change.</p>
+ </li>
+
+ <li>
+ <p>The non-public AST API of
+ <code class="inline-code">freemarker.core.StringLiteral</code>-s has been
+ changed. In principle it doesn't mater as it isn't a public API,
+ but some might used these regardless to introspect templates.
+ Earlier it had an "embedded template" parameter
+ inside, now it has 0 (for purely static string literals), one or
+ more "value part"-s, which are
+ <code class="inline-code">String</code>-s and
+ <code class="inline-code">Interpolation</code>-s.</p>
+ </li>
+
+ <li>
+ <p>Internal code cleanup: Mostly for consistent source code
+ formatting, also many parser construction/setup cleanup</p>
+ </li>
+
+ <li>
+ <p>Source code changes to conform to Apache source release
+ policy, such as adding copyright headers and getting rid of test
+ <code class="inline-code">jar</code>-s committed into the source code. Eclipse
+ project files were also removed, instead the
+ <code class="inline-code">README</code> describes how to set up the
+ project.</p>
+ </li>
+
+ <li>
+ <p>Build script and distribution artifact changes to conform
+ to Apache release policy, most notably it produces separate
+ source and binary releases.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_163">Changes compared to 2.3.24 Release Candidate 1</h2>
+
+
+ <ul>
+ <li>
+ <p>Added
+ <code class="inline-code">MultiTemplateLoader.setSticky(boolean)</code> and
+ <code class="inline-code">MultiTemplateLoader.isSticky()</code>, with which
+ you can disable the default behavior, where once a template was
+ found in a child <code class="inline-code">TemplateLoader</code>, it will be
+ searched there first next time (typically, when the template
+ update delay is expired). With the <code class="inline-code">sticky</code>
+ property set to <code class="inline-code">false</code>, the child
+ <code class="inline-code">TemplateLoader</code>-s will be always searched in
+ the order as they were added to the
+ <code class="inline-code">MultiTemplateLoader</code>.</p>
+ </li>
+
+ <li>
+ <p>Added
+ <code class="inline-code">StringTemplateLoader.removeTemplate(String)</code>
+ method.</p>
+ </li>
+
+ <li>
+ <p>Source code changes to conform to Apache release policy
+ and recommendations:</p>
+
+ <ul>
+ <li>
+ <p>No more binary test <code class="inline-code">jar</code>-s committed
+ into the source code (instead, they are generated
+ on-the-fly)</p>
+ </li>
+
+ <li>
+ <p>Eclipse project files were removed, instead, the
+ <code class="inline-code">README</code> describes how to set up the
+ project.</p>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_25.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_23.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[21/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_if.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_if.html b/builds/2.3.26-nightly/ref_directive_if.html
new file mode 100644
index 0000000..99de82d
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_if.html
@@ -0,0 +1,196 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>if, else, elseif - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="if, else, elseif">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_if.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_if.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_if.html"><span itemprop="name">if, else, elseif</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","if, else, elseif"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_global.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_import.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_if" itemprop="headline">if, else, elseif</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_94" data-menu-target="autoid_94">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_95" data-menu-target="autoid_95">Description</a></li></ul> </div><a name="ref.directive.if"></a><a name="ref.directive.else"></a><a name="ref.directive.elseif"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_94">Synopsis</h2>
+
+
+
+<pre class="metaTemplate">
+<code class="inline-code"><#if <em class="code-color">condition</em>>
+ <em class="code-color">...</em>
+<#elseif <em class="code-color">condition2</em>>
+ <em class="code-color">...</em>
+<#elseif <em class="code-color">condition3</em>>
+ <em class="code-color">...</em>
+<em class="code-color">...</em>
+<#else>
+ <em class="code-color">...</em>
+</#if></code>
+</pre>
+
+
+ <p>Where:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code"><em class="code-color">condition</em></code>,
+ <code class="inline-code"><em class="code-color">condition2</em></code>,
+ ...etc.: Expression evaluates to a boolean value.
+ </li>
+ </ul>
+
+ <p>The <code class="inline-code">elseif</code>-s and the
+ <code class="inline-code">else</code> are optional.</p>
+
+ <p>Camel case name variant: <code class="inline-code">elseIf</code></p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_95">Description</h2>
+
+
+ <p>You can use <code class="inline-code">if</code>, <code class="inline-code">elseif</code>
+ and <code class="inline-code">else</code> directives to conditionally skip a
+ section of the template. The
+ <code class="inline-code"><em class="code-color">condition</em></code>-s must
+ evaluate to a boolean value, or else an error will abort template
+ processing. The <code class="inline-code">elseif</code>-s and
+ <code class="inline-code">else</code>-s must occur inside <code class="inline-code">if</code>
+ (that is, between the <code class="inline-code">if</code> start-tag and end-tag).
+ The <code class="inline-code">if</code> can contain any number of
+ <code class="inline-code">elseif</code>-s (including 0) and at the end optionally
+ one <code class="inline-code">else</code>. Examples:</p>
+
+ <p><code class="inline-code">if</code> with 0 <code class="inline-code">elseif</code> and no
+ <code class="inline-code">else</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#if x == 1>
+ x is 1
+</#if></pre></div>
+
+ <p><code class="inline-code">if</code> with 0 <code class="inline-code">elseif</code> and
+ <code class="inline-code">else</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#if x == 1>
+ x is 1
+<#else>
+ x is not 1
+</#if></pre></div>
+
+ <p><code class="inline-code">if</code> with 2 <code class="inline-code">elseif</code> and no
+ <code class="inline-code">else</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#if x == 1>
+ x is 1
+<#elseif x == 2>
+ x is 2
+<#elseif x == 3>
+ x is 3
+</#if></pre></div>
+
+ <p><code class="inline-code">if</code> with 3 <code class="inline-code">elseif</code> and
+ <code class="inline-code">else</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#if x == 1>
+ x is 1
+<#elseif x == 2>
+ x is 2
+<#elseif x == 3>
+ x is 3
+<#elseif x == 4>
+ x is 4
+<#else>
+ x is not 1 nor 2 nor 3 nor 4
+</#if></pre></div>
+
+ <p>To see more about boolean expressions, see: <a href="dgui_template_exp.html">Template Author's Guide/The Template/Expressions</a>.</p>
+
+ <p>You can nest <code class="inline-code">if</code> directives (of
+ course):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#if x == 1>
+ x is 1
+ <#if y == 1>
+ and y is 1 too
+ <#else>
+ but y is not
+ </#if>
+<#else>
+ x is not 1
+ <#if y < 0>
+ and y is less than 0
+ </#if>
+</#if></pre></div>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>When you want to test if <code class="inline-code">x > 0</code> or
+ <code class="inline-code">x >= 0</code>, writing <code class="inline-code"><#if x >
+ 0></code> and <code class="inline-code"><#if x >= 0></code> is
+ WRONG, as the first <code class="inline-code">></code> will close the
+ <code class="inline-code">#if</code> tag. To work that around, write
+ <code class="inline-code"><#if x gt 0></code> or <code class="inline-code"><#if gte
+ 0></code>. Also note that if the comparison occurs inside
+ parentheses, you will have no such problem, like <code class="inline-code"><#if
+ foo.bar(x > 0)></code> works as expected.</p>
+ </div>
+
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_global.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_import.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_import.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_import.html b/builds/2.3.26-nightly/ref_directive_import.html
new file mode 100644
index 0000000..965f033
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_import.html
@@ -0,0 +1,153 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>import - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="import">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_import.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_import.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_import.html"><span itemprop="name">import</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","import"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_if.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_include.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_import" itemprop="headline">import</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_96" data-menu-target="autoid_96">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_97" data-menu-target="autoid_97">Description</a></li></ul> </div><a name="ref.directive.import"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_96">Synopsis</h2>
+
+
+
+<pre class="metaTemplate"><code class="inline-code"><#import <em class="code-color">path</em> as <em class="code-color">hash</em>></code>
+</pre>
+
+
+ <p>Where:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code"><em class="code-color">path</em></code>: The
+ path of a template. This is an expression that evaluates to a
+ string. (With other words, it doesn't have to be a fixed string,
+ it can also be something like, for example,
+ <code class="inline-code">profile.baseDir + "/menu.ftl"</code>.)
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">hash</em></code>: The
+ unquoted name of hash variable by which you can access the
+ namespace. Not an expression. (If you have to import into a
+ dynamically constructed name, you have to use <a href="app_faq.html#faq_assign_to_dynamic_variable_name">this
+ trick</a>.)
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_97">Description</h2>
+
+
+ <p>Imports a library. That is, it creates a new empty namespace,
+ and then executes the template given with
+ <code class="inline-code"><em class="code-color">path</em></code> parameter in that
+ namespace so the template populates the namespace with variables
+ (macros, functions, ...etc.). Then it makes the newly created
+ namespace available to the caller with a hash variable. The hash
+ variable will be created as a plain variable in the namespace used
+ by the caller of <code class="inline-code">import</code> (as if you would create
+ it with <code class="inline-code">assign</code> directive), with the name given
+ with the <code class="inline-code"><em class="code-color">hash</em></code>
+ parameter. If the import happens in the namespace of the main
+ template, the hash variable is also created in the global
+ namespace.</p>
+
+ <p>If you call <code class="inline-code">import</code> with the same
+ <code class="inline-code"><em class="code-color">path</em></code> for multiple
+ times, it will create the namespace and run the template for the
+ very first call of <code class="inline-code">import</code> only. The later calls
+ will just create a hash by which you can access the
+ <em>same</em> namespace.</p>
+
+ <p>The output printed by the imported template will be ignored
+ (will not be inserted at the place of importing). The template is
+ executed to populate the namespace with variables, and not to write
+ to the output.</p>
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#import "/libs/mylib.ftl" as my>
+
+<@my.copyright date="1999-2002"/></pre></div>
+
+ <p>The <code class="inline-code"><em class="code-color">path</em></code>
+ parameter can be a relative path like <code class="inline-code">"foo.ftl"</code>
+ and <code class="inline-code">"../foo.ftl"</code>, or an absolute like
+ <code class="inline-code">"/foo.ftl"</code>. Relative paths are relative to the
+ directory of the template that uses the <code class="inline-code">import</code>
+ directive. Absolute paths are relative to a base (often referred as
+ the ''root directory of the templates'') that the programmer defines
+ when he configures FreeMarker.</p>
+
+ <p>Always use <code class="inline-code">/</code> (slash) to separate path
+ components, never <code class="inline-code">\</code> (backslash). If you are
+ loading templates from your local file system and it uses
+ backslashes (like under. Windows), FreeMarker will convert them
+ automatically.</p>
+
+ <p>Like with the <code class="inline-code">include</code> directive, <a href="ref_directive_include.html#ref_directive_include_acquisition">acquisition</a> and
+ <a href="ref_directive_include.html#ref_directive_include_localized">localized
+ lookup</a> may be used for resolving the path.</p>
+
+ <p><span class="marked-for-programmers">Note, that it is possible to
+ automatically do the commonly used imports for all templates, with
+ the "auto imports" setting of
+ <code class="inline-code">Configuration</code>.</span></p>
+
+ <p>If you are new to namespaces, you should read: <a href="dgui_misc_namespace.html">Template Author's Guide/Miscellaneous/Namespaces</a></p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_if.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_include.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_include.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_include.html b/builds/2.3.26-nightly/ref_directive_include.html
new file mode 100644
index 0000000..ebfb785
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_include.html
@@ -0,0 +1,449 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>include - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="include">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_include.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_include.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_include.html"><span itemprop="name">include</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","include"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_import.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_list.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_include" itemprop="headline">include</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_98" data-menu-target="autoid_98">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_99" data-menu-target="autoid_99">Description</a><ul><li><a class="page-menu-link" href="#ref_directive_include_acquisition" data-menu-target="ref_directive_include_acquisition">Using acquisition</a></li><li><a class="page-menu-link" href="#ref_directive_include_localized" data-menu-target="ref_directive_include_localized">Localized lookup</a></li></ul></li></ul> </div><a name="ref.directive.include"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_98">Synopsis</h2>
+
+
+
+<pre class="metaTemplate">
+<code class="inline-code"><#include <em class="code-color">path</em>></code>
+or
+<code class="inline-code"><#include <em class="code-color">path</em> <em class="code-color">options</em>></code>
+</pre>
+
+
+ <p>Where:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code"><em class="code-color">path</em></code>: The
+ path of the file to include; an expression that evaluates to a
+ string. (With other words, it doesn't have to be a fixed string,
+ it can also be something like, for example,
+ <code class="inline-code">profile.baseDir + "/menu.ftl"</code>.)
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">options</em></code>: One
+ or more of these:
+ <code class="inline-code">encoding=<em class="code-color">encoding</em></code>,
+ <code class="inline-code">parse=<em class="code-color">parse</em></code>
+
+ <ul>
+ <li>
+ <code class="inline-code"><em class="code-color">encoding</em></code>:
+ Expression evaluates to string
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">parse</em></code>:
+ Expression evaluates to boolean (also accepts a few string
+ values for backward compatibility)
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">ignore_missing</em></code>:
+ Expression evaluates to boolean
+ </li>
+ </ul>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_99">Description</h2>
+
+
+ <p>You can use it to insert another FreeMarker template file
+ (specified by the <code class="inline-code"><em class="code-color">path</em></code>
+ parameter) into your template. The output from the included template
+ is inserted at the point where the <code class="inline-code">include</code> tag
+ occurs. The included file shares the variables with the including
+ template, similarly like if it was copy-pasted into it. The
+ <code class="inline-code">include</code> directive is not really replaced by the
+ content of the included file, instead it processes the included file
+ each time when FreeMarker reaches the <code class="inline-code">include</code>
+ directive in the course of template processing. So for example if
+ the <code class="inline-code">include</code> is inside a <code class="inline-code">list</code>
+ loop, you can specify different file names in each cycle.</p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This directive is not be confused with the JSP (Servlet)
+ include, as it doesn't involve the Servlet container at all, just
+ processes another FreeMarker template, without "leaving"
+ FreeMarker. Regarding how to do a "JSP include" <a href="app_faq.html#faq_servlet_include">read this...</a></p>
+ </div>
+
+
+ <p>The <code class="inline-code"><em class="code-color">path</em></code>
+ parameter can be a relative path like <code class="inline-code">"foo.ftl"</code>
+ and <code class="inline-code">"../foo.ftl"</code>, or an absolute like
+ <code class="inline-code">"/foo.ftl"</code>. Relative paths are relative to the
+ directory of the template that contains the
+ <code class="inline-code">import</code> directive. Absolute paths are relative to
+ a base (often referred as the 'root directory of the templates')
+ that the programmer defines when he configures FreeMarker.</p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This is different than the way it worked prior FreeMarker
+ 2.1, where the path was always absolute. To preserve the old
+ behavior, enable the classic compatible mode in the
+ <code class="inline-code">Configuration</code> object.</p>
+ </div>
+
+
+ <p>Always use <code class="inline-code">/</code> (slash) to separate path
+ components, never <code class="inline-code">\</code> (backslash). Even if you are
+ loading templates from your local file system and it uses
+ backslashes (like under. Windows), use <code class="inline-code">/</code>.</p>
+
+ <p>Example:</p>
+
+ <p>Assume /common/copyright.ftl contains:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">Copyright 2001-2002 ${me}<br>
+All rights reserved.</pre></div>
+
+ <p>Then this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign me = "Juila Smith">
+<h1>Some test</h1>
+<p>Yeah.
+<hr>
+<strong><#include "/common/copyright.ftl"></strong></pre></div>
+
+ <p>will output this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"><h1>Some test</h1>
+<p>Yeah.
+<hr>
+<strong>Copyright 2001-2002 Juila Smith
+All rights reserved.</strong></pre></div>
+
+ <p>The supported
+ <code class="inline-code"><em class="code-color">options</em></code> are:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">parse</code>: If it is
+ <code class="inline-code">true</code>, then the included file will be parsed
+ as FTL, otherwise the whole file will be considered as simple
+ text (i.e, no FreeMarker constructs will be searched in it). If
+ you omit this option, then it defaults to
+ <code class="inline-code">true</code>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">encoding</code>: The encoding (charset) of the
+ included template. You shouldn't use this option anymore; if
+ different template use different encodings, then the programmers
+ should associated the encoding to the templates via
+ <code class="inline-code">Configuration.setTemplateConfigurations(<em class="code-color">...</em>)</code>-s
+ (which also overrides that you specify here). If
+ <code class="inline-code">Configuration.setTemplateConfigurations(<em class="code-color">...</em>)</code>
+ doesn't specify an encoding for the included template, then the
+ included file inherits the encoding (the charset) of the
+ top-level template, unless you specify an encoding with this
+ option. Examples of valid names: UTF-8, ISO-8859-1, ISO-8859-2,
+ Shift_JIS, Big5, EUC-KR, GB2312. <span class="marked-for-programmers">Encoding names are the same as the ones
+ supported be java.io.InputStreamReader (as of Java API 1.3:
+ MIME-preferred charset names from the IANA Charset
+ Registry)</span></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">ignore_missing</code>: When
+ <code class="inline-code">true</code>, suppresses the error when the template
+ to include is missing, instead <code class="inline-code"><#include
+ ...></code> will print nothing. When
+ <code class="inline-code">false</code>, the template processing will stop with
+ error if the template is missing. If you omit this option, then
+ it defaults to <code class="inline-code">false</code>.</p>
+ </li>
+ </ul>
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#include "/common/navbar.html" parse=false encoding="Shift_JIS"></pre></div>
+
+ <p><span class="marked-for-programmers">Note, that it is possible to
+ automatically do the commonly used inclusions for all templates,
+ with the "auto includes" setting of
+ <code class="inline-code">Configuration</code>.</span></p>
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="ref_directive_include_acquisition">Using acquisition</h3>
+
+
+
+
+ <p>There's a special path component represented by an asterisk
+ (<code class="inline-code">*</code>). It is interpreted as "this directory or
+ any of its parents". Therefore, if the template located in
+ <code class="inline-code">/foo/bar/template.ftl</code> has the following
+ line:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#include "*/footer.ftl"></pre></div>
+
+ <p>then the engine will look for the template in following
+ locations, in this order:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code">/foo/bar/footer.ftl</code>
+ </li>
+
+ <li>
+ <code class="inline-code">/foo/footer.ftl</code>
+ </li>
+
+ <li>
+ <code class="inline-code">/footer.ftl</code>
+ </li>
+ </ul>
+
+ <p>This mechanism is called <strong>acquisition</strong> and allows the designers to
+ place commonly included files in a parent directory, and redefine
+ them on a per-subdirectory basis as needed. We say that the
+ including template acquires the template to include from the first
+ parent directory that has it. Note that you can specify not only a
+ template name to the right of the asterisk, but a subpath as well.
+ I.e. if the previous template instead read:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#include "*/commons/footer.ftl"></pre></div>
+
+ <p>then the engine would look for the template in following
+ locations, in this order:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code">/foo/bar/commons/footer.ftl</code>
+ </li>
+
+ <li>
+ <code class="inline-code">/foo/commons/footer.ftl</code>
+ </li>
+
+ <li>
+ <code class="inline-code">/commons/footer.ftl</code>
+ </li>
+ </ul>
+
+ <p>Finally, the asterisk needn't be the first element of the
+ path:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#include "commons/*/footer.ftl"></pre></div>
+
+ <p>would cause the engine to look for the template in following
+ locations, in this order:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code">/foo/bar/commons/footer.ftl</code>
+ </li>
+
+ <li>
+ <code class="inline-code">/foo/bar/footer.ftl</code>
+ </li>
+
+ <li>
+ <code class="inline-code">/foo/footer.ftl</code>
+ </li>
+
+ <li>
+ <code class="inline-code">/footer.ftl</code>
+ </li>
+ </ul>
+
+ <p>However, there can be at most one asterisk in the path. If
+ you specifying more asterisks, the template won't be found.</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="ref_directive_include_localized">Localized lookup</h3>
+
+
+
+
+ <p>A locale is a language and an optional country or dialect
+ identifier (plus also maybe a further variant identifier, like
+ "MAC"). Whenever a template is requested, a desired
+ locale is always specified (explicitly or implicitly), and
+ FreeMarke will try to find a variant of the template that matches
+ that locale. When a template includes or imports another template,
+ internally that will also be requested for a locale, for the
+ locale that the <code class="inline-code">locale</code> setting is set to, and
+ that's usually for the locale of the top-level template.</p>
+
+ <p>Suppose your template was loaded with locale
+ <code class="inline-code">en_US</code>, which means U.S. English. When you
+ include another template:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#include "footer.ftl"></pre></div>
+
+ <p>the engine will in fact look for several templates, in this
+ order:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code">footer_en_US.ftl</code>,
+ </li>
+
+ <li>
+ <code class="inline-code">footer_en.ftl</code>
+ </li>
+
+ <li>
+ <code class="inline-code">footer.ftl</code>
+ </li>
+ </ul>
+
+ <p>and it will use the first one that exists.</p>
+
+ <p>Note that if how (and if) FreeMarker searches the localized
+ variations is configurable by the programmers, so we are just
+ describing the default behavior here.<span class="marked-for-programmers"> You can disable localized lookup with the
+ <code class="inline-code">localized_lookup</code> setting
+ (<code class="inline-code">Configuration.setLocalizedLookup(boolean)</code>).
+ Also, you can define your own sequence of deduced template names
+ with the <code class="inline-code">template_lookup_strategy</code> setting
+ (<code class="inline-code">Configuration.setTemplateLookupStrategy(TemplateLookupStrategy)</code>).</span></p>
+
+ <p>When you use both acquisition (i.e., <code class="inline-code">*</code>
+ step in the path) and localized template lookup, the template with
+ more specific locale in a parent directory takes precedence over
+ template with less specific locale in a child directory. Suppose
+ you use the following include from
+ <code class="inline-code">/foo/bar/template.ftl</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#include "*/footer.ftl"></pre></div>
+
+ <p>the engine will look for these templates, in this
+ order:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code">/foo/bar/footer_en_US.ftl</code>
+ </li>
+
+ <li>
+ <code class="inline-code">/foo/footer_en_US.ftl</code>
+ </li>
+
+ <li>
+ <code class="inline-code">/footer_en_US.ftl</code>
+ </li>
+
+ <li>
+ <code class="inline-code">/foo/bar/footer_en.ftl</code>
+ </li>
+
+ <li>
+ <code class="inline-code">/foo/footer_en.ftl</code>
+ </li>
+
+ <li>
+ <code class="inline-code">/footer_en.ftl</code>
+ </li>
+
+ <li>
+ <code class="inline-code">/foo/bar/footer.ftl</code>
+ </li>
+
+ <li>
+ <code class="inline-code">/foo/footer.ftl</code>
+ </li>
+
+ <li>
+ <code class="inline-code">/footer.ftl</code>
+ </li>
+ </ul>
+
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_import.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_list.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_list.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_list.html b/builds/2.3.26-nightly/ref_directive_list.html
new file mode 100644
index 0000000..f2e0cbc
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_list.html
@@ -0,0 +1,638 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>list, else, items, sep, break - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="list, else, items, sep, break">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_list.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_list.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_list.html"><span itemprop="name">list, else, items, sep, break</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","list, else, items, sep, break"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_include.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_local.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_list" itemprop="headline">list, else, items, sep, break</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_100" data-menu-target="autoid_100">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_101" data-menu-target="autoid_101">Description</a><ul><li><a class="page-menu-link" href="#autoid_102" data-menu-target="autoid_102">Simplest form</a></li><li><a class="page-menu-link" href="#autoid_103" data-menu-target="autoid_103">else directive</a></li><li><a class="page-menu-link" href="#autoid_104" data-menu-target="autoid_104">items directive</a></li><li><a class="page-menu-link" href="#autoid_105" data-menu-target="autoid_105">sep directive</a></li><li><a class="page-menu-link" href="#autoid_106" data-menu-target="autoid_106">break directive</a></li><li><a class="page-menu-link" href="#autoid_107" data-menu-target="autoid_107">Accessing iteration state</a></li><li><a class="page-menu-link" href="#autoid_108" data-menu-target="autoid_108">Nesting loops into each other</a></li><li><a class="page-menu-link" href="#autoid_109" data-menu-
target="autoid_109">Notes for Java programmers</a></li></ul></li></ul> </div><a name="ref.directive.list"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_100">Synopsis</h2>
+
+
+ <p>The simplest form for listing a sequence (or collection)
+ is:</p>
+
+
+<pre class="metaTemplate"><code class="inline-code"><#list <em class="code-color">sequence</em> as <em class="code-color">item</em>>
+ <em class="code-color">Part repeated for each item</em>
+</#list></code></pre>
+
+
+ <p>and to list the key-value pairs of a hash (since
+ 2.3.25):</p>
+
+
+<pre class="metaTemplate"><code class="inline-code"><#list <em class="code-color">hash</em> as <em class="code-color">key</em>, <em class="code-color">value</em>>
+ <em class="code-color">Part repeated for each key-value pair</em>
+</#list></code></pre>
+
+
+ <p>But these are just cases of the generic forms, which are shown
+ below. Note that for simplicity we only show the generic forms for
+ sequence listing; simply replace "<code class="inline-code">as
+ <em class="code-color">item</em></code>" with
+ "<code class="inline-code">as <em class="code-color">key</em>,
+ <em class="code-color">value</em></code>" to get the
+ generic form for hash listing.</p>
+
+ <p>Generic form 1:</p>
+
+
+<pre class="metaTemplate"><code class="inline-code"><#list <em class="code-color">sequence</em> as <em class="code-color">item</em>>
+ <em class="code-color">Part repeated for each item</em>
+<#else>
+ <em class="code-color">Part executed when there are 0 items</em>
+</#list></code></pre>
+
+
+ <p>Where:</p>
+
+ <ul>
+ <li>
+ The <code class="inline-code">else</code> part is optional, and is only
+ supported since FreeMarker 2.3.23.
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">sequence</em></code>:
+ Expressions evaluates to a sequence or collection of the items
+ we want to iterate through
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">item</em></code>: Name
+ of the <a href="dgui_misc_var.html">loop variable</a> (not
+ an expression)
+ </li>
+
+ <li>
+ The various "parts" between the tags can
+ contain arbitrary FTL (including nested
+ <code class="inline-code">list</code>-s)
+ </li>
+ </ul>
+
+ <p>Generic form 2 (since FreeMarker 2.3.23):</p>
+
+
+<pre class="metaTemplate"><code class="inline-code"><#list <em class="code-color">sequence</em>>
+ <em class="code-color">Part executed once if we have more than 0 items</em>
+ <#items as <em class="code-color">item</em>>
+ <em class="code-color"> Part repeated for each item</em>
+ </#items>
+ <em class="code-color">Part executed once if we have more than 0 items</em>
+<#else>
+ <em class="code-color">Part executed when there are 0 items</em>
+</#list></code></pre>
+
+
+ <p>Where: see the "Where" section of Form 1 above
+ (and thus the <code class="inline-code">else</code> part is optional here
+ too).</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_101">Description</h2>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_102">Simplest form</h3>
+
+
+ <p>Assuming <code class="inline-code">users</code> contains the
+ <code class="inline-code">['Joe', 'Kate', 'Fred']</code> sequence:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list users as user>
+ <p>${user}
+</#list></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> <p>Joe
+ <p>Kate
+ <p>Fred</pre></div>
+
+ <p>The <code class="inline-code">list</code> directive executes the code
+ between the <code class="inline-code">list</code> start-tag and
+ <code class="inline-code">list</code> end-tag (the body of
+ <code class="inline-code">list</code> from now on) for each value in the
+ sequence (or collection) specified as its first parameter. For
+ each such iteration the loop variable (<code class="inline-code">user</code> in
+ this example) will store the value of the current item.</p>
+
+ <p>The loop variable (<code class="inline-code">user</code>) only exists
+ inside the <code class="inline-code">list</code> body. Also, macros/functions
+ called from within the loop won't see it (as if it were a local
+ variable).</p>
+
+ <p>Listing hashes is very similar, but you need to provide two
+ variable names after the <code class="inline-code">as</code>; one for the hash
+ key, and another for the associated value. Assuming
+ <code class="inline-code">products</code> is <code class="inline-code">{ "apple": 5, "banana":
+ 10, "kiwi": 15 }</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list products as name, price>
+ <p>${name}: ${price}
+</#list></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> <p>apple: 5
+ <p>banan: 10
+ <p>kiwi: 15</pre></div>
+
+ <p>Note that not all hash variables can be listed, because some
+ of them isn't able to enumerate its keys. It's practically safe to
+ assume though that hashes that stand for Java
+ <code class="inline-code">Map</code> objects can be listed.</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_103">else directive</h3>
+
+
+ <a name="ref.directive.list.else"></a>
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p><code class="inline-code">else</code> inside <code class="inline-code">list</code> is
+ only supported since FreeMarker 2.3.23</p>
+ </div>
+
+
+ <p>The <code class="inline-code">else</code> directive is used if when there
+ are 0 items, you have to print something special instead of just
+ printing nothing:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list users as user>
+ <p>${user}
+<#else>
+ <p>No users
+</#list></pre></div>
+
+ <p>This outputs the same as the earlier example, except when
+ <code class="inline-code">users</code> contains 0 items:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> <p>No users</pre></div>
+
+ <p>Note that the loop variable (<code class="inline-code">user</code>)
+ doesn't exist between the <code class="inline-code">else</code> tag and the
+ <code class="inline-code">list</code> end-tag, since that part is not part of
+ the loop.</p>
+
+ <p><code class="inline-code">else</code> must be literally (means, in the
+ source code) inside the body of the <code class="inline-code">list</code>
+ directive. That is, you can't moved it out into a macro or
+ included template.</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_104">items directive</h3>
+
+
+ <a name="ref.directive.items"></a>
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p><code class="inline-code">items</code> exists since FreeMarker
+ 2.3.23</p>
+ </div>
+
+
+ <p>The <code class="inline-code">items</code> directive is used if you have
+ to print (or do) something before the first list item, and after
+ the last list item, as far as there's at least 1 item. A typical
+ example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list users>
+ <ul>
+ <#items as user>
+ <li>${user}</li>
+ </#items>
+ </ul>
+</#list></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> <ul>
+ <li>Joe</li>
+ <li>Kate</li>
+ <li>Fred</li>
+ </ul></pre></div>
+
+ <p>If there are 0 items, the above won't print anything, thus
+ you don't end up with an empty
+ <code class="inline-code"><ul></ul></code>.</p>
+
+ <p>That is, when the <code class="inline-code">list</code> directive has no
+ <code class="inline-code">as <em class="code-color">item</em></code> parameter,
+ the body of its is executed exactly once if there's at least one
+ item, or not at all otherwise. It's the body of the mandatory
+ nested <code class="inline-code">items</code> directive that will be run for
+ each item, and hence it's also the <code class="inline-code">items</code>
+ directive that defines the loop variable with <code class="inline-code">as
+ <em class="code-color">item</em></code>, not
+ <code class="inline-code">list</code>.</p>
+
+ <p>A <code class="inline-code">list</code> directive with
+ <code class="inline-code">items</code> also can have an <code class="inline-code">else</code>
+ directive:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list users>
+ <ul>
+ <#items as user>
+ <li>${user}</li>
+ </#items>
+ </ul>
+<#else>
+ <p>No users
+</#list></pre></div>
+
+ <p>Some further details:</p>
+
+ <ul>
+ <li>
+ <p>The parser will check that a <code class="inline-code">list</code>
+ without <code class="inline-code">as <em class="code-color">item</em></code>
+ parameter always has a nested <code class="inline-code">items</code>
+ directive, and that an <code class="inline-code">items</code> directive
+ always has an enclosing <code class="inline-code">list</code> which has no
+ <code class="inline-code">as <em class="code-color">item</em></code>
+ parameter. This is checked when the template is parsed, not
+ when the template is executed. Thus, these rules apply on the
+ FTL source code itself, so you can't move
+ <code class="inline-code">items</code> out into a macro or included
+ template.</p>
+ </li>
+
+ <li>
+ <p>A <code class="inline-code">list</code> can have multiple
+ <code class="inline-code">items</code> directives, but only one of them will
+ be allowed to run (as far as you don't leave and re-enter the
+ enclosing <code class="inline-code">list</code> directive); and further
+ attempts to call <code class="inline-code">items</code> will cause error. So
+ multiple <code class="inline-code">items</code> can be utilized on different
+ <code class="inline-code">if</code>-<code class="inline-code">else</code> branches for
+ example, but not for iterating twice.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">items</code> directive can't have its own
+ nested <code class="inline-code">else</code> directive, only the enclosing
+ <code class="inline-code">list</code> can have</p>
+ </li>
+
+ <li>
+ <p>The loop variable (<code class="inline-code">user</code>) only exists
+ inside the body of the <code class="inline-code">items</code>
+ directive.</p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_105">sep directive</h3>
+
+
+ <a name="ref.directive.sep"></a>
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p><code class="inline-code">sep</code> exists since FreeMarker
+ 2.3.23</p>
+ </div>
+
+
+ <p><code class="inline-code">sep</code> is used when you have to display
+ something between each item (but not before the first item or
+ after the last item). For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list users as user>${user}<strong><#sep>, </strong></#list></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">Joe, Kate, Fred</pre></div>
+
+ <p>Above, <code class="inline-code"><#sep>, </#list></code> is a
+ shorthand for <code class="inline-code"><#sep>,
+ </#sep></#list></code>; the <code class="inline-code">sep</code>
+ end-tag can be omitted if you would put it where the enclosing
+ directive is closed anyway. In the next example, you couldn't use
+ such abbreviation (HTML tags close nothing, as they are just raw
+ text to output for FreeMarker):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list users as user>
+ <div>
+ ${user}<strong><#sep>, </#sep></strong>
+ </div>
+</#list></pre></div>
+
+ <p><code class="inline-code">sep</code> is just a shorthand for
+ <code class="inline-code"><#if
+ <em class="code-color">item</em>?has_next>...</#if></code>.
+ Thus, it can be used anywhere where there's a
+ <code class="inline-code">list</code> or <code class="inline-code">items</code> loop variable
+ available, it can occur for multiple times, and it can have
+ arbitrary nested content.</p>
+
+ <p>The parser ensures that <code class="inline-code">sep</code> is only used
+ on a place where there's a visible loop variable. This happens
+ earlier than the actual execution of the template. Thus, you can't
+ move <code class="inline-code">sep</code> from inside the associated
+ <code class="inline-code">list</code> or <code class="inline-code">items</code> directive into
+ a macro or included template (the parser can't know where those
+ will be called from).</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_106">break directive</h3>
+
+
+ <a name="ref.directive.list.break"></a>
+
+
+
+ <p>You can exit the iteration at any point with the
+ <code class="inline-code">break</code> directive. For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list 1..10 as x>
+ ${x}
+ <#if x == 3>
+ <strong><#break></strong>
+ </#if>
+</#list></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> 1
+ 2
+ 3</pre></div>
+
+ <p>The <code class="inline-code">break</code> directives can be placed
+ anywhere inside <code class="inline-code">list</code> as far as it has
+ <code class="inline-code">as <em class="code-color">item</em></code> parameter,
+ otherwise it can be placed anywhere inside the
+ <code class="inline-code">items</code> directive. If the
+ <code class="inline-code">break</code> is inside <code class="inline-code">items</code>, it
+ will only exit from <code class="inline-code">items</code>, not from
+ <code class="inline-code">list</code>. In general, <code class="inline-code">break</code> will
+ only exit from the directive whose body is called for each item,
+ and can only be placed inside such directive. So for example can't
+ use <code class="inline-code">break</code> inside <code class="inline-code">list</code>'s
+ <code class="inline-code">else</code> section, unless there's the
+ <code class="inline-code">list</code> is nested into another
+ <code class="inline-code">break</code>-able directive.</p>
+
+ <p>Just like <code class="inline-code">else</code> and
+ <code class="inline-code">items</code>, <code class="inline-code">break</code> must be
+ literally inside body of the directive to break out from, and
+ can't be moved out into a macro or included template.</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_107">Accessing iteration state</h3>
+
+
+
+
+
+
+ <p>Starting from 2.3.23, <a href="ref_builtins_loop_var.html">loop variable built-ins</a> is
+ the preferred way of accessing current state of the iteration. For
+ example, here we use the <code class="inline-code">counter</code> and
+ <code class="inline-code">item_parity</code> loop variable built-ins (see all of
+ them <a href="ref_builtins_loop_var.html">in the
+ Reference</a>):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list users>
+ <table>
+ <#items as user>
+ <tr class="${user<strong>?item_parity</strong>}Row">
+ <td>${user<strong>?counter</strong>}
+ <td>${user}
+ </#items>
+ </table>
+</#list></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> <table>
+ <tr class="<strong>odd</strong>Row">
+ <td><strong>1</strong>
+ <td>Joe
+ <tr class="<strong>even</strong>Row">
+ <td><strong>2</strong>
+ <td>Kate
+ <tr class="<strong>odd</strong>Row">
+ <td><strong>3</strong>
+ <td>Fred
+ </table></pre></div>
+
+ <p>In 2.3.22 and earlier, there were two extra loop variables
+ to retrieve the iteration state instead (and they still exist for
+ backward compatibility):</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code"><em class="code-color">item</em>_index</code>
+ (<em>deprecated</em> by
+ <code class="inline-code"><em class="code-color">item</em>?index</code>): The
+ index (0-based number) of the current item in the loop.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code"><em class="code-color">item</em>_has_next</code>
+ (<em>deprecated</em> by
+ <code class="inline-code"><em class="code-color">item</em>?has_next</code>):
+ Boolean value that tells if the current item is the last in
+ the sequence or not.</p>
+ </li>
+ </ul>
+
+ <p>so in the above example, you could replace
+ <code class="inline-code">${user?counter}</code> with <code class="inline-code">${user_index +
+ 1}</code>.</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_108">Nesting loops into each other</h3>
+
+
+ <p>Naturally, <code class="inline-code">list</code> or
+ <code class="inline-code">items</code> can contain further
+ <code class="inline-code">list</code>-s:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list 1..2 as i>
+ <#list 1..3 as j>
+ i = ${i}, j = ${j}
+ </#list>
+</#list></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> i = 1, j = 1
+ i = 1, j = 2
+ i = 1, j = 3
+ i = 2, j = 1
+ i = 2, j = 2
+ i = 2, j = 3</pre></div>
+
+ <p>It's also allowed to use clashing loop variable names
+ like:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list 1..2 as i>
+ Outer: ${i}
+ <#list 10..12 as i>
+ Inner: ${i}
+ </#list>
+ Outer again: ${i}
+</#list></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> Outer: 1
+ Inner: 10
+ Inner: 11
+ Inner: 12
+ Outer again: 1
+ Outer: 2
+ Inner: 10
+ Inner: 11
+ Inner: 12
+ Outer again: 2</pre></div>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_109">Notes for Java programmers</h3>
+
+
+ <p><span class="marked-for-programmers">If classic compatible mode
+ <code class="inline-code">list</code> accepts a scalar too and treats it as a
+ single-element sequence.</span></p>
+
+ <p><span class="marked-for-programmers">If you pass an collection that
+ wraps an <code class="inline-code">java.util.Iterator</code> to the
+ <code class="inline-code">list</code>, you can iterate over its elements only
+ once, since <code class="inline-code">Iterator</code>s are by their nature
+ one-off objects. When you try to list a such collection variable
+ for the second time, an error will abort template
+ processing.</span></p>
+
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_include.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_local.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[25/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_builtins_string.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_builtins_string.html b/builds/2.3.26-nightly/ref_builtins_string.html
new file mode 100644
index 0000000..6ebdd42
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_builtins_string.html
@@ -0,0 +1,2374 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Built-ins for strings - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Built-ins for strings">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_builtins_string.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_builtins_string.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins.html"><span itemprop="name">Built-in Reference</span></a></li><li class="step-3"
itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins_string.html"><span itemprop="name">Built-ins for strings</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Built-in Reference","Built-ins for strings"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_builtins_alphaidx.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins_number.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_builtins_string" itemprop="headline">Built-ins for strings</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#ref_builtin_boolean" data-menu-target="ref_builtin_boolean">boolean</a></li><li><a class="page-menu-link" href="#ref_builtin_cap_first" data-menu-target="ref_builtin_cap_first">cap_first</a></li><li><a class="page-menu-link" href="#ref_builtin_capitalize" data-menu-target="ref_builtin_capitalize">capitalize</a></li><li><a class="page-menu-link" href="#ref_builtin_chop_linebreak" data-menu-target="ref_builtin_chop_linebreak">chop_linebreak</a></li><li><a class="page-menu-link" href="#ref_builtin_contains" data-menu-target="ref_builtin_contains">contains</a></li><li><a class="page-menu-link" href="#ref_builtin_string_date" data-menu-target="ref_builtin_string_date">date, time, datetime</a></li><li><a class="page-menu-link" href="#ref_builtin_ends_with" data-menu-target="ref_builtin_ends_with">ends_with</a></li><li><a class="page-menu-link" href="#ref_builtin_ensure_ends_with" data-menu-target="ref_builtin_ensure_ends_with">ensure_ends_with</a><
/li><li><a class="page-menu-link" href="#ref_builtin_ensure_starts_with" data-menu-target="ref_builtin_ensure_starts_with">ensure_starts_with</a></li><li><a class="page-menu-link" href="#ref_builtin_esc" data-menu-target="ref_builtin_esc">esc</a></li><li><a class="page-menu-link" href="#ref_builtin_groups" data-menu-target="ref_builtin_groups">groups</a></li><li><a class="page-menu-link" href="#ref_builtin_html" data-menu-target="ref_builtin_html">html (deprecated)</a></li><li><a class="page-menu-link" href="#ref_builtin_index_of" data-menu-target="ref_builtin_index_of">index_of</a></li><li><a class="page-menu-link" href="#ref_builtin_j_string" data-menu-target="ref_builtin_j_string">j_string</a></li><li><a class="page-menu-link" href="#ref_builtin_js_string" data-menu-target="ref_builtin_js_string">js_string</a></li><li><a class="page-menu-link" href="#ref_builtin_json_string" data-menu-target="ref_builtin_json_string">json_string</a></li><li><a class="page-menu-link" href="#ref_bu
iltin_keep_after" data-menu-target="ref_builtin_keep_after">keep_after</a></li><li><a class="page-menu-link" href="#ref_builtin_keep_after_last" data-menu-target="ref_builtin_keep_after_last">keep_after_last</a></li><li><a class="page-menu-link" href="#ref_builtin_keep_before" data-menu-target="ref_builtin_keep_before">keep_before</a></li><li><a class="page-menu-link" href="#ref_builtin_keep_before_last" data-menu-target="ref_builtin_keep_before_last">keep_before_last</a></li><li><a class="page-menu-link" href="#ref_builtin_last_index_of" data-menu-target="ref_builtin_last_index_of">last_index_of</a></li><li><a class="page-menu-link" href="#ref_builtin_left_pad" data-menu-target="ref_builtin_left_pad">left_pad</a></li><li><a class="page-menu-link" href="#ref_builtin_length" data-menu-target="ref_builtin_length">length</a></li><li><a class="page-menu-link" href="#ref_builtin_lower_case" data-menu-target="ref_builtin_lower_case">lower_case</a></li><li><a class="page-menu-link" href="#
ref_builtin_matches" data-menu-target="ref_builtin_matches">matches</a></li><li><a class="page-menu-link" href="#ref_builtin_no_esc" data-menu-target="ref_builtin_no_esc">no_esc</a></li><li><a class="page-menu-link" href="#ref_builtin_number" data-menu-target="ref_builtin_number">number</a></li><li><a class="page-menu-link" href="#ref_builtin_replace" data-menu-target="ref_builtin_replace">replace</a></li><li><a class="page-menu-link" href="#ref_builtin_right_pad" data-menu-target="ref_builtin_right_pad">right_pad</a></li><li><a class="page-menu-link" href="#ref_builtin_remove_beginning" data-menu-target="ref_builtin_remove_beginning">remove_beginning</a></li><li><a class="page-menu-link" href="#ref_builtin_remove_ending" data-menu-target="ref_builtin_remove_ending">remove_ending</a></li><li><a class="page-menu-link" href="#ref_builtin_rtf" data-menu-target="ref_builtin_rtf">rtf (deprecated)</a></li><li><a class="page-menu-link" href="#ref_builtin_split" data-menu-target="ref_builti
n_split">split</a></li><li><a class="page-menu-link" href="#ref_builtin_starts_with" data-menu-target="ref_builtin_starts_with">starts_with</a></li><li><a class="page-menu-link" href="#ref_builtin_string_for_string" data-menu-target="ref_builtin_string_for_string">string (when used with a string value)</a></li><li><a class="page-menu-link" href="#ref_builtin_substring" data-menu-target="ref_builtin_substring">substring (deprecated)</a></li><li><a class="page-menu-link" href="#ref_builtin_trim" data-menu-target="ref_builtin_trim">trim</a></li><li><a class="page-menu-link" href="#ref_builtin_uncap_first" data-menu-target="ref_builtin_uncap_first">uncap_first</a></li><li><a class="page-menu-link" href="#ref_builtin_upper_case" data-menu-target="ref_builtin_upper_case">upper_case</a></li><li><a class="page-menu-link" href="#ref_builtin_url" data-menu-target="ref_builtin_url">url</a></li><li><a class="page-menu-link" href="#ref_builtin_url_path" data-menu-target="ref_builtin_url_path">ur
l_path</a></li><li><a class="page-menu-link" href="#ref_builtin_word_list" data-menu-target="ref_builtin_word_list">word_list</a></li><li><a class="page-menu-link" href="#ref_builtin_xhtml" data-menu-target="ref_builtin_xhtml">xhtml (deprecated)</a></li><li><a class="page-menu-link" href="#ref_builtin_xml" data-menu-target="ref_builtin_xml">xml (deprecated)</a></li><li><a class="page-menu-link" href="#ref_builtin_string_flags" data-menu-target="ref_builtin_string_flags">Common flags</a></li></ul> </div><p>These built-ins act on a string left-value. However, if the
+ left-value is number or date/time/date-time or boolean (since 2.3.20),
+ it will automatically converted to string according the current
+ number-, date/time/date-time- and boolean-format settings (which are
+ the same formatters that are applied when inserting such values with
+ <code class="inline-code">${<em class="code-color">...</em>}</code>).</p>
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_boolean">boolean</h2>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <p>The string converted to boolean value. The string must be
+ <code class="inline-code">true</code> or <code class="inline-code">false</code> (case
+ sensitive!), or must be in the format specified by the
+ <code class="inline-code">boolean_format</code> setting.</p>
+
+ <p>If the string is not in the appropriate format, an error will
+ abort template processing when you try to access this
+ built-in.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_cap_first">cap_first</h2>
+
+
+
+
+ <p>The string with the very first word of the string capitalized.
+ For the precise meaning of "word" see the <a href="#ref_builtin_word_list">word_list built-in</a>.
+ Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${" green mouse"?cap_first}
+${"GreEN mouse"?cap_first}
+${"- green mouse"?cap_first}</pre></div>
+
+ <p>The output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> Green mouse
+GreEN mouse
+- green mouse</pre></div>
+
+ <p>In the case of <code class="inline-code">"- green mouse"</code>, the first
+ word is the <code class="inline-code">-</code>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_capitalize">capitalize</h2>
+
+
+
+
+ <p>The string with all words capitalized. For the precise meaning
+ of "word" see the <a href="#ref_builtin_word_list">word_list built-in</a>.
+ Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${" green mouse"?capitalize}
+${"GreEN mouse"?capitalize}</pre></div>
+
+ <p>The output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> Green Mouse
+Green Mouse</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_chop_linebreak">chop_linebreak</h2>
+
+
+
+
+ <p>The string without the <a href="gloss.html#gloss.lineBreak">line-break</a> at its very end if there
+ was a line-break, otherwise the unchanged string.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_contains">contains</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.1. It
+ doesn't exist in 2.3.</p>
+ </div>
+
+
+ <p>Returns if the substring specified as the parameter to this
+ built-in occurrs in the string. For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#if "piceous"?contains("ice")>It contains "ice"</#if></pre></div>
+
+ <p>This will output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">It contains "ice"</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_string_date">date, time, datetime</h2>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <p>The string value converted to a date, time, or date-time
+ value. It will expect the format specified by the <a href="ref_directive_setting.html#topic.dateTimeFormatSettings"><code>date_format</code>,
+ <code>time_format</code> and
+ <code>datetime_format</code> settings</a>. If the string is
+ not in the appropriate format, an error will abort template
+ processing when you try to access this built-in.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#-- The date_format, time_format and datetime_format settings must match this format! -->
+<#assign someDate = "Oct 25, 1995"?date>
+<#assign someTime = "3:05:30 PM"?time>
+<#assign someDatetime = "Oct 25, 1995 03:05:00 PM"?datetime>
+
+<#-- Changing the setting value changes the expected format: -->
+<#setting datetime_format="iso">
+<#assign someDatetime = "1995-10-25T15:05"?datetime></pre></div>
+
+ <p>You can also specify the format explicitly like
+ <code class="inline-code">?datetime.<em class="code-color">format</em></code> (and
+ hence also as
+ <code class="inline-code">?datetime["<em class="code-color">format</em>"]</code>)
+ or
+ <code class="inline-code">?datetime("<em class="code-color">format</em>")</code>;
+ these three forms do the same. The format can be specified similarly
+ with <code class="inline-code">?date</code> and <code class="inline-code">?time</code> too. For
+ the syntax and meaning of format values see the possible values of
+ the <a href="ref_directive_setting.html#topic.dateTimeFormatSettings"><code>date_format</code>,
+ <code>time_format</code> and
+ <code>datetime_format</code> settings</a>. Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#-- Parsing XML Schema xs:date, xs:time and xs:dateTime values: -->
+<#assign someDate = "1995-10-25"?date.xs>
+<#assign someTime = "15:05:30"?time.xs>
+<#assign someDatetime = "1995-10-25T15:05:00"?datetime.xs>
+
+<#-- Parsing ISO 8601 (both extended and basic formats): -->
+<#assign someDatetime = "1995-10-25T15:05"?datetime.iso>
+<#assign someDatetime = "19951025T1505"?datetime.iso>
+
+<#-- Parsing with SimpleDateFormat patterns: -->
+<#assign someDate = "10/25/1995"?date("MM/dd/yyyy")>
+<#assign someTime = "15:05:30"?time("HH:mm:ss")>
+<#assign someDatetime = "1995-10-25 03:05 PM"?datetime("yyyy-MM-dd hh:mm a")>
+
+<#-- Parsing with custom date formats: -->
+<#assign someDatetime = "October/25/1995 03:05 PM"?datetime.@worklog></pre></div>
+
+ <p>To prevent misunderstandings, the left-hand value need not be
+ a string literal. For example, when you read data from XML DOM (from
+ where all values come as unparsed strings), you may do things like
+ <code class="inline-code">order.confirmDate?date.xs</code> to convert the string
+ value to a real date.</p>
+
+ <p>Of course, the format also can be a variable, like in
+ <code class="inline-code">"<em class="code-color">...</em>"?datetime(myFormat)</code>.</p>
+
+ <p>Note that since 2.3.24, these built-ins can also be called
+ with 0 arguments, like <code class="inline-code">?date()</code>. It's almost the
+ same as just writing <code class="inline-code">?date</code>. The difference is
+ highly technical and rarely matters: <code class="inline-code">?date()</code> and
+ such returns exactly the same Java object that the date parser
+ (<code class="inline-code">freemarker.core.TemplateDateFormat</code>
+ implementation) returns, while <code class="inline-code">?date</code> without the
+ <code class="inline-code">()</code> returns a tricky wrapper value that's a date
+ and a method and hash on the same time.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_ends_with">ends_with</h2>
+
+
+
+
+ <p>Returns whether this string ends with the substring specified
+ in the parameter. For example
+ <code class="inline-code">"ahead"?ends_with("head")</code> returns boolean
+ <code class="inline-code">true</code>. Also,
+ <code class="inline-code">"head"?ends_with("head")</code> will return
+ <code class="inline-code">true</code>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_ensure_ends_with">ensure_ends_with</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.21.</p>
+ </div>
+
+
+ <p>If the string doesn't end with the substring specified as the
+ 1st parameter, it adds it after the string, otherwise it returns the
+ original string. For example, both
+ <code class="inline-code">"foo"?ensure_ends_with("/")</code> and
+ <code class="inline-code">"foo/"?ensure_ends_with("/")</code> returns
+ <code class="inline-code">"foo/"</code>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_ensure_starts_with">ensure_starts_with</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.21.</p>
+ </div>
+
+
+ <p>If the string doesn't start with the substring specified as
+ the 1st parameter, it adds it before the string, otherwise it
+ returns the original string. For example, both
+ <code class="inline-code">"foo"?ensure_starts_with("/")</code> and
+ <code class="inline-code">"/foo"?ensure_starts_with("/")</code> returns
+ <code class="inline-code">"/foo"</code>.</p>
+
+ <p>If you specify two parameters, then the 1st parameter is
+ interpreted as a Java regular expression, and if it doesn't match
+ the beginning of the string, then the string specified as the 2nd
+ parameter is added before the string. For example
+ <code class="inline-code">someURL?ensure_starts_with("[a-zA-Z]+://",
+ "http://")</code> will check if the string starts with something
+ that matches <code class="inline-code">"[a-zA-Z]+://"</code> (note that no
+ <code class="inline-code">^</code> is needed), and if it doesn't, it prepends
+ <code class="inline-code">"http://"</code>.</p>
+
+ <p>This method also accepts a 3rd <a href="#ref_builtin_string_flags">flags parameter</a>. As
+ calling with 2 parameters implies <code class="inline-code">"r"</code> there
+ (i.e., regular expression mode), you rarely need this. One notable
+ case is when you don't want the 1st parameter to be interpreted as a
+ regular expression, only as plain text, but you want the comparison
+ to be case-insensitive, in which case you would use
+ <code class="inline-code">"i"</code> as the 3rd parameter.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_esc">esc</h2>
+
+
+ <p></p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.24.</p>
+ </div>
+
+
+ <p>Escapes the value with the current <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_outputformat">output format</a>,
+ and prevents the <a href="dgui_misc_autoescaping.html">auto-escaping</a> of the
+ returned value (to avoid double escaping). Because of auto-escaping,
+ you usually only need this where auto-escaping was disabled:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#ftl output_format="HTML" <strong>auto_esc=false</strong>>
+<#assign s = "R&D">
+${s}
+${s?esc}</pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">R&D
+R&amp;D</pre></div>
+
+ <p>In templates, where auto-escaping is on, using it is
+ redundant:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#ftl output_format="HTML">
+<#assign s = "R&D">
+${s}
+${s?esc} <#-- ?esc is redundant here --></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">R&amp;D
+R&amp;D</pre></div>
+
+ <p>This built-in works by converting the string value to a <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_movalues">markup output
+ value</a>, by escaping the string with the current output format,
+ and using the result as the markup. The resulting markup output
+ value belongs to the current output format at the point of the
+ invocation.</p>
+
+ <p>This built-in can also be applied on markup output values,
+ which it will bypass without change, as far as the input markup
+ output value belongs to the current output format. If it doesn't,
+ then the markup has to be converted to the current output format,
+ which currently (as of 2.3.24) will be only successful if that value
+ was created by escaping plain text (usually, with
+ <code class="inline-code">?esc</code>).</p>
+
+ <p>This built-in can't be used where the current output format is
+ a <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_nonmarkupof">non-markup
+ output format</a>. An attempt to do so will cause a <a href="gloss.html#gloss.parseTimeError">parse-time error</a>.</p>
+
+ <p>This built-in is not related to the deprecated <a href="ref_directive_escape.html"><code>escape</code> and
+ <code>noescape</code> directives</a>. In fact, the parser
+ will prevent using them on the same place, to prevent
+ confusion.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_groups">groups</h2>
+
+
+
+
+ <p>This is used only with the result of the
+ <code class="inline-code">matches</code> built-in. See <a href="#ref_builtin_matches">there...</a></p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_html">html (deprecated)</h2>
+
+
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is <em>deprecated</em> by the
+ <a href="dgui_misc_autoescaping.html">auto-escaping
+ mechanism</a> introduced in 2.3.24. To prevent double escaping
+ and confusion in general, using this built-in on places where
+ auto-escaping is active is a <a href="gloss.html#gloss.parseTimeError">parse-time error</a>. To help
+ migration, this built-in silently bypasses HTML <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_movalues">markup output
+ values</a> without changing them.</p>
+ </div>
+
+
+ <p>The string as HTML markup. That is, the string with
+ all:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code"><</code> replaced with
+ <code class="inline-code">&lt;</code>
+ </li>
+
+ <li>
+ <code class="inline-code">></code> replaced with
+ <code class="inline-code">&gt;</code>
+ </li>
+
+ <li>
+ <code class="inline-code">&</code> replaced with
+ <code class="inline-code">&amp;</code>
+ </li>
+
+ <li>
+ <code class="inline-code">"</code> replaced with
+ <code class="inline-code">&quot;</code>
+ </li>
+
+ <li>
+ <code class="inline-code">'</code> is replaced with
+ <code class="inline-code">&#39;</code> <em>if</em> the
+ programmers has <a href="pgui_config_incompatible_improvements.html#pgui_config_incompatible_improvements_how_to_set">set
+ the <code>incompatible_improvements</code> setting</a>
+ to 2.3.24 or higher (also if it's set to 2.3.20 or higher and
+ you are outside a string literal). Otherwise
+ <code class="inline-code">'</code> won't be replaced, so you must use
+ quotation mark (<code class="inline-code">"</code>, not <code class="inline-code">'</code>)
+ to quote attribute values where you want to insert a value
+ safely.
+ </li>
+ </ul>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><input type=text name=user value=<strong>"</strong>${user?html}<strong>"</strong>></pre></div>
+
+ <div class="callout warning">
+ <strong class="callout-label">Warning!</strong>
+
+ <p>When inserting the value of an attribute, always quote it,
+ or else it can be exploited by attackers! This is WRONG:
+ <code class="inline-code"><input name="user" value=${user?xhtml}></code>.
+ This is good: <code class="inline-code"><input name="user"
+ value="${user?xhtml}"></code>.</p>
+ </div>
+
+
+ <p>Note that in HTML pages usually you want to use this built-in
+ for all interpolations. You can spare a lot of typing and lessen the
+ chances of accidental mistakes by using the <a href="ref_directive_escape.html"><code>escape</code>
+ directive</a>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_index_of">index_of</h2>
+
+
+
+
+ <p>Returns the index within this string of the first occurrence
+ of the specified substring. For example,
+ <code class="inline-code">"abcabc"?index_of("bc")</code> will return 1 (don't
+ forget that the index of the first character is 0). Also, you can
+ specify the index to start the search from:
+ <code class="inline-code">"abcabc"?index_of("bc", 2)</code> will return 4. There
+ is no restriction on the numerical value of the second parameter: if
+ it is negative, it has the same effect as if it were zero, and if it
+ is greater than the length of this string, it has the same effect as
+ if it were equal to the length of this string. Decimal values will
+ be truncated to integers.</p>
+
+ <p>If the 1st parameter does not occur as a substring in this
+ string (starting from the given index, if you use the second
+ parameter), then it returns -1.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_j_string">j_string</h2>
+
+
+
+
+ <p>Escapes the string with the escaping rules of Java language
+ string literals, so it's safe to insert the value into a string
+ literal. Note that it will <em>not</em> add quotation
+ marks around the inserted value; you meant to use this
+ <em>inside</em> the string literal.</p>
+
+ <p>All characters under <a href="gloss.html#gloss.UCS">UCS</a> code
+ point 0x20 will be escaped. When they have no dedicated escape
+ sequence in the Java language (like <code class="inline-code">\n</code>,
+ <code class="inline-code">\t</code>, etc.), they will be replaced with a UNICODE
+ escape
+ (<code class="inline-code">\u<em class="code-color">XXXX</em></code>).</p>
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign beanName = 'The "foo" bean.'>
+String BEAN_NAME = "${beanName?j_string}";</pre></div>
+
+ <p>will output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">String BEAN_NAME = "The \"foo\" bean.";</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_js_string">js_string</h2>
+
+
+
+
+ <p>Escapes the string with the escaping rules of JavaScript
+ language string literals, so it's safe to insert the value into a
+ string literal. Note that it will <em>not</em> add
+ quotation marks around the inserted value; you meant to use this
+ <em>inside</em> the string literal.</p>
+
+ <div class="callout warning">
+ <strong class="callout-label">Warning!</strong>
+
+ <p>When inserting into a JavaScript string literal that's
+ inside a HTML attribute, you also must escape the value with HTML
+ escaping. Thus, of you don't have <a href="pgui_config_outputformatsautoesc.html">automatic HTML
+ escaping</a>, this is WRONG: <code class="inline-code"><p
+ onclick="alert('${message?js_string}')"></code>, and this is
+ good: <code class="inline-code"><p
+ onclick="alert('${message?js_string?html}')"></code>.</p>
+ </div>
+
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign user = "Big Joe's \"right hand\"">
+<script>
+ alert("Welcome ${user?js_string}!");
+</script></pre></div>
+
+ <p>will output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"><script>
+ alert("Welcome Big Joe\'s \"right hand\"!");
+</script></pre></div>
+
+ <p>The exact escaping rules are:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">"</code> is escaped as
+ <code class="inline-code">\"</code></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">'</code> is escaped as
+ <code class="inline-code">\'</code></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">\</code> is escaped as
+ <code class="inline-code">\\</code></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">/</code> is escaped as <code class="inline-code">\/</code>
+ if the <code class="inline-code">/</code> is directly after
+ <code class="inline-code"><</code> in the escaped string, or if it's at the
+ beginning of the escaped string</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">></code> is escaped as
+ <code class="inline-code">\></code> if the <code class="inline-code">></code> is
+ directly after <code class="inline-code">]]</code> or <code class="inline-code">--</code> in
+ the escaped string, or if it's at the beginning of the escaped
+ string, or if there's only a <code class="inline-code">]</code> or
+ <code class="inline-code">-</code> before it at the beginning of the escaped
+ string</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code"><</code> is escaped as
+ <code class="inline-code">\u003C</code> if it's followed by
+ <code class="inline-code">?</code> or <code class="inline-code">!</code> in the escaped
+ string, or if it's at the end of the escaped string</p>
+ </li>
+
+ <li>
+ <p>Control characters in <a href="gloss.html#gloss.UCS">UCS</a>
+ code point ranges U+0000...U+001f and U+007f...U+009f are
+ escaped as <code class="inline-code">\r</code>, <code class="inline-code">\n</code>, etc.,
+ or as <code class="inline-code">\x<em class="code-color">XX</em></code> where
+ there's no special escape for them in JavaScript.</p>
+ </li>
+
+ <li>
+ <p>Control characters with <a href="gloss.html#gloss.UCS">UCS</a> code point U+2028 (Line
+ separator) and U+2029 (Paragraph separator) are escaped as
+ <code class="inline-code">\u<em class="code-color">XXXX</em></code>, as they
+ are source code line-breaks in ECMAScript.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_json_string">json_string</h2>
+
+
+
+
+ <p>Escapes the string with the escaping rules of JSON language
+ string literals, so it's safe to insert the value into a string
+ literal. Note that it will <em>not</em> add quotation
+ marks around the inserted value; you meant to use this
+ <em>inside</em> the string literal.</p>
+
+ <p>This will not escape <code class="inline-code">'</code> characters, since
+ JSON strings must be quoted with <code class="inline-code">"</code>.</p>
+
+ <p>The escaping rules are almost identical to those <a href="#ref_builtin_j_string">documented for
+ <code>js_string</code></a>. The differences are that
+ <code class="inline-code">'</code> is not escaped at all, that > is escaped as
+ \u003E (not as \>), and that
+ <code class="inline-code">\u<em class="code-color">XXXX</em></code> escapes are
+ used instead of <code class="inline-code">\x<em class="code-color">XX</em></code>
+ escapes.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_keep_after">keep_after</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.21.</p>
+ </div>
+
+
+ <p>Removes the part of the string that is not after the first
+ occurrence of the given substring. For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${"abcdefgh"?keep_after("de")}</pre></div>
+
+ <p>will print</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">fgh</pre></div>
+
+ <p>If the parameter string is not found, it will return an empty
+ string. If the parameter string is a 0-length string, it will return
+ the original string unchanged.</p>
+
+ <p>This method accepts an optional <a href="#ref_builtin_string_flags">flags parameter</a>, as its
+ 2nd parameter:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${"foo : bar"?keep_after(r"\s*:\s*", "r")}</pre></div>
+
+ <p>will print</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">bar</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_keep_after_last">keep_after_last</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.22.</p>
+ </div>
+
+
+ <p>Same as <a href="#ref_builtin_keep_after"><code>keep_after</code></a>,
+ but keeps the part after the last occurrence of the parameter,
+ rather than after the first. Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${"foo.bar.txt"?keep_after_last(".")}</pre></div>
+
+ <p>will print</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">txt</pre></div>
+
+ <p>while with <code class="inline-code">keep_after</code> you would get
+ <code class="inline-code">bar.txt</code>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_keep_before">keep_before</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.21.</p>
+ </div>
+
+
+ <p>Removes the part of the string that starts with the given
+ substring. For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${"abcdef"?keep_before("de")}</pre></div>
+
+ <p>will print</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">abc</pre></div>
+
+ <p>If the parameter string is not found, it will return the
+ original string unchanged. If the parameter string is a 0-length
+ string, it will return an empty string.</p>
+
+ <p>This method accepts an optional <a href="#ref_builtin_string_flags">flags parameter</a>, as its
+ 2nd parameter:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${"foo : bar"?keep_before(r"\s*:\s*", "r")}</pre></div>
+
+ <p>will print</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">foo</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_keep_before_last">keep_before_last</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.22.</p>
+ </div>
+
+
+ <p>Same as <a href="#ref_builtin_keep_before"><code>keep_before</code></a>,
+ but keeps the part before the last occurrence of the parameter,
+ rather than after the first. Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${"foo.bar.txt"?keep_after_last(".")}</pre></div>
+
+ <p>will print</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">foo.bar</pre></div>
+
+ <p>while with <code class="inline-code">keep_before</code> you would get
+ <code class="inline-code">foo</code>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_last_index_of">last_index_of</h2>
+
+
+
+
+ <p>Returns the index within this string of the last (rightmost)
+ occurrence of the specified substring. It returns the index of the
+ first (leftmost) character of the substring. For example:
+ <code class="inline-code">"abcabc"?last_index_of("ab")</code> will return 3. Also,
+ you can specify the index to start the search from. For example,
+ <code class="inline-code">"abcabc"?last_index_of("ab", 2)</code> will return 0.
+ Note that the second parameter indicates the maximum index of the
+ start of the substring. There is no restriction on the numerical
+ value of the second parameter: if it is negative, it has the same
+ effect as if it were zero, and if it is greater than the length of
+ this string, it has the same effect as if it were equal to the
+ length of this string. Decimal values will be truncated to
+ inegers.</p>
+
+ <p>If the 1st parameter does not occur as a substring in this
+ string (before the given index, if you use the second parameter),
+ then it returns -1.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_left_pad">left_pad</h2>
+
+
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.1.</p>
+ </div>
+
+
+ <p>If it's used with 1 parameter, then it inserts spaces on the
+ beginning of the string until it reaches the length that is
+ specified as the parameter. If the string is already as long or
+ longer than the specified length, then it does nothing. For example,
+ this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">[${""?left_pad(5)}]
+[${"a"?left_pad(5)}]
+[${"ab"?left_pad(5)}]
+[${"abc"?left_pad(5)}]
+[${"abcd"?left_pad(5)}]
+[${"abcde"?left_pad(5)}]
+[${"abcdef"?left_pad(5)}]
+[${"abcdefg"?left_pad(5)}]
+[${"abcdefgh"?left_pad(5)}]</pre></div>
+
+ <p>will output this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">[ ]
+[ a]
+[ ab]
+[ abc]
+[ abcd]
+[abcde]
+[abcdef]
+[abcdefg]
+[abcdefgh]</pre></div>
+
+ <p>If it's used with 2 parameters, then the 1st parameter means
+ the same as if you were using the built-in with only 1 parameter,
+ and the second parameter specifies what to insert instead of space
+ characters. For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">[${""?left_pad(5, "-")}]
+[${"a"?left_pad(5, "-")}]
+[${"ab"?left_pad(5, "-")}]
+[${"abc"?left_pad(5, "-")}]
+[${"abcd"?left_pad(5, "-")}]
+[${"abcde"?left_pad(5, "-")}]</pre></div>
+
+ <p>will output this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">[-----]
+[----a]
+[---ab]
+[--abc]
+[-abcd]
+[abcde]</pre></div>
+
+ <p>The 2nd parameter can be a string whose length is greater than
+ 1. Then the string will be inserted periodically, for
+ example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">[${""?left_pad(8, ".oO")}]
+[${"a"?left_pad(8, ".oO")}]
+[${"ab"?left_pad(8, ".oO")}]
+[${"abc"?left_pad(8, ".oO")}]
+[${"abcd"?left_pad(8, ".oO")}]</pre></div>
+
+ <p>will output this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">[.oO.oO.o]
+[.oO.oO.a]
+[.oO.oOab]
+[.oO.oabc]
+[.oO.abcd]</pre></div>
+
+ <p>The 2nd parameter must be a string value, and it must be at
+ least 1 character long.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_length">length</h2>
+
+
+
+
+ <p>The number of characters in the string.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_lower_case">lower_case</h2>
+
+
+
+
+ <p>The lower case version of the string. For example
+ <code class="inline-code">"GrEeN MoUsE"?lower_case</code> will be <code class="inline-code">"green
+ mouse"</code>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_matches">matches</h2>
+
+
+
+
+ <p>This is a "power user" built-in. Ignore it if you
+ don't know <a href="gloss.html#gloss.regularExpression">regular
+ expressions</a>.</p>
+
+ <p>This built-in determines if the string exactly matches the
+ pattern. Also, it returns the list of matching sub-strings. The
+ return value is a multi-type value:</p>
+
+ <ul>
+ <li>
+ <p>Boolean: <code class="inline-code">true</code>, if it the entire string
+ matches the pattern, otherwise <code class="inline-code">false</code>. For
+ example, <code class="inline-code">"fooo"?matches('fo*')</code> is
+ <code class="inline-code">true</code>, but
+ <code class="inline-code">"fooo�bar"?matches('fo*')</code> is
+ <code class="inline-code">false</code>.</p>
+ </li>
+
+ <li>
+ <p>Sequence: the list of matched substrings of the string.
+ Possibly a 0 length sequence.</p>
+ </li>
+ </ul>
+
+ <p>For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#if "fxo"?matches("f.?o")>Matches.<#else>Does not match.</#if>
+
+<#assign res = "foo bar fyo"?matches("f.?o")>
+<#if res>Matches.<#else>Does not match.</#if>
+Matching sub-strings:
+<#list res as m>
+- ${m}
+</#list></pre></div>
+
+ <p>will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">Matches.
+
+Does not match.
+Matching sub-strings:
+- foo
+- fyo</pre></div>
+
+ <p>If the regular expression contains groups (parentheses), then
+ you can access them with the <code class="inline-code">groups</code>
+ built-in:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#-- Entire input match -->
+<#assign res = "John Doe"?matches(r"(\w+) (\w+)")>
+<#if res> <#-- Must not try to access groups if there was no match! -->
+ First name: ${res?groups[1]}
+ Second name: ${res?groups[2]}
+</#if>
+
+<#-- Subtring matches -->
+<#assign res = "aa/rx; ab/r;"?matches("(.+?)/*(.+?);")>
+<#list res as m>
+ - "${m}" is "${m?groups[1]}" per "${m?groups[2]}"
+</#list></pre></div>
+
+ <p>This will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> First name: John
+ Second name: Doe
+
+ - "aa/rx;" is "a" per "a/rx"
+ - " ab/r;" is " " per "ab/r"</pre></div>
+
+ <p>Notes regarding the behavior of the <code class="inline-code">groups</code>
+ built-in:</p>
+
+ <ul>
+ <li>
+ <p>It works both with substring matches and with the result
+ of entire string matching (as it was shown in the above
+ example)</p>
+ </li>
+
+ <li>
+ <p>The first item in the sequence that
+ <code class="inline-code">groups</code> returns is the whole substring matched
+ by the regular expression. Hence, the index of the first
+ explicit regular expression group (with other words, of the
+ first <code class="inline-code">(<em class="code-color">...</em>)</code> in the
+ regular expression) is 1, and not 0. Also, because of this, the
+ size of the sequence is one more than the number of explicit
+ regular expression groups.</p>
+ </li>
+
+ <li>
+ <p>The size of the sequence returned by
+ <code class="inline-code">groups</code> only depends on the number of explicit
+ groups in the regular expression, and so it will be the same
+ (non-0) even if there was no match found for the regular
+ expression. Attempting to access an item of the sequence (as in
+ <code class="inline-code">res?groups[1]</code>) when there was match will
+ cause an error. Thus, before accessing the groups, you should
+ always check if there was any match (as in <code class="inline-code"><#if
+ res><em class="code-color">access the groups
+ here</em></#if></code>).</p>
+ </li>
+
+ <li>
+ <p>When there's a match for the regular expression, but not
+ for a certain explicit group inside the regular expression, then
+ for that group the sequence will contain a 0 length string. So
+ accessing a group that matches nothing is safe, as far as the
+ containing regular expression has matched something.</p>
+ </li>
+ </ul>
+
+ <p><code class="inline-code">matches</code> accepts an optional 2nd parameter,
+ the <a href="#ref_builtin_string_flags">flags</a>. Note that
+ it doesn't support flag <code class="inline-code">f</code>, and ignores the
+ <code class="inline-code">r</code> flag.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_no_esc">no_esc</h2>
+
+
+ <p></p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.24.</p>
+ </div>
+
+
+ <p>Prevents the <a href="dgui_misc_autoescaping.html">auto-escaping</a> of a value.
+ For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#ftl output_format="HTML">
+<#assign s = "<b>Test</b>">
+${s}
+${s?no_esc}</pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">&lt;b&gt;Test&lt;/b&gt;
+<b>Test</b></pre></div>
+
+ <p>This works by converting the string value to a <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_movalues">markup output
+ value</a>, which uses the string as the markup as is, and belongs
+ to the current <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_outputformat">output format</a>
+ at the point of the invocation.</p>
+
+ <p>This built-in can also be applied on markup output values,
+ which it will bypass without change, as far as the input markup
+ output value belongs to current output format. If it doesn't, then
+ the markup has to be converted to the current output format, which
+ currently (as of 2.3.24) will be only successful if that value was
+ created by escaping plain text (usually, with
+ <code class="inline-code">?esc</code>).</p>
+
+ <p>This built-in can't be used where the current output format is
+ a <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_nonmarkupof">non-markup
+ output format</a>. An attempt to do so will cause a <a href="gloss.html#gloss.parseTimeError">parse-time error</a>.</p>
+
+ <p>This built-in is not related to the deprecated <a href="ref_directive_escape.html"><code>escape</code> and
+ <code>noescape</code> directives</a>. In fact, the parser
+ will prevent using them on the same place, to prevent
+ confusion.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_number">number</h2>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <p>The string converted to numerical value. The number must be in
+ "computer language" format. That is, it must be in the
+ locale independent form, where the decimal separator is dot, and
+ there's no grouping.</p>
+
+ <p>This built-in recognizes numbers in the format that the
+ FreeMarker template language uses. In additionally, it recognizes
+ scientific notation (e.g. <code class="inline-code">"1.23E6"</code>,
+ <code class="inline-code">"1.5e-8"</code>). Since FreeMarker 2.3.21, it also
+ recognizes all XML Schema number formats, like
+ <code class="inline-code">NaN</code>, <code class="inline-code">INF</code>,
+ <code class="inline-code">-INF</code>, plus the Java-native formats
+ <code class="inline-code">Infinity</code> and <code class="inline-code">-Infinity</code>.</p>
+
+ <p>If the string is not in the appropriate format, an error will
+ abort template processing when you try to access this
+ built-in.</p>
+
+ <p><span class="marked-for-programmers">In fact, the string is parsed by
+ the <code class="inline-code">toNumber</code> method of the current
+ <code class="inline-code">arithmetic_engine</code>, which is configuration
+ setting. However, that method should behave similarly as described
+ above.</span></p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_replace">replace</h2>
+
+
+
+
+ <p>It is used to replace all occurrences of a string in the
+ original string with another string. It does not deal with word
+ boundaries. For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${"this is a car acarus"?replace("car", "bulldozer")}</pre></div>
+
+ <p>will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">this is a bulldozer abulldozerus</pre></div>
+
+ <p>The replacing occurs in left-to-right order. This means that
+ this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${"aaaaa"?replace("aaa", "X")}</pre></div>
+
+ <p>will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">Xaa</pre></div>
+
+ <p>If the 1st parameter is an empty string, then all occurrences
+ of the empty string will be replaced, like
+ <code class="inline-code">"foo"?replace("","|")</code> will evaluate to
+ <code class="inline-code">"|f|o|o|"</code>.</p>
+
+ <p><code class="inline-code">replace</code> accepts an optional <a href="#ref_builtin_string_flags">flags parameter</a>, as its
+ 3rd parameter.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_right_pad">right_pad</h2>
+
+
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.1. It
+ doesn't exist in 2.3.</p>
+ </div>
+
+
+ <p>This is the same as <a href="#ref_builtin_left_pad"><code>left_pad</code></a>,
+ but it inserts the characters at the end of the string instead of
+ the beginning of the string.</p>
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">[${""?right_pad(5)}]
+[${"a"?right_pad(5)}]
+[${"ab"?right_pad(5)}]
+[${"abc"?right_pad(5)}]
+[${"abcd"?right_pad(5)}]
+[${"abcde"?right_pad(5)}]
+[${"abcdef"?right_pad(5)}]
+[${"abcdefg"?right_pad(5)}]
+[${"abcdefgh"?right_pad(5)}]
+
+[${""?right_pad(8, ".oO")}]
+[${"a"?right_pad(8, ".oO")}]
+[${"ab"?right_pad(8, ".oO")}]
+[${"abc"?right_pad(8, ".oO")}]
+[${"abcd"?right_pad(8, ".oO")}]</pre></div>
+
+ <p>This will output this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">[ ]
+[a ]
+[ab ]
+[abc ]
+[abcd ]
+[abcde]
+[abcdef]
+[abcdefg]
+[abcdefgh]
+
+[.oO.oO.o]
+[aoO.oO.o]
+[abO.oO.o]
+[abc.oO.o]
+[abcdoO.o]</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_remove_beginning">remove_beginning</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.21.</p>
+ </div>
+
+
+ <p>Removes the parameter substring from the beginning of the
+ string, or returns the original string if it doesn't start with the
+ parameter substring. For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${"abcdef"?remove_beginning("abc")}
+${"foobar"?remove_beginning("abc")}</pre></div>
+
+ <p>will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">def
+foobar</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_remove_ending">remove_ending</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.21.</p>
+ </div>
+
+
+ <p>Removes the parameter substring from the ending of the string,
+ or returns the original string if it doesn't end with the parameter
+ substring. For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${"abcdef"?remove_ending("def")}
+${"foobar"?remove_ending("def")}</pre></div>
+
+ <p>will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">abc
+foobar</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_rtf">rtf (deprecated)</h2>
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is <em>deprecated</em> by the
+ <a href="dgui_misc_autoescaping.html">auto-escaping
+ mechanism</a> introduced in 2.3.24. To prevent double escaping
+ and confusion in general, using this built-in on places where
+ auto-escaping is active is a <a href="gloss.html#gloss.parseTimeError">parse-time error</a>. To help
+ migration, this built-in silently bypasses RTF <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_movalues">markup output
+ values</a> without changing them.</p>
+ </div>
+
+
+
+
+
+
+ <p>The string as Rich text (RTF text). That is, the string with
+ all:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">\</code> replaced with
+ <code class="inline-code">\\</code></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">{</code> replaced with
+ <code class="inline-code">\{</code></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">}</code> replaced with
+ <code class="inline-code">\}</code></p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_split">split</h2>
+
+
+
+
+ <p>It is used to split a string into a sequence of strings along
+ the occurrences of another string. For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list "someMOOtestMOOtext"?split("MOO") as x>
+- ${x}
+</#list></pre></div>
+
+ <p>will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">- some
+- test
+- text</pre></div>
+
+ <p>Note that it is assumed that all occurrences of the separator
+ is before a new item (except with <code class="inline-code">"r"</code> flag - see
+ later), thus:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list "some,,test,text,"?split(",") as x>
+- "${x}"
+</#list></pre></div>
+
+ <p>will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">- "some"
+- ""
+- "test"
+- "text"
+- ""</pre></div>
+
+ <p><code class="inline-code">split</code> accepts an optional <a href="#ref_builtin_string_flags">flags parameter</a>, as its
+ 2nd parameter. There's a historical glitch with the
+ <code class="inline-code">r</code> (regular expression) flag; it removes the empty
+ elements from the end of the resulting list, so with
+ <code class="inline-code">?split(",", "r")</code> in the last example the last
+ <code class="inline-code">""</code> would be missing from the output.</p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>To check if a strings ends with something and append it
+ otherwise, use <a href="#ref_builtin_ensure_ends_with">the
+ <code>ensure_ends_with</code> built-in</a>.</p>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_starts_with">starts_with</h2>
+
+
+
+
+ <p>Returns if this string starts with the specified substring.
+ For example <code class="inline-code">"redirect"?starts_with("red")</code> returns
+ boolean <code class="inline-code">true</code>. Also,
+ <code class="inline-code">"red"?starts_with("red")</code> will return
+ <code class="inline-code">true</code>.</p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>To check if a strings starts with something and prepend it
+ otherwise, use <a href="#ref_builtin_ensure_starts_with">the
+ <code>ensure_starts_with</code> built-in</a>.</p>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_string_for_string">string (when used with a string value)</h2>
+
+
+ <p>Does nothing, just returns the string as-is. The exception is
+ that if the value is a multi-type value (e.g. it is both string and
+ sequence at the same time), then the resulting value will be only a
+ simple string, not a multi-type value. This can be utilized to
+ prevent the artifacts of multi-typing.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_substring">substring (deprecated)</h2>
+
+
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is deprecated since FreeMarker 2.3.21 by <a href="dgui_template_exp.html#dgui_template_exp_stringop_slice">slicing
+ expressions</a>, like
+ <code class="inline-code"><em class="code-color">str</em>[<em class="code-color">from</em>..<<em class="code-color">toExclusive</em>]</code>,
+ <code class="inline-code"><em class="code-color">str</em>[<em class="code-color">from</em>..]</code>,
+ and
+ <code class="inline-code"><em class="code-color">str</em>[<em class="code-color">from</em>..*<em class="code-color">maxLength</em>]</code>.</p>
+
+ <p>A warning if you are processing XML: Since slicing
+ expressions work both for sequences and strings, and since XML
+ nodes are typically both sequences and strings at the same time,
+ there the equivalent expression is
+ <code class="inline-code"><em class="code-color">someXmlNode</em>?string[<em class="code-color">from</em>..<<em class="code-color">toExclusive</em>]</code>
+ and
+ <code class="inline-code"><em class="code-color">exp</em>?string[<em class="code-color">from</em>..]</code>,
+ as without <code class="inline-code">?string</code> it would slice the node
+ sequence instead of the text value of the node.</p>
+ </div>
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>Some of the typical use-cases of string slicing is covered
+ by convenient built-ins: <a href="#ref_builtin_remove_beginning"><code>remove_beginning</code></a>,
+ <a href="#ref_builtin_remove_ending"><code>remove_ending</code></a>,
+ <a href="#ref_builtin_keep_before"><code>keep_before</code></a>,
+ <a href="#ref_builtin_keep_after"><code>keep_after</code></a>,
+ <a href="#ref_builtin_keep_before_last"><code>keep_before_last</code></a>,
+ <a href="#ref_builtin_keep_after_last"><code>keep_after_last</code></a></p>
+ </div>
+
+
+ <p>Synopsis:
+ <code class="inline-code"><em class="code-color">exp</em>?substring(<em class="code-color">from</em>,
+ <em class="code-color">toExclusive</em>)</code>, also callable as
+ <code class="inline-code"><em class="code-color">exp</em>?substring(<em class="code-color">from</em>)</code></p>
+
+ <p>A substring of the string.
+ <code class="inline-code"><em class="code-color">from</em></code> is the index of
+ the first character. It must be a number that is at least 0 and less
+ than or equal with
+ <code class="inline-code"><em class="code-color">toExclusive</em></code>, or else
+ an error will abort the template processing. The
+ <code class="inline-code"><em class="code-color">toExclusive</em></code> is the
+ index of the character position after the last character of the
+ substring, or with other words, it is one greater than the index of
+ the last character. It must be a number that is at least 0 and less
+ than or equal to the length of the string, or else an error will
+ abort the template processing. If the
+ <code class="inline-code"><em class="code-color">toExclusive</em></code> is
+ omitted, then it defaults to the length of the string. If a
+ parameter is a number that is not an integer, only the integer part
+ of the number will be used.</p>
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">- ${'abc'?substring(0)}
+- ${'abc'?substring(1)}
+- ${'abc'?substring(2)}
+- ${'abc'?substring(3)}
+
+- ${'abc'?substring(0, 0)}
+- ${'abc'?substring(0, 1)}
+- ${'abc'?substring(0, 2)}
+- ${'abc'?substring(0, 3)}
+
+- ${'abc'?substring(0, 1)}
+- ${'abc'?substring(1, 2)}
+- ${'abc'?substring(2, 3)}</pre></div>
+
+ <p>The output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">- abc
+- bc
+- c
+-
+
+-
+- a
+- ab
+- abc
+
+- a
+- b
+- c</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_trim">trim</h2>
+
+
+
+
+ <p>The string without leading and trailing white-space.
+ Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">(${" green mouse "?trim})</pre></div>
+
+ <p>The output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">(green mouse)</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_uncap_first">uncap_first</h2>
+
+
+
+
+ <p>The opposite of <a href="#ref_builtin_cap_first"><code>cap_first</code></a>.
+ The string with the very first word of the string
+ un-capitalized.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_upper_case">upper_case</h2>
+
+
+
+
+ <p>The upper case version of the string. For example
+ <code class="inline-code">"GrEeN MoUsE"</code> will be <code class="inline-code">"GREEN
+ MOUSE"</code>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_url">url</h2>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.1. It
+ doesn't exist in 2.3.</p>
+ </div>
+
+
+ <p>The string after URL escaping. This means that all
+ non-US-ASCII and reserved URL characters will be escaped with
+ <code class="inline-code">%<em class="code-color">XX</em></code>. For
+ example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign x = 'a/b c'>
+${x?url}</pre></div>
+
+ <p>The output will be (assuming that the charset used for the
+ escaping is an US-ASCII compatible charset):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">a%2Fb%20c</pre></div>
+
+ <p>Note that it escapes <em>all</em> reserved URL
+ characters (<code class="inline-code">/</code>, <code class="inline-code">=</code>,
+ <code class="inline-code">&</code>, ...etc), so this encoding can be used for
+ encoding query parameter values, for example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><a href="foo.cgi?x=${x?url}&y=${y?url}">Click here...</a></pre></div>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>Above no HTML encoding (<code class="inline-code">?html</code>) was
+ needed, because URL escaping escapes all reserved HTML characters
+ anyway. But watch: always quote the attribute value, and always
+ with normal quotation mark (<code class="inline-code">"</code>), never with
+ apostrophe quotation mark (<code class="inline-code">'</code>), because
+ apostrophe quotation mark is not escaped by the URL
+ escaping.</p>
+ </div>
+
+
+ <p>To do URL escaping a <a href="gloss.html#gloss.charset">charset</a> must be chosen that will be
+ used for calculating the escaped parts
+ (<code class="inline-code">%<em class="code-color">XX</em></code>). If you are HTML
+ page author and you don't really understand this, don't worry: the
+ programmers should configure FreeMarker so that it uses the proper
+ charset by default (<span class="marked-for-programmers">programmers: see
+ more below...</span>). If you are a more technical minded user,
+ then you may want to know that the charset used is specified by the
+ <code class="inline-code">url_escaping_charset</code> setting, that can be set in
+ template execution time (or, preferably, earlier by the
+ programmers). For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#--
+ This will use the charset specified by the programmers
+ before the template execution has started.
+-->
+<a href="foo.cgi?x=${x?url}">foo</a>
+
+<#-- Use UTF-8 charset for URL escaping from now: -->
+<strong><#setting url_escaping_charset="UTF-8"></strong>
+
+<#-- This will surely use UTF-8 charset -->
+<a href="bar.cgi?x=${x?url}">bar</a></pre></div>
+
+ <p>Furthermore, you can explicitly specify a charset for a single
+ URL escaping as the parameter to the built-in:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><a href="foo.cgi?x=${x?url<strong>('ISO-8895-2')</strong>}">foo</a></pre></div>
+
+ <p><span class="marked-for-programmers">If the <code class="inline-code">url</code> built-in has no
+ parameter, then it will use the charset specified as the value of
+ the <code class="inline-code">url_escaping_charset</code> setting. This setting
+ should be set by the software that encloses FreeMarker (e.g. a Web
+ application framework), because it is not set
+ (<code class="inline-code">null</code>) by default. If it is not set, then
+ FreeMarker falls back using the value of the
+ <code class="inline-code">output_encoding</code> setting, which is also not set by
+ default, so it is again the task of the enclosing software. If the
+ <code class="inline-code">output_encoding</code> setting is not set either, then
+ the parameterless <code class="inline-code">url</code> built-in can't be executed,
+ and it will cause execution time error. Of course, the
+ <code class="inline-code">url</code> built-in with parameter always
+ works.</span></p>
+
+ <p><span class="marked-for-programmers">It's possible to set
+ <code class="inline-code">url_escaping_charset</code> in the template with the
+ <code class="inline-code">setting</code> directive, but it is bad practice, at
+ least in true MVC applications. The
+ <code class="inline-code">output_encoding</code> setting can't be set with the
+ <code class="inline-code">setting</code> directive, so that's surely the task of
+ the enclosing software. You may find more information regarding this
+ <a href="pgui_misc_charset.html">here...</a></span></p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_url_path">url_path</h2>
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.21.</p>
+ </div>
+
+
+ <p>This is the same as <a href="#ref_builtin_url">the
+ <code>url</code> built-in</a>, except that it doesn't
+ escape slash (<code class="inline-code">/</code>) characters. This meant to be
+ used for converting paths (like paths coming from the OS or some
+ content repository) that use slash (not backslash!) to a path the
+ can be inserted into an URL. The most common reason why this
+ conversion is needed is that folder names or file names might
+ contain non-US-ASCII letters ("national"
+ characters).</p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>Just like with <a href="#ref_builtin_url">the
+ <code>url</code> built-in</a>, the desired URL escaping
+ charset (or as a fall back, the output encoding) must be set in
+ the FreeMarker configuration settings, or else the built-in will
+ give error. Or, you you have to specify the charset like
+ <code class="inline-code">somePath?url_path('utf-8')</code>.</p>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_word_list">word_list</h2>
+
+
+
+
+ <p>A sequence that contains all words of the string in the order
+ as they appear in the string. Words are continual character
+ sequences that contain any character but <a href="gloss.html#gloss.whiteSpace">white-space</a>. Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign words = " a bcd, . 1-2-3"?word_list>
+<#list words as word>[${word}]</#list></pre></div>
+
+ <p>will output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">[a][bcd,][.][1-2-3]</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_xhtml">xhtml (deprecated)</h2>
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is <em>deprecated</em> by the
+ <a href="dgui_misc_autoescaping.html">auto-escaping
+ mechanism</a> introduced in 2.3.24. To prevent double escaping
+ and confusion in general, using this built-in on places where
+ auto-escaping is active is a <a href="gloss.html#gloss.parseTimeError">parse-time error</a>. To help
+ migration, this built-in silently bypasses HTML <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_movalues">markup output
+ values</a> without changing them.</p>
+ </div>
+
+
+
+
+
+
+ <p>The string as XHTML text. That is, the string with all:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code"><</code> replaced with
+ <code class="inline-code">&lt;</code>
+ </li>
+
+ <li>
+ <code class="inline-code">></code> replaced with
+ <code class="inline-code">&gt;</code>
+ </li>
+
+ <li>
+ <code class="inline-code">&</code> replaced with
+ <code class="inline-code">&amp;</code>
+ </li>
+
+ <li>
+ <code class="inline-code">"</code> replaced with
+ <code class="inline-code">&quot;</code>
+ </li>
+
+ <li>
+ <code class="inline-code">'</code> replaced with
+ <code class="inline-code">&#39;</code>
+ </li>
+ </ul>
+
+ <p>The only difference between this built-in and the
+ <code class="inline-code">xml</code> built-in is that the <code class="inline-code">xhtml</code>
+ built-in escapes <code class="inline-code">'</code> as
+ <code class="inline-code">&#39;</code> instead of as
+ <code class="inline-code">&apos;</code>, because some older browsers don't
+ know <code class="inline-code">&apos;</code>.</p>
+
+ <div class="callout warning">
+ <strong class="callout-label">Warning!</strong>
+
+ <p>When inserting the value of an attribute, always quote it,
+ or else it can be exploited by attacker! This is WRONG:
+ <code class="inline-code"><input name="user" value=${user?xhtml}/></code>.
+ These are good: <code class="inline-code"><input name="user"
+ value="${user?xhtml}"/></code>, <code class="inline-code"><input
+ name="user" value='${user?xhtml}'/></code>.</p>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_xml">xml (deprecated)</h2>
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is <em>deprecated</em> by the
+ <a href="dgui_misc_autoescaping.html">auto-escaping
+ mechanism</a> introduced in 2.3.24. To prevent double escaping
+ and confusion in general, using this built-in on places where
+ auto-escaping is active is a <a href="gloss.html#gloss.parseTimeError">parse-time error</a>. To help
+ migration, this built-in silently bypasses XML and HTML <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_movalues">markup output
+ values</a> without changing them.</p>
+ </div>
+
+
+
+
+
+
+ <p>The string as XML text. That is, the string with all:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code"><</code> replaced with
+ <code class="inline-code">&lt;</code>
+ </li>
+
+ <li>
+ <code class="inline-code">></code> replaced with
+ <code class="inline-code">&gt;</code>
+ </li>
+
+ <li>
+ <code class="inline-code">&</code> replaced with
+ <code class="inline-code">&amp;</code>
+ </li>
+
+ <li>
+ <code class="inline-code">"</code> replaced with
+ <code class="inline-code">&quot;</code>
+ </li>
+
+ <li>
+ <code class="inline-code">'</code> replaced with
+ <code class="inline-code">&apos;</code>
+ </li>
+ </ul>
+
+ <div class="callout warning">
+ <strong class="callout-label">Warning!</strong>
+
+ <p>When inserting the value of an attribute, always quote it,
+ or else it can be exploited by attackers! This is WRONG:
+ <code class="inline-code"><input name="user" value=${user?xml}/></code>.
+ These are good: <code class="inline-code"><input name="user"
+ value="${user?xml}"/></code>, <code class="inline-code"><input name="user"
+ value='${user?xml}'/></code>.</p>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_string_flags">Common flags</h2>
+
+
+ <p>Many string built-ins accept an optional string parameter, the
+ so called "flags". In this string, each letter
+ influences a certain aspect of the behavior of the built-in. For
+ example, letter <code class="inline-code">i</code> means that the built-in should
+ not differentiate the lower and upper-case variation of the same
+ letter. The order of the letters in the flags string is not
+ significant.</p>
+
+ <p>This is the complete list of letters (flags):</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">i</code>: Case insensitive: do not
+ differentiate the lower and upper-case variation of the same
+ letter.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">f</code>: First only. That is,
+ replace/find/etc. only the first occurrence of something.</p>
+ </li>
+
+ <li>
+ <p> <code class="inline-code">r</code>: The substring to find is a
+ <a href="gloss.html#gloss.regularExpression">regular
+ expression</a>. FreeMarker uses the variation of regular
+ expressions described at <a href="http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html">http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html</a>
+ (note that the presence of some pattern features depends on the
+ Java version used).</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">m</code>: Multi-line mode for regular
+ expressions. In multi-line mode the expressions
+ <code class="inline-code">^</code> and <code class="inline-code">$</code> match just after
+ or just before, respectively, a line terminator or the end of
+ the string. By default these expressions only match at the
+ beginning and the end of the entire string. Note that
+ <code class="inline-code">^</code> and <code class="inline-code">$</code> doesn't match the
+ line-break character itself.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">s</code>: Enables dot-all mode for regular
+ expressions (same as Perl singe-line mode). In dot-all mode, the
+ expression <code class="inline-code">.</code> matches any character, including
+ a line terminator. By default this expression does not match
+ line terminators.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">c</code>: Permits whitespace and comments in
+ regular expressions.</p>
+ </li>
+ </ul>
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign s = 'foo bAr baar'>
+${s?replace('ba', 'XY')}
+i: ${s?replace('ba', 'XY', 'i')}
+if: ${s?replace('ba', 'XY', 'if')}
+r: ${s?replace('ba*', 'XY', 'r')}
+ri: ${s?replace('ba*', 'XY', 'ri')}
+rif: ${s?replace('ba*', 'XY', 'rif')}</pre></div>
+
+ <p>This outputs this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">foo bAr XYar
+i: foo XYr XYar
+if: foo XYr baar
+r: foo XYAr XYr
+ri: foo XYr XYr
+rif: foo XYr baar</pre></div>
+
+ <p>This
<TRUNCATED>
[46/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/app_install.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/app_install.html b/builds/2.3.26-nightly/app_install.html
new file mode 100644
index 0000000..fba475f
--- /dev/null
+++ b/builds/2.3.26-nightly/app_install.html
@@ -0,0 +1,97 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-appendix">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Installing FreeMarker - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Installing FreeMarker">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/app_install.html">
+<link rel="canonical" href="http://freemarker.org/docs/app_install.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_install.html"><span itemprop="name">Installing FreeMarker</span></a></li></ul><div class="bookmarks" title=
"Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Installing FreeMarker"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_0RC1.html"><span>Previous</span></a><a class="paging-arrow next" href="app_legal.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-chapter" id="app_install" itemprop="headline">Installing FreeMarker</h1>
+</div></div><p>No real installation is needed. Simply ensure that
+ <code class="inline-code">freemarker.jar</code> is somewhere where your Java
+ application's class-loader will find it. In web application this usually
+ means putting <code class="inline-code">freemarker.jar</code> into the
+ <code class="inline-code">WEB-INF/lib</code> directory of your web application. (If
+ you want to use FreeMarker with JSP Model-2 style (which also means that
+ you can use custom JSP taglibs in the templates), some extra steps
+ needed. For more information please see <a href="pgui_misc_servlet.html">the chapter about servlets</a>.)</p><p>FreeMarker has no required dependencies. But to use certain
+ <em>optional</em> FreeMarker features, the related party
+ libraries have to be available for the class-loader:</p><ul>
+ <li>
+ <p>Jaxen (recommended, <a href="http://jaxen.org/">download here</a>) or Apache Xalan
+ is needed for XML XPath support. Please use at least Jaxen
+ 1.1-beta-8, not older versions! Apache Xalan classes are included in
+ a package-relocated form in Sun/Oracle J2SE 1.4-1.8 (maybe later
+ too), and FreeMarker will use those if it doesn't find Jaxen or
+ Xalan elsewhere. But as Oracle can change these internal packages
+ anytime, it's still recommended to use an external Jaxen or
+ Xalan.</p>
+ </li>
+
+ <li>
+ <p>Obviously, <code class="inline-code">javax.servlet</code> classes are needed
+ for <code class="inline-code">FreemarkerServlet</code>. Servlet version 2.2 or
+ later is needed.</p>
+ </li>
+
+ <li>
+ <p>For the custom JSP taglib support, you will need JSP 2.0 API
+ or later avilable. No JSP implementation is needed, just the API.
+ This is already present in pretty much every servlet container. For
+ more information please see <a href="pgui_misc_servlet.html">the
+ chapter about servlets</a>.</p>
+ </li>
+
+ <li>
+ <p>Jython 2.0 or later classes are needed for the Jython
+ wrapper.</p>
+ </li>
+
+ <li>
+ <p>Pre-1.0 JDOM is needed for the long deprecated
+ <code class="inline-code">freemarker.ext.jdom</code> package. (When it was
+ created, there was no JDOM 1.0 yet.)</p>
+ </li>
+ </ul><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_0RC1.html"><span>Previous</span></a><a class="paging-arrow next" href="app_legal.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/app_legal.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/app_legal.html b/builds/2.3.26-nightly/app_legal.html
new file mode 100644
index 0000000..575d8ed
--- /dev/null
+++ b/builds/2.3.26-nightly/app_legal.html
@@ -0,0 +1,54 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-appendix">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Legal - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Legal">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/app_legal.html">
+<link rel="canonical" href="http://freemarker.org/docs/app_legal.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_legal.html"><span itemprop="name">Legal</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span
class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Legal"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="app_install.html"><span>Previous</span></a><a class="paging-arrow next" href="app_license.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-chapter" id="app_legal" itemprop="headline">Legal</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Section Contents</div>
+<ul><li><a class="page-menu-link" href="app_license.html" data-menu-target="app_license">License</a></li><li><a class="page-menu-link" href="app_eccn.html" data-menu-target="app_eccn">Export Control</a></li></ul> </div><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="app_install.html"><span>Previous</span></a><a class="paging-arrow next" href="app_license.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/app_license.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/app_license.html b/builds/2.3.26-nightly/app_license.html
new file mode 100644
index 0000000..9c16de6
--- /dev/null
+++ b/builds/2.3.26-nightly/app_license.html
@@ -0,0 +1,275 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>License - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="License">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/app_license.html">
+<link rel="canonical" href="http://freemarker.org/docs/app_license.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_legal.html"><span itemprop="name">Legal</span></a></li><li class="step-3" itemprop="itemListElement" itemsc
ope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_license.html"><span itemprop="name">License</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Legal","License"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="app_legal.html"><span>Previous</span></a><a class="paging-arrow next" href="app_eccn.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="app_license" itemprop="headline">License</h1>
+</div></div>
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed 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.
+
+==============================================================================
+END LICENSE
+
+
+Historical notes
+----------------
+
+FreeMarker 1.x was released under the LGPL license. Later, by
+community consensus, we have switched over to a BSD-style license. As
+of FreeMarker 2.2pre1, the original author, Benjamin Geer, has
+relinquished the copyright in behalf of Visigoth Software Society.
+
+With FreeMarker 2.3.21 the license has changed to Apache License,
+Version 2.0, and the owner has changed from Visigoth Software Society
+to three of the FreeMarker 2.x developers, Attila Szegedi, Daniel
+Dekany, and Jonathan Revusky.
+
+After FreeMarker 2.3.24-pre01 (2015-09-02), the owner changes to the
+Apache Software Foundation.</pre></div><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="app_legal.html"><span>Previous</span></a><a class="paging-arrow next" href="app_eccn.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/app_versions.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/app_versions.html b/builds/2.3.26-nightly/app_versions.html
new file mode 100644
index 0000000..68af610
--- /dev/null
+++ b/builds/2.3.26-nightly/app_versions.html
@@ -0,0 +1,54 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-appendix">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Version history - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Version history">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/app_versions.html">
+<link rel="canonical" href="http://freemarker.org/docs/app_versions.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li></ul><div class="bookmarks" title="Book
marks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="app_faq.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_26.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-chapter" id="app_versions" itemprop="headline">Version history</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Section Contents</div>
+<ul><li><a class="page-menu-link" href="versions_2_3_26.html" data-menu-target="versions_2_3_26">2.3.26 (incubating at Apache)</a></li><li><a class="page-menu-link" href="versions_2_3_25.html" data-menu-target="versions_2_3_25">2.3.25 (incubating at Apache)</a></li><li><a class="page-menu-link" href="versions_2_3_24.html" data-menu-target="versions_2_3_24">2.3.24 (incubating at Apache)</a></li><li><a class="page-menu-link" href="versions_2_3_23.html" data-menu-target="versions_2_3_23">2.3.23</a></li><li><a class="page-menu-link" href="versions_2_3_22.html" data-menu-target="versions_2_3_22">2.3.22</a></li><li><a class="page-menu-link" href="versions_2_3_21.html" data-menu-target="versions_2_3_21">2.3.21</a></li><li><a class="page-menu-link" href="versions_2_3_20.html" data-menu-target="versions_2_3_20">2.3.20</a></li><li><a class="page-menu-link" href="versions_2_3_19.html" data-menu-target="versions_2_3_19">2.3.19</a></li><li><a class="page-menu-link" href="versions_2_3_18.html" da
ta-menu-target="versions_2_3_18">2.3.18</a></li><li><a class="page-menu-link" href="versions_2_3_17.html" data-menu-target="versions_2_3_17">2.3.17</a></li><li><a class="page-menu-link" href="versions_2_3_16.html" data-menu-target="versions_2_3_16">2.3.16</a></li><li><a class="page-menu-link" href="versions_2_3_15.html" data-menu-target="versions_2_3_15">2.3.15</a></li><li><a class="page-menu-link" href="versions_2_3_14.html" data-menu-target="versions_2_3_14">2.3.14</a></li><li><a class="page-menu-link" href="versions_2_3_13.html" data-menu-target="versions_2_3_13">2.3.13</a></li><li><a class="page-menu-link" href="versions_2_3_12.html" data-menu-target="versions_2_3_12">2.3.12</a></li><li><a class="page-menu-link" href="versions_2_3_11.html" data-menu-target="versions_2_3_11">2.3.11</a></li><li><a class="page-menu-link" href="versions_2_3_10.html" data-menu-target="versions_2_3_10">2.3.10</a></li><li><a class="page-menu-link" href="versions_2_3_9.html" data-menu-target="versions_2
_3_9">2.3.9</a></li><li><a class="page-menu-link" href="versions_2_3_8.html" data-menu-target="versions_2_3_8">2.3.8</a></li><li><a class="page-menu-link" href="versions_2_3_7.html" data-menu-target="versions_2_3_7">2.3.7</a></li><li><a class="page-menu-link" href="versions_2_3_7rc1.html" data-menu-target="versions_2_3_7rc1">2.3.7 RC1</a></li><li><a class="page-menu-link" href="versions_2_3_6.html" data-menu-target="versions_2_3_6">2.3.6</a></li><li><a class="page-menu-link" href="versions_2_3_5.html" data-menu-target="versions_2_3_5">2.3.5</a></li><li><a class="page-menu-link" href="versions_2_3_4.html" data-menu-target="versions_2_3_4">2.3.4</a></li><li><a class="page-menu-link" href="versions_2_3_3.html" data-menu-target="versions_2_3_3">2.3.3</a></li><li><a class="page-menu-link" href="versions_2_3_2.html" data-menu-target="versions_2_3_2">2.3.2</a></li><li><a class="page-menu-link" href="versions_2_3_1.html" data-menu-target="versions_2_3_1">2.3.1</a></li><li><a class="page-men
u-link" href="versions_2_3.html" data-menu-target="versions_2_3">2.3</a></li><li><a class="page-menu-link" href="versions_2_2_8.html" data-menu-target="versions_2_2_8">2.2.8</a></li><li><a class="page-menu-link" href="versions_2_2_7.html" data-menu-target="versions_2_2_7">2.2.7</a></li><li><a class="page-menu-link" href="versions_2_2_6.html" data-menu-target="versions_2_2_6">2.2.6</a></li><li><a class="page-menu-link" href="versions_2_2_5.html" data-menu-target="versions_2_2_5">2.2.5</a></li><li><a class="page-menu-link" href="versions_2_2_4.html" data-menu-target="versions_2_2_4">2.2.4</a></li><li><a class="page-menu-link" href="versions_2_2_3.html" data-menu-target="versions_2_2_3">2.2.3</a></li><li><a class="page-menu-link" href="versions_2_2_2.html" data-menu-target="versions_2_2_2">2.2.2</a></li><li><a class="page-menu-link" href="versions_2_2_1.html" data-menu-target="versions_2_2_1">2.2.1</a></li><li><a class="page-menu-link" href="versions_2_2.html" data-menu-target="version
s_2_2">2.2</a></li><li><a class="page-menu-link" href="versions_2_1_5.html" data-menu-target="versions_2_1_5">2.1.5</a></li><li><a class="page-menu-link" href="versions_2_1_4.html" data-menu-target="versions_2_1_4">2.1.4</a></li><li><a class="page-menu-link" href="versions_2_1_3.html" data-menu-target="versions_2_1_3">2.1.3</a></li><li><a class="page-menu-link" href="versions_2_1_2.html" data-menu-target="versions_2_1_2">2.1.2</a></li><li><a class="page-menu-link" href="versions_2_1_1.html" data-menu-target="versions_2_1_1">2.1.1</a></li><li><a class="page-menu-link" href="versions_2_1.html" data-menu-target="versions_2_1">2.1</a></li><li><a class="page-menu-link" href="versions_2_01.html" data-menu-target="versions_2_01">2.01</a></li><li><a class="page-menu-link" href="versions_2_0.html" data-menu-target="versions_2_0">2.0</a></li><li><a class="page-menu-link" href="versions_2_0RC3.html" data-menu-target="versions_2_0RC3">2.0 RC3</a></li><li><a class="page-menu-link" href="versions
_2_0RC2.html" data-menu-target="versions_2_0RC2">2.0 RC2</a></li><li><a class="page-menu-link" href="versions_2_0RC1.html" data-menu-target="versions_2_0RC1">2.0 RC1</a></li></ul> </div><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="app_faq.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_26.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[19/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_setting.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_setting.html b/builds/2.3.26-nightly/ref_directive_setting.html
new file mode 100644
index 0000000..85971e2
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_setting.html
@@ -0,0 +1,478 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>setting - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="setting">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_setting.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_setting.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_setting.html"><span itemprop="name">setting</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","setting"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_outputformat.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_stop.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_setting" itemprop="headline">setting</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_124" data-menu-target="autoid_124">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_125" data-menu-target="autoid_125">Description</a></li></ul> </div><a name="ref.directive.setting"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_124">Synopsis</h2>
+
+
+
+<pre class="metaTemplate">
+<code class="inline-code"><#setting <em class="code-color">name</em>=<em class="code-color">value</em>></code>
+</pre>
+
+
+ <p>Where:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code"><em class="code-color">name</em></code>: name
+ of the setting. It is not expression!
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">value</em></code>: New
+ value of the setting. Expression
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_125">Description</h2>
+
+
+ <p>Sets a setting for the further part of processing. Settings
+ are values that influence the behavior of FreeMarker. The new value
+ will be present only in the template processing where it was set,
+ and does not touch the template itself. The initial value of
+ settings is set by the programmer <span class="marked-for-programmers">(see: <a href="pgui_config_settings.html">Programmer's Guide/The Configuration/Settings</a>)</span>.</p>
+
+ <p>The supported settings are:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">locale</code>: The locale (language)
+ of the output. It can influence the presentation format of
+ numbers, dates, etc. The value is a string which consist of a
+ language code (lowercase two-letter ISO-639 code) plus optional
+ county code (uppercase two-letter ISO-3166 code) separated from
+ the language code with underscore, and if we have specified the
+ country then an optional variant code (not standardized)
+ separated from the country with underscore. Examples of valid
+ values: <code class="inline-code">en</code>, <code class="inline-code">en_US</code>,
+ <code class="inline-code">en_US_MAC</code>. FreeMarker will try to use the
+ most specific available locale, so if you specify
+ <code class="inline-code">en_US_MAC</code> but that is not known, then it will
+ try <code class="inline-code">en_US</code>, and then <code class="inline-code">en</code>,
+ and then the default locale of the computer (which is may set by
+ the programmer).</p>
+ </li>
+
+ <li>
+ <p><a name="ref.setting.number_format"></a><code class="inline-code">number_format</code>: The number
+ format that is used to convert numbers to strings when no
+ explicit format is specified. Can be one of the
+ following:</p>
+
+ <ul>
+ <li>
+ <p>Predefined values defined by the Java platform:
+ <code class="inline-code">number</code> (the default),
+ <code class="inline-code">currency</code>, or
+ <code class="inline-code">percent</code></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">computer</code>, which formats like <a href="ref_builtins_number.html#ref_builtin_c">the <code>c</code>
+ built-in</a></p>
+ </li>
+
+ <li>
+ <p>Format pattern written in <a href="http://java.sun.com/j2se/1.4/docs/api/java/text/DecimalFormat.html">Java
+ decimal number format syntax</a>, for example
+ <code class="inline-code">0.###</code>. FreeMarker <a href="ref_builtins_number.html#topic.extendedJavaDecimalFormat">extends this
+ format</a> to allow specifying rounding mode, symbols
+ used, etc.</p>
+ </li>
+
+ <li>
+ <p>Values starting with <code class="inline-code">@</code> that's also
+ followed by a letter, refer to a <a href="pgui_config_custom_formats.html">custom format</a>.
+ For example, <code class="inline-code">"@price"</code> refers to the
+ custom format registered with the <code class="inline-code">"price"</code>
+ name. The custom format name is possibly followed by space
+ or <code class="inline-code">_</code> and then format parameters, whose
+ interpretation depends on the custom format. For backward
+ compatibility, the initial <code class="inline-code">@</code> only has
+ this new meaning if either <a href="pgui_config_incompatible_improvements.html#pgui_config_incompatible_improvements_how_to_set">the
+ <code>incompatible_improvements</code> setting</a>
+ is at least 2.3.24, or there's any custom formats defined.
+ When the initial <code class="inline-code">@</code> isn't followed by a
+ letter (any UNICODE letter), it's never treated as a
+ reference to a custom format.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p><code class="inline-code">boolean_format</code>: The
+ comma-separated pair of strings for representing true and false
+ values respectively that is used to convert booleans to strings
+ when no explicit format is specified (like in
+ <code class="inline-code">${<em class="code-color">booleanValue</em>}</code>).
+ Note that currently white space isn't removed from this string,
+ so don't put space after the comma. Default value is
+ <code class="inline-code">"true,false"</code>, but FreeMarker will deny using
+ that particular value for
+ <code class="inline-code">${<em class="code-color">booleanValue</em>}</code>,
+ and requires using
+ <code class="inline-code">${<em class="code-color">booleanValue</em>?c}</code>
+ instead (this works since 2.3.21). For any other value, like
+ <code class="inline-code">"Y,N"</code>,
+ <code class="inline-code">${<em class="code-color">booleanValue</em>}</code>
+ will work. See also:<a href="ref_builtins_boolean.html#ref_builtin_string_for_boolean"><code>string</code>
+ built-in</a>.</p>
+ </li>
+
+ <li>
+ <p><a name="topic.dateTimeFormatSettings"></a><a name="topic_date_format_settings"></a> <code class="inline-code">date_format</code>,
+ <code class="inline-code">time_format</code>,
+ <code class="inline-code">datetime_format</code>: The format used to convert
+ date/time/date-time values (Java
+ <code class="inline-code">java.util.Date</code>-s and its subclasses) to
+ strings when no explicit format is specified via the <a href="ref_builtins_date.html#ref_builtin_string_for_date"><code>string</code>
+ built-in</a> (or otherwise), as in the case of
+ <code class="inline-code">${someDate}</code>. The
+ <code class="inline-code">date_format</code> setting only effects the
+ formatting of date values that store no time part,
+ <code class="inline-code">time_format</code> only effects the formatting of
+ times that store no date part, and
+ <code class="inline-code">datetime_format</code> only effects formatting of
+ date-time values. These settings also effects what format do
+ <a href="ref_builtins_string.html#ref_builtin_string_date"><code>?time</code>,
+ <code>?date</code>, and
+ <code>?datetime</code></a> expect when it's applied on
+ a string value.</p>
+
+ <p>The possible setting values are (the quotation marks
+ aren't part of the value itself):</p>
+
+ <ul>
+ <li>
+ <p>Patterns <a href="http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html">accepted
+ by Java's <code>SimpleDateFormat</code></a>, for
+ example <code class="inline-code">"dd.MM.yyyy HH:mm:ss"</code> (where
+ <code class="inline-code">"HH"</code> means 0-23 hours) or
+ <code class="inline-code">"MM/dd/yyyy hh:mm:ss a"</code> (where
+ <code class="inline-code">"a"</code> prints AM or PM, if the current
+ language is English).</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">"xs"</code> for XML Schema format, or
+ <code class="inline-code">"iso"</code> for ISO 8601:2004 format. These
+ formats allow various additional options, separated with
+ space, like in <code class="inline-code">"iso m nz"</code> (or with
+ <code class="inline-code">_</code>, like in <code class="inline-code">"iso_m_nz"</code>;
+ this is useful in a case like
+ <code class="inline-code">lastModified?string.iso_m_nz</code>). The
+ options and their meanings are:</p>
+
+ <ul>
+ <li>
+ <p>Accuracy options:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code">ms</code>: Milliseconds, always
+ shown with all 3 digits, even if it's all 0-s.
+ Example: <code class="inline-code">13:45:05.800</code>
+ </li>
+
+ <li>
+ <code class="inline-code">s</code>: Seconds (fraction
+ seconds are dropped even if non-0), like
+ <code class="inline-code">13:45:05</code>
+ </li>
+
+ <li>
+ <code class="inline-code">m</code>: Minutes, like
+ <code class="inline-code">13:45</code>. This isn't allowed for
+ <code class="inline-code">"xs"</code>.
+ </li>
+
+ <li>
+ <code class="inline-code">h</code>: Hours, like
+ <code class="inline-code">13</code>. This isn't allowed for
+ <code class="inline-code">"xs"</code>.
+ </li>
+
+ <li>
+ Neither: Up to millisecond accuracy, but
+ trailing millisecond 0-s are removed, also the whole
+ milliseconds part if it would be 0 otherwise.
+ Example: <code class="inline-code">13:45:05.8</code>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Time zone offset visibility options:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code">fz</code>: "Force
+ Zone", always show time zone offset (even for
+ for <code class="inline-code">java.sql.Date</code> and
+ <code class="inline-code">java.sql.Time</code> values). But,
+ because ISO 8601 doesn't allow for dates (means date
+ without time of the day) to show the zone offset,
+ this option will have no effect in the case of
+ <code class="inline-code">"iso"</code> with dates.
+ </li>
+
+ <li>
+ <code class="inline-code">nz</code>: "No Zone",
+ never show time zone offset
+ </li>
+
+ <li>
+ Neither: Always show time zone offset, except
+ for <code class="inline-code">java.sql.Date</code> and
+ <code class="inline-code">java.sql.Time</code>, and for
+ <code class="inline-code">"iso"</code> date values.
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Time zone options:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code">u</code>: Use UTC instead of what
+ the <code class="inline-code">time_zone</code> setting suggests.
+ However, <code class="inline-code">java.sql.Date</code> and
+ <code class="inline-code">java.sql.Time</code> aren't affected by
+ this (see
+ <code class="inline-code">sql_date_and_time_time_zone</code> to
+ understand why)
+ </li>
+
+ <li>
+ <code class="inline-code">fu</code>: "Force
+ UTC", that is, use UTC instead of what the
+ <code class="inline-code">time_zone</code> or the
+ <code class="inline-code">sql_date_and_time_time_zone</code>
+ setting suggests. This also effects
+ <code class="inline-code">java.sql.Date</code> and
+ <code class="inline-code">java.sql.Time</code> values
+ </li>
+
+ <li>
+ Neither: Use the time zone suggested by the
+ <code class="inline-code">time_zone</code> or the
+ <code class="inline-code">sql_date_and_time_time_zone</code>
+ configuration setting
+ </li>
+ </ul>
+ </li>
+ </ul>
+
+ <p>Options from the same category are mutually exclusive,
+ like using <code class="inline-code">m</code> and <code class="inline-code">s</code>
+ together is an error.</p>
+
+ <p>The options can be specified in any order.</p>
+
+ <p>The accuracy and time zone offset visibility options
+ don't influence parsing, only formatting. For example, even
+ if you use <code class="inline-code">"iso m nz"</code>,
+ <code class="inline-code">"2012-01-01T15:30:05.125+01"</code> will be
+ parsed successfully and with milliseconds accuracy. The time
+ zone options (like <code class="inline-code">"u"</code>) influence what
+ time zone is chosen only when parsing a string that doesn't
+ contain time zone offset.</p>
+
+ <p>Parsing with <code class="inline-code">"iso"</code> understands both
+ "extend format" and "basic
+ format", like <code class="inline-code">20141225T235018</code>. It
+ doesn't, however, support the parsing of all kind of ISO
+ 8601 strings: if there's a date part, it must use year,
+ month and day of the month values (not week of the year),
+ and the day can't be omitted.</p>
+
+ <p>The output of <code class="inline-code">"iso"</code> is deliberately
+ so that it's also a good representation of the value with
+ XML Schema format, except for 0 and negative years, where
+ it's impossible. Also note that the time zone offset is
+ omitted for date values in the <code class="inline-code">"iso"</code>
+ format, while it's preserved for the <code class="inline-code">"xs"</code>
+ format.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">"short"</code>,
+ <code class="inline-code">"medium"</code>, <code class="inline-code">"long"</code>, or
+ <code class="inline-code">"full"</code>, which has locale-dependent
+ meaning defined by the Java platform (see in the <a href="http://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html">documentation
+ of <code>java.text.DateFormat</code></a>). For
+ date-time values, you can specify the length of the date and
+ time part independently, be separating them with
+ <code class="inline-code">_</code>, like
+ <code class="inline-code">"short_medium"</code>.
+ (<code class="inline-code">"medium"</code> means
+ <code class="inline-code">"medium_medium"</code> for date-time
+ values.)</p>
+ </li>
+
+ <li>
+ <p>Values starting with <code class="inline-code">@</code> that's also
+ followed by a letter, refer to a <a href="pgui_config_custom_formats.html">custom format</a>,
+ like <code class="inline-code">"@worklog"</code> refers to the custom
+ format registered with the <code class="inline-code">"worklog"</code>
+ name. The format name is possibly followed by space or
+ <code class="inline-code">_</code> and then format parameters, whose
+ interpretation depends on the custom format. For backward
+ compatibility, the initial <code class="inline-code">@</code> only has
+ this new meaning if either <a href="pgui_config_incompatible_improvements.html#pgui_config_incompatible_improvements_how_to_set">the
+ <code>incompatible_improvements</code> setting</a>
+ is at least 2.3.24, or there's any custom formats defined.
+ When the initial <code class="inline-code">@</code> isn't followed by a
+ letter (any UNICODE letter), it's never treated as a
+ reference to a custom format.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p><code class="inline-code">time_zone</code>: The name of the time
+ zone used to format times for display. By default, the default
+ time zone of the JVM is used. Can be any value that is accepted
+ by <a href="http://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html">Java
+ TimeZone API</a>, or <code class="inline-code">"JVM default"</code> (since
+ FreeMarker 2.3.21) to use the JVM default time zone. Examples:
+ <code class="inline-code">"GMT"</code>, <code class="inline-code">"GMT+2"</code>,
+ <code class="inline-code">"GMT-1:30"</code>, <code class="inline-code">"CET"</code>,
+ <code class="inline-code">"PST"</code>,
+ <code class="inline-code">"America/Los_Angeles"</code>.</p>
+
+ <div class="callout warning">
+ <strong class="callout-label">Warning!</strong>
+
+ <p>If you change this setting from its default value, you
+ should certainly also set
+ <code class="inline-code">sql_date_and_time_time_zone</code> to "JVM
+ default". <span class="marked-for-programmers">See more in the Java
+ API documentation of
+ <code class="inline-code">Configurable.setSQLDateAndTimeTimeZone(TimeZone)</code>.</span></p>
+ </div>
+
+ </li>
+
+ <li>
+ <p><code class="inline-code">sql_date_and_time_time_zone</code>
+ (since FreeMarker 2.3.21): This handles a highly technical
+ issue, so it should usually be set from the Java code by the
+ programmers. <span class="marked-for-programmers">For programmers: If
+ this is set to non-<code class="inline-code">null</code>, for date-only and
+ time-only values coming from SQL database (more precisely, for
+ <code class="inline-code">java.sql.Date</code> and
+ <code class="inline-code">java.sql.Time</code> objects) FreeMarker will use
+ this time zone instead of the time zone specified by the
+ <code class="inline-code">time_zone</code> FreeMarker setting. See more in the
+ Java API documentation of
+ <code class="inline-code">Configurable.setSQLDateAndTimeTimeZone(TimeZone)</code>.</span></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">url_escaping_charset</code>: The
+ charset used for URL escaping (e.g. for
+ <code class="inline-code">${foo?url}</code>) to calculate the escaped
+ (<code class="inline-code">%<em class="code-color">XX</em></code>) parts.
+ Usually the framework that encloses FreeMarker should set it, so
+ you hardly ever should set this setting in templates. <span class="marked-for-programmers">(Programmers can read more about this
+ <a href="pgui_misc_charset.html">here...</a>)</span></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">output_encoding</code>: Tells
+ FreeMarker what the charset of the output is. As FreeMarker
+ outputs a stream of UNICODE characters (<span class="marked-for-programmers">it writes into a
+ <code class="inline-code">java.io.Writer</code></span>), it's not affected
+ by the output encoding, but some macros/functions and built-ins
+ may want to used this information.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">classic_compatible</code>: This is for
+ experts. Its value should be a boolean. See the documentation of
+ <code class="inline-code">freemarker.template.Configurable</code> for more
+ information.</p>
+ </li>
+ </ul>
+
+ <p>Example: Assume that the initial locale of template is
+ <code class="inline-code">de_DE</code> (German). Then this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${1.2}
+<#setting locale="en_US">
+${1.2}</pre></div>
+
+ <p>will output this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">1,2
+1.2</pre></div>
+
+ <p>because German people use the comma as their decimal
+ separator, while US people use the dot.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_outputformat.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_stop.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_stop.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_stop.html b/builds/2.3.26-nightly/ref_directive_stop.html
new file mode 100644
index 0000000..6898671
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_stop.html
@@ -0,0 +1,96 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>stop - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="stop">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_stop.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_stop.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_stop.html"><span itemprop="name">stop</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","stop"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_setting.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_switch.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_stop" itemprop="headline">stop</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_126" data-menu-target="autoid_126">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_127" data-menu-target="autoid_127">Description</a></li></ul> </div><a name="ref.directive.stop"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_126">Synopsis</h2>
+
+
+
+<pre class="metaTemplate"><code class="inline-code"><#stop></code>
+or
+<code class="inline-code"><#stop <em class="code-color">reason</em>></code>
+</pre>
+
+
+ <p>Where:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code"><em class="code-color">reason</em></code>:
+ Informative message that describes the reason of the terminating
+ error. Expression, must evaluate to a string.
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_127">Description</h2>
+
+
+ <p>Aborts template processing with the given (optional) error
+ message. <em>This must not be used for ending template
+ processing in normal situations!</em> The caller of the
+ FreeMarker template will see this as a failed template rendering,
+ not as a normally finished one.</p>
+
+ <p><span class="marked-for-programmers">This directive throws a
+ <code class="inline-code">StopException</code>, and the
+ <code class="inline-code">StopException</code> will hold the value of the reason
+ parameter.</span></p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_setting.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_switch.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_switch.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_switch.html b/builds/2.3.26-nightly/ref_directive_switch.html
new file mode 100644
index 0000000..9f4f1b3
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_switch.html
@@ -0,0 +1,162 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>switch, case, default, break - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="switch, case, default, break">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_switch.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_switch.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_switch.html"><span itemprop="name">switch, case, default, break</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","switch, case, default, break"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_stop.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_t.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_switch" itemprop="headline">switch, case, default, break</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_128" data-menu-target="autoid_128">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_129" data-menu-target="autoid_129">Description</a></li></ul> </div><a name="ref.directive.switch"></a><a name="ref.directive.case"></a><a name="ref.directive.default"></a><a name="ref.directive.switch.break"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_128">Synopsis</h2>
+
+
+
+<pre class="metaTemplate">
+<code class="inline-code"><#switch <em class="code-color">value</em>>
+ <#case <em class="code-color">refValue1</em>>
+ <em class="code-color">...</em>
+ <#break>
+ <#case <em class="code-color">refValue2</em>>
+ <em class="code-color">...</em>
+ <#break>
+ <em class="code-color">...</em>
+ <#case <em class="code-color">refValueN</em>>
+ <em class="code-color">...</em>
+ <#break>
+ <#default>
+ <em class="code-color">...</em>
+</#switch>
+</code>
+</pre>
+
+
+ <p>Where:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code"><em class="code-color">value</em></code>,
+ <code class="inline-code"><em class="code-color">refValue1</em></code>, etc.:
+ Expressions evaluates to scalars of the same type.
+ </li>
+ </ul>
+
+ <p>The <code class="inline-code">break</code>-s and <code class="inline-code">default</code>
+ are optional.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_129">Description</h2>
+
+
+ <p>The usage of this directive is not recommended, as it's
+ error-prone because of the fall-through behavior. Use <a href="ref_directive_if.html#ref.directive.elseif"><code>elseif</code></a>-s
+ instead unless you want to exploit the fall-through behavior.</p>
+
+ <p>Switch is used to choose a fragment of template depending on
+ the value of an expression:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#switch animal.size>
+ <#case "small">
+ This will be processed if it is small
+ <#break>
+ <#case "medium">
+ This will be processed if it is medium
+ <#break>
+ <#case "large">
+ This will be processed if it is large
+ <#break>
+ <#default>
+ This will be processed if it is neither
+</#switch></pre></div>
+
+ <p>Inside the <code class="inline-code">switch</code> must be one or more
+ <code class="inline-code"><#case <em class="code-color">value</em>></code>,
+ and after all such <code class="inline-code">case</code> tags optionally one
+ <code class="inline-code"><#default></code>. When FM reaches the
+ <code class="inline-code">switch</code> directive, it chooses a
+ <code class="inline-code">case</code> directive where
+ <code class="inline-code"><em class="code-color">refValue</em></code> equals with
+ <code class="inline-code"><em class="code-color">value</em></code> and continues
+ the processing of the template there. If there is no
+ <code class="inline-code">case</code> directive with appropriate value then it
+ continues processing at the <code class="inline-code">default</code> directive if
+ that exists, otherwise it continues the processing after the end-tag
+ of <code class="inline-code">switch</code>. And now comes the confusing thing:
+ when it has chosen a <code class="inline-code">case</code> directive, it will
+ continue the processing there, and will go ahead until it reaches a
+ <code class="inline-code">break</code> directive. That is, it will not
+ automatically leave the <code class="inline-code">switch</code> directive when it
+ reaches another <code class="inline-code">case</code> directive or the
+ <code class="inline-code"><#default></code> tag. Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#switch x>
+ <#case 1>
+ 1
+ <#case 2>
+ 2
+ <#default>
+ d
+</#switch></pre></div>
+
+ <p>If <code class="inline-code">x</code> is 1, then it will print 1 2 d; if
+ <code class="inline-code">x</code> is 2 then it will print 2 d; if
+ <code class="inline-code">x</code> is 3 then it will print d. This is the
+ mentioned fall-through behavior. The <code class="inline-code">break</code> tag
+ instructs FM to immediately skip past the <code class="inline-code">switch</code>
+ end-tag.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_stop.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_t.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_t.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_t.html b/builds/2.3.26-nightly/ref_directive_t.html
new file mode 100644
index 0000000..4ffd393
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_t.html
@@ -0,0 +1,149 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>t, lt, rt - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="t, lt, rt">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_t.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_t.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_t.html"><span itemprop="name">t, lt, rt</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","t, lt, rt"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_switch.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_userDefined.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_t" itemprop="headline">t, lt, rt</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_130" data-menu-target="autoid_130">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_131" data-menu-target="autoid_131">Description</a></li></ul> </div><a name="ref.directive.t"></a><a name="ref.directive.lt"></a><a name="ref.directive.rt"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_130">Synopsis</h2>
+
+
+
+<pre class="metaTemplate">
+<code class="inline-code"><#t></code>
+
+<code class="inline-code"><#lt></code>
+
+<code class="inline-code"><#rt></code></pre>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_131">Description</h2>
+
+
+ <p>These directives, instruct FreeMarker to ignore certain
+ white-space in the line of the tag:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">t</code> (for trim): Ignore all leading and
+ trailing white-space in this line.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">lt</code> (for left trim): Ignore all leading
+ white-space in this line.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">rt</code> (for right trim): Ignore all
+ trailing white-space in this line.</p>
+ </li>
+ </ul>
+
+ <p>where:</p>
+
+ <ul>
+ <li>
+ <p>"leading white-space" means all space and tab
+ (and other character that are white-space according to <a href="gloss.html#gloss.unicode">UNICODE</a>, except <a href="gloss.html#gloss.lineBreak">line breaks</a>) before the first
+ non-white-space character of the line.</p>
+ </li>
+
+ <li>
+ <p>"trailing white-space" means all space and
+ tab (and other character that are white-space according to <a href="gloss.html#gloss.unicode">UNICODE</a>, except line breaks)
+ after the last non-white-space character of the line,
+ <em>and</em> the line break at the end of the
+ line.</p>
+ </li>
+ </ul>
+
+ <p>It is important to understand that these directives examine
+ the template itself, and <em>not</em> the output what
+ the template generates when you merge it with the data-model.
+ <span class="marked-for-programmers">(That is, the white-space removal
+ happens on parse time.)</span></p>
+
+ <p>For example this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">--
+ 1 <#t>
+ 2<#t>
+ 3<#lt>
+ 4
+ 5<#rt>
+ 6
+--</pre></div>
+
+ <p>will output this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">--
+1 23
+ 4
+ 5 6
+--</pre></div>
+
+ <p>The placement of these directives inside the line has no
+ importance. That is, the effect will be the same regardless if you
+ put the directive at the beginning of the line, or at the end of the
+ line, or in the middle of the line.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_switch.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_userDefined.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_userDefined.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_userDefined.html b/builds/2.3.26-nightly/ref_directive_userDefined.html
new file mode 100644
index 0000000..0646397
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_userDefined.html
@@ -0,0 +1,297 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>User-defined directive (<@...>) - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="User-defined directive (<@...>)">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_userDefined.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_userDefined.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_userDefined.html"><span itemprop="name">User-defined directive (<@...>)</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","User-defined directive (<@...>)"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_t.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_visit.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_userDefined" itemprop="headline">User-defined directive (<@...>)</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_132" data-menu-target="autoid_132">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_133" data-menu-target="autoid_133">Description</a><ul><li><a class="page-menu-link" href="#ref_directive_userDefined_entTag" data-menu-target="ref_directive_userDefined_entTag">End-tag</a></li><li><a class="page-menu-link" href="#ref_directive_userDefined_loopVar" data-menu-target="ref_directive_userDefined_loopVar">Loop variables</a></li><li><a class="page-menu-link" href="#ref_directive_userDefined_positionalParam" data-menu-target="ref_directive_userDefined_positionalParam">Positional parameter passing</a></li></ul></li></ul> </div><a name="ref.directive.userDefined"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_132">Synopsis</h2>
+
+
+
+<pre class="metaTemplate">
+<code class="inline-code"><@<em class="code-color">user_def_dir_exp</em> <em class="code-color">param1</em>=<em class="code-color">val1</em> <em class="code-color">param2</em>=<em class="code-color">val2</em> <em class="code-color">...</em> <em class="code-color">paramN</em>=<em class="code-color">valN</em>/></code>
+(Note the XML-style <code class="inline-code">/</code> before the <code class="inline-code">></code>)
+or if you need loop variables (<a href="#ref_directive_userDefined_loopVar">more details...</a>)
+<code class="inline-code"><@<em class="code-color">user_def_dir_exp</em> <em class="code-color">param1</em>=<em class="code-color">val1</em> <em class="code-color">param2</em>=<em class="code-color">val2</em> <em class="code-color">...</em> <em class="code-color">paramN</em>=<em class="code-color">valN</em> ; <em class="code-color">lv1</em>, <em class="code-color">lv2</em>, <em class="code-color">...</em>, <em class="code-color">lvN</em>/></code>
+
+Or the same as the above two but with end-tag (<a href="#ref_directive_userDefined_entTag">more details...</a>):
+
+<code class="inline-code"><@<em class="code-color">user_def_dir_exp</em> <em class="code-color">...</em>>
+ ...
+</@<em class="code-color">user_def_dir_exp</em>></code>
+or
+<code class="inline-code"><@<em class="code-color">user_def_dir_exp</em> <em class="code-color">...</em>>
+ ...
+</@></code>
+
+Or all above but with positional parameter passing (<a href="#ref_directive_userDefined_positionalParam">more details...</a>):
+
+<code class="inline-code"><@<em class="code-color">user</em> <em class="code-color">val1</em>, <em class="code-color">val2</em>, <em class="code-color">...</em>, <em class="code-color">valN</em>/></code>
+...etc.
+</pre>
+
+
+ <p>Where:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code"><em class="code-color">user_def_dir_exp</em></code>:
+ Expression evaluates to an user-defined directive (for example a
+ macro), that will be called.
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">param1</em></code>,
+ <code class="inline-code"><em class="code-color">param2</em></code>, ...etc.:
+ The name of parameters. They are <em>not</em>
+ expressions.
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">val1</em></code>,
+ <code class="inline-code"><em class="code-color">val2</em></code>, ...etc.: The
+ value of parameters. They <em>are</em>
+ expressions.
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">lv1</em></code>,
+ <code class="inline-code"><em class="code-color">lv2</em></code>, ...etc.: The
+ name of <a href="dgui_misc_var.html">loop variables</a>.
+ They are <em>not</em> expressions.
+ </li>
+ </ul>
+
+ <p>The number of parameters can be 0 (i.e. no parameters).</p>
+
+ <p>The order of parameters is not significant (unless you use
+ positional parameter passing). The name of parameters must be
+ unique. Lower- and uppercase letters are considered as different
+ letters in parameter names (i.e. <code class="inline-code">Color</code> and
+ <code class="inline-code">color</code> is not the same).</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_133">Description</h2>
+
+
+ <p>This will call an user-defined directive, for example a macro.
+ The meaning of parameters, and the set of supported and required
+ parameters depend on the concrete user-defined directive.</p>
+
+ <p>You may read <a href="dgui_misc_userdefdir.html">the tutorial
+ about user-defined directives</a>.</p>
+
+ <p>Example 1: Calls the directive that is stored in the variable
+ <code class="inline-code">html_escape</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><@html_escape>
+ a < b
+ Romeo & Juliet
+</@html_escape></pre></div>
+
+ <p>Output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> a &lt; b
+ Romeo &amp; Juliet</pre></div>
+
+ <p>Example 2: Calls a macro with parameters:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><@list items=["mouse", "elephant", "python"] title="Animals"/>
+<em>...</em>
+<#macro list title items>
+ <p>${title?cap_first}:
+ <ul>
+ <#list items as x>
+ <li>${x?cap_first}
+ </#list>
+ </ul>
+</#macro></pre></div>
+
+ <p>Output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> <p>Animals:
+ <ul>
+ <li>Mouse
+ <li>Elephant
+ <li>Python
+ </ul>
+
+<em>...</em></pre></div>
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="ref_directive_userDefined_entTag">End-tag</h3>
+
+
+ <p>You can omit the
+ <code class="inline-code"><em class="code-color">user_def_dir_exp</em></code> in
+ the <a href="gloss.html#gloss.endTag">end-tag</a>. That is, you can
+ always write <code class="inline-code"></@></code> instead of
+ <code class="inline-code"></@<em class="code-color">anything</em>></code>.
+ This rule is mostly useful when the
+ <code class="inline-code"><em class="code-color">user_def_dir_exp</em></code>
+ expression is too complex, because you don't have to repeat the
+ expression in the end-tag. Furthermore, if the expression contains
+ other than simple variable names and dots, you are not allowed to
+ repeat the expression. For example,
+ <code class="inline-code"><@a_hash[a_method()]><em class="code-color">...</em></@a_hash[a_method()]></code>
+ is an error; you must write
+ <code class="inline-code"><@a_hash[a_method()]><em class="code-color">...</em></@></code>.
+ But
+ <code class="inline-code"><@a_hash.foo><em class="code-color">...</em></@a_hash.foo></code>
+ is OK.</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="ref_directive_userDefined_loopVar">Loop variables</h3>
+
+
+ <p>Some user-defined directives create loop variables
+ (similarly to <code class="inline-code">list</code> directive). As with the
+ predefined directives (as <code class="inline-code">list</code>) the
+ <em>name</em> of loop variables is given when you call
+ the directive (as <code class="inline-code">foo</code> in <code class="inline-code"><#list
+ foos as
+ foo><em class="code-color">...</em></#list></code>),
+ while the <em>value</em> of the variable is set by the
+ directive itself. In the case of user-defined directives the
+ syntax is that the name of loop variables is given after a
+ semicolon. For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><@myRepeatMacro count=4 ; <strong>x, last</strong>>
+ ${<strong>x</strong>}. Something... <#if <strong>last</strong>> This was the last!</#if>
+</@myRepeatMacro></pre></div>
+
+ <p>Note that the number of loop variable created by the
+ user-defined directive and the number of loop variables specified
+ after the semicolon need not match. Say, if you are not interested
+ if the repetition is the last, you can simply write:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><@myRepeatMacro count=4 ; <strong>x</strong>>
+ ${<strong>x</strong>}. Something...
+</@myRepeatMacro></pre></div>
+
+ <p>or you can even:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><@myRepeatMacro count=4>
+ Something...
+</@myRepeatMacro></pre></div>
+
+ <p>Furthermore, it does not cause error if you specify more
+ loop variables after the semicolon than the user-defined directive
+ creates, just the last few loop variables will not be created
+ (i.e. those will be undefined in the nested content). Trying to
+ use the undefined loop variables, however, will cause error
+ (unless you use built-ins like <code class="inline-code">?default</code>), since
+ you try to access a non-existing variable.</p>
+
+ <p>See the <a href="dgui_misc_userdefdir.html">the tutorial
+ about user-defined directives</a> for more explanation.</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="ref_directive_userDefined_positionalParam">Positional parameter passing</h3>
+
+
+
+
+ <p>Positional parameter passing (as <code class="inline-code"><@heading
+ "Preface", 1/></code>) is a shorthand form of normal named
+ parameter passing (as <code class="inline-code"><@heading title="Preface"
+ level=1/></code>), where you omit the parameter name. This
+ shorthand form should be used if a user-defined directive has only
+ one parameter, or if it is easy to remember the order of
+ parameters for a frequently used user-defined directive. To use
+ this form, you have to know the order in which the named
+ parameters are declared (trivial if the directive has only one
+ parameter). Say, if <code class="inline-code">heading</code> was created as
+ <code class="inline-code"><#macro heading title
+ level><em class="code-color">...</em></code>, then
+ <code class="inline-code"><@heading "Preface", 1/></code> is equivalent
+ with <code class="inline-code"><@heading title="Preface" level=1/></code>
+ (or <code class="inline-code"><@heading level=1 title="Preface"/></code>;
+ if you use parameter names, the order is not important). Note that
+ positional parameter passing is currently only supported for
+ macros.</p>
+
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_t.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_visit.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[36/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui.html b/builds/2.3.26-nightly/pgui.html
new file mode 100644
index 0000000..4213288
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui.html
@@ -0,0 +1,54 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-part">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Programmer's Guide - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Programmer's Guide">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_ex
p.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="dgui_misc_alternativesyntax.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_quickstart.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-part" id="pgui" itemprop="headline">Programmer's Guide</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Section Contents</div>
+<ul><li><a class="page-menu-link" href="pgui_quickstart.html" data-menu-target="pgui_quickstart">Getting Started</a><ul><li><a class="page-menu-link" href="pgui_quickstart_createconfiguration.html" data-menu-target="pgui_quickstart_createconfiguration">Create a configuration instance</a></li><li><a class="page-menu-link" href="pgui_quickstart_createdatamodel.html" data-menu-target="pgui_quickstart_createdatamodel">Create a data-model</a></li><li><a class="page-menu-link" href="pgui_quickstart_gettemplate.html" data-menu-target="pgui_quickstart_gettemplate">Get the template</a></li><li><a class="page-menu-link" href="pgui_quickstart_merge.html" data-menu-target="pgui_quickstart_merge">Merging the template with the data-model</a></li><li><a class="page-menu-link" href="pgui_quickstart_all.html" data-menu-target="pgui_quickstart_all">Putting all together</a></li></ul></li><li><a class="page-menu-link" href="pgui_datamodel.html" data-menu-target="pgui_datamodel">The Data Model</a><ul><l
i><a class="page-menu-link" href="pgui_datamodel_basics.html" data-menu-target="pgui_datamodel_basics">Basics</a></li><li><a class="page-menu-link" href="pgui_datamodel_scalar.html" data-menu-target="pgui_datamodel_scalar">Scalars</a></li><li><a class="page-menu-link" href="pgui_datamodel_parent.html" data-menu-target="pgui_datamodel_parent">Containers</a></li><li><a class="page-menu-link" href="pgui_datamodel_method.html" data-menu-target="pgui_datamodel_method">Methods</a></li><li><a class="page-menu-link" href="pgui_datamodel_directive.html" data-menu-target="pgui_datamodel_directive">Directives</a></li><li><a class="page-menu-link" href="pgui_datamodel_node.html" data-menu-target="pgui_datamodel_node">Node variables</a></li><li><a class="page-menu-link" href="pgui_datamodel_objectWrapper.html" data-menu-target="pgui_datamodel_objectWrapper">Object wrappers</a></li></ul></li><li><a class="page-menu-link" href="pgui_config.html" data-menu-target="pgui_config">The Configuration</a>
<ul><li><a class="page-menu-link" href="pgui_config_basics.html" data-menu-target="pgui_config_basics">Basics</a></li><li><a class="page-menu-link" href="pgui_config_sharedvariables.html" data-menu-target="pgui_config_sharedvariables">Shared variables</a></li><li><a class="page-menu-link" href="pgui_config_settings.html" data-menu-target="pgui_config_settings">Settings</a></li><li><a class="page-menu-link" href="pgui_config_templateloading.html" data-menu-target="pgui_config_templateloading">Template loading</a></li><li><a class="page-menu-link" href="pgui_config_errorhandling.html" data-menu-target="pgui_config_errorhandling">Error handling</a></li><li><a class="page-menu-link" href="pgui_config_templateconfigurations.html" data-menu-target="pgui_config_templateconfigurations">Template configurations</a></li><li><a class="page-menu-link" href="pgui_config_outputformatsautoesc.html" data-menu-target="pgui_config_outputformatsautoesc">Associating output formats with templates</a></li
><li><a class="page-menu-link" href="pgui_config_custom_formats.html" data-menu-target="pgui_config_custom_formats">Custom number and date/time formats</a></li><li><a class="page-menu-link" href="pgui_config_incompatible_improvements.html" data-menu-target="pgui_config_incompatible_improvements">The "incompatible improvements" setting</a></li></ul></li><li><a class="page-menu-link" href="pgui_misc.html" data-menu-target="pgui_misc">Miscellaneous</a><ul><li><a class="page-menu-link" href="pgui_misc_var.html" data-menu-target="pgui_misc_var">Variables, scopes</a></li><li><a class="page-menu-link" href="pgui_misc_charset.html" data-menu-target="pgui_misc_charset">Charset issues</a></li><li><a class="page-menu-link" href="pgui_misc_multithreading.html" data-menu-target="pgui_misc_multithreading">Multithreading</a></li><li><a class="page-menu-link" href="pgui_misc_beanwrapper.html" data-menu-target="pgui_misc_beanwrapper">Bean wrapper</a></li><li><a class="page-menu-link" href=
"pgui_misc_logging.html" data-menu-target="pgui_misc_logging">Logging</a></li><li><a class="page-menu-link" href="pgui_misc_servlet.html" data-menu-target="pgui_misc_servlet">Using FreeMarker with servlets</a></li><li><a class="page-menu-link" href="pgui_misc_secureenv.html" data-menu-target="pgui_misc_secureenv">Configuring security policy for FreeMarker</a></li><li><a class="page-menu-link" href="pgui_misc_xml_legacy.html" data-menu-target="pgui_misc_xml_legacy">Legacy XML wrapper implementation</a></li><li><a class="page-menu-link" href="pgui_misc_ant.html" data-menu-target="pgui_misc_ant">Using FreeMarker with Ant</a></li><li><a class="page-menu-link" href="pgui_misc_jythonwrapper.html" data-menu-target="pgui_misc_jythonwrapper">Jython wrapper</a></li></ul></li></ul> </div><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="dgui_misc_alternativesyntax.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_quickstar
t.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_config.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_config.html b/builds/2.3.26-nightly/pgui_config.html
new file mode 100644
index 0000000..f6feea0
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_config.html
@@ -0,0 +1,55 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-chapter">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>The Configuration - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="The Configuration">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_config.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_config.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config.html"><span itemprop="name">The Configuration</span></a></li></ul><div class="bookmark
s" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","The Configuration"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_datamodel_objectWrapper.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_basics.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-chapter" id="pgui_config" itemprop="headline">The Configuration</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Section Contents</div>
+<ul><li><a class="page-menu-link" href="pgui_config_basics.html" data-menu-target="pgui_config_basics">Basics</a></li><li><a class="page-menu-link" href="pgui_config_sharedvariables.html" data-menu-target="pgui_config_sharedvariables">Shared variables</a></li><li><a class="page-menu-link" href="pgui_config_settings.html" data-menu-target="pgui_config_settings">Settings</a></li><li><a class="page-menu-link" href="pgui_config_templateloading.html" data-menu-target="pgui_config_templateloading">Template loading</a></li><li><a class="page-menu-link" href="pgui_config_errorhandling.html" data-menu-target="pgui_config_errorhandling">Error handling</a></li><li><a class="page-menu-link" href="pgui_config_templateconfigurations.html" data-menu-target="pgui_config_templateconfigurations">Template configurations</a></li><li><a class="page-menu-link" href="pgui_config_outputformatsautoesc.html" data-menu-target="pgui_config_outputformatsautoesc">Associating output formats with templates</a></li
><li><a class="page-menu-link" href="pgui_config_custom_formats.html" data-menu-target="pgui_config_custom_formats">Custom number and date/time formats</a></li><li><a class="page-menu-link" href="pgui_config_incompatible_improvements.html" data-menu-target="pgui_config_incompatible_improvements">The "incompatible improvements" setting</a></li></ul> </div><p>This is just an overview. See the <a href="api/index.html">FreeMarker Java API documentation</a> for the
+ details.</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_datamodel_objectWrapper.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_basics.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_config_basics.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_config_basics.html b/builds/2.3.26-nightly/pgui_config_basics.html
new file mode 100644
index 0000000..47c8a9a
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_config_basics.html
@@ -0,0 +1,75 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Basics - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Basics">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_config_basics.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_config_basics.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config.html"><span itemprop="name">The Configuration</span></a></li><li class="step-3" itempr
op="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config_basics.html"><span itemprop="name">Basics</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","The Configuration","Basics"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_config.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_sharedvariables.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_config_basics" itemprop="headline">Basics</h1>
+</div></div><p>First of all, be sure you have read the <a href="pgui_quickstart_createconfiguration.html">Getting Started</a>
+ chapter.</p><p>A configuration is a
+ <code class="inline-code">freemarker.template.Configuration</code> object that
+ stores your common (global, application level) settings and defines
+ variables that you want to be available in all templates (so called
+ shared variables). Also, it deals with the creation and caching of
+ <code class="inline-code">Template</code> instances.</p><p>An application typically uses only a single shared
+ <code class="inline-code">Configuration</code> instance. More precisely, typically
+ you have one <code class="inline-code">Configuration</code> instance per
+ independently developed component that internally uses FreeMarker, so
+ they can be configured independently of each other. For example, your
+ e-mail sender component and your report generator component (service)
+ probably want to use their own <code class="inline-code">Configuration</code>-s, as
+ their needs differ.</p><p>As the behavior of templates depends on the configuration
+ settings, each <code class="inline-code">Template</code> instance has an associated
+ <code class="inline-code">Configuration</code> instance. If you obtain the
+ <code class="inline-code">Template</code> instances with
+ <code class="inline-code">Configuration.getTemplate</code>, the associated
+ <code class="inline-code">Configuration</code> instance will be the one whose
+ <code class="inline-code">getTemplate</code> method was called. If you create the
+ <code class="inline-code">Template</code> instances directly with the
+ <code class="inline-code">Template</code> constructor, the
+ <code class="inline-code">Configuration</code> should be specified as constructor
+ parameter.</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_config.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_sharedvariables.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_config_custom_formats.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_config_custom_formats.html b/builds/2.3.26-nightly/pgui_config_custom_formats.html
new file mode 100644
index 0000000..1c083eb
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_config_custom_formats.html
@@ -0,0 +1,700 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Custom number and date/time formats - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Custom number and date/time formats">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_config_custom_formats.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_config_custom_formats.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config.html"><span itemprop="name">The Configuration</span></a></li><li class="step-3" itempr
op="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config_custom_formats.html"><span itemprop="name">Custom number and date/time formats</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","The Configuration","Custom number and date/time formats"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_config_outputformatsautoesc.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_incompatible_improvements.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_config_custom_formats" itemprop="headline">Custom number and date/time formats</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_50" data-menu-target="autoid_50">Overview</a></li><li><a class="page-menu-link" href="#pgui_config_custom_formats_ex_cust_alg_simple" data-menu-target="pgui_config_custom_formats_ex_cust_alg_simple">Simple custom number format example</a></li><li><a class="page-menu-link" href="#pgui_config_custom_formats_ex_cust_algo_advanced" data-menu-target="pgui_config_custom_formats_ex_cust_algo_advanced">Advanced custom number format example</a></li><li><a class="page-menu-link" href="#pgui_config_custom_formats_ex_cust_algo_date" data-menu-target="pgui_config_custom_formats_ex_cust_algo_date">Custom date/time format example</a></li><li><a class="page-menu-link" href="#pgui_config_custom_formats_ex_alias" data-menu-target="pgui_config_custom_formats_ex_alias">Alias format example</a></li><li><a class="page-menu-link" href="#pgui_config_custom_formats_ex_model_aware" data-menu-target="pgui_config_custom_formats_ex_model_aware">Model-aware format
example</a></li></ul> </div>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_50">Overview</h2>
+
+
+ <p>FreeMarker allows you to define your own number and
+ date/time/datetime formats, and associate a name to them. This
+ mechanism has several applications:</p>
+
+ <ul>
+ <li>
+ <p>Custom formatter algorithms: You can use your own
+ formatter algorithm instead of relying on those provided by
+ FreeMarker. For this, implement
+ <code class="inline-code">freemarker.core.TemplateNumberFormatFactory</code>
+ or <code class="inline-code">freemarker.core.TemplateDateFormatFactory</code>.
+ You will find a few examples of this <a href="#pgui_config_custom_formats_ex_cust_alg_simple">below</a>.</p>
+ </li>
+
+ <li>
+ <p>Aliasing: You can give application-specific names (like
+ "price", "weight",
+ "fileDate", "logEventTime", etc.) to
+ other formats by using
+ <code class="inline-code">AliasTemplateNumberFormatFactory</code> and
+ <code class="inline-code">AliasTemplateDateFormatFactory</code>. Thus
+ templates can just refer to that name, like in
+ <code class="inline-code">${lastModified?string.@fileDate}</code>, instead of
+ specifying the format directly. Thus the formats can be
+ specified on a single central place (where you configure
+ FreeMarker), instead of being specified repeatedly in templates.
+ Also thus template authors don't have to enter complex and hard
+ to remember formatting patterns. <a href="#pgui_config_custom_formats_ex_alias">See example
+ below</a>.</p>
+ </li>
+
+ <li>
+ <p>Model-sensitive formatting: Applications can put custom
+ <code class="inline-code">freemarker.TemplateModel</code>-s into the
+ data-model instead of dropping plain values (like
+ <code class="inline-code">int</code>-s, <code class="inline-code">double</code>-s, etc.)
+ into it, to attach rendering-related information to the value.
+ Custom formatters can utilize this information (for example, to
+ show the unit after numbers), as they receive the
+ <code class="inline-code">TemplateModel</code> itself, not the wrapped raw
+ value. <a href="#pgui_config_custom_formats_ex_model_aware">See example
+ below</a>.</p>
+ </li>
+
+ <li>
+ <p>Format that prints markup instead of plain text: You might
+ want to use HTML tags (or other markup) in the formatted values,
+ such as coloring negative numbers to red or using HTML
+ <code class="inline-code">sup</code> element for exponents. This is possible
+ if you write a custom format as shown in previous cases, but
+ override the <code class="inline-code">format</code> method in the formatter
+ class so that it returns a
+ <code class="inline-code">TemplateMarkupOutputModel</code> instead of a
+ <code class="inline-code">String</code>. (You shouldn't just return the markup
+ as <code class="inline-code">String</code>, as then it might will be escaped;
+ see <a href="dgui_misc_autoescaping.html">auto-escaping</a>.)</p>
+ </li>
+ </ul>
+
+ <p>Custom formats can be registered with the
+ <code class="inline-code">custom_number_formats</code> and
+ <code class="inline-code">custom_date_formats</code> configuration settings. After
+ that, anywhere where you can specify formats with a
+ <code class="inline-code">String</code>, now you can refer to your custom format
+ as <code class="inline-code">"@<em class="code-color">name</em>"</code>. So for
+ example, if you have registered your number format implementation
+ with name <code class="inline-code">"smart"</code>, then you could set the
+ <code class="inline-code">number_format</code> setting
+ (<code class="inline-code">Configurable.setNumberFormat(String)</code>) to
+ <code class="inline-code">"@smart"</code>, or issue
+ <code class="inline-code">${n?string.@smart}</code> or <code class="inline-code"><#setting
+ number_format="@smart"></code> in a template. Furthermore, you
+ can define parameters for your custom format, like <code class="inline-code">"@smart
+ 2"</code>, and the interpretation of the parameters is up to your
+ formatter implementation.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="pgui_config_custom_formats_ex_cust_alg_simple">Simple custom number format example</h2>
+
+
+ <p>This custom number format shows numbers in hexadecimal
+ form:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">package com.example;
+
+import java.util.Locale;
+
+import freemarker.template.TemplateModelException;
+import freemarker.template.TemplateNumberModel;
+import freemarker.template.utility.NumberUtil;
+
+public class HexTemplateNumberFormatFactory extends TemplateNumberFormatFactory {
+
+ public static final HexTemplateNumberFormatFactory INSTANCE
+ = new HexTemplateNumberFormatFactory();
+
+ private HexTemplateNumberFormatFactory() {
+ // Defined to decrease visibility
+ }
+
+ @Override
+ public TemplateNumberFormat get(String params, Locale locale, Environment env)
+ throws InvalidFormatParametersException {
+ TemplateFormatUtil.checkHasNoParameters(params);
+ return HexTemplateNumberFormat.INSTANCE;
+ }
+
+ private static class HexTemplateNumberFormat extends TemplateNumberFormat {
+
+ private static final HexTemplateNumberFormat INSTANCE = new HexTemplateNumberFormat();
+
+ private HexTemplateNumberFormat() { }
+
+ @Override
+ public String formatToPlainText(TemplateNumberModel numberModel)
+ throws UnformattableValueException, TemplateModelException {
+ Number n = TemplateFormatUtil.getNonNullNumber(numberModel);
+ try {
+ return Integer.toHexString(NumberUtil.toIntExact(n));
+ } catch (ArithmeticException e) {
+ throw new UnformattableValueException(n + " doesn't fit into an int");
+ }
+ }
+
+ @Override
+ public boolean isLocaleBound() {
+ return false;
+ }
+
+ @Override
+ public String getDescription() {
+ return "hexadecimal int";
+ }
+
+ }
+
+}</pre></div>
+
+ <p>We register the above format with name
+ "hex":</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">// Where you initalize the application-wide Configuration singleton:
+Configuration cfg = ...;
+...
+Map<String, TemplateNumberFormatFactory> customNumberFormats = ...;
+...
+customNumberFormats.put("hex", HexTemplateNumberFormatFactory.INSTANCE);
+...
+cfg.setCustomNumberFormats(customNumberFormats);</pre></div>
+
+ <p>Now we can use this format in templates:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${x?string.@hex}</pre></div>
+
+ <p>or even set it as the default number format:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">cfg.setNumberFormat("@hex");</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="pgui_config_custom_formats_ex_cust_algo_advanced">Advanced custom number format example</h2>
+
+
+ <p>This is a more complex custom number format that shows how to
+ deal with parameters in the format string, also how to delegate to
+ another format:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">package com.example;
+
+import java.util.Locale;
+
+import freemarker.template.TemplateModelException;
+import freemarker.template.TemplateNumberModel;
+import freemarker.template.utility.NumberUtil;
+import freemarker.template.utility.StringUtil;
+
+/**
+ * Shows a number in base N number system. Can only format numbers that fit into an {@code int},
+ * however, optionally you can specify a fallback format. This format has one required parameter,
+ * the numerical system base. That can be optionally followed by "|" and a fallback format.
+ */
+public class BaseNTemplateNumberFormatFactory extends TemplateNumberFormatFactory {
+
+ public static final BaseNTemplateNumberFormatFactory INSTANCE
+ = new BaseNTemplateNumberFormatFactory();
+
+ private BaseNTemplateNumberFormatFactory() {
+ // Defined to decrease visibility
+ }
+
+ @Override
+ public TemplateNumberFormat get(String params, Locale locale, Environment env)
+ throws InvalidFormatParametersException {
+ TemplateNumberFormat fallbackFormat;
+ {
+ int barIdx = params.indexOf('|');
+ if (barIdx != -1) {
+ String fallbackFormatStr = params.substring(barIdx + 1);
+ params = params.substring(0, barIdx);
+ try {
+ fallbackFormat = env.getTemplateNumberFormat(fallbackFormatStr, locale);
+ } catch (TemplateValueFormatException e) {
+ throw new InvalidFormatParametersException(
+ "Couldn't get the fallback number format (specified after the \"|\"), "
+ + StringUtil.jQuote(fallbackFormatStr) + ". Reason: " + e.getMessage(),
+ e);
+ }
+ } else {
+ fallbackFormat = null;
+ }
+ }
+
+ int base;
+ try {
+ base = Integer.parseInt(params);
+ } catch (NumberFormatException e) {
+ if (params.length() == 0) {
+ throw new InvalidFormatParametersException(
+ "A format parameter is required to specify the numerical system base.");
+ }
+ throw new InvalidFormatParametersException(
+ "The format paramter must be an integer, but was (shown quoted): "
+ + StringUtil.jQuote(params));
+ }
+ if (base < 2) {
+ throw new InvalidFormatParametersException("A base must be at least 2.");
+ }
+ return new BaseNTemplateNumberFormat(base, fallbackFormat);
+ }
+
+ private static class BaseNTemplateNumberFormat extends TemplateNumberFormat {
+
+ private final int base;
+ private final TemplateNumberFormat fallbackFormat;
+
+ private BaseNTemplateNumberFormat(int base, TemplateNumberFormat fallbackFormat) {
+ this.base = base;
+ this.fallbackFormat = fallbackFormat;
+ }
+
+ @Override
+ public String formatToPlainText(TemplateNumberModel numberModel)
+ throws TemplateModelException, TemplateValueFormatException {
+ Number n = TemplateFormatUtil.getNonNullNumber(numberModel);
+ try {
+ return Integer.toString(NumberUtil.toIntExact(n), base);
+ } catch (ArithmeticException e) {
+ if (fallbackFormat == null) {
+ throw new UnformattableValueException(
+ n + " doesn't fit into an int, and there was no fallback format "
+ + "specified.");
+ } else {
+ return fallbackFormat.formatToPlainText(numberModel);
+ }
+ }
+ }
+
+ @Override
+ public boolean isLocaleBound() {
+ return false;
+ }
+
+ @Override
+ public String getDescription() {
+ return "base " + base;
+ }
+
+ }
+
+}</pre></div>
+
+ <p>We register the above format with name
+ "base":</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">// Where you initalize the application-wide Configuration singleton:
+Configuration cfg = ...;
+...
+Map<String, TemplateNumberFormatFactory> customNumberFormats = ...;
+...
+customNumberFormats.put("base", BaseNTemplateNumberFormatFactory.INSTANCE);
+...
+cfg.setCustomNumberFormats(customNumberFormats);</pre></div>
+
+ <p>Now we can use this format in templates:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${x?string.@base_8}</pre></div>
+
+ <p>Above there the parameter string was <code class="inline-code">"8"</code>,
+ as FreeMarker allows separating that from the format name with
+ <code class="inline-code">_</code> instead of whitespace, so that you don't have
+ to write the longer
+ <code class="inline-code"><em class="code-color">n</em>?string["@base 8"]</code>
+ form.</p>
+
+ <p>Of course, we could also set this as the default number format
+ like:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">cfg.setNumberFormat("@base 8");</pre></div>
+
+ <p>Here's an example of using the a fallback number format (which
+ is <code class="inline-code">"0.0###"</code>):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">cfg.setNumberFormat("@base 8|0.0###");</pre></div>
+
+ <p>Note that this functionality, with the <code class="inline-code">|</code>
+ syntax and all, is purely implemented in the example code
+ earlier.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="pgui_config_custom_formats_ex_cust_algo_date">Custom date/time format example</h2>
+
+
+ <p>This simple date format formats the date/time value to the
+ milliseconds since the epoch:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">package com.example;
+
+import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
+
+import freemarker.template.TemplateDateModel;
+import freemarker.template.TemplateModelException;
+
+public class EpochMillisTemplateDateFormatFactory extends TemplateDateFormatFactory {
+
+ public static final EpochMillisTemplateDateFormatFactory INSTANCE
+ = new EpochMillisTemplateDateFormatFactory();
+
+ private EpochMillisTemplateDateFormatFactory() {
+ // Defined to decrease visibility
+ }
+
+ @Override
+ public TemplateDateFormat get(String params, int dateType,
+ Locale locale, TimeZone timeZone, boolean zonelessInput,
+ Environment env)
+ throws InvalidFormatParametersException {
+ TemplateFormatUtil.checkHasNoParameters(params);
+ return EpochMillisTemplateDateFormat.INSTANCE;
+ }
+
+ private static class EpochMillisTemplateDateFormat extends TemplateDateFormat {
+
+ private static final EpochMillisTemplateDateFormat INSTANCE
+ = new EpochMillisTemplateDateFormat();
+
+ private EpochMillisTemplateDateFormat() { }
+
+ @Override
+ public String formatToPlainText(TemplateDateModel dateModel)
+ throws UnformattableValueException, TemplateModelException {
+ return String.valueOf(TemplateFormatUtil.getNonNullDate(dateModel).getTime());
+ }
+
+ @Override
+ public boolean isLocaleBound() {
+ return false;
+ }
+
+ @Override
+ public boolean isTimeZoneBound() {
+ return false;
+ }
+
+ @Override
+ public Date parse(String s, int dateType) throws UnparsableValueException {
+ try {
+ return new Date(Long.parseLong(s));
+ } catch (NumberFormatException e) {
+ throw new UnparsableValueException("Malformed long");
+ }
+ }
+
+ @Override
+ public String getDescription() {
+ return "millis since the epoch";
+ }
+
+ }
+
+}</pre></div>
+
+ <p>We register the above format with name
+ "epoch":</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">// Where you initalize the application-wide Configuration singleton:
+Configuration cfg = ...;
+...
+Map<String, TemplateDateFormatFactory> customDateFormats = ...;
+...
+customDateFormats.put("epoch", EpochMillisTemplateDateFormatFactory.INSTANCE);
+...
+cfg.setCustomDateFormats(customDateFormats);</pre></div>
+
+ <p>Now we can use this format in templates:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${t?string.@epoch}</pre></div>
+
+ <p>Of course, we could also set this as the default date-time
+ format like:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">cfg.setDateTimeFormat("@epoch");</pre></div>
+
+ <p>For a more complex that for example uses format parameters,
+ refer to the <a href="#pgui_config_custom_formats_ex_cust_algo_advanced">advanced
+ number format example</a>. Doing that with date formats is very
+ similar.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="pgui_config_custom_formats_ex_alias">Alias format example</h2>
+
+
+ <p>In this example we specify some number formats and date
+ formats that are aliases to another format:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">// Where you initalize the application-wide Configuration singleton:
+Configuration cfg = ...;
+
+Map<String, TemplateNumberFormatFactory> customNumberFormats
+ = new HashMap<String, TemplateNumberFormatFactory>();
+customNumberFormats.put("price", new AliasTemplateNumberFormatFactory(",000.00"));
+customNumberFormats.put("weight",
+ new AliasTemplateNumberFormatFactory("0.##;; roundingMode=halfUp"));
+cfg.setCustomNumberFormats(customNumberFormats);
+
+Map<String, TemplateDateFormatFactory> customDateFormats
+ = new HashMap<String, TemplateDateFormatFactory>();
+customDateFormats.put("fileDate", new AliasTemplateDateFormatFactory("dd/MMM/yy hh:mm a"));
+customDateFormats.put("logEventTime", new AliasTemplateDateFormatFactory("iso ms u"));
+cfg.setCustomDateFormats(customDateFormats);</pre></div>
+
+ <p>So now you can do this in a template:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${product.price?string.@price}
+${product.weight?string.@weight}
+${lastModified?string.@fileDate}
+${lastError.timestamp?string.@logEventTime}</pre></div>
+
+ <p>Note that the constructor parameter of
+ <code class="inline-code">AliasTemplateNumberFormatFactory</code> can naturally
+ refer to a custom format too:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">Map<String, TemplateNumberFormatFactory> customNumberFormats
+ = new HashMap<String, TemplateNumberFormatFactory>();
+customNumberFormats.put("base", BaseNTemplateNumberFormatFactory.INSTANCE);
+customNumberFormats.put("oct", new AliasTemplateNumberFormatFactory("@base 8"));
+cfg.setCustomNumberFormats(customNumberFormats);</pre></div>
+
+ <p>So now
+ <code class="inline-code"><em class="code-color">n</em>?string.@oct</code> will
+ format the number to octal form.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="pgui_config_custom_formats_ex_model_aware">Model-aware format example</h2>
+
+
+ <p>In this example we specify a number format that automatically
+ show the unit after the number if that was put into the data-model
+ as <code class="inline-code">UnitAwareTemplateNumberModel</code>. First let's see
+ <code class="inline-code">UnitAwareTemplateNumberModel</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">package com.example;
+
+import freemarker.template.TemplateModelException;
+import freemarker.template.TemplateNumberModel;
+
+public class UnitAwareTemplateNumberModel implements TemplateNumberModel {
+
+ private final Number value;
+ private final String unit;
+
+ public UnitAwareTemplateNumberModel(Number value, String unit) {
+ this.value = value;
+ this.unit = unit;
+ }
+
+ @Override
+ public Number getAsNumber() throws TemplateModelException {
+ return value;
+ }
+
+ public String getUnit() {
+ return unit;
+ }
+
+}</pre></div>
+
+ <p>When you fill the data-model, you could do something like
+ this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">Map<String, Object> dataModel = new HashMap<>();
+dataModel.put("weight", new UnitAwareTemplateNumberModel(1.5, "kg"));
+// Rather than just: dataModel.put("weight", 1.5);</pre></div>
+
+ <p>Then if we have this in the template:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${weight}</pre></div>
+
+ <p>we want to see this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">1.5 kg</pre></div>
+
+ <p>To achieve that, we define this custom number format:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">package com.example;
+
+import java.util.Locale;
+
+import freemarker.core.Environment;
+import freemarker.core.TemplateNumberFormat;
+import freemarker.core.TemplateNumberFormatFactory;
+import freemarker.core.TemplateValueFormatException;
+import freemarker.template.TemplateModelException;
+import freemarker.template.TemplateNumberModel;
+
+/**
+ * A number format that takes any other number format as parameter (specified as a string, as
+ * usual in FreeMarker), then if the model is a {@link UnitAwareTemplateNumberModel}, it shows
+ * the unit after the number formatted with the other format, otherwise it just shows the formatted
+ * number without unit.
+ */
+public class UnitAwareTemplateNumberFormatFactory extends TemplateNumberFormatFactory {
+
+ public static final UnitAwareTemplateNumberFormatFactory INSTANCE
+ = new UnitAwareTemplateNumberFormatFactory();
+
+ private UnitAwareTemplateNumberFormatFactory() {
+ // Defined to decrease visibility
+ }
+
+ @Override
+ public TemplateNumberFormat get(String params, Locale locale, Environment env)
+ throws TemplateValueFormatException {
+ return new UnitAwareNumberFormat(env.getTemplateNumberFormat(params, locale));
+ }
+
+ private static class UnitAwareNumberFormat extends TemplateNumberFormat {
+
+ private final TemplateNumberFormat innerFormat;
+
+ private UnitAwareNumberFormat(TemplateNumberFormat innerFormat) {
+ this.innerFormat = innerFormat;
+ }
+
+ @Override
+ public String formatToPlainText(TemplateNumberModel numberModel)
+ throws TemplateModelException, TemplateValueFormatException {
+ String innerResult = innerFormat.formatToPlainText(numberModel);
+ return numberModel instanceof UnitAwareTemplateNumberModel
+ ? innerResult + " " + ((UnitAwareTemplateNumberModel) numberModel).getUnit()
+ : innerResult;
+ }
+
+ @Override
+ public boolean isLocaleBound() {
+ return innerFormat.isLocaleBound();
+ }
+
+ @Override
+ public String getDescription() {
+ return "unit-aware " + innerFormat.getDescription();
+ }
+
+ }
+
+}</pre></div>
+
+ <p>Finally, we set the above custom format as the default number
+ format:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">// Where you initalize the application-wide Configuration singleton:
+Configuration cfg = ...;
+
+Map<String, TemplateNumberFormatFactory> customNumberFormats = new HashMap<>();
+customNumberFormats.put("ua", UnitAwareTemplateNumberFormatFactory.INSTANCE);
+cfg.setCustomNumberFormats(customNumberFormats);
+
+// Note: "0.####;; roundingMode=halfUp" is a standard format specified in FreeMarker.
+cfg.setNumberFormat("@ua 0.####;; roundingMode=halfUp");</pre></div>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_config_outputformatsautoesc.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_incompatible_improvements.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[03/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_6.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_6.html b/builds/2.3.26-nightly/versions_2_3_6.html
new file mode 100644
index 0000000..a688a47
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_6.html
@@ -0,0 +1,68 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.6 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.6">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_6.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_6.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_6.html"><span itemprop="name">2.3.6</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.6"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_7rc1.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_5.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_6" itemprop="headline">2.3.6</h1>
+</div></div><p>Date of release: 2006-03-15</p><p>Quick release that fixes a serious bug of 2.3.5, days after its
+ release. So for the recently added new features please <a href="versions_2_3_5.html">see the section of 2.3.5.</a></p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_204">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>Bug fixed: In FreeMarker 2.3.5 only, when you read a bean
+ property for the second time, FreeMarker will say that it's
+ missing (null).</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_7rc1.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_5.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_7.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_7.html b/builds/2.3.26-nightly/versions_2_3_7.html
new file mode 100644
index 0000000..cbce296
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_7.html
@@ -0,0 +1,172 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.7 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.7">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_7.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_7.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_7.html"><span itemprop="name">2.3.7</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.7"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_8.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_7rc1.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_7" itemprop="headline">2.3.7</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_200" data-menu-target="autoid_200">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_201" data-menu-target="autoid_201">Changes on the FTL side</a></li></ul> </div><p>Date of release: 2006-06-23</p><p>This release, compared to 2.3.7 RC1, contains new operators for
+ handling null/missing variables, , the <code class="inline-code">substring</code>
+ built-in, and some more bugfixes. Note that 2.3.7 RC1 has a long
+ change log, so you may want to <a href="versions_2_3_7rc1.html">read
+ that</a> too.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_200">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>The <code class="inline-code">seq_contains</code> built-in now handles
+ <code class="inline-code">TemplateCollectionModel</code>-s as well.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: In 2.3.7 RC1
+ <code class="inline-code">FreemarkerServlet</code> has always died with
+ <code class="inline-code">NullPointerException</code> during
+ initialization.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_201">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>3 new operators were added for terser missing variable
+ handling. These operators make the <code class="inline-code">default</code>,
+ <code class="inline-code">exists</code> and <code class="inline-code">if_exists</code>
+ built-ins deprecated. (The parser doesn't issue any warning
+ messages when you use deprecated built-ins, and they are still
+ working.):</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code"><em class="code-color">exp1</em>!<em class="code-color">exp2</em></code>
+ is near equivalent with
+ <code class="inline-code"><em class="code-color">exp1</em>?default(<em class="code-color">exp2</em>)</code>,
+ also
+ <code class="inline-code">(<em class="code-color">exp1</em>)!<em class="code-color">exp2</em></code>
+ is near equivalent with
+ <code class="inline-code">(<em class="code-color">exp1</em>)?default(<em class="code-color">exp2</em>)</code>.
+ The only difference is that this new operator doesn't
+ evaluate the
+ <code class="inline-code"><em class="code-color">exp2</em></code> when the
+ default value is not needed.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code"><em class="code-color">exp1</em>!</code> is
+ similar to
+ <code class="inline-code"><em class="code-color">exp1</em>?if_exists</code>,
+ also <code class="inline-code">(<em class="code-color">exp1</em>)!</code>
+ is similar to
+ <code class="inline-code">(<em class="code-color">exp1</em>)?if_exists</code>.
+ The difference is that with this new operator the default
+ value is an empty string and an empty list and empty hash at
+ the same time (multi-type variable), while with
+ <code class="inline-code">if_exists</code> the default value was an empty
+ string and an empty list and empty hash and boolean
+ <code class="inline-code">false</code> and a transform that does nothing
+ and ignores all parameters at the same time.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code"><em class="code-color">exp1</em>??</code>
+ is equivalent with
+ <code class="inline-code"><em class="code-color">exp1</em>?exists</code>,
+ also <code class="inline-code">(<em class="code-color">exp1</em>)??</code>
+ is equivalent with with
+ <code class="inline-code">(<em class="code-color">exp1</em>)?exists</code>.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>New built-in:
+ <code class="inline-code"><em class="code-color">exp</em>?substring(<em class="code-color">from</em>,
+ <em class="code-color">toExclusive</em>)</code>, also callable
+ as
+ <code class="inline-code"><em class="code-color">exp</em>?substring(<em class="code-color">from</em>)</code>.
+ Getting substrings was possible for a long time like
+ <code class="inline-code"><em class="code-color">myString</em>[<em class="code-color">from</em>..<em class="code-color">toInclusive</em>]</code>
+ and
+ <code class="inline-code"><em class="code-color">myString</em>[<em class="code-color">from</em>..]</code>,
+ but
+ <code class="inline-code"><em class="code-color">myString</em>?substring(<em class="code-color">from</em>,
+ <em class="code-color">toExclusive</em>)</code> and
+ <code class="inline-code"><em class="code-color">myString</em>?substring(<em class="code-color">from</em>)</code>
+ has the advantage that it has an exclusive end, which is more
+ practical. (Edit: Since 2.3.21 ranges are the preferred way
+ again, as it has
+ <code class="inline-code"><em class="code-color">myString</em>[<em class="code-color">from</em>..<<em class="code-color">toExclusive</em>]</code>.)
+ Sequence (list) slices still has to be get with the old syntax,
+ since <code class="inline-code">substring</code> only applies to strings.
+ Please note that the "to" parameter is 1 greater
+ with this new builtin, as it is an exclusive index. Further
+ difference is that the <code class="inline-code">substring</code> built-in
+ requires that the "from" index is less than or
+ equal to the "to" index. So 0 length substrings are
+ possible now, but not reversed substrings.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/?func=detail&atid=100794&aid=1487694&group_id=794">[1487694]</a>
+ malfunction when the <code class="inline-code">recover</code> directive has no
+ nested content</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_8.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_7rc1.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_7rc1.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_7rc1.html b/builds/2.3.26-nightly/versions_2_3_7rc1.html
new file mode 100644
index 0000000..9b2e0f7
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_7rc1.html
@@ -0,0 +1,129 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.7 RC1 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.7 RC1">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_7rc1.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_7rc1.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_7rc1.html"><span itemprop="name">2.3.7 RC1</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.7 RC1"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_7.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_6.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_7rc1" itemprop="headline">2.3.7 RC1</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_202" data-menu-target="autoid_202">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_203" data-menu-target="autoid_203">Changes on the FTL side</a></li></ul> </div><p>Date of release: 2006-04-27</p><p>This release contains many bugfixes and some
+ <code class="inline-code">FreemarkerServlet</code> related improvements. It's a
+ Release Candidate, which means that it shouldn't be used in production
+ environment yet. We recommend this release for development, however.
+ Please test it.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_202">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p><code class="inline-code">FreemarkerServlet</code> improvement:
+ <code class="inline-code">AllHttpScopesHashModel</code> is now public, so you
+ can add unlisted variables to the data-model.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">FreemarkerServlet</code> improvement: When it
+ throws a <code class="inline-code">ServletException</code>, the J2SE 1.4 cause
+ exception is now set under J2SE 1.4.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/?func=detail&atid=100794&aid=1469275&group_id=794">[1469275]</a>
+ <code class="inline-code">NullPointerException</code> when using
+ <code class="inline-code">BeansWrapper</code> with reloaded classes</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/?func=detail&atid=100794&aid=1449467&group_id=794">[1449467]</a>
+ <code class="inline-code">HttpSessionHashModel</code> is not
+ <code class="inline-code">Serializable</code></p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/?func=detail&atid=100794&aid=1435113&group_id=794">[1435113]</a>
+ Error in <code class="inline-code">BeanWrapper</code> with indexed
+ properties</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/?func=detail&atid=100794&aid=1411705&group_id=794">[1411705]</a>
+ Acquisition bug in <code class="inline-code">TemplateCache</code></p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1459699&group_id=794&atid=100794">[1459699]</a>
+ Tag syntax can't set with
+ <code class="inline-code">Configuration.setSetting(String,
+ String)</code></p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/?func=detail&atid=100794&aid=1473403&group_id=794">[1473403]</a>
+ <code class="inline-code">ReturnInstruction.Return</code> should be
+ public</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_203">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/?func=detail&atid=100794&aid=1463664&group_id=794">[1463664]</a>kup
+ <code class="inline-code">[/#noparse]</code> is printed out</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_7.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_6.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_8.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_8.html b/builds/2.3.26-nightly/versions_2_3_8.html
new file mode 100644
index 0000000..7ee71f4
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_8.html
@@ -0,0 +1,98 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.8 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.8">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_8.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_8.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_8.html"><span itemprop="name">2.3.8</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.8"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_9.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_7.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_8" itemprop="headline">2.3.8</h1>
+</div></div><p>Date of release: 2006-07-09</p><p>This release substantially improves the JSP 2.0 compatibility.
+ (For those who have seen the same points in 2.3.7: Sorry, the version
+ history was incorrect... those JSP 2.0 related changes were not in the
+ release yet.)</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_199">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>JSP support improvement: <a href="http://sourceforge.net/tracker/?func=detail&atid=100794&aid=1326058&group_id=794">[1326058]</a>
+ Added support for <code class="inline-code">DynamicAttributes</code> (new in
+ JSP 2.0)</p>
+ </li>
+
+ <li>
+ <p>JSP support improvement: Added support for
+ <code class="inline-code">pushBody()</code>/<code class="inline-code">popBody()</code> in
+ <code class="inline-code">FreemarkerPageContext</code></p>
+ </li>
+
+ <li>
+ <p>JSP support improvement: Added support for
+ <code class="inline-code">getVariableResolver()</code> (new in JSP
+ 2.0).</p>
+ </li>
+
+ <li>
+ <p>JSP support improvement: Added support for
+ <code class="inline-code">include(String, boolean)</code> (new in JSP
+ 2.0).</p>
+ </li>
+
+ <li>
+ <p>JSP support improvement: Added support for
+ <code class="inline-code">getExpressionEvaluator()</code> (new in JSP 2.0).
+ However, it will need Apache commons-el in the class path, or
+ else this method will not work (it's optional). Note that EL
+ support is not needed in principle, since FreeMarker has it's
+ own expression language. But some custom JSP 2 tags may still
+ want to use this method, after all it's in the JSP 2 API.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_9.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_7.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_9.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_9.html b/builds/2.3.26-nightly/versions_2_3_9.html
new file mode 100644
index 0000000..6640b90
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_9.html
@@ -0,0 +1,119 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.9 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.9">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_9.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_9.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_9.html"><span itemprop="name">2.3.9</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.9"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_10.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_8.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_9" itemprop="headline">2.3.9</h1>
+</div></div><p>Date of release: 2007-01-23</p><p>This release contains support for accessing JDK 1.5 enums and
+ public fields of classes from the templates through the
+ BeansWrapper.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_198">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p><code class="inline-code">BeansWrapper</code> can now expose public
+ fields of objects to the template if you call the
+ <code class="inline-code">setExposeFields(true)</code> on it. <a href="pgui_misc_beanwrapper.html#beanswrapper_hash">More info...</a></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">BeansWrapper</code> can now pass any sequence
+ model to Java methods expecting a
+ <code class="inline-code">java.util.Collection</code> or a native Java array
+ (including primitive arrays). <a href="pgui_misc_beanwrapper.html#beanswrapper_hash">More info...</a></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">BeansWrapper</code> can now pass any sequence
+ and collection model to Java methods expecting a
+ <code class="inline-code">java.lang.Iterable</code>. <a href="pgui_misc_beanwrapper.html#beanswrapper_hash">More info...</a></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">BeansWrapper</code> can now unwrap numeric
+ models into correct target types when passing to Java methods
+ expecting a primitive or boxed number. Use of various <a href="ref_builtins_expert.html">expert built-ins</a> to
+ manually coerce the types becomes mostly unnecessary.</p>
+ </li>
+
+ <li>
+ <p>Fixed a bug where <code class="inline-code">BeansWrapper</code> would
+ pass a <code class="inline-code">java.util.Collection</code> to a method
+ expecting a <code class="inline-code">java.util.Set</code> in certain rare
+ cases. <a href="pgui_misc_beanwrapper.html#beanswrapper_hash">More
+ info...</a></p>
+ </li>
+
+ <li>
+ <p>Support for JDK 1.5 enums in
+ <code class="inline-code">BeansWrapper</code> and
+ <code class="inline-code">DefaultObjectWrapper</code>. By calling the
+ <code class="inline-code">getEnumModels()</code> method, you can retrieve a
+ hash model that is keyed by class names and allows access to
+ enumerated values. I.e. if you bind this hash model under name
+ <code class="inline-code">enums</code> in the data-model, you can write
+ expressions like
+ <code class="inline-code">enums["java.math.RoundingMode"].UP</code> in the
+ template. The enum values can be used as scalars and support
+ equality and inequality comparisons. <a href="pgui_misc_beanwrapper.html#jdk_15_enums">More info...</a></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">freemarker.ext.rhino.RhinoWrapper</code> now
+ correctly translates Rhino <code class="inline-code">Undefined</code>
+ instance, <code class="inline-code">UniqueTag.NOT_FOUND</code>, and
+ <code class="inline-code">UniqueTag.NULL</code> to FreeMarker undefined
+ value.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_10.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_8.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/xgui.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/xgui.html b/builds/2.3.26-nightly/xgui.html
new file mode 100644
index 0000000..bac7641
--- /dev/null
+++ b/builds/2.3.26-nightly/xgui.html
@@ -0,0 +1,54 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-part">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>XML Processing Guide - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="XML Processing Guide">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/xgui.html">
+<link rel="canonical" href="http://freemarker.org/docs/xgui.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui.html"><span itemprop="name">XML Processing Guide</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.
html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","XML Processing Guide"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_depr_numerical_interpolation.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_preface.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-part" id="xgui" itemprop="headline">XML Processing Guide</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Section Contents</div>
+<ul><li><a class="page-menu-link" href="xgui_preface.html" data-menu-target="xgui_preface">Preface</a></li><li><a class="page-menu-link" href="xgui_expose.html" data-menu-target="xgui_expose">Exposing XML documents</a><ul><li><a class="page-menu-link" href="xgui_expose_dom.html" data-menu-target="xgui_expose_dom">The DOM tree</a></li><li><a class="page-menu-link" href="xgui_expose_put.html" data-menu-target="xgui_expose_put">Putting the XML into the data-model</a></li></ul></li><li><a class="page-menu-link" href="xgui_imperative.html" data-menu-target="xgui_imperative">Imperative XML processing</a><ul><li><a class="page-menu-link" href="xgui_imperative_learn.html" data-menu-target="xgui_imperative_learn">Basics</a></li><li><a class="page-menu-link" href="xgui_imperative_formal.html" data-menu-target="xgui_imperative_formal">Details</a></li></ul></li><li><a class="page-menu-link" href="xgui_declarative.html" data-menu-target="xgui_declarative">Declarative XML processing</a><ul><li><a
class="page-menu-link" href="xgui_declarative_basics.html" data-menu-target="xgui_declarative_basics">Basics</a></li><li><a class="page-menu-link" href="xgui_declarative_details.html" data-menu-target="xgui_declarative_details">Details</a></li></ul></li></ul> </div><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_depr_numerical_interpolation.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_preface.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/xgui_declarative.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/xgui_declarative.html b/builds/2.3.26-nightly/xgui_declarative.html
new file mode 100644
index 0000000..4d64622
--- /dev/null
+++ b/builds/2.3.26-nightly/xgui_declarative.html
@@ -0,0 +1,54 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-chapter">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Declarative XML processing - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Declarative XML processing">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/xgui_declarative.html">
+<link rel="canonical" href="http://freemarker.org/docs/xgui_declarative.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui.html"><span itemprop="name">XML Processing Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui_declarative.html"><span itemprop="name">Declarative XML processing</span></a></li></ul><div cla
ss="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","XML Processing Guide","Declarative XML processing"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="xgui_imperative_formal.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_declarative_basics.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-chapter" id="xgui_declarative" itemprop="headline">Declarative XML processing</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Section Contents</div>
+<ul><li><a class="page-menu-link" href="xgui_declarative_basics.html" data-menu-target="xgui_declarative_basics">Basics</a></li><li><a class="page-menu-link" href="xgui_declarative_details.html" data-menu-target="xgui_declarative_details">Details</a></li></ul> </div><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="xgui_imperative_formal.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_declarative_basics.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[02/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/xgui_declarative_basics.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/xgui_declarative_basics.html b/builds/2.3.26-nightly/xgui_declarative_basics.html
new file mode 100644
index 0000000..ed6e248
--- /dev/null
+++ b/builds/2.3.26-nightly/xgui_declarative_basics.html
@@ -0,0 +1,198 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Basics - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Basics">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/xgui_declarative_basics.html">
+<link rel="canonical" href="http://freemarker.org/docs/xgui_declarative_basics.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui.html"><span itemprop="name">XML Processing Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui_declarative.html"><span itemprop="name">Declarative XML processing</span></a></li><li class="st
ep-3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui_declarative_basics.html"><span itemprop="name">Basics</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","XML Processing Guide","Declarative XML processing","Basics"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="xgui_declarative.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_declarative_details.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="xgui_declarative_basics" itemprop="headline">Basics</h1>
+</div></div> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This section uses the DOM tree and the variable made in <a href="xgui_expose.html">a previous chapter</a>.</p>
+ </div>
+<p>With the imperative approach of XML processing -- this was shown
+ in the previous chapter -- you write an FTL program that walks the
+ tree to find the different kind of nodes. With the declarative
+ approach, you rather define how to handle the different kind of nodes,
+ and then let FreeMarker walk the tree an call the handlers you have
+ defined. This approach is useful for complex XML schemas, where the
+ same element can occur as the child of many other elements. Examples
+ of such schemas are XHTML and XDocBook.</p><p>The directive you most often use with the declarative approach
+ is the <a href="ref_directive_visit.html#ref.directive.recurse"><code>recurse</code>
+ directive</a>. This directive gets a node variable as parameter,
+ and "visits" all its children nodes, one after the other,
+ starting with the first child. "Visiting" a node means
+ that it calls a user-defined directive (like a macro) that has the
+ same name as the name of the child node
+ (<code class="inline-code">?node_name</code>). We say on this, that the user-defined
+ directive <em>handles</em> the node. The node that the
+ user-defined directive just handles is available as special variable
+ <code class="inline-code">.node</code>. For example, this FTL:</p>
+
+<div class="code-wrapper"><pre class="code-block code-template"><#recurse doc>
+
+<#macro book>
+ I'm the book element handler, and the title is: ${.node.title}
+</#macro></pre></div><p>will print (I have removed some disturbing white-space form the
+ output):</p>
+
+<div class="code-wrapper"><pre class="code-block code-output">I'm the book element handler, and the title is: Test Book</pre></div><p>If you call <code class="inline-code">recurse</code> without parameter, then
+ it uses <code class="inline-code">.node</code>, that is, it visits all children
+ nodes of the node currently handled. So this FTL:</p>
+
+<div class="code-wrapper"><pre class="code-block code-template"><#recurse doc>
+
+<#macro book>
+ Book element with title ${.node.title}
+ <#recurse>
+ End book
+</#macro>
+
+<#macro title>
+ Title element
+</#macro>
+
+<#macro chapter>
+ Chapter element with title: ${.node.title}
+</#macro></pre></div><p>will print (I have removed disturbing white-space form the
+ output):</p>
+
+<div class="code-wrapper"><pre class="code-block code-output">Book element with title Test Book
+Title element
+Chapter element with title: Ch1
+Chapter element with title: Ch2
+End book</pre></div><p>You have seen how to define handlers for element nodes, but not
+ how to define handler for the text nodes. Since the name of the
+ handler is the same as the node-name of nodes it handles, and as the
+ node-name of all text nodes is <code class="inline-code">@text</code> (see <a href="xgui_imperative_formal.html#misc.xguiTable">the table</a>), you define handler for the
+ text nodes like this:</p>
+
+<div class="code-wrapper"><pre class="code-block code-template">
+<#macro @text>${.node?html}</#macro></pre></div><p>Note the <code class="inline-code">?html</code>. You have to HTML-escape the
+ text, since you generate output of HTML format.</p><p>Here it is the template that transforms the XML to complete
+ HTML:</p><a name="misc.example.declarativeBookProcessor"></a>
+
+<div class="code-wrapper"><pre class="code-block code-template"><#recurse doc>
+
+<#macro book>
+ <html>
+ <head>
+ <title><#recurse .node.title></title>
+ </head>
+ <body>
+ <h1><#recurse .node.title></h1>
+ <#recurse>
+ </body>
+ </html>
+</#macro>
+
+<#macro chapter>
+ <h2><#recurse .node.title></h2>
+ <#recurse>
+</#macro>
+
+<#macro para>
+ <p><#recurse>
+</#macro>
+
+<#macro title>
+ <#--
+ We have handled this element imperatively,
+ so we do nothing here.
+ -->
+</#macro>
+
+<#macro @text>${.node?html}</#macro></pre></div><p>and the output will be (now I will honestly include the annoying
+ white-space...):</p>
+
+<div class="code-wrapper"><pre class="code-block code-output"> <html>
+ <head>
+ <title>Test Book</title>
+ </head>
+ <body>
+ <h1>Test Book</h1>
+
+
+ <h2>Ch1</h2>
+
+
+ <p>p1.1
+
+ <p>p1.2
+
+ <p>p1.3
+
+
+ <h2>Ch2</h2>
+
+
+ <p>p2.1
+
+ <p>p2.2
+
+
+ </body>
+ </html>
+
+ </pre></div><p>Note that you can reduce substantially the amount of superfluous
+ whitespace in the output by using the <a href="ref_directive_t.html">trim directives</a>, as
+ <code class="inline-code"><#t></code>. See also: <a href="dgui_misc_whitespace.html">Template Author's Guide/Miscellaneous/White-space handling</a></p><p>You may say that the FTL that did it with imperative approach
+ was much shorter. That's true, but the example XML uses a very simple
+ schema, and as I said, the declarative approach brings its form with
+ XML schemas that are not that firm about what element can occur where.
+ Say, introduce element <code class="inline-code">mark</code>, that should color text
+ to red, does not mater where do you use it; in a
+ <code class="inline-code">title</code>, or in a <code class="inline-code">para</code>. For this,
+ with the declarative approach, you just add a macro:</p>
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro mark><font color=red><#recurse></font></#macro></pre></div><p>And then <code class="inline-code"><mark>...</mark></code> will
+ automatically work everywhere. So for certain XML schemas, declarative
+ XML processing will actually result in shorter, and what is even more
+ important, much clearer FTL-s, than imperative XML processing. It's up
+ to you to decide which approach to use when; don't forget that you can
+ mix the two approaches freely. Say, in an element handler, you can use
+ imperative approach to process the contents of that element.</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="xgui_declarative.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_declarative_details.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/xgui_declarative_details.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/xgui_declarative_details.html b/builds/2.3.26-nightly/xgui_declarative_details.html
new file mode 100644
index 0000000..3d5757c
--- /dev/null
+++ b/builds/2.3.26-nightly/xgui_declarative_details.html
@@ -0,0 +1,220 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Details - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Details">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/xgui_declarative_details.html">
+<link rel="canonical" href="http://freemarker.org/docs/xgui_declarative_details.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui.html"><span itemprop="name">XML Processing Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui_declarative.html"><span itemprop="name">Declarative XML processing</span></a></li><li class="st
ep-3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui_declarative_details.html"><span itemprop="name">Details</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","XML Processing Guide","Declarative XML processing","Details"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="xgui_declarative_basics.html"><span>Previous</span></a><a class="paging-arrow next" href="app.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="xgui_declarative_details" itemprop="headline">Details</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_152" data-menu-target="autoid_152">Default handlers</a></li><li><a class="page-menu-link" href="#autoid_153" data-menu-target="autoid_153">Visiting a single node</a></li><li><a class="page-menu-link" href="#autoid_154" data-menu-target="autoid_154">XML namespaces</a></li></ul> </div>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_152">Default handlers</h2>
+
+
+ <p>For some XML node types, there is a default handler, which
+ will handle the node if you haven't defined a handler for the node
+ (i.e. if there is no user-defined directive available with name
+ identical to the node name). Here are these node types, and what the
+ default handler does:</p>
+
+ <ul>
+ <li>
+ <p>Text node: prints the text as it. Note, that in most
+ applications, this will not be good for you, because you should
+ escape the text before you send it to the output (with
+ <code class="inline-code">?html</code> or <code class="inline-code">?xml</code> or
+ <code class="inline-code">?rtf</code>, ...etc. depends on the output
+ format).</p>
+ </li>
+
+ <li>
+ <p>Processing instruction node: call handler called
+ <code class="inline-code">@pi</code> if you have created such user-defined
+ directive, otherwise do nothing (ignore the node).</p>
+ </li>
+
+ <li>
+ <p>Comment node, document type node: Do nothing (ignore the
+ node).</p>
+ </li>
+
+ <li>
+ <p>Document node: Call <code class="inline-code">recurse</code>, that is,
+ visit all children of the document node.</p>
+ </li>
+ </ul>
+
+ <p>Element and attribute nodes will be handled according to the
+ usual, XML independent mechanism. That is,
+ <code class="inline-code">@<em class="code-color">node_type</em></code> will be
+ called as handler, and if that's not defined, then an error stops
+ template processing.</p>
+
+ <p>In the case of element nodes, this means that if you define a
+ macro (or other kind of user-defined directive) called
+ <code class="inline-code">@element</code>, that will catch all element nodes,
+ which has no more specific handler. If you have no
+ <code class="inline-code">@element</code> handler, then you
+ <em>must</em> define a handler for all possible
+ elements.</p>
+
+ <p>Attribute nodes are not visited by the
+ <code class="inline-code">recurse</code> directive, so you don't need to write
+ handlers for them.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_153">Visiting a single node</h2>
+
+
+ <p>With the <a href="ref_directive_visit.html#ref.directive.visit"><code>visit</code>
+ directive</a> you can visit a single node, instead of the
+ children of the node:
+ <code class="inline-code"><#visit�<em class="code-color">nodeToVisist</em>></code>.
+ This can be useful sometimes.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_154">XML namespaces</h2>
+
+
+
+
+ <p>We said that the name of the handler user-defined directive
+ (like a macro) for an element is the name of the element. In fact,
+ it is the full-qualified name of the element:
+ <code class="inline-code"><em class="code-color">prefix</em>:<em class="code-color">elementName</em></code>.
+ The rules regarding the usage of
+ <code class="inline-code"><em class="code-color">prefix</em></code>-es is the same
+ as with imperative processing. Thus, the user-defined
+ <code class="inline-code">book</code> directive handles only element
+ <code class="inline-code">book</code> that does not belong to any XML namespace
+ (unless you have specified a default XML namespace). So if the
+ example XML would use XML namespace
+ <code class="inline-code">http://example.com/ebook</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified"><book xmlns="http://example.com/ebook">
+<em>...</em></pre></div>
+
+ <p>Then the FTL should look as this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><strong><#ftl ns_prefixes={"e":"http://example.com/ebook"}></strong>
+
+<#recurse doc>
+
+<#macro "<strong>e:</strong>book">
+ <html>
+ <head>
+ <title><#recurse .node["<strong>e:</strong>title"]></title>
+ </head>
+ <body>
+ <h1><#recurse .node["<strong>e:</strong>title"]></h1>
+ <#recurse>
+ </body>
+ </html>
+</#macro>
+
+<#macro "<strong>e:</strong>chapter">
+ <h2><#recurse .node["<strong>e:</strong>title"]></h2>
+ <#recurse>
+</#macro>
+
+<#macro "<strong>e:</strong>para">
+ <p><#recurse>
+</#macro>
+
+<#macro "<strong>e:</strong>title">
+ <#--
+ We have handled this element imperatively,
+ so we do nothing here.
+ -->
+</#macro>
+
+<#macro @text>${.node?html}</#macro></pre></div>
+
+ <p>Or, you can define a default XML namespace, and then the
+ further part of the template remains the same as in the original XML
+ namespace free example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#ftl ns_prefixes={"<strong>D</strong>":"http://example.com/ebook"}>
+
+<#recurse doc>
+
+<#macro book>
+<em>...</em></pre></div>
+
+ <p>But in this case don't forge that in XPath expressions (we
+ didn't used any in the example) the default XML namespace must be
+ accessed with an explicit <code class="inline-code">D:</code> since names without
+ prefix always refer to nodes with no XML namespace in XPath. Also
+ note that with the same logic as with imperative XML processing, the
+ name of handlers for elements that has no XML namespace is
+ <code class="inline-code">N:<em class="code-color">elementName</em></code> if (and
+ only if) there is a default XML namespace. However, for nodes that
+ are not of type element (such as text nodes), you never use the
+ <code class="inline-code">N</code> prefix in the handler name, because those nodes
+ are free of the idea of XML namespaces. So for example, the handler
+ for text nodes is always just <code class="inline-code">@text</code>.</p>
+
+ <p>For more detailed information, please read <a href="ref_directive_visit.html">the reference of
+ <code>recurse</code> and <code>visit</code></a>
+ directives.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="xgui_declarative_basics.html"><span>Previous</span></a><a class="paging-arrow next" href="app.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/xgui_expose.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/xgui_expose.html b/builds/2.3.26-nightly/xgui_expose.html
new file mode 100644
index 0000000..9bfddb1
--- /dev/null
+++ b/builds/2.3.26-nightly/xgui_expose.html
@@ -0,0 +1,54 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-chapter">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Exposing XML documents - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Exposing XML documents">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/xgui_expose.html">
+<link rel="canonical" href="http://freemarker.org/docs/xgui_expose.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui.html"><span itemprop="name">XML Processing Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui_expose.html"><span itemprop="name">Exposing XML documents</span></a></li></ul><div class="bookm
arks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","XML Processing Guide","Exposing XML documents"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="xgui_preface.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_expose_dom.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-chapter" id="xgui_expose" itemprop="headline">Exposing XML documents</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Section Contents</div>
+<ul><li><a class="page-menu-link" href="xgui_expose_dom.html" data-menu-target="xgui_expose_dom">The DOM tree</a></li><li><a class="page-menu-link" href="xgui_expose_put.html" data-menu-target="xgui_expose_put">Putting the XML into the data-model</a></li></ul> </div><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="xgui_preface.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_expose_dom.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/xgui_expose_dom.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/xgui_expose_dom.html b/builds/2.3.26-nightly/xgui_expose_dom.html
new file mode 100644
index 0000000..d7b6fc5
--- /dev/null
+++ b/builds/2.3.26-nightly/xgui_expose_dom.html
@@ -0,0 +1,173 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>The DOM tree - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="The DOM tree">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/xgui_expose_dom.html">
+<link rel="canonical" href="http://freemarker.org/docs/xgui_expose_dom.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui.html"><span itemprop="name">XML Processing Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui_expose.html"><span itemprop="name">Exposing XML documents</span></a></li><li class="step-3" ite
mprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui_expose_dom.html"><span itemprop="name">The DOM tree</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","XML Processing Guide","Exposing XML documents","The DOM tree"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="xgui_expose.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_expose_put.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="xgui_expose_dom" itemprop="headline">The DOM tree</h1>
+</div></div><p>We will use this XML document for the examples:</p><a name="misc.example.bookXml"></a>
+
+<div class="code-wrapper"><pre class="code-block code-unspecified"><book>
+ <title>Test Book</title>
+ <chapter>
+ <title>Ch1</title>
+ <para>p1.1</para>
+ <para>p1.2</para>
+ <para>p1.3</para>
+ </chapter>
+ <chapter>
+ <title>Ch2</title>
+ <para>p2.1</para>
+ <para>p2.2</para>
+ </chapter>
+</book></pre></div><p>W3C DOM models an XML document as a tree of nodes. The node tree
+ of the above XML can be visualized as:</p>
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">document
+ |
+ +- element book
+ |
+ +- text "\n "
+ |
+ +- element title
+ | |
+ | +- text "Test Book"
+ |
+ +- text "\n "
+ |
+ +- element chapter
+ | |
+ | +- text "\n "
+ | |
+ | +- element title
+ | | |
+ | | +- text "Ch1"
+ | |
+ | +- text "\n "
+ | |
+ | +- element para
+ | | |
+ | | +- text "p1.1"
+ | |
+ | +- text "\n "
+ | |
+ | +- element para
+ | | |
+ | | +- text "p1.2"
+ | |
+ | +- text "\n "
+ | |
+ | +- element para
+ | |
+ | +- text "p1.3"
+ |
+ +- element
+ |
+ +- text "\n "
+ |
+ +- element title
+ | |
+ | +- text "Ch2"
+ |
+ +- text "\n "
+ |
+ +- element para
+ | |
+ | +- text "p2.1"
+ |
+ +- text "\n "
+ |
+ +- element para
+ |
+ +- text "p2.2"</pre></div><p>Note that the disturbing <code class="inline-code">"\n��"</code>-s are the
+ line-breaks (indicated here with <code class="inline-code">\n</code>, an escape
+ sequence used in FTL string literals) and the indentation spaces
+ between the tags.</p><p>Notes on the DOM related terminology:</p><ul>
+ <li>
+ <p>The topmost node of a tree is called the <strong>root</strong>. In the case of XML documents, it is
+ always the "document" node, and not the top-most
+ element (<code class="inline-code">book</code> in this example).</p>
+ </li>
+
+ <li>
+ <p>We say that node B is the <strong>child</strong> of node A, if B is the
+ <em>immediate</em> descendant of A. For example, the
+ two <code class="inline-code">chapter</code> element nodes are the children of
+ the <code class="inline-code">book</code> element node, but the
+ <code class="inline-code">para</code> element nodes are not.</p>
+ </li>
+
+ <li>
+ <p>We say that node A is the <strong>parent</strong> of node B, if A is the
+ <em>immediate</em> ascendant of node B, that is, if B
+ is the children of A. For example, the <code class="inline-code">book</code>
+ element node is the parent of the two <code class="inline-code">chapter</code>
+ element nodes, but it is not the parent of the
+ <code class="inline-code">para</code> element nodes.</p>
+ </li>
+
+ <li>
+ <p>There are several kind of components that can occur in XML
+ documents, such as elements, text, comments, processing
+ instructions, etc. All such components are nodes in the DOM tree,
+ so there are element nodes, text nodes, comment nodes, etc. In
+ principle, the attributes of elements are also nodes in the tree
+ -- they are the children of the element --, but still, usually we
+ (and other XML related technologies) exclude them of element
+ children. So basically they don't count as children nodes.</p>
+ </li>
+ </ul><p>The programmer drops the document node of the DOM tree into the
+ FreeMarker data-model, and then the template author can walk the DOM
+ tree using that variable as the starting-point.</p><p>The DOM nodes in FTL correspond to <strong>node
+ variables</strong>. This is a variable type, similarly to type
+ string, number, hash, etc. Node variable type makes it possible for
+ FreeMarker to get the parent node and the child nodes of a node. This
+ is technically required to allow the template author to navigate
+ between the nodes, say, to use the <a href="ref_builtins_node.html">node built-ins</a> or the <a href="ref_directive_visit.html#ref.directive.visit"><code>visit</code></a> and
+ <a href="ref_directive_visit.html#ref.directive.recurse"><code>recurse</code></a>
+ directives; we will show the usage of these in the further
+ chapters.</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="xgui_expose.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_expose_put.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/xgui_expose_put.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/xgui_expose_put.html b/builds/2.3.26-nightly/xgui_expose_put.html
new file mode 100644
index 0000000..5c1df21
--- /dev/null
+++ b/builds/2.3.26-nightly/xgui_expose_put.html
@@ -0,0 +1,83 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Putting the XML into the data-model - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Putting the XML into the data-model">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/xgui_expose_put.html">
+<link rel="canonical" href="http://freemarker.org/docs/xgui_expose_put.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui.html"><span itemprop="name">XML Processing Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui_expose.html"><span itemprop="name">Exposing XML documents</span></a></li><li class="step-3" ite
mprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui_expose_put.html"><span itemprop="name">Putting the XML into the data-model</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","XML Processing Guide","Exposing XML documents","Putting the XML into the data-model"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="xgui_expose_dom.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_imperative.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="xgui_expose_put" itemprop="headline">Putting the XML into the data-model</h1>
+</div></div> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This section is for programmers.</p>
+ </div>
+<p>It's easy to create a simple program to try the examples. Just
+ replace the "Create a data-model" part of <a href="pgui_quickstart_all.html">the example of Programmer's Guide
+ Quickstart</a> with this:</p>
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">/* Create a data-model */
+Map root = new HashMap();
+root.put(
+ "doc",
+ freemarker.ext.dom.NodeModel.parse(new File("<em>the/path/of/the.xml</em>")));</pre></div><p>and then you have a program that outputs the result of the XML
+ transformation to the standard output (usually the terminal
+ screen).</p><p>Notes:</p><ul>
+ <li>
+ <p>The <code class="inline-code">parse</code> method removes comment and
+ processing instruction nodes by default. See the API for more
+ details.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">NodeModel</code> also allows you to wrap
+ <code class="inline-code">org.w3c.dom.Node</code>-s directly. You may want to
+ clean up the DOM tree first with the static utility methods, such
+ as <code class="inline-code">NodeModel.simplify</code> or your own custom
+ cleanup routines.</p>
+ </li>
+ </ul><p>Note that there are tools available that you can use to generate
+ files from XML documents, so you don't have to write your own for this
+ common task. <a href="pgui_misc_ant.html">See here...</a></p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="xgui_expose_dom.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_imperative.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/xgui_imperative.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/xgui_imperative.html b/builds/2.3.26-nightly/xgui_imperative.html
new file mode 100644
index 0000000..4dc1cff
--- /dev/null
+++ b/builds/2.3.26-nightly/xgui_imperative.html
@@ -0,0 +1,54 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-chapter">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Imperative XML processing - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Imperative XML processing">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/xgui_imperative.html">
+<link rel="canonical" href="http://freemarker.org/docs/xgui_imperative.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui.html"><span itemprop="name">XML Processing Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui_imperative.html"><span itemprop="name">Imperative XML processing</span></a></li></ul><div class
="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","XML Processing Guide","Imperative XML processing"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="xgui_expose_put.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_imperative_learn.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-chapter" id="xgui_imperative" itemprop="headline">Imperative XML processing</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Section Contents</div>
+<ul><li><a class="page-menu-link" href="xgui_imperative_learn.html" data-menu-target="xgui_imperative_learn">Basics</a></li><li><a class="page-menu-link" href="xgui_imperative_formal.html" data-menu-target="xgui_imperative_formal">Details</a></li></ul> </div><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="xgui_expose_put.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_imperative_learn.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[17/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/sitemap.xml
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/sitemap.xml b/builds/2.3.26-nightly/sitemap.xml
new file mode 100644
index 0000000..ebad5a3
--- /dev/null
+++ b/builds/2.3.26-nightly/sitemap.xml
@@ -0,0 +1,525 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+ <url>
+ <loc>http://freemarker.org/docs/index.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/dgui.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/dgui_quickstart.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/dgui_quickstart_basics.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/dgui_quickstart_datamodel.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/dgui_quickstart_template.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/dgui_datamodel.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/dgui_datamodel_basics.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/dgui_datamodel_types.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/dgui_template.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/dgui_template_overallstructure.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/dgui_template_directives.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/dgui_template_exp.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/dgui_template_valueinsertion.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/dgui_misc.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/dgui_misc_userdefdir.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/dgui_misc_var.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/dgui_misc_namespace.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/dgui_misc_autoescaping.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/dgui_misc_whitespace.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/dgui_misc_alternativesyntax.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_quickstart.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_quickstart_createconfiguration.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_quickstart_createdatamodel.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_quickstart_gettemplate.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_quickstart_merge.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_quickstart_all.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_datamodel.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_datamodel_basics.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_datamodel_scalar.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_datamodel_parent.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_datamodel_method.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_datamodel_directive.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_datamodel_node.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_datamodel_objectWrapper.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_config.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_config_basics.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_config_sharedvariables.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_config_settings.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_config_templateloading.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_config_errorhandling.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_config_templateconfigurations.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_config_outputformatsautoesc.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_config_custom_formats.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_config_incompatible_improvements.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_misc.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_misc_var.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_misc_charset.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_misc_multithreading.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_misc_beanwrapper.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_misc_logging.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_misc_servlet.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_misc_secureenv.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_misc_xml_legacy.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_misc_ant.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/pgui_misc_jythonwrapper.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_builtins.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_builtins_alphaidx.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_builtins_string.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_builtins_number.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_builtins_date.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_builtins_boolean.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_builtins_sequence.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_builtins_hash.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_builtins_node.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_builtins_loop_var.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_builtins_type_independent.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_builtins_expert.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directives.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_alphaidx.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_assign.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_attempt.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_autoesc.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_compress.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_escape.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_flush.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_ftl.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_function.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_global.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_if.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_import.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_include.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_list.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_local.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_macro.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_noautoesc.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_noparse.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_nt.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_outputformat.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_setting.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_stop.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_switch.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_t.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_userDefined.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_directive_visit.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_specvar.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_reservednames.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_deprecated.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_depr_directive.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_depr_builtin.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_depr_oldmacro.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_depr_transform.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_depr_oldsyntax.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/ref_depr_numerical_interpolation.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/xgui.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/xgui_preface.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/xgui_expose.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/xgui_expose_dom.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/xgui_expose_put.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/xgui_imperative.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/xgui_imperative_learn.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/xgui_imperative_formal.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/xgui_declarative.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/xgui_declarative_basics.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/xgui_declarative_details.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/app.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/app_faq.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/app_versions.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_26.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_25.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_24.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_23.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_22.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_21.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_20.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_19.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_18.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_17.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_16.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_15.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_14.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_13.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_12.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_11.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_10.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_9.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_8.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_7.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_7rc1.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_6.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_5.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_4.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_3.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_2.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3_1.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_3.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_2_8.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_2_7.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_2_6.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_2_5.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_2_4.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_2_3.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_2_2.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_2_1.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_2.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_1_5.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_1_4.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_1_3.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_1_2.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_1_1.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_1.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_01.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_0.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_0RC3.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_0RC2.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/versions_2_0RC1.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/app_install.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/app_legal.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/app_license.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/app_eccn.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/gloss.html</loc>
+ </url>
+ <url>
+ <loc>http://freemarker.org/docs/alphaidx.html</loc>
+ </url>
+</urlset>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/toc.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/toc.html b/builds/2.3.26-nightly/toc.html
new file mode 100644
index 0000000..4c4f3f7
--- /dev/null
+++ b/builds/2.3.26-nightly/toc.html
@@ -0,0 +1,64 @@
+<!doctype html>
+<!--
+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.
+-->
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-book">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Apache FreeMarker Manual">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/toc.html">
+<link rel="canonical" href="http://freemarker.org/docs/toc.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489401428287">
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="toc.html" class="navigation-header">Manual</a><div class="navigation-header"></div></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.
org/ListItem"><span itemprop="name">Table of Contents</span></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = [];</script>
+ <script src="toc.js?1489401428287"></script>
+ <script src="docgen-resources/main.min.js?1489401428287"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><span class="paging-arrow disabled previous"><span>Previous</span></span><a class="paging-arrow next" href="index.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-book" id="autoid_1" itemprop="headline">Apache FreeMarker Manual <span class="subtitle productname">For Freemarker 2.3.26</span>
+</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Table of Contents</div>
+<ul><li><a class="page-menu-link" href="index.html" data-menu-target="preface">What is Apache FreeMarker?</a></li><li><a class="page-menu-link" href="dgui.html" data-menu-target="dgui">Template Author's Guide</a><ul><li><a class="page-menu-link" href="dgui_quickstart.html" data-menu-target="dgui_quickstart">Getting Started</a><ul><li><a class="page-menu-link" href="dgui_quickstart_basics.html" data-menu-target="dgui_quickstart_basics">Template + data-model = output</a></li><li><a class="page-menu-link" href="dgui_quickstart_datamodel.html" data-menu-target="dgui_quickstart_datamodel">The data-model at a glance</a></li><li><a class="page-menu-link" href="dgui_quickstart_template.html" data-menu-target="dgui_quickstart_template">The template at a glance</a></li></ul></li><li><a class="page-menu-link" href="dgui_datamodel.html" data-menu-target="dgui_datamodel">Values, Types</a><ul><li><a class="page-menu-link" href="dgui_datamodel_basics.html" data-menu-target="dgui_datamodel_basi
cs">Basics</a></li><li><a class="page-menu-link" href="dgui_datamodel_types.html" data-menu-target="dgui_datamodel_types">The types</a></li></ul></li><li><a class="page-menu-link" href="dgui_template.html" data-menu-target="dgui_template">The Template</a><ul><li><a class="page-menu-link" href="dgui_template_overallstructure.html" data-menu-target="dgui_template_overallstructure">Overall structure</a></li><li><a class="page-menu-link" href="dgui_template_directives.html" data-menu-target="dgui_template_directives">Directives</a></li><li><a class="page-menu-link" href="dgui_template_exp.html" data-menu-target="dgui_template_exp">Expressions</a></li><li><a class="page-menu-link" href="dgui_template_valueinsertion.html" data-menu-target="dgui_template_valueinsertion">Interpolations</a></li></ul></li><li><a class="page-menu-link" href="dgui_misc.html" data-menu-target="dgui_misc">Miscellaneous</a><ul><li><a class="page-menu-link" href="dgui_misc_userdefdir.html" data-menu-target="dgui_mi
sc_userdefdir">Defining your own directives</a></li><li><a class="page-menu-link" href="dgui_misc_var.html" data-menu-target="dgui_misc_var">Defining variables in the template</a></li><li><a class="page-menu-link" href="dgui_misc_namespace.html" data-menu-target="dgui_misc_namespace">Namespaces</a></li><li><a class="page-menu-link" href="dgui_misc_autoescaping.html" data-menu-target="dgui_misc_autoescaping">Auto-escaping and output formats</a></li><li><a class="page-menu-link" href="dgui_misc_whitespace.html" data-menu-target="dgui_misc_whitespace">White-space handling</a></li><li><a class="page-menu-link" href="dgui_misc_alternativesyntax.html" data-menu-target="dgui_misc_alternativesyntax">Alternative (square bracket) syntax</a></li></ul></li></ul></li><li><a class="page-menu-link" href="pgui.html" data-menu-target="pgui">Programmer's Guide</a><ul><li><a class="page-menu-link" href="pgui_quickstart.html" data-menu-target="pgui_quickstart">Getting Started</a><ul><li><a class="p
age-menu-link" href="pgui_quickstart_createconfiguration.html" data-menu-target="pgui_quickstart_createconfiguration">Create a configuration instance</a></li><li><a class="page-menu-link" href="pgui_quickstart_createdatamodel.html" data-menu-target="pgui_quickstart_createdatamodel">Create a data-model</a></li><li><a class="page-menu-link" href="pgui_quickstart_gettemplate.html" data-menu-target="pgui_quickstart_gettemplate">Get the template</a></li><li><a class="page-menu-link" href="pgui_quickstart_merge.html" data-menu-target="pgui_quickstart_merge">Merging the template with the data-model</a></li><li><a class="page-menu-link" href="pgui_quickstart_all.html" data-menu-target="pgui_quickstart_all">Putting all together</a></li></ul></li><li><a class="page-menu-link" href="pgui_datamodel.html" data-menu-target="pgui_datamodel">The Data Model</a><ul><li><a class="page-menu-link" href="pgui_datamodel_basics.html" data-menu-target="pgui_datamodel_basics">Basics</a></li><li><a class="pag
e-menu-link" href="pgui_datamodel_scalar.html" data-menu-target="pgui_datamodel_scalar">Scalars</a></li><li><a class="page-menu-link" href="pgui_datamodel_parent.html" data-menu-target="pgui_datamodel_parent">Containers</a></li><li><a class="page-menu-link" href="pgui_datamodel_method.html" data-menu-target="pgui_datamodel_method">Methods</a></li><li><a class="page-menu-link" href="pgui_datamodel_directive.html" data-menu-target="pgui_datamodel_directive">Directives</a></li><li><a class="page-menu-link" href="pgui_datamodel_node.html" data-menu-target="pgui_datamodel_node">Node variables</a></li><li><a class="page-menu-link" href="pgui_datamodel_objectWrapper.html" data-menu-target="pgui_datamodel_objectWrapper">Object wrappers</a></li></ul></li><li><a class="page-menu-link" href="pgui_config.html" data-menu-target="pgui_config">The Configuration</a><ul><li><a class="page-menu-link" href="pgui_config_basics.html" data-menu-target="pgui_config_basics">Basics</a></li><li><a class="pag
e-menu-link" href="pgui_config_sharedvariables.html" data-menu-target="pgui_config_sharedvariables">Shared variables</a></li><li><a class="page-menu-link" href="pgui_config_settings.html" data-menu-target="pgui_config_settings">Settings</a></li><li><a class="page-menu-link" href="pgui_config_templateloading.html" data-menu-target="pgui_config_templateloading">Template loading</a></li><li><a class="page-menu-link" href="pgui_config_errorhandling.html" data-menu-target="pgui_config_errorhandling">Error handling</a></li><li><a class="page-menu-link" href="pgui_config_templateconfigurations.html" data-menu-target="pgui_config_templateconfigurations">Template configurations</a></li><li><a class="page-menu-link" href="pgui_config_outputformatsautoesc.html" data-menu-target="pgui_config_outputformatsautoesc">Associating output formats with templates</a></li><li><a class="page-menu-link" href="pgui_config_custom_formats.html" data-menu-target="pgui_config_custom_formats">Custom number and d
ate/time formats</a></li><li><a class="page-menu-link" href="pgui_config_incompatible_improvements.html" data-menu-target="pgui_config_incompatible_improvements">The "incompatible improvements" setting</a></li></ul></li><li><a class="page-menu-link" href="pgui_misc.html" data-menu-target="pgui_misc">Miscellaneous</a><ul><li><a class="page-menu-link" href="pgui_misc_var.html" data-menu-target="pgui_misc_var">Variables, scopes</a></li><li><a class="page-menu-link" href="pgui_misc_charset.html" data-menu-target="pgui_misc_charset">Charset issues</a></li><li><a class="page-menu-link" href="pgui_misc_multithreading.html" data-menu-target="pgui_misc_multithreading">Multithreading</a></li><li><a class="page-menu-link" href="pgui_misc_beanwrapper.html" data-menu-target="pgui_misc_beanwrapper">Bean wrapper</a></li><li><a class="page-menu-link" href="pgui_misc_logging.html" data-menu-target="pgui_misc_logging">Logging</a></li><li><a class="page-menu-link" href="pgui_misc_servlet.htm
l" data-menu-target="pgui_misc_servlet">Using FreeMarker with servlets</a></li><li><a class="page-menu-link" href="pgui_misc_secureenv.html" data-menu-target="pgui_misc_secureenv">Configuring security policy for FreeMarker</a></li><li><a class="page-menu-link" href="pgui_misc_xml_legacy.html" data-menu-target="pgui_misc_xml_legacy">Legacy XML wrapper implementation</a></li><li><a class="page-menu-link" href="pgui_misc_ant.html" data-menu-target="pgui_misc_ant">Using FreeMarker with Ant</a></li><li><a class="page-menu-link" href="pgui_misc_jythonwrapper.html" data-menu-target="pgui_misc_jythonwrapper">Jython wrapper</a></li></ul></li></ul></li><li><a class="page-menu-link" href="ref.html" data-menu-target="ref">Template Language Reference</a><ul><li><a class="page-menu-link" href="ref_builtins.html" data-menu-target="ref_builtins">Built-in Reference</a><ul><li><a class="page-menu-link" href="ref_builtins_alphaidx.html" data-menu-target="ref_builtins_alphaidx">Alphabetical index</a></
li><li><a class="page-menu-link" href="ref_builtins_string.html" data-menu-target="ref_builtins_string">Built-ins for strings</a></li><li><a class="page-menu-link" href="ref_builtins_number.html" data-menu-target="ref_builtins_number">Built-ins for numbers</a></li><li><a class="page-menu-link" href="ref_builtins_date.html" data-menu-target="ref_builtins_date">Built-ins for date/time/date-time values</a></li><li><a class="page-menu-link" href="ref_builtins_boolean.html" data-menu-target="ref_builtins_boolean">Built-ins for booleans</a></li><li><a class="page-menu-link" href="ref_builtins_sequence.html" data-menu-target="ref_builtins_sequence">Built-ins for sequences</a></li><li><a class="page-menu-link" href="ref_builtins_hash.html" data-menu-target="ref_builtins_hash">Built-ins for hashes</a></li><li><a class="page-menu-link" href="ref_builtins_node.html" data-menu-target="ref_builtins_node">Built-ins for nodes (for XML)</a></li><li><a class="page-menu-link" href="ref_builtins_loop_
var.html" data-menu-target="ref_builtins_loop_var">Loop variable built-ins</a></li><li><a class="page-menu-link" href="ref_builtins_type_independent.html" data-menu-target="ref_builtins_type_independent">Type independent built-ins</a></li><li><a class="page-menu-link" href="ref_builtins_expert.html" data-menu-target="ref_builtins_expert">Seldom used and expert built-ins</a></li></ul></li><li><a class="page-menu-link" href="ref_directives.html" data-menu-target="ref_directives">Directive Reference</a><ul><li><a class="page-menu-link" href="ref_directive_alphaidx.html" data-menu-target="ref_directive_alphaidx">Alphabetical index</a></li><li><a class="page-menu-link" href="ref_directive_assign.html" data-menu-target="ref_directive_assign">assign</a></li><li><a class="page-menu-link" href="ref_directive_attempt.html" data-menu-target="ref_directive_attempt">attempt, recover</a></li><li><a class="page-menu-link" href="ref_directive_autoesc.html" data-menu-target="ref_directive_autoesc">a
utoesc</a></li><li><a class="page-menu-link" href="ref_directive_compress.html" data-menu-target="ref_directive_compress">compress</a></li><li><a class="page-menu-link" href="ref_directive_escape.html" data-menu-target="ref_directive_escape">escape, noescape (deprecated)</a></li><li><a class="page-menu-link" href="ref_directive_flush.html" data-menu-target="ref_directive_flush">flush</a></li><li><a class="page-menu-link" href="ref_directive_ftl.html" data-menu-target="ref_directive_ftl">ftl</a></li><li><a class="page-menu-link" href="ref_directive_function.html" data-menu-target="ref_directive_function">function, return</a></li><li><a class="page-menu-link" href="ref_directive_global.html" data-menu-target="ref_directive_global">global</a></li><li><a class="page-menu-link" href="ref_directive_if.html" data-menu-target="ref_directive_if">if, else, elseif</a></li><li><a class="page-menu-link" href="ref_directive_import.html" data-menu-target="ref_directive_import">import</a></li><li><
a class="page-menu-link" href="ref_directive_include.html" data-menu-target="ref_directive_include">include</a></li><li><a class="page-menu-link" href="ref_directive_list.html" data-menu-target="ref_directive_list">list, else, items, sep, break</a></li><li><a class="page-menu-link" href="ref_directive_local.html" data-menu-target="ref_directive_local">local</a></li><li><a class="page-menu-link" href="ref_directive_macro.html" data-menu-target="ref_directive_macro">macro, nested, return</a></li><li><a class="page-menu-link" href="ref_directive_noautoesc.html" data-menu-target="ref_directive_noautoesc">noautoesc</a></li><li><a class="page-menu-link" href="ref_directive_noparse.html" data-menu-target="ref_directive_noparse">noparse</a></li><li><a class="page-menu-link" href="ref_directive_nt.html" data-menu-target="ref_directive_nt">nt</a></li><li><a class="page-menu-link" href="ref_directive_outputformat.html" data-menu-target="ref_directive_outputformat">outputformat</a></li><li><a c
lass="page-menu-link" href="ref_directive_setting.html" data-menu-target="ref_directive_setting">setting</a></li><li><a class="page-menu-link" href="ref_directive_stop.html" data-menu-target="ref_directive_stop">stop</a></li><li><a class="page-menu-link" href="ref_directive_switch.html" data-menu-target="ref_directive_switch">switch, case, default, break</a></li><li><a class="page-menu-link" href="ref_directive_t.html" data-menu-target="ref_directive_t">t, lt, rt</a></li><li><a class="page-menu-link" href="ref_directive_userDefined.html" data-menu-target="ref_directive_userDefined">User-defined directive (<@...>)</a></li><li><a class="page-menu-link" href="ref_directive_visit.html" data-menu-target="ref_directive_visit">visit, recurse, fallback</a></li></ul></li><li><a class="page-menu-link" href="ref_specvar.html" data-menu-target="ref_specvar">Special Variable Reference</a></li><li><a class="page-menu-link" href="ref_reservednames.html" data-menu-target="ref_reservednames">R
eserved names in FTL</a></li><li><a class="page-menu-link" href="ref_deprecated.html" data-menu-target="ref_deprecated">Deprecated FTL constructs</a><ul><li><a class="page-menu-link" href="ref_depr_directive.html" data-menu-target="ref_depr_directive">List of deprecated directives</a></li><li><a class="page-menu-link" href="ref_depr_builtin.html" data-menu-target="ref_depr_builtin">List of deprecated built-ins</a></li><li><a class="page-menu-link" href="ref_depr_oldmacro.html" data-menu-target="ref_depr_oldmacro">Old-style macro and call directives</a></li><li><a class="page-menu-link" href="ref_depr_transform.html" data-menu-target="ref_depr_transform">Transform directive</a></li><li><a class="page-menu-link" href="ref_depr_oldsyntax.html" data-menu-target="ref_depr_oldsyntax">Old FTL syntax</a></li><li><a class="page-menu-link" href="ref_depr_numerical_interpolation.html" data-menu-target="ref_depr_numerical_interpolation">#{...}: Numerical interpolation</a></li></ul></li></ul></l
i><li><a class="page-menu-link" href="xgui.html" data-menu-target="xgui">XML Processing Guide</a><ul><li><a class="page-menu-link" href="xgui_preface.html" data-menu-target="xgui_preface">Preface</a></li><li><a class="page-menu-link" href="xgui_expose.html" data-menu-target="xgui_expose">Exposing XML documents</a><ul><li><a class="page-menu-link" href="xgui_expose_dom.html" data-menu-target="xgui_expose_dom">The DOM tree</a></li><li><a class="page-menu-link" href="xgui_expose_put.html" data-menu-target="xgui_expose_put">Putting the XML into the data-model</a></li></ul></li><li><a class="page-menu-link" href="xgui_imperative.html" data-menu-target="xgui_imperative">Imperative XML processing</a><ul><li><a class="page-menu-link" href="xgui_imperative_learn.html" data-menu-target="xgui_imperative_learn">Basics</a></li><li><a class="page-menu-link" href="xgui_imperative_formal.html" data-menu-target="xgui_imperative_formal">Details</a></li></ul></li><li><a class="page-menu-link" href="xg
ui_declarative.html" data-menu-target="xgui_declarative">Declarative XML processing</a><ul><li><a class="page-menu-link" href="xgui_declarative_basics.html" data-menu-target="xgui_declarative_basics">Basics</a></li><li><a class="page-menu-link" href="xgui_declarative_details.html" data-menu-target="xgui_declarative_details">Details</a></li></ul></li></ul></li><li><a class="page-menu-link" href="app.html" data-menu-target="app">Appendixes</a><ul><li><a class="page-menu-link" href="app_faq.html" data-menu-target="app_faq">FAQ</a></li><li><a class="page-menu-link" href="app_versions.html" data-menu-target="app_versions">Version history</a><ul><li><a class="page-menu-link" href="versions_2_3_26.html" data-menu-target="versions_2_3_26">2.3.26 (incubating at Apache)</a></li><li><a class="page-menu-link" href="versions_2_3_25.html" data-menu-target="versions_2_3_25">2.3.25 (incubating at Apache)</a></li><li><a class="page-menu-link" href="versions_2_3_24.html" data-menu-target="versions_2_
3_24">2.3.24 (incubating at Apache)</a></li><li><a class="page-menu-link" href="versions_2_3_23.html" data-menu-target="versions_2_3_23">2.3.23</a></li><li><a class="page-menu-link" href="versions_2_3_22.html" data-menu-target="versions_2_3_22">2.3.22</a></li><li><a class="page-menu-link" href="versions_2_3_21.html" data-menu-target="versions_2_3_21">2.3.21</a></li><li><a class="page-menu-link" href="versions_2_3_20.html" data-menu-target="versions_2_3_20">2.3.20</a></li><li><a class="page-menu-link" href="versions_2_3_19.html" data-menu-target="versions_2_3_19">2.3.19</a></li><li><a class="page-menu-link" href="versions_2_3_18.html" data-menu-target="versions_2_3_18">2.3.18</a></li><li><a class="page-menu-link" href="versions_2_3_17.html" data-menu-target="versions_2_3_17">2.3.17</a></li><li><a class="page-menu-link" href="versions_2_3_16.html" data-menu-target="versions_2_3_16">2.3.16</a></li><li><a class="page-menu-link" href="versions_2_3_15.html" data-menu-target="versions_2_3_
15">2.3.15</a></li><li><a class="page-menu-link" href="versions_2_3_14.html" data-menu-target="versions_2_3_14">2.3.14</a></li><li><a class="page-menu-link" href="versions_2_3_13.html" data-menu-target="versions_2_3_13">2.3.13</a></li><li><a class="page-menu-link" href="versions_2_3_12.html" data-menu-target="versions_2_3_12">2.3.12</a></li><li><a class="page-menu-link" href="versions_2_3_11.html" data-menu-target="versions_2_3_11">2.3.11</a></li><li><a class="page-menu-link" href="versions_2_3_10.html" data-menu-target="versions_2_3_10">2.3.10</a></li><li><a class="page-menu-link" href="versions_2_3_9.html" data-menu-target="versions_2_3_9">2.3.9</a></li><li><a class="page-menu-link" href="versions_2_3_8.html" data-menu-target="versions_2_3_8">2.3.8</a></li><li><a class="page-menu-link" href="versions_2_3_7.html" data-menu-target="versions_2_3_7">2.3.7</a></li><li><a class="page-menu-link" href="versions_2_3_7rc1.html" data-menu-target="versions_2_3_7rc1">2.3.7 RC1</a></li><li><a c
lass="page-menu-link" href="versions_2_3_6.html" data-menu-target="versions_2_3_6">2.3.6</a></li><li><a class="page-menu-link" href="versions_2_3_5.html" data-menu-target="versions_2_3_5">2.3.5</a></li><li><a class="page-menu-link" href="versions_2_3_4.html" data-menu-target="versions_2_3_4">2.3.4</a></li><li><a class="page-menu-link" href="versions_2_3_3.html" data-menu-target="versions_2_3_3">2.3.3</a></li><li><a class="page-menu-link" href="versions_2_3_2.html" data-menu-target="versions_2_3_2">2.3.2</a></li><li><a class="page-menu-link" href="versions_2_3_1.html" data-menu-target="versions_2_3_1">2.3.1</a></li><li><a class="page-menu-link" href="versions_2_3.html" data-menu-target="versions_2_3">2.3</a></li><li><a class="page-menu-link" href="versions_2_2_8.html" data-menu-target="versions_2_2_8">2.2.8</a></li><li><a class="page-menu-link" href="versions_2_2_7.html" data-menu-target="versions_2_2_7">2.2.7</a></li><li><a class="page-menu-link" href="versions_2_2_6.html" data-menu
-target="versions_2_2_6">2.2.6</a></li><li><a class="page-menu-link" href="versions_2_2_5.html" data-menu-target="versions_2_2_5">2.2.5</a></li><li><a class="page-menu-link" href="versions_2_2_4.html" data-menu-target="versions_2_2_4">2.2.4</a></li><li><a class="page-menu-link" href="versions_2_2_3.html" data-menu-target="versions_2_2_3">2.2.3</a></li><li><a class="page-menu-link" href="versions_2_2_2.html" data-menu-target="versions_2_2_2">2.2.2</a></li><li><a class="page-menu-link" href="versions_2_2_1.html" data-menu-target="versions_2_2_1">2.2.1</a></li><li><a class="page-menu-link" href="versions_2_2.html" data-menu-target="versions_2_2">2.2</a></li><li><a class="page-menu-link" href="versions_2_1_5.html" data-menu-target="versions_2_1_5">2.1.5</a></li><li><a class="page-menu-link" href="versions_2_1_4.html" data-menu-target="versions_2_1_4">2.1.4</a></li><li><a class="page-menu-link" href="versions_2_1_3.html" data-menu-target="versions_2_1_3">2.1.3</a></li><li><a class="page-
menu-link" href="versions_2_1_2.html" data-menu-target="versions_2_1_2">2.1.2</a></li><li><a class="page-menu-link" href="versions_2_1_1.html" data-menu-target="versions_2_1_1">2.1.1</a></li><li><a class="page-menu-link" href="versions_2_1.html" data-menu-target="versions_2_1">2.1</a></li><li><a class="page-menu-link" href="versions_2_01.html" data-menu-target="versions_2_01">2.01</a></li><li><a class="page-menu-link" href="versions_2_0.html" data-menu-target="versions_2_0">2.0</a></li><li><a class="page-menu-link" href="versions_2_0RC3.html" data-menu-target="versions_2_0RC3">2.0 RC3</a></li><li><a class="page-menu-link" href="versions_2_0RC2.html" data-menu-target="versions_2_0RC2">2.0 RC2</a></li><li><a class="page-menu-link" href="versions_2_0RC1.html" data-menu-target="versions_2_0RC1">2.0 RC1</a></li></ul></li><li><a class="page-menu-link" href="app_install.html" data-menu-target="app_install">Installing FreeMarker</a></li><li><a class="page-menu-link" href="app_legal.html" da
ta-menu-target="app_legal">Legal</a><ul><li><a class="page-menu-link" href="app_license.html" data-menu-target="app_license">License</a></li><li><a class="page-menu-link" href="app_eccn.html" data-menu-target="app_eccn">Export Control</a></li></ul></li></ul></li><li><a class="page-menu-link" href="gloss.html" data-menu-target="gloss">Glossary</a></li><li><a class="page-menu-link" href="alphaidx.html" data-menu-target="alphaidx">Alphabetical Index</a></li></ul> </div><div class="bottom-pagers-wrapper"><div class="pagers bottom"><span class="paging-arrow disabled previous"><span>Previous</span></span><a class="paging-arrow next" href="index.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:37:08Z" title="Monday, March 13, 2017 10:37:08 AM GMT">2017-03-13 10:37:08 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[50/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
2.3.26-nightly docs preview
Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/commit/52c070a9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/tree/52c070a9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/diff/52c070a9
Branch: refs/heads/asf-site
Commit: 52c070a951f4a78126b9dc8420a6ac32d38d5c7e
Parents: 127455e
Author: ddekany <dd...@apache.org>
Authored: Mon Mar 13 11:57:22 2017 +0100
Committer: ddekany <dd...@apache.org>
Committed: Mon Mar 13 11:57:22 2017 +0100
----------------------------------------------------------------------
builds/2.3.26-nightly/alphaidx.html | 1695 ++++++
builds/2.3.26-nightly/app.html | 54 +
builds/2.3.26-nightly/app_eccn.html | 56 +
builds/2.3.26-nightly/app_faq.html | 1797 +++++++
builds/2.3.26-nightly/app_install.html | 97 +
builds/2.3.26-nightly/app_legal.html | 54 +
builds/2.3.26-nightly/app_license.html | 275 +
builds/2.3.26-nightly/app_versions.html | 54 +
builds/2.3.26-nightly/detailed-toc.html | 80 +
builds/2.3.26-nightly/dgui.html | 54 +
builds/2.3.26-nightly/dgui_datamodel.html | 54 +
.../2.3.26-nightly/dgui_datamodel_basics.html | 230 +
builds/2.3.26-nightly/dgui_datamodel_types.html | 512 ++
builds/2.3.26-nightly/dgui_misc.html | 54 +
.../dgui_misc_alternativesyntax.html | 119 +
.../2.3.26-nightly/dgui_misc_autoescaping.html | 718 +++
builds/2.3.26-nightly/dgui_misc_namespace.html | 315 ++
builds/2.3.26-nightly/dgui_misc_userdefdir.html | 554 ++
builds/2.3.26-nightly/dgui_misc_var.html | 197 +
builds/2.3.26-nightly/dgui_misc_whitespace.html | 296 ++
builds/2.3.26-nightly/dgui_quickstart.html | 57 +
.../2.3.26-nightly/dgui_quickstart_basics.html | 138 +
.../dgui_quickstart_datamodel.html | 199 +
.../dgui_quickstart_template.html | 707 +++
builds/2.3.26-nightly/dgui_template.html | 60 +
.../dgui_template_directives.html | 136 +
builds/2.3.26-nightly/dgui_template_exp.html | 2331 +++++++++
.../dgui_template_overallstructure.html | 131 +
.../dgui_template_valueinsertion.html | 310 ++
.../docgen-resources/docgen.min.css | 1 +
.../docgen-resources/fonts/NOTICE | 20 +
.../docgen-resources/fonts/icomoon.eot | Bin 0 -> 4220 bytes
.../docgen-resources/fonts/icomoon.svg | 29 +
.../docgen-resources/fonts/icomoon.ttf | Bin 0 -> 4056 bytes
.../docgen-resources/fonts/icomoon.woff | Bin 0 -> 4132 bytes
.../docgen-resources/img/callouts/1.gif | Bin 0 -> 968 bytes
.../docgen-resources/img/callouts/10.gif | Bin 0 -> 968 bytes
.../docgen-resources/img/callouts/11.gif | Bin 0 -> 244 bytes
.../docgen-resources/img/callouts/12.gif | Bin 0 -> 244 bytes
.../docgen-resources/img/callouts/13.gif | Bin 0 -> 244 bytes
.../docgen-resources/img/callouts/14.gif | Bin 0 -> 244 bytes
.../docgen-resources/img/callouts/2.gif | Bin 0 -> 968 bytes
.../docgen-resources/img/callouts/3.gif | Bin 0 -> 968 bytes
.../docgen-resources/img/callouts/4.gif | Bin 0 -> 968 bytes
.../docgen-resources/img/callouts/5.gif | Bin 0 -> 968 bytes
.../docgen-resources/img/callouts/6.gif | Bin 0 -> 968 bytes
.../docgen-resources/img/callouts/7.gif | Bin 0 -> 968 bytes
.../docgen-resources/img/callouts/8.gif | Bin 0 -> 968 bytes
.../docgen-resources/img/callouts/9.gif | Bin 0 -> 968 bytes
.../docgen-resources/img/patterned-bg.png | Bin 0 -> 4565 bytes
.../2.3.26-nightly/docgen-resources/img/xxe.png | Bin 0 -> 2649 bytes
.../2.3.26-nightly/docgen-resources/main.min.js | 1 +
builds/2.3.26-nightly/eclipse-toc.xml | 698 +++
builds/2.3.26-nightly/favicon.png | Bin 0 -> 1291 bytes
builds/2.3.26-nightly/figures/model2sketch.png | Bin 0 -> 21425 bytes
builds/2.3.26-nightly/figures/overview.png | Bin 0 -> 11837 bytes
builds/2.3.26-nightly/figures/tree.png | Bin 0 -> 4699 bytes
builds/2.3.26-nightly/gloss.html | 770 +++
builds/2.3.26-nightly/index.html | 55 +
builds/2.3.26-nightly/logo.png | Bin 0 -> 10134 bytes
builds/2.3.26-nightly/pgui.html | 54 +
builds/2.3.26-nightly/pgui_config.html | 55 +
builds/2.3.26-nightly/pgui_config_basics.html | 75 +
.../pgui_config_custom_formats.html | 700 +++
.../pgui_config_errorhandling.html | 391 ++
.../pgui_config_incompatible_improvements.html | 173 +
.../pgui_config_outputformatsautoesc.html | 210 +
builds/2.3.26-nightly/pgui_config_settings.html | 378 ++
.../pgui_config_sharedvariables.html | 143 +
.../pgui_config_templateconfigurations.html | 314 ++
.../pgui_config_templateloading.html | 364 ++
builds/2.3.26-nightly/pgui_datamodel.html | 55 +
.../2.3.26-nightly/pgui_datamodel_basics.html | 105 +
.../pgui_datamodel_directive.html | 411 ++
.../2.3.26-nightly/pgui_datamodel_method.html | 90 +
builds/2.3.26-nightly/pgui_datamodel_node.html | 123 +
.../pgui_datamodel_objectWrapper.html | 412 ++
.../2.3.26-nightly/pgui_datamodel_parent.html | 129 +
.../2.3.26-nightly/pgui_datamodel_scalar.html | 154 +
builds/2.3.26-nightly/pgui_misc.html | 55 +
builds/2.3.26-nightly/pgui_misc_ant.html | 111 +
.../2.3.26-nightly/pgui_misc_beanwrapper.html | 666 +++
builds/2.3.26-nightly/pgui_misc_charset.html | 172 +
.../2.3.26-nightly/pgui_misc_jythonwrapper.html | 133 +
builds/2.3.26-nightly/pgui_misc_logging.html | 239 +
.../pgui_misc_multithreading.html | 73 +
builds/2.3.26-nightly/pgui_misc_secureenv.html | 85 +
builds/2.3.26-nightly/pgui_misc_servlet.html | 691 +++
builds/2.3.26-nightly/pgui_misc_var.html | 113 +
builds/2.3.26-nightly/pgui_misc_xml_legacy.html | 505 ++
builds/2.3.26-nightly/pgui_quickstart.html | 54 +
builds/2.3.26-nightly/pgui_quickstart_all.html | 142 +
.../pgui_quickstart_createconfiguration.html | 100 +
.../pgui_quickstart_createdatamodel.html | 170 +
.../pgui_quickstart_gettemplate.html | 70 +
.../2.3.26-nightly/pgui_quickstart_merge.html | 78 +
builds/2.3.26-nightly/ref.html | 54 +
builds/2.3.26-nightly/ref_builtins.html | 54 +
.../2.3.26-nightly/ref_builtins_alphaidx.html | 503 ++
builds/2.3.26-nightly/ref_builtins_boolean.html | 229 +
builds/2.3.26-nightly/ref_builtins_date.html | 545 ++
builds/2.3.26-nightly/ref_builtins_expert.html | 762 +++
builds/2.3.26-nightly/ref_builtins_hash.html | 142 +
.../2.3.26-nightly/ref_builtins_loop_var.html | 526 ++
builds/2.3.26-nightly/ref_builtins_node.html | 287 +
builds/2.3.26-nightly/ref_builtins_number.html | 797 +++
.../2.3.26-nightly/ref_builtins_sequence.html | 577 ++
builds/2.3.26-nightly/ref_builtins_string.html | 2374 +++++++++
.../ref_builtins_type_independent.html | 210 +
builds/2.3.26-nightly/ref_depr_builtin.html | 105 +
builds/2.3.26-nightly/ref_depr_directive.html | 91 +
.../ref_depr_numerical_interpolation.html | 135 +
builds/2.3.26-nightly/ref_depr_oldmacro.html | 198 +
builds/2.3.26-nightly/ref_depr_oldsyntax.html | 131 +
builds/2.3.26-nightly/ref_depr_transform.html | 163 +
builds/2.3.26-nightly/ref_deprecated.html | 54 +
.../2.3.26-nightly/ref_directive_alphaidx.html | 228 +
builds/2.3.26-nightly/ref_directive_assign.html | 212 +
.../2.3.26-nightly/ref_directive_attempt.html | 206 +
.../2.3.26-nightly/ref_directive_autoesc.html | 125 +
.../2.3.26-nightly/ref_directive_compress.html | 107 +
builds/2.3.26-nightly/ref_directive_escape.html | 232 +
builds/2.3.26-nightly/ref_directive_flush.html | 96 +
builds/2.3.26-nightly/ref_directive_ftl.html | 285 +
.../2.3.26-nightly/ref_directive_function.html | 173 +
builds/2.3.26-nightly/ref_directive_global.html | 136 +
builds/2.3.26-nightly/ref_directive_if.html | 196 +
builds/2.3.26-nightly/ref_directive_import.html | 153 +
.../2.3.26-nightly/ref_directive_include.html | 449 ++
builds/2.3.26-nightly/ref_directive_list.html | 638 +++
builds/2.3.26-nightly/ref_directive_local.html | 114 +
builds/2.3.26-nightly/ref_directive_macro.html | 450 ++
.../2.3.26-nightly/ref_directive_noautoesc.html | 123 +
.../2.3.26-nightly/ref_directive_noparse.html | 105 +
builds/2.3.26-nightly/ref_directive_nt.html | 80 +
.../ref_directive_outputformat.html | 194 +
.../2.3.26-nightly/ref_directive_setting.html | 478 ++
builds/2.3.26-nightly/ref_directive_stop.html | 96 +
builds/2.3.26-nightly/ref_directive_switch.html | 162 +
builds/2.3.26-nightly/ref_directive_t.html | 149 +
.../ref_directive_userDefined.html | 297 ++
builds/2.3.26-nightly/ref_directive_visit.html | 384 ++
builds/2.3.26-nightly/ref_directives.html | 54 +
builds/2.3.26-nightly/ref_reservednames.html | 96 +
builds/2.3.26-nightly/ref_specvar.html | 290 +
builds/2.3.26-nightly/search-results.html | 65 +
builds/2.3.26-nightly/sitemap.xml | 525 ++
builds/2.3.26-nightly/toc.html | 64 +
builds/2.3.26-nightly/toc.js | 4945 ++++++++++++++++++
builds/2.3.26-nightly/versions_2_0.html | 147 +
builds/2.3.26-nightly/versions_2_01.html | 59 +
builds/2.3.26-nightly/versions_2_0RC1.html | 268 +
builds/2.3.26-nightly/versions_2_0RC2.html | 219 +
builds/2.3.26-nightly/versions_2_0RC3.html | 138 +
builds/2.3.26-nightly/versions_2_1.html | 539 ++
builds/2.3.26-nightly/versions_2_1_1.html | 125 +
builds/2.3.26-nightly/versions_2_1_2.html | 130 +
builds/2.3.26-nightly/versions_2_1_3.html | 94 +
builds/2.3.26-nightly/versions_2_1_4.html | 73 +
builds/2.3.26-nightly/versions_2_1_5.html | 88 +
builds/2.3.26-nightly/versions_2_2.html | 1107 ++++
builds/2.3.26-nightly/versions_2_2_1.html | 126 +
builds/2.3.26-nightly/versions_2_2_2.html | 74 +
builds/2.3.26-nightly/versions_2_2_3.html | 106 +
builds/2.3.26-nightly/versions_2_2_4.html | 103 +
builds/2.3.26-nightly/versions_2_2_5.html | 68 +
builds/2.3.26-nightly/versions_2_2_6.html | 144 +
builds/2.3.26-nightly/versions_2_2_7.html | 70 +
builds/2.3.26-nightly/versions_2_2_8.html | 112 +
builds/2.3.26-nightly/versions_2_3.html | 1629 ++++++
builds/2.3.26-nightly/versions_2_3_1.html | 352 ++
builds/2.3.26-nightly/versions_2_3_10.html | 116 +
builds/2.3.26-nightly/versions_2_3_11.html | 226 +
builds/2.3.26-nightly/versions_2_3_12.html | 88 +
builds/2.3.26-nightly/versions_2_3_13.html | 125 +
builds/2.3.26-nightly/versions_2_3_14.html | 136 +
builds/2.3.26-nightly/versions_2_3_15.html | 115 +
builds/2.3.26-nightly/versions_2_3_16.html | 135 +
builds/2.3.26-nightly/versions_2_3_17.html | 331 ++
builds/2.3.26-nightly/versions_2_3_18.html | 87 +
builds/2.3.26-nightly/versions_2_3_19.html | 236 +
builds/2.3.26-nightly/versions_2_3_2.html | 77 +
builds/2.3.26-nightly/versions_2_3_20.html | 691 +++
builds/2.3.26-nightly/versions_2_3_21.html | 1419 +++++
builds/2.3.26-nightly/versions_2_3_22.html | 1197 +++++
builds/2.3.26-nightly/versions_2_3_23.html | 423 ++
builds/2.3.26-nightly/versions_2_3_24.html | 925 ++++
builds/2.3.26-nightly/versions_2_3_25.html | 228 +
builds/2.3.26-nightly/versions_2_3_26.html | 297 ++
builds/2.3.26-nightly/versions_2_3_3.html | 223 +
builds/2.3.26-nightly/versions_2_3_4.html | 121 +
builds/2.3.26-nightly/versions_2_3_5.html | 162 +
builds/2.3.26-nightly/versions_2_3_6.html | 68 +
builds/2.3.26-nightly/versions_2_3_7.html | 172 +
builds/2.3.26-nightly/versions_2_3_7rc1.html | 129 +
builds/2.3.26-nightly/versions_2_3_8.html | 98 +
builds/2.3.26-nightly/versions_2_3_9.html | 119 +
builds/2.3.26-nightly/xgui.html | 54 +
builds/2.3.26-nightly/xgui_declarative.html | 54 +
.../2.3.26-nightly/xgui_declarative_basics.html | 198 +
.../xgui_declarative_details.html | 220 +
builds/2.3.26-nightly/xgui_expose.html | 54 +
builds/2.3.26-nightly/xgui_expose_dom.html | 173 +
builds/2.3.26-nightly/xgui_expose_put.html | 83 +
builds/2.3.26-nightly/xgui_imperative.html | 54 +
.../2.3.26-nightly/xgui_imperative_formal.html | 545 ++
.../2.3.26-nightly/xgui_imperative_learn.html | 656 +++
builds/2.3.26-nightly/xgui_preface.html | 74 +
208 files changed, 56425 insertions(+)
----------------------------------------------------------------------
[29/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_quickstart_all.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_quickstart_all.html b/builds/2.3.26-nightly/pgui_quickstart_all.html
new file mode 100644
index 0000000..608bead
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_quickstart_all.html
@@ -0,0 +1,142 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Putting all together - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Putting all together">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_quickstart_all.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_quickstart_all.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_quickstart.html"><span itemprop="name">Getting Started</span></a></li><li class="step-3" item
prop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_quickstart_all.html"><span itemprop="name">Putting all together</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","Getting Started","Putting all together"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_quickstart_merge.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_datamodel.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_quickstart_all" itemprop="headline">Putting all together</h1>
+</div></div><p>This is a working source file assembled from the previous
+ fragments. Don't forget to put <code class="inline-code">freemarker.jar</code> into
+ the <code class="inline-code">CLASSPATH</code>.</p>
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">import freemarker.template.*;
+import java.util.*;
+import java.io.*;
+
+public class Test {
+
+ public static void main(String[] args) throws Exception {
+
+ /* ------------------------------------------------------------------------ */
+ /* You should do this ONLY ONCE in the whole application life-cycle: */
+
+ /* Create and adjust the configuration singleton */
+ Configuration cfg = new Configuration(Configuration.VERSION_2_3_25);
+ cfg.setDirectoryForTemplateLoading(new File("<em>/where/you/store/templates</em>"));
+ cfg.setDefaultEncoding("UTF-8");
+ cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
+ cfg.setLogTemplateExceptions(false);
+
+ /* ------------------------------------------------------------------------ */
+ /* You usually do these for MULTIPLE TIMES in the application life-cycle: */
+
+ /* Create a data-model */
+ Map root = new HashMap();
+ root.put("user", "Big Joe");
+ Product latest = new Product();
+ latest.setUrl("products/greenmouse.html");
+ latest.setName("green mouse");
+ root.put("latestProduct", latest);
+
+ /* Get the template (uses cache internally) */
+ Template temp = cfg.getTemplate("test.ftlh");
+
+ /* Merge data-model with template */
+ Writer out = new OutputStreamWriter(System.out);
+ temp.process(root, out);
+ // Note: Depending on what `out` is, you may need to call `out.close()`.
+ // This is usually the case for file output, but not for servlet output.
+ }
+}</pre></div> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>I have suppressed the exceptions for the sake of simplicity.
+ Don't do it in real products.</p>
+ </div>
+<p>For the sake completeness, here's the the Product class used in
+ the data model:</p>
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">/**
+ * Product bean; note that it must be a public class!
+ */
+public class Product {
+
+ private String url;
+ private String name;
+
+ // As per the JavaBeans spec., this defines the "url" bean property
+ // It must be public!
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ // As per the JavaBean spec., this defines the "name" bean property
+ // It must be public!
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+}</pre></div><p>and the template:</p>
+
+<div class="code-wrapper"><pre class="code-block code-template"><html>
+<head>
+ <title>Welcome!</title>
+</head>
+<body>
+ <h1>Welcome ${user}!</h1>
+ <p>Our latest product:
+ <a href="${latestProduct.url}">${latestProduct.name}</a>!
+</body>
+</html></pre></div><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_quickstart_merge.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_datamodel.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_quickstart_createconfiguration.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_quickstart_createconfiguration.html b/builds/2.3.26-nightly/pgui_quickstart_createconfiguration.html
new file mode 100644
index 0000000..df95747
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_quickstart_createconfiguration.html
@@ -0,0 +1,100 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Create a configuration instance - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Create a configuration instance">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_quickstart_createconfiguration.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_quickstart_createconfiguration.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_quickstart.html"><span itemprop="name">Getting Started</span></a></li><li class="step-3" item
prop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_quickstart_createconfiguration.html"><span itemprop="name">Create a configuration instance</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","Getting Started","Create a configuration instance"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_quickstart.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_quickstart_createdatamodel.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_quickstart_createconfiguration" itemprop="headline">Create a configuration instance</h1>
+</div></div><p>First you have to create a
+ <code class="inline-code">freemarker.template.Configuration</code> instance and
+ adjust its settings. A <code class="inline-code">Configuration</code> instance is
+ the central place to store the application level settings of
+ FreeMarker. Also, it deals with the creation and
+ <em>caching</em> of pre-parsed templates (i.e.,
+ <code class="inline-code">Template</code> objects).</p><p>Normally you will <em>do this only once</em> at the
+ beginning of the application (possibly servlet) life-cycle:</p>
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">// Create your Configuration instance, and specify if up to what FreeMarker
+// version (here 2.3.25) do you want to apply the fixes that are not 100%
+// backward-compatible. See the Configuration JavaDoc for details.
+Configuration cfg = new Configuration(Configuration.VERSION_2_3_25);
+
+// Specify the source where the template files come from. Here I set a
+// plain directory for it, but non-file-system sources are possible too:
+cfg.setDirectoryForTemplateLoading(new File("<em>/where/you/store/templates</em>"));
+
+// Set the preferred charset template files are stored in. UTF-8 is
+// a good choice in most applications:
+cfg.setDefaultEncoding("UTF-8");
+
+// Sets how errors will appear.
+// During web page *development* TemplateExceptionHandler.HTML_DEBUG_HANDLER is better.
+cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
+
+// Don't log exceptions inside FreeMarker that it will thrown at you anyway:
+cfg.setLogTemplateExceptions(false);</pre></div><p>From now you should use this <em>single</em>
+ configuration instance (i.e., its a singleton). Note however that if a
+ system has multiple independent components that use FreeMarker, then
+ of course they will use their own private
+ <code class="inline-code">Configuration</code> instances.</p> <div class="callout warning">
+ <strong class="callout-label">Warning!</strong>
+
+ <p>Do not needlessly re-create <code class="inline-code">Configuration</code>
+ instances; it's expensive, among others because you lose the
+ template cache. <code class="inline-code">Configuration</code> instances meant to
+ be application-level singletons.</p>
+ </div>
+<p>In multi-threaded applications (like Web sites) the settings in
+ the <code class="inline-code">Configuration</code> instance must not be modified
+ anymore after this point. Thus it can be treated as "effectively
+ immutable" object, so you can continue with <em>safe
+ publishing</em> techniques (see JSR 133 and related literature)
+ to make the instance available for other threads. Like, publish the
+ instance through a final or volatile filed, or through a thread-safe
+ IoC container (like the one provided by Spring).
+ <code class="inline-code">Configuration</code> methods that don't deal with
+ modifying settings are thread-safe.</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_quickstart.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_quickstart_createdatamodel.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_quickstart_createdatamodel.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_quickstart_createdatamodel.html b/builds/2.3.26-nightly/pgui_quickstart_createdatamodel.html
new file mode 100644
index 0000000..1aec301
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_quickstart_createdatamodel.html
@@ -0,0 +1,170 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Create a data-model - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Create a data-model">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_quickstart_createdatamodel.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_quickstart_createdatamodel.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_quickstart.html"><span itemprop="name">Getting Started</span></a></li><li class="step-3" item
prop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_quickstart_createdatamodel.html"><span itemprop="name">Create a data-model</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","Getting Started","Create a data-model"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_quickstart_createconfiguration.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_quickstart_gettemplate.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_quickstart_createdatamodel" itemprop="headline">Create a data-model</h1>
+</div></div><p>In simple cases you can build data-models using
+ <code class="inline-code">java.lang</code> and <code class="inline-code">java.util</code> classes
+ and custom JavaBeans:</p><ul>
+ <li>
+ <p>Use <code class="inline-code">java.lang.String</code> for strings.</p>
+ </li>
+
+ <li>
+ <p>Use <code class="inline-code">java.lang.Number</code> subclasses for
+ numbers.</p>
+ </li>
+
+ <li>
+ <p>Use <code class="inline-code">java.lang.Boolean</code> for boolean
+ values.</p>
+ </li>
+
+ <li>
+ <p>Use <code class="inline-code">java.util.Date</code> and its subclasses for
+ date/time values</p>
+ </li>
+
+ <li>
+ <p>Use <code class="inline-code">java.util.List</code> or Java arrays for
+ sequences.</p>
+ </li>
+
+ <li>
+ <p>Use <code class="inline-code">java.util.Map</code> with
+ <code class="inline-code">String</code> keys for hashes.</p>
+ </li>
+
+ <li>
+ <p>Use your custom bean class for hashes where the items
+ correspond to the bean properties. For example the
+ <code class="inline-code">price</code> property (<code class="inline-code">getPrice()</code>)
+ of <code class="inline-code">product</code> can be get as
+ <code class="inline-code">product.price</code>. (The actions of the beans can be
+ exposed as well; see much later <a href="pgui_misc_beanwrapper.html">here</a>)</p>
+ </li>
+ </ul><p>For example, let's build the data-model of the <a href="dgui_quickstart_basics.html#example.first">first example of the Template Author's
+ Guide</a>. For convenience, here it is again:</p>
+
+<div class="code-wrapper"><pre class="code-block code-data-model">(root)
+ |
+ +- user = "Big Joe"
+ |
+ +- latestProduct
+ |
+ +- url = "products/greenmouse.html"
+ |
+ +- name = "green mouse"</pre></div><p>This Java code fragment that builds this data-model:</p>
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">// Create the root hash. We use a Map here, but it could be a JavaBean too.
+Map<String, Object> root = new HashMap<>();
+
+// Put string "user" into the root
+root.put("user", "Big Joe");
+
+// Create the "latestProduct" hash. We use a JavaBean here, but it could be a Map too.
+Product latest = new Product();
+latest.setUrl("products/greenmouse.html");
+latest.setName("green mouse");
+// and put it into the root
+root.put("latestProduct", latest);</pre></div><p>As demonstrated above, for hashes (something that stores other
+ named items) you can use either a <code class="inline-code">Map</code> or any kind
+ of public class that has public
+ <code class="inline-code">get<em class="code-color">Xxx</em></code>/<code class="inline-code">is<em class="code-color">Xxx</em></code>
+ methods as prescribed by the JavaBeans specification. Like the above
+ <code class="inline-code">Product</code> class could be something like:</p>
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">/**
+ * Product bean; note that it must be a public class!
+ */
+public class Product {
+
+ private String url;
+ private String name;
+
+ // As per the JavaBeans spec., this defines the "url" bean property
+ // It must be public!
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ // As per the JavaBean spec., this defines the "name" bean property
+ // It must be public!
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+}</pre></div><p>Regardless if <code class="inline-code">latestProduct</code> is a
+ <code class="inline-code">Map</code> that contains the <code class="inline-code">"name"</code> and
+ <code class="inline-code">"url"</code> keys, or it's a JavaBean as shown above, in
+ the template you can use <code class="inline-code">${latestProduct.name}</code>. The
+ root itself need not be a <code class="inline-code">Map</code> either; it could be
+ an object with <code class="inline-code">getUser()</code> and
+ <code class="inline-code">getLastestProduct()</code> methods too.</p> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>The behavior described here only stands if the value of the
+ <code class="inline-code">object_wrapper</code> configuration setting is something
+ that's used in almost all real world setups anyway. Anything that
+ the <code class="inline-code">ObjectWrapper</code> wraps to be a hash (something
+ that implements the <code class="inline-code">TemplateHashModel</code> interface)
+ can be used as the root, and can be traversed in templates with the
+ dot and <code class="inline-code">[]</code> operators. Something that it doesn't
+ wrap to be a hash can't be used as the root or be traversed like
+ that.</p>
+ </div>
+<div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_quickstart_createconfiguration.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_quickstart_gettemplate.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_quickstart_gettemplate.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_quickstart_gettemplate.html b/builds/2.3.26-nightly/pgui_quickstart_gettemplate.html
new file mode 100644
index 0000000..5f8846d
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_quickstart_gettemplate.html
@@ -0,0 +1,70 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Get the template - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Get the template">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_quickstart_gettemplate.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_quickstart_gettemplate.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_quickstart.html"><span itemprop="name">Getting Started</span></a></li><li class="step-3" item
prop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_quickstart_gettemplate.html"><span itemprop="name">Get the template</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","Getting Started","Get the template"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_quickstart_createdatamodel.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_quickstart_merge.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_quickstart_gettemplate" itemprop="headline">Get the template</h1>
+</div></div><p>Templates are represented by
+ <code class="inline-code">freemarker.template.Template</code> instances. Typically
+ you obtain a <code class="inline-code">Template</code> instance from the
+ <code class="inline-code">Configuration</code> instance, using its.
+ <code class="inline-code">getTemplate</code> method. If you store <a href="dgui_quickstart_basics.html#example.first">the example template</a> in the
+ <code class="inline-code">test.ftlh</code> file of the <a href="pgui_quickstart_createconfiguration.html">earlier</a> set
+ directory, then you can do this:</p>
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">Template temp = cfg.getTemplate("test.ftlh");</pre></div><p>This gives you a <code class="inline-code">Template</code> instance that was
+ created by reading
+ <code class="inline-code"><em class="code-color">/where/you/store/templates/</em>test.ftlh</code>
+ and parsing it. The <code class="inline-code">Template</code> instance stores the
+ template in parsed form, and not as text. If the template is missing
+ or syntactically incorrect, <code class="inline-code">getTemplate</code> will throw
+ exception instead.</p><p><code class="inline-code">Configuration</code> caches
+ <code class="inline-code">Template</code> instances, so when you call
+ <code class="inline-code">cfg.getTemplate("test.ftlh")</code> next time, it probably
+ won't read and parse the template file again, just returns the same
+ <code class="inline-code">Template</code> instance as for the first time.</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_quickstart_createdatamodel.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_quickstart_merge.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_quickstart_merge.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_quickstart_merge.html b/builds/2.3.26-nightly/pgui_quickstart_merge.html
new file mode 100644
index 0000000..c295aa2
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_quickstart_merge.html
@@ -0,0 +1,78 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Merging the template with the data-model - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Merging the template with the data-model">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_quickstart_merge.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_quickstart_merge.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_quickstart.html"><span itemprop="name">Getting Started</span></a></li><li class="step-3" item
prop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_quickstart_merge.html"><span itemprop="name">Merging the template with the data-model</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","Getting Started","Merging the template with the data-model"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_quickstart_gettemplate.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_quickstart_all.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_quickstart_merge" itemprop="headline">Merging the template with the data-model</h1>
+</div></div><p>As you might already know, data-model + template = output. We
+ already have a data-model (<code class="inline-code">root</code>) and a template
+ (<code class="inline-code">temp</code>), so to get the output we have to merge them.
+ This is done by the <code class="inline-code">process</code> method of the template.
+ It takes the data-model root and a <code class="inline-code">Writer</code> as
+ parameters. It writes the produced output to the
+ <code class="inline-code">Writer</code>. For the sake of simplicity here I write to
+ the standard output:</p>
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">Writer out = new OutputStreamWriter(System.out);
+temp.process(root, out);</pre></div><p>This will print to your terminal the output you have seen in the
+ <a href="dgui_quickstart_basics.html#example.first">first example</a> of the Template
+ Author's Guide.</p><p>Java I/O related notes: Depending on what <code class="inline-code">out</code>
+ is, you may need to ensure that <code class="inline-code">out.close()</code> is
+ called. This is typically needed when <code class="inline-code">out</code> writes
+ into a file that was opened to store the output of the template. In
+ other times, like in typical Web applications, you must
+ <em>not</em> close <code class="inline-code">out</code>. FreeMarker
+ calls <code class="inline-code">out.flush()</code> after a successful template
+ execution (but tis can be disabled in
+ <code class="inline-code">Configuration</code>), so you don't need to worry about
+ that.</p><p>Note that once you have obtained a <code class="inline-code">Template</code>
+ instance, you can merge it with different data-models for unlimited
+ times (<code class="inline-code">Template</code> instances are stateless). Also, the
+ <code class="inline-code">test.ftlh</code> file is accessed only while the
+ <code class="inline-code">Template</code> instance is created, not when you call the
+ process method.</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_quickstart_gettemplate.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_quickstart_all.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref.html b/builds/2.3.26-nightly/ref.html
new file mode 100644
index 0000000..56c7c78
--- /dev/null
+++ b/builds/2.3.26-nightly/ref.html
@@ -0,0 +1,54 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-part">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Template Language Reference - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Template Language Reference">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_templat
e_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_misc_jythonwrapper.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-part" id="ref" itemprop="headline">Template Language Reference</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Section Contents</div>
+<ul><li><a class="page-menu-link" href="ref_builtins.html" data-menu-target="ref_builtins">Built-in Reference</a><ul><li><a class="page-menu-link" href="ref_builtins_alphaidx.html" data-menu-target="ref_builtins_alphaidx">Alphabetical index</a></li><li><a class="page-menu-link" href="ref_builtins_string.html" data-menu-target="ref_builtins_string">Built-ins for strings</a></li><li><a class="page-menu-link" href="ref_builtins_number.html" data-menu-target="ref_builtins_number">Built-ins for numbers</a></li><li><a class="page-menu-link" href="ref_builtins_date.html" data-menu-target="ref_builtins_date">Built-ins for date/time/date-time values</a></li><li><a class="page-menu-link" href="ref_builtins_boolean.html" data-menu-target="ref_builtins_boolean">Built-ins for booleans</a></li><li><a class="page-menu-link" href="ref_builtins_sequence.html" data-menu-target="ref_builtins_sequence">Built-ins for sequences</a></li><li><a class="page-menu-link" href="ref_builtins_hash.html" data-menu
-target="ref_builtins_hash">Built-ins for hashes</a></li><li><a class="page-menu-link" href="ref_builtins_node.html" data-menu-target="ref_builtins_node">Built-ins for nodes (for XML)</a></li><li><a class="page-menu-link" href="ref_builtins_loop_var.html" data-menu-target="ref_builtins_loop_var">Loop variable built-ins</a></li><li><a class="page-menu-link" href="ref_builtins_type_independent.html" data-menu-target="ref_builtins_type_independent">Type independent built-ins</a></li><li><a class="page-menu-link" href="ref_builtins_expert.html" data-menu-target="ref_builtins_expert">Seldom used and expert built-ins</a></li></ul></li><li><a class="page-menu-link" href="ref_directives.html" data-menu-target="ref_directives">Directive Reference</a><ul><li><a class="page-menu-link" href="ref_directive_alphaidx.html" data-menu-target="ref_directive_alphaidx">Alphabetical index</a></li><li><a class="page-menu-link" href="ref_directive_assign.html" data-menu-target="ref_directive_assign">assig
n</a></li><li><a class="page-menu-link" href="ref_directive_attempt.html" data-menu-target="ref_directive_attempt">attempt, recover</a></li><li><a class="page-menu-link" href="ref_directive_autoesc.html" data-menu-target="ref_directive_autoesc">autoesc</a></li><li><a class="page-menu-link" href="ref_directive_compress.html" data-menu-target="ref_directive_compress">compress</a></li><li><a class="page-menu-link" href="ref_directive_escape.html" data-menu-target="ref_directive_escape">escape, noescape (deprecated)</a></li><li><a class="page-menu-link" href="ref_directive_flush.html" data-menu-target="ref_directive_flush">flush</a></li><li><a class="page-menu-link" href="ref_directive_ftl.html" data-menu-target="ref_directive_ftl">ftl</a></li><li><a class="page-menu-link" href="ref_directive_function.html" data-menu-target="ref_directive_function">function, return</a></li><li><a class="page-menu-link" href="ref_directive_global.html" data-menu-target="ref_directive_global">global</a></
li><li><a class="page-menu-link" href="ref_directive_if.html" data-menu-target="ref_directive_if">if, else, elseif</a></li><li><a class="page-menu-link" href="ref_directive_import.html" data-menu-target="ref_directive_import">import</a></li><li><a class="page-menu-link" href="ref_directive_include.html" data-menu-target="ref_directive_include">include</a></li><li><a class="page-menu-link" href="ref_directive_list.html" data-menu-target="ref_directive_list">list, else, items, sep, break</a></li><li><a class="page-menu-link" href="ref_directive_local.html" data-menu-target="ref_directive_local">local</a></li><li><a class="page-menu-link" href="ref_directive_macro.html" data-menu-target="ref_directive_macro">macro, nested, return</a></li><li><a class="page-menu-link" href="ref_directive_noautoesc.html" data-menu-target="ref_directive_noautoesc">noautoesc</a></li><li><a class="page-menu-link" href="ref_directive_noparse.html" data-menu-target="ref_directive_noparse">noparse</a></li><li>
<a class="page-menu-link" href="ref_directive_nt.html" data-menu-target="ref_directive_nt">nt</a></li><li><a class="page-menu-link" href="ref_directive_outputformat.html" data-menu-target="ref_directive_outputformat">outputformat</a></li><li><a class="page-menu-link" href="ref_directive_setting.html" data-menu-target="ref_directive_setting">setting</a></li><li><a class="page-menu-link" href="ref_directive_stop.html" data-menu-target="ref_directive_stop">stop</a></li><li><a class="page-menu-link" href="ref_directive_switch.html" data-menu-target="ref_directive_switch">switch, case, default, break</a></li><li><a class="page-menu-link" href="ref_directive_t.html" data-menu-target="ref_directive_t">t, lt, rt</a></li><li><a class="page-menu-link" href="ref_directive_userDefined.html" data-menu-target="ref_directive_userDefined">User-defined directive (<@...>)</a></li><li><a class="page-menu-link" href="ref_directive_visit.html" data-menu-target="ref_directive_visit">visit, recurse,
fallback</a></li></ul></li><li><a class="page-menu-link" href="ref_specvar.html" data-menu-target="ref_specvar">Special Variable Reference</a></li><li><a class="page-menu-link" href="ref_reservednames.html" data-menu-target="ref_reservednames">Reserved names in FTL</a></li><li><a class="page-menu-link" href="ref_deprecated.html" data-menu-target="ref_deprecated">Deprecated FTL constructs</a><ul><li><a class="page-menu-link" href="ref_depr_directive.html" data-menu-target="ref_depr_directive">List of deprecated directives</a></li><li><a class="page-menu-link" href="ref_depr_builtin.html" data-menu-target="ref_depr_builtin">List of deprecated built-ins</a></li><li><a class="page-menu-link" href="ref_depr_oldmacro.html" data-menu-target="ref_depr_oldmacro">Old-style macro and call directives</a></li><li><a class="page-menu-link" href="ref_depr_transform.html" data-menu-target="ref_depr_transform">Transform directive</a></li><li><a class="page-menu-link" href="ref_depr_oldsyntax.html"
data-menu-target="ref_depr_oldsyntax">Old FTL syntax</a></li><li><a class="page-menu-link" href="ref_depr_numerical_interpolation.html" data-menu-target="ref_depr_numerical_interpolation">#{...}: Numerical interpolation</a></li></ul></li></ul> </div><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_misc_jythonwrapper.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_builtins.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_builtins.html b/builds/2.3.26-nightly/ref_builtins.html
new file mode 100644
index 0000000..9d783b9
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_builtins.html
@@ -0,0 +1,54 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-chapter">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Built-in Reference - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Built-in Reference">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_builtins.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_builtins.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins.html"><span itemprop="name">Built-in Reference</span></a></li></ul><div class="bo
okmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Built-in Reference"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins_alphaidx.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-chapter" id="ref_builtins" itemprop="headline">Built-in Reference</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Section Contents</div>
+<ul><li><a class="page-menu-link" href="ref_builtins_alphaidx.html" data-menu-target="ref_builtins_alphaidx">Alphabetical index</a></li><li><a class="page-menu-link" href="ref_builtins_string.html" data-menu-target="ref_builtins_string">Built-ins for strings</a></li><li><a class="page-menu-link" href="ref_builtins_number.html" data-menu-target="ref_builtins_number">Built-ins for numbers</a></li><li><a class="page-menu-link" href="ref_builtins_date.html" data-menu-target="ref_builtins_date">Built-ins for date/time/date-time values</a></li><li><a class="page-menu-link" href="ref_builtins_boolean.html" data-menu-target="ref_builtins_boolean">Built-ins for booleans</a></li><li><a class="page-menu-link" href="ref_builtins_sequence.html" data-menu-target="ref_builtins_sequence">Built-ins for sequences</a></li><li><a class="page-menu-link" href="ref_builtins_hash.html" data-menu-target="ref_builtins_hash">Built-ins for hashes</a></li><li><a class="page-menu-link" href="ref_builtins_node.ht
ml" data-menu-target="ref_builtins_node">Built-ins for nodes (for XML)</a></li><li><a class="page-menu-link" href="ref_builtins_loop_var.html" data-menu-target="ref_builtins_loop_var">Loop variable built-ins</a></li><li><a class="page-menu-link" href="ref_builtins_type_independent.html" data-menu-target="ref_builtins_type_independent">Type independent built-ins</a></li><li><a class="page-menu-link" href="ref_builtins_expert.html" data-menu-target="ref_builtins_expert">Seldom used and expert built-ins</a></li></ul> </div><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins_alphaidx.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[42/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/dgui_misc_userdefdir.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/dgui_misc_userdefdir.html b/builds/2.3.26-nightly/dgui_misc_userdefdir.html
new file mode 100644
index 0000000..1cdb47b
--- /dev/null
+++ b/builds/2.3.26-nightly/dgui_misc_userdefdir.html
@@ -0,0 +1,554 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Defining your own directives - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Defining your own directives">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/dgui_misc_userdefdir.html">
+<link rel="canonical" href="http://freemarker.org/docs/dgui_misc_userdefdir.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui.html"><span itemprop="name">Template Author's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_misc.html"><span itemprop="name">Miscellaneous</span></a></li><li class="step-3" itempro
p="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_misc_userdefdir.html"><span itemprop="name">Defining your own directives</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Author\'s Guide","Miscellaneous","Defining your own directives"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="dgui_misc.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_misc_var.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="dgui_misc_userdefdir" itemprop="headline">Defining your own directives</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_19" data-menu-target="autoid_19">Basics</a></li><li><a class="page-menu-link" href="#autoid_20" data-menu-target="autoid_20">Parameters</a></li><li><a class="page-menu-link" href="#autoid_21" data-menu-target="autoid_21">Nested content</a></li><li><a class="page-menu-link" href="#dgui_misc_userdefdir_loopvar" data-menu-target="dgui_misc_userdefdir_loopvar">Macros with loop variables</a></li><li><a class="page-menu-link" href="#autoid_22" data-menu-target="autoid_22">More about user-defined directives and macros</a></li></ul> </div><p>As far as template authors are concerned, user-defined
+ directives can be defined using the <code class="inline-code">macro</code>
+ directive. <span class="marked-for-programmers">Java programmers who want to
+ implement directives in Java Language, rather than in a template,
+ should use
+ <code class="inline-code">freemarker.template.TemplateDirectiveModel</code> (see
+ <a href="pgui_datamodel_directive.html">more
+ here...</a>).</span></p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_19">Basics</h2>
+
+
+
+
+ <p>A macro is a template fragment associated with a variable. You
+ can use that variable in your template as a user-defined directive,
+ so it helps in repetitive tasks. For example, this creates a macro
+ variable that prints a big "Hello Joe!":</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><strong><#macro greet></strong>
+ <font size="+2">Hello Joe!</font>
+<strong></#macro></strong></pre></div>
+
+ <p>The <code class="inline-code">macro</code> directive itself does not print
+ anything; it just creates the macro variable, so there will be a
+ variable called <code class="inline-code">greet</code>. Things between the
+ <code class="inline-code"><#macro greet></code> and
+ <code class="inline-code"></#macro></code> (called <strong>macro definition body</strong>) will be executed only
+ when you use the variable as directive. You use user-defined
+ directives by writing <code class="inline-code">@</code> instead of
+ <code class="inline-code">#</code> in the FTL tag. Use the variable name as the
+ directive name. Also, the <a href="gloss.html#gloss.endTag">end-tag</a> for user-defined directives is
+ mandatory. So you use <code class="inline-code">greet</code> like this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><@greet></@greet></pre></div>
+
+ <p>But since
+ <code class="inline-code"><<em class="code-color">anything</em>></<em class="code-color">anything</em>></code>
+ is equivalent with
+ <code class="inline-code"><<em class="code-color">anything</em>/></code> you
+ should use this shorter form (that is familiar for you if you know
+ <a href="gloss.html#gloss.XML">XML</a>):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><@greet/></pre></div>
+
+ <p>This will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> <font size="+2">Hello Joe!</font>
+ </pre></div>
+
+ <p>But macros can do much more, since the thing between
+ <code class="inline-code"><#macro <em class="code-color">...</em>></code> and
+ <code class="inline-code"></#macro></code> is a template fragment, thus it
+ can contain interpolations
+ (<code class="inline-code">${<em class="code-color">...</em>}</code>) and FTL tags
+ (e.g. <code class="inline-code"><#if
+ <em class="code-color">...</em>><em class="code-color">...</em></#if></code>).</p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>Programmers will say on
+ <code class="inline-code"><@<em class="code-color">...</em>></code> that
+ you <strong>call</strong> the macro.</p>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_20">Parameters</h2>
+
+
+ <p>Let's improve the <code class="inline-code">greet</code> macro so it can use
+ arbitrary name, not only "Joe". For this purpose you
+ can use <strong>parameters</strong>. You define the
+ parameters after the name of the macro in the
+ <code class="inline-code">macro</code> directive. Here we define one parameter for
+ the <code class="inline-code">greet</code> macro,
+ <code class="inline-code">person</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro greet <strong>person</strong>>
+ <font size="+2">Hello <strong>${person}</strong>!</font>
+</#macro></pre></div>
+
+ <p>and then you can use this macro as:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><@greet <strong>person="Fred"</strong>/> and <@greet <strong>person="Batman"</strong>/></pre></div>
+
+ <p>which is similar to HTML syntax. This will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> <font size="+2">Hello <strong>Fred</strong>!</font>
+ and <font size="+2">Hello <strong>Batman</strong>!</font>
+ </pre></div>
+
+ <p>As you can see, the actual value of the macro parameter is
+ accessible in the macro definition body as a variable
+ (<code class="inline-code">person</code>). As with <a href="gloss.html#gloss.predefinedDirective">predefined directives</a>,
+ the value of a parameter (the right side of <code class="inline-code">=</code>) is
+ an <a href="dgui_template_exp.html">FTL expression</a>. Thus,
+ unlike with HTML, the quotation marks around
+ <code class="inline-code">"Fred"</code> and <code class="inline-code">"Batman"</code> are not
+ optional. <code class="inline-code"><@greet person=Fred/></code> would mean
+ that you use the value of variable <code class="inline-code">Fred</code> for the
+ <code class="inline-code">person</code> parameter, rather than the string
+ <code class="inline-code">"Fred"</code>. Of course parameter value need not be a
+ string, it can be number, boolean, hash, sequence, etc., also you
+ can use complex expression on the right side of <code class="inline-code">=</code>
+ (e.g. <code class="inline-code">someParam=(price + 50)*1.25</code>).</p>
+
+ <p>User-defined directives can have multiple parameters. For
+ example, add a new parameter <code class="inline-code">color</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro greet person <strong>color</strong>>
+ <font size="+2" color="${color}">Hello ${person}!</font>
+</#macro></pre></div>
+
+ <p>and then you can use this macro like:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><@greet person="Fred" color="black"/></pre></div>
+
+ <p>The order of parameters is not important, so this is
+ equivalent with the previous:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><@greet color="black" person="Fred"/></pre></div>
+
+ <p>When you call the macro, you can use only parameters that you
+ have defined in the <code class="inline-code">macro</code> directive (in this
+ case: <code class="inline-code">person</code> and <code class="inline-code">color</code>). So if
+ you try <code class="inline-code"><@greet person="Fred" color="black"
+ background="green"/></code> then you will get an error, since
+ you haven't mentioned parameter <code class="inline-code">background</code> in the
+ <code class="inline-code"><#macro
+ <em class="code-color">...</em>></code>.</p>
+
+ <p>Also, you must give value for all parameters that you have
+ defined for the macro. So if you try <code class="inline-code"><@greet
+ person="Fred"/></code> then you will get an error, since you
+ forgot to specify the value of <code class="inline-code">color</code>. However, it
+ often happens that you would specify the same value for a parameter
+ in most cases, so you want to specify the value only when you want a
+ different value for it than the usual. This can be achieved if you
+ specify the parameter in the <code class="inline-code">macro</code> directive as
+ <code class="inline-code"><em class="code-color">param_name</em>=<em class="code-color">usual_value</em></code>.
+ For example, you want to use <code class="inline-code">"black"</code> for
+ <code class="inline-code">color</code> if you don't specify value for that
+ parameter when you use the <code class="inline-code">greet</code>
+ directive:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro greet person color<strong>="black"</strong>>
+ <font size="+2" color="${color}">Hello ${person}!</font>
+</#macro></pre></div>
+
+ <p>Now <code class="inline-code"><@greet person="Fred"/></code> is OK,
+ since it is equivalent with <code class="inline-code"><@greet person="Fred"
+ color="black"/></code>, thus the value of
+ <code class="inline-code">color</code> parameter is known. If you want
+ <code class="inline-code">"red"</code> for <code class="inline-code">color</code>, then you
+ write <code class="inline-code"><@greet person="Fred" color="red"/></code>,
+ and this value will override the usual value specified with the
+ <code class="inline-code">macro</code> directive, so the value of
+ <code class="inline-code">color</code> parameter will be
+ <code class="inline-code">"red"</code>.</p>
+
+ <p>Also, it is important to realize that -- according to the
+ already explained <a href="dgui_template_exp.html">FTL expression
+ rules</a> -- <code class="inline-code">someParam=foo</code> and
+ <code class="inline-code">someParam="${foo}"</code> are very different. In the
+ fist case, you use the value of variable <code class="inline-code">foo</code> as
+ the value of the parameter. In the second case, you use a <a href="dgui_template_exp.html#dgui_template_exp_stringop_interpolation">string literal
+ with interpolation</a>, so the value of the parameter will be a
+ string -- in this case, the value of <code class="inline-code">foo</code> rendered
+ to text -- regardless of the type (as number, date, etc.) of
+ <code class="inline-code">foo</code>. Or, another example:
+ <code class="inline-code">someParam=3/4</code> and
+ <code class="inline-code">someParam="${3/4}"</code> are different. If the
+ directive wants a numerical value for <code class="inline-code">someParam</code>,
+ it will not like the second variation. Do not exchange these.</p>
+
+ <p>A very important aspect of macro parameters is that they are
+ local variables. For more information about local variables please
+ read: <a href="dgui_misc_var.html">Defining variables in the template</a></p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_21">Nested content</h2>
+
+
+ <p>Custom directive can have nested content, similarly as
+ predefined directives like <code class="inline-code"><#if
+ <em class="code-color">...</em>><em class="code-color">nested
+ content</em></#if></code> can have. For example,
+ this creates a macro that draws borders around its nested
+ content:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro border>
+ <table border=4 cellspacing=0 cellpadding=4><tr><td>
+ <strong><#nested></strong>
+ </tr></td></table>
+</#macro></pre></div>
+
+ <p>The <code class="inline-code"><#nested></code> directive executes the
+ template fragment between the start-tag and end-tags of the
+ directive. So if you do this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><@border>The bordered text</@border></pre></div>
+
+ <p>the output will be:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> <table border=4 cellspacing=0 cellpadding=4><tr><td>
+ The bordered text
+ </td></tr></table>
+ </pre></div>
+
+ <p>The <code class="inline-code">nested</code> directive can be called for
+ multiple times, for example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro do_thrice><strong>
+ <#nested>
+ <#nested>
+ <#nested></strong>
+</#macro>
+<@do_thrice>
+ Anything.
+</@do_thrice></pre></div>
+
+ <p>will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> Anything.
+ Anything.
+ Anything.</pre></div>
+
+ <p>If you don't use the <code class="inline-code">nested</code> directive, then
+ the nested content will not be executed. Thus, if you accidentally
+ use the <code class="inline-code">greet</code> directive like this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><@greet person="Joe">
+ Anything.
+</@greet></pre></div>
+
+ <p>then FreeMarker will not see this as an error, and simply
+ prints:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"><font size="+2">Hello Joe!</font></pre></div>
+
+ <p>and the nested content will be ignored, since the
+ <code class="inline-code">greet</code> macro never uses <code class="inline-code">nested</code>
+ directive.</p>
+
+ <p>The nested content can be anything that is valid FTL,
+ including other user-defined directives. Thus this is OK:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><@border>
+ <ul>
+ <@do_thrice>
+ <li><@greet person="Joe"/>
+ </@do_thrice>
+ </ul>
+</@border></pre></div>
+
+ <p>and will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> <table border=4 cellspacing=0 cellpadding=4><tr><td>
+ <ul>
+ <li><font size="+2">Hello Joe!</font>
+
+ <li><font size="+2">Hello Joe!</font>
+
+ <li><font size="+2">Hello Joe!</font>
+
+ </ul>
+
+ </tr></td></table></pre></div>
+
+ <p>The <a href="dgui_misc_var.html">local variables</a> of a
+ macro are not visible in the nested content. Say, this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro repeat count>
+ <#local y = "test">
+ <#list 1..count as x>
+ ${y} ${count}/${x}: <#nested>
+ </#list>
+</#macro>
+<@repeat count=3>${y!"?"} ${x!"?"} ${count!"?"}</@repeat></pre></div>
+
+ <p>will print this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> test 3/1: ? ? ?
+ test 3/2: ? ? ?
+ test 3/3: ? ? ?</pre></div>
+
+ <p>because the <code class="inline-code">y</code>, <code class="inline-code">x</code> and
+ <code class="inline-code">count</code> are the local (private) variables of the
+ macro, and are not visible from outside the macro definition.
+ Furthermore, a different set of local variables is used for each
+ macro call, so this will not cause confusion:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro test foo>${foo} (<#nested>) ${foo}</#macro>
+<@test foo="A"><@test foo="B"><@test foo="C"/></@test></@test></pre></div>
+
+ <p>and will print this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">A (B (C () C) B) A</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="dgui_misc_userdefdir_loopvar">Macros with loop variables</h2>
+
+
+
+
+ <p>Predefined directives like <code class="inline-code">list</code> can use
+ so-called loop variables; you should read <a href="dgui_misc_var.html">Defining variables in the template</a> to understand loop variables.</p>
+
+ <p>User-defined directives can also have loop variables. For
+ example, let's extend the <code class="inline-code">do_thrice</code> directive of
+ the earlier examples so it exposes the current repetition number as
+ a loop variable. As with the predefined directives (as
+ <code class="inline-code">list</code>) the <em>name</em> of loop
+ variables is given when you call the directive (as
+ <code class="inline-code">foo</code> in <code class="inline-code"><#list foos as
+ foo><em class="code-color">...</em></#list></code>),
+ while the <em>value</em> of the variables is set by the
+ directive itself.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro do_thrice>
+ <#nested <strong>1</strong>>
+ <#nested <strong>2</strong>>
+ <#nested <strong>3</strong>>
+</#macro>
+<@do_thrice <strong>; x</strong>> <#-- user-defined directive uses ";" instead of "as" -->
+ ${<strong>x</strong>} Anything.
+</@do_thrice></pre></div>
+
+ <p>This will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> 1 Anything.
+ 2 Anything.
+ 3 Anything.
+ </pre></div>
+
+ <p>The syntactical rule is that you pass the actual value of the
+ loop variable for a certain "loop" (i.e. repetition of the nested
+ content) as the parameter of <code class="inline-code">nested</code> directive (of
+ course the parameter can by arbitrary expression). The name of the
+ loop variable is specified in the user-defined directive open tag
+ (<code class="inline-code"><@...></code>) after the parameters and a
+ semicolon.</p>
+
+ <p>A macro can use more the one loop variable (the order of
+ variables is significant):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro repeat count>
+ <#list 1..count as x>
+ <#nested <strong>x, x/2, x==count</strong>>
+ </#list>
+</#macro>
+<@repeat count=4 ; <strong>c, halfc, last</strong>>
+ ${<strong>c</strong>}. ${<strong>halfc</strong>}<#if <strong>last</strong>> Last!</#if>
+</@repeat></pre></div>
+
+ <p>The output will be:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> 1. 0.5
+ 2. 1
+ 3. 1.5
+ 4. 2 Last!
+ </pre></div>
+
+ <p>It is not a problem if you specify different number of loop
+ variables in the user-defined directive start-tag (that is, after
+ the semicolon) than with the <code class="inline-code">nested</code> directive. If
+ you specify less loop variables after the semicolon, then simply you
+ will not see the last few values that the <code class="inline-code">nested</code>
+ directive provides, since there is no loop variable to hold those
+ values. So these are all OK:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><@repeat count=4 ; <strong>c, halfc, last</strong>>
+ ${c}. ${halfc}<#if last> Last!</#if>
+</@repeat>
+<@repeat count=4 ; <strong>c, halfc</strong>>
+ ${c}. ${halfc}
+</@repeat>
+<@repeat count=4>
+ Just repeat it...
+</@repeat></pre></div>
+
+ <p>If you specify more variables after the semicolon than with
+ the <code class="inline-code">nested</code> directive, then the last few loop
+ variables will not be created (i.e. will be undefined in the nested
+ content).</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_22">More about user-defined directives and macros</h2>
+
+
+ <p>Now you may read the relevant parts of the FreeMarker
+ Reference:</p>
+
+ <ul>
+ <li>
+ <a href="ref_directive_userDefined.html#ref.directive.userDefined">user-defined
+ directive call</a>
+ </li>
+
+ <li>
+ <a href="ref_directive_macro.html#ref.directive.macro"><code>macro</code>
+ directive</a>
+ </li>
+ </ul>
+
+ <p>You can define methods in FTL as well, see <a href="ref_directive_function.html#ref.directive.function">the <code>function</code>
+ directive</a>.</p>
+
+ <p>Also, you may interested in namespaces: <a href="dgui_misc_namespace.html">Namespaces</a>. Namespaces help you to organize and
+ reuse your commonly used macros.</p>
+
+ <p>Java programmers might want to know that directives (macros
+ are directives) and methods (function-like things) can also be
+ written in Java language, by<a href="pgui_datamodel_directive.html"> implementing the
+ <code>TemplateDirectiveModel</code></a> or
+ <code class="inline-code">TemplateMethodModelEx</code> interfaces, respectively.
+ Then you can pull in the Java implementations into the template like
+ <code class="inline-code"><#assign foo =
+ "com.example.FooDirective"?new()></code> or
+ <code class="inline-code"><#assign foo =
+ "com.example.FooMethod"?new()></code> on the same place where
+ you would have <code class="inline-code"><#macro foo
+ <em class="code-color">...</em>></code> or
+ <code class="inline-code"><#function foo
+ <em class="code-color">...</em>></code> otherwise.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="dgui_misc.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_misc_var.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/dgui_misc_var.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/dgui_misc_var.html b/builds/2.3.26-nightly/dgui_misc_var.html
new file mode 100644
index 0000000..1f48d80
--- /dev/null
+++ b/builds/2.3.26-nightly/dgui_misc_var.html
@@ -0,0 +1,197 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Defining variables in the template - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Defining variables in the template">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/dgui_misc_var.html">
+<link rel="canonical" href="http://freemarker.org/docs/dgui_misc_var.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui.html"><span itemprop="name">Template Author's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_misc.html"><span itemprop="name">Miscellaneous</span></a></li><li class="step-3" itempro
p="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_misc_var.html"><span itemprop="name">Defining variables in the template</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Author\'s Guide","Miscellaneous","Defining variables in the template"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="dgui_misc_userdefdir.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_misc_namespace.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="dgui_misc_var" itemprop="headline">Defining variables in the template</h1>
+</div></div><p>Most of the variables that a typical template works with comes
+ from the data-model. But templates can also define variables
+ themselves, usually to hold loops variables, temporary results,
+ macros, etc. Such variables are outside the data-model; modifying the
+ data-model from templates is by design unsupported. Note that each
+ <a href="gloss.html#gloss.templateProcessingJob">template processing
+ job</a> has its own private set of these variables, which will be
+ thrown away when the template processing job is finished.</p><p>You access variables defined in the template the same way as you
+ access variables defined in the data-model root. For example, if you
+ create a variable called "foo" in the template, you can
+ print its value with <code class="inline-code">${foo}</code>. If, coincidently,
+ there's a variable called "foo" in the data-model too,
+ the variable created in the template will hide (not overwrite!)
+ it.</p><p>There are these kinds of variables that are defined in a
+ template:</p><ul>
+ <li>
+ <p><strong>"plain"
+ variables</strong>: They are accessible from everywhere in the
+ template, or from another templates that was inserted with the
+ <a href="ref_directive_include.html#ref.directive.include"><code>include</code>
+ directive</a>. You can create and replace these variables with
+ the <a href="ref_directive_assign.html#ref.directive.assign"><a href="ref_directive_assign.html#ref.directive.assign"><code>assign</code></a>
+ directive</a>, or, because macros and functions are just
+ variables, with the <a href="ref_directive_macro.html#ref.directive.macro"><code>macro</code>
+ directives</a> and <a href="ref_directive_function.html#ref.directive.function"><code>function</code>
+ directives</a>.</p>
+ </li>
+
+ <li>
+ <p><strong>Local variables</strong>: They can
+ only be set inside a <a href="gloss.html#gloss.macroDefinitionBody">macro definition body</a>
+ or <a href="gloss.html#gloss.functionDefinitionBody">function
+ definition body</a>, and are only visible from there, not from
+ other macros or functions called from there. A local variable only
+ exists for the duration of a macro or function call. You can
+ create and replace local variables inside the definition body with
+ the <a href="ref_directive_local.html#ref.directive.local"><code>local</code>
+ directive</a>. <a href="ref_directive_macro.html#ref.directive.macro">Macro</a>
+ and <a href="ref_directive_function.html#ref.directive.function">function</a>
+ parameters are also local variables.</p>
+ </li>
+
+ <li>
+ <p><strong>Loop variables</strong>: Loop
+ variables are created automatically by directives like <a href="ref_directive_list.html#ref.directive.list"><code>list</code></a> (like
+ <code class="inline-code">x</code> in <code class="inline-code"><#list xs as
+ x><em class="code-color">...</em></#list></code>), and
+ they only exist between the start-tag and end-tag of the
+ directive. They are only visible directly between these tags, not
+ from macros or functions called from there. As such, they are
+ quite similar to local variables, but they can't be assigned to
+ directly.</p>
+ </li>
+
+ <li>
+ <p><strong>Global variables</strong>: These
+ should be seldom used. Global variables are shared by all
+ templates, even if they belong to different name spaces because of
+ <a href="ref_directive_import.html#ref.directive.import"><code>import</code>-ing</a>.
+ Thus, their visibility is similar to data-model variables. They
+ are set via the <a href="ref_directive_global.html#ref.directive.global"><code>global</code>
+ directive</a>. Global variables hide (but don't overwrite) the
+ data-model variables of the same name.</p>
+ </li>
+ </ul><p>Example: Create and replace variables with
+ <code class="inline-code">assign</code>:</p>
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign x = 1> <#-- create variable x -->
+${x}
+<#assign x = 2> <#-- replace variable x -->
+${x}
+<#assign x++> <#-- replace variable x -->
+${x}</pre></div>
+
+<div class="code-wrapper"><pre class="code-block code-output">1
+2
+3</pre></div><p>In the next example we demonstrate that local variables hide
+ (not overwrite) "plain" variables of the same name, and
+ that loop variables hide (not overwrite) local and
+ "plain" variables of the same name:</p>
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign x = "plain">
+1. ${x} <#-- we see the plain var. here -->
+<@test/>
+6. ${x} <#-- the value of plain var. was not changed -->
+<#list ["loop"] as x>
+ 7. ${x} <#-- now the loop var. hides the plain var. -->
+ <#assign x = "plain2"> <#-- replaces the plain var, not the loop var. -->
+ 8. ${x} <#-- it still hides the plain var. -->
+</#list>
+9. ${x} <#-- now the new value of plain var. becomse visible -->
+
+<#macro test>
+ 2. ${x} <#-- we still see the plain var. here -->
+ <#local x = "local">
+ 3. ${x} <#-- now the local var. hides it -->
+ <#list ["loop"] as x>
+ 4. ${x} <#-- now the loop var. hides the local var. -->
+ </#list>
+ 5. ${x} <#-- now we see the local var. again -->
+</#macro></pre></div>
+
+<div class="code-wrapper"><pre class="code-block code-output">1. plain
+ 2. plain
+ 3. local
+ 4. loop
+ 5. local
+6. plain
+ 7. loop
+ 8. loop
+9. plain2 </pre></div><p>In the next example we demonstrate that an inner loop variable
+ can hide (not overwrite) an outer loop variable of the same
+ name:</p>
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list ["loop 1"] as x>
+ ${x}
+ <#list ["loop 2"] as x>
+ ${x}
+ <#list ["loop 3"] as x>
+ ${x}
+ </#list>
+ ${x}
+ </#list>
+ ${x}
+</#list></pre></div>
+
+<div class="code-wrapper"><pre class="code-block code-output"> loop 1
+ loop 2
+ loop 3
+ loop 2
+ loop 1</pre></div><p>When a variable hides the variable from the data-model, you can
+ still read that variable from the data-model using <a href="dgui_template_exp.html#dgui_template_exp_var_special">special variable</a>
+ <code class="inline-code">globals</code>. For example, assume we have a variable
+ called <code class="inline-code">user</code> in the data-model with value "Big
+ Joe":</p>
+
+<div class="code-wrapper"><pre class="code-block code-template">${user} <#-- prints: Big Joe -->
+<#assign user = "Joe Hider">
+${user} <#-- prints: Joe Hider -->
+${.globals.user} <#-- prints: Big Joe --></pre></div><p>You could also write <code class="inline-code">.data_model.user</code>
+ instead, and then not even a <code class="inline-code"><#global user =
+ "<em class="code-color">...</em>"></code> can hide the value in
+ the data-model. However, global variables are often purposely set to
+ override the value coming from the data-model, so using
+ <code class="inline-code">globals</code> is a better practice usually.</p><p>For information about syntax of variables (allowed characters
+ and such) please read: <a href="dgui_template_exp.html">The Template/Expressions</a></p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="dgui_misc_userdefdir.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_misc_namespace.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/dgui_misc_whitespace.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/dgui_misc_whitespace.html b/builds/2.3.26-nightly/dgui_misc_whitespace.html
new file mode 100644
index 0000000..6a8032a
--- /dev/null
+++ b/builds/2.3.26-nightly/dgui_misc_whitespace.html
@@ -0,0 +1,296 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>White-space handling - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="White-space handling">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/dgui_misc_whitespace.html">
+<link rel="canonical" href="http://freemarker.org/docs/dgui_misc_whitespace.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui.html"><span itemprop="name">Template Author's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_misc.html"><span itemprop="name">Miscellaneous</span></a></li><li class="step-3" itempro
p="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_misc_whitespace.html"><span itemprop="name">White-space handling</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Author\'s Guide","Miscellaneous","White-space handling"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="dgui_misc_autoescaping.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_misc_alternativesyntax.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="dgui_misc_whitespace" itemprop="headline">White-space handling</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#dgui_misc_whitespace_stripping" data-menu-target="dgui_misc_whitespace_stripping">White-space stripping</a></li><li><a class="page-menu-link" href="#autoid_30" data-menu-target="autoid_30">Using compress directive</a></li></ul> </div><p>The control of the <a href="gloss.html#gloss.whiteSpace">white-space</a> in a template is a
+ problem that to some extent haunts every template engine in the
+ business.</p><p>Let see this template. I have marked the components of template
+ with colors: <span class="marked-text">text</span>, <span class="marked-interpolation">interpolation</span>, <span class="marked-ftl-tag">FTL tag</span>. With the <em><span class="marked-invisible-text">[BR]</span></em>-s I visualize the <a href="gloss.html#gloss.lineBreak">line breaks</a>.</p>
+
+<div class="code-wrapper"><pre class="code-block code-template"><span class="marked-text"><p>List of users:<em><span class="marked-invisible-text">[BR]</span></em>
+<span class="marked-ftl-tag"><#assign users = [{"name":"Joe", "hidden":false},<em><span class="marked-invisible-text">[BR]</span></em>
+ {"name":"James Bond", "hidden":true},<em><span class="marked-invisible-text">[BR]</span></em>
+ {"name":"Julia", "hidden":false}]></span><em><span class="marked-invisible-text">[BR]</span></em>
+<ul><em><span class="marked-invisible-text">[BR]</span></em>
+<span class="marked-ftl-tag"><#list users as user></span><em><span class="marked-invisible-text">[BR]</span></em>
+ <span class="marked-ftl-tag"><#if !user.hidden></span><em><span class="marked-invisible-text">[BR]</span></em>
+ <li><span class="marked-interpolation">${user.name}</span><em><span class="marked-invisible-text">[BR]</span></em>
+ <span class="marked-ftl-tag"></#if></span><em><span class="marked-invisible-text">[BR]</span></em>
+<span class="marked-ftl-tag"></#list></span><em><span class="marked-invisible-text">[BR]</span></em>
+</ul><em><span class="marked-invisible-text">[BR]</span></em>
+<p>That's all.</span></pre></div><p>If FreeMarker were to output all <span class="marked-text">text</span> as is, the output would be:</p>
+
+<div class="code-wrapper"><pre class="code-block code-output"><span class="marked-text"><p>List of users:<em><span class="marked-invisible-text">[BR]</span></em>
+<em><span class="marked-invisible-text">[BR]</span></em>
+<ul><em><span class="marked-invisible-text">[BR]</span></em>
+<em><span class="marked-invisible-text">[BR]</span></em>
+ <em><span class="marked-invisible-text">[BR]</span></em>
+ <li></span>Joe<span class="marked-text"><em><span class="marked-invisible-text">[BR]</span></em>
+ <em><span class="marked-invisible-text">[BR]</span></em>
+<em><span class="marked-invisible-text">[BR]</span></em>
+ <em><span class="marked-invisible-text">[BR]</span></em>
+<em><span class="marked-invisible-text">[BR]</span></em>
+ <em><span class="marked-invisible-text">[BR]</span></em>
+ <li></span>Julia<span class="marked-text"><em><span class="marked-invisible-text">[BR]</span></em>
+ <em><span class="marked-invisible-text">[BR]</span></em>
+<em><span class="marked-invisible-text">[BR]</span></em>
+</ul><em><span class="marked-invisible-text">[BR]</span></em>
+<p>That's all.</span></pre></div><p>You have a lot of unwanted spaces and line breaks here.
+ Fortunately neither HTML nor XML is typically white-space sensitive,
+ but this amount of superfluous white-space can be annoying, and
+ needlessly increases the size of produced HTML. Of course, it is even
+ bigger problem when outputting white-space-sensitive formats.</p><p>FreeMarker provides the following tools to cope with this
+ problem:</p><ul>
+ <li>
+ <p>Tools to ignore certain white-space of the template files
+ <span class="marked-for-programmers">(parse time white-space
+ removal)</span>:</p>
+
+ <ul>
+ <li>
+ <p>White-space stripping: This feature automatically
+ ignores typical superfluous white-space around FTL tags. It
+ can be enabled or disabled on per template manner.</p>
+ </li>
+
+ <li>
+ <p>Trimmer directives: <code class="inline-code">t</code>,
+ <code class="inline-code">rt</code>, <code class="inline-code">lt</code>. With these
+ directives you can explicitly tell FreeMarker to ignore
+ certain white-space. Read <a href="ref_directive_t.html#ref.directive.t">the
+ reference</a> for more information.</p>
+ </li>
+
+ <li>
+ <p><a href="ref_directive_ftl.html#ref.directive.ftl"><code>ftl</code></a>
+ parameter <code class="inline-code">strip_text</code>: This removes all
+ top-level text from the template. It is useful for templates
+ that contain macro definitions only (and some other
+ non-outputting directives), because it removes the line-breaks
+ that you use between the macro definitions and between the
+ other top-level directives to improve the readability of the
+ template.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Tools that remove white-space from the output <span class="marked-for-programmers">(on-the-fly white-space
+ removal)</span>:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">compress</code> directive.</p>
+ </li>
+ </ul>
+ </li>
+ </ul>
+
+
+
+
+<h2 class="content-header header-section2" id="dgui_misc_whitespace_stripping">White-space stripping</h2>
+
+
+
+
+ <p>If this feature is enabled for a template, then it
+ automatically ignores (i.e. does not print to the output) two kind
+ of typical superfluous white-space:</p>
+
+ <ul>
+ <li>
+ <p>Indentation white-space, and trailing white-space at the
+ end of the line (includes the line break) will be ignored in
+ lines that contains only FTL tags (e.g.
+ <code class="inline-code"><@myMacro/></code>, <code class="inline-code"><#if
+ <em class="code-color">...</em>></code>) and/or FTL
+ comments (e.g. <code class="inline-code"><#-- blah --></code>), apart
+ from the the ignored white-space itself. For example, if a line
+ contains only an <code class="inline-code"><#if
+ <em class="code-color">...</em>></code>, then the
+ indentation before the tag and the line break after the tag will
+ be ignored. However, if the line contains <code class="inline-code"><#if
+ <em class="code-color">...</em>>x</code>, then the
+ white-space in that line will not be ignored, because of the
+ <code class="inline-code">x</code>, as that is not FTL tag. Note that
+ according these rules, a line that contains <code class="inline-code"><#if
+ <em class="code-color">...</em>><#list
+ <em class="code-color">...</em>></code> is subject to
+ white-space ignoring, while a line that contains
+ <code class="inline-code"><#if <em class="code-color">...</em>>�<#list
+ <em class="code-color">...</em>></code> is not, because the
+ white-space between the two FTL tags is embedded white-space,
+ not indentation or trailing white-space.</p>
+ </li>
+
+ <li>
+ <p>White-space sandwiched between the following directives is
+ ignored: <code class="inline-code">macro</code>, <code class="inline-code">function</code>,
+ <code class="inline-code">assign</code>, <code class="inline-code">global</code>,
+ <code class="inline-code">local</code>, <code class="inline-code">ftl</code>,
+ <code class="inline-code">import</code>, but only if there is
+ <em>only</em> white-space and/or FTL comments
+ between the directives. In practice it means that you can put
+ empty lines between macro definitions and assignments as spacing
+ for better readability, without printing needless empty lines
+ (line breaks) to the output.</p>
+ </li>
+ </ul>
+
+ <p>The output of the last example with white-space stripping
+ enabled will be:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"><span class="marked-text"><p>List of users:<em><span class="marked-invisible-text">[BR]</span></em>
+<ul><em><span class="marked-invisible-text">[BR]</span></em>
+ <li></span>Joe<span class="marked-text"><em><span class="marked-invisible-text">[BR]</span></em>
+ <li></span>Julia<span class="marked-text"><em><span class="marked-invisible-text">[BR]</span></em>
+</ul><em><span class="marked-invisible-text">[BR]</span></em>
+<p>That's all.</span></pre></div>
+
+ <p>This is because after stripping the template becomes the
+ following; the ignored text is not <span class="marked-text">colored</span>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><span class="marked-text"><p>List of users:<em><span class="marked-invisible-text">[BR]</span></em></span>
+<span class="marked-ftl-tag"><#assign users = [{"name":"Joe", "hidden":false},<em><span class="marked-invisible-text">[BR]</span></em>
+ {"name":"James Bond", "hidden":true},<em><span class="marked-invisible-text">[BR]</span></em>
+ {"name":"Julia", "hidden":false}]></span><em><span class="marked-invisible-text">[BR]</span></em>
+<span class="marked-text"><ul><em><span class="marked-invisible-text">[BR]</span></em></span>
+<span class="marked-ftl-tag"><#list users as user></span><em><span class="marked-invisible-text">[BR]</span></em>
+ <span class="marked-ftl-tag"><#if !user.hidden></span><em><span class="marked-invisible-text">[BR]</span></em>
+<span class="marked-text"> <li><span class="marked-interpolation">${user.name}</span><em><span class="marked-invisible-text">[BR]</span></em></span>
+ <span class="marked-ftl-tag"></#if></span><em><span class="marked-invisible-text">[BR]</span></em>
+<span class="marked-ftl-tag"></#list></span><em><span class="marked-invisible-text">[BR]</span></em>
+<span class="marked-text"></ul><em><span class="marked-invisible-text">[BR]</span></em>
+<p>That's all.</span></pre></div>
+
+ <p>White-space stripping can be enabled/disabled in per template
+ manner with the <a href="ref_directive_ftl.html#ref.directive.ftl"><code>ftl</code> directive</a>.
+ If you don't specify this with the <code class="inline-code">ftl</code> directive,
+ then white-space stripping will be enabled or disabled depending on
+ how the programmer has configured FreeMarker. The factory default is
+ white-space stripping enabled, and the programmers probably left it
+ so (<span class="marked-for-programmers">recommended</span>). <span class="marked-for-programmers">Note that enabling white-space stripping does
+ <em>not</em> degrade the performance of template
+ execution; white-space stripping is done during template
+ loading.</span></p>
+
+ <p>White-space stripping can be disabled for a single line with
+ the <a href="ref_directive_nt.html#ref.directive.nt"><code>nt</code></a>
+ directive (for No Trim).</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_30">Using compress directive</h2>
+
+
+
+
+ <p>Another solution is to use the <a href="ref_directive_compress.html#ref.directive.compress"><code>compress</code>
+ directive</a>. As opposed to white-space stripping, this works
+ directly on the generated output, not on the template. That is, it
+ will investigate the printed output on the fly, and does not
+ investigate the FTL program that creates the output. It aggressively
+ removes indentations, empty lines and repeated spaces/tabs (for more
+ information read the <a href="ref_directive_compress.html#ref.directive.compress">reference</a>). So the output
+ of:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><strong><#compress></strong>
+<#assign users = [{"name":"Joe", "hidden":false},
+ {"name":"James Bond", "hidden":true},
+ {"name":"Julia", "hidden":false}]>
+List of users:
+<#list users as user>
+ <#if !user.hidden>
+ - ${user.name}
+ </#if>
+</#list>
+That's all.
+<strong></#compress></strong></pre></div>
+
+ <p>will be:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">List of users:
+- Joe
+- Julia
+That's all.</pre></div>
+
+ <p>Note that <code class="inline-code">compress</code> is totally independent
+ of white-space stripping. So it is possible that the white-space of
+ template is stripped, and later the produced output is
+ <code class="inline-code">compress</code>-ed.</p>
+
+ <p>Also, by default a user-defined directve called
+ <code class="inline-code">compress</code> is available in the data-model (due to
+ backward compatibility). This is the same as the directive, except
+ that you may optionally set the <code class="inline-code">single_line</code>
+ parameter, which will remove all intervening line breaks. If you
+ replace
+ <code class="inline-code"><#compress><em class="code-color">...</em></#compress></code>
+ on the last example with <code class="inline-code"><@compress
+ single_line=true><em class="code-color">...</em></@compress></code>,
+ then you get this output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">List of users: - Joe - Julia That's all.</pre></div>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="dgui_misc_autoescaping.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_misc_alternativesyntax.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/dgui_quickstart.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/dgui_quickstart.html b/builds/2.3.26-nightly/dgui_quickstart.html
new file mode 100644
index 0000000..dacd07b
--- /dev/null
+++ b/builds/2.3.26-nightly/dgui_quickstart.html
@@ -0,0 +1,57 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-chapter">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Getting Started with template writing - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Getting Started with template writing">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/dgui_quickstart.html">
+<link rel="canonical" href="http://freemarker.org/docs/dgui_quickstart.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui.html"><span itemprop="name">Template Author's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_quickstart.html"><span itemprop="name">Getting Started</span></a></li></ul><div class="b
ookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Author\'s Guide","Getting Started"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="dgui.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_quickstart_basics.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-chapter" id="dgui_quickstart" itemprop="headline">Getting Started</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Section Contents</div>
+<ul><li><a class="page-menu-link" href="dgui_quickstart_basics.html" data-menu-target="dgui_quickstart_basics">Template + data-model = output</a></li><li><a class="page-menu-link" href="dgui_quickstart_datamodel.html" data-menu-target="dgui_quickstart_datamodel">The data-model at a glance</a></li><li><a class="page-menu-link" href="dgui_quickstart_template.html" data-menu-target="dgui_quickstart_template">The template at a glance</a></li></ul> </div><p>This chapter is a very rough introduction to FreeMarker. The
+ chapters after this will go over things in much greater detail.
+ Nonetheless, once you have read this chapter, you will be able to write
+ simple but useful FreeMarker templates.</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="dgui.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_quickstart_basics.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[10/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_1.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_1.html b/builds/2.3.26-nightly/versions_2_3_1.html
new file mode 100644
index 0000000..0b646ce
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_1.html
@@ -0,0 +1,352 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.1 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.1">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_1.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_1.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_1.html"><span itemprop="name">2.3.1</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.1"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_2.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_1" itemprop="headline">2.3.1</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_214" data-menu-target="autoid_214">Possible backward compatibility issue</a></li><li><a class="page-menu-link" href="#autoid_215" data-menu-target="autoid_215">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_216" data-menu-target="autoid_216">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_217" data-menu-target="autoid_217">Other changes</a></li><li><a class="page-menu-link" href="#autoid_218" data-menu-target="autoid_218">The history of the releases before the final version</a><ul><li><a class="page-menu-link" href="#autoid_219" data-menu-target="autoid_219">Differences between the preview release and final
+release</a></li></ul></li></ul> </div><p>Date of release: 2005-01-04</p><p>Maintenance (with some important new features) and bugfix
+ release.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_214">Possible backward compatibility issue</h2>
+
+
+ <p>There is a bugfix that may affect the behavior of you Web
+ application if you use JSP tags in FreeMarker templates:
+ FreeMarker's implementation of
+ <code class="inline-code">javax.servlet.jsp.PageContext.getSession()</code> was
+ incorrect. The <code class="inline-code">getSession()</code> method is a
+ convenience method by which the custom tag can get the current
+ <code class="inline-code">HttpSession</code> object (possibly
+ <code class="inline-code">null</code> if there is no session). Till now, if the
+ session didn't existed then it has created it automatically, so it
+ never returned <code class="inline-code">null</code>. This was a bug, so starting
+ from 2.3.1 it never creates the session, just returns
+ <code class="inline-code">null</code> if it doesn't exist. The old incorrect
+ behavior could cause page rendering to fail if the method is called
+ after the page is partially flushed. But beware, the old behavior
+ has possibly hidden some bugs of the Web application, where it
+ forgot to create the session, so with the new correct behavior you
+ may face malfunction caused by previously cloaked bugs of the Web
+ application. (It's the task of the MVC Controller to create the
+ session, except if the JSP tag that needs a session is written so it
+ creates it automatically, but then it doesn't expects that
+ <code class="inline-code">getSession()</code> will do it.)</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_215">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>New built-in: <a href="ref_builtins_string.html#ref_builtin_url"><code>url</code></a>. This
+ built-in can be used for URL escaping. Note, however, that to
+ use this built-in conveniently, the software that encapsulates
+ FreeMarker has to be 2.3.1 aware (programmers will find more
+ info bellow...).</p>
+ </li>
+
+ <li>
+ <p>New <a href="ref_specvar.html">special variables</a>:
+ <code class="inline-code">output_encoding</code> and
+ <code class="inline-code">url_escaping_charset</code>. Note, however, that to
+ use these, the software that encapsulates FreeMarker has to be
+ 2.3.1 aware (programmers will find more info bellow...).</p>
+ </li>
+
+ <li>
+ <p>New built-ins for sequences: <a href="ref_builtins_sequence.html#ref_builtin_seq_contains"><code>seq_contains</code></a>,
+ <a href="ref_builtins_sequence.html#ref_builtin_seq_index_of"><code>seq_index_of</code></a>,
+ <a href="ref_builtins_sequence.html#ref_builtin_seq_last_index_of"><code>seq_last_index_of</code></a>.</p>
+ </li>
+
+ <li>
+ <p>New built-ins for strings: <a href="ref_builtins_string.html#ref_builtin_left_pad"><code>left_pad</code></a>,
+ <a href="ref_builtins_string.html#ref_builtin_right_pad"><code>right_pad</code></a>
+ and <a href="ref_builtins_string.html#ref_builtin_contains"><code>contains</code></a>.</p>
+ </li>
+
+ <li>
+ <p>New directive: <a href="ref_directive_attempt.html#ref.directive.attempt"><code>attempt</code>/<code>recover</code></a></p>
+ </li>
+
+ <li>
+ <p>The <a href="ref_builtins_string.html#ref_builtin_js_string"><code>js_string</code>
+ built-in</a> now escapes <code class="inline-code">></code> as
+ <code class="inline-code">\></code> (to avoid
+ <code class="inline-code"></script></code>).</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">sort</code> and <code class="inline-code">sort_by</code>
+ built-ins now can sort by date values. Also,
+ <code class="inline-code">sort_by</code> built-in now can sort by the
+ subvarible of a subvariable of a subvariable... etc. for any
+ level depth. (<a href="ref_builtins_sequence.html#ref_builtin_sort_by">Details...</a>)</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">freemarker.template.TemplateExceptionHandler.HTML_DEBUG_HANDLER</code>
+ now prints more HTML-context-proof messages.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_216">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>New setting: <code class="inline-code">output_encoding</code>. This
+ setting is used for informing FreeMarker about the charset that
+ the enclosing software (as a Web application framework) uses for
+ the output of FreeMarker. It's undefined by default, and
+ although it is not strictly required to set it, the enclosing
+ software should do so. This setting must be set if templates
+ want to use the new <code class="inline-code">output_encoding</code> special
+ variable, and possibly if they want to use the new
+ <code class="inline-code">url</code> built-in. Note that the FreeMarker API
+ allows you to set settings for each template execution
+ individually (look at
+ <code class="inline-code">Template.createProcessingEnvironment(...)</code>).</p>
+ </li>
+
+ <li>
+ <p>New setting: <code class="inline-code">url_escaping_charset</code>. This
+ is the charset used for calculating the escaped parts
+ (<code class="inline-code">%<em class="code-color">XX</em></code>) when you do
+ URL escaping with the new <code class="inline-code">url</code> built-in. If it
+ is not set, then the <code class="inline-code">url</code> built-in uses the
+ value of the <code class="inline-code">output_encoding</code> setting, and if
+ that's not set either, then the parameterless version of
+ <code class="inline-code">url</code> built-in (<code class="inline-code">${foo?url}</code>)
+ can't be used.</p>
+ </li>
+
+ <li>
+ <p>Using the singleton (static)
+ <code class="inline-code">Configuration</code> instance is clearly a bad
+ practice, so related methods are now deprecated, and the Manual
+ was adjusted, and the <code class="inline-code">FreemarkerXmlTask</code> was
+ updated as well.</p>
+ </li>
+
+ <li>
+ <p>The
+ <code class="inline-code">freemarker.template.utility.Constants</code> class
+ was added that contains various static final fields that store
+ frequently used constant <code class="inline-code">TemplateModel</code>
+ values, as <code class="inline-code">EMPTY_SEQUENCE</code>,
+ <code class="inline-code">ZERO</code>, ...etc.</p>
+ </li>
+
+ <li>
+ <p>When using <code class="inline-code">SecurityManager</code> with
+ FreeMarker, accessing system properties may caused
+ AccessControlException. Now such exceptions are catched and
+ logged with warning level, and the default value of the property
+ is returned.</p>
+ </li>
+
+ <li>
+ <p>The needles <code class="inline-code">InvocationTargetException</code>
+ is now removed from the exception cause trace in certain
+ cases.</p>
+ </li>
+
+ <li>
+ <p>Added a dirty hack that prints
+ <code class="inline-code">ServletException</code> root cause in
+ <code class="inline-code">TemplateException</code>'s stack trace if that's the
+ direct cause exception of the
+ <code class="inline-code">TemplateException</code>, despite the poorly written
+ <code class="inline-code">ServletException</code> class.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: FreeMarker's implementation of
+ <code class="inline-code">javax.servlet.jsp.PageContext.getSession()</code>
+ was incorrect. The <code class="inline-code">getSession()</code> method is a
+ convenience method by which the custom tag can get the current
+ <code class="inline-code">HttpSession</code> object (possibly
+ <code class="inline-code">null</code> if there is no session). Till now, if
+ the session didn't existed then it has created it automatically,
+ so it never returned <code class="inline-code">null</code>. This was a bug, so
+ starting from 2.3.1 it never creates the session, just returns
+ <code class="inline-code">null</code> if it doesn't exist. The old incorrect
+ behavior could cause page rendering to fail if the method is
+ called after the page is partially flushed. But beware, the old
+ behavior has possibly hidden some bugs of the Web application,
+ where it forgot to create the session, so with the new correct
+ behavior you may face malfunction caused by previously cloaked
+ bugs of the Web application. (It's the task of the MVC
+ Controller to create the session, except if the JSP tag that
+ needs a session is written so it creates it automatically, but
+ then it doesn't expects that <code class="inline-code">getSession()</code>
+ will do it.)</p>
+ </li>
+
+ <li>
+ <p>Bugfix: The <code class="inline-code">BeansWrapper</code> didn't always
+ handled properly the case of a Java class having both a public
+ static field and a public static method with the same
+ name.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: <code class="inline-code">SimpleMethodModel</code> had
+ incorrectly propagate exceptions sometimes, causing null pointer
+ exception.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: The template execution may used outdated cached
+ values when you have processed the same
+ <code class="inline-code">Environment</code> for multiple times, and changed
+ settings between the two processings. Note that this could
+ happen only in single-thread environment, where such setting
+ modifications are allowed.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: Some of the string built-ins has died with
+ <code class="inline-code">IndexOutOfBounds</code> exception if the template
+ author has forgotten to specify required parameters. Now they
+ die with more helpful error messages.</p>
+ </li>
+
+ <li>
+ <p>Bugfix:
+ <code class="inline-code">freemarker.ext.dom.NodeModel.equals(...)</code> has
+ died with null pointer exception if its argument was
+ <code class="inline-code">null</code>.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: The cause exception of
+ <code class="inline-code">TemplateException</code>-s was sometimes printed
+ twice in stack traces with J2SE 1.4 or later.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: The
+ <code class="inline-code">StringUtil.FTLStringLiteralEnc(String)</code> method
+ was finished.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_217">Other changes</h2>
+
+
+ <ul>
+ <li>
+ <p>Fixes and improvements in the Manual and in the API
+ JavaDoc.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_218">The history of the releases before the final version</h2>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_219">Differences between the preview release and final
+ release</h3>
+
+
+ <ul>
+ <li>
+ <p>Added a dirty hack that prints
+ <code class="inline-code">ServletException</code> root cause in
+ <code class="inline-code">TemplateException</code>'s stack trace if that's
+ the direct cause exception of the
+ <code class="inline-code">TemplateException</code>, despite the poorly
+ written <code class="inline-code">ServletException</code> class.</p>
+ </li>
+
+ <li>
+ <p>Bugfix:
+ <code class="inline-code">freemarker.ext.dom.NodeModel.equals(...)</code>
+ has died with null pointer exception if its argument was
+ <code class="inline-code">null</code>.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: The cause exception of
+ <code class="inline-code">TemplateException</code>-s was sometimes printed
+ twice in stack traces with J2SE 1.4 or later.</p>
+ </li>
+
+ <li>
+ <p>More minor improvements in the Manual.</p>
+ </li>
+ </ul>
+
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_2.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_10.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_10.html b/builds/2.3.26-nightly/versions_2_3_10.html
new file mode 100644
index 0000000..69c8548
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_10.html
@@ -0,0 +1,116 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.10 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.10">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_10.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_10.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_10.html"><span itemprop="name">2.3.10</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.10"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_11.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_9.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_10" itemprop="headline">2.3.10</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_196" data-menu-target="autoid_196">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_197" data-menu-target="autoid_197">Changes on the FTL side</a></li></ul> </div><p>Date of release: 2007-04-20</p><p>This release contains several important bugfixes.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_196">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>[1589245] <code class="inline-code">MultiTemplateLoader</code> clears
+ its internal cached data (used for optimizing subsequent lookups
+ of the same template) when
+ <code class="inline-code">Configuration.clearTemplateCache()</code> is
+ invoked.</p>
+ </li>
+
+ <li>
+ <p>[1619257] A bug that caused an exception when
+ <code class="inline-code">strict_bean_model</code> was used in a FreeMarker
+ configuration <code class="inline-code">Properties</code> object or in the
+ <code class="inline-code"><#setting .../></code> directive has been
+ fixed.</p>
+ </li>
+
+ <li>
+ <p>[1685176] A bug that caused
+ <code class="inline-code">StackOverflowError</code> in certain interactions of
+ garbage collector with MRU cache under Sun's Java 6 JVM has been
+ fixed.</p>
+ </li>
+
+ <li>
+ <p>[1686955] When <code class="inline-code">ResourceBundleModel</code>
+ constructs <code class="inline-code">MessageFormat</code> objects, it passes
+ them its own locale. <a href="pgui_misc_beanwrapper.html#beanswrapper_method">More
+ info...</a></p>
+ </li>
+
+ <li>
+ <p>[1691432] A bug that caused
+ <code class="inline-code">BeansWrapper.EXPOSE_SAFE</code> to be no safer than
+ <code class="inline-code">BeansWrapper.EXPOSE_ALL</code> has been
+ fixed.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_197">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>[1628550] You can now use
+ <code class="inline-code">dateExp?string.full</code> for formatting dates
+ using Java built-in format
+ <code class="inline-code">java.util.Date.FULL</code> <a href="ref_builtins_date.html#ref_builtin_string_for_date">More info...</a></p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_11.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_9.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_11.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_11.html b/builds/2.3.26-nightly/versions_2_3_11.html
new file mode 100644
index 0000000..fa46b60
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_11.html
@@ -0,0 +1,226 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.11 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.11">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_11.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_11.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_11.html"><span itemprop="name">2.3.11</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.11"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_12.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_10.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_11" itemprop="headline">2.3.11</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_193" data-menu-target="autoid_193">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_194" data-menu-target="autoid_194">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_195" data-menu-target="autoid_195">Documentation changes</a></li></ul> </div><p>Date of release: 2007-12-04</p><p>This release contains several performance and usability
+ improvements.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_193">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1687248&group_id=794&atid=100794">[1687248]</a>
+ <strong>Warning! This bugfix may breaks some
+ templates!</strong> Fixed the bugs of the <a href="ref_builtins_number.html#ref_builtin_c"><code>c</code> built-in</a>
+ (<code class="inline-code">?c</code>) that sometimes caused whole numbers to
+ be formatted with ".0" at the end (like: 1.0), and
+ caused numbers sometimes formatted to exponential form (like
+ 4E-20). From now whole numbers will never use decimal dot (not
+ even if the wrapped number is a <code class="inline-code">double</code>;
+ remember, the template language knows only a single numerical
+ type), and exponential form will never be used either. Also, the
+ maximum number of digits after the decimal dot was limited to
+ 16, so numbers smaller than 1E-16 will be shown as 0.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_194">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>FreeMarker now has much better JSP 2.0 and JSP 2.1
+ compliance. Most notably, the JSP 2.0
+ <code class="inline-code">SimpleTag</code> interface is now supported.
+ Additionally, even when run in an environment that doesn't have
+ its own JSP implementation, the FreeMarker JSP runtime will make
+ available its own implementation of
+ <code class="inline-code">JspFactory</code> and
+ <code class="inline-code">JspEngineInfo</code> to tags when JSP 2.0 API JAR is
+ available in classpath, as well as an implementation of
+ <code class="inline-code">JspApplicationContext</code> when JSP 2.1 API JAR is
+ available in classpath.</p>
+ </li>
+
+ <li>
+ <p>A new model interface,
+ <code class="inline-code">TemplateDirectiveModel</code> provides an easier
+ paradigm for implementing user-defined directives than
+ <code class="inline-code">TemplateTransformModel</code> did previously.
+ <code class="inline-code">TemplateTransformModel</code> will be
+ deprecated.</p>
+ </li>
+
+ <li>
+ <p>FreeMarker now finds the Xalan-based XPath support
+ included in Sun JRE/JDK 5 and 6, so no separate Xalan jar is
+ required for the XPath support to work. (However, we recommend
+ Jaxen over Xalan, as the FreeMarker XPath support is more
+ complete with that. Of course for that the Jaxen jar is still
+ needed.)</p>
+ </li>
+
+ <li>
+ <p>Wrapping performance of <code class="inline-code">BeansWrapper</code>
+ has been significantly improved by eliminating repetitive
+ execution of various class tests.</p>
+
+ <p><strong>Note for
+ <code class="inline-code">BeansWrapper</code> customizers:</strong>
+ subclasses of <code class="inline-code">BeansWrapper</code> that previously
+ overrode <code class="inline-code">getInstance(Object, ModelFactory)</code>
+ method should now instead override
+ <code class="inline-code">getModelFactory(Class)</code> to take advantage of
+ this improvement. Overriding the old method still works, but it
+ will not take advantage of the performance improvement.</p>
+ </li>
+
+ <li>
+ <p>Memory footprint of a wrapper created by
+ <code class="inline-code">BeansWrapper</code> has been reduced (by a size of
+ one default-sized <code class="inline-code">HashMap</code>) until methods or
+ indexed properties are accessed on it (simple properties can be
+ accessed without increasing memory footprint).</p>
+ </li>
+
+ <li>
+ <p>Rhino objects can be used in templates as scalars,
+ numbers, and booleans, following the JavaScript conversion
+ semantics for these types.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">.data_model</code> is now a
+ <code class="inline-code">TemplatHashModelEx</code> when possible. This means
+ that the list of the data-model variable names usually can be
+ get with <code class="inline-code">.data_model?keys</code>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">FileTemplateLoader</code> can now optionally
+ allow following symlinks that point out of the base directory.
+ It is disabled by default for backward compatibility.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1670887&group_id=794&atid=100794">[1670887]</a>
+ <code class="inline-code">TaglibFactory</code> taglib matching did not follow
+ JSP 1.2 FCS.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1754320&group_id=794&atid=100794">[1754320]</a>
+ Bug in <code class="inline-code">setXPathSupportClass</code> prevented
+ plugging in a user-supplied <code class="inline-code">XPathSupport</code>
+ implementation.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1803298&group_id=794&atid=100794">[1803298]</a>
+ Parser error while parsing macro with loop variables</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1824122&group_id=794&atid=100794">[1824122]</a>
+ Loading templates from JAR files could lead to leaking of file
+ handles (due to a bug in the Java API implementation of
+ Sun).</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: Cached template is now removed from the cache
+ if the re-loading of the modified template file fails, so no
+ staled template is served.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_195">Documentation changes</h2>
+
+
+ <ul>
+ <li>
+ <p>Substantial reworkings in the Template Authors's Guide
+ (which was previously called Designer's Guide), especially in
+ the Getting Started section.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">#{...}</code> is documented as deprected
+ construct from now.</p>
+ </li>
+
+ <li>
+ <p>The "transform" term is now removed from the
+ documentation. Instead the more general "user-defined directive"
+ term is used, which encompasses macros,
+ <code class="inline-code">TemplateTransformModel</code>-s and the new
+ <code class="inline-code">TemplateDirectiveModel</code>-s, which are just
+ different ways of implementing user-defined directives.</p>
+ </li>
+
+ <li>
+ <p>Some more minor improvements in the Manual.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_12.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_10.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_12.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_12.html b/builds/2.3.26-nightly/versions_2_3_12.html
new file mode 100644
index 0000000..ddf737e
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_12.html
@@ -0,0 +1,88 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.12 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.12">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_12.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_12.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_12.html"><span itemprop="name">2.3.12</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.12"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_13.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_11.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_12" itemprop="headline">2.3.12</h1>
+</div></div><p>Date of release: 2008-02-03</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_192">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1857161&group_id=794&atid=100794">[1857161]</a>
+ JSP <code class="inline-code">SimpleTag</code> support was broken in
+ 2.3.11.</p>
+ </li>
+
+ <li>
+ <p>In the templates, now you can conveniently call Java
+ methods that use the Java 5 varargs feature (variable-length
+ argument lists). Also the overloaded-method chooser logic now
+ considers vararg methods more intelligently.</p>
+ </li>
+
+ <li>
+ <p>Enum constants are now identified by their
+ <code class="inline-code">name()</code> instead of by their
+ <code class="inline-code">toString()</code> (because the latter can be
+ overridden in subclasses). This doesn't affect the way enum
+ constants are printed; of course that still uses
+ <code class="inline-code">toString()</code>.</p>
+ </li>
+
+ <li>
+ <p>Messages in parser exceptions now display the name of the
+ template.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_13.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_11.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_13.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_13.html b/builds/2.3.26-nightly/versions_2_3_13.html
new file mode 100644
index 0000000..3ff89e3
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_13.html
@@ -0,0 +1,125 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.13 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.13">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_13.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_13.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_13.html"><span itemprop="name">2.3.13</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.13"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_14.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_12.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_13" itemprop="headline">2.3.13</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_190" data-menu-target="autoid_190">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_191" data-menu-target="autoid_191">Changes on the Java side</a></li></ul> </div><p>Date of release: 2008-05-05</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_190">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>New built-ins for rounding numbers:
+ <code class="inline-code">round</code>, <code class="inline-code">floor</code>,
+ <code class="inline-code">ceiling</code>. See more <a href="ref_builtins_number.html#ref_builtin_rounding">here...</a></p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_191">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p><a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1898300&group_id=794&atid=350794">[1898300]</a>,
+ <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1818742&group_id=794&atid=350794">[1818742]</a>,
+ <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1780882&group_id=794&atid=350794">[1780882]</a>:
+ Reworked template caching mechanism for radically improved
+ concurrent performance, with help from Azul Systems engineers.
+ (Achieved 20x speedup with Struts2 webapps on a 128-CPU Azul
+ device compared to 2.3.12.) Also, template loading (including
+ parsing) errors are now cached, improving performance in
+ applications that often try to get missing templates.</p>
+ </li>
+
+ <li>
+ <p><a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1892546&group_id=794&atid=100794">[1892546]</a>
+ Allow for custom <code class="inline-code">TemplateLoader</code> in
+ <code class="inline-code">FreemarkerServlet</code>.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1725107&group_id=794&atid=100794">[1725107]</a>
+ Using the FreeMarker JSP taglib support with Servlet 2.4 may
+ generates XML validation warnings.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1939742&group_id=794&atid=100794">[1939742]</a>
+ <code class="inline-code">ConcurrentModificationException</code> on accessing
+ nonexistent <code class="inline-code">SimpleHash</code> entries in a
+ loop</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1902012&group_id=794&atid=100794">[1902012]</a>
+ <code class="inline-code">IteratorModel</code> eats exception causes</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <code class="inline-code"><#assign
+ x></#assign></code> (empty nested content) has
+ caused <code class="inline-code">NullPointerException</code></p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1926150&group_id=794&atid=100794">[1926150]</a>
+ <code class="inline-code">CachedTemplate</code> should be serializable</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_14.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_12.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_14.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_14.html b/builds/2.3.26-nightly/versions_2_3_14.html
new file mode 100644
index 0000000..df9eb61
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_14.html
@@ -0,0 +1,136 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.14 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.14">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_14.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_14.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_14.html"><span itemprop="name">2.3.14</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.14"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_15.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_13.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_14" itemprop="headline">2.3.14</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_188" data-menu-target="autoid_188">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_189" data-menu-target="autoid_189">Changes on the Java side</a></li></ul> </div><p>Date of release: 2008-09-01</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_188">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>New built-in: <code class="inline-code">xhtml</code>. See more <a href="ref_builtins_string.html#ref_builtin_xhtml">here...</a></p>
+ </li>
+
+ <li>
+ <p>New special variable: <code class="inline-code">template_name</code>.
+ See more <a href="ref_specvar.html">here...</a></p>
+ </li>
+
+ <li>
+ <p>Now you can use the values of parameters as the defaults
+ of other parameters, for example <code class="inline-code"><#macro section
+ title label=title></code>. In earlier versions it worked
+ unreliably. There are no restriction regarding the order of
+ parameters, like <code class="inline-code"><#macro section label=title
+ title></code> works too.</p>
+ </li>
+
+ <li>
+ <p>Added a new <a href="ref_builtins_number.html#ref_builtin_string_for_number">number format
+ specifier</a>, <code class="inline-code">computer</code>. This uses the
+ same formatting as
+ <code class="inline-code"><em class="code-color">exp</em>?c</code>.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_189">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>The constructor to
+ <code class="inline-code">freemarker.ext.servlet.AllHttpScopesHashModel</code>
+ is now public, allowing it to be reused in 3rd party web
+ frameworks.</p>
+ </li>
+
+ <li>
+ <p>Bugfix:
+ <code class="inline-code">freemarker.ext.beans.SimpleMapModel</code> (unlike
+ either <code class="inline-code">freemarker.ext.beans.MapModel</code> or
+ <code class="inline-code">freemarker.template.SimpleHash</code>) didn't allow
+ lookup by <code class="inline-code">java.lang.Character</code> key when passed
+ a single-character string as a key.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: permissive unwrapping in
+ <code class="inline-code">freemarker.template.utility.DeepUnwrap</code> class
+ was not recursively permissive with elements of sequences and
+ hashes.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: <code class="inline-code">freemarker.ext.beans.MapModel</code>
+ returns <code class="inline-code">BeansWrapper.wrap(null)</code> instead of
+ <code class="inline-code">null</code> for <code class="inline-code">null</code> values
+ explicitly bound into the map.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: Fixed a subtle bug with property getters of
+ classes implementing a type-parametrized interface.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: A further corner case of <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1939742&group_id=794&atid=100794">[1939742]</a>.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_15.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_13.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[43/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/dgui_misc_autoescaping.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/dgui_misc_autoescaping.html b/builds/2.3.26-nightly/dgui_misc_autoescaping.html
new file mode 100644
index 0000000..f234ea6
--- /dev/null
+++ b/builds/2.3.26-nightly/dgui_misc_autoescaping.html
@@ -0,0 +1,718 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Auto-escaping and output formats - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Auto-escaping and output formats">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/dgui_misc_autoescaping.html">
+<link rel="canonical" href="http://freemarker.org/docs/dgui_misc_autoescaping.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui.html"><span itemprop="name">Template Author's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_misc.html"><span itemprop="name">Miscellaneous</span></a></li><li class="step-3" itempro
p="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_misc_autoescaping.html"><span itemprop="name">Auto-escaping and output formats</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Author\'s Guide","Miscellaneous","Auto-escaping and output formats"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="dgui_misc_namespace.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_misc_whitespace.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="dgui_misc_autoescaping" itemprop="headline">Auto-escaping and output formats</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#dgui_misc_autoescaping_outputformat" data-menu-target="dgui_misc_autoescaping_outputformat">Output formats</a></li><li><a class="page-menu-link" href="#dgui_misc_autoescaping_overrideoformat" data-menu-target="dgui_misc_autoescaping_overrideoformat">Overriding the output format in templates</a></li><li><a class="page-menu-link" href="#dgui_misc_autoescaping_disableautoesc" data-menu-target="dgui_misc_autoescaping_disableautoesc">Disabling auto escaping</a></li><li><a class="page-menu-link" href="#dgui_misc_autoescaping_movalues" data-menu-target="dgui_misc_autoescaping_movalues">"Markup output" values</a></li><li><a class="page-menu-link" href="#autoid_28" data-menu-target="autoid_28">Further details and tricky cases</a><ul><li><a class="page-menu-link" href="#dgui_misc_autoescaping_nonmarkupof" data-menu-target="dgui_misc_autoescaping_nonmarkupof">Non-markup output formats</a></li><li><a class="page-menu-link" href="#dgui_misc_autoescaping_m
ixingoutputformats" data-menu-target="dgui_misc_autoescaping_mixingoutputformats">Inserting markup output values from other markups</a></li><li><a class="page-menu-link" href="#dgui_misc_autoescaping_concatenation" data-menu-target="dgui_misc_autoescaping_concatenation">Markup output values and the "+"
+operator</a></li><li><a class="page-menu-link" href="#dgui_misc_autoescaping_stringliteral" data-menu-target="dgui_misc_autoescaping_stringliteral">${...} inside string literals</a></li><li><a class="page-menu-link" href="#autoid_29" data-menu-target="autoid_29">Combined output formats</a></li></ul></li></ul> </div><p>This is a <em>detailed</em> tutorial to
+ auto-escaping and related concepts; for the bare minimum, <a href="dgui_quickstart_template.html#dgui_quickstart_template_autoescaping">read this
+ instead</a>.</p> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>The kind of automatic escaping described here requires at
+ least FreeMarker 2.3.24. If you have to use an earlier version, use
+ the deprecated <a href="ref_directive_escape.html"><code>escape</code>
+ directive</a> instead.</p>
+ </div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="dgui_misc_autoescaping_outputformat">Output formats</h2>
+
+
+
+
+ <p>Each template has an associated output format <span class="marked-for-programmers">(a
+ <code class="inline-code">freemarker.core.OutputFormat</code> instance)</span>.
+ The output format dictates the escaping rules, which is applied on
+ all <code class="inline-code">${<em class="code-color">...</em>}</code>-s (and
+ <code class="inline-code">#{<em class="code-color">...</em>}</code>-s) that aren't
+ <a href="#dgui_misc_autoescaping_stringliteral">inside a string
+ literal</a>. It also specifies a MIME type (e.g.
+ <code class="inline-code">"text/HTML"</code>) and a canonical name (e.g.
+ <code class="inline-code">"HTML"</code>) that the embedding application/framework
+ can use for its own purposes.</p>
+
+ <p>It's the programmer's responsibility to <a href="pgui_config_outputformatsautoesc.html">associate output format
+ to templates</a>. Furthermore it's recommended that FreeMarker is
+ configured so that templates with <code class="inline-code">ftlh</code> and
+ <code class="inline-code">ftlx</code> file extensions are automatically associated
+ with the HTML and XML output formats, respectively.</p>
+
+ <p><a name="topic.predefinedOutputFormats"></a>The predefined output
+ formats are:</p>
+
+ <div class="table-responsive">
+ <table class="table">
+
+ <thead>
+ <tr>
+ <th>Name</th>
+
+
+ <th>Description</th>
+
+
+ <th>MIME Type</th>
+
+
+ <th>Default implementation
+ (<code class="inline-code">freemarker.core.*</code>)</th>
+
+ </tr>
+
+ </thead>
+
+
+ <tbody>
+ <tr>
+ <td><code class="inline-code">HTML</code></td>
+
+
+ <td>Escapes <code class="inline-code"><</code>, <code class="inline-code">></code>,
+ <code class="inline-code">&</code>, <code class="inline-code">"</code>,
+ <code class="inline-code">'</code> as <code class="inline-code">&lt;</code>,
+ <code class="inline-code">&gt;</code>, <code class="inline-code">&amp;</code>,
+ <code class="inline-code">&quot;</code>,
+ <code class="inline-code">&#39;</code></td>
+
+
+ <td><code class="inline-code">text/html</code></td>
+
+
+ <td><code class="inline-code">HTMLOutputFormat.INSTANCE</code></td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">XHTML</code></td>
+
+
+ <td>Escapes <code class="inline-code"><</code>, <code class="inline-code">></code>,
+ <code class="inline-code">&</code>, <code class="inline-code">"</code>,
+ <code class="inline-code">'</code> as <code class="inline-code">&lt;</code>,
+ <code class="inline-code">&gt;</code>, <code class="inline-code">&amp;</code>,
+ <code class="inline-code">&quot;</code>,
+ <code class="inline-code">&#39;</code></td>
+
+
+ <td><code class="inline-code">application/xhtml+xml</code></td>
+
+
+ <td><code class="inline-code">XHTMLOutputFormat.INSTANCE</code></td>
+
+ </tr>
+
+ </tbody>
+
+
+ <tbody>
+ <tr>
+ <td><code class="inline-code">XML</code></td>
+
+
+ <td>Escapes <code class="inline-code"><</code>, <code class="inline-code">></code>,
+ <code class="inline-code">&</code>, <code class="inline-code">"</code>,
+ <code class="inline-code">'</code> as <code class="inline-code">&lt;</code>,
+ <code class="inline-code">&gt;</code>, <code class="inline-code">&amp;</code>,
+ <code class="inline-code">&quot;</code>,
+ <code class="inline-code">&apos;</code></td>
+
+
+ <td><code class="inline-code">application/xml</code></td>
+
+
+ <td><code class="inline-code">XMLOutputFormat.INSTANCE</code></td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">RTF</code></td>
+
+
+ <td>Escapes <code class="inline-code">{</code>, <code class="inline-code">}</code>,
+ <code class="inline-code">\</code> as <code class="inline-code">\{</code>,
+ <code class="inline-code">\}</code>, <code class="inline-code">\\</code></td>
+
+
+ <td><code class="inline-code">application/rtf</code></td>
+
+
+ <td><code class="inline-code">RTFOutputFormat.INSTANCE</code></td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">undefined</code></td>
+
+
+ <td>Doesn't escape. Prints markup output values (concept
+ explained <a href="#dgui_misc_autoescaping_movalues">later</a>) from
+ other output formats as is. The default output format used
+ when no output format was explicitly set in the
+ configuration.</td>
+
+
+ <td>None (<code class="inline-code">null</code>)</td>
+
+
+ <td><code class="inline-code">UndefinedOutputFormat.INSTANCE</code></td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">plainText</code></td>
+
+
+ <td>Doesn't escape.</td>
+
+
+ <td><code class="inline-code">text/plain</code></td>
+
+
+ <td><code class="inline-code">PlainTextOutputFormat.INSTANCE</code></td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">JavaScript</code></td>
+
+
+ <td>Doesn't escape.</td>
+
+
+ <td><code class="inline-code">application/javascript</code></td>
+
+
+ <td><code class="inline-code">JavaScriptOutputFormat.INSTANCE</code></td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">JSON</code></td>
+
+
+ <td>Doesn't escape.</td>
+
+
+ <td><code class="inline-code">application/json</code></td>
+
+
+ <td><code class="inline-code">JSONOutputFormat.INSTANCE</code></td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">CSS</code></td>
+
+
+ <td>Doesn't escape.</td>
+
+
+ <td><code class="inline-code">text/css</code></td>
+
+
+ <td><code class="inline-code">CSSOutputFormat.INSTANCE</code></td>
+
+ </tr>
+
+ </tbody>
+
+ </table>
+ </div>
+
+
+ <p>The programmers can add their your own output formats, so this
+ is maybe not all the output formats in your application!</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="dgui_misc_autoescaping_overrideoformat">Overriding the output format in templates</h2>
+
+
+ <p>Especially in legacy applications, you will often find that
+ the output format is <code class="inline-code">undefined</code> (you can check
+ that with <code class="inline-code">${.output_format}</code>), and so no automatic
+ escaping is happening. In other cases, a common output format (like
+ HTML) is set for all templates, but a few templates need a different
+ output format. In any case, the output format of a template can be
+ enforced in the <a href="ref_directive_ftl.html">the
+ <code>ftl</code> header</a>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#ftl output_format="XML">
+${"'"} <#-- Prints: &apos; --></pre></div>
+
+ <p>Above, the output format was referred by its name shown in the
+ earlier table <em>(looked up via
+ <code class="inline-code">Configuration.getOutputFormat(String name)</code>,
+ actually)</em>.</p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>If escaping doesn't happen after adding the above
+ <code class="inline-code">ftl</code> header, then <code class="inline-code"><#ftl
+ output_format="XML" auto_esc=true></code> might helps (and
+ that means that FreeMarker was configured to use
+ "disable" auto-escaping <em>policy</em>,
+ which is generally not recommended).</p>
+ </div>
+
+
+ <p>The output format can also be applied to only a section of a
+ template, like:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#-- Let's assume we have "HTML" output format by default. -->
+${"'"} <#-- Prints: &#39; -->
+<#outputformat "XML">
+ ${"'"} <#-- Prints: &apos; -->
+</#outputformat>
+${"'"} <#-- Prints: &#39; --></pre></div>
+
+ <p>Basically, each position in a template has an associated
+ output format, and as you saw above, it might not be the same
+ everywhere in the template. This association sticks to the positions
+ and won't change as the template executes. So if, for example, you
+ call a macro from inside an <code class="inline-code">outputformat</code> block
+ and the called macro is defined outside that block, it won't get the
+ output format of it. Or, if you have a macro that's defined in a
+ template with HTML output format, no mater from where you call it,
+ that macro will always execute with HTML output format. This is like
+ if you were coloring each characters of the template files by output
+ format in the text editor, and then later when the templates are
+ executed, it only considers the color of the statement being
+ executed. This gives you firm control over the output format and
+ hence escaping; you don't have to consider the possible execution
+ paths that can lead to a point.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="dgui_misc_autoescaping_disableautoesc">Disabling auto escaping</h2>
+
+
+ <p>For a single interpolation you can disable auto-escaping with
+ <a href="ref_builtins_string.html#ref_builtin_no_esc"><code>?no_esc</code></a>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#-- Let's assume we have "HTML" output format by default. -->
+${'<b>test</b>'} <#-- prints: &lt;b&gt;test&lt;/b&gt; -->
+${'<b>test</b>'<strong>?no_esc</strong>} <#-- prints: <b>test</b> --></pre></div>
+
+ <p>You can also disable auto escaping for a whole section with
+ the <a href="ref_directive_noautoesc.html"><code>noautoesc</code>
+ directive</a>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${'&'} <#-- prints: &amp; -->
+<strong><#noautoesc></strong>
+ ${'&'} <#-- prints: & -->
+ ...
+ ${'&'} <#-- prints: & -->
+<strong></#noautoesc></strong>
+${'&'} <#-- prints: &amp; --></pre></div>
+
+ <p>Just like <code class="inline-code">outputformat</code>, this only applies
+ to the part that's literally inside the block
+ ("coloring" logic).</p>
+
+ <p>Auto-escaping can also be disabled for the whole template in
+ the <code class="inline-code">ftl</code> header. It can then be re-enabled for a
+ section with the <a href="ref_directive_autoesc.html"><code>autoesc</code>
+ directive</a>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#ftl <strong>autoesc=false</strong>>
+${'&'} <#-- prints: & -->
+<strong><#autoesc></strong>
+ ${'&'} <#-- prints: &amp; -->
+ ...
+ ${'&'} <#-- prints: &amp; -->
+<strong></#autoesc></strong>
+${'&'} <#-- prints: & --></pre></div>
+
+ <p>You can also force escaping for an individual interpolation
+ when escaping is disabled, with <a href="ref_builtins_string.html#ref_builtin_esc"><code>?esc</code></a>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#ftl <strong>autoesc=false</strong>>
+${'&'} <#-- prints: & -->
+${'&'<strong>?esc</strong>} <#-- prints: &amp; --></pre></div>
+
+ <p>Naturally, both <code class="inline-code">autoesc</code> and
+ <code class="inline-code">?esc</code> works inside <code class="inline-code">noautoesc</code>
+ blocks too.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="dgui_misc_autoescaping_movalues">"Markup output" values</h2>
+
+
+ <p>In FTL, <a href="dgui_datamodel_basics.html">values have
+ type</a>, like string, number, boolean, etc. One such type is
+ called "markup output". A value of that type is a piece
+ of text that's already in the output format (like HTML), and hence
+ needs no further escaping. We have already produced such values
+ earlier:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code"><em class="code-color">s</em>?esc</code>
+ creates a markup output value out of a string value by escaping
+ all special characters in it.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code"><em class="code-color">s</em>?no_esc</code>
+ creates a markup output value out of a string value by assuming
+ that the string already stores markup and so needs no further
+ escaping</p>
+ </li>
+ </ul>
+
+ <p>These can be useful outside
+ <code class="inline-code">${<em class="code-color">...</em>}</code> too. For
+ example, here the caller of the <code class="inline-code">infoBox</code> macro can
+ decide if the message is plain text (hence needs escaping) or HTML
+ (hence it mustn't be escaped):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#-- We assume that we have "HTML" output format by default. -->
+
+<@infoBox "Foo & bar" />
+<@infoBox "Foo <b>bar</b>"?no_esc />
+
+<#macro infoBox message>
+ <div class="infoBox">
+ ${message}
+ </div>
+</#macro></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> <div class="infoBox">
+ Foo &amp; bar
+ </div>
+ <div class="infoBox">
+ Foo <b>bar</b>
+ </div></pre></div>
+
+ <p>Another case where you get a markup output value is output
+ capturing:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#-- We assume that we have "HTML" output format by default. -->
+<#assign captured><b>Test</b></#assign>
+Just a string: ${"<b>Test</b>"}
+Captured output: ${captured}</pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">Just a string: &lt;b&gt;Test&lt;/b&gt;
+Captured output: <b>Test</b></pre></div>
+
+ <p>Because the captured output is markup output, it wasn't
+ auto-escaped.</p>
+
+ <p>It's important that markup output values aren't strings, and
+ aren't automatically coerced to strings. Thus
+ <code class="inline-code">?upper_case</code>, <code class="inline-code">?starts_with</code>
+ etc., will give an error with them. You won't be able to pass them
+ to Java methods for <code class="inline-code">String</code> parameters either. But
+ sometimes you need the markup that's behind the value as a string,
+ which you can get as
+ <code class="inline-code"><em class="code-color">markupOutput</em>?markup_string</code>.
+ Be sure you know what you are doing though. Applying string
+ operations on markup (as opposed to on plain text) can result in
+ invalid markup. Also there's the danger of unintended double
+ escaping.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#-- We assume that we have "HTML" output format by default. -->
+
+<#assign markupOutput1="<b>Test</b>"?no_esc>
+<#assign markupOutput2="Foo & bar"?esc>
+
+As expected:
+${markupOutput1}
+${markupOutput2}
+
+Possibly unintended double escaping:
+${markupOutput1?markup_string}
+${markupOutput2?markup_string}</pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">As expected:
+<b>Test</b>
+Foo &amp; bar
+
+Possibly unintended double escaping:
+&lt;b&gt;Test&lt;/b&gt;
+Foo &amp;amp; bar</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_28">Further details and tricky cases</h2>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_misc_autoescaping_nonmarkupof">Non-markup output formats</h3>
+
+
+ <p>An output format is said to be a non-markup format if it
+ defines no escaping rules. Examples of such output formats are the
+ <code class="inline-code">undefined</code> format and the
+ <code class="inline-code">plainText</code> format.</p>
+
+ <p>These formats produce no <a href="#dgui_misc_autoescaping_movalues">markup output
+ values</a>, hence you can't use <code class="inline-code">?esc</code> or
+ <code class="inline-code">?no_esc</code> when they are the current format. You
+ can use output capturing (like <code class="inline-code"><#assign
+ captured><em class="code-color">...</em></#assign></code>),
+ but the resulting value will be a string, not a markup output
+ value.</p>
+
+ <p>Furthermore, you aren't allowed to use the
+ <code class="inline-code">autoesc</code> directive or <code class="inline-code"><#ftl
+ auto_esc=true></code> when the current output format is
+ non-markup.</p>
+
+ <p>Using constructs that aren't supported by the current output
+ format will give <a href="gloss.html#gloss.parseTimeError">parse-time
+ error</a>.</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_misc_autoescaping_mixingoutputformats">Inserting markup output values from other markups</h3>
+
+
+ <p>Each <a href="#dgui_misc_autoescaping_movalues">markup
+ output value</a> has an associated <a href="#dgui_misc_autoescaping_outputformat">output
+ format</a>. When a markup output value is inserted with
+ <code class="inline-code">${<em class="code-color">...</em>}</code> (or
+ <code class="inline-code">#{<em class="code-color">...</em>}</code>), it has to
+ be converted to the current output format at the point of
+ insertion (if they differ). As of this writing (2.3.24), such
+ output format conversion will only be successful if the value to
+ convert was created by escaping plain text:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#-- We assume that we have "HTML" output format by default. -->
+
+<#assign mo1 = "Foo's bar {}"?esc>
+HTLM: ${mo1}
+XML: <#outputformat 'XML'>${mo1}</#outputformat>
+RTF: <#outputformat 'RTF'>${mo1}</#outputformat>
+
+<#assign mo2><p>Test</#assign>
+HTML: ${mo2}
+XML: <#attempt><#outputformat 'XML'>${mo2}</#outputformat><#recover>Failed</#attempt>
+RTF: <#attempt><#outputformat 'RTF'>${mo2}</#outputformat><#recover>Failed</#attempt></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">HTLM: Foo&#39;s bar {}
+XML: Foo&apos;s bar {}
+RTF: Foo's bar \{\}
+
+HTML: <p>Test
+XML: Failed
+RTF: Failed</pre></div>
+
+ <p>But, an output format can also chose to insert pieces of
+ other output formats as is, without converting them. Among the
+ standard output formats, <code class="inline-code">undefined</code> is like
+ that, which is the output format used for templates for which no
+ output format was specified in the configuration:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#-- We assume that we have "undefined" output format here. -->
+
+<#outputformat "HTML"><#assign htmlMO><p>Test</#assign></#outputformat>
+<#outputformat "XML"><#assign xmlMO><p>Test</p></#assign></#outputformat>
+<#outputformat "RTF"><#assign rtfMO>\par Test</#assign></#outputformat>
+HTML: ${htmlMO}
+XML: ${xmlMO}
+RTF: ${rtfMO}</pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">HTML: <p>Test
+XML: <p>Test</p>
+RTF: \par Test</pre></div>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_misc_autoescaping_concatenation">Markup output values and the "+"
+ operator</h3>
+
+
+ <p>As you certainly know, if one of the sides of the
+ <code class="inline-code">+</code> operator is a string then <a href="dgui_template_exp.html#dgui_template_exp_stringop_concatenation">it does
+ concatenation</a>. If there's a <a href="#dgui_misc_autoescaping_movalues">markup output
+ value</a> in one side, the other side gets promoted to markup
+ output value of the same output format (if it's not already that),
+ by escaping its string value, and finally the two markups are
+ concatenated to form a new markup output value. Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#-- We assume that we have "HTML" output format by default. -->
+${"<h1>"?no_esc + "Foo & bar" + "</h1>"?no_esc}</pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"><h1>Foo &amp; bar</h1></pre></div>
+
+ <p>If the two sides of the <code class="inline-code">+</code> operator are
+ markup values of different output formats, the right side operand
+ is converted to the output format of the left side. If that's not
+ possible, then the left side operand is converted to the output
+ format of the right side. If that isn't possible either, that's an
+ error. (See the <a href="#dgui_misc_autoescaping_mixingoutputformats">limitations
+ of conversions here</a>.)</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_misc_autoescaping_stringliteral">${...} inside string literals</h3>
+
+
+ <p>When <code class="inline-code">${<em class="code-color">...</em>}</code> is
+ used inside string <em>expressions</em> (e.g., in
+ <code class="inline-code"><#assign s = "Hello ${name}!"></code>), it's
+ just a shorthand of using the <code class="inline-code">+</code> operator
+ (<code class="inline-code"><#assign s = "Hello" + name + "!"></code>).
+ Thus, <code class="inline-code">${<em class="code-color">...</em>}</code>-s
+ inside string expressions aren't auto-escaped, but of course when
+ the resulting concatenated string is printed later, it will be
+ possibly auto-escaped.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#-- We assume that we have "HTML" output format by default. -->
+<#assign name = "Foo & Bar">
+
+<#assign s = "<p>Hello ${name}!">
+${s}
+<p>Hello ${name}!
+
+To prove that s didn't contain the value in escaped form:
+${s?replace('&'), 'and'}</pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">&lt;p&gt;Hello Foo &amp; Bar!
+<p>Hello Foo &amp; Bar!
+
+To prove that "s" didn't contain the value in escaped form:
+&lt;p&gt;Hello Foo and Bar!</pre></div>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_29">Combined output formats</h3>
+
+
+ <p>Combined output formats are output formats that are created
+ ad-hoc from other output formats by nesting them into each other,
+ so that the escaping of both output formats are applied. <a href="ref_directive_outputformat.html#topic.combinedOutputFormats">They are discussed
+ here...</a></p>
+
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="dgui_misc_namespace.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_misc_whitespace.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/dgui_misc_namespace.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/dgui_misc_namespace.html b/builds/2.3.26-nightly/dgui_misc_namespace.html
new file mode 100644
index 0000000..ba514ea
--- /dev/null
+++ b/builds/2.3.26-nightly/dgui_misc_namespace.html
@@ -0,0 +1,315 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Namespaces - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Namespaces">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/dgui_misc_namespace.html">
+<link rel="canonical" href="http://freemarker.org/docs/dgui_misc_namespace.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui.html"><span itemprop="name">Template Author's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_misc.html"><span itemprop="name">Miscellaneous</span></a></li><li class="step-3" itempro
p="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_misc_namespace.html"><span itemprop="name">Namespaces</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Author\'s Guide","Miscellaneous","Namespaces"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="dgui_misc_var.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_misc_autoescaping.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="dgui_misc_namespace" itemprop="headline">Namespaces</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_23" data-menu-target="autoid_23">Creating a library</a></li><li><a class="page-menu-link" href="#autoid_24" data-menu-target="autoid_24">Writing the variables of imported namespaces</a></li><li><a class="page-menu-link" href="#autoid_25" data-menu-target="autoid_25">Namespaces and data-model</a></li><li><a class="page-menu-link" href="#autoid_26" data-menu-target="autoid_26">The life-cycle of namespaces</a></li><li><a class="page-menu-link" href="#autoid_27" data-menu-target="autoid_27">Auto-importing</a></li></ul> </div><p>When you run templates, you have a (possibly empty) set of
+ variables that you have created with <code class="inline-code">assign</code> and
+ <code class="inline-code">macro</code> and <code class="inline-code">function</code> directives
+ (see in the <a href="dgui_misc_var.html">previous chapter</a>). A
+ set of template-made variables like that is called a <strong>namespace</strong>. In simple cases you use only one
+ namespace, the <strong>main namespace</strong>.
+ Whenever you define a variable in the main template (macros and
+ functions are also variables, mind you), or in templates <a href="ref_directive_include.html#ref.directive.include"><code>include</code>-d</a> in
+ it, that's where the variable are created. The key property of a
+ namespace is that the variable name uniquely identifies a value in it
+ (i.e, you can't have multiple variables in it with the same name in
+ the same namespace).</p><p>Sometimes you want to build reusable collection of macros,
+ functions, and other variables, which we call a <strong>library</strong>. It's important that a library can use
+ its own namespace, to avoid accidental name clashes. Consider, you may
+ have many names in that library, and you intend to use the library in
+ many templates, maybe even reuse it in several projects. It becomes
+ impractical to keep track of where the library used in another
+ template accidentally hides variables from the data-model, or what
+ names you shouldn't assign to in the template to avoid overwriting the
+ variables of the library. If you have multiple libraries used in the
+ same template, this becomes even harder to track. So you should use a
+ separate namespace for the variables of each library.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_23">Creating a library</h2>
+
+
+ <p>Here's a simple library, which contains a
+ <code class="inline-code">copyright</code> macro and a <code class="inline-code">mail</code>
+ string:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro copyright date>
+ <p>Copyright (C) ${date} Someone. All rights reserved.</p>
+</#macro>
+
+<#assign mail = "user@example.com"></pre></div>
+
+ <p>Save this into the <code class="inline-code">lib/example.ftl</code> file
+ (inside the directory where you store the templates). Then create a
+ template, let's say, <code class="inline-code">some_web_page.ftl</code>, and use
+ the library in it:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#<strong>import</strong> "/lib/example.ftl" as <strong>e</strong>>
+
+Some Web page...
+<@<strong>e</strong>.copyright date="1999-2002"/>
+${<strong>e</strong>.mail}</pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">Some Web page...
+ <p>Copyright (C) 1999-2002 Someone. All rights reserved.</p>
+user@example.com</pre></div>
+
+ <p>Note the <a href="ref_directive_import.html#ref.directive.import"><code>import</code>
+ directive</a> above, and the subsequent usage of the
+ "<code class="inline-code">e</code>" variable.
+ <code class="inline-code">import</code> is similar to the perhaps already familiar
+ <a href="ref_directive_include.html#ref.directive.include"><code>include</code>
+ directive</a>, but it will create an empty namespace and will run
+ <code class="inline-code">lib/example.ftl</code> in that namespace. So
+ <code class="inline-code">lib/example.ftl</code> will find itself in a clean
+ world, where only the variables of the data-models are visible (and
+ the globals), and will create its two variables
+ (<code class="inline-code">copyright</code> and <code class="inline-code">mail</code>) in this
+ clean namespace. But you will need to access those two variables
+ from another namespace (the main namespace), thus, the
+ <code class="inline-code">import</code> directive creates a hash variable
+ (<code class="inline-code">e</code> in this case) to access the namespace it has
+ created . That variable is in the namespace that the
+ <code class="inline-code">import</code>-ing template uses, and acts as a window to
+ the namespace of the imported library.</p>
+
+ <p>To demonstrate that the two namespaces are separate, consider
+ the example below. Replace <code class="inline-code">lib/example.ftl</code> with
+ this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro copyright date>
+ <p>Copyright (C) ${date} Someone. All rights reserved.
+ <br>Email: <strong>${mail}</strong></p>
+</#macro>
+
+<#assign mail = "user@example.com"></pre></div>
+
+ <p>and <code class="inline-code">some_web_page.ftl</code> with this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#import "/lib/example.ftl" as e>
+<strong><#assign mail="other@example.com"></strong>
+<@e.copyright date="1999-2002"/>
+${e.mail}
+${mail}</pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> <p>Copyright (C) 1999-2002 Someone. All rights reserved.
+ <br>Email: <strong>user@example.com</strong></p>
+user@example.com
+other@example.com</pre></div>
+
+ <p>As you can see, the <code class="inline-code">mail</code> variable assigned
+ in <code class="inline-code">some_web_page.ftl</code> is separate from the
+ <code class="inline-code">mail</code> variable assigned in the imported
+ library.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_24">Writing the variables of imported namespaces</h2>
+
+
+ <p>Sometimes you want to create or replace a variable in an
+ imported namespace. You can do that with the
+ <code class="inline-code">assign</code> directive and its
+ <code class="inline-code">namespace</code> parameter:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#import "/lib/example.ftl" as e>
+${my.mail}
+<#assign mail="other@example.com" <strong>in e</strong>>
+${my.mail}</pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">user@example.com
+other@example.com</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_25">Namespaces and data-model</h2>
+
+
+ <p>The variables of the data-model are visible from everywhere.
+ For example, if you have a variable called <code class="inline-code">user</code>
+ in the data-model, <code class="inline-code">lib/example.ftl</code> will access
+ that, exactly like <code class="inline-code">some_web_page.ftl</code> does:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro copyright date>
+ <p>Copyright (C) ${date} <strong>${user}</strong>. All rights reserved.</p>
+</#macro></pre></div>
+
+ <p>Assuming <code class="inline-code">user</code> is "John
+ Doe":</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#import "/lib/my_test.ftl" as my>
+User is: ${user}
+<@my.copyright date="1999-2002"/></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">User is: John Doe
+ <p>Copyright (C) 1999-2002 John Doe. All rights reserved.</p></pre></div>
+
+ <p>Don't forget that the variables in the namespace (the
+ variables you create with <code class="inline-code">assign</code>,
+ <code class="inline-code">macro</code>, and <code class="inline-code">function</code>
+ directives) have precedence over the variables of the data-model
+ when you are in that namespace. So generally, if a library is
+ interested in a data-model variable, it doesn't assign to the same
+ name.</p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>In some unusual applications you want to create variables in
+ the template that are visible from all namespaces, exactly like
+ the variables of the data-model. While templates can't change the
+ data-model, it's possible to achieve similar effect with the
+ <code class="inline-code">global</code> directive; see the <a href="ref_directive_global.html#ref.directive.global">reference</a>.</p>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_26">The life-cycle of namespaces</h2>
+
+
+ <p>A namespace is identified by the path used in the
+ <code class="inline-code">import</code> directive (after it was normalized to an
+ absolute path). If you try to <code class="inline-code">import</code> with
+ equivalent paths for multiple times, it will create the namespace
+ and run the template for only the first invocation of
+ <code class="inline-code">import</code>. The later <code class="inline-code">import</code>-s
+ with equivalent paths will just assign the same namespace to the
+ variable specified after the <code class="inline-code">as</code> keyword. For
+ example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#import "/lib/example.ftl" as e>
+<#import "/lib/example.ftl" as e2>
+<#import "/lib/example.ftl" as e3>
+${e.mail}, ${e2.mail}, ${e3.mail}
+<#assign mail="other@example.com" in my>
+${e.mail}, ${e2.mail}, ${e3.mail}</pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">user@example.com, user@example.com, user@example.com
+other@example.com, other@example.com, other@example.com</pre></div>
+
+ <p>As you access the same namespace through <code class="inline-code">e</code>,
+ <code class="inline-code">e2</code>, and <code class="inline-code">e3</code>, the
+ <code class="inline-code">email</code> has changed in all of them at once. The
+ practical importance of this is that when you import the same
+ library in multiple templates, only one namespace will be
+ initialized and created for the library, which will be shared by all
+ the importing templates.</p>
+
+ <p>Note that namespaces are not hierarchical; it doesn't mater
+ what namespace are you in when <code class="inline-code">import</code> creates
+ another namespace. For example, when you <code class="inline-code">import</code>
+ namespace N2 while you are in name space N1, N2 will not be inside
+ N1. N1 just gets the same N2 that you get if you
+ <code class="inline-code">import</code> N2 when you are in the main
+ namespace.</p>
+
+ <p>Each <a href="gloss.html#gloss.templateProcessingJob">template
+ processing job</a> has its own private set of namespaces. Each
+ template processing job is a separate universe that exists only for
+ the short period while the main template is rendered, and then it
+ vanishes with all its populated namespaces. Thus, whenever we say
+ that "<code class="inline-code">import</code> is called for the first
+ time", we always mean the first time within the lifespan of a
+ single template processing job.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_27">Auto-importing</h2>
+
+
+ <p>When you have to import the same libraries again and again in
+ many templates, know that the Java programmers (or whoever is
+ responsible for configuring FreeMarker) can specify auto-imports,
+ which are imports that are automatically done in all templates. Auto
+ imports can also be configured to be "lazy" (since
+ FreeMarker 2.3.25), which means that they are only done when the
+ imported library is actually used in the template. See the Java API
+ documentation for more details: <a href="http://freemarker.org/docs/api/freemarker/template/Configuration.html#setAutoImports-java.util.Map-">Configuration.setAutoImports</a>,
+ <a href="http://freemarker.org/docs/api/freemarker/template/Configuration.html#setLazyAutoImports-java.lang.Boolean-">Configuration.setLazyAutoImports</a>.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="dgui_misc_var.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_misc_autoescaping.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[11/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3.html b/builds/2.3.26-nightly/versions_2_3.html
new file mode 100644
index 0000000..4898aa2
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3.html
@@ -0,0 +1,1629 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3.html"><span itemprop="name">2.3</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_1.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_2_8.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3" itemprop="headline">2.3</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_220" data-menu-target="autoid_220">Non backward-compatible changes!</a></li><li><a class="page-menu-link" href="#autoid_221" data-menu-target="autoid_221">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_222" data-menu-target="autoid_222">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_223" data-menu-target="autoid_223">Other changes</a></li><li><a class="page-menu-link" href="#autoid_224" data-menu-target="autoid_224">The history of the releases before the final version</a><ul><li><a class="page-menu-link" href="#autoid_225" data-menu-target="autoid_225">Differences between the final release and Release Candidate
+4</a></li><li><a class="page-menu-link" href="#autoid_226" data-menu-target="autoid_226">Differences between the Release Candidate 4 and Release
+Candidate 3</a></li><li><a class="page-menu-link" href="#autoid_227" data-menu-target="autoid_227">Differences between the Release Candidate 3 and Release
+Candidate 2</a></li><li><a class="page-menu-link" href="#autoid_228" data-menu-target="autoid_228">Differences between the Release Candidate 2 and Release
+Candidate 1</a></li><li><a class="page-menu-link" href="#autoid_229" data-menu-target="autoid_229">Differences between the Release Candidate 1 and Preview 16
+releases</a></li><li><a class="page-menu-link" href="#autoid_230" data-menu-target="autoid_230">Differences between the Preview 16 and Preview 15
+releases</a></li><li><a class="page-menu-link" href="#autoid_231" data-menu-target="autoid_231">Differences between the Preview 15 and Preview 14
+releases</a></li><li><a class="page-menu-link" href="#autoid_232" data-menu-target="autoid_232">Differences between the Preview 14 and Preview 13
+releases</a></li><li><a class="page-menu-link" href="#autoid_233" data-menu-target="autoid_233">Differences between the Preview 13 and Preview 12
+releases</a></li><li><a class="page-menu-link" href="#autoid_234" data-menu-target="autoid_234">Differences between the Preview 12 and Preview 11
+releases</a></li><li><a class="page-menu-link" href="#autoid_235" data-menu-target="autoid_235">Differences between the Preview 11 and Preview 10
+releases</a></li><li><a class="page-menu-link" href="#autoid_236" data-menu-target="autoid_236">Differences between the Preview 10 and Preview 9
+releases</a></li><li><a class="page-menu-link" href="#autoid_237" data-menu-target="autoid_237">Differences between the Preview 9 and Preview 8
+releases</a></li><li><a class="page-menu-link" href="#autoid_238" data-menu-target="autoid_238">Differences between the Preview 8 and Preview 7
+releases</a></li><li><a class="page-menu-link" href="#autoid_239" data-menu-target="autoid_239">Differences between the Preview 7 and Preview 6
+releases</a></li><li><a class="page-menu-link" href="#autoid_240" data-menu-target="autoid_240">Differences between the Preview 6 and Preview 5
+releases</a></li><li><a class="page-menu-link" href="#autoid_241" data-menu-target="autoid_241">Differences between the Preview 5 and Preview 4
+releases</a></li><li><a class="page-menu-link" href="#autoid_242" data-menu-target="autoid_242">Differences between the Preview 4 and Preview 3
+releases</a></li><li><a class="page-menu-link" href="#autoid_243" data-menu-target="autoid_243">Differences between the Preview 3 and Preview 2
+releases</a></li><li><a class="page-menu-link" href="#autoid_244" data-menu-target="autoid_244">Differences between the Preview 2 and Preview 1
+releases</a></li></ul></li></ul> </div><p>Date of release: 2004-June-15</p><p>FreeMarker 2.3 introduces numerous little new features and
+ quality improvements compared to the 2.2.x series. The most notable
+ improvements are the ability to define functions (methods) in
+ templates, the ability to interpolate variables in string literals,
+ the support for a variable number of macro parameters, and the more
+ intelligent default object wrapper. Although none of the improvements
+ is a drastic change, the 2.3.x series is not backward compatible with
+ the 2.2.x series (see the list below), so you may choose to use it for
+ new projects only.</p><p>Probably the most "loudly promoted" new feature is
+ the totally redesigned XML wrapper. With the new XML wrapper
+ FreeMarker targets a new application domain, which is similar to the
+ application domain of XSLT: transforming complex XML to whatever
+ textual output. Although this subproject is young, it is definitely
+ usable in practice. See the <a href="xgui.html">XML Processing
+ Guide</a> for more details.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_220">Non backward-compatible changes!</h2>
+
+
+ <ul>
+ <li>
+ <p>Since interpolations (<code class="inline-code">${...}</code> and
+ <code class="inline-code">#{...}</code>) now work inside string literals, the
+ character sequence <code class="inline-code">${</code> and
+ <code class="inline-code">#{</code> in string literals are reserved for that.
+ So if you have something like <code class="inline-code"><#set x =
+ "${foo}"></code>, then you have to replace it with
+ <code class="inline-code"><#set x = r"${foo}"></code> -- beware, escapes
+ such as <code class="inline-code">\n</code> will not work in raw
+ (<code class="inline-code">r</code>) strings.</p>
+ </li>
+
+ <li>
+ <p>The default (initial) value of the
+ <code class="inline-code">strict_syntax</code> setting has been changed from
+ <code class="inline-code">false</code> to <code class="inline-code">true</code>. When
+ <code class="inline-code">strict_syntax</code> is <code class="inline-code">true</code>,
+ tags with old syntax as <code class="inline-code"><include
+ "foo.ftl"></code> will be considered as static text (so
+ they go to the output as-is, like HTML tags do), and not as FTL
+ tags. Such tags have to be rewritten to <code class="inline-code"><#include
+ "foo.ftl"></code>, since only parts that starts with
+ <code class="inline-code"><#</code>, <code class="inline-code"></#</code>,
+ <code class="inline-code"><@</code>, or <code class="inline-code"></@</code> count as
+ FTL tags. Or, to recover the old transitional behavior, where
+ both legacy and new tag syntax was recognized, you have to
+ explicitly set <code class="inline-code">strict_syntax</code> to
+ <code class="inline-code">false</code>:
+ <code class="inline-code">cfg.setStrictSyntaxMode(false)</code>. Also, for
+ individual templates you can force the old behavior by starting
+ the template with <code class="inline-code"><#ftl
+ strict_syntax=false></code>. (For more information about
+ why strict syntax is better than old syntax <a href="ref_depr_oldsyntax.html">read this...</a>)</p>
+ </li>
+
+ <li>
+ <p>Several classes were moved from the
+ <code class="inline-code">freemarker.template</code> package, to the new
+ <code class="inline-code">freemarker.core</code> package:</p>
+
+ <ul>
+ <li>
+ "Normal" classes: <code class="inline-code">ArithmeticEngine</code>,
+ <code class="inline-code">Configurable</code>,
+ <em><code class="inline-code">Environment</code></em>
+ </li>
+
+ <li>
+ Exceptions:
+ <code class="inline-code">InvalidReferenceException</code>,
+ <code class="inline-code">NonBooleanException</code>,
+ <code class="inline-code">NonNumericalException</code>,
+ <code class="inline-code">NonStringException</code>,
+ <code class="inline-code">ParseException</code>,
+ <code class="inline-code">StopException</code>
+ </li>
+
+ <li>
+ Errors: <code class="inline-code">TokenMgrError</code>
+ </li>
+ </ul>
+
+ <p>The main reason of the splitting of
+ <code class="inline-code">freemarker.template</code> package was that the
+ amount of "expert" public classes and interfaces grows too much,
+ as we introduce API-s for third-party tools, such as debugging
+ API.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">freemarker.template.TemplateMethodModel.exec</code>
+ now returns <code class="inline-code">Object</code> instead of
+ <code class="inline-code">TemplateModel</code>.</p>
+ </li>
+
+ <li>
+ <p>White-space stripping is now more aggressive as before: it
+ always removes leading and trailing white-space if the line only
+ contains FTL tags. (Earlier the white-space was not removed if
+ the tag was <code class="inline-code"><#include
+ <em class="code-color">...</em>></code> or user-defined
+ directive tag with empty directive syntax as
+ <code class="inline-code"><@myMacro/></code> (or its equivalents:
+ <code class="inline-code"><@myMacro></@myMacro></code> and
+ <code class="inline-code"><@myMacro></@></code>). Now white-space
+ is removed in these cases as well.) Also, white-space sandwiched
+ between two non-outputting elements, such as macro definitions,
+ assignments, imports, or property settings, is now ignored. More
+ information: <a href="dgui_misc_whitespace.html#dgui_misc_whitespace_stripping">Template Author's Guide/Miscellaneous/White-space handling/White-space stripping</a></p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">function</code> directive is now used for
+ defining methods. You should replace <code class="inline-code">function</code>
+ with <code class="inline-code">macro</code> in your old templates. Note,
+ however, that old <code class="inline-code">function</code>-s will still work
+ if you don't use the <code class="inline-code">return</code> directive in
+ them, and you invoke them with the deprecated the
+ <code class="inline-code">call</code> directive.</p>
+ </li>
+
+ <li>
+ <p>The expressions <code class="inline-code">as</code>,
+ <code class="inline-code">in</code>, and <code class="inline-code">using</code> are now
+ keywords in the template language and cannot be used as
+ top-level variable names without square-bracket syntax. If, by
+ some chance, you have top-level variables that use one of these
+ names, you will have to rename them, or use the square-bracket
+ syntax with the <code class="inline-code">.vars</code> special variable:
+ <code class="inline-code">.vars["in"]</code>.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">?new</code> built-in, as it was
+ implemented, was a security hole. Now, it only allows you to
+ instantiate a java object that implements the
+ <code class="inline-code">freemarker.template.TemplateModel</code> interface.
+ If you want the functionality of the <code class="inline-code">?new</code>
+ built-in as it existed in prior versions, make available an
+ instance of the
+ <code class="inline-code">freemarker.template.utility.ObjectConstructor</code>
+ class to your template. (For example:
+ <code class="inline-code">myDataModel.put("objConstructor", new
+ ObjectConstructor());</code>, and then in the template you
+ can do this: <code class="inline-code"><#assign aList =
+ objConstructor("java.util.ArrayList", 100)></code>)</p>
+ </li>
+
+ <li>
+ <p>Changes to the
+ <code class="inline-code">FreemarkerServlet</code>:</p>
+
+ <ul>
+ <li>
+ <p>The <code class="inline-code">FreemarkerServlet</code> uses
+ <code class="inline-code">ObjectWrapper.DEFAULT_WRAPPER</code> by default
+ instead of <code class="inline-code">ObjectWrapper.BEANS_WRAPPER</code>.
+ What this means is that, by default, objects of type
+ <code class="inline-code">java.lang.String</code>,
+ <code class="inline-code">java.lang.Number</code>,
+ <code class="inline-code">java.util.List</code>, and
+ <code class="inline-code">java.util.Map</code> will be wrapped as
+ <code class="inline-code">TemplateModels</code> via the classes
+ <code class="inline-code">SimpleScalar</code>,
+ <code class="inline-code">SimpleNumber</code>,
+ <code class="inline-code">SimpleSequence</code>, and
+ <code class="inline-code">SimpleHash</code> respectively. Thus, the java
+ methods on those objects will not be available. The default
+ wrapper implementation in FreeMarker 2.3 automatically knows
+ how to wrap Jython objects, and also wraps
+ <code class="inline-code">org.w3c.dom.Node</code> objects into instances
+ of <code class="inline-code">freemarker.ext.dom.NodeModel</code>.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">FreemarkerServlet</code> base
+ implementation no longer deduces the locale used for
+ templates with <code class="inline-code">HttpRequest.getLocale()</code>.
+ Rather, it simply delegates to the new protected method,
+ <code class="inline-code">deduceLocale</code>. The default implementation
+ of this method simply returns the value of configuration the
+ <code class="inline-code">locale</code> setting.</p>
+ </li>
+ </ul>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_221">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>Interpolation in string literals. For convenience,
+ interpolations are now supported in string literals. For
+ example: <code class="inline-code"><@message�"Hello�${user}!"�/></code>
+ is the same as <code class="inline-code"><@message "Hello " + user + "!"
+ /></code></p>
+ </li>
+
+ <li>
+ <p>Raw string literals: In string literals prefixed with
+ <code class="inline-code">r</code>, interpolations and escape sequences will
+ not be interpreted as special tokens. For example:
+ <code class="inline-code">r"\n${x}"</code> will be simply interpreted as the
+ character sequence <code class="inline-code">'\'</code>,
+ <code class="inline-code">'n'</code>, <code class="inline-code">'$'</code>,
+ <code class="inline-code">'{'</code>, <code class="inline-code">'x'</code>,
+ <code class="inline-code">'}'</code>, and not as line-feed and the value of
+ the <code class="inline-code">x</code> variable.</p>
+ </li>
+
+ <li>
+ <p>Method variables can be defined in FTL, with the <a href="ref_directive_function.html#ref.directive.function"><code>function</code></a>
+ directive.</p>
+ </li>
+
+ <li>
+ <p>Support for a variable number of macro parameters. If the
+ last parameter in a macro declaration ends with
+ <code class="inline-code">...</code>, all extra parameters passed to the macro
+ will be available via that parameter. For macros called with
+ positional parameters, the parameter will be a sequence. For
+ named parameters, the parameter will be a hash. Note that it all
+ works with the new <code class="inline-code">function</code> directive as
+ well.</p>
+ </li>
+
+ <li>
+ <p>A new header parameter, <code class="inline-code">strip_text</code>,
+ that removes all top-level text from a template. This is useful
+ for "include files" to suppress newlines that
+ separate the macro definitions. See <a href="ref_directive_ftl.html#ref.directive.ftl"><code>ftl</code>
+ directive</a></p>
+ </li>
+
+ <li>
+ <p>New <a href="ref_specvar.html">special variable</a>:
+ <code class="inline-code">.vars</code>. This is useful to read top-level
+ variables with square bracket syntax, for example
+ <code class="inline-code">.vars["name-with-hyphens"]</code> and
+ <code class="inline-code">.vars[dynamicName]</code>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">macro</code> and assignment directives now
+ accept arbitrary destination variable name with quoted syntax.
+ For example: <code class="inline-code"><#macro
+ "name-with-hyphens"><em class="code-color">...</em></code>
+ or <code class="inline-code"><#assign "foo�bar" = 123></code>.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">?keys</code> and
+ <code class="inline-code">?values</code> hash built-ins now return sequences.
+ In practical terms this means you can access their sizes or
+ retrieve their sub variables by index, and use all of the <a href="ref_builtins_sequence.html">sequence built-ins</a>. (Note
+ for the programmers: The <code class="inline-code">TemplateHashModelEx</code>
+ interface has not been changed. Your old code will work. See the
+ API documentation to see why.)</p>
+ </li>
+
+ <li>
+ <p>Existence built-ins (<code class="inline-code">?default</code>,
+ <code class="inline-code">?exists</code>, etc.) are now working with sequence
+ sub variables as well. Read the documentation of the
+ <code class="inline-code">default</code> built-in for more information.</p>
+ </li>
+
+ <li>
+ <p>White-space stripping is now more aggressive as before: it
+ always removes leading and trailing white-space if the line only
+ contains FTL tags. (Earlier the white-space was not removed if
+ the tag was <code class="inline-code"><#include
+ <em class="code-color">...</em>></code> or user-defined
+ directive tag with empty directive syntax as
+ <code class="inline-code"><@myMacro/></code> (or its equivalents:
+ <code class="inline-code"><@myMacro></@myMacro></code> and
+ <code class="inline-code"><@myMacro></@></code>). Now white-space
+ is removed in these cases as well.) Also, top-level white-space
+ that separates macro definitions and/or assignments is now
+ ignored. More information: <a href="dgui_misc_whitespace.html#dgui_misc_whitespace_stripping">Template Author's Guide/Miscellaneous/White-space handling/White-space stripping</a></p>
+ </li>
+
+ <li>
+ <p>White-space stripping can be disabled for a single line
+ with the <a href="ref_directive_nt.html#ref.directive.nt"><code>nt</code></a>
+ directive (for No Trim).</p>
+ </li>
+
+ <li>
+ <p>Hashes can be concatenated using the <code class="inline-code">+</code>
+ operator. The keys in the hash on the right-hand side take
+ precedence.</p>
+ </li>
+
+ <li>
+ <p>New built-ins for Java and JavaScript string escaping:
+ <a href="ref_builtins_string.html#ref_builtin_j_string">j_string</a> and <a href="ref_builtins_string.html#ref_builtin_js_string">js_string</a></p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">replace</code> and
+ <code class="inline-code">split</code> built-ins now support case-insensitive
+ comparsion and regular expressions (J2SE 1.4+ only), and some
+ other new options. More information can be found <a href="ref_builtins_string.html#ref_builtin_string_flags">here</a>.</p>
+ </li>
+
+ <li>
+ <p>New built-in for regular expression matching (J2SE 1.4+
+ only): <a href="ref_builtins_string.html#ref_builtin_matches"><code>matches</code></a></p>
+ </li>
+
+ <li>
+ <p>New built-in, <code class="inline-code">eval</code>, to evaluate a
+ string as FTL expression. For example
+ <code class="inline-code">"1+2"?eval</code> returns the number 3.</p>
+ </li>
+
+ <li>
+ <p>New built-ins for Java and JavaScript string escaping:
+ <a href="ref_builtins_string.html#ref_builtin_j_string">j_string</a> and <a href="ref_builtins_string.html#ref_builtin_js_string">js_string</a></p>
+ </li>
+
+ <li>
+ <p>New special variables to read the value of the locale
+ setting: <code class="inline-code">locale</code>, <code class="inline-code">lang</code>. See
+ more <a href="ref_specvar.html">in the
+ reference...</a></p>
+ </li>
+
+ <li>
+ <p>New special variable to read the FreeMarker version
+ number: <code class="inline-code">version</code>. See more <a href="ref_specvar.html">in the reference...</a></p>
+ </li>
+
+ <li>
+ <p>Tree new directives, <code class="inline-code">recurse</code>,
+ <code class="inline-code">visit</code> and <code class="inline-code">fallback</code>, were
+ introduced to support declarative node-tree processing. These
+ are meant to be used typically (though not exclusively) for
+ processing XML input. Together with this, a new variable type
+ has been introduced, the node type. See the <a href="xgui_declarative.html">chapter on declarative XML
+ processing</a> for more details.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">?new</code> built-in, as it was
+ implemented, was a security hole. Now, it only allows you to
+ instantiate a java object that implements the
+ <code class="inline-code">freemarker.template.TemplateModel</code> interface.
+ <span class="marked-for-programmers">If you want the functionality of
+ the <code class="inline-code">?new</code> built-in as it existed in prior
+ versions, make available an instance of the
+ <code class="inline-code">freemarker.template.utility.ObjectConstructor</code>
+ class to your template. (For example:
+ <code class="inline-code">myDataModel.put("objConstructor", new
+ ObjectConstructor());</code>, and then in the template you
+ can do this: <code class="inline-code"><#assign aList =
+ objConstructor("java.util.ArrayList",
+ 100)></code>)</span></p>
+ </li>
+
+ <li>
+ <p>Variable names can contain <code class="inline-code">@</code> anywhere
+ (without using quote-bracket syntax). For example:
+ <code class="inline-code"><#assign x@@@ = 123></code> is valid.</p>
+ </li>
+
+ <li>
+ <p>The expressions <code class="inline-code">as</code>,
+ <code class="inline-code">in</code>, and <code class="inline-code">using</code> are now
+ keywords in the template language and cannot be used as
+ top-level variable names without square-bracket syntax (as
+ <code class="inline-code">.vars["in"]</code>).</p>
+ </li>
+
+ <li>
+ <p>New parameter to the <a href="ref_directive_ftl.html"><code>ftl</code>
+ directive</a>: <code class="inline-code">attributes</code>. The value of
+ this attribute is a hash that associates arbitrary attributes
+ (name-value pairs) to the template. The values of the attributes
+ can be of any type (string, number, sequence... etc.).
+ FreeMarker doesn't try to understand the meaning of the
+ attributes. It's up to the application that encapsulates
+ FreeMarker (as a Web application framework). Thus, the set of
+ allowed attributes and their semantic is application (Web
+ application framework) dependent.</p>
+ </li>
+
+ <li>
+ <p>Other minor quality improvements...</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_222">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>Smarter default object wrapping: The default object
+ wrapper is now
+ <code class="inline-code">freemarker.template.DefaultObjectWrapper</code>,
+ which falls back on wrapping arbitrary objects as beans using
+ the <code class="inline-code">freemarker.ext.beans.BeansWrapper</code>. Also,
+ it will wrap <code class="inline-code">org.w3c.dom.Node</code> objects with
+ the new DOM wrapper. Also, it is aware of Jython objects, and
+ will use <code class="inline-code">freemarker.ext.jython.JythonWrapper</code>
+ if the object passed in is a Jython object. (We count it as a
+ backward compatible change, since this new object wrapper wraps
+ differently only those objects that the old wrapper was not able
+ to wrap, so it has thrown exception.)</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">freemarker.template.TemplateMethodModel.exec</code>
+ now returns <code class="inline-code">Object</code> instead of
+ <code class="inline-code">TemplateModel</code>.</p>
+ </li>
+
+ <li>
+ <p>The default (initial) value of the
+ <code class="inline-code">strict_syntax</code> setting has been changed from
+ <code class="inline-code">false</code> to <code class="inline-code">true</code>. When
+ <code class="inline-code">strict_syntax</code> is <code class="inline-code">true</code>,
+ tags with old syntax as <code class="inline-code"><include
+ "foo.ftl"></code> will be considered as static text (so
+ they go to the output as-is, like HTML tags do), and not as FTL
+ tags. Such tags have to be rewritten to <code class="inline-code"><#include
+ "foo.ftl"></code>, since only parts that starts with
+ <code class="inline-code"><#</code>, <code class="inline-code"></#</code>,
+ <code class="inline-code"><@</code>, or <code class="inline-code"></@</code> count as
+ FTL tags. Or, to recover the old transitional behavior, where
+ both legacy and new tag syntax was recognized, you have to
+ explicitly set <code class="inline-code">strict_syntax</code> to
+ <code class="inline-code">false</code>:
+ <code class="inline-code">cfg.setStrictSyntaxMode(false)</code>. Also, for
+ individual templates you can force the old behavior by starting
+ the template with <code class="inline-code"><#ftl
+ strict_syntax=false></code>. (For more information about
+ why strict syntax is better than old syntax <a href="ref_depr_oldsyntax.html">read this...</a>)</p>
+ </li>
+
+ <li>
+ <p>New <code class="inline-code">CacheStorage</code> implementation:
+ <code class="inline-code">freemarker.cache.MruCacheStorage</code>. This cache
+ storage implements a two-level Most Recently Used cache. In the
+ first level, items are strongly referenced up to the specified
+ maximum. When the maximum is exceeded, the least recently used
+ item is moved into the second level cache, where they are softly
+ referenced, up to another specified maximum.
+ <code class="inline-code">freemarker.cache.SoftCachseStorage</code> and
+ <code class="inline-code">StrongCachseStorage</code> are deprected,
+ <code class="inline-code">MruCachseStorage</code> is used everywhere instead.
+ The default cache storage is now an
+ <code class="inline-code">MruCachseStorage</code> object with 0 strong size,
+ and infinite soft size.
+ <code class="inline-code">Configuration.setSetting</code> for
+ <code class="inline-code">cache_storage</code> now understands string values
+ as <code class="inline-code">"strong:200, soft:2000"</code>.</p>
+ </li>
+
+ <li>
+ <p>For <code class="inline-code">BeansWrapper</code> generated models, you
+ can now use the <code class="inline-code">${obj.method(args)}</code> syntax to
+ invoke methods whose return type is <code class="inline-code">void</code>.
+ <code class="inline-code">void</code> methods now return
+ <code class="inline-code">TemplateModel.NOTHING</code> as their return
+ value.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">freemarker.template.SimpleHash</code> now can
+ wrap read-only <code class="inline-code">Map</code>-s, such as the map of HTTP
+ request parameters in Servlet API.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">TemplateNodeModel</code> interface was
+ introduced to support recursive processing of trees of nodes.
+ Typically, this will be used in relation to XML.</p>
+ </li>
+
+ <li>
+ <p>New package: <code class="inline-code">freemarker.ext.dom</code>. This
+ contains the new XML wrapper, that supports the processing of
+ XML documents using the visitor pattern (i.e. with
+ <code class="inline-code"><#visit <em class="code-color">...</em>></code>
+ and similar directives), and to provide more convenient XML
+ traversing as the legacy wrapper. See the <a href="xgui.html">XML processing guide</a> for more
+ details.</p>
+ </li>
+
+ <li>
+ <p>New package: <code class="inline-code">freemarker.core</code>. Classes
+ used by mostly power-users was moved here from the
+ <code class="inline-code">freemarker.template</code> package. The main reason
+ of the splitting of <code class="inline-code">freemarker.template</code>
+ package was that the amount of "expert" public classes and
+ interfaces grows too much, as we introduce API-s for third-party
+ tools, such as debugging API.</p>
+ </li>
+
+ <li>
+ <p>New package: <code class="inline-code">freemarker.debug</code>. This
+ provides a debugging API, by which you can debug executing
+ templates through network (RMI). You have to write the front-end
+ (client), as the API is just the server side. For more
+ information please read the JavaDoc of the
+ <code class="inline-code">freemarker.debug</code> package.</p>
+ </li>
+
+ <li>
+ <p>You can query the FreeMarker version number with static
+ method <code class="inline-code">Configuration.getVersionNumber()</code>.
+ Also, the <code class="inline-code">Manifest.mf</code> included in
+ <code class="inline-code">freemarker.jar</code> now contains the FreeMarker
+ version number, furthermore, executing it with <code class="inline-code">java
+ -jar freemarker.jar</code> will print the version number to
+ the stdout.</p>
+ </li>
+
+ <li>
+ <p>Added a new protected <code class="inline-code">FreemarkerServlet</code>
+ method: <code class="inline-code">Configuration
+ getConfiguration()</code>.</p>
+ </li>
+
+ <li>
+ <p>Date support is now labeled as final. (It was experimental
+ earlier.)</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">BeansWrapper</code> has been improved to
+ prevent some security exceptions when introspecting.</p>
+ </li>
+
+ <li>
+ <p>Other minor quality improvements and extensions...</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_223">Other changes</h2>
+
+
+ <ul>
+ <li>
+ <p>Fixes and improvements in the Manual and in the API
+ JavaDoc.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_224">The history of the releases before the final version</h2>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_225">Differences between the final release and Release Candidate
+ 4</h3>
+
+
+ <ul>
+ <li>
+ <p>Added a new special variable to print the FreeMarker
+ version number: <code class="inline-code">version</code>. See more <a href="ref_specvar.html">in the reference...</a></p>
+ </li>
+
+ <li>
+ <p>Minor documentation fixes and improvements.</p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_226">Differences between the Release Candidate 4 and Release
+ Candidate 3</h3>
+
+
+ <ul>
+ <li>
+ <p>The <code class="inline-code">BeansWrapper</code> has been improved to
+ prevent some security exceptions when introspecting.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">FreemarkerXmlTask</code> has two new
+ sub-tasks that can be used to prepare template execution with
+ Jython scripts: <code class="inline-code">prepareModel</code> and
+ <code class="inline-code">prepareEnvironment</code>. The
+ <code class="inline-code">jython</code> sub-task is now deprecated, and does
+ the same as <code class="inline-code">prepareEnvironment</code>. See the
+ Java API documentation for more details.</p>
+ </li>
+
+ <li>
+ <p>New special variable to read the FreeMarker version
+ number: <code class="inline-code">version</code>. See more <a href="ref_specvar.html">in the reference...</a></p>
+ </li>
+
+ <li>
+ <p>Bugfix: Greater-than sign doesn't confuse the
+ <code class="inline-code">eval</code> built-in anymore.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: The <code class="inline-code">BeansWrapper</code> now wrapps
+ the <code class="inline-code">null</code> return values of methods
+ appropriately.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: The <code class="inline-code">FreemarkerXmlTask</code> doesn't
+ need Jython classes anymore, unless you really use Jython
+ scripts. Several other bugfixes in the Jython related
+ features.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: If the template exception handler has ignored
+ the exception, errors occurring in interpolations inside FTL
+ tags (e.g. <code class="inline-code"><#if "foo${badVar}" !=
+ "foobar"></code>) were handled in the same way as errors
+ occuring in interpolations outside FTL tags. Thus, the
+ directive call was not skipped, and the problematic
+ interpolation was replaced with an empty string. (This was
+ inconsistent with the behavior of <code class="inline-code"><#if
+ "foo"+badVar != "foobar"></code>, which should be 100%
+ equivalent with the previous example.)</p>
+ </li>
+
+ <li>
+ <p>Bugfix: The <code class="inline-code">FileTemplateLoader</code> is now
+ more robust when it receives paths that are malformed
+ according the native file system. In the earlier version such
+ paths sometimes caused unexpected
+ <code class="inline-code">IOException</code> that aborted the searching for
+ the template in further
+ <code class="inline-code">FileTemplateLoader</code>-s when you use the
+ <code class="inline-code">MultiTemplateLoader</code>.</p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_227">Differences between the Release Candidate 3 and Release
+ Candidate 2</h3>
+
+
+ <ul>
+ <li>
+ <p>Bugfix: Fixing a fatal bug in the template cache that
+ was introduced with the latest cache bugfix. The template
+ cache has always reloaded the unchanged template when the
+ update delay has been elapsed, until the template has been
+ actually changed, in which case it has never reloaded the
+ template anymore.</p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_228">Differences between the Release Candidate 2 and Release
+ Candidate 1</h3>
+
+
+ <ul>
+ <li>
+ <p>Bugfix: The template cache didn't reload the template
+ when it was replaced with an older version.</p>
+ </li>
+
+ <li>
+ <p>API JavaDoc fix: date/time related classes/interfaces
+ were marked as experimental. They are not experimental.</p>
+ </li>
+
+ <li>
+ <p>Minor site improvements.</p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_229">Differences between the Release Candidate 1 and Preview 16
+ releases</h3>
+
+
+ <ul>
+ <li>
+ <p><em>Warning! Non-backward-compatible
+ change!</em> The default (initial) value of the
+ <code class="inline-code">strict_syntax</code> setting has been changed from
+ <code class="inline-code">false</code> to <code class="inline-code">true</code>. When
+ <code class="inline-code">strict_syntax</code> is <code class="inline-code">true</code>,
+ tags with old syntax as <code class="inline-code"><include
+ "foo.ftl"></code> will be considered as static text (so
+ they go to the output as-is, like HTML tags do), and not as
+ FTL tags. Such tags have to be rewritten to
+ <code class="inline-code"><#include "foo.ftl"></code>, since only
+ parts that starts with <code class="inline-code"><#</code>,
+ <code class="inline-code"></#</code>, <code class="inline-code"><@</code>, or
+ <code class="inline-code"></@</code> count as FTL tags. Or, to recover
+ the old transitional behavior, where both legacy and new tag
+ syntax was recognized, you have to explicitly set
+ <code class="inline-code">strict_syntax</code> to <code class="inline-code">false</code>:
+ <code class="inline-code">cfg.setStrictSyntaxMode(false)</code>. Also, for
+ individual templates you can force the old behavior by
+ starting the template with <code class="inline-code"><#ftl
+ strict_syntax=false></code>. (For more information about
+ why strict syntax is better than old syntax <a href="ref_depr_oldsyntax.html">read this...</a>)</p>
+ </li>
+
+ <li>
+ <p>New parameter to the <a href="ref_directive_ftl.html"><code>ftl</code>
+ directive</a>: <code class="inline-code">attributes</code>. The value of
+ this attribute is a hash that associates arbitrary attributes
+ (name-value pairs) to the template. The values of the
+ attributes can be of any type (string, number, sequence...
+ etc.). FreeMarker doesn't try to understand the meaning of the
+ attributes. It's up to the application that encapsulates
+ FreeMarker (as a Web application framework). Thus, the set of
+ allowed attributes and their semantic is application (Web
+ application framework) dependent.</p>
+ </li>
+
+ <li>
+ <p>Bugfix:
+ <code class="inline-code">freemarker.template.utility.DeepUnwrap</code>
+ unwrapped sequences to empty
+ <code class="inline-code">ArrayList</code>-s.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: If you included/imported a template with
+ <code class="inline-code">*/</code> in path (acquisition), and that template
+ in turn itself included/imported another template with
+ <code class="inline-code">*/</code> in path, it may failed.</p>
+ </li>
+
+ <li>
+ <p>New methods to the
+ <code class="inline-code">freemarker.core.Environment</code>:
+ <code class="inline-code">importLib(Template loadedTemplate, java.lang.String
+ namespace)</code>,
+ <code class="inline-code">getTemplateForImporting(...)</code>,
+ <code class="inline-code">getTemplateForInclusion(...)</code>.</p>
+ </li>
+
+ <li>
+ <p>Improvements in the
+ <code class="inline-code">java.io.IOException</code> related error messages
+ of the <code class="inline-code">include</code> and
+ <code class="inline-code">import</code> directives.</p>
+ </li>
+
+ <li>
+ <p>Minor improvements in the documentation.</p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_230">Differences between the Preview 16 and Preview 15
+ releases</h3>
+
+
+ <ul>
+ <li>
+ <p>New package: <code class="inline-code">freemarker.debug</code>. This
+ provides a debugging API, by which you can debug executing
+ templates through network (RMI). You have to write the
+ front-end (client), as the API is just the server side. For
+ more information please read the JavaDoc of the
+ <code class="inline-code">freemarker.debug</code> package. (The debugging
+ API is present for a while, just I forgot to announce it in
+ the version history. Sorry for that.)</p>
+ </li>
+
+ <li>
+ <p>Bugfix: With the new XML wrapper,
+ <code class="inline-code">@@markup</code> and similar special keys:</p>
+
+ <ul>
+ <li>
+ <p>have returned
+ <code class="inline-code"><foo></foo></code> for empty
+ elements instead of <code class="inline-code"><foo�/></code>.
+ Other than it was needlessly verbose, it has confused
+ browsers if you generate HTML.</p>
+ </li>
+
+ <li>
+ <p>have showed the attributes that have no explicitly
+ given value in the original document, just a default value
+ coming form the DTD.</p>
+ </li>
+
+ <li>
+ <p>have forgot to put space before the system
+ identifier in the <code class="inline-code"><!DOCTYPE
+ <em class="code-color">...</em>></code>.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Bugfix: XPath with Jaxen has died with
+ <code class="inline-code">NullPointerException</code> if the context was an
+ empty node set.</p>
+ </li>
+
+ <li>
+ <p>A bit more intelligent Xalan XPath error
+ messages.</p>
+ </li>
+
+ <li>
+ <p>Revoked fallback-to-classloader logic from the template
+ cache.</p>
+ </li>
+
+ <li>
+ <p>From now on, if no XPath engine is available, and the
+ hash key in an XML query can't be interpreted without XPath,
+ an error will tell this clearly, rather than silently
+ returning undefined variable (null).</p>
+ </li>
+
+ <li>
+ <p>Bugfix: Some templates have caused the parser to
+ die.</p>
+ </li>
+
+ <li>
+ <p>Some other minor improvements here and there...</p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_231">Differences between the Preview 15 and Preview 14
+ releases</h3>
+
+
+ <ul>
+ <li>
+ <p>Bugfix: The new default template cache storage
+ (<code class="inline-code">MruCacheStorage</code>) has started to
+ continually fail with <code class="inline-code">NullPointerException</code>
+ from a random point of time, usually when the memory usage was
+ high in the JVM.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: In error messages, when the quoted FTL directive
+ had nested content, that was quoted as well, so the quotation
+ could be very long and expose nested lines needlessly.</p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_232">Differences between the Preview 14 and Preview 13
+ releases</h3>
+
+
+ <ul>
+ <li>
+ <p><code class="inline-code">freemarker.template.TemplateMethodModel.exec</code>
+ now returns <code class="inline-code">Object</code> instead of
+ <code class="inline-code">TemplateModel</code>.</p>
+ </li>
+
+ <li>
+ <p>Fixes and improvements for XPath with Jaxen (not Xalan).
+ Non-node-set XPath expressions are now working. FreeMarker
+ variables are accessible in XPath expressions with XPath
+ variable references (e.g.
+ <code class="inline-code">doc["book/chapter[title=$currentTitle]"]</code>).</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">freemarker.cache.SoftCachseStorage</code>
+ and <code class="inline-code">StrongCachseStorage</code> is deprected. The
+ more flexible <code class="inline-code">MruCachseStorage</code> is used
+ instead everywhere. The default cache storage is now an
+ <code class="inline-code">MruCachseStorage</code> object with 0 strong size,
+ and infinite soft size.
+ <code class="inline-code">Configuration.setSetting</code> for
+ <code class="inline-code">cache_storage</code> now understands string values
+ as <code class="inline-code">"strong:200, soft:2000"</code>.</p>
+ </li>
+
+ <li>
+ <p>Bugfix:
+ <code class="inline-code">freemarker.cache.MruCachseStorage</code> has died
+ with <code class="inline-code">ClassCastException</code> sometimes.</p>
+ </li>
+
+ <li>
+ <p>New built-ins for Java and JavaScript string escaping:
+ <a href="ref_builtins_string.html#ref_builtin_j_string">j_string</a> and <a href="ref_builtins_string.html#ref_builtin_js_string">js_string</a></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">freemarker.template.TemplateExceptionHandler.HTML_DEBUG_HANDLER</code>
+ now prints more HTML-context-proof messages.</p>
+ </li>
+
+ <li>
+ <p>You can query the FreeMarker version number with static
+ method <code class="inline-code">Configuration.getVersionNumber()</code>.
+ Also, the <code class="inline-code">Manifest.mf</code> included in
+ <code class="inline-code">freemarker.jar</code> now contains the FreeMarker
+ version number, furthermore, executing it with <code class="inline-code">java
+ -jar freemarker.jar</code> will print the version number to
+ the stdout.</p>
+ </li>
+
+ <li>
+ <p>Added a new protected
+ <code class="inline-code">FreemarkerServlet</code> method:
+ <code class="inline-code">Configuration getConfiguration()</code>.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: FreeMarker has frozen on empty conditional
+ blocks in certain contexts.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: Methods called twice on an object using the
+ <code class="inline-code">list</code> directive, as
+ <code class="inline-code">parent.getChildren()</code> with
+ <code class="inline-code"><#list parent.children as child>
+ ...</#list></code></p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_233">Differences between the Preview 13 and Preview 12
+ releases</h3>
+
+
+ <ul>
+ <li>
+ <p>White-space stripping is now more aggressive as before:
+ it always removes leading and trailing white-space if the line
+ only contains FTL tags. (Earlier the white-space was not
+ removed if the tag was <code class="inline-code"><#include
+ <em class="code-color">...</em>></code> or user-defined
+ directive tag with empty directive syntax as
+ <code class="inline-code"><@myMacro/></code> (or its equivalents:
+ <code class="inline-code"><@myMacro></@myMacro></code> and
+ <code class="inline-code"><@myMacro></@></code>). Now
+ white-space is removed in these cases as well.) Also,
+ top-level white-space that separates macro definitions and/or
+ assignments is now ignored. More information: <a href="dgui_misc_whitespace.html#dgui_misc_whitespace_stripping">Template Author's Guide/Miscellaneous/White-space handling/White-space stripping</a></p>
+ </li>
+
+ <li>
+ <p>White-space stripping can be disabled for a single line
+ with the <a href="ref_directive_nt.html#ref.directive.nt"><code>nt</code></a>
+ directive (for No Trim).</p>
+ </li>
+
+ <li>
+ <p>A new directive for the declarative XML processing:
+ <a href="ref_directive_visit.html#ref.directive.fallback"><code>fallback</code></a></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">freemarker.template.SimpleHash</code> now
+ can wrap read-only <code class="inline-code">Map</code>-s, such as the map
+ of HTTP request parameters in Servlet API.</p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_234">Differences between the Preview 12 and Preview 11
+ releases</h3>
+
+
+ <p>The only change between this and the previous preview
+ release is that Preview 11 had a bug where DOM trees would
+ <em>never</em> be garbage-collected.</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_235">Differences between the Preview 11 and Preview 10
+ releases</h3>
+
+
+ <ul>
+ <li>
+ <p>Many XML related changes. Some of them are incompatible
+ with the previous preview releases! For a more detailed
+ explanation of how XML related features now work, see: <a href="xgui.html">XML Processing Guide</a></p>
+
+ <ul>
+ <li>
+ <p>Attention! Attribute queries such as
+ <code class="inline-code">foo.@bar</code> now return sequences
+ (similarly to child element queries and XPath queries),
+ not single nodes. Because of the rule with node sequences
+ of size 1, it is still good to write
+ <code class="inline-code">${foo.@bar}</code>, but built-ins such as
+ <code class="inline-code">?exists</code>, <code class="inline-code">?if_exists</code>
+ or <code class="inline-code">?default</code> don't work as before. For
+ example, instead of
+ <code class="inline-code">foo.@bar?default('black')</code>, you now have
+ to write <code class="inline-code">foo.@bar[0]?default('black')</code>.
+ So if you have used existence built-ins with attributes,
+ you have to find those occurrences in the templates and
+ add that <code class="inline-code">[0]</code>.</p>
+ </li>
+
+ <li>
+ <p>Attention! XML name-space handling has been totally
+ reworked and is absolutely incompatible with pre 10. Don't
+ worry about this if none of your XML input documents use
+ you use <code class="inline-code">xmlns</code> attributes. Worry,
+ though, if you have utilized the "loose
+ mode", where only the local name of elements were
+ compared, because that's now gone. Sorry...</p>
+ </li>
+
+ <li>
+ <p>Attention! Special-keys <code class="inline-code">@@</code> and
+ <code class="inline-code">@*</code> now return a sequence of attribute
+ nodes instead of the hash of them.</p>
+ </li>
+
+ <li>
+ <p>Several hash keys are now working for node sequences
+ that store multiple nodes. For example, to get the list of
+ all <code class="inline-code">para</code> elements of all
+ <code class="inline-code">chapter</code>-s, just write
+ <code class="inline-code">doc.book.chapter.para</code>. Or, to get list
+ of title attributes of all <code class="inline-code">chapter</code>-s
+ write <code class="inline-code">doc.book.chapter.@title</code>.</p>
+ </li>
+
+ <li>
+ <p>New special hash keys: <code class="inline-code">**</code>,
+ <code class="inline-code">@@start_tag</code>,
+ <code class="inline-code">@@end_tag</code>,
+ <code class="inline-code">@@attribute_markup</code>,
+ <code class="inline-code">@@text</code>,
+ <code class="inline-code">@@qname</code>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">?parent</code> for attribute nodes now
+ returns the element node the attribute node belongs
+ to.</p>
+ </li>
+
+ <li>
+ <p>You can use Jaxen instead of Xalan for XPath
+ expressions, if you call the static
+ <code class="inline-code">freemarker.ext.dom.NodeModel.useJaxenXPathSupport()</code>
+ method once. We plan to use Jaxen automatically instead of
+ Xalan if it is available, just the Jaxen support is not
+ fully functional yet.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>New special variable: <code class="inline-code">.vars</code>. This is
+ useful to read top-level variables with square bracket syntax,
+ for example <code class="inline-code">.vars["name-with-hyphens"]</code> and
+ <code class="inline-code">.vars[dynamicName]</code>.</p>
+ </li>
+
+ <li>
+ <p>New built-in, <code class="inline-code">eval</code>, to evaluate a
+ string as FTL expression. For example
+ <code class="inline-code">"1+2"?eval</code> returns the number 3.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">FreemarkerServlet</code> now uses the
+ configuration's <code class="inline-code">locale</code> setting, rather than
+ <code class="inline-code">Locale.getDefault()</code>, to set the locale of
+ the templates. Also, the signature of the
+ <code class="inline-code">deduceLocale</code> method has been
+ changed.</p>
+ </li>
+
+ <li>
+ <p>We have a new (beta status)
+ <code class="inline-code">CacheStorage</code> implementation:
+ <code class="inline-code">freemarker.cache.MruCacheStorage</code>. This
+ cache storage implements a two-level Most Recently Used cache.
+ In the first level, items are strongly referenced up to the
+ specified maximum. When the maximum is exceeded, the least
+ recently used item is moved into the second level cache, where
+ they are softly referenced, up to another specified maximum.
+ You can plug to try it with <code class="inline-code">cfg.setCacheStorage(new
+ freemarker.cache.MruCacheStorage(maxStrongSize,
+ maxSoftSize))</code>.</p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_236">Differences between the Preview 10 and Preview 9
+ releases</h3>
+
+
+ <ul>
+ <li>
+ <p>The special key <code class="inline-code">@@xmlns</code> was removed
+ in favor of a new FTL directive for the same purpose,
+ <code class="inline-code"><#xmlns...></code>.</p>
+ </li>
+
+ <li>
+ <p>By default, the system is stricter about the use of
+ namespace prefixes. In general, you must use a prefix to
+ qualify subelements that are associated with an XML
+ nampespace. You can do this with the new
+ <code class="inline-code"><#xmlns...></code> directive, but prefixes
+ declared in the input XML doc will actually work with no
+ declaration.</p>
+ </li>
+
+ <li>
+ <p>Introduced a new special key called
+ <code class="inline-code">@@text</code> that returns all the text nodes
+ contained (recursively) in an element all concatenated
+ together.</p>
+ </li>
+
+ <li>
+ <p>Either Jaxen or Xalan can be used to provide XPath
+ functionality. Prior versions only worked with Xalan.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">FreemarkerServlet</code> uses
+ <code class="inline-code">ObjectWrapper.DEFAULT_WRAPPER</code> by default
+ instead of <code class="inline-code">ObjectWrapper.BEANS_WRAPPER</code>.
+ What this means is that, by default, objects of type
+ <code class="inline-code">java.lang.String</code>,
+ <code class="inline-code">java.lang.Number</code>,
+ <code class="inline-code">java.util.List</code>, and
+ <code class="inline-code">java.util.Map</code> will be wrapped as
+ <code class="inline-code">TemplateModels</code> via the classes
+ <code class="inline-code">SimpleScalar</code>,
+ <code class="inline-code">SimpleNumber</code>,
+ <code class="inline-code">SimpleSequence</code>, and
+ <code class="inline-code">SimpleHash</code> respectively. Thus, the java
+ methods on those objects will not be available. The default
+ wrapper implementation in FreeMarker 2.3 automatically knows
+ how to wrap Jython objects, and also wraps
+ <code class="inline-code">org.w3c.dom.Node</code> objects into instances of
+ <code class="inline-code">freemarker.ext.dom.NodeModel</code>.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">FreemarkerServlet</code> base
+ implementation no longer deduces the locale to use from the
+ HttpRequest.getLocale() hook. Rather, it simply delegates to a
+ <code class="inline-code">deduceLocale()</code> hook that is overridable in
+ subclasses. The base implementation simply uses
+ <code class="inline-code">Locale.getDefault()</code></p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_237">Differences between the Preview 9 and Preview 8
+ releases</h3>
+
+
+ <ul>
+ <li>
+ <p>Fixed bugs introduced with Preview 8: XPath,
+ <code class="inline-code">@@markup</code> and
+ <code class="inline-code">@@nested_markup</code> now works with the document
+ node.</p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_238">Differences between the Preview 8 and Preview 7
+ releases</h3>
+
+
+ <ul>
+ <li>
+ <p><code class="inline-code">macro</code> and assignment directives now
+ accept arbitrary destination variable name with quoted syntax.
+ For example: <code class="inline-code"><#macro
+ "foo-bar"><em class="code-color">...</em></code> or
+ <code class="inline-code"><#assign "this+that" = 123></code>. This is
+ important, because XML element names can contain hyphen, and
+ it was not possible to define a handler macro for those
+ elements, till now.</p>
+ </li>
+
+ <li>
+ <p>Special key <code class="inline-code">@@content</code> was renamed to
+ <code class="inline-code">@@nested_markup</code>.</p>
+ </li>
+
+ <li>
+ <p>Fixed outdated XML related Manual parts (that were
+ outdated even in Preview 7).</p>
+ </li>
+
+ <li>
+ <p>Better parse-error messages.</p>
+ </li>
+
+ <li>
+ <p>Minor bugfixes here and there...</p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_239">Differences between the Preview 7 and Preview 6
+ releases</h3>
+
+
+ <ul>
+ <li>
+ <p>Caching of XPath queries should lead to significant
+ performance improvements for XML processing, at least when
+ XPath is heavily used.</p>
+ </li>
+
+ <li>
+ <p>Refinements in handling of XML namespaces in the XML
+ processing functionality. The new
+ <code class="inline-code">strict_namespace_handling</code> setting
+ introduced in 2.3pre6 was removed. A general-purpose solution
+ was arrived at that should make that configuration setting
+ unnecessary.</p>
+ </li>
+
+ <li>
+ <p>Special key <code class="inline-code">@xmlns</code> was renamed to
+ @@xmlns. Reserved namespace prefix <code class="inline-code">default</code>
+ was renamed to <code class="inline-code">@@default</code>.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">ftl</code> directive now accepts
+ non-string types.</p>
+ </li>
+
+ <li>
+ <p>New special keys were introduced for XML node wrappers
+ in the freemarker.ext.dom package. The
+ <code class="inline-code">@@markup</code> key returns the literal markup
+ that make up that element and the <code class="inline-code">@@content</code>
+ key returns all the element's markup excluding the opening and
+ closing tags.</p>
+ </li>
+
+ <li>
+ <p>Minor bugfixes here and there...</p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_240">Differences between the Preview 6 and Preview 5
+ releases</h3>
+
+
+ <ul>
+ <li>
+ <p>Existence built-ins (<code class="inline-code">?default</code>,
+ <code class="inline-code">?exists</code>, etc.) now work with sequence sub
+ variables as well. Read the <a href="ref_directive_switch.html#ref.directive.default">documentation of the
+ <code>default</code> built-in</a> for more
+ information.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">matches</code> built-in now returns a
+ sequence instead of a collection.</p>
+ </li>
+
+ <li>
+ <p>Refinements in handling of XML namespaces in the XML
+ processing functionality. A new setting,
+ <code class="inline-code">strict_namespace_handling</code> was introduced.
+ If this is set (it is off by default) any node-handling macro
+ used in with the visit/recurse machinery must be from a macro
+ library that declares in its ftl header that it handles the
+ namespace in question.</p>
+ </li>
+
+ <li>
+ <p>Minor bugfixes here and there...</p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_241">Differences between the Preview 5 and Preview 4
+ releases</h3>
+
+
+ <ul>
+ <li>
+ <p>The <code class="inline-code">replace</code> and
+ <code class="inline-code">split</code> built-ins now support
+ case-insensitive comparison and regular expressions (J2SE 1.4+
+ only), and some other new options. More information can be
+ found <a href="ref_builtins_string.html#ref_builtin_string_flags">here</a>.</p>
+ </li>
+
+ <li>
+ <p>New butilt-in for regular expression matching (J2SE 1.4+
+ only): <a href="ref_builtins_string.html#ref_builtin_matches"><code>matches</code></a></p>
+ </li>
+
+ <li>
+ <p>Minor bugfixes here and there...</p>
+ </li>
+
+ <li>
+ <p>Manual: More browser-safe HTML-s. More updated
+ content.</p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_242">Differences between the Preview 4 and Preview 3
+ releases</h3>
+
+
+ <ul>
+ <li>
+ <p>Bugfix: with multi-type variables, <code class="inline-code">+</code>
+ operator overload for hash type had higher precedence than the
+ precedence of some older overloads.</p>
+ </li>
+
+ <li>
+ <p>The API documentation was missing from the distribution
+ <code class="inline-code">tar.gz</code>.</p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_243">Differences between the Preview 3 and Preview 2
+ releases</h3>
+
+
+ <ul>
+ <li>
+ <p>XML processing: Many various bugfixes, especially with
+ the declarative processing.</p>
+ </li>
+
+ <li>
+ <p>XML processing: the <code class="inline-code">namespace_uri</code>
+ built-in, the <code class="inline-code">xmlnsuri</code> header parameter,
+ and the <code class="inline-code">TemplateNodeModel.getNodeNamespace</code>
+ method were renamed to <code class="inline-code">node_namespace</code> and
+ <code class="inline-code">getNodeNamespace</code> respectively.</p>
+ </li>
+
+ <li>
+ <p>XML processing: Better documentation. Especially, note:
+ <a href="xgui.html">XML Processing Guide</a></p>
+ </li>
+
+ <li>
+ <p>A new header parameter, <code class="inline-code">strip_text</code>,
+ that removes all top-level text from a template. See <a href="ref_directive_ftl.html#ref.directive.ftl"><code>ftl</code>
+ directive</a></p>
+ </li>
+
+ <li>
+ <p>Support for a variable number of macro parameters. If
+ the last parameter in a macro declaration ends with
+ <code class="inline-code">...</code>, all extra parameters passed to the
+ macro will be available via that parameter. For macros called
+ with positional parameters, the parameter will be a sequence.
+ For named parameters, the parameter will be a hash.</p>
+ </li>
+
+ <li>
+ <p>For <code class="inline-code">BeansWrapper</code> generated models,
+ you can now use the <code class="inline-code">${obj.method(args)}</code>
+ syntax to invoke methods whose return type is
+ <code class="inline-code">void</code>. <code class="inline-code">void</code> methods now
+ return <code class="inline-code">TemplateModel.NOTHING</code> as their
+ return value.</p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_244">Differences between the Preview 2 and Preview 1
+ releases</h3>
+
+
+ <ul>
+ <li>
+ <p>The <code class="inline-code">freemarker.ext.dom.NodeModel</code> API
+ changed slightly. The <code class="inline-code">setDocumentBuilder()</code>
+ method was changed to
+ <code class="inline-code">setDocumentBuilderFactory()</code> because the
+ older scheme was not thread-safe. The
+ <code class="inline-code">stripComments</code> and
+ <code class="inline-code">stripPIs</code> methods are renamed to The
+ <code class="inline-code">removeComments</code> and
+ <code class="inline-code">removePIs</code>, and are fixed now. A new method,
+ <code class="inline-code">simplify</code> has been added.</p>
+ </li>
+
+ <li>
+ <p>The expressions <code class="inline-code">as</code>,
+ <code class="inline-code">in</code>, and <code class="inline-code">using</code> are now
+ keywords in the template language and cannot be used as
+ top-level variable names without square-bracket syntax (as
+ <code class="inline-code">.vars["in"]</code>). If, by some chance, you have
+ top-level variables that use one of these names, you will have
+ to rename them (or use the square-bracket syntax). Sorry for
+ the inconvenience.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">?new</code> built-in, as it was
+ implemented, was a security hole. Now, it only allows you to
+ instantiate a java object that implements the
+ <code class="inline-code">freemarker.template.TemplateModel</code>
+ interface. If you want the functionality of the
+ <code class="inline-code">?new</code> built-in as it existed in prior
+ versions, make available an instance of the new
+ <code class="inline-code">freemarker.template.utility.ObjectConstructor</code>
+ class to your template.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code"><#recurse></code> directive was
+ broken. It did not work with a <code class="inline-code">using</code>
+ clause. This is now fixed.</p>
+ </li>
+ </ul>
+
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_1.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_2_8.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[06/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_22.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_22.html b/builds/2.3.26-nightly/versions_2_3_22.html
new file mode 100644
index 0000000..15a52c2
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_22.html
@@ -0,0 +1,1197 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.22 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.22">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_22.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_22.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_22.html"><span itemprop="name">2.3.22</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.22"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_23.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_21.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_22" itemprop="headline">2.3.22</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_168" data-menu-target="autoid_168">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_169" data-menu-target="autoid_169">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_170" data-menu-target="autoid_170">Notes</a></li></ul> </div><p>Date of release: 2015-03-01</p><p>Note that since 2.3.22 is designed to be fully backward
+ compatible with the previous 2.3.x releases, <em>some of the
+ improvements and fixes described below are only activated when you
+ specifically ask for 2.3.22 "incompatible
+ improvements"</em> (it's always clearly indicated),
+ because they could, with very small chance, break existing
+ applications. For actively maintained applications it's probably
+ better to allow them. See <a href="pgui_config_incompatible_improvements.html#pgui_config_incompatible_improvements_how_to_set">how to set
+ "incomplatible improvements" here</a>.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_168">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>New built-ins: <code class="inline-code">api</code> and
+ <code class="inline-code">has_api</code>.
+ <code class="inline-code"><em class="code-color">value</em>?api</code> provides
+ access to the API (usually, the Java API) of
+ <code class="inline-code"><em class="code-color">value</em></code>, like
+ <code class="inline-code"><em class="code-color">value</em>?api.<em class="code-color">someJavaMethod()</em></code>
+ or
+ <code class="inline-code"><em class="code-color">value</em>?api.<em class="code-color">someBeanProperty</em></code>),
+ if the value itself supports exposing its API. This meant to be
+ used rarely, when you need to call a Java method of an object,
+ but the by-design simplistic view of the value that FreeMarker
+ exposes to the templates hides that, and there's no equivalent
+ built-in either. For example, when you put a
+ <code class="inline-code">Map</code> into the data-model (and you are using
+ the default object wrapper), <code class="inline-code">myMap.myMethod()</code>
+ in a template basically translates to <code class="inline-code">((Method)
+ myMap.get("myMethod")).invoke(...)</code> in Java, thus you
+ can't call <code class="inline-code">myMethod</code>. If, however, you write
+ <code class="inline-code">myMap?api.myMethod()</code> instead, that means
+ <code class="inline-code">myMap.myMethod()</code> in Java. Similarly,
+ <code class="inline-code">myMap?api.myProperty</code> translates to
+ <code class="inline-code">myMap.getMyProperty()</code> in Java, instead of to
+ <code class="inline-code">myMap.get("myProperty")</code>.</p>
+
+ <p><em>If you can, rely on the capabilities of the FTL
+ types and the related built-ins as far as possible. Using
+ <code class="inline-code">?api</code> is only the last
+ resort.</em></p>
+
+ <p>Using <code class="inline-code">?api</code> also happens to offer a
+ workaround for the lack of non-<code class="inline-code">String</code>
+ <code class="inline-code">Map</code> key support in FTL's
+ <code class="inline-code">[]</code> operator (as in
+ <code class="inline-code">myMap[key]</code>), because now you can write
+ <code class="inline-code">myMap?api.get(nonStringKey)</code>.</p>
+
+ <p><code class="inline-code">?api</code> is not enabled by default and
+ isn't available for all values. <a href="ref_builtins_expert.html#ref_buitin_api_and_has_api">See more
+ here...</a></p>
+ </li>
+
+ <li>
+ <p>Identifiers (like <code class="inline-code">someVariable</code>) can now
+ contain minus (<code class="inline-code">-</code>), dot
+ (<code class="inline-code">.</code>), and colon (<code class="inline-code">:</code>) at any
+ position, but those characters <em>must be escaped with a
+ preceding backslash</em> (<code class="inline-code">\</code>), or else
+ they would be interpreted as operators. For example, to read the
+ variable whose name is "data-id", the correct
+ expression is <code class="inline-code">data\-id</code>, as
+ <code class="inline-code">data-id</code> would be interpreted as "data
+ minus id". This also works for named macro parameters,
+ which is useful when you want to accept arbitrary HTML
+ attributes in a catch-all parameter, like in <code class="inline-code"><@box
+ class="someCssClass" data\-id=product.id /></code>. (When
+ you enumerate the catch-all parameter names inside the macro,
+ the key string you get is <code class="inline-code">"data-id"</code> without
+ <code class="inline-code">\</code> of course.)</p>
+ </li>
+
+ <li>
+ <p>Added <code class="inline-code">?lower_abc</code> and
+ <code class="inline-code">?upper_abc</code>. This converts
+ <code class="inline-code">1</code>, <code class="inline-code">2</code>,
+ <code class="inline-code">3</code>, etc., to the string
+ <code class="inline-code">"a"</code>, <code class="inline-code">"b"</code>,
+ <code class="inline-code">"c"</code>, etc. (or for <code class="inline-code">"A"</code>,
+ <code class="inline-code">"B"</code>, <code class="inline-code">"C"</code>, etc.). When
+ reaching <code class="inline-code">"z"</code>, it continues like
+ <code class="inline-code">"aa"</code>, <code class="inline-code">"ab"</code>, etc. This is
+ the same logic that you can see in column labels in spreadsheet
+ applications (like Excel or Calc). <a href="ref_builtins_number.html#ref_builtin_lower_abc">More details...</a></p>
+ </li>
+
+ <li>
+ <p>Added <code class="inline-code">?keep_before_last</code> and
+ <code class="inline-code">?keep_after_last</code>. Example:
+ <code class="inline-code">"foo.bar.txt"?keep_before_last(".")</code> returns
+ <code class="inline-code">"foo.bar"</code>,
+ <code class="inline-code">"foo.bar.txt"?keep_after_last(".")</code> returns
+ <code class="inline-code">"txt"</code>. (These work like
+ <code class="inline-code">?keep_before</code> and
+ <code class="inline-code">?keep_after</code>, but those look for the first
+ occurrence of the separator.)</p>
+ </li>
+
+ <li>
+ <p>Added many missing UNICODE letters and digits to the set
+ of legal identifier characters, like Korean letters (bug fixed:
+ [<a href="https://sourceforge.net/p/freemarker/bugs/129/">129</a>])</p>
+ </li>
+
+ <li>
+ <p>Error message quality improvements:</p>
+
+ <ul>
+ <li>
+ <p>Several improvements when calling custom JSP tags; see
+ them in its own section later.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: When localized lookup or template
+ acquisition has kicked in, error messages have still quoted
+ the name used for requesting the template, rather that the
+ actual template source name (like <code class="inline-code">foo.ftl</code>
+ instead of <code class="inline-code">foo_en.ftl</code>, when the template
+ was get as <code class="inline-code">foo.ftl</code>, but behind the scenes
+ was loaded from <code class="inline-code">foo_en.ftl</code>).</p>
+ </li>
+
+ <li>
+ <p>"Template not found" errors are now more
+ detailed, giving hints about accidentally using
+ <code class="inline-code">\</code> instead of <code class="inline-code">/</code>, or
+ backing out of the <code class="inline-code">TemplateLoader</code>'s root
+ directory.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">#setting</code> directive gives more
+ helpful error message when the setting name is not
+ recognized, and lists the allowed setting names or a
+ correction suggestion.</p>
+ </li>
+
+ <li>
+ <p>When a bad special variable name
+ (<code class="inline-code">.<em class="code-color">name</em></code>) is
+ encountered, the list of available names is shown in the
+ error message.</p>
+ </li>
+
+ <li>
+ <p>When <code class="inline-code">Map.get</code> or
+ <code class="inline-code">Map.containsKey</code> of a wrapped
+ <code class="inline-code">Map</code> throws a
+ <code class="inline-code">ClassCastException</code> or
+ <code class="inline-code">NullPointerException</code>, the error will
+ point to the causing FTL expression (with some explanation),
+ rather than bubbling up as low level runtime error.</p>
+ </li>
+ </ul>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_169">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>Object wrapping improvements:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">DefaultObjectWrapper</code>, only with its
+ <code class="inline-code">incompatible_improvements</code> set to 2.3.22
+ (<a href="pgui_datamodel_objectWrapper.html#topic.defaultObjectWrapperIcI">see how
+ here...</a>), or more precisely, with its new
+ <code class="inline-code">useAdaptersForContainers</code> setting set to
+ <code class="inline-code">true</code> (which defaults to
+ <code class="inline-code">true</code> when
+ <code class="inline-code">incompatible_improvements</code> is set to
+ 2.3.22): It doesn't copy <code class="inline-code">Map</code>-s,
+ <code class="inline-code">List</code>-s, and arrays anymore when wrapping
+ them into <code class="inline-code">TemplateModel</code>-s (which is the
+ interface through with templates access all values), just
+ wraps them into thin <code class="inline-code">TemplateModel</code>
+ adapters, that will reach the original object for all
+ operations. The wrapped values will be instances of the new
+ <code class="inline-code">DefaultMapAdapter</code>,
+ <code class="inline-code">DefaultListAdapter</code> and
+ <code class="inline-code">DefaultArrayAdapter</code> classes, instead of
+ the legacy (copying) <code class="inline-code">SimpleHash</code> and
+ <code class="inline-code">SimpleSequence</code> classes. (Note that many
+ projects use pure <code class="inline-code">BeansWrapper</code> instead of
+ <code class="inline-code">DefaultObjectWrapper</code>, which has always
+ used the adapter approach, albeit a different implementation
+ of it. As the shortcomings of
+ <code class="inline-code">DefaultObjectWrapper</code> are fixed now, it's
+ always recommended over <code class="inline-code">BeansWrapper</code>, as
+ <code class="inline-code">BeansWrapper</code> gives quite confusing
+ multi-typed values and is substantially slower.)</p>
+
+ <p>While keeping backward compatibility as much as
+ possible was an important factor in this change, this is a
+ quite deep change, so you may want to <a href="#topic.defaultObjectWrapperSwitchToAdapters">review
+ the consequences and reasons here...</a> (But again, this
+ change is <em>not</em> active by default, so
+ merely updating FreeMarker wont risk the stability of
+ existing applications)</p>
+ </li>
+
+ <li>
+ <p>Added <code class="inline-code">TemplateMethodModelEx
+ BeansWrapper.wrap(Object object, Method method)</code>
+ for wrapping methods without wrapping their parent object
+ and without going through overloaded method selection on
+ invocation time.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed [<a href="http://sourceforge.net/p/freemarker/bugs/372/">372</a>]:
+ <code class="inline-code">ClassCastException</code> when a
+ <code class="inline-code">SortedMap</code> (typically, a
+ <code class="inline-code">TreeMap</code>) is wrapped with
+ <code class="inline-code">DefaultObjectWrapper</code> and then a 1
+ character long string is get from it that doesn't exist. To
+ fix the issue, if the wrapped <code class="inline-code">Map</code> is a
+ <code class="inline-code">SortedMap</code> and it's wrapped by
+ <code class="inline-code">DefaultObjectWrapper</code>, it won't try to
+ fall back to a <code class="inline-code">Character</code> key after with
+ the <code class="inline-code">String</code> key has got
+ <code class="inline-code">null</code>. (This change should be backward
+ compatible, because when a <code class="inline-code">SortedMap</code> has
+ <code class="inline-code">Character</code> keys, the initial attempt with
+ <code class="inline-code">String</code> key causes
+ <code class="inline-code">ClassCastException</code>, thus, such
+ <code class="inline-code">SortedMap</code>-s were never usable as FTL
+ hashes.)</p>
+ </li>
+
+ <li>
+ <p>Bug fixed [<a href="http://sourceforge.net/p/freemarker/bugs/368/">368</a>]:
+ Only with <code class="inline-code">incompatible_improvements</code> set
+ to 2.3.22 or with its new
+ <code class="inline-code">useAdaptersForContainers</code> setting set to
+ <code class="inline-code">true</code>: Key order and other behavioral
+ peculiarities of "custom"
+ <code class="inline-code">Map</code> types isn't lost anymore. The same
+ stands for <code class="inline-code">List</code>-s too.</p>
+ </li>
+
+ <li>
+ <p>Added new setting,
+ <code class="inline-code">forceLegacyNonListCollections</code>. This only
+ matters when <code class="inline-code">useAdaptersForContainers</code> is
+ <code class="inline-code">true</code>. Then, unless you set this to
+ <code class="inline-code">true</code>,
+ <code class="inline-code">java.util.Collection</code>-s that aren't
+ <code class="inline-code">List</code>-s (like <code class="inline-code">Set</code>-s)
+ will continue using <code class="inline-code">SimpleSequence</code> (i.e.,
+ the copying approach) instead of the adapter approach. The
+ default is <code class="inline-code">false</code>, at least until
+ <code class="inline-code">incompatible_improvements</code> 2.4.0, because
+ <code class="inline-code">SimpleSequence</code> gave indexed access to
+ these non-<code class="inline-code">List</code>-s, like in
+ <code class="inline-code">mySet[2]</code>, which is strange but some
+ existing templates may utilize this, even if only
+ accidentally. With
+ <code class="inline-code">forceLegacyNonListCollections</code> set to
+ <code class="inline-code">false</code>, indexed access won't be possible
+ for <code class="inline-code">Set</code>-s and such anymore (nor will
+ <code class="inline-code">?first</code> and <code class="inline-code">?last</code> work,
+ but <code class="inline-code">?size</code> will still do), so you may want
+ to retest old templates. On the other hand, you get the
+ advantages of the adapter approach. Hence, in new projects
+ it's highly recommended to set
+ <code class="inline-code">forceLegacyNonListCollections</code> to
+ <code class="inline-code">false</code>. (The adapter approach is
+ implemented by
+ <code class="inline-code">DefaultNonListCollectionAdapter</code>.)</p>
+ </li>
+
+ <li>
+ <p>Added new, <em>experimental</em> FTL type
+ interface,
+ <code class="inline-code">freemarker.template.TemplateCollectionModelEx</code>,
+ which adds the <code class="inline-code">size()</code>,
+ <code class="inline-code">isEmpty()</code>, and <code class="inline-code">boolean
+ contains(TemplateModel)</code> methods to the
+ <code class="inline-code">TemplateCollectionModel</code> interface. This
+ was added because when wrapping
+ <code class="inline-code">java.util.Collections</code> these extra
+ capabilities area available anyway, but FTL couldn't tap on
+ them till now. While the exact interface details are marked
+ as experimental, the feature itself is already utilized for
+ <code class="inline-code">?size</code> when setting the
+ <code class="inline-code">forceLegacyNonListCollections</code> property of
+ <code class="inline-code">DefaultObjectWrapper</code> to
+ <code class="inline-code">false</code> (see earlier).</p>
+ </li>
+
+ <li>
+ <p>Added new <em>experimental</em> interface,
+ <code class="inline-code">freemarker.template.ObjectWrapperAndUnwrapper</code>.
+ This extends <code class="inline-code">ObjectWrapper</code> with
+ unwrapping functionality. This functionality has already
+ existed for a long time in <code class="inline-code">BeansWrapper</code>
+ and its subclasses, like in
+ <code class="inline-code">DefaultObjectWrapper</code>, but it wasn't
+ "factored out" into its own published interface
+ that other <code class="inline-code">ObjectWrapper</code>-s could
+ implement. This is useful for
+ <code class="inline-code">TemplateModel</code> implementations that don't
+ want to require a <code class="inline-code">BeansWrapper</code> (or its
+ subclass), only the availability of the unwrapping
+ functionality.</p>
+ </li>
+
+ <li>
+ <p>Added new <em>experimental</em> interfaces
+ to implement <code class="inline-code">?api</code> (see it in the FTL
+ section): <code class="inline-code">TemplateModelWithAPISupport</code>,
+ <code class="inline-code">ObjectAPIWrapper</code>,
+ <code class="inline-code">RichObjectWrapper</code>. Note that while the
+ interfaces are experimental, <code class="inline-code">?api</code> itself
+ isn't.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p><code class="inline-code">FreemarkerServlet</code> improvements:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">FreemarkerServlet</code> now supports
+ custom JSP EL functions (defined in TLD-s with
+ <code class="inline-code">function</code> XML elements). Earlier it has
+ ignored them. The custom EL function can be called like a
+ Java method, for example: <code class="inline-code"><#assign
+ u=JspTaglibs["/WEB-INF/utils.tld"]> ...
+ ${u.truncate(title, 25)}</code>.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: Error message was unhelpful when there was
+ a type mismatch between the actual and the expected type of
+ a custom tag parameter. This was a very frequent problem of
+ users who call JSP taglibs from FTL (the typical
+ "java.lang.IllegalArgumentException: argument type
+ mismatch", without any FTL context). Now it's a proper error
+ with explanation, solution tip, and FTL error
+ position/quotation.</p>
+ </li>
+
+ <li>
+ <p>RFE resolved [<a href="https://sourceforge.net/p/freemarker/feature-requests/113/">113</a>]
+ [<a href="https://sourceforge.net/p/freemarker/feature-requests/114/">114</a>]:
+ <code class="inline-code">FreemarkerServlet</code> can now discover
+ <code class="inline-code">META-INF/**/*.tld</code>-s that are visible for
+ the class loader but aren't in
+ <code class="inline-code">WEB-INF/lib/*.jar</code>-s. For this feature to
+ be active, you must setup the extra TLD lookup with the
+ <code class="inline-code">MetaInfTldSources</code> and/or
+ <code class="inline-code">ClasspathTlds</code>
+ <code class="inline-code">FreemarkerServlet</code> init-params (see the
+ <a href="http://freemarker.org/docs/api/freemarker/ext/servlet/FreemarkerServlet.html">Java
+ API documentation of
+ <code>FreemarkerServlet</code></a> for the
+ description of these). For example, if you run your
+ application from Eclipse with an embedded Servlet container,
+ and thus the tag library jar-s aren't on the standard
+ locations but are in the classpath like any other
+ dependencies, now you can just write:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified"><init-param>
+ <param-name>MetaInfTldSources</param-name>
+ <param-value>classpath</param-value>
+</init-param></pre></div>
+
+ <p>and then all the <code class="inline-code">META-INF</code>
+ directories that are visible for the class loader will be
+ searched for TLD-s.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">MetaInfTldSources</code> and
+ <code class="inline-code">ClasspathTlds</code> can also be appended to or
+ replaced by the values of Java system properties
+ <code class="inline-code">org.freemarker.jsp.metaInfTldSources</code> and
+ <code class="inline-code">org.freemarker.jsp.classpathTlds</code>,
+ respectively. Thus one can adjust these in the Eclipse run
+ configuration without modifying the
+ <code class="inline-code">web.xml</code>. (See the <a href="http://freemarker.org/docs/api/freemarker/ext/servlet/FreemarkerServlet.html">Java
+ API documentation of
+ <code>FreemarkerServlet</code></a> for
+ more.)</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">FreemarkerServlet</code> now recognizes
+ the
+ <code class="inline-code">org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern</code>
+ servlet context attribute, and adds entries to
+ <code class="inline-code">MetaInfTldSources</code> (introduced above) from
+ it.</p>
+ </li>
+
+ <li>
+ <p>Added <code class="inline-code">protected
+ FreemarkerServlet.createTaglibFactory()</code> to allow
+ fine tuning the settings of the
+ <code class="inline-code">TaglibFactory</code>. It now have a few setters,
+ like <code class="inline-code">setObjectWrapper</code>,
+ <code class="inline-code">setMetaInfTldSource</code>, etc.</p>
+ </li>
+
+ <li>
+ <p>Added new servlet init-param,
+ <code class="inline-code">BufferSize</code>. This sets the buffer size via
+ <code class="inline-code">HTTPServletResponse.setBufferSize()</code> if
+ the response state still allows that, ignores it
+ otherwise.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">TemplatePath</code> servlet init-param
+ now supports a new kind of path, that looks like
+ <code class="inline-code">classpath:com/example/myapp/templates</code>.
+ This is similar to the old
+ <code class="inline-code">class://com/example/myapp/templates</code>, but
+ it uses the Thread Context Class Loader of the thread that
+ initializes <code class="inline-code">FreemarkerSerlvet</code>, and thus
+ will work even if <code class="inline-code">freemarker.jar</code> is not
+ local to the web application. <code class="inline-code">class://</code>
+ has the problem that it uses the defining class loader of
+ <code class="inline-code">FreemarkerSerlvet</code> itself (or of its
+ subclass).</p>
+ </li>
+
+ <li>
+ <p>If <code class="inline-code">incompatible_improvements</code> is set
+ to 2.3.22 (or higher), the <code class="inline-code">TemplatePath</code>
+ servlet init-param supports specifying multiple comma
+ separated paths inside
+ <code class="inline-code">[<em class="code-color">...</em>]</code>, like
+ <code class="inline-code"><param-value>[ WEB-INF/templates,
+ classpath:com/example/myapp/templates
+ ]</param-value></code>. This internally creates a
+ <code class="inline-code">freemarker.cache.MultiTemplateLoader</code>.</p>
+ </li>
+
+ <li>
+ <p>Added new servlet <code class="inline-code">init-param</code>,
+ <code class="inline-code">ExceptionOnMissingTemplate</code>. Setting this
+ to <code class="inline-code">true</code> changes the behavior on
+ template-not-found errors to similar to what you experience
+ with other kind of template exceptions (a HTTP 500
+ "Internal Server error" response on most
+ setups). When it's <code class="inline-code">false</code> (the legacy
+ behavior), you only get a HTTP 404 "Not found".
+ While that's also how JSP views work, this turns out to be a
+ problem, because some frameworks give 404 to the visitor too
+ if the MVC view gives 404. But to get to the point where you
+ forward to the MVC View, the visitor had to visit a valid
+ URL, only that page misses its View, so its broken on the
+ server side, so it should be a 500.</p>
+ </li>
+
+ <li>
+ <p>Added new overridable method:
+ <code class="inline-code">FreemarkerServlet.createDefaultObjectWrapper()</code>.
+ This can be used for what
+ <code class="inline-code">createObjectWrapper()</code> is usually
+ overridden for, but without unwillingly disabling the
+ processing of the related init-params (like of
+ <code class="inline-code">object_wrapper</code>).</p>
+ </li>
+
+ <li>
+ <p>Improved (or fixed) error logging: Now logs will
+ always get into FreeMarker's own log, not only into the
+ servlet container log. Also, earlier template-not-found and
+ template parsing error details logs were sometimes lost,
+ depending on the servlet container.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed, only active with
+ <code class="inline-code">incompatible_improvements</code> set to 2.3.22
+ (or higher): Some kind of values, when put into the JSP
+ <em>page</em> scope (via
+ <code class="inline-code">#global</code> or via the JSP
+ <code class="inline-code">PageContext</code> API) and later read back with
+ the JSP <code class="inline-code">PageContext</code> API (typically in a
+ custom JSP tag), might come back as FreeMarker
+ <code class="inline-code">TemplateModel</code> objects instead of as
+ objects with a standard Java type. Other Servlet scopes
+ aren't affected. It's highly unlikely that something expects
+ the presence of this bug. The affected values are of the FTL
+ types listed below, and to trigger the bug, they either had
+ to be created directly in the template (like as an FTL
+ literal or with
+ <code class="inline-code">?date</code>/<code class="inline-code">time</code>/<code class="inline-code">datetime</code>),
+ or you had to use <code class="inline-code">DefaultObjectWrapper</code> or
+ <code class="inline-code">SimpleObjectWrapper</code> (or a subclass of
+ them):</p>
+
+ <ul>
+ <li>
+ <p>FTL date/time/date-time values may came back as
+ <code class="inline-code">freemarker.template.SimpleDate</code>-s, now
+ they come back as <code class="inline-code">java.util.Date</code>-s
+ instead.</p>
+ </li>
+
+ <li>
+ <p>FTL sequence values may came back as
+ <code class="inline-code">SimpleSequence</code>-s, now they come back
+ as <code class="inline-code">java.util.List</code>-s as expected. This
+ stands assuming that the
+ <code class="inline-code">object_wrapper</code> configuration setting
+ is a subclass of <code class="inline-code">BeansWrapper</code> (such
+ as <code class="inline-code">DefaultObjectWrapper</code>), but that's
+ practically always the case in applications that use
+ FreeMarker's JSP extension (otherwise it can still work,
+ but it depends on the quality and capabilities of the
+ <code class="inline-code">ObjectWrapper</code> implementation).</p>
+ </li>
+
+ <li>
+ <p>FTL hash values may came back as
+ <code class="inline-code">SimpleHash</code>-es, now they come back as
+ <code class="inline-code">java.util.Map</code>-s as expected (again,
+ assuming that the object wrapper is a subclass of
+ <code class="inline-code">BeansWrapper</code>).</p>
+ </li>
+
+ <li>
+ <p>FTL collection values may came back as
+ <code class="inline-code">SimpleCollection</code>-s, now they come
+ back as <code class="inline-code">java.util.Collection</code>-s as
+ expected (again, assuming that the object wrapper is a
+ subclass of <code class="inline-code">BeansWrapper</code>).</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Bug fixed: Now <code class="inline-code">*.tld</code> files are
+ searched in <code class="inline-code">WEB-INF/</code> and in all its
+ subdirectories recursively. Earlier they were only searched
+ directly under <code class="inline-code">WEB-INF/</code> and
+ <code class="inline-code">WEB-INF/lib/</code>.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: Leading and trailing whitespace in TLD-s
+ inside the <code class="inline-code">name</code> and
+ <code class="inline-code">tag-class</code> elements is now removed.</p>
+ </li>
+
+ <li>
+ <p>Unwanted behavior fixed: In case multiple TLD-s map to
+ the same tag library URI, now
+ <code class="inline-code">WEB-INF/**/*.tld</code>-s has priority over
+ <code class="inline-code">META-INF/**/*.tld</code>-s coming from jar-s or
+ classpath directories. Earlier, it was the other way around,
+ except that <code class="inline-code">META-INF/lib/*.tld</code>-s could
+ still take precedence randomly. While the JSP specification
+ (2.2) explicitly states that the order is not defined and
+ shouldn't be relied upon, it's just logical that if someone
+ puts a TLD directly under <code class="inline-code">WEB-INF</code>, he
+ meant that to be used in that particular web application,
+ rather than the TLD-s coming from the dependency jars which
+ are often shared by multiple web applications.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: Defaults set in an overridden
+ <code class="inline-code">FreemarkerServlet.createConfiguration</code>
+ won't be accidentally overwritten by
+ <code class="inline-code">FreemarkerServlet</code>'s factory defaults
+ anymore. This was a problem with theses settings only:
+ <code class="inline-code">template_exception_handler</code>,
+ <code class="inline-code">log_template_exceptions</code>,
+ <code class="inline-code">object_wrapper</code>,
+ <code class="inline-code">template_loader</code>.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: If you had multiple
+ <code class="inline-code">FreemarkerServlet</code>-s with different
+ configuration settings in the same servlet context, that
+ could lead to malfunction. (Normally, you only have one,
+ just like there's only one servlet that processes
+ <code class="inline-code">*.jsp</code>.)</p>
+ </li>
+
+ <li>
+ <p>Removed all the <code class="inline-code">xsd</code> files
+ (<code class="inline-code">web-app</code> and <code class="inline-code">taglib</code>
+ schemas) from the FreeMarker artifact and from the XML
+ entity resolver, as they were unused during XML
+ parsing.</p>
+ </li>
+
+ <li>
+ <p>Generally improved implementation quality
+ (maintainability, error messages, performance bug fixes,
+ test coverage) and better API documentation.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Logging facility improvements:</p>
+
+ <ul>
+ <li>
+ <p>Just like earlier, when auto-selecting the logger
+ library (the default behavior), FreeMarker choses Log4j if
+ it's available. But now, if that turns out to be
+ <code class="inline-code">log4j-over-slf4j</code>, FreeMarker will use
+ SLF4J directly instead. (This fixes the issue where the
+ logged location points to FreeMarker's log adapter class
+ instead of the real call place.)</p>
+ </li>
+
+ <li>
+ <p>FreeMarker now recognizes the
+ <code class="inline-code">org.freemarker.loggerLibrary</code> system
+ property, which specifies which logger to use, like
+ <code class="inline-code">java <em class="code-color">...</em>
+ -Dorg.freemarker.loggerLibrary=SLF4J</code>. This option
+ deprecates
+ <code class="inline-code">Logger.selectLoggerLibrary(int)</code> as that
+ was inherently unreliable (because you usually can't control
+ class initialization order very well). The system property
+ has precedence over
+ <code class="inline-code">Logger.selectLoggerLibrary</code>.</p>
+ </li>
+
+ <li>
+ <p>Generally improved implementation quality (more info
+ printed when something fails, etc.).</p>
+ </li>
+
+ <li>
+ <p>New configuration setting:
+ <code class="inline-code">log_template_exceptions</code>
+ (<code class="inline-code">Configuration.setLogTemplateExceptions(boolean)</code>).
+ This specifies if <code class="inline-code">TemplateException</code>-s
+ thrown by template processing are logged by FreeMarker or
+ not. The default is <code class="inline-code">true</code> for backward
+ compatibility, but that results in logging the exception
+ twice in properly written applications, because there the
+ <code class="inline-code">TemplateException</code> thrown by the public
+ FreeMarker API is also logged by the caller (even if only as
+ the cause exception of a higher level exception). Hence, in
+ modern applications it should be set to
+ <code class="inline-code">false</code>. (Note that this setting has no
+ effect on the logging of exceptions caught by
+ <code class="inline-code">#attempt</code>/<code class="inline-code">#recover</code>;
+ those are always logged.)</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p><code class="inline-code">Environment</code> and custom directive
+ related improvements:</p>
+
+ <ul>
+ <li>
+ <p>Added
+ <code class="inline-code">Environment.getCurrentDirectiveCallPlace()</code>,
+ which returns a <code class="inline-code">DirectiveCallPlace</code> object
+ when called from a custom directive (i.e., from
+ <code class="inline-code">TemplateDirectiveModel.execute()</code>). The
+ <code class="inline-code">DirectiveCallPlace</code> objects lets you
+ associate an arbitrary object to the directive invocation
+ inside the template, which can be used for call-place-bound
+ caching (like the minification of non-dynamic nested
+ content). See <code class="inline-code">DirectiveCallPlace</code> in the
+ Java API documentation for more.</p>
+ </li>
+
+ <li>
+ <p>Added
+ <code class="inline-code">Environment.getMainTemplate()</code>. Deprecated
+ the ambiguous (and often broken: [<a href="https://sourceforge.net/p/freemarker/bugs/145/">145</a>])
+ <code class="inline-code">Environment.getTemplate()</code>.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Template loading:</p>
+
+ <ul>
+ <li>
+ <p>Added new <code class="inline-code">Configuration</code> setting,
+ <code class="inline-code">template_lookup_strategy</code>
+ (<code class="inline-code">Configuration.setTemplateLookupStrategy(TemplateLookupStrategy)</code>).
+ This allows customizing what
+ <code class="inline-code">TemplateLoader</code>-level names will be tried
+ when a template is requested. With this you can, for
+ example, define a custom localized lookup sequence instead
+ of the default (which looks like:
+ <code class="inline-code">foo_de_LU_MAC.ftl, foo_de_LU.ftl,
+ foo_de.ftl,</code><code class="inline-code"> foo.ftl</code>).</p>
+ </li>
+
+ <li>
+ <p>Added new
+ <code class="inline-code">Configuration.getTemplate(<em class="code-color">...</em>)</code>
+ parameter, <code class="inline-code">Object customLookupCondition</code>.
+ This parameter can be used by custom a
+ <code class="inline-code">TemplateLookupStrategy</code> to deduce the
+ actual template name(s) from the requested name (similarly
+ to as the default lookup strategy does that based on the
+ locale). For example, on a multi-domain Web site, one may
+ want to define some templates that are specialized to a
+ domain, and thus use the domain name as the custom lookup
+ condition. Then, when <code class="inline-code">foo.ftl</code> is
+ requested, a custom
+ <code class="inline-code">TemplateLookupStrategy</code> could first look
+ for <code class="inline-code">@somedomain.com/foo.ftl</code>, and then for
+ <code class="inline-code">@default/foo.ftl</code>. See the JavaDoc of the
+ relevant
+ <code class="inline-code">Configuration.getTemplate(<em class="code-color">...</em>)</code>
+ overload for more details; note there the requirements
+ regarding the <code class="inline-code">hashCode</code> and
+ <code class="inline-code">equals</code> of the
+ <code class="inline-code">customLookupCondition</code>.</p>
+ </li>
+
+ <li>
+ <p>Added new <code class="inline-code">Configuration</code> setting,
+ <code class="inline-code">template_name_format</code>
+ (<code class="inline-code">Configuration.setTemplateNameFormat(TemplateNameFormat)</code>).
+ This allows specifying the naming rules used by FreeMarker.
+ For now, custom implementations aren't allowed, and you can
+ only chose between
+ <code class="inline-code">TemplateNameFormat.DEFAULT_2_3_0</code> (the
+ default) and <code class="inline-code">DEFAULT_2_4_0</code> (recommended,
+ at least for new projects). <code class="inline-code">DEFAULT_2_4_0</code>
+ has several advantages, but isn't fully backward compatible
+ (though most applications won't be affected). For typical
+ mistakes like using backslash instead of slash, or backing
+ out of the root, it gives
+ <code class="inline-code">MalformedTemplateNameFormatException</code>
+ instead of <code class="inline-code">TempalteNotFoundException</code>. It
+ allows scheme names to be terminated with
+ <code class="inline-code">:</code> alone, instead of a
+ <code class="inline-code">://</code> (which is also supported), like in
+ <code class="inline-code">classpath:foo/bar.ftl</code>. It fixes numerous
+ legacy glitches (bugs), mostly related to the interpretation
+ of <code class="inline-code">..</code> after special steps like
+ <code class="inline-code">.</code> or <code class="inline-code">*</code>. See the full
+ list of differences in the <a href="http://freemarker.org/docs/api/freemarker/cache/TemplateNameFormat.html#DEFAULT_2_4_0">Java
+ API documentation of
+ <code>TemplateNameFormat.DEFAULT_2_4_0</code></a>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">ClassTemplateLoader</code> now can be
+ created by specifying a <code class="inline-code">ClassLoader</code>
+ directly, rather than by specifying a base
+ <code class="inline-code">Class</code>. That is, now there's
+ <code class="inline-code">ClassTemplateLoader(ClassLoader, String)</code>
+ constructor, and also a
+ <code class="inline-code">Configuration.setClassLoaderForTemplateLoading(ClassLoader,
+ String)</code> method.</p>
+ </li>
+
+ <li>
+ <p>Added new exception,
+ <code class="inline-code">TemplateNotFoundException</code>, which is now
+ used instead of <code class="inline-code">TemplateNotFoundException</code>
+ when getting a template. As it extends
+ <code class="inline-code">TemplateNotFoundException</code>, this change is
+ backward compatible. The main goal was to counter the common
+ misunderstanding that template paths are real file paths.
+ However, the new exception also has the benefit that it can
+ give additional FreeMarker-specific information about the
+ error, like right now it has
+ <code class="inline-code">getTemplateName()</code> and
+ <code class="inline-code">getCustomLookupCondition()</code>
+ methods.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">Template</code>-s now have a
+ <code class="inline-code">getSourceName()</code> method, in additionally
+ to <code class="inline-code">getName()</code>. These two return the same
+ as far as no localized lookup or acquisition
+ (<code class="inline-code">*</code> in the name) or other lookup strategy
+ was actively involved. But when it was,
+ <code class="inline-code">getSourceName()</code> gives the name with which
+ the template was actually loaded from the
+ <code class="inline-code">TemplateLoader</code>, while
+ <code class="inline-code">getName()</code> returns (and had always
+ returned) the name with which the template was requested (in
+ canonicalized form). <code class="inline-code">getName()</code> is used
+ for everything (like for relative inclusion resolution),
+ except for location information in error messages, which now
+ uses <code class="inline-code">getSourceName()</code>. Also,
+ <code class="inline-code">TemplateException</code> now has a
+ <code class="inline-code">getSourceName()</code> method.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">Configuration.getTemplate(<em class="code-color">...</em>)</code>
+ overloads now accept <code class="inline-code">null</code> for the
+ <code class="inline-code">locale</code> and <code class="inline-code">encoding</code>
+ parameters, in which case they use the same defaults as the
+ overloads where the parameter is omitted.</p>
+ </li>
+
+ <li>
+ <p>Debugger SPI implementators, attention: The
+ <code class="inline-code">DebugBreak</code> instruction will now send the
+ <code class="inline-code">sourceName</code> of the template to the
+ <code class="inline-code">suspendEnvironmentSpi</code> callback, rather
+ than its <code class="inline-code">name</code>. You should also use the
+ <code class="inline-code">sourceName</code> in
+ <code class="inline-code">registerTemplateSpi</code> and such, not the
+ <code class="inline-code">name</code>.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Configuration:</p>
+
+ <ul>
+ <li>
+ <p>Added
+ <code class="inline-code">Configuration.unset<em class="code-color">Xxx</em></code>
+ and
+ <code class="inline-code">is<em class="code-color">Xxx</em>ExplicitlySet</code>
+ methods for several settings. Unsetting a setting makes it
+ behave as if
+ <code class="inline-code">set<em class="code-color">Xxx</em></code> was
+ never called, thus the setting will use the default value
+ that fits the current
+ <code class="inline-code">incompatible_improvements</code> value and will
+ be adjusted as <code class="inline-code">incompatible_improvements</code>
+ is changed later.</p>
+ </li>
+
+ <li>
+ <p>When configuring FreeMarker from
+ <code class="inline-code">java.util.Properties</code> (or with
+ <code class="inline-code">String</code>-<code class="inline-code">String</code>
+ name-value pairs in general):</p>
+
+ <ul>
+ <li>
+ <p>The <code class="inline-code">default</code> setting value is
+ now recognized by
+ <code class="inline-code">template_exception_handler</code>,
+ <code class="inline-code">template_storage</code>,
+ <code class="inline-code">template_loader</code> (and by the new
+ <code class="inline-code">template_lookup_strategy</code> and
+ <code class="inline-code">template_name_format</code>) settings, and
+ it causes
+ <code class="inline-code">Configuration.unset<em class="code-color">Xxx</em>()</code>
+ to be called.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: When setting
+ <code class="inline-code">object_wrapper</code> to
+ <code class="inline-code">default</code> (as opposed to not specifying
+ it), it has ignored the
+ <code class="inline-code">incompatible_improvements</code> and has
+ always used
+ <code class="inline-code">ObjectWrapper.DEFAULT_WRAPPER</code>. This
+ fix only matters when
+ <code class="inline-code">incompatible_improvements</code> is exactly
+ 2.3.21, as that's when the default object wrapper was
+ changed from
+ <code class="inline-code">ObjectWrapper.DEFAULT_WRAPPER</code> to the
+ result of <code class="inline-code">new
+ DefaultObjectWrapperBuilder(Configuration.VERSION_2_3_21).build()</code>,
+ which is a bit different singleton, as it has read-only
+ configuration settings and bug fixed overloaded method
+ selection rules. To use
+ <code class="inline-code">ObjectWrapper.DEFAULT_WRAPPER</code>
+ regardless of the value of the
+ <code class="inline-code">incompatible_improvements</code> setting,
+ use the new <code class="inline-code">default_2_3_0</code>
+ value.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Bug fixed: Changing the value of the
+ <code class="inline-code">localized_lookup</code> setting now empties the
+ template cache, so that old lookup results won't be reused.
+ (This of course only matters if you change this setting
+ under an already running service, which is very
+ unlikely.)</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Miscellaneous:</p>
+
+ <ul>
+ <li>
+ <p>Bug fixed [<a href="https://sourceforge.net/p/freemarker/bugs/145/">145</a>],
+ active only with
+ <code class="inline-code">incompatible_improvements</code> set to 2.3.22
+ (or higher): <code class="inline-code">#include</code> and
+ <code class="inline-code">#nested</code> doesn't change the parent
+ <code class="inline-code">Template</code> (see
+ <code class="inline-code">Configurable.getParent()</code>) of the
+ <code class="inline-code">Environment</code> anymore to the
+ <code class="inline-code">Template</code> that's included or where
+ <code class="inline-code">#nested</code> "returns" to. Thus,
+ the parent of <code class="inline-code">Environment</code> will be now
+ always the main <code class="inline-code">Template</code>. (The main
+ <code class="inline-code">Template</code> is the
+ <code class="inline-code">Template</code> whose <code class="inline-code">process</code>
+ or <code class="inline-code">createProcessingEnvironment</code> method was
+ called to initiate the output generation.) Note that this
+ only matters if you have set settings directly on
+ <code class="inline-code">Template</code> objects (not to be confused with
+ setting settings in templates via
+ <code class="inline-code">#setting</code>, which just modifies the
+ <code class="inline-code">Environment</code>, and so isn't affected by
+ this fix), and almost nobody does that. Also note that macro
+ calls have never changed the <code class="inline-code">Environment</code>
+ parent to the <code class="inline-code">Template</code> that contains the
+ macro definition, so there's no change there now.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed [<a href="https://sourceforge.net/p/freemarker/bugs/419/">419</a>]:
+ FreeMarker doesn't fail anymore when it has no permission to
+ read Java system properties, like when used in unsigned
+ applets. It just logs some warnings.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">HTML_DEBUG</code> and
+ <code class="inline-code">DEBUG</code>
+ <code class="inline-code">TemplateExceptionHandler</code> output now
+ contains a warning like "HTML_DEBUG mode; use RETHROW
+ in production!", due to frequent misuse.</p>
+ </li>
+
+ <li>
+ <p>Some fixes and improvements in template canonical form
+ output, and as a consequence of that, in FTL stack trace
+ instruction displaying.</p>
+ </li>
+
+ <li>
+ <p>Marked some historically public but otherwise internal
+ API-s as deprecated, so that the disclaimer is more apparent
+ in IDE-s.</p>
+ </li>
+ </ul>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_170">Notes</h2>
+
+
+ <p><a name="topic.defaultObjectWrapperSwitchToAdapters"></a>The
+ consequences and reasons of introducing adapter approach for
+ container types in <code class="inline-code">DefaultObjectWrapper</code> when its
+ incompatibleImprovements is set to 2.3.22:</p>
+
+ <ul>
+ <li>
+ <p>With the new approach (the adapter approach), the key
+ order of <code class="inline-code">Map</code>-s is never lost. The copying
+ approach could only keep that for <code class="inline-code">HashMap</code>
+ subclasses (such as <code class="inline-code">LinkedHashMap</code>) and
+ <code class="inline-code">SortedMap</code>-s (such as
+ <code class="inline-code">TreeMap</code>), but not for more exotic
+ <code class="inline-code">Map</code>-s, like Guava's
+ <code class="inline-code">ImmutableMap</code>. Also, any other behavioral
+ peculiarities of the original <code class="inline-code">Map</code> (e.g., case
+ insensitive key lookup) is kept now.</p>
+ </li>
+
+ <li>
+ <p>The exact type and identity of the
+ <code class="inline-code">Map</code>/<code class="inline-code">List</code> is kept when the
+ wrapped value is passed back to a Java method from the template.
+ With the legacy approach the Java methods have received a
+ <code class="inline-code">Map</code> or <code class="inline-code">List</code> of a special
+ FreeMarker specific type (that acted as an adapter for the
+ <code class="inline-code">TemplateModel</code>).</p>
+ </li>
+
+ <li>
+ <p>Performance characteristics change, mostly for the better,
+ but it depends on the application. If the template reads the
+ <em>same(!)</em> entry <em>from the data
+ model</em> roughly once or twice (or not at all), which is
+ typical, them the adapter approach gives better results,
+ otherwise the legacy copying approach is faster (as it can reuse
+ the wrapped entry from the previous read), though this slowdown
+ certainly not a concern for most applications. The performance
+ of the new adapter approach is more predictable, because it has
+ no initial "spike" to set up the container copy
+ (especially painful for huge collections), instead the
+ performance is linearly proportional to the number of data model
+ reads (and not to the number of collection entries).</p>
+ </li>
+
+ <li>
+ <p>If the
+ <code class="inline-code">Map</code>/<code class="inline-code">List</code>/array is changed
+ after it was wrapped, the change will now become visible in the
+ data-model. With the copying approach, the wrapped value was a
+ shallow-snapshot of the original
+ <code class="inline-code">Map</code>/<code class="inline-code">List</code>/array. While it's
+ unlikely that someone has deliberately utilized this, it's a
+ risk factor when switching to adapters.</p>
+ </li>
+
+ <li>
+ <p>It's theoretically possible that some code (mostly
+ <code class="inline-code">TemplateDirectiveModel</code> implementations)
+ mistakenly assumed that wrapped <code class="inline-code">Map</code>-s are
+ <code class="inline-code">SimpleHash</code>-es, and wrapped
+ <code class="inline-code">List</code>-s are
+ <code class="inline-code">SimpleSequence</code>-s, etc., instead of them just
+ being <code class="inline-code">TemplateHashModel</code>-s and
+ <code class="inline-code">TemplateSequenceModel</code>-s. Such code was always
+ wrong, but now it will indeed break, so it's a risk
+ factor.</p>
+ </li>
+
+ <li>
+ <p>As now the exact type of the wrapped original object is
+ used for overloaded method selection, the choice can be
+ different (and similar to what it would be with pure
+ <code class="inline-code">BeansWrapper</code>). It's difficult to find cases
+ where this matters. A change is most probable around arrays, as
+ with the copying approach they were unwrapped to
+ <code class="inline-code">List</code>-s, not to the original array. As the
+ overloaded method mechanism can convert between arrays and lists
+ (in both directions), it's usually not a problem. But, it
+ doesn't do conversion between different array types when the
+ overloaded method has various types on the parameter position of
+ the array, so that's a risk factor.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">SimpleHash</code> and
+ <code class="inline-code">SimpleSequence</code> haven't become deprecated.
+ They are still used for hashes and sequences created in FTL, and
+ are recommended for values that are built specifically to be
+ used from templates, rather than wrapping an already existing
+ <code class="inline-code">Map</code> or <code class="inline-code">List</code> or
+ array.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">List</code>-s and <code class="inline-code">Map</code>-s
+ that are exposed to templates in multiple threads are now under
+ greater stress regarding their correct operation under
+ multi-threaded read-only access. This is because the adapters
+ won't copy their contents into well known
+ <code class="inline-code">List</code> and <code class="inline-code">Map</code>
+ implementations (<code class="inline-code">HashMap</code>,
+ <code class="inline-code">ArrayList</code>, etc.) before accessing them from
+ multiple threads. So this is mostly a concern with custom
+ <code class="inline-code">List</code> and <code class="inline-code">Map</code>
+ implementations, which aren't as mature as the standard Java
+ classes. Note that this was always like so with pure
+ <code class="inline-code">BeansWrapper</code>, which is used by a lot of
+ projects/frameworks (like by Struts) for a long time, so it's
+ not an uncharted territory.</p>
+ </li>
+
+ <li>
+ <p>When the wrapped <code class="inline-code">List</code> is a
+ <code class="inline-code">AbstractSequentialList</code> (like a
+ <code class="inline-code">LinkedList</code>), the resulting adapter will
+ implement <code class="inline-code">TemplateCollectionModel</code> for more
+ efficient enumeration (<code class="inline-code">#list</code>-ing), in
+ additionally to <code class="inline-code">TemplateSequenceModel</code> of
+ course. <code class="inline-code">TemplateCollectionModel</code> allows FTL to
+ traverse the list without accessing elements by index. With the
+ legacy copying approach
+ <code class="inline-code">TemplateCollectionModel</code> wasn't implemented as
+ it wasn't needed for efficient enumeration there.</p>
+ </li>
+
+ <li>
+ <p>Iterators (when you put them directly into the data-model)
+ are wrapped into <code class="inline-code">DefaultIteratorAdapter</code>
+ instead of <code class="inline-code">SimpleCollection</code>. This has two
+ consequences:</p>
+
+ <ul>
+ <li>
+ <p>The wrapped <code class="inline-code">Iterator</code> is now
+ unwrapped properly to the original Java object when it's
+ passed to Java method from the template.</p>
+ </li>
+
+ <li>
+ <p>Wrapped <code class="inline-code">Iterator</code>-s (not to be
+ confused with <code class="inline-code">Iterable</code>) aren't
+ thread-safe anymore, to spare some synchronizations, after
+ all, exposing the same <code class="inline-code">Iterator</code> to
+ multiple parallel template executions doesn't make much
+ sense. This shouldn't be a migration concern, as even
+ earlier, only one of those template executions could succeed
+ (the "content" of <code class="inline-code">Iterator</code>-s
+ wasn't copied, so the one who first accessed it become the
+ exclusive owner). The change is just that earlier it was
+ guaranteed that the other threads will fail (that was the
+ thread-safe about it), while now there are no such
+ guarantees.</p>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_23.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_21.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[33/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_datamodel_directive.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_datamodel_directive.html b/builds/2.3.26-nightly/pgui_datamodel_directive.html
new file mode 100644
index 0000000..80af372
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_datamodel_directive.html
@@ -0,0 +1,411 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Directives - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Directives">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_datamodel_directive.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_datamodel_directive.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_datamodel.html"><span itemprop="name">The Data Model</span></a></li><li class="step-3" itempr
op="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_datamodel_directive.html"><span itemprop="name">Directives</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","The Data Model","Directives"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_datamodel_method.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_datamodel_node.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_datamodel_directive" itemprop="headline">Directives</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_35" data-menu-target="autoid_35">Example 1</a></li><li><a class="page-menu-link" href="#autoid_36" data-menu-target="autoid_36">Example 2</a></li><li><a class="page-menu-link" href="#autoid_37" data-menu-target="autoid_37">Notices</a></li></ul> </div><p>Java programmers can implement user-defined directives in Java
+ using the <code class="inline-code">TemplateDirectiveModel</code> interface. See in
+ the API documentation.</p> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p><code class="inline-code">TemplateDirectiveModel</code> was introduced in
+ FreeMarker 2.3.11, replacing the soon to be depreciated
+ <code class="inline-code">TemplateTransformModel</code>.</p>
+ </div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_35">Example 1</h2>
+
+
+ <p>We will implement a directive which converts all output
+ between its start-tag and end-tag to upper case. Like, this
+ template:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">foo
+<strong><@upper></strong>
+ bar
+ <#-- All kind of FTL is allowed here -->
+ <#list ["red", "green", "blue"] as color>
+ ${color}
+ </#list>
+ baaz
+<strong></@upper></strong>
+wombat</pre></div>
+
+ <p>will output this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">foo
+ BAR
+ RED
+ GREEN
+ BLUE
+ BAAZ
+wombat</pre></div>
+
+ <p>This is the source code of the directive class:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">package com.example;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.Map;
+
+import freemarker.core.Environment;
+import freemarker.template.TemplateDirectiveBody;
+import freemarker.template.TemplateDirectiveModel;
+import freemarker.template.TemplateException;
+import freemarker.template.TemplateModel;
+import freemarker.template.TemplateModelException;
+
+/**
+ * FreeMarker user-defined directive that progressively transforms
+ * the output of its nested content to upper-case.
+ *
+ *
+ * <p><b>Directive info</b></p>
+ *
+ * <p>Directive parameters: None
+ * <p>Loop variables: None
+ * <p>Directive nested content: Yes
+ */
+public class UpperDirective implements TemplateDirectiveModel {
+
+ public void execute(Environment env,
+ Map params, TemplateModel[] loopVars,
+ TemplateDirectiveBody body)
+ throws TemplateException, IOException {
+ // Check if no parameters were given:
+ if (!params.isEmpty()) {
+ throw new TemplateModelException(
+ "This directive doesn't allow parameters.");
+ }
+ if (loopVars.length != 0) {
+ throw new TemplateModelException(
+ "This directive doesn't allow loop variables.");
+ }
+
+ // If there is non-empty nested content:
+ if (body != null) {
+ // Executes the nested body. Same as <#nested> in FTL, except
+ // that we use our own writer instead of the current output writer.
+ body.render(new UpperCaseFilterWriter(env.getOut()));
+ } else {
+ throw new RuntimeException("missing body");
+ }
+ }
+
+ /**
+ * A {@link Writer} that transforms the character stream to upper case
+ * and forwards it to another {@link Writer}.
+ */
+ private static class UpperCaseFilterWriter extends Writer {
+
+ private final Writer out;
+
+ UpperCaseFilterWriter (Writer out) {
+ this.out = out;
+ }
+
+ public void write(char[] cbuf, int off, int len)
+ throws IOException {
+ char[] transformedCbuf = new char[len];
+ for (int i = 0; i < len; i++) {
+ transformedCbuf[i] = Character.toUpperCase(cbuf[i + off]);
+ }
+ out.write(transformedCbuf);
+ }
+
+ public void flush() throws IOException {
+ out.flush();
+ }
+
+ public void close() throws IOException {
+ out.close();
+ }
+ }
+
+}</pre></div>
+
+ <p>Now we still need to create an instance of this class, and
+ make this directive available to the template with the name "upper"
+ (or with whatever name we want) somehow. A possible solution is to
+ put the directive in the data-model:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">root.put("upper", new com.example.UpperDirective());</pre></div>
+
+ <p>But typically it is better practice to put commonly used
+ directives into the <code class="inline-code">Configuration</code> as <a href="pgui_config_sharedvariables.html">shared
+ variables</a>.</p>
+
+ <p>It is also possible to put the directive into an FTL library
+ (collection of macros and like in a template, that you
+ <code class="inline-code">include</code> or <code class="inline-code">import</code> in other
+ templates) using the <a href="ref_builtins_expert.html#ref_builtin_new"><code>new</code>
+ built-in</a>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#-- Maybe you have directives that you have implemented in FTL -->
+<#macro something>
+ ...
+</#macro>
+
+<#-- Now you can't use <#macro upper>, but instead you can: -->
+<#assign upper = "com.example.UpperDirective"?new()></pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_36">Example 2</h2>
+
+
+ <p>We will create a directive that executes its nested content
+ again and again for the specified number of times (similarly to
+ <code class="inline-code">list</code> directive), optionally separating the the
+ output of the repetations with a <code class="inline-code"><hr></code>-s.
+ Let's call this directive "repeat". Example template:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign x = 1>
+
+<strong><@repeat count=4></strong>
+ Test ${x}
+ <#assign x++>
+<strong></@repeat></strong>
+
+<strong><@repeat count=3 hr=true></strong>
+ Test
+<strong></@repeat></strong>
+
+<strong><@repeat count=3; cnt></strong>
+ ${cnt}. Test
+<strong></@repeat></strong></pre></div>
+
+ <p>Output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> Test 1
+ Test 2
+ Test 3
+ Test 4
+
+ Test
+<hr> Test
+<hr> Test
+
+ 1. Test
+ 2. Test
+ 3. Test
+ </pre></div>
+
+ <p>The class:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">package com.example;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.Iterator;
+import java.util.Map;
+
+import freemarker.core.Environment;
+import freemarker.template.SimpleNumber;
+import freemarker.template.TemplateBooleanModel;
+import freemarker.template.TemplateDirectiveBody;
+import freemarker.template.TemplateDirectiveModel;
+import freemarker.template.TemplateException;
+import freemarker.template.TemplateModel;
+import freemarker.template.TemplateModelException;
+import freemarker.template.TemplateNumberModel;
+
+/**
+ * FreeMarker user-defined directive for repeating a section of a template,
+ * optionally with separating the output of the repetations with
+ * <tt>&lt;hr></tt>-s.
+ *
+ *
+ * <p><b>Directive info</b></p>
+ *
+ * <p>Parameters:
+ * <ul>
+ * <li><code>count</code>: The number of repetations. Required!
+ * Must be a non-negative number. If it is not a whole number then it will
+ * be rounded <em>down</em>.
+ * <li><code>hr</code>: Tells if a HTML "hr" element could be printed between
+ * repetations. Boolean. Optional, defaults to <code>false</code>.
+ * </ul>
+ *
+ * <p>Loop variables: One, optional. It gives the number of the current
+ * repetation, starting from 1.
+ *
+ * <p>Nested content: Yes
+ */
+public class RepeatDirective implements TemplateDirectiveModel {
+
+ private static final String PARAM_NAME_COUNT = "count";
+ private static final String PARAM_NAME_HR = "hr";
+
+ public void execute(Environment env,
+ Map params, TemplateModel[] loopVars,
+ TemplateDirectiveBody body)
+ throws TemplateException, IOException {
+
+ // ---------------------------------------------------------------------
+ // Processing the parameters:
+
+ int countParam = 0;
+ boolean countParamSet = false;
+ boolean hrParam = false;
+
+ Iterator paramIter = params.entrySet().iterator();
+ while (paramIter.hasNext()) {
+ Map.Entry ent = (Map.Entry) paramIter.next();
+
+ String paramName = (String) ent.getKey();
+ TemplateModel paramValue = (TemplateModel) ent.getValue();
+
+ if (paramName.equals(PARAM_NAME_COUNT)) {
+ if (!(paramValue instanceof TemplateNumberModel)) {
+ throw new TemplateModelException(
+ "The \"" + PARAM_NAME_HR + "\" parameter "
+ + "must be a number.");
+ }
+ countParam = ((TemplateNumberModel) paramValue)
+ .getAsNumber().intValue();
+ countParamSet = true;
+ if (countParam < 0) {
+ throw new TemplateModelException(
+ "The \"" + PARAM_NAME_HR + "\" parameter "
+ + "can't be negative.");
+ }
+ } else if (paramName.equals(PARAM_NAME_HR)) {
+ if (!(paramValue instanceof TemplateBooleanModel)) {
+ throw new TemplateModelException(
+ "The \"" + PARAM_NAME_HR + "\" parameter "
+ + "must be a boolean.");
+ }
+ hrParam = ((TemplateBooleanModel) paramValue)
+ .getAsBoolean();
+ } else {
+ throw new TemplateModelException(
+ "Unsupported parameter: " + paramName);
+ }
+ }
+ if (!countParamSet) {
+ throw new TemplateModelException(
+ "The required \"" + PARAM_NAME_COUNT + "\" paramter"
+ + "is missing.");
+ }
+
+ if (loopVars.length > 1) {
+ throw new TemplateModelException(
+ "At most one loop variable is allowed.");
+ }
+
+ // Yeah, it was long and boring...
+
+ // ---------------------------------------------------------------------
+ // Do the actual directive execution:
+
+ Writer out = env.getOut();
+ if (body != null) {
+ for (int i = 0; i < countParam; i++) {
+ // Prints a <hr> between all repetations if the "hr" parameter
+ // was true:
+ if (hrParam && i != 0) {
+ out.write("<hr>");
+ }
+
+ // Set the loop variable, if there is one:
+ if (loopVars.length > 0) {
+ loopVars[0] = new SimpleNumber(i + 1);
+ }
+
+ // Executes the nested body (same as <#nested> in FTL). In this
+ // case we don't provide a special writer as the parameter:
+ body.render(env.getOut());
+ }
+ }
+ }
+
+}</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_37">Notices</h2>
+
+
+ <p>It's important that a
+ <code class="inline-code">TemplateDirectiveModel</code> object usually should not
+ be stateful. The typical mistake is the storing of the state of the
+ directive call execution in the fields of the object. Think of
+ nested calls of the same directive, or directive objects used as
+ shared variables accessed by multiple threads concurrently.</p>
+
+ <p>Unfortunately, <code class="inline-code">TemplateDirectiveModel</code>-s
+ don't support passing parameters by position (rather than by name).
+ This is fixed starting from FreeMarker 2.4.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_datamodel_method.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_datamodel_node.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_datamodel_method.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_datamodel_method.html b/builds/2.3.26-nightly/pgui_datamodel_method.html
new file mode 100644
index 0000000..172aeed
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_datamodel_method.html
@@ -0,0 +1,90 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Methods - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Methods">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_datamodel_method.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_datamodel_method.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_datamodel.html"><span itemprop="name">The Data Model</span></a></li><li class="step-3" itempr
op="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_datamodel_method.html"><span itemprop="name">Methods</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","The Data Model","Methods"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_datamodel_parent.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_datamodel_directive.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_datamodel_method" itemprop="headline">Methods</h1>
+</div></div><p>Method variables exposed to a template implement the
+ <code class="inline-code">TemplateMethodModel</code> interface. This contains one
+ method: <code class="inline-code">TemplateModel exec(java.util.List
+ arguments)</code>. When you call a method with a <a href="dgui_template_exp.html#dgui_template_exp_methodcall">method call expression</a>,
+ then the <code class="inline-code">exec</code> method will be called. The arguments
+ parameter will contain the values of the FTL method call arguments.
+ The return value of <code class="inline-code">exec</code> gives the value of the FTL
+ method call expression.</p><p>The <code class="inline-code">TemplateMethodModelEx</code> interface extends
+ <code class="inline-code">TemplateMethodModel</code>. It does not add any new
+ methods. The fact that the object implements this
+ <em>marker</em> interface indicates to the FTL engine that
+ the arguments should be put to the <code class="inline-code">java.util.List</code>
+ directly as <code class="inline-code">TemplateModel</code>-s. Otherwise they will be
+ put to the list as <code class="inline-code">String</code>-s.</p><p>For obvious reasons there is no default implementation for these
+ interfaces.</p><p>Example: This is a method, which returns the index within the
+ second string of the first occurrence of the first string, or -1 if
+ the second string doesn't contains the first.</p>
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">public class IndexOfMethod implements TemplateMethodModel {
+
+ public TemplateModel exec(List args) throws TemplateModelException {
+ if (args.size() != 2) {
+ throw new TemplateModelException("Wrong arguments");
+ }
+ return new SimpleNumber(
+ ((String) args.get(1)).indexOf((String) args.get(0)));
+ }
+}</pre></div><p>If you put an instance of this, say, into the root:</p>
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">root.put("indexOf", new IndexOfMethod());</pre></div><p>then you can call it in the template:</p>
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign x = "something">
+${indexOf("met", x)}
+${indexOf("foo", x)}</pre></div><p>and then the output will be:</p>
+
+<div class="code-wrapper"><pre class="code-block code-output">2
+-1</pre></div><p>If you need to access the runtime FTL environment (read/write
+ variables, get the current locale, etc.), you can get it with
+ <code class="inline-code">Environment.getCurrentEnvironment()</code>.</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_datamodel_parent.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_datamodel_directive.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_datamodel_node.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_datamodel_node.html b/builds/2.3.26-nightly/pgui_datamodel_node.html
new file mode 100644
index 0000000..e00919a
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_datamodel_node.html
@@ -0,0 +1,123 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Node variables - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Node variables">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_datamodel_node.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_datamodel_node.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_datamodel.html"><span itemprop="name">The Data Model</span></a></li><li class="step-3" itempr
op="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_datamodel_node.html"><span itemprop="name">Node variables</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","The Data Model","Node variables"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_datamodel_directive.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_datamodel_objectWrapper.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_datamodel_node" itemprop="headline">Node variables</h1>
+</div></div><p>A node variable embodies a node in a tree structure. Node
+ variables were introduced to help <a href="xgui.html">the handling of
+ XML documents in the data-model</a>, but they can be used for the
+ modeling of other tree structures as well. For more information about
+ nodes from the point of view of the template language <a href="dgui_datamodel_types.html#dgui_datamodel_node">read this earlier section</a>.</p><p>A node variable has the following properties, provided by the
+ methods of <code class="inline-code">TemplateNodeModel</code> interface:</p><ul>
+ <li>
+ <p>Basic properties:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">TemplateSequenceModel
+ getChildNodes()</code>: A node has sequence of children
+ (except if the node is a leaf node, in which case the method
+ return an empty sequence or null). The child nodes should be
+ node variables as well.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">TemplateNodeModel getParentNode()</code>: A
+ node has exactly 1 parent node, except if the node is root
+ node of the tree, in which case the method returns
+ <code class="inline-code">null</code>.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Optional properties. If a property does not make sense in
+ the concrete use case, the corresponding method should return
+ <code class="inline-code">null</code>:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">String getNodeName()</code>: The node name
+ is the name of the macro, that handles the node when you use
+ <a href="ref_directive_visit.html#ref.directive.recurse"><code>recurse</code></a>
+ and <a href="ref_directive_visit.html#ref.directive.visit"><code>visit</code></a>
+ directives. Thus, if you want to use these directives with the
+ node, the node name is <em>required</em>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">String getNodeType()</code>: In the case of
+ XML: <code class="inline-code">"element"</code>, <code class="inline-code">"text"</code>,
+ <code class="inline-code">"comment"</code>, ...etc. This information, if
+ available, is used by the <code class="inline-code">recurse</code> and
+ <code class="inline-code">visit</code> directives to find the default
+ handler macro for a node. Also it can be useful for other
+ application specific purposes.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">String getNamespaceURI()</code>: The node
+ namespace (has nothing to do with FTL namespaces used for
+ libraries) this node belongs to. For example, in the case of
+ XML, this is the URI of the XML namespace the element or
+ attribute belongs to. This information, if available, is used
+ by the <code class="inline-code">recurse</code> and <code class="inline-code">visit</code>
+ directives to find the FTL namespaces that store the handler
+ macros.</p>
+ </li>
+ </ul>
+ </li>
+ </ul><p>On the FTL side, the direct utilization of node properties is
+ done with <a href="ref_builtins_node.html">node built-ins</a>, and
+ with the <code class="inline-code">visit</code> and <code class="inline-code">recurse</code>
+ macros.</p><p>In most use cases, variables that implement
+ <code class="inline-code">TemplateNodeModel</code>, implement other interfaces as
+ well, since node variable properties just provide the basic
+ infrastructure for navigating between nodes. For a concrete example,
+ see <a href="xgui.html">how FreeMarker deals with XML</a>.</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_datamodel_directive.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_datamodel_objectWrapper.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_datamodel_objectWrapper.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_datamodel_objectWrapper.html b/builds/2.3.26-nightly/pgui_datamodel_objectWrapper.html
new file mode 100644
index 0000000..ead2dd9
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_datamodel_objectWrapper.html
@@ -0,0 +1,412 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Object wrappers - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Object wrappers">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_datamodel_objectWrapper.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_datamodel_objectWrapper.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_datamodel.html"><span itemprop="name">The Data Model</span></a></li><li class="step-3" itempr
op="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_datamodel_objectWrapper.html"><span itemprop="name">Object wrappers</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","The Data Model","Object wrappers"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_datamodel_node.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_datamodel_objectWrapper" itemprop="headline">Object wrappers</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#pgui_datamodel_defaultObjectWrapper" data-menu-target="pgui_datamodel_defaultObjectWrapper">The default object wrapper</a></li><li><a class="page-menu-link" href="#pgui_datamodel_customObjectWrappingExample" data-menu-target="pgui_datamodel_customObjectWrappingExample">Custom object wrapping example</a></li></ul> </div><p>The object wrapper is an object that implements the
+ <code class="inline-code">freemarker.template.ObjectWrapper</code> interface. It's
+ purpose is to implement a mapping between Java objects (like
+ <code class="inline-code">String</code>-s, <code class="inline-code">Map</code>-s,
+ <code class="inline-code">List</code>-s, instances of your application specific
+ classes, etc.) and FTL's type system. With other words, it specifies
+ how the templates will see the Java objects of the data-model
+ (including the return value of Java methods called from the template).
+ The object wrapper is plugged into the
+ <code class="inline-code">Configuration</code> as its
+ <code class="inline-code">object_wrapper</code> setting (or with
+ <code class="inline-code">Configuration.setObjectWrapper</code>).</p><p>FTL's type system is technically represented by the
+ <code class="inline-code">TemplateModel</code> sub-interfaces that were introduced
+ earlier (<code class="inline-code">TemplateScalarModel</code>,
+ <code class="inline-code">TemplateHashMode</code>,
+ <code class="inline-code">TemplateSequenceModel</code>, etc). To map a Java object
+ to FTL's type system, object wrapper's <code class="inline-code">TemplateModel
+ wrap(java.lang.Object obj)</code> method will be called.</p><p>Sometimes FreeMarker needs to reverse this mapping, in which
+ case the <code class="inline-code">ObjectWrapper</code>'s <code class="inline-code">Object
+ unwrap(TemplateModel)</code> method is called (or some other
+ variation of that, but see the API documentation for such details).
+ This last operation is in
+ <code class="inline-code">ObjectWrapperAndUnwrapper</code>, the subinterface of
+ <code class="inline-code">ObjectWrapper</code>. Most real world object wrappers will
+ implement <code class="inline-code">ObjectWrapperAndUnwrapper</code>.</p><p>Here's how wrapping Java objects that contain other objects
+ (like a <code class="inline-code">Map</code>, a <code class="inline-code">List</code>, an array,
+ or an object with some JavaBean properties) usually work. Let's say,
+ an object wrapper wraps an <code class="inline-code">Object[]</code> array into some
+ implementation of the <code class="inline-code">TemplateSquenceModel</code>
+ interface. When FreeMarker needs an item from that FTL sequence, it
+ will call <code class="inline-code">TemplateSquenceModel.get(int index)</code>. The
+ return type of this method is <code class="inline-code">TemplateModel</code>, that
+ is, the <code class="inline-code">TemplateSquenceModel</code> implementation not
+ only have to get the <code class="inline-code">Object</code> from the given index of
+ the array, it's also responsible for wrapping that value before
+ returning it. To solve that, a typical
+ <code class="inline-code">TemplateSquenceModel</code> implementation will store the
+ <code class="inline-code">ObjectWrapper</code> that has cerated it, and then invoke
+ that <code class="inline-code">ObjectWrapper</code> to wrap the contained value. The
+ same logic stands for <code class="inline-code">TemplateHashModel</code> or for any
+ other <code class="inline-code">TemplateModel</code> that's a container for further
+ <code class="inline-code">TemplateModel</code>-s. Hence, usually, no mater how deep
+ the value hierarchy is, all values will be wrapped by the same single
+ <code class="inline-code">ObjectWrapper</code>. (To create
+ <code class="inline-code">TemplateModel</code> implementations that follow this
+ idiom, you can use the
+ <code class="inline-code">freemarker.template.WrappingTemplateModel</code> as base
+ class.)</p><p>The data-model itself (the root variable) is a
+ <code class="inline-code">TemplateHashModel</code>. The root object that you specify
+ to <code class="inline-code">Template.process</code> will be wrapped with the object
+ wrapper specified in the <code class="inline-code">object_wrapper</code>
+ configuration setting, which must yield a
+ <code class="inline-code">TemplateHashModel</code>. From then on, the wrapping of
+ the contained values follow the logic described earlier (i.e., the
+ container is responsible for wrapping its children).</p><p>Well behaving object wrappers bypass objects that already
+ implement <code class="inline-code">TemplateModel</code> as is. So if you put an
+ object into the data-model that already implements
+ <code class="inline-code">TemplateModel</code> (or you return as such object from a
+ Java method that's called from the template, etc.), then you can avoid
+ actual object wrapping. You do this usually when you are creating a
+ value specifically to be accessed from a template. Thus, you avoid
+ much of the object wrapping performance overhead, also you can control
+ exactly what will the template see (not depending on the mapping
+ strategy of the current object wrapper). A frequent application of
+ this trick is using a
+ <code class="inline-code">freemarker.template.SimpleHash</code> as the data-model
+ root (rather than a <code class="inline-code">Map</code>), by filling it with
+ <code class="inline-code">SimpleHash</code>'s <code class="inline-code">put</code> method (that's
+ important, so it won't have to copy an existing <code class="inline-code">Map</code>
+ that you have already filled). This speeds up top-level data-model
+ variable access.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="pgui_datamodel_defaultObjectWrapper">The default object wrapper</h2>
+
+
+
+
+
+
+ <p>The default of the <code class="inline-code">object_wrapper</code>
+ <code class="inline-code">Configuration</code> setting is a
+ <code class="inline-code">freemarker.template.DefaultObjectWrapper</code>
+ singleton. Unless you have very special requirements, it's
+ recommended to use this object wrapper, or an instance of a
+ <code class="inline-code">DefaultObjectWrapper</code> subclass of yours.</p>
+
+ <p>It recognizes most basic Java types, like
+ <code class="inline-code">String</code>, <code class="inline-code">Number</code>,
+ <code class="inline-code">Boolean</code>, <code class="inline-code">Date</code>,
+ <code class="inline-code">List</code> (and in general all kind of
+ <code class="inline-code">java.util.Collection</code>-s), arrays,
+ <code class="inline-code">Map</code>, etc., and wraps them into the naturally
+ matching <code class="inline-code">TemplateModel</code> interfaces. It will also
+ wrap W3C DOM nodes with
+ <code class="inline-code">freemarker.ext.dom.NodeModel</code>, so you can
+ conveniently traverse XML as <a href="xgui.html">described in its
+ own chapter</a>). For Jython objects, it will delegate to
+ <code class="inline-code">freemarker.ext.jython.JythonWrapper</code>. For all
+ other objects, it will invoke <code class="inline-code">BeansWrapper.wrap</code>
+ (the super class's method), which will expose the JavaBean
+ properties of the objects as hash items (like
+ <code class="inline-code">myObj.foo</code> in FTL will call
+ <code class="inline-code">getFoo()</code> behind the scenes), and will also expose
+ the public methods (JavaBean actions) of the object (like
+ <code class="inline-code">myObj.bar(1, 2)</code> in FTL will call a method). (For
+ more information about BeansWrapper, <a href="pgui_misc_beanwrapper.html">see its own section</a>.)</p>
+
+ <p>Some further details that's worth mentioning about
+ <code class="inline-code">DefaultObjectWrapper</code>:</p>
+
+ <ul>
+ <li>
+ <p>You shouldn't use its constructor usually, instead create
+ it using a <code class="inline-code">DefaultObjectWrapperBuilder</code>. This
+ allows FreeMarker to use singletons.</p>
+ </li>
+
+ <li>
+ <p><a name="topic.defaultObjectWrapperIcI"></a><code class="inline-code">DefaultObjectWrapper</code> has an
+ <code class="inline-code">incompatibleImprovements</code> property, that's
+ highly recommended to set to 2.3.22 or higher (see the <a href="http://freemarker.org/docs/api/freemarker/template/DefaultObjectWrapper.html#DefaultObjectWrapper-freemarker.template.Version-">API
+ documentation</a> for the effects). How to set it:</p>
+
+ <ul>
+ <li>
+ <p>If you have set the
+ <code class="inline-code">incompatible_improvements</code> setting
+ <em>of the <code class="inline-code">Configuration</code></em>
+ to 2.3.22 or higher, and you didn't set the
+ <code class="inline-code">object_wrapper</code> setting (so it had
+ remained on its default value), then you have to do nothing,
+ as it already uses a <code class="inline-code">DefaultObjectWrapper</code>
+ singleton with the equivalent
+ <code class="inline-code">incompatibleImprovements</code> property
+ value.</p>
+ </li>
+
+ <li>
+ <p><a name="topic.setDefaultObjectWrapperIcIIndividually"></a>Otherwise you have to set the
+ <code class="inline-code">incompatibleImprovements</code> independently of
+ the <code class="inline-code">Configuration</code>. Depending on how you
+ create/set the <code class="inline-code">ObjectWrapper</code>, it can be
+ done like this:</p>
+
+ <ul>
+ <li>
+ <p>If you are using the builder API:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">... = new DefaultObjectWrapperBuilder(Configuration.VERSION_2_3_25).build()</pre></div>
+ </li>
+
+ <li>
+ <p>Or, if you are using the constructor:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">... = new DefaultObjectWrapper(Configuration.VERSION_2_3_25)</pre></div>
+ </li>
+
+ <li>
+ <p>Or, if you are using the
+ <code class="inline-code">object_wrapper</code> property
+ (<code class="inline-code">*.properties</code> file or
+ <code class="inline-code">java.util.Properties</code> object):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">object_wrapper=DefaultObjectWrapper(2.3.25)</pre></div>
+ </li>
+
+ <li>
+ <p>Or, if you are configuring the
+ <code class="inline-code">object_wrapper</code> through a
+ <code class="inline-code">FreemarkerServlet</code> with an
+ <code class="inline-code">init-param</code> in
+ <code class="inline-code">web.xml</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified"><init-param>
+ <param-name>object_wrapper</param-name>
+ <param-value>DefaultObjectWrapper(2.3.25)</param-value>
+</init-param></pre></div>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>In new or properly test-covered projects it's also
+ recommended to set the
+ <code class="inline-code">forceLegacyNonListCollections</code> property to
+ <code class="inline-code">false</code>. If you are using
+ <code class="inline-code">.properties</code> or
+ <code class="inline-code">FreemarkerServlet</code> init-params or such, that
+ will look like <code class="inline-code">DefaultObjectWrapper(2.3.22,
+ forceLegacyNonListCollections=false)</code>, while with the
+ Java API you call
+ <code class="inline-code">setForceLegacyNonListCollections(false)</code> on
+ the <code class="inline-code">DefaultObjectWrapperBuilder</code> object before
+ calling <code class="inline-code">build()</code>.</p>
+ </li>
+
+ <li>
+ <p>The most common way of customizing
+ <code class="inline-code">DefaultObjectWrapper</code> is overriding its
+ <code class="inline-code">handleUnknownType</code> method.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="pgui_datamodel_customObjectWrappingExample">Custom object wrapping example</h2>
+
+
+
+
+
+
+
+
+ <p>Let's say you have an application-specific class like
+ this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">package com.example.myapp;
+
+public class Tupple<E1, E2> {
+ public Tupple(E1 e1, E2 e2) { ... }
+ public E1 getE1() { ... }
+ public E2 getE2() { ... }
+}</pre></div>
+
+ <p>You want templates to see this as a sequence of length 2, so
+ that you can do things like <code class="inline-code">someTupple[1]</code>,
+ <code class="inline-code"><#list someTupple
+ <em class="code-color">...</em>></code>, or
+ <code class="inline-code">someTupple?size</code>. For that you need to create a
+ <code class="inline-code">TemplateSequenceModel</code> implementation that adapts
+ a <code class="inline-code">Tupple</code> to the
+ <code class="inline-code">TempateSequenceMoldel</code> interface:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">package com.example.myapp.freemarker;
+
+...
+
+public class TuppleAdapter extends WrappingTemplateModel implements TemplateSequenceModel,
+ AdapterTemplateModel {
+
+ private final Tupple<?, ?> tupple;
+
+ public TuppleAdapter(Tupple<?, ?> tupple, ObjectWrapper ow) {
+ super(ow); // coming from WrappingTemplateModel
+ this.tupple = tupple;
+ }
+
+ @Override // coming from TemplateSequenceModel
+ public int size() throws TemplateModelException {
+ return 2;
+ }
+
+ @Override // coming from TemplateSequenceModel
+ public TemplateModel get(int index) throws TemplateModelException {
+ switch (index) {
+ case 0: return wrap(tupple.getE1());
+ case 1: return wrap(tupple.getE2());
+ default: return null;
+ }
+ }
+
+ @Override // coming from AdapterTemplateModel
+ public Object getAdaptedObject(Class hint) {
+ return tupple;
+ }
+
+}</pre></div>
+
+ <p>Regarding the classes and interfaces:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">TemplateSequenceModel</code>: This is why the
+ template will see this as a sequence</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">WrappingTemplateModel</code>: Just a
+ convenience class, used for <code class="inline-code">TemplateModel</code>-s
+ that do object wrapping themselves. That's normally only needed
+ for objects that contain other objects. See the
+ <code class="inline-code">wrap(<em class="code-color">...</em>)</code> calls
+ above.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">AdapterTemplateModel</code>: Indicates that
+ this template model adapts an already existing object to a
+ <code class="inline-code">TemplateModel</code> interface, thus unwrapping
+ should give back that original object.</p>
+ </li>
+ </ul>
+
+ <p>Lastly, we tell FreeMarker to wrap <code class="inline-code">Tupple</code>-s
+ with the <code class="inline-code">TuppleAdapter</code> (alternatively, you could
+ wrap them manually before passing them to FreeMarker). For that,
+ first we create a custom object wrapper:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">package com.example.myapp.freemarker;
+
+...
+
+public class MyAppObjectWrapper extends DefaultObjectWrapper {
+
+ public MyAppObjectWrapper(Version incompatibleImprovements) {
+ super(incompatibleImprovements);
+ }
+
+ @Override
+ protected TemplateModel handleUnknownType(final Object obj) throws TemplateModelException {
+ if (obj instanceof Tupple) {
+ return new TuppleAdapter((Tupple<?, ?>) obj, this);
+ }
+
+ return super.handleUnknownType(obj);
+ }
+
+}</pre></div>
+
+ <p>and then where you configure FreeMarker (<a href="pgui_config.html">about configuring, see here...</a>) we plug
+ our object wrapper in:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">// Where you initialize the cfg *singleton* (happens just once in the application life-cycle):
+cfg = new Configuration(Configuration.VERSION_2_3_25);
+...
+cfg.setObjectWrapper(new MyAppObjectWrapper(cfg.getIncompatibleImprovements()));</pre></div>
+
+ <p>or if you are configuring FreeMarker with
+ <code class="inline-code">java.util.Properties</code> instead (and let's say it's
+ also a <code class="inline-code">.properties</code> file):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">object_wrapper=com.example.myapp.freemarker.MyAppObjectWrapper(2.3.25)</pre></div>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_datamodel_node.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_datamodel_parent.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_datamodel_parent.html b/builds/2.3.26-nightly/pgui_datamodel_parent.html
new file mode 100644
index 0000000..6c91a9b
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_datamodel_parent.html
@@ -0,0 +1,129 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Containers - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Containers">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_datamodel_parent.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_datamodel_parent.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_datamodel.html"><span itemprop="name">The Data Model</span></a></li><li class="step-3" itempr
op="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_datamodel_parent.html"><span itemprop="name">Containers</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","The Data Model","Containers"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_datamodel_scalar.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_datamodel_method.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_datamodel_parent" itemprop="headline">Containers</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_32" data-menu-target="autoid_32">Hashes</a></li><li><a class="page-menu-link" href="#autoid_33" data-menu-target="autoid_33">Sequences</a></li><li><a class="page-menu-link" href="#autoid_34" data-menu-target="autoid_34">Collections</a></li></ul> </div><p>These are hashes, sequences, and collections.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_32">Hashes</h2>
+
+
+
+
+ <p>Hashes are java objects that implement
+ <code class="inline-code">TemplateHashModel</code> interface.
+ <code class="inline-code">TemplateHashModel</code> contains two methods:
+ <code class="inline-code">TemplateModel get(String key)</code>, which returns the
+ subvariable of the given name, and <code class="inline-code">boolean
+ isEmpty()</code>, which indicates if the hash has zero
+ subvariable or not. The <code class="inline-code">get</code> method returns null
+ if no subvariable with the given name exists.</p>
+
+ <p>The <code class="inline-code">TemplateHashModelEx</code> interface extends
+ <code class="inline-code">TemplateHashModel</code>. It adds methods by which <a href="ref_builtins_hash.html#ref_builtin_values">values</a> and <a href="ref_builtins_hash.html#ref_builtin_keys">keys</a> built-ins can enumerate the
+ sub variables of the hash.</p>
+
+ <p>The commonly used implementation is
+ <code class="inline-code">SimpleHash</code>, which implements
+ <code class="inline-code">TemplateHashModelEx</code>. Internally it uses a
+ <code class="inline-code">java.util.Hash</code> to store the sub variables.
+ <code class="inline-code">SimpleHash</code> has methods by which you can add and
+ remove subvariable. These methods should be used to initialize the
+ variable directly after its creation.</p>
+
+ <p>Containers are immutable within FTL. That is, you can't add,
+ replace or remove the sub variables they contain.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_33">Sequences</h2>
+
+
+
+
+ <p>Sequences are java objects that implement
+ <code class="inline-code">TemplateSequenceModel</code>. It contains two methods:
+ <code class="inline-code">TemplateModel get(int index)</code> and <code class="inline-code">int
+ size()</code>.</p>
+
+ <p>The commonly used implementation is
+ <code class="inline-code">SimpleSequence</code>. It uses internally a
+ <code class="inline-code">java.util.List</code> to store its sub variables.
+ <code class="inline-code">SimpleSequence</code> has methods by which you can add
+ sub variables. These methods should be used to populate the sequence
+ directly after its creation.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_34">Collections</h2>
+
+
+
+
+ <p>Collections are java objects that implement the
+ <code class="inline-code">TemplateCollectionModel</code> interface. That interface
+ has one method: <code class="inline-code">TemplateModelIterator iterator()</code>.
+ The <code class="inline-code">TemplateModelIterator</code> interface is similar to
+ <code class="inline-code">java.util.Iterator</code>, but it returns
+ <code class="inline-code">TemplateModels</code> instead of
+ <code class="inline-code">Object</code>-s, and it can throw
+ <code class="inline-code">TemplateModelException</code>s.</p>
+
+ <p>The commonly used implementation is
+ <code class="inline-code">SimpleCollection</code>.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_datamodel_scalar.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_datamodel_method.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[48/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/app.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/app.html b/builds/2.3.26-nightly/app.html
new file mode 100644
index 0000000..7529506
--- /dev/null
+++ b/builds/2.3.26-nightly/app.html
@@ -0,0 +1,54 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-part">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Appendixes - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Appendixes">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/app.html">
+<link rel="canonical" href="http://freemarker.org/docs/app.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_ch
eatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="xgui_declarative_details.html"><span>Previous</span></a><a class="paging-arrow next" href="app_faq.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-part" id="app" itemprop="headline">Appendixes</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Section Contents</div>
+<ul><li><a class="page-menu-link" href="app_faq.html" data-menu-target="app_faq">FAQ</a></li><li><a class="page-menu-link" href="app_versions.html" data-menu-target="app_versions">Version history</a><ul><li><a class="page-menu-link" href="versions_2_3_26.html" data-menu-target="versions_2_3_26">2.3.26 (incubating at Apache)</a></li><li><a class="page-menu-link" href="versions_2_3_25.html" data-menu-target="versions_2_3_25">2.3.25 (incubating at Apache)</a></li><li><a class="page-menu-link" href="versions_2_3_24.html" data-menu-target="versions_2_3_24">2.3.24 (incubating at Apache)</a></li><li><a class="page-menu-link" href="versions_2_3_23.html" data-menu-target="versions_2_3_23">2.3.23</a></li><li><a class="page-menu-link" href="versions_2_3_22.html" data-menu-target="versions_2_3_22">2.3.22</a></li><li><a class="page-menu-link" href="versions_2_3_21.html" data-menu-target="versions_2_3_21">2.3.21</a></li><li><a class="page-menu-link" href="versions_2_3_20.html" data-menu-target="v
ersions_2_3_20">2.3.20</a></li><li><a class="page-menu-link" href="versions_2_3_19.html" data-menu-target="versions_2_3_19">2.3.19</a></li><li><a class="page-menu-link" href="versions_2_3_18.html" data-menu-target="versions_2_3_18">2.3.18</a></li><li><a class="page-menu-link" href="versions_2_3_17.html" data-menu-target="versions_2_3_17">2.3.17</a></li><li><a class="page-menu-link" href="versions_2_3_16.html" data-menu-target="versions_2_3_16">2.3.16</a></li><li><a class="page-menu-link" href="versions_2_3_15.html" data-menu-target="versions_2_3_15">2.3.15</a></li><li><a class="page-menu-link" href="versions_2_3_14.html" data-menu-target="versions_2_3_14">2.3.14</a></li><li><a class="page-menu-link" href="versions_2_3_13.html" data-menu-target="versions_2_3_13">2.3.13</a></li><li><a class="page-menu-link" href="versions_2_3_12.html" data-menu-target="versions_2_3_12">2.3.12</a></li><li><a class="page-menu-link" href="versions_2_3_11.html" data-menu-target="versions_2_3_11">2.3.11</a
></li><li><a class="page-menu-link" href="versions_2_3_10.html" data-menu-target="versions_2_3_10">2.3.10</a></li><li><a class="page-menu-link" href="versions_2_3_9.html" data-menu-target="versions_2_3_9">2.3.9</a></li><li><a class="page-menu-link" href="versions_2_3_8.html" data-menu-target="versions_2_3_8">2.3.8</a></li><li><a class="page-menu-link" href="versions_2_3_7.html" data-menu-target="versions_2_3_7">2.3.7</a></li><li><a class="page-menu-link" href="versions_2_3_7rc1.html" data-menu-target="versions_2_3_7rc1">2.3.7 RC1</a></li><li><a class="page-menu-link" href="versions_2_3_6.html" data-menu-target="versions_2_3_6">2.3.6</a></li><li><a class="page-menu-link" href="versions_2_3_5.html" data-menu-target="versions_2_3_5">2.3.5</a></li><li><a class="page-menu-link" href="versions_2_3_4.html" data-menu-target="versions_2_3_4">2.3.4</a></li><li><a class="page-menu-link" href="versions_2_3_3.html" data-menu-target="versions_2_3_3">2.3.3</a></li><li><a class="page-menu-link" hre
f="versions_2_3_2.html" data-menu-target="versions_2_3_2">2.3.2</a></li><li><a class="page-menu-link" href="versions_2_3_1.html" data-menu-target="versions_2_3_1">2.3.1</a></li><li><a class="page-menu-link" href="versions_2_3.html" data-menu-target="versions_2_3">2.3</a></li><li><a class="page-menu-link" href="versions_2_2_8.html" data-menu-target="versions_2_2_8">2.2.8</a></li><li><a class="page-menu-link" href="versions_2_2_7.html" data-menu-target="versions_2_2_7">2.2.7</a></li><li><a class="page-menu-link" href="versions_2_2_6.html" data-menu-target="versions_2_2_6">2.2.6</a></li><li><a class="page-menu-link" href="versions_2_2_5.html" data-menu-target="versions_2_2_5">2.2.5</a></li><li><a class="page-menu-link" href="versions_2_2_4.html" data-menu-target="versions_2_2_4">2.2.4</a></li><li><a class="page-menu-link" href="versions_2_2_3.html" data-menu-target="versions_2_2_3">2.2.3</a></li><li><a class="page-menu-link" href="versions_2_2_2.html" data-menu-target="versions_2_2_2">
2.2.2</a></li><li><a class="page-menu-link" href="versions_2_2_1.html" data-menu-target="versions_2_2_1">2.2.1</a></li><li><a class="page-menu-link" href="versions_2_2.html" data-menu-target="versions_2_2">2.2</a></li><li><a class="page-menu-link" href="versions_2_1_5.html" data-menu-target="versions_2_1_5">2.1.5</a></li><li><a class="page-menu-link" href="versions_2_1_4.html" data-menu-target="versions_2_1_4">2.1.4</a></li><li><a class="page-menu-link" href="versions_2_1_3.html" data-menu-target="versions_2_1_3">2.1.3</a></li><li><a class="page-menu-link" href="versions_2_1_2.html" data-menu-target="versions_2_1_2">2.1.2</a></li><li><a class="page-menu-link" href="versions_2_1_1.html" data-menu-target="versions_2_1_1">2.1.1</a></li><li><a class="page-menu-link" href="versions_2_1.html" data-menu-target="versions_2_1">2.1</a></li><li><a class="page-menu-link" href="versions_2_01.html" data-menu-target="versions_2_01">2.01</a></li><li><a class="page-menu-link" href="versions_2_0.html
" data-menu-target="versions_2_0">2.0</a></li><li><a class="page-menu-link" href="versions_2_0RC3.html" data-menu-target="versions_2_0RC3">2.0 RC3</a></li><li><a class="page-menu-link" href="versions_2_0RC2.html" data-menu-target="versions_2_0RC2">2.0 RC2</a></li><li><a class="page-menu-link" href="versions_2_0RC1.html" data-menu-target="versions_2_0RC1">2.0 RC1</a></li></ul></li><li><a class="page-menu-link" href="app_install.html" data-menu-target="app_install">Installing FreeMarker</a></li><li><a class="page-menu-link" href="app_legal.html" data-menu-target="app_legal">Legal</a><ul><li><a class="page-menu-link" href="app_license.html" data-menu-target="app_license">License</a></li><li><a class="page-menu-link" href="app_eccn.html" data-menu-target="app_eccn">Export Control</a></li></ul></li></ul> </div><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="xgui_declarative_details.html"><span>Previous</span></a><a class="paging-arrow
next" href="app_faq.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/app_eccn.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/app_eccn.html b/builds/2.3.26-nightly/app_eccn.html
new file mode 100644
index 0000000..da45673
--- /dev/null
+++ b/builds/2.3.26-nightly/app_eccn.html
@@ -0,0 +1,56 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Export Control - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Export Control">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/app_eccn.html">
+<link rel="canonical" href="http://freemarker.org/docs/app_eccn.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_legal.html"><span itemprop="name">Legal</span></a></li><li class="step-3" itemprop="itemListElement" itemsc
ope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_eccn.html"><span itemprop="name">Export Control</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Legal","Export Control"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="app_license.html"><span>Previous</span></a><a class="paging-arrow next" href="gloss.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="app_eccn" itemprop="headline">Export Control</h1>
+</div></div><p>The FreeMarker source code doesn't include cryptography.
+ Furthermore its binary (downloadable) forms don't include any
+ cryptography software. Hence, FreeMarker has no Export Control
+ Classification Number (ECCN). Where an ECCN should be filled, the
+ label "not subject to EAR" could be used.</p><p>FreeMarker itself doesn't add any exporting limitations.</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="app_license.html"><span>Previous</span></a><a class="paging-arrow next" href="gloss.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[32/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_datamodel_scalar.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_datamodel_scalar.html b/builds/2.3.26-nightly/pgui_datamodel_scalar.html
new file mode 100644
index 0000000..88fcc5d
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_datamodel_scalar.html
@@ -0,0 +1,154 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Scalars - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Scalars">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_datamodel_scalar.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_datamodel_scalar.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_datamodel.html"><span itemprop="name">The Data Model</span></a></li><li class="step-3" itempr
op="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_datamodel_scalar.html"><span itemprop="name">Scalars</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","The Data Model","Scalars"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_datamodel_basics.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_datamodel_parent.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_datamodel_scalar" itemprop="headline">Scalars</h1>
+</div></div><p>There are 4 scalar types:</p><ul>
+ <li>
+ Boolean
+ </li>
+
+ <li>
+ Number
+ </li>
+
+ <li>
+ String
+ </li>
+
+ <li>
+ Date-like (subtypes: date (no time part), time or
+ date-time)
+ </li>
+ </ul><p>For each scalar type is a
+ <code class="inline-code">Template<em class="code-color">Type</em>Model</code>
+ interface, where <code class="inline-code"><em class="code-color">Type</em></code> is
+ the name of the type. These interfaces define only one method:
+ <code class="inline-code"><em class="code-color">type</em>
+ getAs<em class="code-color">Type</em>();</code>. This returns the
+ value of the variable with the Java type (<code class="inline-code">boolean</code>,
+ <code class="inline-code">Number</code>, <code class="inline-code">String</code> and
+ <code class="inline-code">Date</code> respectively).</p> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>For historical reasons the interface for string scalars is
+ called <code class="inline-code">TemplateScalarModel</code>, not
+ <code class="inline-code">TemplateStringModel</code>. (It's because in early
+ FreeMarker strings were the only kind of scalars.)</p>
+ </div>
+<p>A trivial implementation of these interfaces are available in
+ <code class="inline-code">freemarker.template</code> package with
+ <code class="inline-code">Simple<em class="code-color">Type</em></code> class name.
+ However, there is no <code class="inline-code">SimpleBooleanModel</code>; to
+ represent the boolean values you can use the
+ <code class="inline-code">TemplateBooleanModel.TRUE</code> and
+ <code class="inline-code">TemplateBooleanModel.FALSE</code> singletons.</p> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>For historical reasons the class for string scalars is called
+ <code class="inline-code">SimpleScalar</code>, not
+ <code class="inline-code">SimpleString</code>.</p>
+ </div>
+<p>Scalars are immutable within FTL. When you set the value of a
+ variable in a template, then you replace the
+ <code class="inline-code">Template<em class="code-color">Type</em>Model</code>
+ instance with another instance, and don't change the value stored in
+ the original instance.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_31">Difficulties with the "date-like" types</h2>
+
+
+
+
+
+
+ <p>There is a complication around date-like types, because Java
+ API usually does not differentiate
+ <code class="inline-code">java.util.Date</code>-s that store only the date part
+ (April 4, 2003), only the time part (10:19:18 PM), or both (April 4,
+ 2003 10:19:18 PM). To display the value as text correctly (or to do
+ certain other operations), FreeMarker must know what parts of the
+ <code class="inline-code">java.util.Date</code> stores meaningful information, and
+ what parts are unused (usually 0-ed out). Unfortunately, this
+ information is usually only available when the value comes from a
+ database, because most databases have separate date, time and
+ date-time (aka. timestap) types, and <code class="inline-code">java.sql</code> has
+ 3 corresponding <code class="inline-code">java.util.Date</code> subclasses for
+ them.</p>
+
+ <p><code class="inline-code">TemplateDateModel</code> interface has two
+ methods: <code class="inline-code">java.util.Date getAsDate()</code> and
+ <code class="inline-code">int getDateType()</code>. A typical implementation of
+ this interface, stores a <code class="inline-code">java.util.Date</code> object,
+ plus an integer that tells the subtype. The value of this integer
+ must be a constant from the <code class="inline-code">TemplateDateModel</code>
+ interface: <code class="inline-code">DATE</code>, <code class="inline-code">TIME</code>,
+ <code class="inline-code">DATETIME</code> and <code class="inline-code">UNKNOWN</code>.</p>
+
+ <p>About <code class="inline-code">UNKNOWN</code>: <code class="inline-code">java.lang</code>
+ and <code class="inline-code">java.util</code> classes are usually converted
+ automatically into <code class="inline-code">TemplateModel</code> implementations
+ be the <code class="inline-code">ObjectWrapper</code> (see object wrapping
+ earlier). If the object wrapper has to wrap a
+ <code class="inline-code">java.util.Date</code>, that is not an instance of a
+ <code class="inline-code">java.sql</code> date class, it can't decide what the
+ subtype is, so it uses <code class="inline-code">UNKNOWN</code>. Later, if the
+ template has to use this variable, and the subtype is needed for the
+ operation, it will stop with error. To prevent this, for the
+ problematic variables the template author must specify the subtype
+ explicitly using the <a href="ref_builtins_date.html#ref_builtin_date_datetype"><code>date</code>,
+ <code>time</code> or <code>datetime</code>
+ built-ins</a> (like <code class="inline-code">lastUpdated?datetime</code>).
+ Note that if you use <code class="inline-code">string</code> built-in with format
+ parameter, as <code class="inline-code">foo?string["MM/dd/yyyy"]</code>, then
+ FreeMarker doesn't need to know the subtype.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_datamodel_basics.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_datamodel_parent.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_misc.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_misc.html b/builds/2.3.26-nightly/pgui_misc.html
new file mode 100644
index 0000000..ba79263
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_misc.html
@@ -0,0 +1,55 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-chapter">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Miscellaneous - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Miscellaneous">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_misc.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_misc.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_misc.html"><span itemprop="name">Miscellaneous</span></a></li></ul><div class="bookmarks" tit
le="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","Miscellaneous"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_config_incompatible_improvements.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_misc_var.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-chapter" id="pgui_misc" itemprop="headline">Miscellaneous</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Section Contents</div>
+<ul><li><a class="page-menu-link" href="pgui_misc_var.html" data-menu-target="pgui_misc_var">Variables, scopes</a></li><li><a class="page-menu-link" href="pgui_misc_charset.html" data-menu-target="pgui_misc_charset">Charset issues</a></li><li><a class="page-menu-link" href="pgui_misc_multithreading.html" data-menu-target="pgui_misc_multithreading">Multithreading</a></li><li><a class="page-menu-link" href="pgui_misc_beanwrapper.html" data-menu-target="pgui_misc_beanwrapper">Bean wrapper</a></li><li><a class="page-menu-link" href="pgui_misc_logging.html" data-menu-target="pgui_misc_logging">Logging</a></li><li><a class="page-menu-link" href="pgui_misc_servlet.html" data-menu-target="pgui_misc_servlet">Using FreeMarker with servlets</a></li><li><a class="page-menu-link" href="pgui_misc_secureenv.html" data-menu-target="pgui_misc_secureenv">Configuring security policy for FreeMarker</a></li><li><a class="page-menu-link" href="pgui_misc_xml_legacy.html" data-menu-target="pgui_misc_xml_le
gacy">Legacy XML wrapper implementation</a></li><li><a class="page-menu-link" href="pgui_misc_ant.html" data-menu-target="pgui_misc_ant">Using FreeMarker with Ant</a></li><li><a class="page-menu-link" href="pgui_misc_jythonwrapper.html" data-menu-target="pgui_misc_jythonwrapper">Jython wrapper</a></li></ul> </div><p>This is just an introductory guide. See the <a href="api/index.html">FreeMarker Java API documentation</a> for the
+ details.</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_config_incompatible_improvements.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_misc_var.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_misc_ant.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_misc_ant.html b/builds/2.3.26-nightly/pgui_misc_ant.html
new file mode 100644
index 0000000..3aac258
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_misc_ant.html
@@ -0,0 +1,111 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Using FreeMarker with Ant - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Using FreeMarker with Ant">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_misc_ant.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_misc_ant.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_misc.html"><span itemprop="name">Miscellaneous</span></a></li><li class="step-3" itemprop="it
emListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_misc_ant.html"><span itemprop="name">Using FreeMarker with Ant</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","Miscellaneous","Using FreeMarker with Ant"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_misc_xml_legacy.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_misc_jythonwrapper.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_misc_ant" itemprop="headline">Using FreeMarker with Ant</h1>
+</div></div><p>There are two "FreeMarker Ant tasks" that we know
+ about:</p><ul>
+ <li>
+ <p><code class="inline-code">FreemarkerXmlTask</code>: It comes with the
+ FreeMarker distribution, packed into the
+ <code class="inline-code">freemarker.jar</code>. This is a lightweight,
+ easy-to-use Ant task for transforming XML documents with
+ FreeMarker templates. Its approach is that the source files (input
+ files) are XML files, which are rendered to corresponding output
+ files, by a single template. That is, for each XML file, the
+ template will be executed (with the XML document in the
+ data-model), and the template output will be written into a file
+ of similar name than the name of the XML file. Thus, the template
+ file plays a similar role as an XSLT style sheet, but it is FTL,
+ not XSLT.</p>
+ </li>
+
+ <li>
+ <p> FMPP: It's a more heavyweight, less XML centric,
+ third party Ant task (and standalone command-line tool). Its
+ primary approach is that the source files (input files) are
+ template files that generate the corresponding output files
+ themselves, but it also supports the approach of
+ <code class="inline-code">FreemarkerXmlTask</code> for the source files that are
+ XML-s. Also, it has extra features over the
+ <code class="inline-code">FreemarkerXmlTask</code>. What's its drawback then? As
+ it is more complex and more generalized, it's harder to learn and
+ use it.</p>
+ </li>
+ </ul><p>This section introduces the
+ <code class="inline-code">FreemarkerXmlTask</code>. For more information about FMPP
+ visit its homepage: <a href="http://fmpp.sourceforge.net/">http://fmpp.sourceforge.net/</a>.</p><p>In order to use the <code class="inline-code">FreemarkerXmlTask</code>, you
+ must first define the
+ <code class="inline-code">freemarker.ext.ant.FreemarkerXmlTask</code> inside your
+ Ant buildfile, then call the task. Suppose you want to transform
+ several XML documents to HTML using the hypothetical "xml2html.ftl"
+ template, with XML documents located in the directory "xml" and HTML
+ documents generated into directory "html". You would write something
+ like:</p>
+
+<div class="code-wrapper"><pre class="code-block code-unspecified"><taskdef name="freemarker" classname="freemarker.ext.ant.FreemarkerXmlTask">
+ <classpath>
+ <pathelement location="freemarker.jar" />
+ </classpath>
+</taskdef>
+<mkdir dir="html" />
+<freemarker basedir="xml" destdir="html" includes="**/*.xml" template="xml2html.ftl" /></pre></div><p>The task would invoke the template for every XML document. Every
+ document would be parsed into a DOM tree, then wrapped as a FreeMarker
+ node variable. When template processing begins, the special variable,
+ <code class="inline-code">.node</code>, is set to the root node of the XML
+ document.</p><p>Note that if you are using the legacy (FreeMarker 2.2.x and
+ earlier) XML adapter implementation, that still works, and the root of
+ the XML tree is placed in the data-model as the variable
+ <code class="inline-code">document</code>. That contains an instance of the legacy
+ <code class="inline-code">freemarker.ext.xml.NodeListModel</code> class.</p><p>Note that all properties defined by the build file would be made
+ available as a hash model named "properties". Several other models are
+ made available; for detailed description of what variables are made
+ available to templates as well as what other attributes can the task
+ accept, see the JavaDoc for
+ <code class="inline-code">freemarker.ext.ant.FreemarkerXmlTask</code>.</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_misc_xml_legacy.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_misc_jythonwrapper.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_misc_beanwrapper.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_misc_beanwrapper.html b/builds/2.3.26-nightly/pgui_misc_beanwrapper.html
new file mode 100644
index 0000000..5b2032c
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_misc_beanwrapper.html
@@ -0,0 +1,666 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Bean wrapper - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Bean wrapper">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_misc_beanwrapper.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_misc_beanwrapper.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_misc.html"><span itemprop="name">Miscellaneous</span></a></li><li class="step-3" itemprop="it
emListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_misc_beanwrapper.html"><span itemprop="name">Bean wrapper</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","Miscellaneous","Bean wrapper"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_misc_multithreading.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_misc_logging.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_misc_beanwrapper" itemprop="headline">Bean wrapper</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#beanswrapper_hash" data-menu-target="beanswrapper_hash">TemplateHashModel functionality</a></li><li><a class="page-menu-link" href="#autoid_54" data-menu-target="autoid_54">A word on security</a></li><li><a class="page-menu-link" href="#autoid_55" data-menu-target="autoid_55">TemplateScalarModel functionality</a></li><li><a class="page-menu-link" href="#autoid_56" data-menu-target="autoid_56">TemplateNumberModel functionality</a></li><li><a class="page-menu-link" href="#autoid_57" data-menu-target="autoid_57">TemplateCollectionModel functionality</a></li><li><a class="page-menu-link" href="#autoid_58" data-menu-target="autoid_58">TemplateSequenceModel functionality</a></li><li><a class="page-menu-link" href="#beanswrapper_method" data-menu-target="beanswrapper_method">TemplateMethodModel functionality</a></li><li><a class="page-menu-link" href="#autoid_59" data-menu-target="autoid_59">Unwrapping rules</a></li><li><a class="page-menu-link" hre
f="#autoid_60" data-menu-target="autoid_60">Accessing static methods</a></li><li><a class="page-menu-link" href="#jdk_15_enums" data-menu-target="jdk_15_enums">Accessing enums</a></li></ul> </div> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>Using <code class="inline-code">BeansWrapper</code> directly is not
+ recommended anymore. Use its subclass,
+ <code class="inline-code">DefaultObjectWrapper</code> instead, though by ensuring
+ that its <code class="inline-code">incompatibleImprovements</code> property is at
+ least 2.3.22. <code class="inline-code">DefaultObjectWrapper</code> gives cleaner
+ data-model (less confusing multi-type FTL values) and is usually
+ faster. <a href="pgui_datamodel_objectWrapper.html#pgui_datamodel_defaultObjectWrapper">See more
+ about DefaultObjectWrapper here...</a></p>
+ </div>
+<p>The <code class="inline-code">freemarker.ext.beans.BeansWrapper</code> is an
+ <a href="pgui_datamodel_objectWrapper.html">object wrapper</a>
+ that was originally added to FreeMarker so arbitrary POJO-s (Plain Old
+ Java Objects) can be wrapped into <code class="inline-code">TemplateModel</code>
+ interfaces. Since then it has became the normal way of doing things,
+ and in fact the <code class="inline-code">DefaultObjectWrapper</code> itself is a
+ <code class="inline-code">BeansWrapper</code> extension. So everything described
+ here goes for the <code class="inline-code">DefaultObjectWrapper</code> too, except
+ that the <code class="inline-code">DefaultObjectWrapper</code> will wrap
+ <code class="inline-code">String</code>, <code class="inline-code">Number</code>,
+ <code class="inline-code">Date</code>, <code class="inline-code">array</code>,
+ <code class="inline-code">Collection</code> (like <code class="inline-code">List</code>),
+ <code class="inline-code">Map</code>, <code class="inline-code">Boolean</code> and
+ <code class="inline-code">Iterator</code> objects with the
+ <code class="inline-code">freemarker.template.Simple<em class="code-color">Xxx</em></code>
+ classes, and W3C DOM nodes with
+ <code class="inline-code">freemarker.ext.dom.NodeModel</code> (<a href="xgui.html">more about wrapped W3C DOM...</a>), so for those the
+ above described rules doesn't apply.</p><p>You will want to use <code class="inline-code">BeansWrapper</code> instead of
+ <code class="inline-code">DefaultObjectWrapper</code> when any of these
+ stands:</p><ul>
+ <li>
+ <p>The <code class="inline-code">Collection</code>-s and
+ <code class="inline-code">Map</code>-s of the model should be allowed to be
+ modified during template execution.
+ (<code class="inline-code">DefaultObjectWrapper</code> prevents that, since it
+ creates a copy of the collections when they are wrapped, and the
+ copies will be read-only.)</p>
+ </li>
+
+ <li>
+ <p>If the identity of the <code class="inline-code">array</code>,
+ <code class="inline-code">Collection</code> and <code class="inline-code">Map</code> objects
+ must be kept when they are passed to a wrapped object's method in
+ the template. That is, if those methods must get exactly the same
+ object that was earlier wrapped.</p>
+ </li>
+
+ <li>
+ <p>If the Java API of the earlier listed classes
+ (<code class="inline-code">String</code>, <code class="inline-code">Map</code>,
+ <code class="inline-code">List</code> ...etc) should be visible for the
+ templates. Even with <code class="inline-code">BeansWrapper</code>, they are not
+ visible by default, but it can be achieved by setting the exposure
+ level (see later). Note that this is usually a bad practice; try
+ to use <a href="ref_builtins.html">the built-ins</a> (like
+ <code class="inline-code">foo?size</code>, <code class="inline-code">foo?upper_case</code>,
+ <code class="inline-code">foo?replace('_', '-')</code> ...etc) instead of the
+ Java API.</p>
+ </li>
+ </ul><p>Below is a summary of the <code class="inline-code">TemplateModel</code>-s
+ that the <code class="inline-code">BeansWrapper</code> creates. Let's assume that
+ the object is called <code class="inline-code">obj</code> before wrapping, and
+ <code class="inline-code">model</code> after wrapping for the sake of the following
+ discussion.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="beanswrapper_hash">TemplateHashModel functionality</h2>
+
+
+ <p>Every object will be wrapped into a
+ <code class="inline-code">TemplateHashModel</code> that will expose JavaBeans
+ properties and methods of the object. This way, you can use
+ <code class="inline-code">model.foo</code> in the template to invoke
+ <code class="inline-code">obj.getFoo()</code> or <code class="inline-code">obj.isFoo()</code>
+ methods. (Note that public fields are not visible directly; you must
+ write a getter method for them.) Public methods are also retrievable
+ through the hash model as template method models, therefore you can
+ use the <code class="inline-code">model.doBar()</code> to invoke
+ <code class="inline-code">object.doBar()</code>. More on this on discussion of
+ method model functionality.</p>
+
+ <p>If the requested key can not be mapped to a bean property or
+ method, the framework will attempt to locate the so-called "generic
+ get method", that is a method with signature public
+ <code class="inline-code"><em class="code-color">any-return-type</em>
+ get(String)</code> or public
+ <code class="inline-code"><em class="code-color">any-return-type</em>
+ get(Object)</code> and invoke that method with the requested key.
+ Note that this allows convenient access to mappings in a
+ <code class="inline-code">java.util.Map</code> and similar classes - as long as
+ the keys of the map are <code class="inline-code">String</code>s and some property
+ or method name does not shadow the mapping. (There is a solution to
+ avoid shadowing, read on.) Also note that the models for
+ <code class="inline-code">java.util.ResourceBundle</code> objects use the
+ <code class="inline-code">getObject(String)</code> as the generic get
+ method.</p>
+
+ <p>If you call <code class="inline-code">setExposeFields(true)</code> on a
+ <code class="inline-code">BeansWrapper</code> instance, it will also expose
+ public, non-static fields of classes as hash keys and values. I.e.
+ if <code class="inline-code">foo</code> is a public, non-static field of the class
+ <code class="inline-code">Bar</code>, and <code class="inline-code">bar</code> is a template
+ variable wrapping an instance of <code class="inline-code">Bar</code>, then
+ <code class="inline-code">bar.foo</code> expression will evaluate as the value of
+ the field <code class="inline-code">foo</code> of the <code class="inline-code">bar</code>
+ object. The public fields in all superclasses of the class are also
+ exposed.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_54">A word on security</h2>
+
+
+ <p>By default, you will not be able to access several methods
+ that are considered not safe for templating. For instance, you can't
+ use synchronization methods (<code class="inline-code">wait</code>,
+ <code class="inline-code">notify</code>, <code class="inline-code">notifyAll</code>), thread and
+ thread group management methods (<code class="inline-code">stop</code>,
+ <code class="inline-code">suspend</code>, <code class="inline-code">resume</code>,
+ <code class="inline-code">setDaemon</code>, <code class="inline-code">setPriority</code>),
+ reflection (<code class="inline-code">Field</code>
+ <code class="inline-code">set<em class="code-color">Xxx</em></code> methods,
+ <code class="inline-code">Method.invoke</code>,
+ <code class="inline-code">Constructor.newInstance</code>,
+ <code class="inline-code">Class.newInstance</code>,
+ <code class="inline-code">Class.getClassLoader</code> etc.) and various dangerous
+ methods in <code class="inline-code">System</code> and <code class="inline-code">Runtime</code>
+ classes (<code class="inline-code">exec</code>, <code class="inline-code">exit</code>,
+ <code class="inline-code">halt</code>, <code class="inline-code">load</code>, etc.). The
+ <code class="inline-code">BeansWrapper</code> has several security levels (called
+ "levels of method exposure"), and the default called
+ <code class="inline-code">EXPOSE_SAFE</code> is probably suited for most
+ applications. There is a no-safeguard level called
+ <code class="inline-code">EXPOSE_ALL</code> that allows you to call even the above
+ unsafe methods, and a strict level
+ <code class="inline-code">EXPOSE_PROPERTIES_ONLY</code> that will expose only bean
+ property getters. Finally, there is a level named
+ <code class="inline-code">EXPOSE_NOTHING</code> that will expose no properties and
+ no methods. The only data you will be able to access through hash
+ model interface in this case are items in maps and resource bundles,
+ as well as objects returned from a call to generic
+ <code class="inline-code">get(Object)</code> or <code class="inline-code">get(String)</code>
+ methods - provided the affected objects have such method.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_55">TemplateScalarModel functionality</h2>
+
+
+ <p>Models for <code class="inline-code">java.lang.String</code> objects will
+ implement <code class="inline-code">TemplateScalarModel</code> whose
+ <code class="inline-code">getAsString()</code> method simply delegates to
+ <code class="inline-code">toString()</code>. Note that wrapping
+ <code class="inline-code">String</code> objects into Bean wrappers provides much
+ more functionality than just them being scalars: because of the hash
+ interface described above, the models that wrap
+ <code class="inline-code">String</code>s also provide access to all
+ <code class="inline-code">String</code> methods (<code class="inline-code">indexOf</code>,
+ <code class="inline-code">substring</code>, etc.), though most of them has native
+ FreeMarker equivalent which are better to use
+ (<code class="inline-code">s?index_of(n)</code>,
+ <code class="inline-code">s[start..<end]</code>, etc).</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_56">TemplateNumberModel functionality</h2>
+
+
+ <p>Model wrappers for objects that are instances of
+ <code class="inline-code">java.lang.Number</code> implement
+ <code class="inline-code">TemplateNumberModel</code> whose
+ <code class="inline-code">getAsNumber()</code> method returns the wrapped number
+ object. Note that wrapping <code class="inline-code">Number</code> objects into
+ Bean wrappers provides much more functionality than just them being
+ number models: because of the hash interface described above, the
+ models that wrap <code class="inline-code">Number</code>s also provide access to
+ all their methods.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_57">TemplateCollectionModel functionality</h2>
+
+
+ <p>Model wrappers for native Java arrays and all classes that
+ implement <code class="inline-code">java.util.Collection</code> will implement
+ <code class="inline-code">TemplateCollectionModel</code> and thus gain the
+ additional capability of being usable through
+ <code class="inline-code">list</code> directive.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_58">TemplateSequenceModel functionality</h2>
+
+
+ <p>Model wrappers for native Java arrays and all classes that
+ implement <code class="inline-code">java.util.List</code> will implement
+ <code class="inline-code">TemplateSequenceModel</code> and thus their elements
+ will be accessible by index using the <code class="inline-code">model[i]</code>
+ syntax. You can also query the length of the array or the size of
+ the list using the <code class="inline-code">model?size</code> built-in.</p>
+
+ <p>Also, every method that takes a single parameter that is
+ assignable through reflective method invocation from a
+ <code class="inline-code">java.lang.Integer</code> (these are
+ <code class="inline-code">int</code>, <code class="inline-code">long</code>,
+ <code class="inline-code">float</code>, <code class="inline-code">double</code>,
+ <code class="inline-code">java.lang.Object</code>,
+ <code class="inline-code">java.lang.Number</code>, and
+ <code class="inline-code">java.lang.Integer</code>) also implements this
+ interface. What this means is that you have a convenient way for
+ accessing the so-called indexed bean properties:
+ <code class="inline-code">model.foo[i]</code> will translate into
+ <code class="inline-code">obj.getFoo(i)</code>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="beanswrapper_method">TemplateMethodModel functionality</h2>
+
+
+ <p>All methods of an object are represented as
+ <code class="inline-code">TemplateMethodModelEx</code> objects accessible using a
+ hash key with method name on their object's model. When you call a
+ method using
+ <code class="inline-code">model.<em class="code-color">method</em>(<em class="code-color">arg1</em>,
+ <em class="code-color">arg2</em>,
+ <em class="code-color">...</em>)</code> the arguments are passed
+ to the method as template models. The method will first try to
+ unwrap them - see below for details about unwrapping. These
+ unwrapped arguments are then used for the actual method call. In
+ case the method is overloaded, the most specific method will be
+ selected using the same rules that are used by the Java compiler to
+ select a method from several overloaded methods. In case that no
+ method signature matches the passed parameters, or that no method
+ can be chosen without ambiguity, a
+ <code class="inline-code">TemplateModelException</code> is thrown.</p>
+
+ <p>Methods of return type <code class="inline-code">void</code> return
+ <code class="inline-code">TemplateModel.NOTHING</code>, so they can be safely
+ called with the <code class="inline-code">${obj.method(args)}</code>
+ syntax.</p>
+
+ <p>Models for instances of <code class="inline-code">java.util.Map</code> also
+ implement <code class="inline-code">TemplateMethodModelEx</code> as a means for
+ invoking their <code class="inline-code">get()</code> method. As it was discussed
+ previously, you can use the hash functionality to access the "get"
+ method as well, but it has several drawbacks: it's slower because
+ first property and method names are checked for the key; keys that
+ conflict with property and method names will be shadowed by them;
+ finally you can use <code class="inline-code">String</code> keys only with that
+ approach. In contrast, invoking <code class="inline-code">model(key)</code>
+ translates to <code class="inline-code">model.get(key)</code> directly: it's
+ faster because there's no property and method name lookup; it is
+ subject to no shadowing; and finally it works for non-String keys
+ since the argument is unwrapped just as with ordinary method calls.
+ In effect, <code class="inline-code">model(key)</code> on a <code class="inline-code">Map</code>
+ is equal to <code class="inline-code">model.get(key)</code>, only shorter to
+ write.</p>
+
+ <p>Models for <code class="inline-code">java.util.ResourceBundle</code> also
+ implement <code class="inline-code">TemplateMethodModelEx</code> as a convenient
+ way of resource access and message formatting. A single-argument
+ call to a bundle will retrieve the resource with the name that
+ corresponds to the <code class="inline-code">toString()</code> value of the
+ unwrapped argument. A multiple-argument call to a bundle will also
+ retrieve the resource with the name that corresponds to the
+ <code class="inline-code">toString()</code> value of the unwrapped argument, but
+ it will use it as a format pattern and pass it to
+ <code class="inline-code">java.text.MessageFormat</code> using the unwrapped
+ values of second and later arguments as formatting parameters.
+ <code class="inline-code">MessageFormat</code> objects will be initialized with
+ the locale of the bundle that originated them.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_59">Unwrapping rules</h2>
+
+
+ <p>When invoking a Java method from a template, its arguments
+ need to be converted from template models back to Java objects.
+ Assuming that the target type (the declared type of the method's
+ formal parameter) is denoted as <code class="inline-code">T</code>, the following
+ rules are tried in the following order:</p>
+
+ <ul>
+ <li>
+ <p>If the model is the null model for this wrapper, Java
+ <code class="inline-code">null</code> is returned.</p>
+ </li>
+
+ <li>
+ <p>If the model implements
+ <code class="inline-code">AdapterTemplateModel</code>, the result of
+ <code class="inline-code">model.getAdaptedObject(T)</code> is returned if it
+ is instance of <code class="inline-code">T</code> or it is a number and can be
+ converted to <code class="inline-code">T</code> using numeric coercion as
+ described three bullets lower. <span class="marked-for-programmers">All
+ models created by the BeansWrapper are themselves
+ AdapterTemplateModel implementations, so unwrapping a model that
+ was created by BeansWrapper for an underlying Java object always
+ yields the original Java object.</span></p>
+ </li>
+
+ <li>
+ <p>If the model implements the deprecated
+ <code class="inline-code">WrapperTemplateModel</code>, the result of
+ <code class="inline-code">model.getWrappedObject()</code> is returned if it is
+ instance of <code class="inline-code">T</code> or it is a number and can be
+ converted to <code class="inline-code">T</code> using numeric coercion as
+ described two bullets lower.</p>
+ </li>
+
+ <li>
+ <p>If <code class="inline-code">T</code> is
+ <code class="inline-code">java.lang.String</code>, then if model implements
+ <code class="inline-code">TemplateScalarModel</code> its string value is
+ returned. <span class="marked-for-programmers">Note that if the model
+ doesn't implement TemplateScalarModel we don't attempt to
+ automatically convert the model to string using
+ String.valueOf(model). You'll have to use the ?string built-in
+ explicitly to pass non-scalars as strings.</span></p>
+ </li>
+
+ <li>
+ <p>If <code class="inline-code">T</code> is a primitive numeric type or
+ <code class="inline-code">java.lang.Number</code> is assignable from
+ <code class="inline-code">T</code>, and model implements
+ <code class="inline-code">TemplateNumberModel</code>, then its numeric value
+ is returned if it is instance of <code class="inline-code">T</code> or its
+ boxing type (if <code class="inline-code">T</code> is primitive type).
+ Otherwise, if <code class="inline-code">T</code> is a built-in Java numeric
+ type (primitive type or a standard subclass of
+ <code class="inline-code">java.lang.Number</code>, including
+ <code class="inline-code">BigInteger</code> and <code class="inline-code">BigDecimal</code>)
+ a new object of class <code class="inline-code">T</code> or its boxing type is
+ created with the number model's appropriately coerced
+ value.</p>
+ </li>
+
+ <li>
+ <p>If <code class="inline-code">T</code> is <code class="inline-code">boolean</code> or
+ <code class="inline-code">java.lang.Boolean</code>, and model implements
+ <code class="inline-code">TemplateBooleanModel</code>, then its boolean value
+ is returned.</p>
+ </li>
+
+ <li>
+ <p>If <code class="inline-code">T</code> is
+ <code class="inline-code">java.util.Map</code> and the model implements
+ <code class="inline-code">TemplateHashModel</code>, then a special Map
+ representation of the hash model is returned.</p>
+ </li>
+
+ <li>
+ <p>If <code class="inline-code">T</code> is
+ <code class="inline-code">java.util.List</code> and the model implements
+ <code class="inline-code">TemplateSequenceModel</code>, then a special List
+ representation of the sequence model is returned.</p>
+ </li>
+
+ <li>
+ <p>If <code class="inline-code">T</code> is
+ <code class="inline-code">java.util.Set</code> and the model implements
+ <code class="inline-code">TemplateCollectionModel</code>, then a special Set
+ representation of the collection model is returned.</p>
+ </li>
+
+ <li>
+ <p>If <code class="inline-code">T</code> is
+ <code class="inline-code">java.util.Collection</code> or
+ <code class="inline-code">java.lang.Iterable</code> and the model implements
+ either <code class="inline-code">TemplateCollectionModel</code> or
+ <code class="inline-code">TemplateSequenceModel</code>, then a special Set or
+ List representation of the collection or sequence model
+ (respectively) is returned.</p>
+ </li>
+
+ <li>
+ <p>If <code class="inline-code">T</code> is a Java array type and the model
+ implements <code class="inline-code">TemplateSequenceModel</code>, then a new
+ array of the specified type is created and its elements
+ unwrapped into the array recursively using the array's component
+ type as <code class="inline-code">T</code>.</p>
+ </li>
+
+ <li>
+ <p>If <code class="inline-code">T</code> is <code class="inline-code">char</code> or
+ <code class="inline-code">java.lang.Character</code>, and model implements
+ <code class="inline-code">TemplateScalarModel</code>, and its string
+ representation contains exactly one character, then a
+ <code class="inline-code">java.lang.Character</code> with that value is
+ retured.</p>
+ </li>
+
+ <li>
+ <p>If <code class="inline-code">java.util.Date</code> is assignable from
+ <code class="inline-code">T</code>, and model implements
+ <code class="inline-code">TemplateDateModel</code>, and its date value is
+ instance of <code class="inline-code">T</code>, then its date value is
+ returned.</p>
+ </li>
+
+ <li>
+ <p>If model is a number model, and its numeric value is
+ instance of <code class="inline-code">T</code>, the numeric value is returned.
+ <span class="marked-for-programmers">You can have a custom subclass of
+ java.lang.Number that implements a custom interface, and T might
+ be that interface. (*)</span></p>
+ </li>
+
+ <li>
+ <p>If model is a date model, and its date value is instance
+ of <code class="inline-code">T</code>, the date value is returned. <span class="marked-for-programmers">Similar consideration as for
+ (*)</span></p>
+ </li>
+
+ <li>
+ <p>If model is a scalar model, and <code class="inline-code">T</code> is
+ assignable from <code class="inline-code">java.lang.String</code>, the string
+ value is returned. <span class="marked-for-programmers">This covers
+ cases when T is java.lang.Object, java.lang.Comparable, and
+ java.io.Serializable (**)</span></p>
+ </li>
+
+ <li>
+ <p>If model is a boolean model, and <code class="inline-code">T</code> is
+ assignable from <code class="inline-code">java.lang.Boolean</code>, the
+ boolean value is returned. <span class="marked-for-programmers">Same as
+ (**)</span></p>
+ </li>
+
+ <li>
+ <p>If model is a hash model, and <code class="inline-code">T</code> is
+ assignable from
+ <code class="inline-code">freemarker.ext.beans.HashAdapter</code>, a hash
+ adapter is returned. <span class="marked-for-programmers">Same as
+ (**)</span></p>
+ </li>
+
+ <li>
+ <p>If model is a sequence model, and <code class="inline-code">T</code> is
+ assignable from
+ <code class="inline-code">freemarker.ext.beans.SequenceAdapter</code>, a
+ sequence adapter is returned. <span class="marked-for-programmers">Same
+ as (**)</span></p>
+ </li>
+
+ <li>
+ <p>If model is a collection model, and <code class="inline-code">T</code>
+ is assignable from
+ <code class="inline-code">freemarker.ext.beans.SetAdapter</code>, a set
+ adapter for the collection is returned. <span class="marked-for-programmers">Same as (**)</span></p>
+ </li>
+
+ <li>
+ <p>If the model is instance of <code class="inline-code">T</code>, the
+ model itself is returned. <span class="marked-for-programmers">This
+ covers the case where the method explicitly declared a
+ FreeMarker-specific model interface, as well as allows returning
+ directive, method and transform models when java.lang.Object is
+ requested.</span></p>
+ </li>
+
+ <li>
+ <p>An exception signifying no conversion is possible is
+ thrown.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_60">Accessing static methods</h2>
+
+
+
+
+ <p>The <code class="inline-code">TemplateHashModel</code> returned from
+ <code class="inline-code">BeansWrapper.getStaticModels()</code> can be used to
+ create hash models for accessing static methods and fields of an
+ arbitrary class.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">BeansWrapper wrapper = BeansWrapper.getDefaultInstance();
+TemplateHashModel staticModels = wrapper.getStaticModels();
+TemplateHashModel fileStatics =
+ (TemplateHashModel) staticModels.get("java.io.File");</pre></div>
+
+ <p>And you will get a template hash model that exposes all static
+ methods and static fields (both final and non-final) of the
+ <code class="inline-code">java.lang.System</code> class as hash keys. Suppose that
+ you put the previous model in your root model:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">root.put("File", fileStatics);</pre></div>
+
+ <p>From now on, you can use <code class="inline-code">${File.SEPARATOR}</code>
+ to insert the file separator character into your template, or you
+ can even list all roots of your file system by:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list File.listRoots() as fileSystemRoot>...</#list></pre></div>
+
+ <p>Of course, you must be aware of the potential security issues
+ this model brings.</p>
+
+ <p>You can even give the template authors complete freedom over
+ which classes' static methods they use by placing the static models
+ hash into your template root model with</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">root.put("statics", BeansWrapper.getDefaultInstance().getStaticModels());</pre></div>
+
+ <p>This object exposes just about any class' static methods if
+ it's used as a hash with class name as the key. You can then use
+ expression like
+ <code class="inline-code">${statics["java.lang.System"].currentTimeMillis()}</code>
+ in your template. Note, however that this has even more security
+ implications, as someone could even invoke
+ <code class="inline-code">System.exit()</code> using this model if the method
+ exposure level is weakened to <code class="inline-code">EXPOSE_ALL</code>.</p>
+
+ <p>Note that in above examples, we always use the default
+ <code class="inline-code">BeansWrapper</code> instance. This is a convenient
+ static wrapper instance that you can use in most cases. You are also
+ free to create your own <code class="inline-code">BeansWrapper</code> instances
+ and use them instead especially when you want to modify some of its
+ characteristics (like model caching, security level, or the null
+ model representation).</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="jdk_15_enums">Accessing enums</h2>
+
+
+
+
+ <p>The <code class="inline-code">TemplateHashModel</code> returned from
+ <code class="inline-code">BeansWrapper.getEnumModels()</code> can be used to
+ create hash models for accessing values of enums on JRE 1.5 or
+ later. (An attempt to invoke this method on an earlier JRE will
+ result in an
+ <code class="inline-code">UnsupportedOperationException</code>.)</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">BeansWrapper wrapper = BeansWrapper.getDefaultInstance();
+TemplateHashModel enumModels = wrapper.getEnumModels();
+TemplateHashModel roundingModeEnums =
+ (TemplateHashModel) enumModels.get("java.math.RoundingMode");</pre></div>
+
+ <p>And you will get a template hash model that exposes all enum
+ values of the <code class="inline-code">java.math.RoundingMode</code> class as
+ hash keys. Suppose that you put the previous model in your root
+ model:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">root.put("RoundingMode", roundingModeEnums);</pre></div>
+
+ <p>From now on, you can use <code class="inline-code">RoundingMode.UP</code> as
+ an expression to reference the <code class="inline-code">UP</code> enum value in
+ your template.</p>
+
+ <p>You can even give the template authors complete freedom over
+ which enum classes they use by placing the enum models hash into
+ your template root model with</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">root.put("enums", BeansWrapper.getDefaultInstance().getEnumModels());</pre></div>
+
+ <p>This object exposes any enum class if it's used as a hash with
+ class name as the key. You can then use expression like
+ <code class="inline-code">${enums["java.math.RoundingMode"].UP}</code> in your
+ template.</p>
+
+ <p>The exposed enum values can be used as scalars (they'll
+ delegate to their <code class="inline-code">toString()</code> method), and can be
+ used in equality and inequality comparisons as well.</p>
+
+ <p>Note that in above examples, we always use the default
+ <code class="inline-code">BeansWrapper</code> instance. This is a convenient
+ static wrapper instance that you can use in most cases. You are also
+ free to create your own <code class="inline-code">BeansWrapper</code> instances
+ and use them instead especially when you want to modify some of its
+ characteristics (like model caching, security level, or the null
+ model representation).</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_misc_multithreading.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_misc_logging.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[44/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/dgui.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/dgui.html b/builds/2.3.26-nightly/dgui.html
new file mode 100644
index 0000000..2a8f38d
--- /dev/null
+++ b/builds/2.3.26-nightly/dgui.html
@@ -0,0 +1,54 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-part">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Template Author's Guide - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Template Author's Guide">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/dgui.html">
+<link rel="canonical" href="http://freemarker.org/docs/dgui.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui.html"><span itemprop="name">Template Author's Guide</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_templa
te_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Author\'s Guide"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="index.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_quickstart.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-part" id="dgui" itemprop="headline">Template Author's Guide</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Section Contents</div>
+<ul><li><a class="page-menu-link" href="dgui_quickstart.html" data-menu-target="dgui_quickstart">Getting Started</a><ul><li><a class="page-menu-link" href="dgui_quickstart_basics.html" data-menu-target="dgui_quickstart_basics">Template + data-model = output</a></li><li><a class="page-menu-link" href="dgui_quickstart_datamodel.html" data-menu-target="dgui_quickstart_datamodel">The data-model at a glance</a></li><li><a class="page-menu-link" href="dgui_quickstart_template.html" data-menu-target="dgui_quickstart_template">The template at a glance</a></li></ul></li><li><a class="page-menu-link" href="dgui_datamodel.html" data-menu-target="dgui_datamodel">Values, Types</a><ul><li><a class="page-menu-link" href="dgui_datamodel_basics.html" data-menu-target="dgui_datamodel_basics">Basics</a></li><li><a class="page-menu-link" href="dgui_datamodel_types.html" data-menu-target="dgui_datamodel_types">The types</a></li></ul></li><li><a class="page-menu-link" href="dgui_template.html" data-menu-
target="dgui_template">The Template</a><ul><li><a class="page-menu-link" href="dgui_template_overallstructure.html" data-menu-target="dgui_template_overallstructure">Overall structure</a></li><li><a class="page-menu-link" href="dgui_template_directives.html" data-menu-target="dgui_template_directives">Directives</a></li><li><a class="page-menu-link" href="dgui_template_exp.html" data-menu-target="dgui_template_exp">Expressions</a></li><li><a class="page-menu-link" href="dgui_template_valueinsertion.html" data-menu-target="dgui_template_valueinsertion">Interpolations</a></li></ul></li><li><a class="page-menu-link" href="dgui_misc.html" data-menu-target="dgui_misc">Miscellaneous</a><ul><li><a class="page-menu-link" href="dgui_misc_userdefdir.html" data-menu-target="dgui_misc_userdefdir">Defining your own directives</a></li><li><a class="page-menu-link" href="dgui_misc_var.html" data-menu-target="dgui_misc_var">Defining variables in the template</a></li><li><a class="page-menu-link" hr
ef="dgui_misc_namespace.html" data-menu-target="dgui_misc_namespace">Namespaces</a></li><li><a class="page-menu-link" href="dgui_misc_autoescaping.html" data-menu-target="dgui_misc_autoescaping">Auto-escaping and output formats</a></li><li><a class="page-menu-link" href="dgui_misc_whitespace.html" data-menu-target="dgui_misc_whitespace">White-space handling</a></li><li><a class="page-menu-link" href="dgui_misc_alternativesyntax.html" data-menu-target="dgui_misc_alternativesyntax">Alternative (square bracket) syntax</a></li></ul></li></ul> </div><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="index.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_quickstart.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/dgui_datamodel.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/dgui_datamodel.html b/builds/2.3.26-nightly/dgui_datamodel.html
new file mode 100644
index 0000000..ba980e9
--- /dev/null
+++ b/builds/2.3.26-nightly/dgui_datamodel.html
@@ -0,0 +1,54 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-chapter">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Values, Types - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Values, Types">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/dgui_datamodel.html">
+<link rel="canonical" href="http://freemarker.org/docs/dgui_datamodel.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui.html"><span itemprop="name">Template Author's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_datamodel.html"><span itemprop="name">Values, Types</span></a></li></ul><div class="book
marks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Author\'s Guide","Values, Types"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="dgui_quickstart_template.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_datamodel_basics.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-chapter" id="dgui_datamodel" itemprop="headline">Values, Types</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Section Contents</div>
+<ul><li><a class="page-menu-link" href="dgui_datamodel_basics.html" data-menu-target="dgui_datamodel_basics">Basics</a></li><li><a class="page-menu-link" href="dgui_datamodel_types.html" data-menu-target="dgui_datamodel_types">The types</a></li></ul> </div><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="dgui_quickstart_template.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_datamodel_basics.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/dgui_datamodel_basics.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/dgui_datamodel_basics.html b/builds/2.3.26-nightly/dgui_datamodel_basics.html
new file mode 100644
index 0000000..70a9a49
--- /dev/null
+++ b/builds/2.3.26-nightly/dgui_datamodel_basics.html
@@ -0,0 +1,230 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Basics - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Basics">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/dgui_datamodel_basics.html">
+<link rel="canonical" href="http://freemarker.org/docs/dgui_datamodel_basics.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui.html"><span itemprop="name">Template Author's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_datamodel.html"><span itemprop="name">Values, Types</span></a></li><li class="step-3" it
emprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_datamodel_basics.html"><span itemprop="name">Basics</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Author\'s Guide","Values, Types","Basics"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="dgui_datamodel.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_datamodel_types.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="dgui_datamodel_basics" itemprop="headline">Basics</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#topic.value" data-menu-target="topic.value">What is a value?</a></li><li><a class="page-menu-link" href="#autoid_9" data-menu-target="autoid_9">What is type?</a></li><li><a class="page-menu-link" href="#autoid_10" data-menu-target="autoid_10">The data-model is a hash</a></li></ul> </div> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>It is assumed that you have already read the <a href="dgui_quickstart.html">Getting Started</a> chapter.</p>
+ </div>
+<p>Understanding the concept of values and types is crucial for the
+ understanding of data-models. However, the concept of values and types
+ is not confined to data-models, as you will see.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="topic.value">What is a value?</h2>
+
+
+
+
+ <p><span class="marked-for-programmers">Real programmers can safely skip
+ this section.</span></p>
+
+ <p>Examples of <em>values</em> as you know the term
+ from the everyday math are 16, 0.5, and so on, i.e. numbers. In the
+ case of computer languages the value term has a wider meaning, as a
+ value needn't be a number. For example, take this data-model:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-data-model"><a name="example.stdDataModel"></a>(root)
+ |
+ +- user = "Big Joe"
+ |
+ +- today = Jul 6, 2007
+ |
+ +- todayHoliday = false
+ |
+ +- lotteryNumbers
+ | |
+ | +- (1st) = 20
+ | |
+ | +- (2st) = 14
+ | |
+ | +- (3rd) = 42
+ | |
+ | +- (4th) = 8
+ | |
+ | +- (5th) = 15
+ |
+ +- cargo
+ |
+ +- name = "coal"
+ |
+ +- weight = 40</pre></div>
+
+ <p>We say that the <em>value</em> of the the
+ <code class="inline-code">user</code> variable is "Big Joe" (a string), the
+ <em>value</em> of <code class="inline-code">today</code> is Jul 6,
+ 2007 (a date), the <em>value</em> of
+ <code class="inline-code">todayHoliday</code> is false (a boolean, ie. a yes/no
+ thing). The <em>value</em> of
+ <code class="inline-code">lotteryNumbers</code> is the sequence that contains 20,
+ 14, 42, 8, 15. Surely <code class="inline-code">lotteryNumbers</code> is multiple
+ values in the sense that it <em>contains</em> multiple
+ values (for example, the 2nd item in it is a the
+ <em>value</em> 14), but still,
+ <code class="inline-code">lotteryNumbers</code> itself is a single value. It's
+ like a box that contains many other items; the whole box can be seen
+ as a single item. Last not least we also have the
+ <em>value</em> of <code class="inline-code">cargo</code>, which is a
+ hash (a box-like thing again).So, a value is something that can be
+ stored in a variable (e.g., in <code class="inline-code">user</code> or
+ <code class="inline-code">cargo</code> or <code class="inline-code">cargo.name</code>). But a
+ value need not be stored in a variable to be called a value, for
+ example we have the value 100 here:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#if cargo.weight < <strong>100</strong>>Light cargo</#if></pre></div>
+
+ <p>The temporaly result of a calculations are also called values,
+ like 20 and 120 when this template is executed (it will print
+ 120):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${cargo.weight / 2 + 100}</pre></div>
+
+ <p>Explanation for this last: As the result of dividing the two
+ values, 40 (the weight of the cargo) and 2, a new value 20 is
+ created. Then 100 is added to it, so the value 120 is created. Then
+ 120 is printed
+ (<code class="inline-code">${<em class="code-color">...</em>}</code>), and the
+ template execution goes on and all these values gone.</p>
+
+ <p>Certainly now you feel what the value term means.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_9">What is type?</h2>
+
+
+ <p>Values have an important aspect, their type. For example the
+ type of the value of the <code class="inline-code">user</code> variable is string,
+ and the type of the value of the <code class="inline-code">lotteryNumbers</code>
+ variable is sequence. The type of a value is important because it
+ determines to a large extent how and where you can use the value.
+ Like <code class="inline-code">${user / 2}</code> is an error, but
+ <code class="inline-code">${cargo.weight / 2}</code> works and prints 20, since
+ division only does make sense for a number, but not for a string.
+ Or, using dot like in <code class="inline-code">cargo.name</code> does make sense
+ only if <code class="inline-code">cargo</code> is a hash. Or, you can list with
+ <code class="inline-code"><#list <em class="code-color">...</em>></code>
+ sequences only. Or, the condition of <code class="inline-code"><#if
+ ...></code> must be a boolean. And so on.</p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>A little terminology... Saying "a boolean" or "a boolean
+ value" or "a value of type boolean" are all the same.</p>
+ </div>
+
+
+ <p><a name="topic.multitype"></a>A value can have multiple types at the same time,
+ although it's rarely utilized. For example in the data-model below
+ <code class="inline-code">mouse</code> is both a string and a hash:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-data-model">(root)
+ |
+ +- mouse = "Yerri"
+ |
+ +- age = 12
+ |
+ +- color = "brown"</pre></div>
+
+ <p>If you merge this template with the above data-model:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${mouse} <#-- uses mouse as a string -->
+${mouse.age} <#-- uses mouse as a hash -->
+${mouse.color} <#-- uses mouse as a hash --></pre></div>
+
+ <p>the output will be:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">Yerri
+12
+brown</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_10">The data-model is a hash</h2>
+
+
+ <p>Looking at the various data-model examples you may already
+ realized: the thing marked as "(root)" is just a value of type hash.
+ When you write something like <code class="inline-code">user</code>, that means
+ that you want the "user" variable stored in the root hash. Like if
+ you were writing <code class="inline-code">root.user</code>, except that there is
+ no variable called "root" so that wouldn't work.</p>
+
+ <p>Some may get confused by the fact that our example data-model,
+ that is, the root hash, contains further hashes and sequences
+ (<code class="inline-code">lotteryNumbers</code> and <code class="inline-code">cargo</code>).
+ There is nothing special in that. A hash contains other variables,
+ and those variables have a value, which can be a string, a number,
+ etc., and of course it can be a hash or sequence as well. Because,
+ as it was explained earlier, a sequence or a hash is just a value,
+ like a string or a number is.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="dgui_datamodel.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_datamodel_types.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/dgui_datamodel_types.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/dgui_datamodel_types.html b/builds/2.3.26-nightly/dgui_datamodel_types.html
new file mode 100644
index 0000000..348a837
--- /dev/null
+++ b/builds/2.3.26-nightly/dgui_datamodel_types.html
@@ -0,0 +1,512 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>The types - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="The types">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/dgui_datamodel_types.html">
+<link rel="canonical" href="http://freemarker.org/docs/dgui_datamodel_types.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui.html"><span itemprop="name">Template Author's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_datamodel.html"><span itemprop="name">Values, Types</span></a></li><li class="step-3" it
emprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_datamodel_types.html"><span itemprop="name">The types</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Author\'s Guide","Values, Types","The types"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="dgui_datamodel_basics.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_template.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="dgui_datamodel_types" itemprop="headline">The types</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#dgui_datamodel_scalar" data-menu-target="dgui_datamodel_scalar">Scalars</a></li><li><a class="page-menu-link" href="#dgui_datamodel_container" data-menu-target="dgui_datamodel_container">Containers</a></li><li><a class="page-menu-link" href="#autoid_11" data-menu-target="autoid_11">Subroutines</a><ul><li><a class="page-menu-link" href="#dgui_datamodel_method" data-menu-target="dgui_datamodel_method">Methods and functions</a></li><li><a class="page-menu-link" href="#dgui_datamodel_userdefdir" data-menu-target="dgui_datamodel_userdefdir">User-defined directives</a></li><li><a class="page-menu-link" href="#autoid_12" data-menu-target="autoid_12">Function/method versus user-defined directive</a></li></ul></li><li><a class="page-menu-link" href="#autoid_13" data-menu-target="autoid_13">Miscellaneous</a><ul><li><a class="page-menu-link" href="#dgui_datamodel_node" data-menu-target="dgui_datamodel_node">Nodes</a></li><li><a class="page-menu-link" hr
ef="#dgui_datamodel_markupoutput" data-menu-target="dgui_datamodel_markupoutput">Markup output</a></li></ul></li></ul> </div><p>The suppored types are:</p><ul>
+ <li>
+ <a href="#dgui_datamodel_scalar">Scalars:</a>
+
+ <ul>
+ <li>
+ String
+ </li>
+
+ <li>
+ Number
+ </li>
+
+ <li>
+ Boolean
+ </li>
+
+ <li>
+ Date-like (date, time, or date-time)
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <a href="#dgui_datamodel_container">Containers:</a>
+
+ <ul>
+ <li>
+ Hash
+ </li>
+
+ <li>
+ Sequence
+ </li>
+
+ <li>
+ Collection
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ Subroutines:
+
+ <ul>
+ <li>
+ <a href="#dgui_datamodel_method">Methods and
+ functions</a>
+ </li>
+
+ <li>
+ <a href="#dgui_datamodel_userdefdir">User-defined
+ directives</a>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ Miscellaneous/seldom used:
+
+ <ul>
+ <li>
+ <a href="#dgui_datamodel_node">Node</a>
+ </li>
+
+ <li>
+ <a href="#dgui_datamodel_markupoutput">Markup
+ output</a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+
+
+
+
+<h2 class="content-header header-section2" id="dgui_datamodel_scalar">Scalars</h2>
+
+
+ <a name="topic.designer.scalarVariable"></a>
+
+ <p>These are the basic, simple kind of values. They can
+ be:</p>
+
+ <ul>
+ <li>
+ <p>String: It is simple text, e.g., the name of a
+ product.</p>
+
+ <p>If you want to give a string value directly in the
+ template, rather than use a variable that comes from the data
+ model, you write the text between quotation marks, e.g.,
+ <code class="inline-code">"green mouse"</code> or <code class="inline-code">'green
+ mouse'</code>. (More details regarding the syntax can be
+ found <a href="dgui_template_exp.html#dgui_template_exp_direct_string">later</a>.)</p>
+ </li>
+
+ <li>
+ <p>Number: For example the price of a product.
+ <span class="marked-for-programmers">Whole numbers and non-whole
+ numbers are not distinguished; there is only a single number
+ type. So for example 3/2 will be always 1.5, and never 1. Just
+ like if you are using a calculator.</span></p>
+
+ <p>If you want to give a numerical value directly in the
+ template, then you write for example: <code class="inline-code">150</code> or
+ <code class="inline-code">-90.05</code> or <code class="inline-code">0.001</code>. (More
+ details regarding the syntax can be found <a href="dgui_template_exp.html#dgui_template_exp_direct_number">later</a>.)</p>
+ </li>
+
+ <li>
+ <p>Boolean: A boolean value represents a logical true
+ or false (yes or no). For example, if a the visitor has been
+ logged in or not. Typically you use booleans as the condition of
+ the <code class="inline-code">if</code> directive, like <code class="inline-code"><#if
+ loggedIn
+ ><em class="code-color">...</em></#if></code> or
+ <code class="inline-code"><#if price ==
+ 0><em class="code-color">...</em></#if></code>; in
+ the last case the result of the <code class="inline-code">price == 0</code>
+ part is a boolean value.</p>
+
+ <p>In the templates you can directly specify a boolean with
+ the reserved words <code class="inline-code">true</code> and
+ <code class="inline-code">false</code>.</p>
+ </li>
+
+ <li>
+ <p>Date: A date-like value stores date/time related
+ data. It has three variations:</p>
+
+ <ul>
+ <li>
+ <p>Date: Like April 4, 2003. Day precision, no time of
+ day part.</p>
+ </li>
+
+ <li>
+ <p>Time: Like 10:19:18 PM. Millisecond precision, no date
+ part.</p>
+ </li>
+
+ <li>
+ <p>Date-time (sometimes called "time stamp") as April 4,
+ 2003 10:19:18 PM. Both date and time, with millisecond
+ precision.</p>
+ </li>
+ </ul>
+
+ <p>Unfortunately, because of the limitations of the Java
+ platform, FreeMarker sometimes can't decide which parts of the
+ date are in use (i.e., if it is date-time, a date or a time).
+ The solution for this problem is an advanced topic that will be
+ discussed <a href="ref_builtins_date.html#ref_builtin_date_datetype">later</a>.</p>
+
+ <p>It is possible to define date-like values directly in
+ templates, but this is an advanced topic that will be explained
+ <a href="ref_builtins_string.html#ref_builtin_string_date">later</a>.</p>
+ </li>
+ </ul>
+
+ <p>Bear in mind that FreeMarker distinguishes strings from
+ numbers, booleans and date-like values. For example, while the
+ string <code class="inline-code">"150"</code> looks like the number
+ <code class="inline-code">150</code>, a string is still just arbitrary sequence of
+ characters, and you can't do arithmetic with it, can't compare it
+ with another number, etc.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="dgui_datamodel_container">Containers</h2>
+
+
+
+
+ <p>These are the values whose purpose is to contain other
+ variables; they are just containers. The contained variables are
+ often referred as <em>sub variables</em>. The container
+ types are:</p>
+
+ <ul>
+ <li>
+ <p>Hash: Associates a unique lookup name with each of
+ its sub variables. The name is an unrestricted string. A hash
+ <em>doesn't define an ordering</em> for the sub
+ variables in it. That is, there is no such thing as the first
+ subvariable, and the second subvariable, etc.; the variables are
+ just accessed by name.</p>
+ </li>
+
+ <li>
+ <p>Sequence: Associates an integer number with each
+ of its sub variables. The first subvariable is associated with
+ 0, the second with 1, the third to 2, and so on; the sub
+ variables are ordered. These numbers are often called the
+ <em>indexes</em> of the sub variables. Sequences are
+ usually dense, i.e., all indexes up to the index of the last
+ subvariable have an associated subvariable, but it's not
+ strictly necessary. The type of the subvariable values need not
+ be the same.</p>
+ </li>
+
+ <li>
+ <p>Collection: A collection, from the viewpoint of
+ the template author, is a restricted sequence. You cannot access
+ its size or retrieve its sub variables by index, but they can be
+ still listed with the <a href="ref_directive_list.html#ref.directive.list"><code>list</code>
+ directive</a>.</p>
+ </li>
+ </ul>
+
+ <p>Note that since <a href="dgui_datamodel_basics.html#topic.multitype">a value can
+ have multiple types</a>, it is possible for a value to be both a
+ hash and a sequence, in which case it would support index-based
+ access as well as access by lookup name. However, typically a
+ container will be either a hash or a sequence, not both.</p>
+
+ <p>As the value of the variables stored in hashes and sequences
+ (and collections) can be anything, it can be a hash or sequence (or
+ collection) as well. This way you can build arbitrarily deep
+ structures.</p>
+
+ <p>The data-model itself (or better said the root of it) is a
+ hash.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_11">Subroutines</h2>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_datamodel_method">Methods and functions</h3>
+
+
+ <a name="topic.designer.methodVariable"></a>
+
+
+
+ <p>A value that is a method or a function is used to calculate
+ another value, influenced by the parameters you give to it.</p>
+
+ <p><span class="marked-for-programmers">For programmer types:
+ Methods/functions are first-class values, just like in functional
+ programming languages. This means that functions/methods can be
+ the parameters or return values of other functions/methods, you
+ can assign them to variables, and so on.</span></p>
+
+ <p>Suppose that programmers have put the method variable
+ <code class="inline-code">avg</code> in the data-model that can be used to
+ calculate the average of numbers. If you give the 3 and 5 as
+ parameters when you access <code class="inline-code">avg</code>, then you get
+ the value 4.</p>
+
+ <p>The usage of methods will be explained <a href="dgui_template_exp.html#dgui_template_exp_methodcall">later</a>, but perhaps
+ this example helps to understand what methods are:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">The average of 3 and 5 is: ${avg(3, 5)}
+The average of 6 and 10 and 20 is: ${avg(6, 10, 20)}
+The average of the price of a python and an elephant is:
+${avg(animals.python.price, animals.elephant.price)}</pre></div>
+
+ <p>this will output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">The average of 3 and 5 is: 4
+The average of 6 and 10 and 20 is: 12
+The average of the price of a python and an elephant is:
+4999.5</pre></div>
+
+ <p>What is the difference between a method and a function? As
+ far as the template author is concerned, nothing. Well not really
+ nothing, as methods typically come from the data-model (<span class="marked-for-programmers">as they reflect the methods of Java
+ objects</span>), and functions are defined in templates (with
+ the <a href="ref_directive_function.html#ref.directive.function"><code>function</code>
+ directive</a> -- an advanced topic), but both can be used on
+ the same way.</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_datamodel_userdefdir">User-defined directives</h3>
+
+
+
+
+
+
+
+
+ <p>A value of this type can be used as user-defined directive
+ (with other words, as FreeMarker tag). An user-defined directive
+ is a subroutine, something like a little reusable template
+ fragment. But this is an advanced topic that will be explained
+ <a href="dgui_misc_userdefdir.html">later</a> in its own
+ chapter.</p>
+
+ <p><span class="marked-for-programmers">For programmer types:
+ user-defined directives (such as macros), are first-class values
+ too, just like functions/methods are.</span></p>
+
+ <p>Just to get an idea about user-defined directives (so just
+ ignore this if you won't understand), assume we have a variable,
+ <code class="inline-code">box</code>, whose value is a user-defined directive
+ that prints some kind of fancy HTML message box with a title bar
+ and a message in it. The <code class="inline-code">box</code> variable could be
+ used in the template like this (for example):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><@<strong>box</strong> title="Attention!">
+ Too much copy-pasting may leads to
+ maintenance headaches.
+</@<strong>box</strong>></pre></div>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_12">Function/method versus user-defined directive</h3>
+
+
+ <p>This is for advanced users again (so ignore it if you don't
+ understand). It's a frequent dilemma if you should use a
+ function/method or an user-defined directive to implement
+ something. The rule of thumb is: Implement the facility as
+ user-defined directive instead of as function/method if:</p>
+
+ <ul>
+ <li>
+ <p>... the purpose of it is generating a piece of the
+ output that's not just a single value, and typically involves
+ markup. The template language was designed for printing to the
+ output directly, piece by piece, as it goes though
+ <code class="inline-code">list</code> loops, <code class="inline-code">if</code>-s, etc.
+ Building up a string value in a variable then returning it is
+ much less convenient.</p>
+ </li>
+
+ <li>
+ <p>... it's the side-effect that is important and not the
+ return value. For example, a directive whose purpose is to add
+ an entry to the server log is like that. (In fact you can't
+ have a return value for a user-defined directive, but some
+ kind of feedback is still possible by setting non-local
+ variables.)</p>
+ </li>
+
+ <li>
+ <p>... it will do flow control on the caller side (like for
+ example <code class="inline-code">list</code> or <code class="inline-code">if</code>
+ directives do). You just can't do that with a
+ function/method.</p>
+ </li>
+
+ <li>
+ <p>... you are using legacy escaping via the
+ <code class="inline-code">escape</code> directive (instead of <a href="dgui_misc_autoescaping.html">auto-escaping</a>), and
+ the result contains markup. When you print the result with
+ <code class="inline-code">${<em class="code-color">...</em>}</code>, the
+ markup will be escaped and thus ruined, but if it's printed by
+ a directive call
+ (<code class="inline-code"><@<em class="code-color">...</em>></code>),
+ it won't be.</p>
+ </li>
+ </ul>
+
+ <p>The Java methods of FreeMarker-unaware Java objects are
+ normally visible as methods in templates, regardless of the nature
+ of the Java method; you have no choice there.</p>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_13">Miscellaneous</h2>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_datamodel_node">Nodes</h3>
+
+
+
+
+ <p>Node variables represent a node in a tree structure, and are
+ used mostly with <a href="xgui.html">XML processing</a>, which
+ is an advanced, and specialized topic.</p>
+
+ <p>Still, a quick overview <em>for advanced
+ users</em>: A node is similar to a sequence that stores
+ other nodes, which are often referred as the children nodes. A
+ node stores a reference to its container node, which is often
+ referred as the parent node. The main point of being a node is the
+ topological information; other data must be stored by utilizing
+ that a value can have multiple types. Like, a value may be both a
+ node and a number, in which case it can store a number as the
+ "pay-load". Apart from the topological information, a node can
+ store some metainformation as well: a node name, a node type
+ (string), and a node namespace (string). For example, if the node
+ symbolizes a <code class="inline-code">h1</code> element in an XHTML document,
+ then its name could be <code class="inline-code">"h1"</code>, it's node type
+ could be <code class="inline-code">"element"</code>, and it's namespace could be
+ <code class="inline-code">"http://www.w3.org/1999/xhtml"</code>. But it's up to
+ the designer of the data-model if what meaning these
+ metainformations have, and if they are used at all. The way of
+ retrieving the topological and metainformations is described <a href="ref_builtins_node.html">in a later chapter</a> (that you
+ don't have to understand at this point).</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_datamodel_markupoutput">Markup output</h3>
+
+
+
+
+ <p>This type is related to <a href="dgui_misc_autoescaping.html">auto-escaping mechanism</a>
+ introduced FreeMarker 2.3.24; you can <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_movalues">read about this type
+ there</a>. But in short, this is a value that stores text
+ that's already in the output markup format (like HTML, XML, RTF,
+ etc.), and hence must not be auto-escaped.</p>
+
+ <p>Values of this type are usually produced inside the
+ templates (like with <a href="ref_builtins_string.html#ref_builtin_no_esc"><code>no_esc</code>
+ built-in</a> or <a href="ref_directive_assign.html">output
+ capturing assignments</a>), but can also be part of the
+ data-model. Such values in the data-model are useful for example
+ if you have message resources that sometimes contain the message
+ in HTML format, rather than in plain text. If the data-model uses
+ HTML markup output values for those messages instead of strings,
+ then the template author need not know which messages contain HTML
+ and which plain text, as double escaping will be avoided
+ automatically when the message is inserted with
+ <code class="inline-code">${<em class="code-color">...</em>}</code>.</p>
+
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="dgui_datamodel_basics.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_template.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/dgui_misc.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/dgui_misc.html b/builds/2.3.26-nightly/dgui_misc.html
new file mode 100644
index 0000000..5964dab
--- /dev/null
+++ b/builds/2.3.26-nightly/dgui_misc.html
@@ -0,0 +1,54 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-chapter">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Miscellaneous - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Miscellaneous">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/dgui_misc.html">
+<link rel="canonical" href="http://freemarker.org/docs/dgui_misc.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui.html"><span itemprop="name">Template Author's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_misc.html"><span itemprop="name">Miscellaneous</span></a></li></ul><div class="bookmarks
" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Author\'s Guide","Miscellaneous"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="dgui_template_valueinsertion.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_misc_userdefdir.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-chapter" id="dgui_misc" itemprop="headline">Miscellaneous</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Section Contents</div>
+<ul><li><a class="page-menu-link" href="dgui_misc_userdefdir.html" data-menu-target="dgui_misc_userdefdir">Defining your own directives</a></li><li><a class="page-menu-link" href="dgui_misc_var.html" data-menu-target="dgui_misc_var">Defining variables in the template</a></li><li><a class="page-menu-link" href="dgui_misc_namespace.html" data-menu-target="dgui_misc_namespace">Namespaces</a></li><li><a class="page-menu-link" href="dgui_misc_autoescaping.html" data-menu-target="dgui_misc_autoescaping">Auto-escaping and output formats</a></li><li><a class="page-menu-link" href="dgui_misc_whitespace.html" data-menu-target="dgui_misc_whitespace">White-space handling</a></li><li><a class="page-menu-link" href="dgui_misc_alternativesyntax.html" data-menu-target="dgui_misc_alternativesyntax">Alternative (square bracket) syntax</a></li></ul> </div><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="dgui_template_valueinsertion.html"><span>Previo
us</span></a><a class="paging-arrow next" href="dgui_misc_userdefdir.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/dgui_misc_alternativesyntax.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/dgui_misc_alternativesyntax.html b/builds/2.3.26-nightly/dgui_misc_alternativesyntax.html
new file mode 100644
index 0000000..1ed87aa
--- /dev/null
+++ b/builds/2.3.26-nightly/dgui_misc_alternativesyntax.html
@@ -0,0 +1,119 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Alternative (square bracket) syntax - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Alternative (square bracket) syntax">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/dgui_misc_alternativesyntax.html">
+<link rel="canonical" href="http://freemarker.org/docs/dgui_misc_alternativesyntax.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui.html"><span itemprop="name">Template Author's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_misc.html"><span itemprop="name">Miscellaneous</span></a></li><li class="step-3" itempro
p="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_misc_alternativesyntax.html"><span itemprop="name">Alternative (square bracket) syntax</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Author\'s Guide","Miscellaneous","Alternative (square bracket) syntax"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="dgui_misc_whitespace.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="dgui_misc_alternativesyntax" itemprop="headline">Alternative (square bracket) syntax</h1>
+</div></div> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This feature exists since FreeMarker 2.3.4.</p>
+ </div>
+<p>FreeMarker supports an alternative syntax, where
+ <code class="inline-code">[</code> and <code class="inline-code">]</code> is used instead of
+ <code class="inline-code"><</code> and <code class="inline-code">></code> in FreeMarker
+ directives and comments, for example:</p><ul>
+ <li>
+ Calling predefined directive: <code class="inline-code">[#list animals as
+ animal]<em class="code-color">...</em>[/#list]</code>
+ </li>
+
+ <li>
+ Calling user-defined directive: <code class="inline-code">[@myMacro
+ /]</code>
+ </li>
+
+ <li>
+ Comment: <code class="inline-code">[#-- the comment --]</code>
+ </li>
+ </ul><p>To use the alternative syntax instead of the default one, start
+ the template with the <a href="ref_directive_ftl.html"><code>ftl</code> directive</a>
+ using the alternative syntax. If you don't know what is the
+ <code class="inline-code">ftl</code> directive, just start the template with
+ <code class="inline-code">[#ftl]</code>, and remember that it should be the very
+ first thing in the file (except that <a href="gloss.html#gloss.whiteSpace">white-space</a> can precede it). For
+ example, this is how the last example of the <a href="dgui_quickstart_template.html">Getting Started</a> looks with
+ the alternative syntax (assuming it's a complete template, not just a
+ fragment):</p>
+
+<div class="code-wrapper"><pre class="code-block code-template"><strong>[#ftl]</strong>
+<p>We have these animals:
+<table border=1>
+ <tr><th>Name<th>Price
+ <strong>[#list animals as animal]</strong>
+ <tr>
+ <td>
+ <strong>[#if animal.size == "large"]</strong><b><strong>[/#if]</strong>
+ ${animal.name}
+ <strong>[#if animal.size == "large"]</strong></b><strong>[/#if]</strong>
+ <td>${animal.price} Euros
+ <strong>[/#list]</strong>
+</table></pre></div><p>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
+ <code class="inline-code"><#if <em class="code-color">...</em>></code> are
+ count as static text, not as FTL tags. Similarly, if the template uses
+ the default syntax, things like <code class="inline-code">[#if
+ <em class="code-color">...</em>]</code> count as static text, not as
+ FTL tags.</p><p>If you start the file with <code class="inline-code">[#ftl
+ <em class="code-color">...</em>]</code> (where the
+ <code class="inline-code"><em class="code-color">...</em></code> stands for the
+ optional parameters; of course <code class="inline-code">[#ftl]</code> works too)
+ the file will surely use the alternative (square bracket) syntax. If
+ you start the file with <code class="inline-code"><#ftl
+ <em class="code-color">...</em>></code> the file will surely use
+ the normal (angle bracket) syntax. If there is no
+ <code class="inline-code">ftl</code> directive in the file, then the programmer
+ decides what the syntax will be by configuring FreeMarker <span class="marked-for-programmers">(programmers see
+ <code class="inline-code">Configuration.setTagSyntax(int)</code> in the API
+ javadocs)</span>. 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 <code class="inline-code">ftl</code>).</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="dgui_misc_whitespace.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[24/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_builtins_type_independent.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_builtins_type_independent.html b/builds/2.3.26-nightly/ref_builtins_type_independent.html
new file mode 100644
index 0000000..43aef88
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_builtins_type_independent.html
@@ -0,0 +1,210 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Type independent built-ins - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Type independent built-ins">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_builtins_type_independent.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_builtins_type_independent.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins.html"><span itemprop="name">Built-in Reference</span></a></li><li class="step-3"
itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins_type_independent.html"><span itemprop="name">Type independent built-ins</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Built-in Reference","Type independent built-ins"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_builtins_loop_var.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins_expert.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_builtins_type_independent" itemprop="headline">Type independent built-ins</h1>
+</div></div><p>These are the built-ins that don't care (much) about the type of
+ their left hand argument.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_switch">switch</h2>
+
+
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in exists since FreeMarker 2.3.23.</p>
+ </div>
+
+
+ <p>This is basically the in-line (expression) version of the
+ <a href="ref_directive_switch.html"><code>switch</code>-<code>case</code>-<code>default</code>
+ directives</a>. Its generic format is like
+ <code class="inline-code"><em class="code-color">matchedValue</em>?switch(<em class="code-color">case1</em>,
+ <em class="code-color">result1</em>,
+ <em class="code-color">case2</em>,
+ <em class="code-color">result2</em>, ...
+ <em class="code-color">caseN</em>,
+ <em class="code-color">resultN</em>,
+ <em class="code-color">defaultResult</em>)</code>, where
+ <code class="inline-code"><em class="code-color">defaultResult</em></code> can be
+ omitted. Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list ['r', 'w', 'x', 's'] as flag>
+ ${flag<strong>?switch('r', 'readable', 'w' 'writable', 'x', 'executable', 'unknown flag: ' + flag)</strong>}
+</#list></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> readable
+ writable
+ executable
+ unknown flag: s</pre></div>
+
+ <p>That is, <code class="inline-code">switch</code> will find the first
+ <code class="inline-code"><em class="code-color">case</em></code> parameter (left
+ to right) whose value equals to
+ <code class="inline-code"><em class="code-color">matchedValue</em></code>, then it
+ returns the value of the
+ <code class="inline-code"><em class="code-color">result</em></code> parameter
+ that's directly after that
+ <code class="inline-code"><em class="code-color">case</em></code> parameter. If it
+ doesn't find an equal
+ <code class="inline-code"><em class="code-color">case</em></code>, then it will
+ return the value of the
+ <code class="inline-code"><em class="code-color">defaultResult</em></code>, or if
+ there's no
+ <code class="inline-code"><em class="code-color">defaultResult</em></code>
+ parameter (i.e., if the number of parameters is even) then it stops
+ the template processing with error.</p>
+
+ <p>Further details:</p>
+
+ <ul>
+ <li>
+ <p>The comparison of
+ <code class="inline-code"><em class="code-color">matchedValue</em></code> to
+ the <code class="inline-code"><em class="code-color">case</em></code> parameter
+ value behaves exactly like <a href="dgui_template_exp.html#dgui_template_exp_comparison">the <code>==</code>
+ operator</a>. Hence it only compares scalars and only
+ same-type values. Thus, something like <code class="inline-code">x?switch(1,
+ "r1", "c2", "r2")</code> doesn't make sense, as if
+ <code class="inline-code">x</code> is non-numerical then the first case will
+ cause error, and if <code class="inline-code">x</code> is numerical then the
+ second case will cause error (unless <code class="inline-code">x</code> is
+ <code class="inline-code">1</code>, as then we won't do further comparisons
+ after the first one).</p>
+ </li>
+
+ <li>
+ <p>Unlike with normal method calls, only those parameters of
+ <code class="inline-code">switch(<em class="code-color">...</em>)</code> are
+ evaluated that are indeed needed. For example, in
+ <code class="inline-code">two()?switch(c1(), r1(), c2(), r2(), c3(),
+ r3())</code>, if <code class="inline-code">two()</code> returns
+ <code class="inline-code">2</code>, <code class="inline-code">c1()</code> returns
+ <code class="inline-code">1</code>, and <code class="inline-code">c2()</code> returns
+ <code class="inline-code">2</code>, then only the following functions will be
+ called, and in this order: <code class="inline-code">m()</code>,
+ <code class="inline-code">c1()</code>, <code class="inline-code">c2()</code>,
+ <code class="inline-code">r2()</code>. (Naturally, arguments that aren't
+ evaluated can refer to missing variables without causing error.)
+ It's guaranteed that the
+ <code class="inline-code"><em class="code-color">case</em></code> parameter
+ expressions are evaluated left to right, and only until the
+ first match was found. It's also guaranteed that only the
+ <code class="inline-code"><em class="code-color">result</em></code> expression
+ that belongs to the first matching
+ <code class="inline-code"><em class="code-color">case</em></code> will be
+ evaluated. It's also guaranteed that the
+ <code class="inline-code"><em class="code-color">defaultResult</em></code>
+ expression will only be evaluated if there was no matching
+ <code class="inline-code"><em class="code-color">case</em></code>
+ parameter.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code"><em class="code-color">case</em></code>
+ parameter expressions need not be constant values, they can be
+ arbitrary complex expressions. Of course, the same goes for and
+ the <code class="inline-code"><em class="code-color">result</em></code>,
+ <code class="inline-code"><em class="code-color">defaultResult</em></code>, and
+ <code class="inline-code"><em class="code-color">matchedValue</em></code>.</p>
+ </li>
+
+ <li>
+ <p>There's no restriction regarding the type of the
+ <code class="inline-code"><em class="code-color">case</em></code> parameter
+ values, like they can be strings, or numbers, or dates, etc.
+ However, because of how the <code class="inline-code">==</code> operator
+ works, it doesn't make sense to use
+ <code class="inline-code"><em class="code-color">case</em></code> parameters of
+ different types inside the <em>same</em>
+ <code class="inline-code">switch</code> (see earlier why).</p>
+ </li>
+
+ <li>
+ <p>Unlike with the <a href="ref_directive_switch.html"><code>case</code>
+ directive</a>, there's no fall-through behavior there, that
+ is, there's no need for an equivalent of the
+ <code class="inline-code">break</code> directive.</p>
+ </li>
+ </ul>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>If you need to switch by a boolean value, you should use the
+ <a href="ref_builtins_boolean.html#ref_builtin_then"><code>then</code>
+ built-in</a> instead, like
+ <code class="inline-code"><em class="code-color">matchedBoolean</em>?then(<em class="code-color">whenTrue</em>,
+ <em class="code-color">whenFalse</em>)</code>.</p>
+ </div>
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>If you need to do arbitrary logical tests instead of simple
+ equality comparisons at the
+ <code class="inline-code"><em class="code-color">case</em></code> parameters, you
+ can do something like this (here we tests for ranges):
+ <code class="inline-code">true?switch(priority <= 1, "low", priority == 2,
+ "medium", priority >= 3, "high")</code></p>
+ </div>
+
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_builtins_loop_var.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins_expert.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_depr_builtin.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_depr_builtin.html b/builds/2.3.26-nightly/ref_depr_builtin.html
new file mode 100644
index 0000000..65311bb
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_depr_builtin.html
@@ -0,0 +1,105 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>List of deprecated built-ins - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="List of deprecated built-ins">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_depr_builtin.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_depr_builtin.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_deprecated.html"><span itemprop="name">Deprecated FTL constructs</span></a></li><li class=
"step-3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_depr_builtin.html"><span itemprop="name">List of deprecated built-ins</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Deprecated FTL constructs","List of deprecated built-ins"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_depr_directive.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_depr_oldmacro.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_depr_builtin" itemprop="headline">List of deprecated built-ins</h1>
+</div></div><p>The following built-ins are deprecated, but still
+ working:</p><ul>
+ <li>
+ <p> <code class="inline-code">default</code>: This was deprecated
+ with the introduction of the <a href="dgui_template_exp.html#dgui_template_exp_missing_default">default value
+ operator</a>.
+ <code class="inline-code"><em class="code-color">exp1</em>?default(<em class="code-color">exp2</em>)</code>
+ is near equivalent with
+ <code class="inline-code"><em class="code-color">exp1</em>!<em class="code-color">exp2</em></code>,
+ and
+ <code class="inline-code">(<em class="code-color">exp1</em>)?default(<em class="code-color">exp2</em>)</code>
+ is near equivalent with with
+ <code class="inline-code">(<em class="code-color">exp1</em>)!<em class="code-color">exp2</em></code>.
+ The only difference is that prior to FreeMarker 2.4, the
+ <code class="inline-code">default</code> built-in has always evaluated
+ <code class="inline-code"><em class="code-color">exp2</em></code>, while the
+ default value operator only evaluates it when the default value is
+ really needed. Starting from FreeMarker 2.4, however, the
+ <code class="inline-code">default</code> built-in was improved, and behaves
+ exactly like the default value operator.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">exists</code>: This was deprecated with
+ the introduction of the <a href="dgui_template_exp.html#dgui_template_exp_missing_test">missing value test
+ operator</a>.
+ <code class="inline-code"><em class="code-color">exp1</em>?exists</code> is
+ equivalent with
+ <code class="inline-code"><em class="code-color">exp1</em>??</code>, also
+ <code class="inline-code">(<em class="code-color">exp1</em>)?exists</code> is
+ equivalent with with
+ <code class="inline-code">(<em class="code-color">exp1</em>)??</code>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">if_exists</code>: This was deprecated
+ with the introduction of the <a href="dgui_template_exp.html#dgui_template_exp_missing_default">default value
+ operator</a>.
+ <code class="inline-code"><em class="code-color">exp1</em>?if_exists</code> is
+ similar to <code class="inline-code"><em class="code-color">exp1</em>!</code>,
+ and <code class="inline-code">(<em class="code-color">exp1</em>)?if_exists</code>
+ is similar to
+ <code class="inline-code">(<em class="code-color">exp1</em>)!</code>. The
+ difference is that the default value with
+ <code class="inline-code">if_exists</code> is not only empty string, empty
+ sequence and empty hashs at the same time, but also boolean
+ <code class="inline-code">false</code> and a transform that does nothing and
+ ignores all parameters.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">web_safe</code>: the same as <a href="ref_builtins_string.html#ref_builtin_html"><code>html</code></a></p>
+ </li>
+ </ul><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_depr_directive.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_depr_oldmacro.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_depr_directive.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_depr_directive.html b/builds/2.3.26-nightly/ref_depr_directive.html
new file mode 100644
index 0000000..ec19041
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_depr_directive.html
@@ -0,0 +1,91 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>List of deprecated directives - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="List of deprecated directives">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_depr_directive.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_depr_directive.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_deprecated.html"><span itemprop="name">Deprecated FTL constructs</span></a></li><li class=
"step-3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_depr_directive.html"><span itemprop="name">List of deprecated directives</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Deprecated FTL constructs","List of deprecated directives"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_deprecated.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_depr_builtin.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_depr_directive" itemprop="headline">List of deprecated directives</h1>
+</div></div><p>The following directives are deprecated, but still
+ working:</p><ul>
+ <li>
+ <p><a href="ref_depr_oldmacro.html#ref.directive.call"><code>call</code></a>: use
+ <a href="ref_directive_userDefined.html#ref.directive.userDefined">user-defined directive
+ call</a> instead</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">comment</code>: This is the old format of
+ <code class="inline-code"><#--<em class="code-color">...</em>--></code>.
+ Anything between the <code class="inline-code"><#comment></code> and
+ <code class="inline-code"></#comment></code> will be ignored.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">foreach</code>: it is a synonym of the
+ <code class="inline-code">list</code> directive with slightly different
+ parameter syntax. The syntax is <code class="inline-code"><#foreach
+ <em class="code-color">item</em> in
+ <em class="code-color">sequence</em>></code> that is
+ equivalent with <code class="inline-code"><#list
+ <em class="code-color">sequence</em> as
+ <em class="code-color">item</em>></code>.</p>
+ </li>
+
+ <li>
+ <p><a href="ref_depr_transform.html#ref.directive.transform"><code>transform</code></a>:
+ use <a href="ref_directive_userDefined.html#ref.directive.userDefined">user-defined
+ directive call</a> instead</p>
+ </li>
+ </ul><p>The following directives are not working anymore:</p><ul>
+ <li>
+ <p>Legacy <code class="inline-code">function</code>: Originally
+ <code class="inline-code">function</code> was used to define macros, and was
+ deprecated in favor of the <code class="inline-code">macro</code> directive. As
+ of FreeMarker 2.3, this directive is reintroduced with different
+ meaning: it is used to define methods.</p>
+ </li>
+ </ul><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_deprecated.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_depr_builtin.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_depr_numerical_interpolation.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_depr_numerical_interpolation.html b/builds/2.3.26-nightly/ref_depr_numerical_interpolation.html
new file mode 100644
index 0000000..016213a
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_depr_numerical_interpolation.html
@@ -0,0 +1,135 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>#{...}: Numerical interpolation - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="#{...}: Numerical interpolation">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_depr_numerical_interpolation.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_depr_numerical_interpolation.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_deprecated.html"><span itemprop="name">Deprecated FTL constructs</span></a></li><li class=
"step-3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_depr_numerical_interpolation.html"><span itemprop="name">#{...}: Numerical interpolation</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Deprecated FTL constructs","#{...}: Numerical interpolation"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_depr_oldsyntax.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_depr_numerical_interpolation" itemprop="headline">#{...}: Numerical interpolation</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_143" data-menu-target="autoid_143">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_144" data-menu-target="autoid_144">Description</a></li></ul> </div><p>Deprecated: Use the <a href="ref_directive_setting.html#ref.setting.number_format"><code>number_format</code>
+ setting</a> and <a href="ref_builtins_number.html#ref_builtin_string_for_number">the
+ <code>string</code> built-in</a> instead. For formatting for
+ computer audience (i.e., no localized formatting) use the <a href="ref_builtins_number.html#ref_builtin_c"><code>c</code> built-in</a> (like
+ <code class="inline-code"><em class="code-color">number</em>?c</code>).</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_143">Synopsis</h2>
+
+
+
+<pre class="metaTemplate"><code class="inline-code">#{<em class="code-color">expression</em>}</code>
+or
+<code class="inline-code">#{<em class="code-color">expression</em>; <em class="code-color">format</em>}</code></pre>
+
+
+ <p>Where:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code"><em class="code-color">expression</em></code>:
+ expression that can be evaluated as a number.
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">format</em></code>:
+ optional format specifier.
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_144">Description</h2>
+
+
+ <p>The numerical interpolation is used to output a number value.
+ If the expression doesn't evaluate to a number, the evaluation ends
+ with an error.</p>
+
+ <p>The optional format specifier specifies the minimum and the
+ maximum number of displayed fractional digits using syntax
+ <code class="inline-code">m<em class="code-color">min</em>M<em class="code-color">max</em></code>.
+ For example, <code class="inline-code">m2M5</code> means "at least two, at most
+ five fractional digits". The minimum or the maximum specifier part
+ can be omitted. If only the minimum is specified, the maximum is
+ equal to the minimum. If only maximum is specified, the minimum is
+ 0.</p>
+
+ <p>The decimal separator character of the output is
+ internationalized (according the current locale setting), which
+ means that it is not necessarily a dot.</p>
+
+ <p>Unlike <code class="inline-code">${...}</code>, <code class="inline-code">#{...}</code>
+ ignores the <a href="ref_directive_setting.html#ref.setting.number_format"><code>number_format</code>
+ setting</a>. This is actually a backward compatibility quirk, but
+ it can be useful when you print numbers in situations like
+ <code class="inline-code"><a href="quertyDatabase?id=#{id}"></code>, where
+ you surely don't want grouping separators or something fancy like
+ that. However, starting from FreeMarker 2.3.3 rather use the <a href="ref_builtins_number.html#ref_builtin_c"><code>?c</code> built-in</a> for
+ this purpose, like <code class="inline-code"><a
+ href="quertyDatabase?id=${id?c}"></code>.</p>
+
+ <p>Examples. Assume that <code class="inline-code">x</code> is
+ <code class="inline-code">2.582</code> and <code class="inline-code">y</code> is
+ <code class="inline-code">4</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"> <#-- If the language is US English the output is: -->
+#{x} <#-- 2.582 -->
+#{y} <#-- 4 -->
+#{x; M2} <#-- 2.58 -->
+#{y; M2} <#-- 4 -->
+#{x; m1} <#-- 2.6 -->
+#{y; m1} <#-- 4.0 -->
+#{x; m1M2} <#-- 2.58 -->
+#{y; m1M2} <#-- 4.0 --></pre></div>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_depr_oldsyntax.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_depr_oldmacro.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_depr_oldmacro.html b/builds/2.3.26-nightly/ref_depr_oldmacro.html
new file mode 100644
index 0000000..990c1d2
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_depr_oldmacro.html
@@ -0,0 +1,198 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Old-style macro and call directives - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Old-style macro and call directives">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_depr_oldmacro.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_depr_oldmacro.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_deprecated.html"><span itemprop="name">Deprecated FTL constructs</span></a></li><li class=
"step-3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_depr_oldmacro.html"><span itemprop="name">Old-style macro and call directives</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Deprecated FTL constructs","Old-style macro and call directives"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_depr_builtin.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_depr_transform.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_depr_oldmacro" itemprop="headline">Old-style macro and call directives</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_139" data-menu-target="autoid_139">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_140" data-menu-target="autoid_140">Description</a></li></ul> </div><a name="ref.directive.oldmacro"></a><a name="ref.directive.call"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_139">Synopsis</h2>
+
+
+
+<pre class="metaTemplate"><code class="inline-code"><#macro <em class="code-color">name</em>(<em class="code-color">argName1</em>, <em class="code-color">argName2</em>, <em class="code-color">... argNameN</em>)>
+ ...
+</#macro></code>
+
+<code class="inline-code"><#call <em class="code-color">name</em>(<em class="code-color">argValue1</em>, <em class="code-color">argValue2</em>, <em class="code-color">... argValueN</em>)></code></pre>
+
+
+ <p>Where:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code"><em class="code-color">name</em></code>: name
+ of the macro (not expression)
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">argName1</em></code>,
+ <code class="inline-code"><em class="code-color">argName2</em></code>, ...etc.:
+ the name of the <a href="dgui_misc_var.html">local
+ variables</a> store the parameter values (not
+ expression)
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">argValue1</em></code>,
+ <code class="inline-code"><em class="code-color">argValue2</em></code>,
+ ...etc.: expressions, the value of the parameters
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_140">Description</h2>
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This is the documentation of FreeMarker 2.1 macro and macro
+ related directives. These are still working, but deprecated. You
+ may want to read the FreeMarker 2.2+ references: <a href="ref_directive_macro.html#ref.directive.macro">macro, return</a>, <a href="ref_directive_userDefined.html#ref.directive.userDefined">user-defined directive
+ call</a></p>
+ </div>
+
+
+ <p>A macro is a template fragment with an associated name. You
+ can use that named fragment on multiple places in your template, so
+ it helps in repetitive tasks. A macro can have parameters that
+ influence the output generated when you use the macro.</p>
+
+ <p>You define a macro with the <code class="inline-code">macro</code>
+ directive, and then you can use the defined macro in the whole
+ template. The <code class="inline-code">macro</code> directive itself does not
+ write anything to the output, it just defines the macro. For example
+ this will define a macro called <code class="inline-code">warning</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><strong><#macro warning(message)></strong>
+ <div align=center>
+ <table border=1 bgcolor=yellow width="80%"><tr><td align=center>
+ <b>Warning!</b>
+ <p>${message}
+ </td></tr></table>
+ </div>
+<strong></#macro></strong></pre></div>
+
+ <p>The macro definition body (the section between the macro
+ start-tag and end-tag) will be processed whenever you use the
+ <code class="inline-code">call</code> directive with the name of the macro. For
+ example this calls the macro called
+ <code class="inline-code">warning</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#call warning("Unplug the machine before opening the cover!")></pre></div>
+
+ <p>and will write this to the output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> <div align=center>
+ <table border=1 bgcolor=yellow width="80%"><tr><td align=center>
+ <b>Warning!</b>
+ <p>Unplug the machine before opening the cover!
+ </td></tr></table>
+ </div>
+ </pre></div>
+
+ <p>The parameters passed in as parameters to the
+ <code class="inline-code">call</code> directive will be accessible in the macro
+ definition body as <a href="dgui_misc_var.html">local
+ variables</a>.</p>
+
+ <p>When you call a macro, you must specify the same number of
+ parameters as were specified in the macro definition. For example if
+ this is the macro definition:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro test(a, b, c)>Nothing...</#macro></pre></div>
+
+ <p>then these are valid macro calls:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#call test(1, 2, 3)>
+<#call test("one", 2 + x, [1234, 2341, 3412, 4123])></pre></div>
+
+ <p>If a macro has no parameters, then you can omit the
+ parentheses:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro test>mooo</#macro>
+<#call test></pre></div>
+
+ <p>When you define a macro it will be available in the template,
+ where you have defined it only. But probably you want to use the
+ same macros in more templates. In this case you can store your macro
+ definitions in a common file, and then include that file in all
+ templates where you need those macros.</p>
+
+ <p>It's fine to call a macro that's defined further down in the
+ template <span class="marked-for-programmers">(since macros are defined at
+ parse time, not in process time)</span>. However, if the macro
+ definitions are inserted with <code class="inline-code">include</code> directive,
+ they will not be available until FreeMarker has executed the
+ <code class="inline-code">include</code> directive.</p>
+
+ <p>You can leave a macro definition body before the
+ <code class="inline-code"></#macro></code> tag with the
+ <code class="inline-code">return</code> directive.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_depr_builtin.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_depr_transform.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_depr_oldsyntax.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_depr_oldsyntax.html b/builds/2.3.26-nightly/ref_depr_oldsyntax.html
new file mode 100644
index 0000000..680f2db
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_depr_oldsyntax.html
@@ -0,0 +1,131 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Old FTL syntax - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Old FTL syntax">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_depr_oldsyntax.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_depr_oldsyntax.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_deprecated.html"><span itemprop="name">Deprecated FTL constructs</span></a></li><li class=
"step-3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_depr_oldsyntax.html"><span itemprop="name">Old FTL syntax</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Deprecated FTL constructs","Old FTL syntax"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_depr_transform.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_depr_numerical_interpolation.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_depr_oldsyntax" itemprop="headline">Old FTL syntax</h1>
+</div></div><p>With the old FTL syntax the <code class="inline-code">#</code> was not
+ required (prior 2.1 not even allowed) in the FTL tags. For example,
+ you could write this:</p>
+
+<div class="code-wrapper"><pre class="code-block code-template"><html>
+<head>
+ <title>Welcome!</title>
+</head>
+<body>
+ <h1>Welcome ${user}!</h1>
+ <p>We have there animals:
+ <ul>
+ <strong><list animals as animal></strong>
+ <li>${animal.name} for ${animal.price} Euros
+ <strong></list></strong>
+ </ul>
+ <strong><include "common_footer.html"></strong>
+</body>
+</html></pre></div><p>While the <code class="inline-code">#</code>-less syntax was more natural for
+ HTML authors, it had too many drawbacks, so finally we have decided to
+ deprecate it. With the newer syntax (a.k.a "strict
+ syntax"), the <code class="inline-code">#</code> is strictly required. That
+ is, things like <code class="inline-code"><include
+ "common_footer.html"></code> will go to the output as is, since
+ they are not considered as FTL tags. Note that user-defined directives
+ use <code class="inline-code">@</code> <em>instead of</em>
+ <code class="inline-code">#</code>.</p><p>However, to give users time to prepare for this change, in
+ FreeMarker 2.1 and 2.2 the usage of <code class="inline-code">#</code> is optional,
+ unless the programmer enables strict syntax mode in the FreeMarker
+ configuration by calling <code class="inline-code">setStrictSyntaxMode(true)</code>
+ on <code class="inline-code">Configuration</code>. In fact, we strongly recommend
+ this to programmers. Starting from some later release this setting
+ will be initially set to <code class="inline-code">true</code>. Also, you can
+ specify if you want to use strict syntax or old syntax in the template
+ files with the <a href="ref_directive_ftl.html#ref.directive.ftl"><code>ftl</code>
+ directive</a>.</p><p>The advantages of "strict syntax" over the legacy
+ FTL syntax are:</p><ul>
+ <li>
+ <p>Since all
+ <code class="inline-code"><#<em class="code-color">...</em>></code> and
+ <code class="inline-code"></#<em class="code-color">...</em>></code> are
+ reserved for FTL:</p>
+
+ <ul>
+ <li>
+ <p>We can introduce new directives without breaking
+ backward compatibility.</p>
+ </li>
+
+ <li>
+ <p>We can detect if you made a typo, i.e.
+ <code class="inline-code"><#inculde
+ <em class="code-color">...</em>></code> is treated as
+ parse-time error, rather than silently treated as simple
+ text.</p>
+ </li>
+
+ <li>
+ <p>It is easier for third-party tools to handle templates
+ (e.g. do syntax highlighting), especially since they don't
+ have to know about the new directives introduced with new
+ releases.</p>
+ </li>
+
+ <li>
+ <p>Templates are more readable, since it is easier to spot
+ <code class="inline-code"><#...></code> tags embedded into HTML or
+ other markup.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p><code class="inline-code"><#</code> and <code class="inline-code"></#</code> is
+ illegal XML (except in CDATA sections), and illegal in almost all
+ other SGML applications, so they can't interfere with the tags
+ used in the static text parts (e.g. if you have
+ <code class="inline-code">include</code> element in the generated XML).</p>
+ </li>
+ </ul><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_depr_transform.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_depr_numerical_interpolation.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[07/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_21.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_21.html b/builds/2.3.26-nightly/versions_2_3_21.html
new file mode 100644
index 0000000..6740ac9
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_21.html
@@ -0,0 +1,1419 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.21 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.21">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_21.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_21.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_21.html"><span itemprop="name">2.3.21</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.21"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_22.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_20.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_21" itemprop="headline">2.3.21</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_171" data-menu-target="autoid_171">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_172" data-menu-target="autoid_172">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_173" data-menu-target="autoid_173">Other changes</a></li></ul> </div><p>Date of release: 2014-10-12</p><p>Note that since 2.3.21 is designed to be fully backward
+ compatible with the previous 2.3.x releases, <em>some of the
+ improvements and fixes described below are only activated when you
+ specifically ask for 2.3.21 "incompatible
+ improvements"</em>, because they could, with very small
+ chance, break existing applications. If the dependent project is still
+ actively developed, allowing 2.3.21 "incompatible improvements" is
+ highly recommended. See <a href="pgui_config_incompatible_improvements.html#pgui_config_incompatible_improvements_how_to_set">how to set
+ "incomplatible improvements" here</a>.</p><p>Note that we have changed our proprietary BSD-style license to
+ Apache License, Version 2.0. See the <a href="app_license.html">new
+ license here</a>.</p><p>Note that the minimum required Java version was increased from
+ 1.2 to 1.4.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_171">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>Improved ranges:</p>
+
+ <ul>
+ <li>
+ <p>Added ranges with exclusive end:
+ <code class="inline-code"><em class="code-color">start</em>..<<em class="code-color">end</em></code>
+ (also can be written as
+ <code class="inline-code"><em class="code-color">start</em>..!<em class="code-color">end</em></code>).
+ <a href="dgui_template_exp.html#dgui_template_exp_direct_ranges">More...</a></p>
+ </li>
+
+ <li>
+ <p>Added length limited ranges:
+ <code class="inline-code"><em class="code-color">start</em>..*<em class="code-color">length</em></code>:
+ For example, <code class="inline-code">10..*4</code> gives <code class="inline-code">[10,
+ 11, 12, 13]</code>, <code class="inline-code">10..*-4</code> gives
+ <code class="inline-code">[10, 9, 8, 7]</code>, and
+ <code class="inline-code">10..*0</code> gives <code class="inline-code">[]</code>. When
+ these kind of ranges are used for slicing, the slice will
+ end without error if the end of the sliced sequence or
+ string is reached before the specified range length was
+ reached. Thus, for example, to take the first 10 characters
+ from the string <code class="inline-code">s</code>, or less if
+ <code class="inline-code">s</code> is shorter than 10 characters, you can
+ use <code class="inline-code">s[0..*10]</code>. <a href="dgui_template_exp.html#dgui_template_exp_seqenceop_slice">More...</a></p>
+ </li>
+
+ <li>
+ <p>Square bracket now accepts range values from any
+ source, like <code class="inline-code"><#assign r = 1..3>
+ ${'foobar'[r]}</code> will print
+ <code class="inline-code">"oob"</code>. Earlier it has only supported
+ ranges that were specified directly inside the square
+ brackets, like <code class="inline-code">'foobar'[1..3]</code>.</p>
+ </li>
+
+ <li>
+ <p>When slicing a sequence with a right-unbounded range,
+ it's now allowed to have a range start index that's one
+ higher than the last index of the sliced sequence. For
+ example, <code class="inline-code">['x', 'y'][2..]</code> is not an error
+ anymore, but an empty sequence. (Of course, <code class="inline-code">['x',
+ 'y'][3..]</code> is still an error.)</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code"><em class="code-color">someString</em>?substring(<em class="code-color">from</em>,
+ <em class="code-color">toExclusive</em>)</code> and
+ <code class="inline-code"><em class="code-color">someString</em>?substring(<em class="code-color">from</em>)</code>
+ are now deprecated; use this slicing expression instead:
+ <code class="inline-code"><em class="code-color">someString</em>[<em class="code-color">from</em>..<<em class="code-color">toExclusive</em>]</code>
+ and
+ <code class="inline-code"><em class="code-color">someString</em>[<em class="code-color">from</em>..]</code>.
+ A warning if you are processing XML: Since slicing
+ expressions work both for sequences and strings, and XML
+ nodes in FTL are typically both sequences and strings at the
+ same time, there the equivalent expression is
+ <code class="inline-code"><em class="code-color">someXmlNode</em>?string[<em class="code-color">from</em>..<<em class="code-color">toExclusive</em>]</code>
+ and
+ <code class="inline-code"><em class="code-color">exp</em>?string[<em class="code-color">from</em>..]</code>,
+ because without the <code class="inline-code">?string</code> it would
+ slice the node sequence instead of the text value of the
+ node.</p>
+ </li>
+
+ <li>
+ <p>If the <code class="inline-code">incompatible_improvements</code> in
+ the FreeMarker configuration is set to at least 2.3.21,
+ right-unbounded ranges become readable (like
+ <code class="inline-code">#list</code>-able). Earlier they could only be
+ used for slicing, and behaved like empty sequences
+ otherwise.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>New built-in, <code class="inline-code">?url_path</code>: This is the
+ same as <a href="ref_builtins_string.html#ref_builtin_url">the
+ <code>url</code> built-in</a>, except that it doesn't
+ escape slash (<code class="inline-code">/</code>) characters. This meant to be
+ used for converting paths (like paths coming from the OS or some
+ content repository) that use slash (not backslash!) to a path
+ the can be inserted into the path part of an URL.</p>
+ </li>
+
+ <li>
+ <p>New built-ins for string manipulation:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code"><em class="code-color">someString</em>?keep_before(<em class="code-color">substring</em>[,
+ <em class="code-color">flags</em>])</code>: <a href="ref_builtins_string.html#ref_builtin_keep_before">More...</a></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code"><em class="code-color">someString</em>?keep_after(<em class="code-color">substring</em>[,
+ <em class="code-color">flags</em>])</code>: <a href="ref_builtins_string.html#ref_builtin_keep_after">More...</a></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code"><em class="code-color">someString</em>?remove_beginning(<em class="code-color">substring</em>)</code>:
+ <a href="ref_builtins_string.html#ref_builtin_remove_beginning">More...</a></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code"><em class="code-color">someString</em>?remove_ending(<em class="code-color">substring</em>)</code>:
+ <a href="ref_builtins_string.html#ref_builtin_remove_ending">More...</a></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code"><em class="code-color">someString</em>?ensure_starts_with(<em class="code-color">substring</em>[,
+ <em class="code-color">substitution</em>[,
+ <em class="code-color">flags</em>]])</code>: <a href="ref_builtins_string.html#ref_builtin_ensure_starts_with">More...</a></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code"><em class="code-color">someString</em>?ensure_ends_with(<em class="code-color">substring</em>)</code>:
+ <a href="ref_builtins_string.html#ref_builtin_ensure_ends_with">More...</a></p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p><code class="inline-code"><em class="code-color">someString</em>?number</code>
+ now recognizes all XML Schema number formats, like
+ <code class="inline-code">NaN</code>, <code class="inline-code">INF</code>,
+ <code class="inline-code">-INF</code>, plus the Java-native formats
+ <code class="inline-code">Infinity</code> and
+ <code class="inline-code">-Infinity</code>.</p>
+ </li>
+
+ <li>
+ <p>If <code class="inline-code">incompatible_improvements</code> in the
+ FreeMarker configuration is set to at least 2.3.21,
+ <code class="inline-code"><em class="code-color">someNumber</em>?c</code> will
+ return <code class="inline-code">"INF"</code>, <code class="inline-code">"-INF"</code> and
+ <code class="inline-code">"NaN"</code> for positive/negative infinity and IEEE
+ floating point Not-a-Number, respectively. These are the XML
+ Schema compatible representations of these special values.
+ Earlier it has returned what
+ <code class="inline-code">java.text.DecimalFormat</code> did with US locale,
+ none of which was understood by any (common) computer
+ language.</p>
+ </li>
+
+ <li>
+ <p>New built-in:
+ <code class="inline-code"><em class="code-color">someString</em>?boolean</code>.
+ This is for example useful for converting "true" and "false"
+ strings coming from XML to real boolean values. <a href="ref_builtins_string.html#ref_builtin_boolean">More...</a></p>
+ </li>
+
+ <li>
+ <p>Date/time/date-time related changes:</p>
+
+ <ul>
+ <li>
+ <p>Added new kind of
+ <code class="inline-code">date_format</code>/<code class="inline-code">datetime_format</code>/<code class="inline-code">time_format</code>
+ setting values: XML Schema formats, starting with
+ <code class="inline-code">"xs"</code> and ISO 8601:2004 formats, starting
+ with <code class="inline-code">"iso"</code>. The format string can be
+ continued with various space (or <code class="inline-code">_</code>)
+ separated options, like <code class="inline-code">h</code> or
+ <code class="inline-code">m</code> or <code class="inline-code">s</code> or
+ <code class="inline-code">ms</code> for setting shown accuracy,
+ <code class="inline-code">nz</code> or <code class="inline-code">fz</code> for setting
+ time zone offset visibility, and <code class="inline-code">u</code> or,
+ <code class="inline-code">fu</code> for using UTC time zone . For example,
+ to use ISO 8601 with minute precision and without the zone
+ offset being shown, set the
+ <code class="inline-code">datetime_format</code> setting to <code class="inline-code">"iso
+ m nz"</code>, so then the output will be like
+ <code class="inline-code">2014-09-03T20:56</code>. <a href="ref_directive_setting.html#topic.dateTimeFormatSettings">More...</a></p>
+ </li>
+
+ <li>
+ <p>Because anything that's accepted as
+ <code class="inline-code">date_format</code>/<code class="inline-code">datetime_format</code>/<code class="inline-code">time_format</code>
+ setting value can also be used with the
+ <code class="inline-code">?string</code> and
+ <code class="inline-code">?date</code>/<code class="inline-code">?time</code>/<code class="inline-code">?datetime</code>
+ build-ins, you can use the new formats like
+ <code class="inline-code">someDate?string.xs</code> and
+ <code class="inline-code">someString?date.xs</code>. (For the
+ <code class="inline-code">"xs"</code> and <code class="inline-code">"iso"</code>
+ formats, <code class="inline-code">_</code> can be used instead of space,
+ which means that, for example, you can write
+ <code class="inline-code">lastModified?string.iso_m_u</code> instead of
+ the more verbose <code class="inline-code">lastModified?string["iso m
+ u"]</code>.)</p>
+ </li>
+
+ <li>
+ <p>That <code class="inline-code">"iso"</code> and
+ <code class="inline-code">"xs"</code> are now possible
+ <code class="inline-code">date_format</code>/<code class="inline-code">datetime_format</code>/<code class="inline-code">time_format</code>
+ setting values also means that such values can now be parsed
+ too via
+ <code class="inline-code">?date</code>/<code class="inline-code">?time</code>/<code class="inline-code">?datetime</code>.
+ The main application is with processing XML DOM-s, as there
+ values are coming in as strings, and now you can do
+ something like <code class="inline-code">order.confirmDate?date.xs</code>
+ to convert them to real dates.</p>
+ </li>
+
+ <li>
+ <p>The <a href="ref_builtins_date.html#ref_builtin_date_iso"><code>?iso_...</code>
+ built-ins</a> are now deprecated in favor of the new
+ setting values described above. They can be set as the
+ default date/time/date-time format, seamlessly fit into the
+ formatting architecture (and thus can parse strings too),
+ and has more/better options (<code class="inline-code">ms</code> always
+ shows 3 millisecond digits, <code class="inline-code">fz</code> for
+ forcing showing time zone offset).</p>
+ </li>
+
+ <li>
+ <p>If the "incompatible improvements"
+ configuration setting is at least 2.3.21, the
+ <code class="inline-code">?iso_...</code> built-ins won't show time zone
+ offset for <code class="inline-code">java.sql.Time</code> values anymore.
+ Most databases store time values that aren't in any time
+ zone, but just store hour, minute, second, and decimal
+ second field values, so showing the time zone doesn't make
+ sense. (Notable exceptions are PostgreSQL "time with time
+ zone" columns, where
+ <code class="inline-code"><em class="code-color">mzTime</em>?string.iso_fz</code>
+ could be used.)</p>
+ </li>
+
+ <li>
+ <p>Added <code class="inline-code">?is_time</code>,
+ <code class="inline-code">?is_datetime</code>,
+ <code class="inline-code">?is_date_only</code> (should be called
+ <code class="inline-code">?is_date</code>, but that was already taken) and
+ <code class="inline-code">?is_unknown_date_like</code> to check the exact
+ type of a date-like value.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">?is_date</code> is now a deprecated name,
+ use <code class="inline-code">?is_date_like</code> instead. This is
+ because <code class="inline-code">?is_date</code> sounds like it checks if
+ the value is a date without time part, but actually it also
+ returns <code class="inline-code">true</code> for time, date-time, and
+ unknown date-like values.</p>
+ </li>
+
+ <li>
+ <p>Added <code class="inline-code">?date_if_unknown</code>,
+ <code class="inline-code">?time_if_unknown</code> and
+ <code class="inline-code">?datetime_if_unknown</code> built-ins, which
+ mark a date-like value with some of the sub-types: date
+ without time, time, or date-time, respectively. However, if
+ the value already holds this information, the built-in has
+ no effect. That is, it will never convert the sub-type of a
+ value, it only adds the sub-type if it was unknown.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: ISO 8601 dates (via
+ <code class="inline-code">?iso_...</code> and <code class="inline-code">"iso"</code>
+ format settings) now use proleptic Gregorian calendar for
+ the years before 1582, rather than Julian calendar. This is
+ (indirectly) required by the standard, and it's also how the
+ default Sun/Oracle Java XML Schema date/time/dateTime parser
+ works.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Error message quality improvements (targeting frequent
+ support requests and some error message bugs):</p>
+
+ <ul>
+ <li>
+ <p>Fixed glitch where if an <code class="inline-code">#if</code> had
+ and <code class="inline-code">#else</code> or <code class="inline-code">#elseif</code>,
+ the
+ <code class="inline-code">#if</code>/<code class="inline-code">#else</code>/<code class="inline-code">#elseif</code>
+ wasn't hidden in the FTL stack trace when the error was
+ inside its nested block.</p>
+ </li>
+
+ <li>
+ <p>Some new context sensitive hints in undefined variable
+ exception error messages.</p>
+ </li>
+
+ <li>
+ <p>Fixed unclosed directive error messages at end of file
+ where the wrong unclosed directive name was reported</p>
+ </li>
+
+ <li>
+ <p>Better type error messages when accessing XML data
+ (applies when wrapped with
+ <code class="inline-code">freemarker.ext.dom</code>):</p>
+
+ <ul>
+ <li>
+ <p>Trying to use
+ <code class="inline-code">node.<em class="code-color">noSuchChildNodes</em></code>
+ on a place where scalar value is expected will explain
+ that the problem is that you had no matches in the
+ constructing XML query.</p>
+ </li>
+
+ <li>
+ <p>Trying to use
+ <code class="inline-code">node.<em class="code-color">multipleSuchChildNodes</em></code>
+ on a place where scalar value is expected will explain
+ that the problem is that you had multiple matches in the
+ constructing XML query.</p>
+ </li>
+
+ <li>
+ <p>Trying to use
+ <code class="inline-code">node.<em class="code-color">exactlyOneChildNode</em></code>
+ as number, date/time/date-time or boolean will explain
+ that values coming from XML are always strings (text),
+ and must be converted explicitly via
+ <code class="inline-code">?number</code>, <code class="inline-code">?boolean</code>,
+ <code class="inline-code">?date.xs</code>, etc.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Trying to use <code class="inline-code">obj.someMethod</code>
+ without <code class="inline-code">()</code> on a place where method value
+ is not expected will recommend calling the method.</p>
+ </li>
+
+ <li>
+ <p>Trying to use methods like
+ <code class="inline-code">obj.getFoo</code> or
+ <code class="inline-code">obj.isFoo</code> without <code class="inline-code">()</code>on
+ a place where method value is not expected will recommend
+ using the <code class="inline-code">obj.foo</code> form.</p>
+ </li>
+
+ <li>
+ <p>Messages are now much more readable when rendered in
+ environments that don't obey to line-breaks. (This often
+ happens in improperly implemented HTML error pages and logs
+ viewers.)</p>
+ </li>
+
+ <li>
+ <p>Better FTL instruction stack traces:</p>
+
+ <ul>
+ <li>
+ <p>Error messages now contain up to 10 lines of FTL
+ stack trace (unless it's on the top of a full FTL stack
+ trace), because the FTL stack trace wasn't printed at
+ all when the exception was a cause exception in a Java
+ stack trace, or when only the value of
+ <code class="inline-code">getMessage()</code> was printed instead of a
+ stack trace.</p>
+ </li>
+
+ <li>
+ <p>The FTL stack trace is now more self explanatory
+ as it contains more text labels.</p>
+ </li>
+
+ <li>
+ <p>Stack frames that belong to nestings are now
+ marked differently, and are filtered out when the stack
+ trace wouldn't fit into the error message
+ otherwise.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Bug fixed: <code class="inline-code">?substring</code> has thrown
+ low level
+ <code class="inline-code">java.lang.IndexOutOfBoundsException</code>-s
+ instead of more descriptive
+ <code class="inline-code">TemplateModelException</code>-s with FTL stack
+ trace.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: Slicing with ranges sometimes thrown low
+ level
+ <code class="inline-code">java.lang.IndexOutOfBoundsException</code>-s
+ instead of more descriptive
+ <code class="inline-code">TemplateModelException</code>-s with FTL stack
+ trace.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed [<a href="https://sourceforge.net/p/freemarker/bugs/402/">402</a>]:
+ Fixed misleading parser error message when a directive
+ called without its required parameters (like
+ <code class="inline-code"><#list></code>) was reported as unknown
+ directive.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed [<a href="http://sourceforge.net/p/freemarker/bugs/222/">222</a>]:
+ Poor quality error message when
+ <code class="inline-code"><em class="code-color">someString</em>[<em class="code-color">someIndex</em>]</code>
+ fails with string index out of bounds.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed [<a href="http://sourceforge.net/p/freemarker/bugs/27/">27</a>]:
+ Not very good quality error messages when
+ <code class="inline-code">#import</code>-ing a template whose parsing
+ fails.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>New <code class="inline-code">include</code> directive option,
+ <code class="inline-code">ignore_missing=<em class="code-color">boolean</em></code>.
+ When this is set to <code class="inline-code">true</code>, and the template to
+ include is missing, the error will be silently ignored, and
+ nothing will be included.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">setting</code> directive can now set the
+ <code class="inline-code">output_encoding</code> setting.</p>
+ </li>
+
+ <li>
+ <p>New special variable: <code class="inline-code">.locale_object</code>.
+ This is like <code class="inline-code">.locale</code>, except that it's a
+ <code class="inline-code">java.util.Locale</code> object, not a string. This
+ is handy if you want to pass the current locale to Java
+ methods.</p>
+ </li>
+
+ <li>
+ <p>If <code class="inline-code">incompatible_improvements</code> in the
+ FreeMarker configuration is set to at least 2.3.21, hash
+ <em>literals</em> that repeat keys now only have the
+ key once with <code class="inline-code">?keys</code>, and only has the last
+ value associated to that key with <code class="inline-code">?values</code>.
+ This is consistent with the behavior of
+ <code class="inline-code"><em class="code-color">hash</em>[<em class="code-color">key</em>]</code>
+ and how maps work in Java.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <code class="inline-code">?is_enumerable</code> has returned
+ <code class="inline-code">true</code> for Java methods get from Java objects,
+ despite that those values aren't <code class="inline-code"><#list
+ ...></code>-able. (This is actually a historical quirk of
+ <code class="inline-code">BeansWrapper</code>, not a bug in
+ <code class="inline-code">?is_enumerable</code>, but now
+ <code class="inline-code">?is_enumerable</code> is aware of this exceptional
+ case.)</p>
+ </li>
+
+ <li>
+ <p>Bug fixed [<a href="http://sourceforge.net/p/freemarker/bugs/257/">257</a>]:
+ The result value of <code class="inline-code">?matches</code> wasn't
+ "reentrant". For example, you couldn't list the
+ matches inside another listing where you are also listing
+ exactly the same result value (stored in a common variable), as
+ they would consume from the same iterator. Most importantly,
+ even accessing the <code class="inline-code">?size</code> of the same result
+ value has terminated the outer listing of the same value.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed [<a href="http://sourceforge.net/p/freemarker/bugs/229/">229</a>]:
+ If you set <code class="inline-code">incompatible_improvements</code> to
+ 2.3.21 (or higher), unclosed comments (<code class="inline-code"><#--
+ <em class="code-color">...</em></code>) and
+ <code class="inline-code">#noparse</code>-s won't be silently closed at the
+ end of template anymore, but cause a parsing error
+ instead.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_172">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>Added new <code class="inline-code">Configuration</code> constructor,
+ <code class="inline-code">Configuration(Version
+ incompatibleImprovements)</code>. This deprecates the vague
+ <code class="inline-code">Configuration()</code> constructor, and makes using
+ <code class="inline-code">setIncompatibleImprovements(Version)</code> needless
+ in most cases. See an example <a href="pgui_quickstart_createconfiguration.html">here...</a></p>
+ </li>
+
+ <li>
+ <p>When setting the
+ <code class="inline-code">incompatible_improvements</code> setting (like with
+ the constructor above) to 2.3.21, two setting defaults
+ change:</p>
+
+ <ul>
+ <li>
+ <p>The default of the <code class="inline-code">object_wrapper</code>
+ setting
+ (<code class="inline-code">Configuration.getObjectWrapper()</code>)
+ changes from
+ <code class="inline-code">ObjectWrapper.DEFAULT_WRAPPER</code> to another
+ almost identical <code class="inline-code">DefaultObjectWrapper</code>
+ singleton, returned by <code class="inline-code">new
+ DefaultObjectWrapperBuilder(Version).build()</code>. The
+ new default object wrapper's "incompatible
+ improvements" version is set to the same as of the
+ <code class="inline-code">Configuration</code>. (See later regarding the
+ 2.3.21 "incompatible improvements" of
+ <code class="inline-code">BeansWrapper</code> and
+ <code class="inline-code">DefaultObjectWrapper</code>). Furthermore, the
+ new default object wrapper doesn't allow changing its
+ settings; setter methods will throw
+ <code class="inline-code">IllegalStateException</code>. (If anything tries
+ to call setters on the old default in your application,
+ that's a dangerous bug that won't remain hidden now. As the
+ old default is a singleton too, potentially shared by
+ independently developed components, most of them expects the
+ out-of-the-box behavior from it (and the others are
+ necessarily buggy). Also, then concurrency glitches can
+ occur (and even pollute the class introspection cache)
+ because the singleton is modified after publishing.)</p>
+ </li>
+
+ <li>
+ <p>The default of the <code class="inline-code">template_loader</code>
+ setting
+ (<code class="inline-code">Configuration.getTemplateLoader()</code>})
+ changes to <code class="inline-code">null</code>, which means that
+ FreeMarker will not find any templates. Earlier the default
+ was a <code class="inline-code">FileTemplateLoader</code> that used the
+ current directory as the root. This was dangerous and
+ fragile as you usually don't have good control over what the
+ current directory will be. Luckily, the old default almost
+ never looked for the templates at the right place anyway, so
+ pretty much all applications had to set
+ <code class="inline-code">template_loader</code>, so it's unlikely that
+ changing the default breaks your application.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>New <code class="inline-code">BeansWrapper</code>,
+ <code class="inline-code">DefaultObjectWrapper</code> and
+ <code class="inline-code">SimpleObjectWrapper</code> constructor that takes a
+ <code class="inline-code">Version</code>
+ <code class="inline-code">incompatibleImprovements</code> argument. This has
+ the same role as the
+ <code class="inline-code">incompatible_improvements</code> setting of the
+ <code class="inline-code">Configuration</code>, but it applies to the
+ <code class="inline-code">ObjectWrapper</code> instead. (As
+ <code class="inline-code">ObjectWrapper</code>-s are often shared among
+ multiple <code class="inline-code">Configuration</code>-s, so they can't use
+ that setting of the <code class="inline-code">Configuration</code>.) In new or
+ actively developed projects it's recommended to use
+ <code class="inline-code">Configuration.VERSION_2_3_21</code> now. The
+ constructor without the <code class="inline-code">Version</code> parameter is
+ now deprecated.</p>
+ </li>
+
+ <li>
+ <p>Safer and more memory-efficient way of managing singletons
+ of <code class="inline-code">DefaultObjectWrapper</code>-s and
+ <code class="inline-code">BeansWrapper</code>-s that are possibly shared by
+ independently developed subsystems:</p>
+
+ <ul>
+ <li>
+ <p>Instead of <code class="inline-code">new
+ DefaultObjectWrapper(<em class="code-color">...</em>)</code>
+ and <code class="inline-code">new
+ BeansWrapper(<em class="code-color">...</em>)</code>, from
+ now on you should use <code class="inline-code">new
+ DefaultObjectWrapperBuilder(version).build()</code> and
+ <code class="inline-code">new BeansWrapperBuilder(version).build()</code>.
+ (The builder objects have properties (configuration
+ settings) like <code class="inline-code">BeansWrapper</code> has, which
+ specify the properties of the objects created.) The created
+ objects are <em>singletons</em> (VM-wide, or at
+ least Web-Application-wide) and read-only (means,
+ non-configurable, hence safe to share). The main benefit of
+ using these factories instead of creating new instances is
+ that it allows FreeMarker to share the class introspection
+ caches (an internal part of
+ <code class="inline-code">BeansWrapper</code>-s/<code class="inline-code">DefaultObjectWrapper</code>-s
+ that is expensive to populate) among the returned instances.
+ This allow sharing the caches (and the object wrappers)
+ between components that aren't aware of each other and use
+ FreeMarker internally.</p>
+ </li>
+
+ <li>
+ <p>Deprecated the static fields
+ <code class="inline-code">ObjectWrapper.DEFAULT_WRAPPER</code>,
+ <code class="inline-code">BEANS_WRAPPER</code> and
+ <code class="inline-code">SIMPLE_WRAPPER</code>, because these
+ <code class="inline-code">ObjectWrapper</code>-s are configurable (not
+ read-only), and thus dangerous to use as singletons (a badly
+ behaving 3rd party component can mess them up). Use the
+ factories described above instead. They are also more
+ flexible, as you can specify the desired
+ incompatible-improvements version for them and various other
+ <code class="inline-code">BeansWrapper</code> settings.</p>
+ </li>
+
+ <li>
+ <p>Deprecated all <code class="inline-code">SimpleHash</code>,
+ <code class="inline-code">SimpleCollection</code> and
+ <code class="inline-code">SimpleSequence</code> constructors that didn't
+ take an <code class="inline-code">ObjectWrapper</code> argument, as they
+ have usually used
+ <code class="inline-code">ObjectWrapper.DEFAULT_WRAPPER</code> as the
+ default, which itself is deprecated.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">BeansWrapper</code>,
+ <code class="inline-code">DefaultObjectWrapper</code> and
+ <code class="inline-code">SimpleObjectWrapper</code> now implements the
+ <code class="inline-code">freemarker.template.utility.WriteProtectable</code>
+ interface with which the configuration properties of the
+ object wrapper can be set permanently to read-only by
+ calling <code class="inline-code">writeProtect()</code>. An attempt to
+ call a setter on a such <code class="inline-code">ObjectWrapper</code>
+ will immediately cause
+ <code class="inline-code">IllegalStateException</code>. (This is what's
+ used for the singletons returned by the
+ <code class="inline-code">getInstance</code> methods too; see
+ earlier).</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>The value of the <code class="inline-code">time_zone</code> setting,
+ when you specify it with a <code class="inline-code">String</code> (in a
+ <code class="inline-code">java.util.Properties</code> object, or via
+ <code class="inline-code"><#setting
+ <em class="code-color">...</em>></code>) can now be
+ <code class="inline-code">"JVM default"</code> to use the JVM default time
+ zone. The JVM default is the default value of that setting
+ anyway, but now you can state this explicitly, or restore this
+ value if it was overridden earlier.</p>
+ </li>
+
+ <li>
+ <p>Added new configuration setting,
+ <code class="inline-code">sql_date_and_time_time_zone</code>
+ (<code class="inline-code">Configurable.setSQLDateAndTimeTimeZone(TimeZone)</code>).
+ When this is set to non-<code class="inline-code">null</code>, the time zone
+ used when dealing with <code class="inline-code">java.sql.Date</code> and
+ <code class="inline-code">java.sql.Time</code> values will be this time zone
+ instead of the value of the <code class="inline-code">time_zone</code>
+ FreeMarker configuration setting. This is useful because JDBC
+ will, usually, construct the Java <code class="inline-code">Date</code>
+ objects so that they will show the year-month-day and
+ hour-minute-seconds values from the database "as
+ is" if you render them using the JVM default time zone.
+ As time zone conversions for SQL date-only and SQL time-only
+ values doesn't make much sense (unlike for SQL timestamps), you
+ should certainly set this setting to the JVM default time zone
+ (<code class="inline-code">TimeZone.getDefault()</code>, or if you configure
+ FreeMarker via <code class="inline-code">java.util.Properties</code>, as
+ property value "JVM default"). The default value is
+ <code class="inline-code">null</code> for backward compatibility. For more
+ details see the JavaDoc of
+ <code class="inline-code">Configurable.setSQLDateAndTimeTimeZone(TimeZone)</code>.</p>
+ </li>
+
+ <li>
+ <p>When configuring FreeMarker with
+ <code class="inline-code">java.util.Properties</code> (typically, when the
+ configuration is stored in a <code class="inline-code">.properties</code>
+ file), for the settings where you could specify a fully
+ qualified class name (most notably for the
+ <code class="inline-code">object_wrapper</code> setting) now you can also
+ specify constructor arguments and JavaBean property assignments.
+ For example, now you can write
+ <code class="inline-code">object_wrapper=com.example.MyObjectWrapper(1, 2,
+ exposeFields=true, cacheSize=5000)</code>that's nearly
+ equivalent with this Java code: <code class="inline-code">obj = new
+ com.example.MyObjectWrapper(1, 2); obj.setExposeFields(true);
+ obj.setCacheSize(5000); object_wrapper = obj;</code>. If you
+ are using this new syntax (i.e., if you have parentheses after
+ the class name, even if they are empty), and there's a builder
+ class for the requested class, that will be automatically used.
+ For example,
+ <code class="inline-code">object_wrapper=DefaultObjectWrapper(2.3.21)</code>
+ will create a <code class="inline-code">DefaultObjectWrapperBuilder</code> to
+ build the final instance, thus the object wrapper will be a
+ singleton instead of a new instance. The new syntax will also
+ look for a public static <code class="inline-code">INSTANCE</code> field if
+ there are 0 arguments and property assignments. For more details
+ see the Java API documentation of
+ <code class="inline-code">Configuration.setSetting</code>.</p>
+ </li>
+
+ <li>
+ <p>Template not found exceptions now explain that the
+ template path is interpreted by a template loader, and show the
+ <code class="inline-code">toString</code> of the
+ <code class="inline-code">TemplateLoader</code>. The out-of-the-box
+ <code class="inline-code">TemplateLoader</code> implementations now have an
+ overridden <code class="inline-code">toString</code> to show the actual base
+ directory and such details. Custom
+ <code class="inline-code">TemplateLoader</code> implementations are encouraged
+ to override <code class="inline-code">toString</code>.</p>
+ </li>
+
+ <li>
+ <p>Added
+ <code class="inline-code">Configuration.setSharedVariables(Map/*<String,
+ Object>*/)</code> for setting the shared variables from
+ Spring IoC and other IoC solutions. The already existing
+ <code class="inline-code">Configuration.setSharedVariable(String,
+ Object)</code> isn't a JavaBean property so it was hard to
+ use for that. Furthermore, the order in which
+ <code class="inline-code">Configuration.setObjectWrapper</code> and
+ <code class="inline-code">Configuration.setSharedVariables</code> are called
+ doesn't mater (unlike in the case of
+ <code class="inline-code">Configuration.setSharedVariable</code>), which is
+ essential in most IoC solutions.</p>
+ </li>
+
+ <li>
+ <p>Mostly concerning tool (like IDE plugin) authors:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">ParseException</code>-s now also store the
+ end-location of the error, not just its start-location. This
+ is useful if you want to underline the error in the source
+ code, not just point at it.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">Configuration.getSupportedBuiltInDirectiveNames()</code>
+ can be used to return the names of directives supported by
+ FreeMarker.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">TemplateExceptions</code> now expose the
+ position of the error (template name, line, column, end
+ line, end column) similarly to
+ <code class="inline-code">ParseException</code>-s. Where applicable, they
+ also expose the blamed expression in its canonical FTL
+ source form; this is mostly useful for
+ <code class="inline-code">InvalidReferenceException</code>-s.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>The concurrent performance of overloaded method lookups
+ (from the cache) was improved under Java 5 and later.</p>
+ </li>
+
+ <li>
+ <p>The <code class="inline-code">Version</code> instances that are
+ "incompatible improvements" break points are now
+ available via constants like:
+ <code class="inline-code">Configuration.VERSION_2_3_21</code>.</p>
+ </li>
+
+ <li>
+ <p>From now on, if you try to set the "incompatible
+ improvements" to greater than the current FreeMarker
+ version, or less than 2.3.0, an
+ <code class="inline-code">IllegalArgumentException</code> will be thrown.
+ Thus, <code class="inline-code">new
+ Configuration(<em class="code-color">someVersion</em>)</code>
+ not only activates the fixes up to that version, but ensures
+ that the application will not run in an environment with an
+ older FreeMarker version. (On an older FreeMarker version the
+ improvements that you have requested aren't implemented yet, so
+ you should get an exception.)</p>
+ </li>
+
+ <li>
+ <p>Added new configuration setting,
+ <code class="inline-code">show_error_tips</code>, defaults to
+ <code class="inline-code">true</code>. Sets if tips should be shown in error
+ messages of errors arising during template processing.</p>
+ </li>
+
+ <li>
+ <p>Instead of overriding
+ <code class="inline-code">BeansWrapper.finetuneMethodAppearance</code> (now
+ deprecated), now you can use
+ <code class="inline-code">BeansWrapper.setMethodAppearanceFineTuner(MethodAppearanceFineTuner)</code>,
+ so you don't need to extend the object wrapper class to
+ customize this aspect.</p>
+ </li>
+
+ <li>
+ <p>Added
+ <code class="inline-code">Configuration.getCoreDirecticeNames()</code> which
+ returns the names of all directives that are provided by
+ FreeMarker. This can useful for IDE-s.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">template_loader</code> was added as possible
+ configuration setting <code class="inline-code">Properties</code> key.</p>
+ </li>
+
+ <li>
+ <p>The standard <code class="inline-code">CacheStorage</code>
+ implementations now have a <code class="inline-code">getSize()</code> method
+ for monitoring the cache size.
+ <code class="inline-code">MruCacheStorage</code> also has
+ <code class="inline-code">getSoftSize()</code> and
+ <code class="inline-code">getStrongSize()</code>.</p>
+ </li>
+
+ <li>
+ <p>Various smaller improvements in configuration setting
+ errors messages.</p>
+ </li>
+
+ <li>
+ <p>With incompatible improvements 2.3.21 only: Empty ranges
+ return <code class="inline-code">Constants.EMPTY_SEQUENCE</code> instead of an
+ empty <code class="inline-code">SimpleSequence</code>. This is in theory
+ backward compatible, as the API only promises to give something
+ that implements <code class="inline-code">TemplateSequenceModel</code>.</p>
+ </li>
+
+ <li>
+ <p>FreeMarker now requires Java version has changed from 1.2
+ to 1.4.</p>
+ </li>
+
+ <li>
+ <p>Bugs fixed and improvements in overloaded method
+ selection/invocation, but only if you create the
+ <code class="inline-code">BeansWrapper</code>/<code class="inline-code">DefaultObjectWrapper</code>
+ with constructor parameter
+ <code class="inline-code">Configuration.VERSION_2_3_21</code> (or if you are
+ using <code class="inline-code">Properties</code> to configure FreeMarker, you
+ can do that like
+ <code class="inline-code">object_wrapper=BeansWrapper(2.3.21)</code>), or if
+ you have a <code class="inline-code">Configuration</code> with similar
+ <code class="inline-code">incompatible_improvements</code> 2.3.21
+ <em>and</em> you leave the
+ <code class="inline-code">object_wrapper</code> setting on its default value.
+ There's a little chance that because of these changes, a
+ different overloaded method will be chosen than before, or even
+ that ambiguity errors will arise where earlier they didn't
+ (although the opposite is far more frequent), hence the fixes
+ aren't automatically activated. But the fix mostly only effect
+ calls that were failing or have chosen then wrong method
+ earlier, so it's recommended to activate it for projects that
+ are still actively developed. This fix includes numerous
+ changes:</p>
+
+ <ul>
+ <li>
+ <p>Earlier, <code class="inline-code">null</code> argument values has
+ only matched overloaded methods where the corresponding
+ parameter had <code class="inline-code">Object</code> type, not a subclass
+ of it. That's clearly a bug. Now it considers all overloads
+ where the parameter type is non-primitive, and just like the
+ Java language, it choses the one with the most specific type
+ among them. This is the most important fix, and also the
+ most risky one regarding backward-compatibility. Like if you
+ have <code class="inline-code">m(Object o)</code> and <code class="inline-code">m(String
+ s)</code> in a Java class, earlier for a
+ <code class="inline-code">m(null)</code> call in the template it has
+ chosen <code class="inline-code">m(Object o)</code>, but now it will
+ choose <code class="inline-code">m(String s)</code> instead (because
+ <code class="inline-code">String</code> is also
+ <code class="inline-code">null</code>-able and is more specific than
+ <code class="inline-code">Object</code>). Furthermore, if you also had
+ <code class="inline-code">m(File f)</code> in the same class, now it will
+ cause an ambiguity exception, since the specificity of
+ <code class="inline-code">File</code> and <code class="inline-code">String</code> can't
+ be compared (same rule as under Java language), while
+ earlier that wasn't a problem as only <code class="inline-code">m(Object
+ o)</code> was seen as applicable.</p>
+ </li>
+
+ <li>
+ <p>The behavior of numbers with overloaded method
+ selection was heavily reworked:</p>
+
+ <ul>
+ <li>
+ <p>If possible, it now always choses the overload
+ where overflow and truncation to integer (like 1.5 to 1)
+ is avoided. Among the methods where no such critical
+ loss occurs, it choses the overload with the least risk
+ of precision loss (unless other conditions with higher
+ priority suggest otherwise). Earlier, the method
+ selection was prone to do choices that led to overflow
+ or precision loss, especially when the parameter was a
+ literal with decimals.</p>
+ </li>
+
+ <li>
+ <p>Overloaded method call can now convert to
+ non-primitive numerical types, like a
+ <code class="inline-code">Byte</code> or <code class="inline-code">byte</code> value
+ is automatically converted to <code class="inline-code">Integer</code>
+ if the parameter type is <code class="inline-code">Integer</code>.
+ (This has always worked for non-overloaded methods.)
+ Earlier where such conversion was needed, the method
+ wasn't seen seen applicable.</p>
+ </li>
+
+ <li>
+ <p>Method selection is now not only based on the type
+ of the wrapped number, but also on its value. For
+ example, a <code class="inline-code">Long</code> with value
+ <code class="inline-code">1</code> is now seen as compatible with a
+ method with parameter type <code class="inline-code">int</code> or
+ <code class="inline-code">short</code> or <code class="inline-code">byte</code>, as
+ <code class="inline-code">1</code> can be stored in those without
+ loss. This is important as unlike in Java language, in
+ FTL you doesn't have strict control over the numerical
+ types (the type of the wrapped number, actually), as FTL
+ has no type declarations. (If multiple compatible
+ methods are available, it will still try to chose the
+ one with the same or bigger numerical type.)</p>
+ </li>
+
+ <li>
+ <p>Conversion from/to <code class="inline-code">BigInteger</code>
+ is now supported.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Method choice ambiguity errors now occur much less
+ often. Ambiguities was and are resolved by selecting the
+ compatible methods then choosing the one with the most
+ specific parameter types among them. The changes are:</p>
+
+ <ul>
+ <li>
+ <p>When comparing the overall specificity of two
+ parameter lists: Earlier the parameter list seen as more
+ specific was the one that had some parameters that won
+ in specificity, and if both had such parameters then it
+ was an ambiguity. Now it's enough if a method has more
+ such parameters where it's a better match than the other
+ has, or if the two methods are still equal, if it has
+ the first better matching parameter. This can lead to
+ choices that seem arbitrary (but are still
+ deterministic), but as there's no automated way of
+ discovering method selection ambiguities in templates
+ (unlike in Java source code, where they will be detected
+ during compilation), especially as overloaded selection
+ has to rely on the <em>runtime</em> type of
+ the values which even make proper testing hard, this was
+ considered to be a better compromise than throwing an
+ exception whenever the choice of the method is not
+ obvious. Also note that in fact this mechanism is more
+ complicated than just counting the "winner"
+ parameter positions for each methods, as certain kind of
+ wins are stronger than any number of the others: wins
+ where the other possibility is risking of substantial
+ mantissa precision loss are the strongest (like dropping
+ decimals versus not to), wins where the primitive type
+ wins over the boxed class is the weakest (like
+ <code class="inline-code">int</code> versus
+ <code class="inline-code">Integer</code>), subclassing wins (like
+ <code class="inline-code">String</code> versus
+ <code class="inline-code">Object</code>) are between these two.</p>
+ </li>
+
+ <li>
+ <p>When comparing the specificity of two parameters
+ types at the same parameter position: The algorithm now
+ considers a primitive type as more specific that its
+ corresponding boxing class (like <code class="inline-code">int</code>
+ is considered to be more specific than
+ <code class="inline-code">Integer</code>).</p>
+ </li>
+
+ <li>
+ <p>There was a bug with overloaded varargs methods of
+ different parameter counts, where sometimes the last
+ parameters of the compared methods was ignored, which is
+ taking away a potential deciding factor and thus can
+ lead to ambiguity error. Whether this happened depends
+ on the order in which the Java reflection API has
+ returned the methods, which is undocumented and known to
+ change at least after some Java updates, breaking the
+ application.</p>
+ </li>
+
+ <li>
+ <p>When comparing the specificity of two array types,
+ until now they were seen as equal. Now the component
+ types are compared, and then that with the less specific
+ component type is preferred. For example, among
+ <code class="inline-code">f(String[])</code> and
+ <code class="inline-code">f(Object[])</code>, the last will always
+ win. This might sounds controversial, but as we can't
+ efficiently tell the common type of all the items in a
+ sequence or <code class="inline-code">List</code>, an so we don't know
+ if both arrays are indeed valid targets, we go for the
+ safest choice.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>FTL sequence values (like Java
+ <code class="inline-code">List</code>-s or FTL
+ <code class="inline-code">[<em class="code-color">x</em>,
+ <em class="code-color">y</em>,
+ <em class="code-color">...</em>]</code> constants) were
+ not seen as applicable to a parameter with array type if
+ there were multiple overloaded methods with the same number
+ of parameters but with different types on the position of
+ the array parameter. That is, if you had
+ <code class="inline-code">f(String[])</code> and
+ <code class="inline-code">f(String)</code> in Java, then
+ <code class="inline-code">f(['foo', 'bar'])</code> in the template
+ reported no compatible overloads. Now it will choose
+ <code class="inline-code">f(String[])</code>. Note that if there's also an
+ <code class="inline-code">f(List)</code> or even an
+ <code class="inline-code">f(Collection)</code>, it will prefer those over
+ arrays. (For consistency, this conversion will work even if
+ the argument is a <code class="inline-code">List</code> that come directly
+ from Java (as opposed to be created inside FTL), i.e., when
+ it was wrapped then unwrapped to the original
+ <code class="inline-code">List</code> object.) For a multidimensional
+ array parameter type, this conversion works recursively, so
+ you can pass in a sequence-of-sequences as the
+ argument.</p>
+ </li>
+
+ <li>
+ <p>FTL sequence values that wrapped a Java array (when
+ FreeMarker was also aware of that via
+ <code class="inline-code">AdapterTemplateModel</code> or
+ <code class="inline-code">WrapperTemplateModel</code>) were not seen as
+ applicable to a parameter with <code class="inline-code">List</code> type
+ if there were multiple overloaded methods with the same
+ number of parameters but with different types on the
+ position of the array parameter. So this is pretty much like
+ the issue described in the previous point, but for array to
+ <code class="inline-code">List</code> conversion. The array to
+ <code class="inline-code">List</code> conversion will be avoided if
+ possible, but it will be attempted if there's no other
+ alternative. Note that unlike with <code class="inline-code">List</code>
+ to array conversions, here FreeMarker can't cope with
+ multi-dimensional lists, that is, an array-of-arrays won't
+ be converted to a
+ <code class="inline-code">List</code>-of-<code class="inline-code">List</code>-s.</p>
+ </li>
+
+ <li>
+ <p>FTL string to Java
+ <code class="inline-code">char</code>/<code class="inline-code">Character</code>
+ conversion now works for overloaded method parameters;
+ earlier it has worked for non-overloaded methods only. If
+ the string length is 1, it will be seen as compatible with
+ parameters with <code class="inline-code">char</code> or
+ <code class="inline-code">Character</code> type.</p>
+ </li>
+
+ <li>
+ <p>Decreased the chance of choosing the wrong target Java
+ type when unwrapping multi-typed FTL values: When unwrapping
+ a parameter value that implements multiple FTL types (e.g.
+ string and hash) but doesn't implement
+ <code class="inline-code">AdapterTemplateModel</code> or
+ <code class="inline-code">WrapperTemplateModel</code>, a decision has to
+ be made if to what Java type the value should be unwrapped
+ to (e.g. to <code class="inline-code">String</code> or to
+ <code class="inline-code">Map</code>). In earlier versions that decision
+ was made based on the most specific common super type of the
+ parameters types of the given parameter position. However,
+ it's quite common that the common super type is too generic,
+ usually <code class="inline-code">Object</code>. Now
+ <code class="inline-code">BeansWrapper</code> stores "type
+ flags" for each parameter position of overloaded
+ methods, from which it can tell whether a potential target
+ Java type occurs in any of the overloads on the given
+ parameter position.</p>
+ </li>
+
+ <li>
+ <p>In many cases, less specific hint class was used for
+ unwrapping than that was possible within the limitations of
+ the applied hint generation algorithm. (The unwrapping hint
+ has influence when there's an ambiguity regarding how to
+ create a Java object form an FTL value. In the vast majority
+ of the cases, a too generic hint has no effect.) (This is a
+ highly technical topic. The way it works is that a single
+ common unwrapping hint class is chosen for a given argument
+ position shared by the overloads that has the same number of
+ parameters, and that hint class has to be as specific as
+ possible while it must fit all those parameter types. The
+ issue with the too generic hints had several instances: (a)
+ When the most specific common class/interface of two
+ same-position parameter types was searched, if there was
+ multiple common classes/interfaces that had no relationship
+ (this is always at most one class and one or more unrelated
+ interfaces), due to the ambiguity it has felt back to using
+ <code class="inline-code">Object</code> as the unwrapping hint. Now if
+ there's a non-<code class="inline-code">Object</code> class among them in
+ such case, it will be chosen as the hint (i.e., we ignore
+ the common interfaces). Otherwise if only a single interface
+ remains by removing <code class="inline-code">Cloneable</code>,
+ <code class="inline-code">Serializable</code>, and
+ <code class="inline-code">Comparable</code> (in that order), that will be
+ chosen. Only then it falls back to
+ <code class="inline-code">Object</code>. (b) The common most specific
+ class of a primitive type and the corresponding boxing class
+ was sometimes <code class="inline-code">Object</code> instead of the
+ boxing class. This has depended on Java's internal ordering
+ of the methods, and so were quite unpredictable, like the
+ result could change after upgrading Java under the
+ application. (c) The common superclass of a numerical
+ primitive value and a numerical non-primitive value was
+ always <code class="inline-code">Object</code>, now if they are a
+ primitive-boxing class pair, then it's the boxing class,
+ otherwise it's <code class="inline-code">Number</code>. (d) If the varags
+ parameter position was not the same in all the overloaded
+ varargs methods, sometimes some varargs arguments where
+ unwrapped with too generic hints. When this happened was
+ unpredictable as it depended on Java's internal method
+ ordering again.)</p>
+ </li>
+
+ <li>
+ <p>When unwrapping method call arguments before calling a
+ Java method, if the argument was an
+ <code class="inline-code">AdapterTemplateModel</code> and the target
+ parameter type was primitive,
+ <code class="inline-code">AdapterTemplateModel.getAdaptedObject(Class
+ hint)</code> has received the primitive type of the
+ target parameter (like <code class="inline-code">int</code> instead of
+ <code class="inline-code">Integer</code>) as the hint. This did not make
+ sense since <code class="inline-code">getAdaptedObject</code> can only
+ return <code class="inline-code">Object</code>-s, not primitive values.
+ Yet, <code class="inline-code">BeansWrapper</code> has expected the
+ returned value to be of the primitive type, otherwise it has
+ discarded it. Exactly the same problem occurs with
+ <code class="inline-code">WrapperTemplateModel</code>. Thus, ultimately,
+ if the target parameter type was primitive and some of these
+ interfaces were implemented, their return value was always
+ discarded and FreeMarker has felt back to other means of
+ unwrapping. Now <code class="inline-code">BeansWrapper</code> always
+ passes in and expects the boxing type (like
+ <code class="inline-code">Integer</code>) instead of the primitive
+ type.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Bug fixed [<a href="http://sourceforge.net/p/freemarker/bugs/373/">373</a>]:
+ These are three bugs actually, which can cause problems when
+ FreeMarker re-loads a template because of a charset override
+ with <code class="inline-code"><#ftl encoding="..."></code>: First, if
+ the template loader was a <code class="inline-code">URLTemplateLoader</code>,
+ when <code class="inline-code">TemplateLoader.getReader()</code> was called
+ for the second time, and the <code class="inline-code">Reader</code> returned
+ for the first time was already used, it might returned an empty
+ or corrupted template, depending on the backing URL
+ implementation. Secondly, when FreeMarer has decided if a
+ template file has to be re-loaded because its encoding specified
+ with <code class="inline-code"><#ftl encoding="..."></code> differs from
+ the encoding used for loading the template first, it has used
+ case-sensitive comparison, thus often re-loaded needlessly (like
+ "UTF-8" and "utf-8" mean the same). Now this comparison is
+ case-insensitive. Last not least, when retrying with the second
+ charset, the <code class="inline-code">TemplateCache</code> has forgotten to
+ close the first <code class="inline-code">Reader</code>, which can be a handle
+ leak.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed [<a href="http://sourceforge.net/p/freemarker/bugs/411/">411</a>]:
+ Invalid and redundant execution environment names from the OSGi
+ bundle manifest were removed. It looks like this now:
+ <code class="inline-code">Bundle-RequiredExecutionEnvironment: J2SE-1.5,
+ J2SE-1.4</code>. That is, we prefer (and compile against)
+ 1.5, but only require 1.4.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed [<a href="http://sourceforge.net/p/freemarker/bugs/409/">409</a>]:
+ <code class="inline-code">SimpleHash</code>'s internal <code class="inline-code">Map</code>
+ is concurrently modified on a non-safe way when getting length-1
+ <code class="inline-code">String</code> key that exists but maps to
+ <code class="inline-code">null</code>. This operation will accidentally add a
+ <code class="inline-code">Character</code> key to the internal map, which is
+ not a thread-safe operation.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed [<a href="http://sourceforge.net/p/freemarker/bugs/273/">273</a>]:
+ <code class="inline-code">TemplateLoader</code>-s that use
+ <code class="inline-code">java.net.URLConnection</code>-s should set
+ <code class="inline-code">URLConnection.useCaches</code> to
+ <code class="inline-code">false</code>, or else it won't detect template
+ caches on certain configurations.</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">URLTemplateLoader</code> and its
+ subclasses and
+ <code class="inline-code">WebApplicationTemplateLoader</code> now has a
+ <code class="inline-code">setURLConnectionUsesCaches(Boolean)</code>
+ method. It's recommended to set this property to
+ <code class="inline-code">false</code> from its default backward
+ compatible value, <code class="inline-code">null</code>. As FreeMarker has
+ its own template cache with its own update delay setting
+ (<code class="inline-code">template_update_delay</code>,
+ <code class="inline-code">Configuration.setTemplateUpdateDelay(int)</code>),
+ it shouldn't cause performance problems. The
+ <code class="inline-code">null</code> value will leave the caching of the
+ <code class="inline-code">java.net.URLConnection</code> on its default,
+ which is usually <code class="inline-code">true</code>.</p>
+ </li>
+
+ <li>
+ <p>If <code class="inline-code">incompatible_improvements</code> is set
+ to 2.3.21 (or higher) and templates are loaded through
+ <code class="inline-code">Configuration.getTemplate</code>, and the
+ <code class="inline-code">TemplateLoader</code> in use has
+ <code class="inline-code">URLConnectionUsesCaches</code> left on
+ <code class="inline-code">null</code>, it will behave as if it was set to
+ <code class="inline-code">false</code>. Note that this
+ <code class="inline-code">incompatible_improvements</code> trick only
+ works if the template is loaded through
+ <code class="inline-code">Configuration.getTemplate</code> (or
+ <code class="inline-code">TemplateCache</code>).</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Bug fixed: When changing the properties of
+ <code class="inline-code">DefaultObjectWrapper</code> or
+ <code class="inline-code">BeansWrapper</code> that influenced class
+ introspection results (like <code class="inline-code">exposureLevel</code> or
+ <code class="inline-code">exposeFields</code>), the introspection cache wasn't
+ cleared, and thus returned stale information for the classes
+ that were introspected before those properties were changed. Now
+ changing such properties always clears the introspection
+ caches.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: Constants used for empty sequence, empty hash,
+ empty collection and empty iterator weren't
+ <code class="inline-code">Serializable</code>.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed [<a href="http://sourceforge.net/p/freemarker/bugs/311/">300</a>]:
+ Logger class availability check was incorrect in that it has
+ checked the availability of logger libraries with the thread
+ context class loader, then later it tried to link to them with
+ the defining class loader of the FreeMarker classes. With some
+ class loader setups (notably under Netbeans sometimes) this led
+ to <code class="inline-code">ClassDefNotFoundError</code>-s that made
+ FreeMarker unusable. (The check itself was also not very
+ durable, as it didn't expected <code class="inline-code">LinakeError</code>-s,
+ only <code class="inline-code">ClassNotFoundException</code>.)</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <code class="inline-code">ClassUtil.forName</code>, used
+ inside FreeMarker everywhere to resolve class names to classes,
+ if the thread context class loader is <code class="inline-code">null</code>,
+ no longer tries to load with the bootstrap class loader before
+ loading with the defining class loader of FreeMarker.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed [<a href="http://sourceforge.net/p/freemarker/bugs/311/">311</a>]:
+ <code class="inline-code">TemplateBooleanModel.TRUE</code> and
+ <code class="inline-code">FALSE</code> are now serializable</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: Various issues in <code class="inline-code">Version</code>
+ class, such as wrong <code class="inline-code">hashCode</code>, possible
+ concurrency glitches, and acceptance of some malformed version
+ strings.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed [<a href="https://sourceforge.net/p/freemarker/bugs/414/">414</a>]:
+ Eclipse debug mode running was suspended during FreeMarker
+ static initialization on the JRebel availability checked if
+ JRebel wasn't available.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_173">Other changes</h2>
+
+
+ <ul>
+ <li>
+ <p>The license has changed from our proprietary BSD-Style
+ license to the well know "Apache License, Version 2.0".
+ Furthermore, the copyright owner has changed from "Visigoth
+ Software Society" (which was founded by Jonathan Revusky) to the
+ three main FreeMarker 2 developers/contributors, "Attila
+ Szegedi, Daniel Dekany, and Jonathan Revusky". See the <a href="app_license.html">new license here</a>.</p>
+ </li>
+
+ <li>
+ <p>The required minimum Java version was raised from 1.2 to
+ 1.4. FreeMarker will not work on Java 1.2 or 1.3.</p>
+ </li>
+
+ <li>
+ <p>Many smaller improvements and fixes in the Manual and API
+ JavaDocs.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_22.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_20.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 <
<TRUNCATED>
[39/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/dgui_template_exp.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/dgui_template_exp.html b/builds/2.3.26-nightly/dgui_template_exp.html
new file mode 100644
index 0000000..8a33c71
--- /dev/null
+++ b/builds/2.3.26-nightly/dgui_template_exp.html
@@ -0,0 +1,2331 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Expressions - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Expressions">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/dgui_template_exp.html">
+<link rel="canonical" href="http://freemarker.org/docs/dgui_template_exp.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui.html"><span itemprop="name">Template Author's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_template.html"><span itemprop="name">The Template</span></a></li><li class="step-3" item
prop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="dgui_template_exp.html"><span itemprop="name">Expressions</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Author\'s Guide","The Template","Expressions"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="dgui_template_directives.html"><span>Previous</span></a><a class="paging-arrow next" href="dgui_template_valueinsertion.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="dgui_template_exp" itemprop="headline">Expressions</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#exp_cheatsheet" data-menu-target="exp_cheatsheet">Quick overview (cheat sheet)</a></li><li><a class="page-menu-link" href="#dgui_template_exp_direct" data-menu-target="dgui_template_exp_direct">Specify values directly</a><ul><li><a class="page-menu-link" href="#dgui_template_exp_direct_string" data-menu-target="dgui_template_exp_direct_string">Strings</a></li><li><a class="page-menu-link" href="#dgui_template_exp_direct_number" data-menu-target="dgui_template_exp_direct_number">Numbers</a></li><li><a class="page-menu-link" href="#dgui_template_exp_direct_boolean" data-menu-target="dgui_template_exp_direct_boolean">Booleans</a></li><li><a class="page-menu-link" href="#dgui_template_exp_direct_seuqence" data-menu-target="dgui_template_exp_direct_seuqence">Sequences</a></li><li><a class="page-menu-link" href="#dgui_template_exp_direct_ranges" data-menu-target="dgui_template_exp_direct_ranges">Ranges</a></li><li><a class="page-menu-link" href="#d
gui_template_exp_direct_hash" data-menu-target="dgui_template_exp_direct_hash">Hashes</a></li></ul></li><li><a class="page-menu-link" href="#dgui_template_exp_var" data-menu-target="dgui_template_exp_var">Retrieving variables</a><ul><li><a class="page-menu-link" href="#dgui_template_exp_var_toplevel" data-menu-target="dgui_template_exp_var_toplevel">Top-level variables</a></li><li><a class="page-menu-link" href="#dgui_template_exp_var_hash" data-menu-target="dgui_template_exp_var_hash">Retrieving data from a hash</a></li><li><a class="page-menu-link" href="#dgui_template_exp_var_sequence" data-menu-target="dgui_template_exp_var_sequence">Retrieving data from a sequence</a></li><li><a class="page-menu-link" href="#dgui_template_exp_var_special" data-menu-target="dgui_template_exp_var_special">Special variables</a></li></ul></li><li><a class="page-menu-link" href="#dgui_template_exp_stringop" data-menu-target="dgui_template_exp_stringop">String operations</a><ul><li><a class="page-men
u-link" href="#dgui_template_exp_stringop_interpolation" data-menu-target="dgui_template_exp_stringop_interpolation">Interpolation and concatenation</a></li><li><a class="page-menu-link" href="#dgui_template_exp_get_character" data-menu-target="dgui_template_exp_get_character">Getting a character</a></li><li><a class="page-menu-link" href="#dgui_template_exp_stringop_slice" data-menu-target="dgui_template_exp_stringop_slice">String slicing (substrings)</a></li></ul></li><li><a class="page-menu-link" href="#dgui_template_exp_sequenceop" data-menu-target="dgui_template_exp_sequenceop">Sequence operations</a><ul><li><a class="page-menu-link" href="#dgui_template_exp_sequenceop_cat" data-menu-target="dgui_template_exp_sequenceop_cat">Concatenation</a></li><li><a class="page-menu-link" href="#dgui_template_exp_seqenceop_slice" data-menu-target="dgui_template_exp_seqenceop_slice">Sequence slicing</a></li></ul></li><li><a class="page-menu-link" href="#dgui_template_exp_hashop" data-menu-ta
rget="dgui_template_exp_hashop">Hash operations</a><ul><li><a class="page-menu-link" href="#dgui_template_exp_hashop_cat" data-menu-target="dgui_template_exp_hashop_cat">Concatenation</a></li></ul></li><li><a class="page-menu-link" href="#dgui_template_exp_arit" data-menu-target="dgui_template_exp_arit">Arithmetical calculations</a></li><li><a class="page-menu-link" href="#dgui_template_exp_comparison" data-menu-target="dgui_template_exp_comparison">Comparison</a></li><li><a class="page-menu-link" href="#dgui_template_exp_logicalop" data-menu-target="dgui_template_exp_logicalop">Logical operations</a></li><li><a class="page-menu-link" href="#dgui_template_exp_builtin" data-menu-target="dgui_template_exp_builtin">Built-ins</a></li><li><a class="page-menu-link" href="#dgui_template_exp_methodcall" data-menu-target="dgui_template_exp_methodcall">Method call</a></li><li><a class="page-menu-link" href="#dgui_template_exp_missing" data-menu-target="dgui_template_exp_missing">Handling miss
ing values</a><ul><li><a class="page-menu-link" href="#dgui_template_exp_missing_default" data-menu-target="dgui_template_exp_missing_default">Default value operator</a></li><li><a class="page-menu-link" href="#dgui_template_exp_missing_test" data-menu-target="dgui_template_exp_missing_test">Missing value test operator</a></li></ul></li><li><a class="page-menu-link" href="#dgui_template_exp_assignment" data-menu-target="dgui_template_exp_assignment">Assignment Operators</a></li><li><a class="page-menu-link" href="#dgui_template_exp_parentheses" data-menu-target="dgui_template_exp_parentheses">Parentheses</a></li><li><a class="page-menu-link" href="#dgui_template_exp_whitespace" data-menu-target="dgui_template_exp_whitespace">White-space in expressions</a></li><li><a class="page-menu-link" href="#dgui_template_exp_precedence" data-menu-target="dgui_template_exp_precedence">Operator precedence</a></li></ul> </div><p>When you supply values for interpolations or directive
+ parameters you can use variables or more complex expressions. For
+ example, if x is the number 8 and y is 5, the value of <code class="inline-code">(x +
+ y)/2</code> resolves to the numerical value 6.5.</p><p>Before we go into details, let's see some concrete
+ examples:</p><ul>
+ <li>
+ <p>When you supply value for interpolations: The usage of
+ interpolations is
+ <code class="inline-code">${<em class="code-color">expression</em>}</code> where
+ expression gives the value you want to insert into the output as
+ text. So <code class="inline-code">${(5 + 8)/2}</code> prints "6.5"
+ to the output (or possibly "6,5" if the language of
+ your output is not US English).</p>
+ </li>
+
+ <li>
+ <p>When you supply a value for the directive parameter: You
+ have already seen the <code class="inline-code">if</code> directive in the
+ Getting Started section. The syntax of this directive is:
+ <code class="inline-code"><#if
+ <em class="code-color">expression</em>><em class="code-color">...</em></#if></code>.
+ The expression here must evaluate to a boolean value. For example
+ in <code class="inline-code"><#if 2 < 3></code> the <code class="inline-code">2 <
+ 3</code> (2 is less than 3) is an expression which evaluates to
+ <code class="inline-code">true</code>.</p>
+ </li>
+ </ul>
+
+
+
+
+<h2 class="content-header header-section2" id="exp_cheatsheet">Quick overview (cheat sheet)</h2>
+
+
+ <p>This is a reminder for those of you who already know
+ FreeMarker or are just experienced programmers:</p>
+
+ <ul>
+ <li>
+ <a href="#dgui_template_exp_direct">Specify values
+ directly</a>
+
+ <ul>
+ <li>
+ <a href="#dgui_template_exp_direct_string">Strings</a>:
+ <code class="inline-code">"Foo"</code> or <code class="inline-code">'Foo'</code> or
+ <code class="inline-code">"It's \"quoted\""</code> or <code class="inline-code">'It\'s
+ "quoted"'</code> or
+ <code class="inline-code">r"C:\raw\string"</code>
+ </li>
+
+ <li>
+ <a href="#dgui_template_exp_direct_number">Numbers</a>:
+ <code class="inline-code">123.45</code>
+ </li>
+
+ <li>
+ <a href="#dgui_template_exp_direct_boolean">Booleans</a>:
+ <code class="inline-code">true</code>, <code class="inline-code">false</code>
+ </li>
+
+ <li>
+ <a href="#dgui_template_exp_direct_seuqence">Sequences</a>:
+ <code class="inline-code">["foo", "bar", 123.45]</code>; Ranges:
+ <code class="inline-code">0..9</code>, <code class="inline-code">0..<10</code> (or
+ <code class="inline-code">0..!10</code>), <code class="inline-code">0..</code>
+ </li>
+
+ <li>
+ <a href="#dgui_template_exp_direct_hash">Hashes</a>:
+ <code class="inline-code">{"name":"green�mouse",
+ "price":150}</code>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <a href="#dgui_template_exp_var">Retrieving
+ variables</a>
+
+ <ul>
+ <li>
+ <a href="#dgui_template_exp_var_toplevel">Top-level
+ variables</a>: <code class="inline-code">user</code>
+ </li>
+
+ <li>
+ <a href="#dgui_template_exp_var_hash">Retrieving
+ data from a hash</a>: <code class="inline-code">user.name</code>,
+ <code class="inline-code">user["name"]</code>
+ </li>
+
+ <li>
+ <a href="#dgui_template_exp_var_sequence">Retrieving data
+ from a sequence</a>:
+ <code class="inline-code">products[5]</code>
+ </li>
+
+ <li>
+ <a href="#dgui_template_exp_var_special">Special
+ variable</a>: <code class="inline-code">.main</code>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <a href="#dgui_template_exp_stringop">String
+ operations</a>
+
+ <ul>
+ <li>
+ <a href="#dgui_template_exp_stringop_interpolation">Interpolation
+ and concatenation</a>:
+ <code class="inline-code">"Hello�${user}!"</code> (or <code class="inline-code">"Hello
+ "�+�user + "!"</code>)
+ </li>
+
+ <li>
+ <a href="#dgui_template_exp_get_character">Getting a
+ character</a>: <code class="inline-code">name[0]</code>
+ </li>
+
+ <li>
+ <a href="#dgui_template_exp_stringop_slice">String
+ slice:</a> Inclusive end: <code class="inline-code">name[0..4]</code>,
+ Exclusive end: <code class="inline-code">name[0..<5]</code>,
+ Length-based (lenient): <code class="inline-code">name[0..*5]</code>,
+ Remove starting: <code class="inline-code">name[5..]</code>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <a href="#dgui_template_exp_sequenceop">Sequence
+ operations</a>
+
+ <ul>
+ <li>
+ <a href="#dgui_template_exp_sequenceop_cat">Concatenation</a>:
+ <code class="inline-code">users + ["guest"]</code>
+ </li>
+
+ <li>
+ <a href="#dgui_template_exp_seqenceop_slice">Sequence
+ slice</a>: Inclusive end:
+ <code class="inline-code">products[20..29]</code>, Exclusive end:
+ <code class="inline-code">products[20..<30]</code>, Length-based
+ (lenient): <code class="inline-code">products[20..*10]</code>, Remove
+ starting: <code class="inline-code">products[20..]</code>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <a href="#dgui_template_exp_hashop">Hash
+ operations</a>
+
+ <ul>
+ <li>
+ <a href="#dgui_template_exp_hashop_cat">Concatenation</a>:
+ <code class="inline-code">passwords + { "joe": "secret42" }</code>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <a href="#dgui_template_exp_arit">Arithmetical
+ calculations</a>: <code class="inline-code">(x * 1.5 + 10) / 2 - y %
+ 100</code>
+ </li>
+
+ <li>
+ <a href="#dgui_template_exp_comparison">Comparison</a>:
+ <code class="inline-code">x�==�y</code>, <code class="inline-code">x�!=�y</code>,
+ <code class="inline-code">x�<�y</code>, <code class="inline-code">x�>�y</code>,
+ <code class="inline-code">x�>=�y</code>, <code class="inline-code">x�<=�y</code>,
+ <code class="inline-code">x�lt�y</code>, <code class="inline-code">x�lte�y</code>,
+ <code class="inline-code">x gt y</code>, <code class="inline-code">x gte y</code>,
+ ...etc.
+ </li>
+
+ <li>
+ <a href="#dgui_template_exp_logicalop">Logical
+ operations</a>: <code class="inline-code">!registered && (firstVisit
+ || fromEurope)</code>
+ </li>
+
+ <li>
+ <a href="#dgui_template_exp_builtin">Built-ins</a>:
+ <code class="inline-code">name?upper_case</code>,
+ <code class="inline-code">path?ensure_starts_with('/')</code>
+ </li>
+
+ <li>
+ <a href="#dgui_template_exp_methodcall">Method
+ call</a>: <code class="inline-code">repeat("What", 3)</code>
+ </li>
+
+ <li>
+ <a href="#dgui_template_exp_missing">Missing value
+ handler operators</a>:
+
+ <ul>
+ <li>
+ <a href="#dgui_template_exp_missing_default">Default
+ value</a>: <code class="inline-code">name!"unknown"</code> or
+ <code class="inline-code">(user.name)!"unknown"</code> or
+ <code class="inline-code">name!</code> or
+ <code class="inline-code">(user.name)!</code>
+ </li>
+
+ <li>
+ <a href="#dgui_template_exp_missing_test">Missing
+ value test</a>: <code class="inline-code">name??</code> or
+ <code class="inline-code">(user.name)??</code>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <a href="#dgui_template_exp_assignment">Assignment
+ operators</a>: <code class="inline-code">=</code>, <code class="inline-code">+=</code>,
+ <code class="inline-code">-=</code>, <code class="inline-code">*=</code>,
+ <code class="inline-code">/=</code>, <code class="inline-code">%=</code>,
+ <code class="inline-code">++</code>, <code class="inline-code">--</code>
+ </li>
+ </ul>
+
+ <p>See also: <a href="#dgui_template_exp_precedence">Operator
+ precedence</a></p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="dgui_template_exp_direct">Specify values directly</h2>
+
+
+
+
+
+
+ <p>Often you want to specify a value directly and not as a result
+ of some calculations.</p>
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_template_exp_direct_string">Strings</h3>
+
+
+
+
+ <p>To specify a string value directly you give the text in
+ quotation marks, e.g.: <code class="inline-code">"some text"</code> or in
+ apostrophe-quote, e.g. <code class="inline-code">'some text'</code>. The two
+ forms are equivalent. If the text itself contains the character
+ used for the quoting (either <code class="inline-code">"</code> or
+ <code class="inline-code">'</code>) or backslashes, you have to precede them
+ with a backslash; this is called escaping. You can type any other
+ character, including <a href="gloss.html#gloss.lineBreak">line
+ breaks</a>, in the text directly. Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${"It's \"quoted\" and
+this is a backslash: \\"}
+
+${'It\'s "quoted" and
+this is a backslash: \\'}</pre></div>
+
+ <p>will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">It's "quoted" and
+this is a backslash: \
+
+It's "quoted" and
+this is a backslash: \</pre></div>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>Of course, you could simply type the above text into the
+ template, without using
+ <code class="inline-code">${<em class="code-color">...</em>}</code>. But we do
+ it here just for the sake of example, to demonstrate
+ expressions.</p>
+ </div>
+
+
+ <a name="topic.escapeSequence"></a>
+
+
+
+ <p>This is the list of all supported escape sequences. All
+ other usage of backlash in string literals is an error and any
+ attempt to use the template will fail.</p>
+
+ <div class="table-responsive">
+ <table class="table">
+
+ <thead>
+ <tr>
+ <th>Escape sequence</th>
+
+
+ <th>Meaning</th>
+
+ </tr>
+
+ </thead>
+
+
+ <tbody>
+ <tr>
+ <td><code class="inline-code">\"</code></td>
+
+
+ <td>Quotation mark (u0022)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">\'</code></td>
+
+
+ <td>Apostrophe (a.k.a. apostrophe-quote) (u0027)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">\{</code></td>
+
+
+ <td>Opening curly brace: <code class="inline-code">{</code></td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">\\</code></td>
+
+
+ <td>Back slash (u005C)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">\n</code></td>
+
+
+ <td>Line feed (u000A)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">\r</code></td>
+
+
+ <td>Carriage return (u000D)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">\t</code></td>
+
+
+ <td>Horizontal tabulation (a.k.a. tab) (u0009)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">\b</code></td>
+
+
+ <td>Backspace (u0008)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">\f</code></td>
+
+
+ <td>Form feed (u000C)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">\l</code></td>
+
+
+ <td>Less-than sign: <code class="inline-code"><</code></td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">\g</code></td>
+
+
+ <td>Greater-than sign: <code class="inline-code">></code></td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">\a</code></td>
+
+
+ <td>Ampersand: <code class="inline-code">&</code></td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">\x<em class="code-color">Code</em></code></td>
+
+
+ <td>Character given with its hexadecimal <a href="gloss.html#gloss.unicode">Unicode</a> code (<a href="gloss.html#gloss.UCS">UCS</a> code)</td>
+
+ </tr>
+
+ </tbody>
+
+ </table>
+ </div>
+
+
+ <p>The <code class="inline-code"><em class="code-color">Code</em></code> after
+ the <code class="inline-code">\x</code> is 1 to 4 hexadecimal digits. For
+ example this all put a copyright sign into the string:
+ <code class="inline-code">"\xA9�1999-2001"</code>,
+ <code class="inline-code">"\x0A9�1999-2001"</code>,
+ <code class="inline-code">"\x00A9�1999-2001"</code>. When the character directly
+ after the last hexadecimal digit can be interpreted as hexadecimal
+ digit, you must use all 4 digits or else FreeMarker will
+ misunderstand you.</p>
+
+ <p>Note that the character sequence <code class="inline-code">${</code> (and
+ <code class="inline-code">#{</code>) has special meaning. It's used to insert
+ the value of expressions (typically: the value of variables, as in
+ <code class="inline-code">"Hello�${user}!"</code>). This will be explained <a href="#dgui_template_exp_stringop_interpolation">later</a>.
+ If you want to print <code class="inline-code">${</code> or
+ <code class="inline-code">#{</code>, you should either use raw string literals
+ as explained below, or escape the <code class="inline-code">{</code> like in
+ <code class="inline-code">"foo $\{bar}"</code>.</p>
+
+
+
+ <p>A special kind of string literals is the raw string
+ literals. In raw string literals, backslash and
+ <code class="inline-code">${</code> have no special meaning, they are considered
+ as plain characters. To indicate that a string literal is a raw
+ string literal, you have to put an <code class="inline-code">r</code> directly
+ before the opening quotation mark or apostrophe-quote.
+ Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${r"${foo}"}
+${r"C:\foo\bar"}</pre></div>
+
+ <p>will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">${foo}
+C:\foo\bar</pre></div>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_template_exp_direct_number">Numbers</h3>
+
+
+
+
+ <p>To specify a numerical value directly you type the number
+ without quotation marks. You have to use the dot as your decimal
+ separator and must not use any grouping separator symbols. You can
+ use <code class="inline-code">-</code> or <code class="inline-code">+</code> to indicate the
+ sign (<code class="inline-code">+</code> is redundant). Scientific notation is
+ not yet supported (so <code class="inline-code">1E3</code> is wrong). Also, you
+ cannot omit the 0 before the decimal separator (so
+ <code class="inline-code">.5</code> is wrong).</p>
+
+ <p>Examples of valid number literals: <code class="inline-code">0.08</code>,
+ <code class="inline-code">-5.013</code>, <code class="inline-code">8</code>,
+ <code class="inline-code">008</code>, <code class="inline-code">11</code>,
+ <code class="inline-code">+11</code></p>
+
+ <p>Note that numerical literals like <code class="inline-code">08</code>,
+ <code class="inline-code">+8</code>, <code class="inline-code">8.00</code> and
+ <code class="inline-code">8</code> are totally equivalent as they all symbolize
+ the number eight. Thus, <code class="inline-code">${08}</code>,
+ <code class="inline-code">${+8}</code>, <code class="inline-code">${8.00}</code> and
+ <code class="inline-code">${8}</code> will all print exactly same.</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_template_exp_direct_boolean">Booleans</h3>
+
+
+
+
+
+
+ <p>To specify a boolean value you write <code class="inline-code">true</code>
+ or <code class="inline-code">false</code>. Don't use quotation marks.</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_template_exp_direct_seuqence">Sequences</h3>
+
+
+
+
+
+
+
+
+
+
+ <p>To specify a literal sequence, you list the <a href="dgui_quickstart_datamodel.html#topic.dataModel.subVar">sub variables</a> separated by
+ commas, and put the whole list into square brackets. For
+ example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list <strong>["foo", "bar", "baz"]</strong> as x>
+${x}
+</#list></pre></div>
+
+ <p>will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">foo
+bar
+baz
+ </pre></div>
+
+ <p>The items in the list are expressions, so you can do this
+ for example: <code class="inline-code">[2 + 2, [1, 2, 3, 4], "foo"]</code>. Here
+ the first subvariable will be the number 4, the second will be
+ another sequence, and the third subvariable will be the string
+ "foo".</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_template_exp_direct_ranges">Ranges</h3>
+
+
+ <p>Ranges are just sequences, but they are created by
+ specifying what range of whole numbers they contain, instead of
+ specifying their items one by one. For example,
+ <code class="inline-code">0..<m</code>, assuming the <code class="inline-code">m</code>
+ variable stores 5, will give a sequence that contains <code class="inline-code">[0,
+ 1, 2, 3, 4]</code>. Ranges are primarily used for iterating
+ over a range of numbers with <code class="inline-code"><#list
+ <em class="code-color">...</em>></code> and for <a href="#dgui_template_exp_seqenceop_slice">slicing
+ sequences</a> and <a href="#dgui_template_exp_stringop_slice">slicing
+ strings</a>.</p>
+
+ <p>The generic forms of range expressions are (where
+ <code class="inline-code"><em class="code-color">start</em></code> and
+ <code class="inline-code"><em class="code-color">end</em></code> can be any
+ expression that evaluates to a number):</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code"><em class="code-color">start</em>..<em class="code-color">end</em></code>:
+ Range with inclusive end. For example, <code class="inline-code">1..4</code>
+ gives <code class="inline-code">[1, 2, 3, 4]</code>, and
+ <code class="inline-code">4..1</code> gives <code class="inline-code">[4, 3, 2, 1]</code>.
+ Beware, ranges with inclusive end never give an empty
+ sequence, so <code class="inline-code">0..length-1</code> is
+ <em>WRONG</em>, because when length is
+ <code class="inline-code">0</code> it gives <code class="inline-code">[0,
+ -1]</code>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code"><em class="code-color">start</em>..<<em class="code-color">end</em></code>
+ or
+ <code class="inline-code"><em class="code-color">start</em>..!<em class="code-color">end</em></code>:
+ Range with exclusive end. For example,
+ <code class="inline-code">1..<4</code> gives <code class="inline-code">[1, 2,
+ 3]</code>, <code class="inline-code">4..<1</code> gives <code class="inline-code">[4,
+ 3, 2]</code>, and <code class="inline-code">1..<1</code> gives
+ <code class="inline-code">[]</code>. Note the last example; the result can
+ be an empty sequence. There's no difference between
+ <code class="inline-code">..<</code> and <code class="inline-code">..!</code>; the last
+ form is used in applications where using the
+ <code class="inline-code"><</code> character causes problems (for HTML
+ editors and such).</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code"><em class="code-color">start</em>..*<em class="code-color">length</em></code>:
+ Length limited range. For example, <code class="inline-code">10..*4</code>
+ gives <code class="inline-code">[10, 11, 12, 13]</code>,
+ <code class="inline-code">10..*-4</code> gives <code class="inline-code">[10, 9, 8,
+ 7]</code>, and <code class="inline-code">10..*0</code> gives
+ <code class="inline-code">[]</code>. When these kind of ranges are used for
+ slicing, the slice will end without error if the end of the
+ sliced sequence or string is reached before the specified
+ range length was reached; see <a href="#dgui_template_exp_seqenceop_slice">slicing
+ sequences</a> for more.</p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>Length limited ranges were introduced in FreeMarker
+ 2.3.21.</p>
+ </div>
+
+ </li>
+
+ <li>
+ <p><code class="inline-code"><em class="code-color">start</em>..</code>:
+ Right-unbounded range. This are like length limited ranges
+ with infinite length. For example <code class="inline-code">1..</code> gives
+ <code class="inline-code">[1, 2, 3, 4, 5, 6, ... ]</code>, up to infinity.
+ Be careful when processing (like listing) such ranges, as
+ processing all items of it it would take forever or until the
+ application runs out of memory and crashes. Just like with
+ length limited ranges, when these kind of ranges are used for
+ slicing, the slice will end when the end of the sliced
+ sequence or string is reached.</p>
+
+ <div class="callout warning">
+ <strong class="callout-label">Warning!</strong>
+
+ <p>Right-unbounded ranges before FreeMarker 2.3.21 were
+ only used for slicing, and behaved like an empty sequence
+ for other purposes. To activate the new behavior, it's not
+ enough to use FreeMarker 2.3.21, the programmer also have to
+ set the <code class="inline-code">incompatible_improvements</code>
+ configuration setting to at least 2.3.21.</p>
+ </div>
+
+ </li>
+ </ul>
+
+ <p>Further notes on ranges:</p>
+
+ <ul>
+ <li>
+ <p>Range expressions themselves don't have square brackets,
+ for example, you write <code class="inline-code"><#assign myRange =
+ 0..<x</code>, NOT <code class="inline-code"><#assign myRange =
+ [0..<x]></code>. The last would create a sequence
+ that contains an item that's a range. The square brackets are
+ part of the slicing syntax, like
+ <code class="inline-code"><em class="code-color">seq</em>[<em class="code-color">myRange</em>]</code>.</p>
+ </li>
+
+ <li>
+ <p>You can write arithmetical expression on the sides of
+ the <code class="inline-code">..</code> without parenthesis, like <code class="inline-code">n
+ + 1 ..< m / 2 - 1</code>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">..</code>, <code class="inline-code">..<</code>,
+ <code class="inline-code">..!</code> and <code class="inline-code">..*</code> are
+ operators, so you can't have space inside them. Like
+ <code class="inline-code">n .. <m</code> is WRONG, but <code class="inline-code">n ..<
+ m</code> is good.</p>
+ </li>
+
+ <li>
+ <p>The reported size of right-unbounded ranges is
+ 2147483647 (or 0 if
+ <code class="inline-code">incompatible_improvements</code> is less than
+ 2.3.21) due to a technical limitation (32 bits). However, when
+ listing them, their actual size is infinite.</p>
+ </li>
+
+ <li>
+ <p>Ranges don't really store the numbers they consist of,
+ thus for example <code class="inline-code">0..1</code> and
+ <code class="inline-code">0..100000000</code> is equally fast to create and
+ takes the same amount of memory.</p>
+ </li>
+ </ul>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_template_exp_direct_hash">Hashes</h3>
+
+
+
+
+
+
+ <p>To specify a hash in a template, you list the key/value
+ pairs separated by commas, and put the list into curly brackets.
+ The key and value within a key/value pair are separated with a
+ colon. Here is an example: <code class="inline-code">{ "name": "green�mouse",
+ "price": 150 }</code>. Note that both the names and the values
+ are expressions. The keys must be strings. The values can be if
+ any type.</p>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="dgui_template_exp_var">Retrieving variables</h2>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_template_exp_var_toplevel">Top-level variables</h3>
+
+
+
+
+ <p>To access a top-level variable, you simply use the variable
+ name. For example, the expression <code class="inline-code">user</code> will
+ evaluate to the value of variable stored with name
+ "user" in the root. So this will print what you store
+ there:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${user}</pre></div>
+
+ <p>If there is no such top-level variable, then an error will
+ result when FreeMarker tries to evaluate the expression, and it
+ aborts template processing (unless programmers has configured
+ FreeMarker differently).</p>
+
+ <p>In this kind of expression, the variable name can only
+ contain letters (including non-Latin letters), digits (including
+ non-Latin digits), underline (<code class="inline-code">_</code>), dollar
+ (<code class="inline-code">$</code>), at sign (<code class="inline-code">@</code>).
+ Furthermore, the first character can't be a ASCII digit
+ (<code class="inline-code">0</code>-<code class="inline-code">9</code>). Starting from
+ FreeMarker 2.3.22, the variable name can also contain minus
+ (<code class="inline-code">-</code>), dot (<code class="inline-code">.</code>), and colon
+ (<code class="inline-code">:</code>) at any position, but these must be escaped
+ with a preceding backslash (<code class="inline-code">\</code>), or else they
+ would be interpreted as operators. For example, to read the
+ variable whose name is "data-id", the expression is
+ <code class="inline-code">data\-id</code>, as <code class="inline-code">data-id</code> would
+ be interpreted as "data minus id". (Note that these
+ escapes only work in identifiers, not in string literals.)</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_template_exp_var_hash">Retrieving data from a hash</h3>
+
+
+
+
+
+
+ <p>If we already have a hash as a result of an expression, then
+ we can get its subvariable with a dot and the name of the
+ subvariable. Assume that we have this data-model:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-data-model">(root)
+ |
+ +- book
+ | |
+ | +- title = "Breeding green mouses"
+ | |
+ | +- author
+ | |
+ | +- name = "Julia Smith"
+ | |
+ | +- info = "Biologist, 1923-1985, Canada"
+ |
+ +- test = "title"</pre></div>
+
+ <p>Now we can read the <code class="inline-code">title</code> with
+ <code class="inline-code">book.title</code>, since the book expression will
+ return a hash (as explained in the last chapter). Applying this
+ logic further, we can read the name of the author with this
+ expression: <code class="inline-code">book.author.name</code>.</p>
+
+ <p>There is an alternative syntax if we want to specify the
+ subvariable name with an expression:
+ <code class="inline-code">book["title"]</code>. In the square brackets you can
+ give any expression as long as it evaluates to a string. So with
+ this data-model you can also read the title with
+ <code class="inline-code">book[test]</code>. More examples; these are all
+ equivalent: <code class="inline-code">book.author.name</code>,
+ <code class="inline-code">book["author"].name</code>,
+ <code class="inline-code">book.author.["name"]</code>,
+ <code class="inline-code">book["author"]["name"]</code>.</p>
+
+ <p>When you use the dot syntax, the same restrictions apply
+ regarding the variable name as with top-level variables (name can
+ contain only letters, digits, <code class="inline-code">_</code>,
+ <code class="inline-code">$</code>, <code class="inline-code">@</code> but can't start with
+ <code class="inline-code">0</code>-<code class="inline-code">9</code>, also starting from
+ 2.3.22 you can also use <code class="inline-code">\-</code>,
+ <code class="inline-code">\.</code> and <code class="inline-code">\:</code>). There are no
+ such restrictions when you use the square bracket syntax, since
+ the name is the result of an arbitrary expression. (Note, that to
+ help the FreeMarker XML support, if the subvariable name is
+ <code class="inline-code">*</code> (asterisk) or <code class="inline-code">**</code>, then you
+ do not have to use square bracket syntax.)</p>
+
+ <p>As with the top-level variables, trying to access a
+ non-existent subvariable causes an error and aborts the processing
+ of the template (unless programmers has configured FreeMarker
+ differently).</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_template_exp_var_sequence">Retrieving data from a sequence</h3>
+
+
+
+
+
+
+ <p>This is the same as for hashes, but you can use the square
+ bracket syntax only, and the expression in the brackets must
+ evaluate to a number, not a string. For example to get the name of
+ the first animal of the <a href="dgui_datamodel_basics.html#example.stdDataModel">example data-model</a> (remember
+ that the number of the first item is 0, not 1):
+ <code class="inline-code">animals[0].name</code></p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_template_exp_var_special">Special variables</h3>
+
+
+
+
+ <p>Special variables are variables defined by the FreeMarker
+ engine itself. To access them, you use the
+ <code class="inline-code">.<em class="code-color">variable_name</em></code>
+ syntax.</p>
+
+ <p>Normally you don't need to use special variables. They are
+ for expert users. The complete list of special variables can be
+ found in the <a href="ref_specvar.html">reference</a>.</p>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="dgui_template_exp_stringop">String operations</h2>
+
+
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_template_exp_stringop_interpolation">Interpolation and concatenation</h3>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <p>If you want to insert the value of an expression into a
+ string, you can use
+ <code class="inline-code">${<em class="code-color">...</em>}</code> (and the
+ deprecated <code class="inline-code">#{<em class="code-color">...</em>}</code>)
+ in string literals.
+ <code class="inline-code">${<em class="code-color">...</em>}</code> in string
+ literals <a href="dgui_template_valueinsertion.html">behaves
+ similarly as in <span class="marked-text">text</span>
+ sections</a> (so it goes through the same <em>locale
+ sensitive</em> number and date/time formatting).</p>
+
+ <p>Example (assume that user is "Big Joe"):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign s = "Hello ${user}!">
+${s} <#-- Just to see what the value of s is --></pre></div>
+
+ <p>This will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">Hello Big Joe!</pre></div>
+
+ <div class="callout warning">
+ <strong class="callout-label">Warning!</strong>
+
+ <p>A frequent mistake of users is the usage of interpolations
+ in places where they needn't/shouldn't/can't be used.
+ Interpolations work <em>only</em> in <a href="dgui_template_overallstructure.html"><span class="marked-text">text</span> sections</a> (e.g.
+ <code class="inline-code"><h1>Hello ${name}!</h1></code>) and in
+ string literals (e.g. <code class="inline-code"><#include
+ "/footer/${company}.html"></code>). A typical
+ <em>WRONG</em> usage is <code class="inline-code"><#if
+ ${big}>...</#if></code>, which will cause a
+ syntactical error. You should simply write <code class="inline-code"><#if
+ big>...</#if></code>. Also, <code class="inline-code"><#if
+ "${big}">...</#if></code> is
+ <em>WRONG</em>, since it converts the parameter
+ value to string and the <code class="inline-code">if</code> directive wants a
+ boolean value, so it will cause a runtime error.</p>
+ </div>
+
+
+ <p><a name="dgui_template_exp_stringop_concatenation"></a>Alternatively,
+ you can use the <code class="inline-code">+</code> operator to achieve similar
+ result:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign s = "Hello " + user + "!"></pre></div>
+
+ <p>This gives the same result as the earlier example with the
+ <code class="inline-code">${<em class="code-color">...</em>}</code>.</p>
+
+ <div class="callout warning">
+ <strong class="callout-label">Warning!</strong>
+
+ <p>Because <code class="inline-code">+</code> follows similar rules as
+ <code class="inline-code">${<em class="code-color">...</em>}</code>, the
+ appended string is influenced by the <code class="inline-code">locale</code>,
+ <code class="inline-code">number_format</code>,
+ <code class="inline-code">date_format</code>, <code class="inline-code">time_format</code>,
+ <code class="inline-code">datetime_format</code> and
+ <code class="inline-code">boolean_format</code>, etc. settings, and thus the
+ result targets humans and isn't in generally machine parseable.
+ This mostly leads to problems with numbers, as many locales use
+ grouping (thousands separators) by default, and so
+ <code class="inline-code">"someUrl?id=" + id</code> becomes to something like
+ <code class="inline-code">"someUrl?id=1�234"</code>. To prevent this, use the
+ <code class="inline-code">?c</code> (for Computer audience) built-in, like in
+ <code class="inline-code">"someUrl?id=" + id?c</code> or
+ <code class="inline-code">"someUrl?id=${id?c}"</code>, which will evaluate to
+ something like <code class="inline-code">"someUrl?id=1234"</code>, regardless
+ of locale and format settings.</p>
+ </div>
+
+
+ <p>As when <code class="inline-code">${<em class="code-color">...</em>}</code>
+ is used inside string <em>expressions</em> it's just a
+ shorthand of using the <code class="inline-code">+</code> operator, <a href="dgui_misc_autoescaping.html">auto-escaping</a> is not
+ applied on it.</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_template_exp_get_character">Getting a character</h3>
+
+
+
+
+
+
+ <p>You can get a single character of a string at a given index
+ similarly as you can <a href="#dgui_template_exp_var_sequence">read the subvariable of a
+ sequence</a>, e.g. <code class="inline-code">user[0]</code>. The result will
+ be a string whose length is 1; FTL doesn't have a separate
+ character type. As with sequence sub variables, the index must be
+ a number that is at least 0 and less than the length of the
+ string, or else an error will abort the template
+ processing.</p>
+
+ <p>Since the sequence subvariable syntax and the character
+ getter syntax clashes, you can use the character getter syntax
+ only if the variable is not a sequence as well (which is possible
+ because FTL supports multi-typed values), since in that case the
+ sequence behavior prevails. (To work this around, you can use
+ <a href="ref_builtins_string.html#ref_builtin_string_for_string">the
+ <code>string</code> built-in</a>, e.g.
+ <code class="inline-code">user?string[0]</code>. Don't worry if you don't
+ understand this yet; built-ins will be discussed later.)</p>
+
+ <p>Example (assume that user is "Big Joe"):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${user[0]}
+${user[4]}</pre></div>
+
+ <p>will print (note that the index of the first character is
+ 0):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">B
+J</pre></div>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_template_exp_stringop_slice">String slicing (substrings)</h3>
+
+
+
+
+
+
+
+
+
+
+ <p>You can a slice a string in the same way as you <a href="#dgui_template_exp_seqenceop_slice">slice a
+ sequence</a> (see there), only here instead of sequence items
+ you work with characters. Some differences are:</p>
+
+ <ul>
+ <li>
+ <p>Decreasing ranges aren't allowed for string slicing.
+ (That's because unlike sequences, you seldom if ever want to
+ show a string reversed, so if that happens, that's almost
+ always the result of an oversight.)</p>
+ </li>
+
+ <li>
+ <p>If a value is both a string and a sequence (a
+ multi-typed value), then slicing will slice the sequence
+ instead of the string. When you are processing XML, such
+ values are common. In such cases you can use
+ <code class="inline-code"><em class="code-color">someXMLnode</em>?string[<em class="code-color">range</em>]</code>.</p>
+ </li>
+
+ <li>
+ <p>There's a legacy bug where a range with
+ <em>inclusive</em> end that's one less than the
+ starting index and is non-negative (like in
+ <code class="inline-code">"abc"[1..0]</code>) will give an empty string
+ instead of an error. (It should be an error as it's a
+ decreasing range.) Currently this bug is emulated for backward
+ compatibility, but you shouldn't utilize it, as in the future
+ it will be certainly an error.</p>
+ </li>
+ </ul>
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign s = "ABCDEF">
+${s[2..3]}
+${s[2..<4]}
+${s[2..*3]}
+${s[2..*100]}
+${s[2..]}</pre></div>
+
+ <p>will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">CD
+CD
+CDE
+CDEF
+CDEF</pre></div>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>Some of the typical use-cases of string slicing is covered
+ by convenient built-ins: <a href="ref_builtins_string.html#ref_builtin_remove_beginning"><code>remove_beginning</code></a>,
+ <a href="ref_builtins_string.html#ref_builtin_remove_ending"><code>remove_ending</code></a>,
+ <a href="ref_builtins_string.html#ref_builtin_keep_before"><code>keep_before</code></a>,
+ <a href="ref_builtins_string.html#ref_builtin_keep_after"><code>keep_after</code></a>,
+ <a href="ref_builtins_string.html#ref_builtin_keep_before_last"><code>keep_before_last</code></a>,
+ <a href="ref_builtins_string.html#ref_builtin_keep_after_last"><code>keep_after_last</code></a></p>
+ </div>
+
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="dgui_template_exp_sequenceop">Sequence operations</h2>
+
+
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_template_exp_sequenceop_cat">Concatenation</h3>
+
+
+
+
+
+
+
+
+
+
+ <p>You can concatenate sequences in the same way as strings,
+ with <code class="inline-code">+</code>. Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list ["Joe", "Fred"] + ["Julia", "Kate"] as user>
+- ${user}
+</#list></pre></div>
+
+ <p>will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">- Joe
+- Fred
+- Julia
+- Kate
+ </pre></div>
+
+ <p>Note that sequence concatenation is not to be used for many
+ repeated concatenations, like for appending items to a sequence
+ inside a loop. It's just for things like <code class="inline-code"><#list users
+ + admins as person></code>. Although concatenating sequences
+ is fast and its speed is independently of the size of the
+ concatenated sequences, the resulting sequence will be always a
+ little bit slower to read than the original two sequences were.
+ This way the result of many repeated concatenations is a sequence
+ that is slow to read.</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_template_exp_seqenceop_slice">Sequence slicing</h3>
+
+
+
+
+
+
+
+
+ <p>With
+ <code class="inline-code"><em class="code-color">seq</em>[<em class="code-color">range</em>]</code>,
+ were <code class="inline-code"><em class="code-color">range</em></code> is a
+ range value <a href="#dgui_template_exp_direct_ranges">as
+ described here</a>, you can take a slice of the sequence. The
+ resulting sequence will contain the items from the original
+ sequence (<code class="inline-code"><em class="code-color">seq</em></code>) whose
+ indexes are in the range. For example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assert seq = ["A", "B", "C", "D", "E"]>
+<#list seq[1..3] as i>${i}</#list></pre></div>
+
+ <p>will print</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">BCD </pre></div>
+
+ <p>Furthermore, the items in the slice will be in the same
+ order as in the range. Thus for example the above example with the
+ <code class="inline-code">3..1</code> range would print
+ <code class="inline-code">DCB</code>.</p>
+
+ <p>The numbers in the range must be valid indexes in the
+ sequence, or else the processing of the template will be aborted
+ with error. Like in the last example,
+ <code class="inline-code">seq[-1..0]</code> would be an error as
+ <code class="inline-code">seq[-1]</code> is invalid, also
+ <code class="inline-code">seq[1..5]</code> would be because
+ <code class="inline-code">seq[5]</code> is invalid. (Note that
+ <code class="inline-code">seq[100..<100]</code> or
+ <code class="inline-code">seq[100..*0]</code> would be valid despite that 100 is
+ out of bounds, because those ranges are empty.)</p>
+
+ <p>Length limited ranges
+ (<code class="inline-code"><em class="code-color">start</em>..*<em class="code-color">length</em></code>)
+ and right-unbounded ranges
+ (<code class="inline-code"><em class="code-color">start</em>..</code>) adapt to
+ the length of the sliced sequence. They will slice out at most as
+ many items as there is available:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign seq = ["A", "B", "C"]>
+
+Slicing with length limited ranges:
+- <#list seq[0..*2] as i>${i}</#list>
+- <#list seq[1..*2] as i>${i}</#list>
+- <#list seq[2..*2] as i>${i}</#list> <#-- Not an error -->
+- <#list seq[3..*2] as i>${i}</#list> <#-- Not an error -->
+
+Slicing with right-unlimited ranges:
+- <#list seq[0..] as i>${i}</#list>
+- <#list seq[1..] as i>${i}</#list>
+- <#list seq[2..] as i>${i}</#list>
+- <#list seq[3..] as i>${i}</#list></pre></div>
+
+ <p>This will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">Slicing with length limited ranges:
+- AB
+- BC
+- C
+-
+
+Slicing with right-unlimited ranges:
+- ABC
+- BC
+- C
+-</pre></div>
+
+ <p>Note above that slicing with length limited and right
+ unbounded ranges allow the starting index to be past the last item
+ <em>by one</em> (but no more).</p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>To split a sequence to slices of a given size, you should
+ use the <a href="ref_builtins_sequence.html#ref_builtin_chunk"><code>chunk</code></a>
+ built-in.</p>
+ </div>
+
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="dgui_template_exp_hashop">Hash operations</h2>
+
+
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_template_exp_hashop_cat">Concatenation</h3>
+
+
+
+
+
+
+
+
+
+
+ <p>You can concatenate hashes in the same way as strings, with
+ <code class="inline-code">+</code>. If both hashes contain the same key, the
+ hash on the right-hand side of the <code class="inline-code">+</code> takes
+ precedence. Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign ages = {"Joe":23, "Fred":25} + {"Joe":30, "Julia":18}>
+- Joe is ${ages.Joe}
+- Fred is ${ages.Fred}
+- Julia is ${ages.Julia}</pre></div>
+
+ <p>will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">- Joe is 30
+- Fred is 25
+- Julia is 18</pre></div>
+
+ <p>Note that hash concatenation is not to be used for many
+ repeated concatenations, like for adding items to a hash inside a
+ loop. It's the same as with the <a href="#dgui_template_exp_sequenceop_cat">sequence
+ concatenation</a>.</p>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="dgui_template_exp_arit">Arithmetical calculations</h2>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <p>This is the basic 4-function calculator arithmetic plus the
+ modulus operator. So the operators are:</p>
+
+ <ul>
+ <li>
+ Addition: <code class="inline-code">+</code>
+ </li>
+
+ <li>
+ Subtraction: <code class="inline-code">-</code>
+ </li>
+
+ <li>
+ Multiplication: <code class="inline-code">*</code>
+ </li>
+
+ <li>
+ Division: <code class="inline-code">/</code>
+ </li>
+
+ <li>
+ Modulus (remainder) of integer operands:
+ <code class="inline-code">%</code>
+ </li>
+ </ul>
+
+
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${100 - x * x}
+${x / 2}
+${12 % 10}</pre></div>
+
+ <p>Assuming that <code class="inline-code">x</code> is 5, it will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">75
+2.5
+2</pre></div>
+
+ <p>Both operands must be expressions which evaluate to a
+ numerical value. So the example below will cause an error when
+ FreeMarker tries to evaluate it, since <code class="inline-code">"5"</code> is a
+ string and not the number 5:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${3 * "5"} <#-- WRONG! --></pre></div>
+
+ <p>There is an exception to the above rule. The
+ <code class="inline-code">+</code> operator, is used to <a href="#dgui_template_exp_stringop_interpolation">concatenate
+ strings</a> as well. If on one side of <code class="inline-code">+</code> is a
+ string and on the other side of <code class="inline-code">+</code> is a numerical
+ value, then it will convert the numerical value to string (using the
+ format appropriate for language of the page) and then use the
+ <code class="inline-code">+</code> as string concatenation operator.
+ Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${3 + "5"}</pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">35</pre></div>
+
+ <p>Generally, FreeMarker never converts a string to a number
+ automatically, but it may convert a number to a string
+ automatically.</p>
+
+ <p> People often want only the integer part of the result
+ of a division (or of other calculations). This is possible with the
+ <code class="inline-code">int</code> built-in. (Built-ins are explained <a href="#dgui_template_exp_builtin">later</a>):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${(x/2)?int}
+${1.1?int}
+${1.999?int}
+${-1.1?int}
+${-1.999?int}</pre></div>
+
+ <p>Assuming that <code class="inline-code">x</code> is 5, it will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">2
+1
+1
+-1
+-1</pre></div>
+
+ <p>Due to historical reasons, the <code class="inline-code">%</code> operator
+ works by first truncating the operands to an integer number, and
+ then returning the remainder of the division:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${12 % 5} <#-- Prints 2 -->
+${12.9 % 5} <#-- Prints 2 -->
+${12.1 % 5} <#-- Prints 2 -->
+
+${12 % 6} <#-- Prints 0 -->
+${12 % 6.9} <#-- Prints 0 --></pre></div>
+
+ <p>The sign of the result of <code class="inline-code">%</code> is the same as
+ the sign of the left hand operand, and its absolute value is the
+ same as if both operands where positive:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${-12 % -5} <#-- Prints -2 -->
+${-12 % 5} <#-- Prints -2 -->
+${12 % -5} <#-- Prints 2 --></pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="dgui_template_exp_comparison">Comparison</h2>
+
+
+
+
+ <p>Sometimes you want to know if two values are equal or not, or
+ which value is the greater.</p>
+
+ <p>To show concrete examples I will use the <code class="inline-code">if</code>
+ directive here. The usage of <code class="inline-code">if</code> directive is:
+ <code class="inline-code"><#if
+ <em class="code-color">expression</em>>...</#if></code>,
+ where expression must evaluate to a boolean value or else an error
+ will abort the processing of the template. If the value of
+ expression is <code class="inline-code">true</code> then the things between the
+ begin and end-tag will be processed, otherwise they will be
+ skipped.</p>
+
+ <p>To test two values for equality you use <code class="inline-code">==</code>
+ (or <code class="inline-code">=</code> as a <em>deprecated</em>
+ alternative) To test two values for inequality you use
+ <code class="inline-code">!=</code>. For example, assume that
+ <code class="inline-code">user</code> is "Big Joe":</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#if <strong>user == "Big Joe"</strong>>
+ It is Big Joe
+</#if>
+<#if <strong>user != "Big Joe"</strong>>
+ It is not Big Joe
+</#if></pre></div>
+
+ <p>The <code class="inline-code">user == "Big Joe"</code> expression in the
+ <code class="inline-code"><#if ...></code> will evaluate to the boolean
+ <code class="inline-code">true</code>, so the above will say "It is Big
+ Joe".</p>
+
+ <p>The expressions on both sides of the <code class="inline-code">==</code> or
+ <code class="inline-code">!=</code> must evaluate to a scalar (not a sequence or
+ hash). Furthermore, the two scalars must have the same type (i.e.
+ strings can only be compared to strings and numbers can only be
+ compared to numbers, etc.) or else an error will abort template
+ processing. For example <code class="inline-code"><#if 1 == "1"></code> will
+ cause an error. Note that FreeMarker does exact comparison, so
+ string comparisons are case and white-space sensitive:
+ <code class="inline-code">"x"</code> and <code class="inline-code">"x�"</code> and
+ <code class="inline-code">"X"</code> are not equal values.</p>
+
+ <p>For numerical and date, time and date-time values you can also
+ use <code class="inline-code"><</code>, <code class="inline-code"><=</code>,
+ <code class="inline-code">>=</code> and <code class="inline-code">></code>. You can't use
+ them for strings! Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#if x <strong><=</strong> 12>
+ x is less or equivalent with 12
+</#if></pre></div>
+
+ <p>There's a problem with <code class="inline-code">>=</code> and
+ <code class="inline-code">></code>. FreeMarker interprets the
+ <code class="inline-code">></code> character as the closing character of the
+ FTL tag. To prevent this, you can use <code class="inline-code">lt</code> instead
+ of <code class="inline-code"><</code>, <code class="inline-code">lte</code> instead of
+ <code class="inline-code"><=</code>, <code class="inline-code">gt</code> instead of
+ <code class="inline-code">></code> and <code class="inline-code">gte</code> instead of
+ <code class="inline-code">>=</code>, like in <code class="inline-code"><#if x gt
+ y></code>. Another trick it to put the expression into <a href="#dgui_template_exp_parentheses">parentheses</a> like in
+ <code class="inline-code"><#if (x > y)></code>, although it's considered
+ to be less elegant.</p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>FreeMarker supports some other alternatives too, but these
+ are deprecated:</p>
+
+ <ul>
+ <li>
+ <p>Writing <code class="inline-code">&gt;</code> and
+ <code class="inline-code">&lt;</code> on the place of the problematic
+ relation marks, like in: <code class="inline-code"><#if x &gt;
+ y></code> or <code class="inline-code"><#if x &gt;=
+ y></code> . Note that in general FTL does not support
+ entity references (the
+ <code class="inline-code">&<em class="code-color">...</em>;</code>
+ things) in FTL tags; it's just an exception with the
+ arithmetical comparisons.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">\lt</code>, <code class="inline-code">\lte</code>,
+ <code class="inline-code">\gt</code> and <code class="inline-code">\gte</code> which are
+ the same as the ones without the backslash</p>
+ </li>
+ </ul>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="dgui_template_exp_logicalop">Logical operations</h2>
+
+
+
+
+
+
+
+
+
+
+
+
+ <p>Just the usual logical operators:</p>
+
+ <ul>
+ <li>
+ Logical or: <code class="inline-code">||</code>
+ </li>
+
+ <li>
+ Logical and: <code class="inline-code">&&</code>
+ </li>
+
+ <li>
+ Logical not: <code class="inline-code">!</code>
+ </li>
+ </ul>
+
+ <p>The operators will work with boolean values only. Otherwise an
+ error will abort the template processing.</p>
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#if x < 12 <strong>&&</strong> color == "green">
+ We have less than 12 things, and they are green.
+</#if>
+<#if <strong>!</strong>hot> <#-- here hot must be a boolean -->
+ It's not hot.
+</#if></pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="dgui_template_exp_builtin">Built-ins</h2>
+
+
+
+
+ <p>Built-ins are like methods that are added to the objects by
+ FreeMarker. To prevent name clashes with actual methods and other
+ sub-variables, instead of dot (<code class="inline-code">.</code>), you separate
+ them from the parent object with question mark
+ (<code class="inline-code">?</code>). For example, if you want to ensure that
+ <code class="inline-code">path</code> has an initial <code class="inline-code">/</code> then you
+ could write <code class="inline-code">path?ensure_starts_with('/')</code>. The
+ Java object behind <code class="inline-code">path</code> (a
+ <code class="inline-code">String</code> most certainly) doesn't have such method,
+ FreeMarker adds it. For brevity, if the method has no parameters,
+ you <em>must</em> omit the <code class="inline-code">()</code>, like,
+ to get the length of <code class="inline-code">path</code>, you have to write
+ <code class="inline-code">path?length</code>, <em>not</em>
+ <code class="inline-code">path?length()</code>.</p>
+
+ <p>The other reason why built-ins are crucial is that normally
+ (though it depends on configuration settings), FreeMarker doesn't
+ expose the Java API of the objects. So despite that Java's
+ <code class="inline-code">String</code> has a <code class="inline-code">length()</code> method,
+ it's hidden from the template, you <em>have to</em> use
+ <code class="inline-code">path?length</code> instead. The advantage of that is
+ that thus the template doesn't depend on the exactly type of the
+ underlying Java objects. (Like <code class="inline-code">path</code> is maybe a
+ <code class="inline-code">java.nio.Path</code> behind the scenes, but if the
+ programmers has configure FreeMarker to expose
+ <code class="inline-code">Path</code> objects as FTL strings, the template won't
+ be aware of that, and <code class="inline-code">?length</code> will work, despite
+ that <code class="inline-code">java.nio.Path</code> has no similar method.)</p>
+
+ <p>You can find some of the <a href="dgui_quickstart_template.html#topic.commonlyUsedBuiltIns">most commonly used built-ins
+ mentioned here</a>, and the <a href="ref_builtins.html">complete
+ list of built-ins in the Reference</a>. For now, just a few of
+ the more important ones:</p>
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${testString?upper_case}
+${testString?html}
+${testString?upper_case?html}
+
+${testSequence?size}
+${testSequence?join(", ")}</pre></div>
+
+ <p>Assuming that <code class="inline-code">testString</code> stores the string
+ "Tom & Jerry", and testSequnce stores the strings
+ "foo", "bar" and "baz", the
+ output will be:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">TOM & JERRY
+Tom &amp; Jerry
+TOM &amp; JERRY
+
+3
+foo, bar, baz</pre></div>
+
+ <p>Note the <code class="inline-code">test?upper_case?html</code> above. Since
+ the result of <code class="inline-code">test?upper_case</code> is a string, you
+ can apply the <code class="inline-code">html</code> built-in on it.</p>
+
+ <p>Naturally, the left side of the built-in can be arbitrary
+ expression, not just a variable name:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${testSeqence[1]?cap_first}
+${"horse"?cap_first}
+${(testString + " & Duck")?html}</pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">Bar
+Horse
+Tom &amp; Jerry &amp; Duck</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="dgui_template_exp_methodcall">Method call</h2>
+
+
+
+
+
+
+ <p>If you have a method then you can use the method call
+ operation on it. The method call operation is a comma-separated list
+ of expressions in parentheses. These values are called parameters.
+ The method call operation passes these values to the method which
+ will in turn return a result. This result will be the value of the
+ whole method call expression.</p>
+
+ <p>For example, assume the programmers have made available a
+ method variable called <code class="inline-code">repeat</code>. You give a string
+ as the first parameter, and a number as the second parameter, and it
+ returns a string which repeats the first parameter the number of
+ times specified by the second parameter.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${repeat("Foo", 3)}</pre></div>
+
+ <p>will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">FooFooFoo</pre></div>
+
+ <p>Here <code class="inline-code">repeat</code> was evaluated to the method
+ variable (according to how you <a href="#dgui_template_exp_var_toplevel">access top-level
+ variables</a>) and then <code class="inline-code">("What", 3)</code> invoked
+ that method.</p>
+
+ <p>I would like to emphasize that method calls are just plain
+ expressions, like everything else. So this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${repeat(repeat("x", 2), 3) + repeat("Foo", 4)?upper_case}</pre></div>
+
+ <p>will print this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">xxxxxxFOOFOOFOOFOO</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="dgui_template_exp_missing">Handling missing values</h2>
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>These operators exist since FreeMarker 2.3.7 (replacing the
+ <code class="inline-code">default</code>, <code class="inline-code">exists</code> and
+ <code class="inline-code">if_exists</code> built-ins).</p>
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+ <p>As we explained earlier, an error will occur and abort the
+ template processing if you try to access a missing variable. However
+ two special operators can suppress this error, and handle the
+ problematic situation. The handled variable can be top-level
+ variable, hash subvariable, or sequence subvariable as well.
+ Furthermore these operators handle the situation when a method call
+ doesn't return a value <span class="marked-for-programmers">(from the
+ viewpoint of Java programmers: it returns <code class="inline-code">null</code> or
+ it's return type is <code class="inline-code">void</code>)</span>, so it's more
+ correct to say that these operators handle missing values in
+ general, rather than just missing variables.</p>
+
+ <p><span class="marked-for-programmers">For those who know what's Java
+ <code class="inline-code">null</code>, FreeMarker 2.3.<em>x</em>
+ treats them as missing values. Simply, the template language doesn't
+ know the concept of <code class="inline-code">null</code>. For example, if you
+ have a bean that has a <code class="inline-code">maidenName</code> property, and
+ the value of that property is <code class="inline-code">null</code>, then that's
+ the same as if there were no such property at all, as far as the
+ template is concerned (assuming you didn't configured FreeMarker to
+ use some extreme object wrapper, that is). The result of a method
+ call that returns <code class="inline-code">null</code> is also treated as a
+ missing variable (again, assuming that you use some usual object
+ wrapper). See more <a href="app_faq.html#faq_null">in the
+ FAQ</a>.</span></p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>If you wonder why is FreeMarker so picky about missing
+ variables, <a href="app_faq.html#faq_picky_about_missing_vars">read this
+ FAQ entry</a>.</p>
+ </div>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="dgui_template_exp_missing_default">Default value operator</h3>
+
+
+
+
+ <p>Synopsis:
+ <code class="inline-code"><em class="code-color">unsafe_expr</em>!<em class="code-color">default_expr</em></code>
+ or <code class="inline-code"><em class="code-color">unsafe_expr</em>!</code> or
+ <code class="inline-code">(<em class="code-color">unsafe_expr</em>)!<em class="code-color">default_expr</em></code>
+ or
+ <code class="inline-code">(<em class="code-color">unsafe_expr</em>)!</code></p>
+
+ <p>This operator allows you to specify a default value for the
+ case when the value is missing.</p>
+
+ <p>Example. Assume no variable called <code class="inline-code">mouse</code>
+ is present:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${mouse!"No mouse."}
+<#assign mouse="Jerry">
+${mouse!"No mouse."}</pre></div>
+
+ <p>The output will be:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">No mouse.
+Jerry</pre></div>
+
+ <p>The default value can be any kind of expression, so it
+ doesn't have to be a string. For example you can write
+ <code class="inline-code">hits!0</code> or <code class="inline-code">colors!["red", "green",
+ "blue"]</code>. There is no restriction regarding the
+ complexity of the expression that specifies the default value, for
+ example you can write: <code class="inline-code">cargo.weight!(item.weight *
+ itemCount + 10)</code>.</p>
+
+ <div class="callout warning">
+ <strong class="callout-label">Warning!</strong>
+
+ <p>If you have a composite expression after the
+ <code class="inline-code">!</code>, like <code class="inline-code">1 + x</code>,
+ <em>always</em> use parenthesses, like
+ <code class="inline-code">${x!(1 + y)}</code> or <code class="inline-code">${(x!1) +
+ y)}</code>, depending on which interpretation you meant.
+ That's needed because due to a programming mistake in FreeMarker
+ 2.3.x, the precedence of <code class="inline-code">!</code> (when it's used as
+ default value operator) is very low at its right side. This
+ means that, for example, <code class="inline-code">${x!1 + y}</code> is
+ misinterpreted by FreeMarker as <code class="inline-code">${x!(1 + y)}</code>
+ while it should mean <code class="inline-code">${(x!1) + y}</code>. This
+ programming error will be fixed in FreeMarker 2.4, so you should
+ not utilize this wrong behavior, or else your templates will
+ break with FreeMarker 2.4!</p>
+ </div>
+
+
+ <p>If the default value is omitted, then it will be empty
+ string and empty sequence and empty hash at the same time. (This
+ is possible because FreeMarker allows multi-type values.) Note the
+ consequence that you can't omit the default value if you want it
+ to be <code class="inline-code">0</code> or <code class="inline-code">false</code>.
+ Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">(${mouse!})
+<#assign mouse = "Jerry">
+(${mouse!})</pre></div>
+
+ <p>The output will be:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">()
+(Jerry)</pre></div>
+
+ <div class="callout warning">
+ <strong class="callout-label">Warning!</strong>
+
+ <p>Due to syntactical ambiguities <code class="inline-code"><@something
+ a=x! b=y /></code> will be interpreted as
+ <code class="inline-code"><@something a=x!(b=y) /></code>, that is, the
+ <code class="inline-code">b=y</code> will be interpreted as a comparison that
+ gives the default value for <code class="inline-code">x</code>, rather than
+ the specification of the <code class="inline-code">b</code> parameter. To
+ prevent this, write: <code class="inline-code"><@something a=(x!) b=y
+ /></code></p>
+ </div>
+
+
+ <p>You can use this operator in two ways with non-top-level
+ variables:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">product.color!"red"</pre></div>
+
+ <p>This will handle if <code class="inline-code">color</code> is missing
+ inside <code class="inline-code">product</code> (and returns
+ <code class="inline-code">"red"</code> if so), but will not handle if
+ <code class="inline-code">product</code> is missing. That is, the
+ <code class="inline-code">product</code> variable itself must exist, otherwise
+ the template processing will die with error.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">(product.color)!"
<TRUNCATED>
[18/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_visit.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_visit.html b/builds/2.3.26-nightly/ref_directive_visit.html
new file mode 100644
index 0000000..c95e861
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_visit.html
@@ -0,0 +1,384 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>visit, recurse, fallback - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="visit, recurse, fallback">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_visit.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_visit.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_visit.html"><span itemprop="name">visit, recurse, fallback</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","visit, recurse, fallback"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_userDefined.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_specvar.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_visit" itemprop="headline">visit, recurse, fallback</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_134" data-menu-target="autoid_134">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_135" data-menu-target="autoid_135">Description</a><ul><li><a class="page-menu-link" href="#autoid_136" data-menu-target="autoid_136">Visit</a></li><li><a class="page-menu-link" href="#autoid_137" data-menu-target="autoid_137">Recurse</a></li><li><a class="page-menu-link" href="#autoid_138" data-menu-target="autoid_138">Fallback</a></li></ul></li></ul> </div><a name="ref.directive.visit"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_134">Synopsis</h2>
+
+
+
+<pre class="metaTemplate"><code class="inline-code"><#visit <em class="code-color">node</em> using <em class="code-color">namespace</em>></code>
+or
+<code class="inline-code"><#visit <em class="code-color">node</em>></code></pre>
+
+
+
+<pre class="metaTemplate"><code class="inline-code"><#recurse <em class="code-color">node</em> using <em class="code-color">namespace</em>></code>
+or
+<code class="inline-code"><#recurse <em class="code-color">node</em>></code>
+or
+<code class="inline-code"><#recurse using <em class="code-color">namespace</em>></code>
+or
+<code class="inline-code"><#recurse></code></pre>
+
+
+
+<pre class="metaTemplate"><code class="inline-code"><#fallback></code></pre>
+
+
+ <p>Where:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code"><em class="code-color">node</em></code>:
+ Expression evaluates to a <a href="xgui_expose_dom.html">node
+ variable</a>.
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">namespace</em></code>: A
+ <a href="dgui_misc_namespace.html">namespace</a>, or a
+ sequence of namespaces. A namespace can be given with the
+ namespace hash (a.k.a. gate hash), or with a string literal that
+ store the path of template that could be imported. Instead of
+ namespace hashes, you can use plain hashes as well.
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_135">Description</h2>
+
+
+ <p>The <code class="inline-code">visit</code> and <code class="inline-code">recurse</code>
+ directives are used for the recursive processing of trees. In
+ practice, this will mostly be used for <a href="xgui.html">processing XML.</a></p>
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_136">Visit</h3>
+
+
+ <p>When you call <code class="inline-code"><#visit
+ <em class="code-color">node</em>></code>, it looks for a
+ user-defined directive (like a macro) to invoke that has the name
+ deducted from the node's name
+ (<code class="inline-code"><em class="code-color">node</em>?node_name</code>) and
+ namespace
+ (<code class="inline-code"><em class="code-color">node</em>?node_namesoace</code>).
+ The rules of name deduction:</p>
+
+ <ul>
+ <li>
+ <p>If the node doesn't support node namespaces (as text
+ nodes in XML), then the directive name is simply the name of
+ the node
+ (<code class="inline-code"><em class="code-color">node</em>?node_name</code>).
+ <span class="marked-for-programmers">A node does not support node
+ namespaces if the <code class="inline-code">getNodeNamespace</code> method
+ returns <code class="inline-code">null</code>.</span></p>
+ </li>
+
+ <li>
+ <p>If the node does support node namespaces (as element
+ nodes in XML), then a prefix deduced from the node namespace
+ maybe appended before the node name with a colon used as
+ separator (e.g. <code class="inline-code">e:book</code>). The prefix, and if
+ there is a prefix used at all, depends on what prefixes has
+ been registered with the <code class="inline-code">ns_prefixes</code>
+ parameter of the <code class="inline-code">ftl</code> directive in the <a href="dgui_misc_namespace.html">FTL namespace</a> where
+ <code class="inline-code">visit</code> looks for the handler directive
+ (which is not necessary the same as the FTL namespace where
+ <code class="inline-code">visit</code> was called from, as you will see
+ later). Concretely, if there was no default namespace
+ registered with <code class="inline-code">ns_prefixes</code> then for nodes
+ that does not belong to any namespace (<span class="marked-for-programmers">when <code class="inline-code">getNodeNamespace</code>
+ returns <code class="inline-code">""</code></span>) no prefix is used. If
+ there was a default namespace registered with
+ <code class="inline-code">ns_prefixes</code> then for nodes that does not
+ belong to any namespace prefix <code class="inline-code">N</code> is used,
+ and for nodes that belong to the default node namespace no
+ prefix is used. Otherwise, in both case, the prefix associated
+ to the node namespace with the <code class="inline-code">ns_prefixes</code>
+ is used. If there is not prefix associated to the node
+ namespace of the node, then <code class="inline-code">visit</code> simply
+ behave as if there was no directive found with the proper
+ name.</p>
+ </li>
+ </ul>
+
+ <p>The node for which the user-defined directive was invoked is
+ available for it as special variable <code class="inline-code">.node</code>.
+ Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#-- Assume that nodeWithNameX?node_name is "x" -->
+<#visit nodeWithNameX>
+Done.
+<#macro x>
+ Now I'm handling a node that has the name "x".
+ Just to show how to access this node: this node has ${.node?children?size} children.
+</#macro></pre></div>
+
+ <p>The output will be something like:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> Now I'm handling a node that has the name "x".
+ Just to show how to access this node: this node has 3 children.
+Done.</pre></div>
+
+ <p>If one or more namespaces is specified using the optional
+ <code class="inline-code">using</code> clause, then <code class="inline-code">visit</code>
+ will look for the directives in those namespaces only, with the
+ earlier specified namespaces in the list getting priority. If no
+ <code class="inline-code">using</code> clause is specified, the namespace or
+ sequence of namespaces specified with the <code class="inline-code">using</code>
+ clause of the last uncompleted <code class="inline-code">visit</code> call is
+ reused. If there is no such pending <code class="inline-code">visit</code> call,
+ then the current namespace is used. For example, if you execute
+ this template:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#import "n1.ftl" as n1>
+<#import "n2.ftl" as n2>
+
+<#-- This will call n2.x (because there is no n1.x): -->
+<#visit nodeWithNameX using [n1, n2]>
+
+<#-- This will call the x of the current namespace: -->
+<#visit nodeWithNameX>
+
+<#macro x>
+ Simply x
+</#macro></pre></div>
+
+ <p>and this is <code class="inline-code">n1.ftl</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro y>
+ n1.y
+</#macro></pre></div>
+
+ <p>and this is <code class="inline-code">n2.ftl</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#macro x>
+ n2.x
+ <#-- This callc n1.y as it inherits the "using [n1, n2]" from the pending visit call: -->
+ <#visit nodeWithNameY>
+ <#-- This will call n2.y: -->
+ <#visit nodeWithNameY using .namespace>
+</#macro>
+
+<#macro y>
+ n2.y
+</#macro></pre></div>
+
+ <p>then this will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">
+ n2.x
+ n1.y
+ n2.y
+
+ Simply x
+ </pre></div>
+
+ <p>If <code class="inline-code">visit</code> doesn't find a user-defined
+ directive in either FTL namespaces with the name identical to the
+ name deduced with the rules described earlier, then it tries to
+ find an user-defined directive with name
+ <code class="inline-code">@<em class="code-color">node_type</em></code>, or if
+ the node does not support node type property (i.e.
+ <code class="inline-code"><em class="code-color">node</em>?node_type</code>
+ returns undefined variable), then with name
+ <code class="inline-code">@default</code>. For the lookup, it uses the same
+ mechanism as was explained earlier. If it still doesn't find an
+ user-defined directive to handle the node, then
+ <code class="inline-code">visit</code> stops template processing with error.
+ Some XML specific node types have special handling in this regard;
+ see: <a href="xgui_declarative_details.html">XML Processing Guide/Declarative XML processing/Details</a>. Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#-- Assume that nodeWithNameX?node_name is "x" -->
+<#visit nodeWithNameX>
+
+<#-- Assume that nodeWithNameY?node_type is "foo" -->
+<#visit nodeWithNameY>
+
+<#macro x>
+Handling node x
+</#macro>
+
+<#macro @foo>
+There was no specific handler for node ${node?node_name}
+</#macro></pre></div>
+
+ <p>This would print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">Handling node x
+
+There was no specific handler for node y
+
+ </pre></div>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_137">Recurse</h3>
+
+
+ <a name="ref.directive.recurse"></a>
+
+ <p>The <code class="inline-code"><#recurse></code> directive is really
+ syntactic sugar. It visits all children nodes of the node (and not
+ the node itself). So, to write:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#recurse <em>someNode</em> using <em>someLib</em>></pre></div>
+
+ <p>is equivalent to writing:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list <em>someNode</em>?children as <em>child</em>><#visit <em>child</em> using <em>someLib</em>></#list></pre></div>
+
+ <p>However, target node is optional in the
+ <code class="inline-code">recurse</code> directive. If the target node is
+ unspecified, it simply uses the <code class="inline-code">.node</code>. Thus,
+ the terse instruction <code class="inline-code"><#recurse></code> is
+ equivalent to:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list .node?children as child><#visit child></#list></pre></div>
+
+ <p>As a side comment for those who are familiar with XSLT,
+ <code class="inline-code"><#recurse></code> is pretty much exactly
+ analogous to the <code class="inline-code"><xsl:apply-templates/></code>
+ instruction in XSLT.</p>
+
+
+
+
+
+
+
+<h3 class="content-header header-section3" id="autoid_138">Fallback</h3>
+
+
+ <a name="ref.directive.fallback"></a>
+
+ <p>As you could learn earlier, in the documentation of the
+ <code class="inline-code">visit</code> directive, the user-defined directive
+ that handles the node is maybe searched in multiple FTL
+ name-spaces. The <code class="inline-code">fallback</code> directive can be used
+ in a user-defined directive that was invoked to handle a node. It
+ directs FreeMarker to continue the searching for the user-defined
+ directive in the further name-spaces (that is, in the name-spaces
+ that are after the name-space of the currently invoked
+ user-defined directive in the list of name-spaces). If a handler
+ for the node is found then it is invoked, otherwise
+ <code class="inline-code">fallback</code> does nothing.</p>
+
+ <p>A typical usage of this to write customization layer over a
+ handler library, that sometimes passes the handling to the
+ customized library:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#import "/lib/docbook.ftl" as docbook>
+
+<#--
+ We use the docbook library, but we override some handlers
+ in this namespace.
+-->
+<#visit document using [.namespace, docbook]>
+
+<#--
+ Override the "programlisting" handler, but only in the case if
+ its "role" attribute is "java"
+-->
+<#macro programlisting>
+ <#if .node.@role[0]!"" == "java">
+ <#-- Do something special here... -->
+ ...
+ <#else>
+ <#-- Just use the original (overidden) handler -->
+ <#fallback>
+ </#if>
+</#macro></pre></div>
+
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_userDefined.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_specvar.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directives.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directives.html b/builds/2.3.26-nightly/ref_directives.html
new file mode 100644
index 0000000..8551220
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directives.html
@@ -0,0 +1,54 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-chapter">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Directive Reference - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Directive Reference">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directives.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directives.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li></ul><div class=
"bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_builtins_expert.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_alphaidx.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-chapter" id="ref_directives" itemprop="headline">Directive Reference</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Section Contents</div>
+<ul><li><a class="page-menu-link" href="ref_directive_alphaidx.html" data-menu-target="ref_directive_alphaidx">Alphabetical index</a></li><li><a class="page-menu-link" href="ref_directive_assign.html" data-menu-target="ref_directive_assign">assign</a></li><li><a class="page-menu-link" href="ref_directive_attempt.html" data-menu-target="ref_directive_attempt">attempt, recover</a></li><li><a class="page-menu-link" href="ref_directive_autoesc.html" data-menu-target="ref_directive_autoesc">autoesc</a></li><li><a class="page-menu-link" href="ref_directive_compress.html" data-menu-target="ref_directive_compress">compress</a></li><li><a class="page-menu-link" href="ref_directive_escape.html" data-menu-target="ref_directive_escape">escape, noescape (deprecated)</a></li><li><a class="page-menu-link" href="ref_directive_flush.html" data-menu-target="ref_directive_flush">flush</a></li><li><a class="page-menu-link" href="ref_directive_ftl.html" data-menu-target="ref_directive_ftl">ftl</a></li><
li><a class="page-menu-link" href="ref_directive_function.html" data-menu-target="ref_directive_function">function, return</a></li><li><a class="page-menu-link" href="ref_directive_global.html" data-menu-target="ref_directive_global">global</a></li><li><a class="page-menu-link" href="ref_directive_if.html" data-menu-target="ref_directive_if">if, else, elseif</a></li><li><a class="page-menu-link" href="ref_directive_import.html" data-menu-target="ref_directive_import">import</a></li><li><a class="page-menu-link" href="ref_directive_include.html" data-menu-target="ref_directive_include">include</a></li><li><a class="page-menu-link" href="ref_directive_list.html" data-menu-target="ref_directive_list">list, else, items, sep, break</a></li><li><a class="page-menu-link" href="ref_directive_local.html" data-menu-target="ref_directive_local">local</a></li><li><a class="page-menu-link" href="ref_directive_macro.html" data-menu-target="ref_directive_macro">macro, nested, return</a></li><li><a
class="page-menu-link" href="ref_directive_noautoesc.html" data-menu-target="ref_directive_noautoesc">noautoesc</a></li><li><a class="page-menu-link" href="ref_directive_noparse.html" data-menu-target="ref_directive_noparse">noparse</a></li><li><a class="page-menu-link" href="ref_directive_nt.html" data-menu-target="ref_directive_nt">nt</a></li><li><a class="page-menu-link" href="ref_directive_outputformat.html" data-menu-target="ref_directive_outputformat">outputformat</a></li><li><a class="page-menu-link" href="ref_directive_setting.html" data-menu-target="ref_directive_setting">setting</a></li><li><a class="page-menu-link" href="ref_directive_stop.html" data-menu-target="ref_directive_stop">stop</a></li><li><a class="page-menu-link" href="ref_directive_switch.html" data-menu-target="ref_directive_switch">switch, case, default, break</a></li><li><a class="page-menu-link" href="ref_directive_t.html" data-menu-target="ref_directive_t">t, lt, rt</a></li><li><a class="page-menu-link"
href="ref_directive_userDefined.html" data-menu-target="ref_directive_userDefined">User-defined directive (<@...>)</a></li><li><a class="page-menu-link" href="ref_directive_visit.html" data-menu-target="ref_directive_visit">visit, recurse, fallback</a></li></ul> </div><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_builtins_expert.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_alphaidx.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_reservednames.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_reservednames.html b/builds/2.3.26-nightly/ref_reservednames.html
new file mode 100644
index 0000000..3e80bbc
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_reservednames.html
@@ -0,0 +1,96 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-chapter">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Reserved names in FTL - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Reserved names in FTL">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_reservednames.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_reservednames.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_reservednames.html"><span itemprop="name">Reserved names in FTL</span></a></li></ul><div c
lass="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Reserved names in FTL"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_specvar.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_deprecated.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-chapter" id="ref_reservednames" itemprop="headline">Reserved names in FTL</h1>
+</div></div><p>The following names cannot be used for top-level variables without
+ square-bracket syntax (as <code class="inline-code">.vars["in"]</code>), since they
+ are keywords in FTL:</p><ul>
+ <li>
+ <code class="inline-code">true</code>: boolean value
+ "true"
+ </li>
+
+ <li>
+ <code class="inline-code">false</code>: boolean value
+ "false"
+ </li>
+
+ <li>
+ <code class="inline-code">gt</code>: comparison operator "greater
+ than"
+ </li>
+
+ <li>
+ <code class="inline-code">gte</code>: comparison operator "greater
+ than or equivalent"
+ </li>
+
+ <li>
+ <code class="inline-code">lt</code>: comparison operator "less
+ than"
+ </li>
+
+ <li>
+ <code class="inline-code">lte</code>: comparison operator "less than
+ or equivalent"
+ </li>
+
+ <li>
+ <code class="inline-code">as</code>: used by a few directives
+ </li>
+
+ <li>
+ <code class="inline-code">in</code>: used by a few directives
+ </li>
+
+ <li>
+ <code class="inline-code">using</code>: used by a few directives
+ </li>
+ </ul><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_specvar.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_deprecated.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_specvar.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_specvar.html b/builds/2.3.26-nightly/ref_specvar.html
new file mode 100644
index 0000000..f10bf42
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_specvar.html
@@ -0,0 +1,290 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-chapter">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Special Variable Reference - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Special Variable Reference">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_specvar.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_specvar.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_specvar.html"><span itemprop="name">Special Variable Reference</span></a></li></ul><div cl
ass="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li>.spec_vars</li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Special Variable Reference"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_visit.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_reservednames.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-chapter" id="ref_specvar" itemprop="headline">Special Variable Reference</h1>
+</div></div><p>Special variables are variables defined by the FreeMarker engine
+ itself. To access them, you use the
+ <code class="inline-code">.<em class="code-color">variable_name</em></code> syntax. For
+ example, you can't write simply <code class="inline-code">version</code>; you have to
+ write <code class="inline-code">.version</code>.</p> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>As of FreeMarker 2.3.23, you can use camel case instead of snake
+ case for special variable names, like <code class="inline-code">dataModel</code>
+ instead of <code class="inline-code">data_model</code>. But know that then within
+ the same template, FreeMarker will enforce the usage of camel case for
+ all identifiers that are part of the template language (user defined
+ names are not affected).</p>
+ </div>
+<p>The supported special variables are:</p><ul>
+ <li>
+ <code class="inline-code">auto_esc</code> (since 2.3.24): Boolean
+ value that tells if auto-escaping (based on output format) is on or
+ off at the place where this variable is referred (resolved
+ statically). This is <em>not</em> affected by the
+ deprecated <code class="inline-code">escape</code> directive. This only deals with
+ automatic escaping based on the output format mechanism.
+ </li>
+
+ <li>
+ <code class="inline-code">current_template_name</code>: The name of
+ the template where we are now (available since FreeMarker 2.3.23).
+ This can be missing (<code class="inline-code">null</code>) if the template was
+ created on-the-fly in Java <span class="marked-for-programmers">(via
+ <code class="inline-code">new Template(null,
+ <em class="code-color">...</em>)</code>)</span>, rather than
+ loaded from a backing store by name <span class="marked-for-programmers">(via
+ <code class="inline-code"><em class="code-color">cfg</em>.getTemplate(name,
+ <em class="code-color">...</em>)</code>)</span>. Migration
+ notice: If you replace the deprecated
+ <code class="inline-code">template_name</code> with this, note that the later is a
+ 0-length string instead of missing (<code class="inline-code">null</code>) if the
+ template has no name, so you might want to write
+ <code class="inline-code">current_template_name!''</code> in legacy
+ templates.
+ </li>
+
+ <li>
+ <code class="inline-code">data_model</code>: A hash that you can use to
+ access the data-model directly. That is, variables you did with
+ <code class="inline-code">global</code> directive are not visible here.
+ </li>
+
+ <li>
+ <code class="inline-code">error</code> (available since FreeMarker
+ 2.3.1): This variable accessible in the body of the <a href="ref_directive_attempt.html#ref.directive.attempt"><code>recover</code>
+ directive</a>, where it stores the error message of the error we
+ recover from.
+ </li>
+
+ <li>
+ <code class="inline-code">globals</code>: A hash that you can use to access
+ the globally accessible variables: the data-model and the variables
+ created with <code class="inline-code">global</code> directive. Note that
+ variables created with <code class="inline-code">assign</code> or
+ <code class="inline-code">macro</code> are not globals, thus they never hide the
+ variables when you use <code class="inline-code">globals</code>.
+ </li>
+
+ <li>
+ <code class="inline-code">incompatible_improvements</code> (since
+ FreeMarker 2.3.24): The <a href="pgui_config_incompatible_improvements.html"><code>incompatbile_improvements</code>
+ setting</a> of the current FreeMarker configuration, as a
+ string.
+ </li>
+
+ <li>
+ <code class="inline-code">lang</code>: Returns the language part of
+ the current value of the locale setting. For example if
+ <code class="inline-code">.locale</code> is <code class="inline-code">en_US</code>, then
+ <code class="inline-code">.lang</code> is <code class="inline-code">en</code>.
+ </li>
+
+ <li>
+ <code class="inline-code">locale</code>: Returns the current value
+ of the locale setting. This is a string, for example
+ <code class="inline-code">en_US</code>. For more information about locale strings
+ <a href="ref_directive_setting.html#ref.directive.setting">see the
+ <code>setting</code> directive</a>.
+ </li>
+
+ <li>
+ <code class="inline-code">locale_object</code> (available since
+ FreeMarker 2.3.21): Returns the current value of the locale setting
+ as a <code class="inline-code">java.util.Locale</code> object, rather than as a
+ string. This meant to be used instead of <code class="inline-code">.locale</code>
+ when you want to pass it as a <code class="inline-code">java.util.Locale</code>
+ object to a Java method. (The <code class="inline-code">Locale</code> object will
+ be wrapped according the <code class="inline-code">object_wrapper</code> setting
+ value. Whether you can actually pass this value to a Java method as
+ a <code class="inline-code">Locale</code> object depends on the object wrapper,
+ but an object wrapper that let you call Java methods directly is
+ very unlikely to not support that.)
+ </li>
+
+ <li>
+ <code class="inline-code">locals</code>: A hash that you can use to access
+ the local variables (the variables created with the
+ <code class="inline-code">local</code> directive, and the parameters of
+ macro).
+ </li>
+
+ <li>
+ <code class="inline-code">main</code>: A hash that you can use to access the
+ main <a href="dgui_misc_namespace.html">namespace</a>. Note that
+ global variables like the variables of data-model are
+ <em>not</em> visible through this hash.
+ </li>
+
+ <li>
+ <code class="inline-code">main_template_name</code>: The name of the
+ top level template (available since FreeMarker 2.3.23). <span class="marked-for-programmers">(In Java, this is the template for which
+ <code class="inline-code">Template.process</code> was called.) </span>This can
+ be missing (<code class="inline-code">null</code>) if the template was created
+ on-the-fly in Java <span class="marked-for-programmers">(via <code class="inline-code">new
+ Template(null, <em class="code-color">...</em>)</code>)</span>,
+ rather than loaded from a backing store by name <span class="marked-for-programmers">(via
+ <code class="inline-code"><em class="code-color">cfg</em>.getTemplate(name,
+ <em class="code-color">...</em>)</code>)</span>. Migration
+ notice: If you replace the deprecated
+ <code class="inline-code">template_name</code> with this, note that the later is a
+ 0-length string instead of missing (<code class="inline-code">null</code>) if the
+ template has no name, so you might want to write
+ <code class="inline-code">main_template_name!''</code> in legacy templates.
+ </li>
+
+ <li>
+ <code class="inline-code">namespace</code>: A hash that you can use to
+ access the current <a href="dgui_misc_namespace.html">namespace</a>. Note that global
+ variables like the variables of data-model are
+ <em>not</em> visible through this hash.
+ </li>
+
+ <li>
+ <code class="inline-code">node</code> (alias <code class="inline-code">current_node</code>
+ for historical reasons): The node you are currently processing with
+ the visitor pattern (i.e. with the <a href="ref_directive_visit.html"><code>visit</code>,
+ <code>recurse</code>, ...etc. directives</a>). Also, it
+ initially stores the root node when you use the <a href="pgui_misc_ant.html">FreeMarker XML Ant task</a>.
+ </li>
+
+ <li>
+ <code class="inline-code">now</code>: Returns the current date-time.
+ Usage examples: "<code class="inline-code">Page generated: ${.now}</code>",
+ "<code class="inline-code">Today is ${.now?date}</code>", "<code class="inline-code">The current
+ time is ${.now?time}</code>".
+ </li>
+
+ <li>
+ Returns the name of the current <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_outputformat">output format</a>.
+ This value is never missing/null. It's maybe the string
+ <code class="inline-code">"undefined"</code>, which is just the name of the
+ default output format.
+ </li>
+
+ <li>
+ <code class="inline-code">output_encoding</code> (available since
+ FreeMarker 2.3.1): Returns the name of the current output charset.
+ This special variable is not existent if the framework that
+ encapsulates FreeMarker doesn't specify the output charset for
+ FreeMarker. <span class="marked-for-programmers">(Programmers can read more
+ about charset issues <a href="pgui_misc_charset.html">here...</a>)</span>
+ </li>
+
+ <li>
+ <code class="inline-code">pass</code>: This is a macro that does nothing. It
+ has no parameters. Mostly used as no-op node handler in XML
+ processing.
+ </li>
+
+ <li>
+ <code class="inline-code">template_name</code>: <em>Don't use
+ it, because its behavior is strange when macros are used; use
+ <code class="inline-code">current_template_name</code> or
+ <code class="inline-code">main_template_name</code> instead (see migration notices
+ there).</em> Gives the name of the main template, or if we are
+ running an included or imported template, the name of that template.
+ When calling macros, it becomes rather confusing: the macro call
+ won't change the value of this special variable, but when
+ <code class="inline-code">nested</code> is called, it changes it to the name of
+ the template that belongs to the current namespace. (Available since
+ FreeMarker 2.3.14.)
+ </li>
+
+ <li>
+ <code class="inline-code">url_escaping_charset</code> (available
+ since FreeMarker 2.3.1): If exists, it stores the name of the
+ charset that should be used for URL escaping. If this variable
+ doesn't exist that means that nobody has specified what charset
+ should be used for URL encoding yet. In this case the <a href="ref_builtins_string.html#ref_builtin_url"><code>url</code> built-in</a>
+ uses the charset specified by the <code class="inline-code">output_encoding</code>
+ special variable for URL encoding; custom mechanism may follow the
+ same logic. <span class="marked-for-programmers">(Programmers can read more
+ about charset issues <a href="pgui_misc_charset.html">here...</a>)</span>
+ </li>
+
+ <li>
+ <code class="inline-code">output_format</code> (since 2.3.24): The
+ name of output format at the place where this variable is referred
+ (resolved statically), such as <code class="inline-code">"HTML"</code>,
+ <code class="inline-code">"XML"</code>, <code class="inline-code">"RTF"</code>,
+ <code class="inline-code">"plainText"</code>, <code class="inline-code">"undefined"</code>, etc.
+ <span class="marked-for-programmers">(The available names can be extended
+ by the programmers, by the
+ <code class="inline-code">registered_custom_output_formats</code>
+ setting.)</span>
+ </li>
+
+ <li>
+ <code class="inline-code">vars</code>: Expression
+ <code class="inline-code">.vars.foo</code> returns the same variable as expression
+ <code class="inline-code">foo</code>. It's useful if for some reasons you have to
+ use square bracket syntax, since that works only for hash sub
+ variables, so you need an artificial parent hash. For example, to
+ read a top-level variable that has a strange name that would confuse
+ FreeMarker, you can write
+ <code class="inline-code">.vars["A�strange�name!"]</code>. Or, to access a
+ top-level variable with dynamic name given with variable
+ <code class="inline-code">varName</code> you can write
+ <code class="inline-code">.vars[varName]</code>. Note that the hash returned by
+ <code class="inline-code">.vars</code> does not support <code class="inline-code">?keys</code>
+ and <code class="inline-code">?values</code>.
+ </li>
+
+ <li>
+ <code class="inline-code">version</code>: Returns the FreeMarker
+ version number as string, for example <code class="inline-code">2.2.8</code>. This
+ can be used to check which FreeMarker version does your application
+ use, but note that this special variable does not exist prior to the
+ 2.3.0 or 2.2.8 versions. The version number of non-final releases
+ contains dash and further info after the numbers, like in
+ 2.3.21-nightly_20140726T151800Z.
+ </li>
+ </ul><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_visit.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_reservednames.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/search-results.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/search-results.html b/builds/2.3.26-nightly/search-results.html
new file mode 100644
index 0000000..bef3650
--- /dev/null
+++ b/builds/2.3.26-nightly/search-results.html
@@ -0,0 +1,65 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-docgen-search-results">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Search results - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Search results">
+<meta property="og:locale" content="en_US">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html#searchresults"><span itemprop="name">Search results</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_temp
late_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Search results"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="title-wrapper">
+<h2 class="content-header header-section" id="searchresults">Search results</h2>
+</div></div> <div class="search-results">
+ <script>
+ (function() {
+ var cx = '003127866208504630097:arjqbv_znfw';
+ var gcse = document.createElement('script');
+ gcse.type = 'text/javascript';
+ gcse.async = true;
+ gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
+ '//cse.google.com/cse.js?cx=' + cx;
+ var s = document.getElementsByTagName('script')[0];
+ s.parentNode.insertBefore(gcse, s);
+ })();
+ </script>
+ <gcse:searchresults-only>Loading\u2026</gcse:searchresults-only>
+ </div>
+<div class="bottom-pagers-wrapper"></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[22/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_compress.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_compress.html b/builds/2.3.26-nightly/ref_directive_compress.html
new file mode 100644
index 0000000..3c59d01
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_compress.html
@@ -0,0 +1,107 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>compress - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="compress">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_compress.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_compress.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_compress.html"><span itemprop="name">compress</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","compress"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_autoesc.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_escape.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_compress" itemprop="headline">compress</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_82" data-menu-target="autoid_82">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_83" data-menu-target="autoid_83">Description</a></li></ul> </div><a name="ref.directive.compress"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_82">Synopsis</h2>
+
+
+
+<pre class="metaTemplate">
+<code class="inline-code"><#compress>
+ <em class="code-color">...</em>
+</#compress></code>
+</pre>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_83">Description</h2>
+
+
+ <p>The compress directive is useful for removing superfluous
+ <a href="gloss.html#gloss.whiteSpace">white-space</a> when you use a
+ white-space insensitive format (e.g. HTML or XML). It captures the
+ output generated inside its body (i.e. between its start-tag and
+ end-tag), and reduces all unbroken white-space sequences to a single
+ white-space character. The inserted character will be a <a href="gloss.html#gloss.lineBreak">line break</a> if the replaced sequence
+ contains line breaks, or a space otherwise. The very first and very
+ last unbroken white-space sequences will be completely
+ removed.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign x = " moo \n\n ">
+(<#compress>
+ 1 2 3 4 5
+ ${moo}
+ test only
+
+ I said, test only
+
+</#compress>)</pre></div>
+
+ <p>will output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">(1 2 3 4 5
+moo
+test only
+I said, test only)</pre></div>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_autoesc.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_escape.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_escape.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_escape.html b/builds/2.3.26-nightly/ref_directive_escape.html
new file mode 100644
index 0000000..ebd956b
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_escape.html
@@ -0,0 +1,232 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>escape, noescape (deprecated) - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="escape, noescape (deprecated)">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_escape.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_escape.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_escape.html"><span itemprop="name">escape, noescape (deprecated)</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","escape, noescape (deprecated)"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_compress.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_flush.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_escape" itemprop="headline">escape, noescape (deprecated)</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_84" data-menu-target="autoid_84">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_85" data-menu-target="autoid_85">Description</a></li></ul> </div><a name="ref.directive.escape"></a><a name="ref.directive.noescape"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_84">Synopsis</h2>
+
+
+
+<pre class="metaTemplate">
+<code class="inline-code"><#escape <em class="code-color">identifier</em> as <em class="code-color">expression</em>>
+ <em class="code-color">...</em>
+ <#noescape><em class="code-color">...</em></#noescape>
+ <em class="code-color">...</em>
+</#escape></code>
+</pre>
+
+
+ <p>Camel case name variant: <code class="inline-code">noEscape</code></p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_85">Description</h2>
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>These directives are <em>deprecated</em> by
+ <a href="dgui_misc_autoescaping.html">output-format-based
+ auto-escaping</a> since 2.3.24. Furthermore, on places that use
+ auto-escaping (with an output format that actually does escaping)
+ you aren't allowed to use the <code class="inline-code">escape</code> directive
+ (as you will find out from the parsing error message
+ anyway).</p>
+ </div>
+
+
+ <p>When you surround a part of the template with an escape
+ directive, interpolations
+ (<code class="inline-code">${<em class="code-color">...</em>}</code>) that occur
+ inside the block are combined with the escaping expression
+ automatically. This is a convenience method for avoiding writing
+ similar expressions all over. It does not affect interpolations in
+ string literals (as in <code class="inline-code"><#assign x =
+ "Hello�${user}!"></code>). Also, it does not affect numerical
+ interpolations
+ (<code class="inline-code">#{<em class="code-color">...</em>}</code>).</p>
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><strong><#escape x as x?html></strong>
+ First name: ${firstName}
+ Last name: ${lastName}
+ Maiden name: ${maidenName}
+<strong></#escape></strong></pre></div>
+
+ <p>is actually equivalent to:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"> First name: ${firstName<strong>?html</strong>}
+ Last name: ${lastName<strong>?html</strong>}
+ Maiden name: ${maidenName<strong>?html</strong>}</pre></div>
+
+ <p>Note that it is irrelevant what identifier you use in the
+ directive - it just serves as a formal parameter to the escaping
+ expression.</p>
+
+ <p>When you are calling macros or the <code class="inline-code">include</code>
+ directive, it is important to understand that escape has effect only
+ on interpolations that occur between the <code class="inline-code"><#escape
+ <em class="code-color">...</em>></code> and
+ <code class="inline-code"></#escape></code> <em>in the template
+ text</em>. That is, it will not escape anything that is before
+ <code class="inline-code"><#escape <em class="code-color">...</em>></code> in
+ the text, or after the <code class="inline-code"></#escape></code> in the
+ text, not even if that part is called from inside the
+ <code class="inline-code">escape</code>-d section.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign x = "<test>">
+<#macro m1>
+ m1: ${x}
+</#macro>
+<#escape x as x?html>
+ <#macro m2>m2: ${x}</#macro>
+ ${x}
+ <@m1/>
+</#escape>
+${x}
+<@m2/></pre></div>
+
+ <p>the output will be:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> &lt;test&gt;
+ m1: <test>
+<test>
+m2: &lt;test&gt;</pre></div>
+
+ <p><span class="marked-for-programmers">More technically, the effects of
+ <code class="inline-code">escape</code> directive are applied at template parsing
+ time rather than at template processing time. This means that if you
+ call a macro or include another template from within an escape
+ block, it won't affect the interpolations in the macro/included
+ template, since macro calls and template includes are evaluated at
+ template processing time. On the other hand, if you surround one or
+ more macro declarations (which are evaluated at template parsing
+ time, as opposed to macro calls) with an escape block, the
+ interpolations in those macros will be combined with the escaping
+ expression.</span></p>
+
+ <p>Sometimes there is a need to temporarily turn off escaping for
+ one or two interpolations in an escape block. You can achieve this
+ by closing and later reopening the escape block, but then you have
+ to write the escaping expression twice. You can instead use the
+ noescape directive:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#escape x as x?html>
+ From: ${mailMessage.From}
+ Subject: ${mailMessage.Subject}
+ <strong><#noescape></strong>Message: ${mailMessage.htmlFormattedBody}<strong></#noescape></strong>
+ <em>...</em>
+</#escape></pre></div>
+
+ <p>is equivalent to:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"> From: ${mailMessage.From?html}
+ Subject: ${mailMessage.Subject?html}
+ Message: ${mailMessage.htmlFormattedBody}
+ ...</pre></div>
+
+ <p>Escapes can be nested (although you will do it only in rare
+ circumstances). Therefore, you can write something like the below
+ code (the example is admittedly a bit stretched, as you'd probably
+ place item codes in a sequence and use <code class="inline-code">list</code> to
+ iterate over them, but we're now doing it this way just to
+ illustrate the point):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><strong><#escape x as x?html></strong>
+ Customer Name: ${customerName}
+ Items to ship:
+ <strong><#escape x as itemCodeToNameMap[x]></strong>
+ ${itemCode1}
+ ${itemCode2}
+ ${itemCode3}
+ ${itemCode4}
+ <strong></#escape></strong>
+<strong></#escape></strong></pre></div>
+
+ <p>is actually equivalent to:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"> Customer Name: ${customerName?html}
+ Items to ship:
+ ${itemCodeToNameMap[itemCode1]?html}
+ ${itemCodeToNameMap[itemCode2]?html}
+ ${itemCodeToNameMap[itemCode3]?html}
+ ${itemCodeToNameMap[itemCode4]?html}</pre></div>
+
+ <p>When you use the noescape directive in a nested escape block,
+ it undoes only a single level of escaping. Therefore, to completely
+ turn off escaping in a two-level deep escaped block, you need to use
+ two nested noescape directives as well.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_compress.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_flush.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_flush.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_flush.html b/builds/2.3.26-nightly/ref_directive_flush.html
new file mode 100644
index 0000000..6dc6106
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_flush.html
@@ -0,0 +1,96 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>flush - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="flush">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_flush.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_flush.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_flush.html"><span itemprop="name">flush</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","flush"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_escape.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_ftl.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_flush" itemprop="headline">flush</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_86" data-menu-target="autoid_86">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_87" data-menu-target="autoid_87">Description</a></li></ul> </div><a name="ref.directive.flush"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_86">Synopsis</h2>
+
+
+
+<pre class="metaTemplate"><code class="inline-code"><#flush></code></pre>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_87">Description</h2>
+
+
+ <p>When FreeMarker generates the output, it's usually not sent
+ immediately to the final receiving party (like a web browser or a
+ destination file), but is accumulated in a buffer, then it's sent
+ out in bigger chunks. The exact rules of the buffering is not
+ decided by FreeMarker, but by the embedding software. Sending out
+ the content accumulated in the buffer is called flushing. Although
+ flushing happens automatically, sometimes you want to force it on
+ certain points of the template processing, and this is what the
+ <code class="inline-code">flush</code> directive does. Whether it's needed at
+ certain points should be decided by a programmer, not a
+ designer.</p>
+
+ <p>Note that while <code class="inline-code">flush</code> tells the embedding
+ software that we want to flush, that might as well decides to ignore
+ this request. It's not in the hands of FreeMarker.</p>
+
+ <p><span class="marked-for-programmers">Flush simply calls the
+ <code class="inline-code">flush()</code> method of the currently used
+ <code class="inline-code">java.io.Writer</code> instance. The whole buffering and
+ flushing mechanism is implemented in the <code class="inline-code">Writer</code>
+ (that you have passed as the parameter of the
+ <code class="inline-code">Template.process</code> method); FreeMarker does not
+ deal with it.</span></p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_escape.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_ftl.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_ftl.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_ftl.html b/builds/2.3.26-nightly/ref_directive_ftl.html
new file mode 100644
index 0000000..0683402
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_ftl.html
@@ -0,0 +1,285 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>ftl - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="ftl">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_ftl.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_ftl.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_ftl.html"><span itemprop="name">ftl</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","ftl"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_flush.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_function.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_ftl" itemprop="headline">ftl</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_88" data-menu-target="autoid_88">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_89" data-menu-target="autoid_89">Description</a></li></ul> </div><a name="ref.directive.ftl"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_88">Synopsis</h2>
+
+
+
+<pre class="metaTemplate">
+<code class="inline-code"><#ftl <em class="code-color">param1</em>=<em class="code-color">value1</em> <em class="code-color">param2</em>=<em class="code-color">value2</em> <em class="code-color">...</em> <em class="code-color">paramN</em>=<em class="code-color">valueN</em>></code>
+</pre>
+
+
+ <p>Where:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code"><em class="code-color">param1</em></code>,
+ <code class="inline-code"><em class="code-color">param2</em></code>, ...etc.:
+ Name of the parameter. Not an expression. Allowed parameters
+ are: <code class="inline-code">encoding</code>,
+ <code class="inline-code">strip_whitespace</code>,
+ <code class="inline-code">strip_text</code>, ...etc. See below.
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">value1</em></code>,
+ <code class="inline-code"><em class="code-color">value2</em></code>, ...etc.:
+ The value of parameter. This must be a constant expression (as
+ <code class="inline-code">true</code>, or <code class="inline-code">"ISO-8859-5"</code>, or
+ <code class="inline-code">{x:1, y:2}</code>). It can't use variables.
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_89">Description</h2>
+
+
+ <p>Tells information about the template for FreeMarker and for
+ other tools, also helps programs to automatically detect if a text
+ file is an FTL file. This directive, if present, must be the very
+ first thing in the template. Any <a href="gloss.html#gloss.whiteSpace">white-space</a> before this directive
+ will be ignored. The old-syntax (<code class="inline-code">#</code>-less) format
+ of this directive is not supported.</p>
+
+ <p>The settings (encoding, white-space stripping, etc.) given
+ here has the highest precedence, that is, they will be used for the
+ template regardless of any FreeMarker configuration settings.</p>
+
+ <p>Possible parameters:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">attributes</code>: This is a hash that
+ associates arbitrary attributes (name-value pairs) to the
+ template. The values of the attributes can be of any type
+ (string, number, sequence... etc.). FreeMarker doesn't try to
+ understand the meaning of the attributes. It's up to the
+ application that encapsulates FreeMarker (as a Web application
+ framework). Thus, the set of allowed attributes and their
+ semantic is application (Web application framework) dependent.
+ <span class="marked-for-programmers">Programmers: you can get the
+ attributes associated with a <code class="inline-code">Template</code> object
+ with its <code class="inline-code">getCustomAttributeNames</code> and
+ <code class="inline-code">getCustomAttribute</code> methods (inherited from
+ <code class="inline-code">freemarker.core.Configurable</code>). As the
+ template attributes are associated with the
+ <code class="inline-code">Template</code> object when the template is parsed,
+ the attributes can be read anytime, the template need not be
+ executed. The methods mentioned return the attribute values
+ unwrapped, that is, with FreeMarker independent type as
+ <code class="inline-code">java.util.List</code>.</span></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">auto_esc</code>: A boolean constant to turn
+ <a href="dgui_misc_autoescaping.html">auto-escaping</a> on
+ or off. It depends on the
+ <code class="inline-code">auto_escaping_policy</code> of the FreeMarker
+ configuration, but usually auto-escaping will be by default on,
+ if the current <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_outputformat">output
+ format</a> uses auto-escaping by default. So you mostly use
+ this to disable auto-escaping (<code class="inline-code">false</code> value).
+ An attempt to use <code class="inline-code">true</code> value when the current
+ output format is a <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_nonmarkupof">non-markup output
+ format</a> (which hence can't escape) will cause <a href="gloss.html#gloss.parseTimeError">parse-time error</a>. Note
+ that you can turn auto-escaping on/off for only a part of the
+ template with the <a href="ref_directive_autoesc.html"><code>autoesc</code></a>
+ and <a href="ref_directive_noautoesc.html"><code>noautoesc</code>
+ directives</a>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">encoding</code>: With this you can specify the
+ encoding (charset) of the template in the template file itself.
+ <span class="marked-for-programmers">(That is, this will be the
+ <code class="inline-code">encoding</code> setting of the newly created
+ <code class="inline-code">Template</code>, and not even the
+ <code class="inline-code">encoding</code> parameter to
+ <code class="inline-code">Configuration.getTemplate</code> can override
+ it)</span>. Note however, that FreeMarker will try to find and
+ interpret the <code class="inline-code">ftl</code> directive first with the
+ automatically guessed encoding (which depends on the FreeMarker
+ configuration set by the programmers), and only then realizes if
+ the <code class="inline-code">ftl</code> directive dictates something
+ different, and re-read the template with the new encoding. Thus,
+ the template must be valid FTL until the end of
+ <code class="inline-code">ftl</code> tag with the encoding tried first. The
+ valid values of this parameter are MIME-preferred charset names
+ from the IANA Charset Registry, like ISO-8859-5, UTF-8 or
+ Shift_JIS.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">ns_prefixes</code>: This is a hash that
+ associates prefixes with node namespaces. For example:
+ <code class="inline-code">{"e":"http://example.com/ebook",
+ "vg":"http://example.com/vektorGraphics"}</code>. This is
+ mostly used with XML processing where the prefixes can be used
+ in XML queries, but it also influences the working of <a href="ref_directive_visit.html">directives
+ <code>visit</code> and <code>recurse</code></a>.
+ Only one prefix can be registered for the same node namespace
+ (otherwise an error will occur), so there is one-to-one relation
+ between prefixes and node namespaces. Prefixes
+ <code class="inline-code">D</code> and <code class="inline-code">N</code> are reserved. If
+ you register prefix <code class="inline-code">D</code>, then other than you
+ associate the node namespace with prefix <code class="inline-code">D</code>,
+ you also set the default node namespace. Prefix
+ <code class="inline-code">N</code> can't be registered; it is used to denote
+ nodes with no node namespace in certain places, when (and only
+ when) prefix <code class="inline-code">D</code> is registered. (To see the
+ usage of default node namespace, <code class="inline-code">N</code>, and
+ prefixes in general, see the part about <a href="xgui.html">XML
+ processing</a> and <a href="ref_directive_visit.html"><code>visit</code> and
+ <code>recurse</code></a> in the reference.) The effect
+ of <code class="inline-code">ns_prefixes</code> is limited to a single <a href="dgui_misc_namespace.html">FTL namespace</a>, namely, to
+ the FTL namespace that was created for the template. This also
+ means that <code class="inline-code">ns_prefixes</code> has effect only when
+ an FTL namespace is created for the template that contains it,
+ otherwise the <code class="inline-code">ns_prefixes</code> parameter has no
+ effect. An FTL namespace is made for a template when: (a) the
+ template is the "main" template, that is, it is not
+ invoked as a result of an <code class="inline-code"><#include
+ ...></code>, but it is directly invoked (<span class="marked-for-programmers">with the <code class="inline-code">process</code> Java
+ method of class <code class="inline-code">Template</code> or
+ <code class="inline-code">Environment</code></span>); (b) the template is
+ invoked directly with <code class="inline-code"><#import
+ ...></code>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">output_format</code>: Specifies the <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_outputformat">output
+ format</a> of this template. This must be a string literal,
+ which refers to the name of the output format. See the <a href="dgui_misc_autoescaping.html#topic.predefinedOutputFormats">table of predefined
+ output formats here</a>. Other names can exist if the
+ programmers has added them via the
+ <code class="inline-code">registered_custom_output_formats</code>
+ configuration setting
+ (<code class="inline-code">Configuration.setRegisteredCustomOutputFormats(<em class="code-color">...</em>)</code>).
+ The referred output format must be known by the
+ <code class="inline-code">Configuration</code>, or else a <a href="gloss.html#gloss.parseTimeError">parse-time error </a>will
+ occur. The name can also refer to a so called combined output
+ format as
+ <code class="inline-code">"<em class="code-color">outerFormatName</em>{<em class="code-color">innerFormatName</em>}"</code>;
+ <a href="ref_directive_outputformat.html#topic.combinedOutputFormats">see more about
+ combined output formats here</a>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">strict_syntax</code>: This turns on/off
+ "strict syntax", which is the standard syntax after
+ FreeMarker 2.1. Valid values are the boolean constants
+ <code class="inline-code">true</code> and <code class="inline-code">false</code>. (And for
+ backward compatibility, strings <code class="inline-code">"yes"</code>,
+ <code class="inline-code">"no"</code>, <code class="inline-code">"true"</code>,
+ <code class="inline-code">"false"</code>). The default value (i.e., when you
+ don't use this parameter) depends on the FreeMarker
+ configuration set by the programmers, but it's most certainly
+ set to <code class="inline-code">true</code>. For more information read: <a href="ref_depr_oldsyntax.html">Deprecated FTL constructs/Old FTL syntax</a></p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">strip_text</code>: When enabled, all top-level
+ text in a template is removed when the template is parsed. This
+ does not affect text within macros, directives, or
+ interpolations. Valid values are the boolean constants
+ <code class="inline-code">true</code> and <code class="inline-code">false</code>. (And for
+ backward compatibility, strings <code class="inline-code">"yes"</code>,
+ <code class="inline-code">"no"</code>, <code class="inline-code">"true"</code>,
+ <code class="inline-code">"false"</code>). The default value (i.e. when you
+ don't use this parameter) is <code class="inline-code">false</code>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">strip_whitespace</code>: This enables/disables
+ <a href="dgui_misc_whitespace.html#dgui_misc_whitespace_stripping">white-space
+ stripping</a>. Valid values are the boolean constants
+ <code class="inline-code">true</code> and <code class="inline-code">false</code>. (And for
+ backward compatibility, strings <code class="inline-code">"yes"</code>,
+ <code class="inline-code">"no"</code>, <code class="inline-code">"true"</code>,
+ <code class="inline-code">"false"</code>). The default value (i.e. when you
+ don't use this parameter) depends on the FreeMarker
+ configuration set by the programmers, but it should be
+ <code class="inline-code">true</code> for new projects.</p>
+ </li>
+ </ul>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>As of FreeMarker 2.3.23, you can use camel case instead of
+ snake case for parameter names, like
+ <code class="inline-code">outputFormat</code> instead of
+ <code class="inline-code">output_format</code>. But know that then within the
+ same template, FreeMarker will enforce the usage of camel case for
+ all identifiers that are part of the template language (user
+ defined names are not affected).</p>
+ </div>
+
+
+ <p>This directive also determines if the template uses angle
+ bracket syntax (e.g. <code class="inline-code"><#include 'foo.ftl'></code>)
+ or <a href="dgui_misc_alternativesyntax.html">square bracket
+ syntax</a> (e.g. <code class="inline-code">[#include 'foo.ftl']</code>).
+ Simply, the syntax used for this directive will be the syntax used
+ for the whole template, regardless of the FreeMarker configuration
+ settings.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_flush.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_function.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_function.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_function.html b/builds/2.3.26-nightly/ref_directive_function.html
new file mode 100644
index 0000000..22e00bc
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_function.html
@@ -0,0 +1,173 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>function, return - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="function, return">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_function.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_function.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_function.html"><span itemprop="name">function, return</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","function, return"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_ftl.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_global.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_function" itemprop="headline">function, return</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_90" data-menu-target="autoid_90">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_91" data-menu-target="autoid_91">Description</a></li></ul> </div><a name="ref.directive.function"></a><a name="ref.directive.function.return"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_90">Synopsis</h2>
+
+
+
+<pre class="metaTemplate">
+<code class="inline-code"><#function <em class="code-color">name</em> <em class="code-color">param1</em> <em class="code-color">param2</em> <em class="code-color">... paramN</em>>
+ <em class="code-color">...</em>
+ <#return <em class="code-color">returnValue</em>>
+ <em class="code-color">...</em>
+</#function></code>
+</pre>
+
+
+ <p>Where:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code"><em class="code-color">name</em></code>: name
+ of method variable (not expression)
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">param1</em></code>,
+ <code class="inline-code"><em class="code-color">param2</em></code>, ...etc.:
+ the name of the <a href="dgui_misc_var.html">local
+ variables</a> store the parameter values (not expression),
+ optionally followed by <code class="inline-code">=</code> and the default
+ value (that's an expression).
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">paramN</em></code>, the
+ last parameter, may optionally include a trailing ellipsis
+ (<code class="inline-code">...</code>), which indicates the macro takes a
+ variable number of parameters. Local variable
+ <code class="inline-code"><em class="code-color">paramN</em></code> will be a
+ sequence of the extra parameters.
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">returnValue</em></code>:
+ the expression that calculates the value of the method
+ call.
+ </li>
+ </ul>
+
+ <p>The <code class="inline-code">return</code> directive can be used anywhere
+ and for any times between the <code class="inline-code"><#function
+ <em class="code-color">...</em>></code> and
+ <code class="inline-code"></#function></code>.</p>
+
+ <p>Parameters without default value must precede parameters with
+ default value
+ (<code class="inline-code"><em class="code-color">paramName</em>=<em class="code-color">defaultValue</em></code>).</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_91">Description</h2>
+
+
+ <p>Creates a method variable (in the current namespace, if you
+ know namespace feature). This directive works in the same way as the
+ <a href="ref_directive_macro.html#ref.directive.macro"><code>macro</code>
+ directive</a>, except that <code class="inline-code">return</code> directive
+ <em>must</em> have a parameter that specifies the return
+ value of the method, and that attempts to write to the output will
+ be ignored. If the <code class="inline-code"></#function></code> is reached
+ (i.e. there was no <code class="inline-code">return
+ <em class="code-color">returnValue</em></code>), then the return
+ value of the method is an undefined variable.</p>
+
+ <p>Example 1: Creating a method that calculates the average of
+ two numbers:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#function avg x y>
+ <#return (x + y) / 2>
+</#function>
+${avg(10, 20)}</pre></div>
+
+ <p>will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">15</pre></div>
+
+ <p>Example 2: Creating a method that calculates the average of
+ multiple numbers:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#function avg nums...>
+ <#local sum = 0>
+ <#list nums as num>
+ <#local sum += num>
+ </#list>
+ <#if nums?size != 0>
+ <#return sum / nums?size>
+ </#if>
+</#function>
+${avg(10, 20)}
+${avg(10, 20, 30, 40)}
+${avg()!"N/A"}</pre></div>
+
+ <p>will print:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">15
+25
+N/A</pre></div>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_ftl.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_global.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_directive_global.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_directive_global.html b/builds/2.3.26-nightly/ref_directive_global.html
new file mode 100644
index 0000000..e0a4a1d
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_directive_global.html
@@ -0,0 +1,136 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>global - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="global">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_directive_global.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_directive_global.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-
3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_global.html"><span itemprop="name">global</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","global"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_function.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_if.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_directive_global" itemprop="headline">global</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_92" data-menu-target="autoid_92">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_93" data-menu-target="autoid_93">Description</a></li></ul> </div><a name="ref.directive.global"></a>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_92">Synopsis</h2>
+
+
+
+<pre class="metaTemplate">
+<code class="inline-code"><#global <em class="code-color">name</em>=<em class="code-color">value</em>></code>
+or
+<code class="inline-code"><#global <em class="code-color">name1</em>=<em class="code-color">value1</em> <em class="code-color">name2</em>=<em class="code-color">value2</em> <em class="code-color">... nameN</em>=<em class="code-color">valueN</em>></code>
+or
+<code class="inline-code"><#global <em class="code-color">name</em>>
+ <em class="code-color">capture this</em>
+</#global></code>
+</pre>
+
+
+ <p>Where:</p>
+
+ <ul>
+ <li>
+ <code class="inline-code"><em class="code-color">name</em></code>: name
+ of the variable. It is not expression. However, it can be
+ written as a string literal, which is useful if the variable
+ name contains reserved characters, for example
+ <code class="inline-code"><#global "foo-bar" = 1></code>. Note that this
+ string literal does not expand interpolations (as
+ <code class="inline-code">"${foo}"</code>).
+ </li>
+
+ <li>
+ <code class="inline-code">=</code>: Assignment operator, which can also
+ be one of the shorthand assignment operators
+ (<code class="inline-code">++</code>, <code class="inline-code">+=</code>, etc.), just like
+ with <a href="ref_directive_assign.html">the
+ <code>assign</code> directive</a>,
+ </li>
+
+ <li>
+ <code class="inline-code"><em class="code-color">value</em></code>: the
+ value to store. Expression.
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_93">Description</h2>
+
+
+ <p>This directive is similar to <a href="ref_directive_assign.html#ref.directive.assign"><code>assign</code></a>, but
+ the variable created will be visible in all <a href="dgui_misc_namespace.html">namespaces</a>, and will not be
+ inside any namespace. Exactly as if you would create (or replace) a
+ variable of the data-model. Hence, the variable is global. If a
+ variable with the same name already exists in the data-model, it
+ will be hidden by the variable created with this directive. If a
+ variable with the same name already exists in the current namespace,
+ that will hide the variable created with <code class="inline-code">global</code>
+ directive.</p>
+
+ <p>For example, with <code class="inline-code"><#global x = 1></code> you
+ create a variable that is visible as <code class="inline-code">x</code> in all
+ namespaces, unless another variable called <code class="inline-code">x</code>
+ hides it (for example a variable what you have created as
+ <code class="inline-code"><#assign x = 2></code>). In this case, you can use
+ <a href="dgui_template_exp.html#dgui_template_exp_var_special">special
+ variable</a> <code class="inline-code">globals</code>, like
+ <code class="inline-code">${.globals.x}</code>. Note that with
+ <code class="inline-code">globals</code> you see all globally accessible
+ variables; not only the variables that were created with
+ <code class="inline-code">global</code> directive, but also the variables of the
+ data-model.</p>
+
+ <p>Note for custom JSP tag users: The set of variables created
+ with this directive corresponds to the JSP page-scope. This means,
+ that if a custom JSP tag wants to get a page-scope attribute
+ (page-scope bean), a variable with the same name in the current
+ namespace will not hide it from the viewpoint of the JSP tag.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_function.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_if.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[09/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_15.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_15.html b/builds/2.3.26-nightly/versions_2_3_15.html
new file mode 100644
index 0000000..be94b71
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_15.html
@@ -0,0 +1,115 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.15 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.15">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_15.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_15.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_15.html"><span itemprop="name">2.3.15</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.15"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_16.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_14.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_15" itemprop="headline">2.3.15</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_186" data-menu-target="autoid_186">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_187" data-menu-target="autoid_187">Changes on the Java side</a></li></ul> </div><p>Date of release: 2008-12-16</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_186">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>Bug fixed: Hash concatenation (like <code class="inline-code">hash1 +
+ hash2</code>) shuffled the order of keys/values even if both
+ hashes were ordered.</p>
+ </li>
+
+ <li>
+ <p>In web pages that are based on the
+ <code class="inline-code">FreemarkerServlet</code>, you can now use
+ <code class="inline-code"><@include_page path="..."/></code> to use
+ servlet includes. See more <a href="pgui_misc_servlet.html#pgui_misc_servlet_include">here...</a></p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_187">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>The <code class="inline-code">BeansWrapper</code> can automatically
+ detect that classes were reloaded by JavaRebel.</p>
+ </li>
+
+ <li>
+ <p>Fixed a bug that caused <code class="inline-code">null</code> to be
+ returned from
+ <code class="inline-code">Environment.getCurrentEnvironment()</code> while
+ processing autoincludes and autoimports. (<a href="https://sourceforge.net/forum/message.php?msg_id=5531621">See
+ bug report</a>)</p>
+ </li>
+
+ <li>
+ <p>Fixed a bug that caused
+ <code class="inline-code">getObject(Object)</code> method on POJOs to not be
+ recognized as a general get method.</p>
+ </li>
+
+ <li>
+ <p>Substantially improved performance of the
+ <code class="inline-code"><#break></code> directive.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">DeepUnwrap</code> now unwraps custom null
+ model of the current object wrapper into a Java
+ <code class="inline-code">null</code>.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_16.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_14.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_16.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_16.html b/builds/2.3.26-nightly/versions_2_3_16.html
new file mode 100644
index 0000000..acc58a5
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_16.html
@@ -0,0 +1,135 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.16 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.16">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_16.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_16.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_16.html"><span itemprop="name">2.3.16</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.16"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_17.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_15.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_16" itemprop="headline">2.3.16</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_184" data-menu-target="autoid_184">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_185" data-menu-target="autoid_185">Changes on the FTL side</a></li></ul> </div><p>Date of release: 2009-12-07</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_184">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>Fixed a bug that caused incorrect unwrapping of sequences
+ to Java arrays (<a href="https://sourceforge.net/tracker/?func=detail&aid=2105310&group_id=794&atid=100794">See
+ bug report</a>)</p>
+ </li>
+
+ <li>
+ <p>Fixed a bug that caused rounding of float and double
+ values (<a href="https://sourceforge.net/tracker/?func=detail&aid=2503124&group_id=794&atid=100794">See
+ bug report</a>)</p>
+ </li>
+
+ <li>
+ <p>Created a new
+ <code class="inline-code">freemarker.runtime.attempt</code> category and
+ exceptions caught in <code class="inline-code"><#attempt></code> blocks
+ are logged into it at a DEBUG severity.</p>
+ </li>
+
+ <li>
+ <p>Fixing the (ages old) problem of
+ <code class="inline-code">RhinoWrapper</code> not working with all versions of
+ Rhino because of binary incompatible change of Rhino's
+ <code class="inline-code">Undefined.instance</code>.</p>
+ </li>
+
+ <li>
+ <p>Fixed bug where <code class="inline-code">TextUtil.XMLEncNQG</code>
+ didn't escape <code class="inline-code">]]></code> as
+ <code class="inline-code">]]&gt;</code>.</p>
+ </li>
+
+ <li>
+ <p>Fixed bug where the root directory couldn't be used as the
+ template base directory, as
+ <code class="inline-code">FileTemplateLoader</code> believed that the template
+ is outside the base directory.</p>
+ </li>
+
+ <li>
+ <p>Macro names can no longer be changed through the
+ API.</p>
+ </li>
+
+ <li>
+ <p>FreemarkerServlet now cooperates with Session Fixation
+ Attack Protection in Spring Security, see <a href="https://sourceforge.net/projects/freemarker/forums/forum/2345/topic/3475868">
+ forum discussion</a> for details.</p>
+ </li>
+
+ <li>
+ <p>Substantially improved performance of the
+ <code class="inline-code"><#return></code> directive.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_185">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>Fixed bug where
+ <code class="inline-code"><em class="code-color">anXMLNode</em>.@@markup</code>
+ and <code class="inline-code">@@nested_markup</code> didn't escape
+ <code class="inline-code">]]></code> as
+ <code class="inline-code">]]&gt;</code>.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_17.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_15.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_17.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_17.html b/builds/2.3.26-nightly/versions_2_3_17.html
new file mode 100644
index 0000000..a9c317c
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_17.html
@@ -0,0 +1,331 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.17 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.17">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_17.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_17.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_17.html"><span itemprop="name">2.3.17</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.17"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_18.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_16.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_17" itemprop="headline">2.3.17</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_181" data-menu-target="autoid_181">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_182" data-menu-target="autoid_182">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_183" data-menu-target="autoid_183">Other changes</a></li></ul> </div><p>Date of release: 2011-05-17</p><p>It's possibly urgent to update to this version because of a
+ <a href="#v2317secfix">security fix</a>!</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_181">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p><code class="inline-code">?seq_index_of</code> and
+ <code class="inline-code">?seq_last_index_of</code> now works on collections
+ (<code class="inline-code">freemarker.template.TemplateCollectionModel</code>-s)
+ too, not only on sequences
+ (<code class="inline-code">freemarker.template.TemplateSequenceModel</code>-s).</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">?long</code> now works for date, date-time or
+ time values, and returns the milliseconds since the epoch (as
+ <code class="inline-code">java.util.Date.getTime()</code>).</p>
+ </li>
+
+ <li>
+ <p>To convert numbers (usually Java
+ <code class="inline-code">long</code>-s) to date or date-time and time values,
+ <code class="inline-code">?number_to_date</code>,
+ <code class="inline-code">?number_to_time</code>,
+ <code class="inline-code">?number_to_datetime</code> was added. <a href="ref_builtins_expert.html#ref_builtin_numToDate">See more here...</a>
+ (Unfortunately, <code class="inline-code">?date</code> and like can't be
+ extended to support this due to backward compatibility
+ issues.)</p>
+ </li>
+
+ <li>
+ <p>New built-ins to format numbers with ISO 8601 "extended"
+ format regardless of the current date/time formatting settings,
+ and even regardless of the current time zone setting. For
+ example <code class="inline-code">${myTimeStamp?iso_utc}</code> will print
+ something like <code class="inline-code">2010-05-16T23:05:45Z</code>. <a href="ref_builtins_date.html#ref_builtin_date_iso">See more here...</a></p>
+ </li>
+
+ <li>
+ <p>New <a href="ref_specvar.html">special variable</a>,
+ <code class="inline-code">now</code>. This returns the current date-time.
+ Usage examples: "<code class="inline-code">Page generated: ${.now}</code>",
+ "<code class="inline-code">Today is ${.now?date}</code>", "<code class="inline-code">The
+ current time is ${.now?time}</code>".</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">?sort</code> and <code class="inline-code">?sort_by</code>
+ now supports sorting boolean values.</p>
+ </li>
+
+ <li>
+ <p>When using unsupported or unknown <a href="ref_builtins_string.html#ref_builtin_string_flags">string built-in flags</a>,
+ FreeMarker will now <a href="pgui_misc_logging.html">log</a>
+ warnings (maximum 25 times per class-loader, to prevent flooding
+ the log). It's certain that starting from FreeMarker 2.4 these
+ will count as errors.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed <a href="http://sourceforge.net/tracker/?func=detail&atid=100794&aid=3047201&group_id=794">[3047201]</a>:
+ Using regular expressions (like with <code class="inline-code">?match</code>)
+ could cause lockup in multi-threaded environment, also memory
+ leakage when using dynamically generated regular
+ expressions.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <code class="inline-code">?seq_contains</code>,
+ <code class="inline-code">?seq_index_of</code> and
+ <code class="inline-code">?seq_last_index_of</code> has failed with
+ non-<code class="inline-code">java.util.List</code>
+ <code class="inline-code">java.util.Collection</code>-s that are wrapped with
+ pure <code class="inline-code">BeansWrapper</code> (not the
+ <code class="inline-code">DefaultObjectWrapper</code>) as
+ <code class="inline-code">TemplateSequenceModel</code>. (See also:
+ <code class="inline-code">getSupportsIndexedAccess()</code> below)</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_182">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p><a name="v2317secfix"></a><em>Security fix</em>:
+ Using carefully crafted template names (template paths) that
+ contain code point 0 (<code class="inline-code">'\u0000'</code>), it was
+ possible to load files from outside the template root directory
+ like if they were FreeMarker templates. The root of the problem
+ is that the underlying native C/C++ part (which belongs to the
+ Java platform or to the OS) interprets the 0 as the end of the
+ string, while Java (and hence FreeMarker and the Servlet
+ container) doesn't. Thus a path that looked safe for FreeMarker
+ become unsafe on the lower level. The problem is present with
+ all ways of loading templates by name
+ (<code class="inline-code">Configuration.getTemplate(<em class="code-color">...</em>)</code>,
+ <code class="inline-code"><#include
+ <em class="code-color">...</em>></code>,
+ <code class="inline-code"><#import
+ <em class="code-color">...</em>></code>).</p>
+
+ <p>You are not affected if you don't allow users to upload
+ templates and also at least one of these stands:</p>
+
+ <ul>
+ <li>
+ <p>In your system users can't provide arbitrary strings
+ as template names (template paths). For example, if users
+ are only allowed to visit the URL-s that belong to the MVC
+ Controller (like they can't visit <code class="inline-code">*.ftl</code>)
+ then they can't suggest arbitrary template names.</p>
+ </li>
+
+ <li>
+ <p>The template names are part of the path in the Web
+ page URL, and your webserver or Servlet container disallows
+ URL-s that contain <code class="inline-code">%00</code>, or terminate the
+ URL at it before passing it to the servlets.</p>
+ </li>
+
+ <li>
+ <p>You are using <code class="inline-code">FileTemplateLoader</code>
+ and linking is not allowed in it (by default it isn't
+ allowed).</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>FreeMarker now can log its messages directly using SLF4J
+ or Apache Commons Logging. However, it will not use these logger
+ libraries automatically, until 2.4; <a href="pgui_misc_logging.html">see more here...</a> But it's
+ recommended to switch to SLF4J now.</p>
+ </li>
+
+ <li>
+ <p>New setting: <code class="inline-code">"auto_flush"</code>,
+ <code class="inline-code">Configurable.setAutoFlush(boolean)</code>. Sets
+ whether the output <code class="inline-code">Writer</code> is automatically
+ flushed at the end of <code class="inline-code">Template.process(Object,
+ Writer)</code> (and its overloads). The default is
+ <code class="inline-code">true</code>, which corresponds to the earlier
+ behavior. Using <code class="inline-code">false</code> is needed for example
+ when a Web page is composed from several boxes (like portlets,
+ GUI panels, etc.) that aren't inserted with
+ <code class="inline-code">#include</code> (or with similar directives) into a
+ master FreeMarker template, rather they are all processed with a
+ separate
+ <code class="inline-code">Template.process(<em class="code-color">...</em>)</code>
+ call. In a such scenario the automatic flushes would commit the
+ HTTP response after each box, hence interfering with full-page
+ buffering, and also possibly decreasing performance with too
+ frequent and too early response buffer flushes.</p>
+ </li>
+
+ <li>
+ <p>Added new setting:
+ <code class="inline-code">Configuration.setNewBuiltinClassResolver(TemplateClassResolver)</code>,
+ or <code class="inline-code">new_builtin_class_resolver</code> property. This
+ allows you to specify how the <a href="ref_builtins_expert.html#ref_builtin_new"><code>new</code> built-in</a>
+ (like in <code class="inline-code">"com.example.SomeClass"?new()</code>)
+ resolves classes and which classes are accessible at all. If you
+ are allowing not-so-much-trusted users to upload templates, you
+ should be definitely interested; see the Java API docs of
+ <code class="inline-code">freemarker.core.Configurable.setSetting</code> and
+ <code class="inline-code">freemareker.template.Configuration.setNewBuiltinClassResolver</code>.
+ Otherwise it's still recommended to set this to
+ <code class="inline-code">TemplateClassResolver.SAFER_RESOLVER</code> (or
+ <code class="inline-code">safer</code> if you are using properties), although
+ that's not 100% backward compatible (see Java API docs) .</p>
+ </li>
+
+ <li>
+ <p>Added
+ <code class="inline-code">freemarker.cache.NullCacheStorage</code>: Setting
+ this as the cache storage in <code class="inline-code">Configuration</code>
+ disables caching.</p>
+ </li>
+
+ <li>
+ <p>Added <code class="inline-code">getSupportsIndexedAccess()</code> to
+ <code class="inline-code">freemarker.ext.beans.CollectionModel</code>, so one
+ can check if <code class="inline-code">TemplateSequenceModel.get(int)</code>
+ will work with a particular <code class="inline-code">CollectionModel</code>
+ instance or not.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed <a href="http://sourceforge.net/tracker/?func=detail&aid=2992265&group_id=794&atid=100794">[2992265]</a>:
+ JSP <code class="inline-code">FreeMarkerPageContext.include</code> behaved
+ incorrectly.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: When using FreeMarker's JSP support with JSP
+ tags that use
+ <code class="inline-code">javax.servlet.jsp.PageContext.pushBody</code> (like
+ some Stripes tags), <code class="inline-code">"ArrayIndexOutOfBoundsException:
+ -1"</code> occurred inside
+ <code class="inline-code">freemarker.ext.jsp.FreeMarkerPageContext.popWriter</code>.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed <a href="http://sourceforge.net/tracker/?func=detail&atid=100794&aid=3033015&group_id=794">[3033015]</a>:
+ <code class="inline-code">AllHttpScopesHashModel</code> used
+ <code class="inline-code">WrappingTemplateModel.getDefaultObjectWrapper()</code>
+ for wrapping variables in the page scope, while used the
+ user-specified <code class="inline-code">ObjectWrapper</code> for all other
+ scopes (request, session, etc.). Now it uses the user-specified
+ wrapper in the page scope as well.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed <a href="https://sourceforge.net/tracker/?func=detail&aid=3128073&group_id=794&atid=100794">[3128073]</a>:
+ <code class="inline-code">HashAdapther.containsKey(...)</code> returned
+ <code class="inline-code">true</code> for a key that doesn't exist when
+ unwrapping the key has failed. As a side effect of the fix,
+ <code class="inline-code">BeansWrapper.CAN_NOT_UNWRAP</code> is now private;
+ earlier it was public by mistake.</p>
+ </li>
+
+ <li>
+ <p>Big fixed <a href="http://sourceforge.net/tracker/?func=detail&aid=3151085&group_id=794&atid=100794">[3151085]</a>:
+ <code class="inline-code">freemarker.jsp.TaglibFactory</code> didn't locate
+ tld files properly. This fix gives better compliance with JSP
+ specification for resolving and loading tld files.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: Unwrapping <code class="inline-code">null</code> with a
+ <code class="inline-code">BeansWrapper</code> that had a custom null-model
+ didn't result in <code class="inline-code">null</code>. Now both unwrapping
+ <code class="inline-code">null</code> and the custom null-model gives
+ <code class="inline-code">null</code>.</p>
+ </li>
+
+ <li>
+ <p>Log messages doesn't contain line-breaks (CR or LF)
+ anymore and quote paths and other arbitrary text with Java
+ string literal syntax that also escapes <code class="inline-code"><</code>
+ characters as <code class="inline-code">\u003C</code>. These address security
+ concerns related to poor quality log appenders and buggy log
+ readers. This change is mostly noticeable on template processing
+ error entries, which will now quote the exception message. Note
+ that how stack traces (the <code class="inline-code">Throwable</code> objects)
+ are logged is still up to the logging framework you are
+ using.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_183">Other changes</h2>
+
+
+ <ul>
+ <li>
+ <p>The DTD-s and XSD-s that are included in
+ <code class="inline-code">freemarker.jar</code> under
+ <code class="inline-code">freemarker/ext/jsp</code> are now under Apache
+ Software License, Version 2. This is also clarified in the
+ <code class="inline-code">LICENSE.txt</code>. Earlier these files had no clear
+ license terms.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_18.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_16.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_18.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_18.html b/builds/2.3.26-nightly/versions_2_3_18.html
new file mode 100644
index 0000000..e0c149e
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_18.html
@@ -0,0 +1,87 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.18 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.18">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_18.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_18.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_18.html"><span itemprop="name">2.3.18</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.18"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_19.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_17.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_18" itemprop="headline">2.3.18</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_179" data-menu-target="autoid_179">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_180" data-menu-target="autoid_180">Other changes</a></li></ul> </div><p>Date of release: 2011-05-21</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_179">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>Bugfix <a href="https://sourceforge.net/tracker/?func=detail&aid=3304568&group_id=794&atid=100794">[3304568]</a>:
+ 2.3.17 didn't find TLD-s in <code class="inline-code">WEB-INF\lib\*.jar</code>
+ unless they were explicitly pointed in the
+ <code class="inline-code">web.xml</code> with a <code class="inline-code">taglib</code>
+ element. This bug was introduced in 2.3.17.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_180">Other changes</h2>
+
+
+ <ul>
+ <li>
+ <p>Added <code class="inline-code">LICENSE.txt</code> and
+ <code class="inline-code">NOTICE.txt</code> to
+ <code class="inline-code">freemarker.jar</code> under
+ <code class="inline-code">META-INF</code>.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_19.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_17.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_19.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_19.html b/builds/2.3.26-nightly/versions_2_3_19.html
new file mode 100644
index 0000000..ef82d33
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_19.html
@@ -0,0 +1,236 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.19 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.19">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_19.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_19.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_19.html"><span itemprop="name">2.3.19</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.19"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_20.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_18.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_19" itemprop="headline">2.3.19</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_177" data-menu-target="autoid_177">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_178" data-menu-target="autoid_178">Changes on the Java side</a></li></ul> </div><p>Date of release: 2012-02-29</p><p>Don't miss the <a href="#v2319secfix">security related
+ changes</a>, they may affect your application!</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_177">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p><em>Attention</em>: The output of <a href="ref_builtins_date.html#ref_builtin_date_iso">ISO 8601 date/time formatting
+ built-ins</a>, introduced in 2.3.17, was slightly changed.
+ From now on, the time zone offset, when it's displayed and it
+ isn't <code class="inline-code">Z</code>, always includes the minutes. For
+ example, <code class="inline-code">15:30:15+02</code> becomes to
+ <code class="inline-code">15:30:15+02:00</code> in the template output. Both
+ formats are valid according to ISO 8601 (so anything that
+ expects ISO 8601 date/times should continue working), but only
+ the last format complies with the XML Schema date/time formats,
+ hence this change.</p>
+ </li>
+
+ <li>
+ <p>New built-in for escaping inside JSON string literals:
+ <a href="ref_builtins_string.html#ref_builtin_json_string"><code>json_string</code></a>.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: Wrong <code class="inline-code">#</code> tags were printed as
+ static text instead of causing parsing error if there was no
+ correct <code class="inline-code">#</code> tag earlier in the same template.
+ Since fixing this would not be 100% backward compatible, the old
+ behavior has remained, unless you set the
+ <code class="inline-code">incompatible_enhancements</code> setting
+ (<code class="inline-code">Configuration.setIncompatibleEnhancements(String)</code>)
+ to <code class="inline-code">"2.3.19"</code> or higher.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_178">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p><a name="v2319secfix"></a><em>Attention</em>: This
+ release contains two important security workarounds that
+ unavoidably make it obvious how some applications can be
+ exploited. <em>FreeMarker can't solve these issues on all
+ configurations, so please read the details instead of just
+ updating FreeMarker!</em> Also, these changes are not 100%
+ backward compatible in theory, however it's not probable that
+ they will break anything. The two changes are:</p>
+
+ <ul>
+ <li>
+ <p>The character with character code 0
+ (<code class="inline-code">\u0000</code>) is not allowed in template paths
+ anymore. When a path contains it, FreeMarker behaves as if
+ the template was not found.</p>
+
+ <p>This is to fix the security problem where a template
+ path like <code class="inline-code">"secret.txt\u0000.ftl"</code> is used
+ to bypass extension filtering in an application. FreeMarker
+ itself doesn't care about the extension, but some
+ applications decide based on the extension if they will
+ delegate a path to FreeMarker. When they do with such a
+ path, the C/C++ implementation behind the storage mechanism
+ may sees the path as <code class="inline-code">"secret.txt"</code> as the
+ 0 terminates the string in C/C++, and thus load a non-FTL
+ file as a template, returning the file contents to the
+ attacker.</p>
+
+ <p>Note that some HTTP servers, notably Tomcat and the
+ Apache HTTP Server blocks URL-s where the URL contains 0
+ (<code class="inline-code">%00</code>) outside the query string, thus this
+ wasn't exploitable there through such Web URL-s. Some other
+ HTTP servers however, like Jetty, doesn't block such
+ URL-s.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">ClassTemplateLoader</code>, when it's
+ created with base path <code class="inline-code">"/"</code> (like with
+ <code class="inline-code">new ClassTemplateLoader(someClass, "/")</code>),
+ will not allow template paths that contain colon earlier
+ than any <code class="inline-code">/</code>, and will act like if the
+ template was not found in such case.</p>
+
+ <p>This is to fix the security problem where a template
+ path like <code class="inline-code">"file:/etc/secret"</code> or
+ <code class="inline-code">"http://example.com/malware.ftl"</code> is
+ interpreted as a full URL by a
+ <code class="inline-code">java.net.URLClassLoader</code> in the
+ class-loader hierarchy, and thus allow loading files from
+ these URL-s as templates. This is a quirk (or bug) of
+ <code class="inline-code">java.net.URLClassLoader</code>, thus this
+ problem only exists on systems that use such
+ class-loaders.</p>
+
+ <p>Beware, some frameworks use their own
+ <code class="inline-code">TemplateLoader</code> implementations, and if
+ those are vulnerable, they will remain so after updating
+ FreeMarker too! Note that this exploit only works if the
+ class-loader hierarchy contains an
+ <code class="inline-code">URLClassLoader</code> and the class-loader is
+ used to load templates without adding any prefix before the
+ template path (other than <code class="inline-code">"/"</code>).</p>
+ </li>
+ </ul>
+
+ <p>These security issues mostly only affect applications
+ <em>where the user (the visitor) can supply arbitrary
+ template paths to the application</em>. This is not the
+ case with properly built MVC applications, as there only the MVC
+ Controller can be addressed directly, and it's the Controller
+ that specifies the template paths. But legacy MVC applications
+ based on <a href="pgui_misc_servlet.html#pgui_misc_servlet_model2">JSP
+ Model-2</a> often expose the MVC Views as public URL-s ending
+ with <code class="inline-code">.ftl</code>, thus allowing the user to give
+ arbitrary paths to FreeMarker. Such applications should be
+ secured with a <code class="inline-code">security-constratint</code> in
+ <code class="inline-code">web.xml</code> as shown in the <a href="pgui_misc_servlet.html#pgui_misc_servlet_model2">related Manual
+ section</a>. This should be done regardless of the current
+ security fixes.</p>
+
+ <p>In general, you should not allow users to specify
+ arbitrary template paths, or if you do allow that, you should be
+ extra careful with the <code class="inline-code">TemplateLoader</code>
+ used.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">Configuration</code> has new methods:
+ <code class="inline-code">removeTemplateFromCache(...)</code>. This will
+ remove the given template for the given locale from the cache,
+ so it will be re-loaded regardless of the template update delay
+ when it's next time requested.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">BeansWrapper</code> ignores setter methods
+ from now when introspecting classes. They weren't used anyway,
+ so they unnecessarily caused
+ "<code class="inline-code">java.beans.IntrospectionException</code>: type
+ mismatch between read and write methods" errors.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">TemplateClassResolver.SAFER_RESOLVER</code>
+ now disallows creating
+ <code class="inline-code">freemarker.template.utility.JythonRuntime</code> and
+ <code class="inline-code">freemarker.template.utility.Execute</code>. This
+ change affects the behavior of the <a href="ref_builtins_expert.html#ref_builtin_new"><code>new</code> built-in</a>
+ if FreeMarker was configured to use
+ <code class="inline-code">SAFER_RESOLVER</code>, which is not the default
+ until 2.4 and is hence improbable.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: Calling varargs methods now indeed works.
+ (Earlier it only worked for overloaded methods.)</p>
+ </li>
+
+ <li>
+ <p>Bug fixed <a href="https://sourceforge.net/tracker/index.php?func=detail&aid=1837697&group_id=794&atid=100794">[1837697]</a>
+ <a href="https://sourceforge.net/tracker/index.php?func=detail&aid=2831150&group_id=794&atid=100794">[2831150]</a>
+ <a href="https://sourceforge.net/tracker/index.php?func=detail&aid=3039096&group_id=794&atid=100794">[3039096]</a>
+ <a href="https://sourceforge.net/tracker/index.php?func=detail&aid=3165425&group_id=794&atid=100794">[3165425]</a>:
+ Jython support now works with Jython 2.2 and 2.5.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed <a href="https://sourceforge.net/tracker/index.php?func=detail&aid=3325103&group_id=794&atid=100794">[3325103]</a>:
+ <code class="inline-code">TemplateException</code>-s and
+ <code class="inline-code">ParseException</code>-s are now serializable.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_20.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_18.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_2.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_2.html b/builds/2.3.26-nightly/versions_2_3_2.html
new file mode 100644
index 0000000..899e309
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_2.html
@@ -0,0 +1,77 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.2 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.2">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_2.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_2.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_2.html"><span itemprop="name">2.3.2</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.2"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_3.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_1.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_2" itemprop="headline">2.3.2</h1>
+</div></div><p>Date of release: 2005-01-22</p><p>Bugfix release.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_213">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>Bugfix: If you use JSP taglibs in FreeMarker templates,
+ FreeMarker possibly tried to get DTD-s from the Sun Web site
+ because of a bug introduced with FreeMarker 2.3.1. This was a
+ serious problem since if your server is offline or the Sun Web
+ site becomes temporarily inaccessible the templates that are
+ using JSP taglibs will possibly die with error.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: The <code class="inline-code">DefaultObjectWrapper</code> has
+ ignored the value of the <code class="inline-code">nullModel</code> property.
+ (Note that it's discouraged to use a "null
+ model".)</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_3.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_1.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[35/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_config_errorhandling.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_config_errorhandling.html b/builds/2.3.26-nightly/pgui_config_errorhandling.html
new file mode 100644
index 0000000..1d88582
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_config_errorhandling.html
@@ -0,0 +1,391 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Error handling - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Error handling">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_config_errorhandling.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_config_errorhandling.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config.html"><span itemprop="name">The Configuration</span></a></li><li class="step-3" itempr
op="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config_errorhandling.html"><span itemprop="name">Error handling</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","The Configuration","Error handling"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_config_templateloading.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_templateconfigurations.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_config_errorhandling" itemprop="headline">Error handling</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_43" data-menu-target="autoid_43">The possible exceptions</a></li><li><a class="page-menu-link" href="#autoid_44" data-menu-target="autoid_44">Customizing the behavior regarding TemplatException-s</a></li><li><a class="page-menu-link" href="#autoid_45" data-menu-target="autoid_45">TemplateException logging</a></li><li><a class="page-menu-link" href="#autoid_46" data-menu-target="autoid_46">Explicit error handling in templates</a></li></ul> </div>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_43">The possible exceptions</h2>
+
+
+ <p>The exceptions that can occur regarding FreeMarker could be
+ classified like this:</p>
+
+ <ul>
+ <li>
+ <p>Exceptions occurring when you configure FreeMarker:
+ Typically you configure FreeMarker only once in your
+ application, when your application initializes itself. Of
+ course, during this, exceptions can occur.</p>
+ </li>
+
+ <li>
+ <p>Exceptions occurring when loading and parsing templates:
+ When you call
+ <code class="inline-code">Configuration.getTemplate(<em class="code-color">...</em>)</code>,
+ FreeMarker has to load the template into the memory and parse it
+ (unless the template is already <a href="pgui_config_templateloading.html#pgui_config_templateloading_caching">cached</a> in
+ that <code class="inline-code">Configuration</code> object). During this,
+ these kind of exceptions can occur:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">TemplateNotFoundException</code> because
+ the requested template doesn't exist. Note this extends
+ <code class="inline-code">IOException</code>.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">freemarker.core.ParseException</code>
+ because the template is syntactically incorrect according
+ the rules of the FTL language. Note that this error occurs
+ when you obtain the <code class="inline-code">Template</code> object
+ (<code class="inline-code">Configuration.getTemplate(<em class="code-color">...</em>)</code>),
+ not later when you execute
+ (<code class="inline-code">Template.process(<em class="code-color">...</em>)</code>)
+ the template. . Note this extends
+ <code class="inline-code">IOException</code> (legacy).</p>
+ </li>
+
+ <li>
+ <p>Any other kind of <code class="inline-code">IOException</code>
+ because an error has occurred while reading an existing
+ template. For example you have no right to read the file, or
+ the connection through which you read the template is
+ broken. The emitter of these is the <a href="pgui_config_templateloading.html"><code>TemplateLoader</code>
+ object</a>, which is plugged into the
+ <code class="inline-code">Configuration</code> object.</p>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Exceptions occurring when executing (processing)
+ templates, that is, when you call
+ <code class="inline-code">Template.process(<em class="code-color">...</em>)</code>.
+ Two kind of exceptions can occur:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">IOException</code> because there was an
+ error when trying to write into the output writer.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">freemarker.template.TemplatException</code>
+ because other problem occurred while executing the template.
+ For example, a frequent error is referring to a variable
+ that doesn't exist in the data-model. By default, when a
+ <code class="inline-code">TemplatException</code> occurs, FreeMarker
+ prints the FTL error message and the stack trace to the
+ output writer with plain text format, and then aborts the
+ template execution by re-throwing the
+ <code class="inline-code">TemplatException</code>, which then you can
+ catch as
+ <code class="inline-code">Template.process(<em class="code-color">...</em>)</code>
+ throws it. This behavior can be customized, and in fact, it
+ should be; see the recommended configuration <a href="pgui_quickstart_createconfiguration.html">here</a>.
+ By default FreeMarker also <a href="pgui_misc_logging.html">logs</a>
+ <code class="inline-code">TemplatException</code>-s.</p>
+ </li>
+ </ul>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_44">Customizing the behavior regarding TemplatException-s</h2>
+
+
+ <p><code class="inline-code">TemplateException</code>-s thrown during the
+ template processing are handled by the
+ <code class="inline-code">freemarker.template.TemplateExceptionHandler</code>
+ object, which is plugged into the <code class="inline-code">Configuration</code>
+ object with its
+ <code class="inline-code">setTemplateExceptionHandler(<em class="code-color">...</em>)</code>
+ method. These are the <code class="inline-code">TemplateExceptionHandler</code>
+ implementations with FreeMarker comes with:</p>
+
+ <ul>
+ <li>
+ <p><code class="inline-code">TemplateExceptionHandler.DEBUG_HANDLER</code>:
+ Prints stack trace (includes FTL error message and FTL stack
+ trace) and re-throws the exception. This is the default handler,
+ however, you should be careful not using it in production
+ environment, as it shows technical information about your
+ system.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">TemplateExceptionHandler.HTML_DEBUG_HANDLER</code>:
+ Same as <code class="inline-code">DEBUG_HANDLER</code>, but it formats the
+ stack trace so that it will be readable with Web browsers.
+ Recommended over <code class="inline-code">DEBUG_HANDLER</code> when you
+ generate HTML pages, but it should only be used for development
+ as it shows technical information about your system.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">TemplateExceptionHandler.IGNORE_HANDLER</code>:
+ Simply suppresses all exceptions (though FreeMarker will still
+ log them if
+ <code class="inline-code">Configuration.getLogTemplateExceptions</code> is
+ <code class="inline-code">true</code>). It does nothing to handle the event.
+ It does not re-throw the exception.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">TemplateExceptionHandler.RETHROW_HANDLER</code>:
+ Simply re-throws all exceptions; it doesn't do anything else.
+ This should be used in most applications today. It doesn't print
+ anything to the output about the error, which makes it safe, and
+ the developers can still get the error details from the logs.
+ It's not as convenient during template development as
+ <code class="inline-code">HTML_DEBUG_HANDLER</code> or
+ <code class="inline-code">DEBUG_HANDLER</code> though. For more information
+ about handling errors in Web applications <a href="app_faq.html#misc.faq.niceErrorPage">see the FAQ</a>.</p>
+ </li>
+ </ul>
+
+ <p>You can also write a custom
+ <code class="inline-code">TemplateExceptionHandler</code> by implementing that
+ interface, which contains this method:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">void handleTemplateException(TemplateException te, Environment env, Writer out)
+ throws TemplateException;</pre></div>
+
+ <p>Whenever a <code class="inline-code">TemplateException</code> occurs, this
+ method will be called. The exception to handle is in the
+ <code class="inline-code">te</code> argument, the runtime environment of the
+ template processing is in the <code class="inline-code">env</code> argument, and
+ the handler can print to the output using the <code class="inline-code">out</code>
+ argument. If this method throws exception (usually it re-throws
+ <code class="inline-code">te</code>), then the template processing will be
+ aborted, and
+ <code class="inline-code">Template.process(<em class="code-color">...</em>)</code>
+ will throw the same exception. If
+ <code class="inline-code">handleTemplateException</code> doesn't throw exception,
+ then template processing continues as if nothing had happen, but the
+ statement that caused the exception will be skipped (see more
+ later). Of course, the handler can still print an error indicator to
+ the output.</p>
+
+ <p>Let's see how FreeMarker skips statements when the error
+ handler doesn't throw exception, through examples. Assume we are
+ using this template exception handler:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">class MyTemplateExceptionHandler implements TemplateExceptionHandler {
+ public void handleTemplateException(TemplateException te, Environment env, java.io.Writer out)
+ throws TemplateException {
+ try {
+ out.write("[ERROR: " + te.getMessage() + "]");
+ } catch (IOException e) {
+ throw new TemplateException("Failed to print error message. Cause: " + e, env);
+ }
+ }
+}
+
+<em>...</em>
+
+cfg.setTemplateExceptionHandler(new MyTemplateExceptionHandler());</pre></div>
+
+ <p>If an error occurs in an interpolation which is not inside an
+ FTL tag (that is, not enclosed into
+ <code class="inline-code"><#<em class="code-color">...</em>></code> or
+ <code class="inline-code"><@<em class="code-color">...</em>></code>), then
+ the whole interpolation will be skipped. So this template (assuming
+ that <code class="inline-code">badVar</code> is missing from the
+ data-model):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">a${badVar}b</pre></div>
+
+ <p>will print this if we use the
+ <code class="inline-code">MyTemplateExceptionHandler</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">a[ERROR: Expression badVar is undefined on line 1, column 4 in test.ftl.]b</pre></div>
+
+ <p>This template will print the same (except that the column
+ number will differ...):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">a${"moo" + badVar}b</pre></div>
+
+ <p>because the whole interpolation is skipped if any error occurs
+ inside it.</p>
+
+ <p>If an error occurs when evaluating the value of a parameter
+ for a directive call, or if there are other problems with the
+ parameter list, or if an error occurs when evaluating
+ <code class="inline-code"><em class="code-color">exp</em></code> in
+ <code class="inline-code"><@<em class="code-color">exp</em>
+ <em class="code-color">...</em>></code>, or if the value of
+ <code class="inline-code"><em class="code-color">exp</em></code> is not an
+ user-defined directive, then the whole directive call is skipped.
+ For example this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">a<#if badVar>Foo</#if>b</pre></div>
+
+ <p>will print this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">a[ERROR: Expression badVar is undefined on line 1, column 7 in test.ftlh.]b</pre></div>
+
+ <p>Note that the error occurred in the <code class="inline-code">if</code>
+ start-tag (<code class="inline-code"><#if badVar></code>), but the whole
+ directive call was skipped. Logically, the nested content
+ (<code class="inline-code">Foo</code>) was skipped with this, since the nested
+ content is handled (printed) by the enclosing directive
+ (<code class="inline-code">if</code>).</p>
+
+ <p>The output will be the same with this (except that the column
+ number will differ...):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">a<#if "foo${badVar}" == "foobar">Foo</#if>b</pre></div>
+
+ <p>because whole directive calling will be skipped if any error
+ occurs during the parameter evaluation.</p>
+
+ <p>The directive call will not be skipped if the error occurs
+ after the execution of the directive was already started. That is,
+ if an error occurs in the nested content:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">a
+<#if true>
+ Foo
+ ${badVar}
+ Bar
+</#if>
+c</pre></div>
+
+ <p>or in the macro definition body:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">a
+<@test />
+b
+<#macro test>
+ Foo
+ ${badVar}
+ Bar
+</#macro></pre></div>
+
+ <p>the output will be something like:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">a
+ Foo
+ [ERROR: Expression badVar is undefined on line 4, column 5 in test.ftlh.]
+ Bar
+c</pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_45">TemplateException logging</h2>
+
+
+ <p>By default FreeMarker <a href="pgui_misc_logging.html">logs</a> all
+ <code class="inline-code">TemplateException</code>-s under the
+ <code class="inline-code">freemarker.runtime</code> log category, even when it
+ will throw it at you from its public API. As logging has become
+ common practice in Java applications, this usually leads to double
+ logging of exceptions now, so it's recommended to disable this
+ legacy behavior by
+ <code class="inline-code">cfg.setLogTemplateExceptions(false)</code> (or
+ <code class="inline-code">log_template_exceptions=false</code>) where you
+ configure FreeMarker.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_46">Explicit error handling in templates</h2>
+
+
+ <p>Although it has nothing to do with the FreeMarker
+ configuration (the topic of this chapter), for the sake of
+ completeness it's mentioned here that you can handle errors directly
+ inside the templates as well:</p>
+
+ <ul>
+ <li>
+ <p>Handling missing/null variables: <a href="dgui_template_exp.html#dgui_template_exp_missing">Template Author's Guide/The Template/Expressions/Handling missing values</a></p>
+ </li>
+
+ <li>
+ <p>Substituting failing but expendable page sections: <a href="ref_directive_attempt.html">Template Language Reference/Directive Reference/attempt, recover</a></p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_config_templateloading.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_templateconfigurations.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_config_incompatible_improvements.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_config_incompatible_improvements.html b/builds/2.3.26-nightly/pgui_config_incompatible_improvements.html
new file mode 100644
index 0000000..01c060d
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_config_incompatible_improvements.html
@@ -0,0 +1,173 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>The "incompatible improvements" setting - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="The "incompatible improvements" setting">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_config_incompatible_improvements.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_config_incompatible_improvements.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config.html"><span itemprop="name">The Configuration</span></a></li><li class="step-3" itempr
op="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config_incompatible_improvements.html"><span itemprop="name">The "incompatible improvements" setting</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","The Configuration","The \"incompatible improvements\" setting"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_config_custom_formats.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_misc.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_config_incompatible_improvements" itemprop="headline">The "incompatible improvements" setting</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_51" data-menu-target="autoid_51">What does it do</a></li><li><a class="page-menu-link" href="#pgui_config_incompatible_improvements_how_to_set" data-menu-target="pgui_config_incompatible_improvements_how_to_set">How to set it</a></li></ul> </div>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_51">What does it do</h2>
+
+
+ <p>This setting specifies the FreeMarker version number where the
+ not 100% backward compatible bug fixes and improvements
+ <em>that you want to enable</em> were already
+ implemented. Usually, it's a bad idea to left it on its default,
+ which is 2.3.0 (maximum backward compatibility).</p>
+
+ <p>In new projects you should set this to the FreeMarker version
+ that you are actually using. In older projects it's also usually
+ better to keep this high, however you better check the changes
+ activated (find them in <a href="http://freemarker.org/docs/api/freemarker/template/Configuration.html#Configuration-freemarker.template.Version-">the
+ API JavaDoc of the <code>Configuration(Version)</code>
+ constructor</a>), at least if not only the 3rd version number
+ (the micro version) of "incompatible improvements"
+ setting is increased. Generally, as far as you only increase the
+ last version number of this setting, the changes are low
+ risk.</p>
+
+ <p>Bug fixes and improvements that are fully backward compatible,
+ also those that are important security fixes, are enabled regardless
+ of the "incompatible improvements" setting.</p>
+
+ <p>An important consequence of setting this setting is that now
+ your application will check if the stated minimum FreeMarker version
+ requirement is met. Like if you set this setting to 2.3.22, but
+ accidentally the application is deployed with FreeMarker 2.3.21,
+ then FreeMarker will fail, telling that a higher version is
+ required. After all, the fixes/improvements you have requested
+ aren't available on a lower version.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="pgui_config_incompatible_improvements_how_to_set">How to set it</h2>
+
+
+ <p>The incompatible improvements setting exists on the
+ <code class="inline-code">Configuration</code> level. It can be set on multiple
+ ways:</p>
+
+ <ul>
+ <li>
+ <p>Create the
+ <code class="inline-code">freemarker.template.Configuration</code> object
+ like:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">... = new Configuration(Configuration.VERSION_2_3_25)</pre></div>
+ </li>
+
+ <li>
+ <p>Or, alter the <code class="inline-code">Configuration</code> singleton
+ where you initialize its other settings like:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">cfg.setIncompatibleImprovements(Configuration.VERSION_2_3_25)</pre></div>
+ </li>
+
+ <li>
+ <p>Or, if you are configuring FreeMarker with properties
+ (<code class="inline-code">*.properties</code> file or
+ <code class="inline-code">java.util.Properties</code> object), add:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">incompatible_improvements=2.3.25</pre></div>
+ </li>
+
+ <li>
+ <p>Or, if you are configuring FreeMarker through
+ <code class="inline-code">FreemarkerServlet</code>, add this
+ <code class="inline-code">init-param</code> to it in the
+ <code class="inline-code">web.xml</code>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified"><init-param>
+ <param-name>incompatible_improvements</param-name>
+ <param-value>2.3.25</param-value>
+</init-param></pre></div>
+ </li>
+ </ul>
+
+ <p>But, <em>if you set the
+ <code class="inline-code">object_wrapper</code> setting</em> (same as
+ <code class="inline-code">Configuration.setObjectWrapper(ObjectWrapper)</code>) of
+ your configuration, then it's important to know that
+ <code class="inline-code">BeansWrapper</code> and its subclasses (most
+ importantly, <code class="inline-code">DefaultObjectWrapper</code>) has its own
+ independent <code class="inline-code">incompatibleImprovements</code> property,
+ and some fixes/improvements are activated by that, not by
+ <code class="inline-code">Configuration</code>'s similar setting. You don't have
+ to be aware of this complication if you aren't setting the
+ <code class="inline-code">object_wrapper</code> configuration setting anywhere,
+ because the default <code class="inline-code">object_wrapper</code> has the same
+ "incompatible improvements" as of the
+ <code class="inline-code">Configuration</code>. But if you are setting the
+ <code class="inline-code">object_wrapper</code>, then you must not forget to set
+ the <code class="inline-code">incompatibleImprovements</code> property of the
+ <code class="inline-code">ObjectWrapper</code> itself, in additionally to that of
+ the <code class="inline-code">Configuration</code>. (Note that it's fine to have
+ different "incompatible improvements" for the
+ <code class="inline-code">Configuration</code> and for the
+ <code class="inline-code">ObjectWrapper</code>, only it should be a conscious
+ decision.) <a href="pgui_datamodel_objectWrapper.html#topic.setDefaultObjectWrapperIcIIndividually">See here how
+ to set it</a> in the case of
+ <code class="inline-code">DefaultObjectWrapper</code> (for
+ <code class="inline-code">BeansWrapper</code> it's the same, only with different
+ class name of course).</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_config_custom_formats.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_misc.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_config_outputformatsautoesc.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_config_outputformatsautoesc.html b/builds/2.3.26-nightly/pgui_config_outputformatsautoesc.html
new file mode 100644
index 0000000..2aff9d5
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_config_outputformatsautoesc.html
@@ -0,0 +1,210 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Associating output formats with templates - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Associating output formats with templates">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_config_outputformatsautoesc.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_config_outputformatsautoesc.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config.html"><span itemprop="name">The Configuration</span></a></li><li class="step-3" itempr
op="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config_outputformatsautoesc.html"><span itemprop="name">Associating output formats with templates</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","The Configuration","Associating output formats with templates"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_config_templateconfigurations.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_custom_formats.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_config_outputformatsautoesc" itemprop="headline">Associating output formats with templates</h1>
+</div></div><p>The output format associated to a template decides if and what
+ kind of auto-escaping is used in that template (unless the template
+ <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_overrideoformat">overrides that
+ with directives</a>). By default, templates have
+ "undefined" output format associated, which does no
+ escaping, and in general gives the behavior that you would expect from
+ a template engine that doesn't care about output formats and escaping.
+ However, if the <code class="inline-code">recognize_standard_file_extensions</code>
+ <a href="pgui_config_settings.html">setting</a> is
+ <code class="inline-code">true</code> (which is the default with <a href="pgui_config_incompatible_improvements.html">the
+ <code>incompatible_improvements</code> setting</a> set to
+ 2.3.24 or higher), templates whose source name ends with
+ <code class="inline-code">".ftlh"</code> gets "HTML" output format, and
+ those with <code class="inline-code">".ftlx"</code> get "XML" output
+ format. Using the <code class="inline-code">ftlh</code> and <code class="inline-code">ftlx</code>
+ file extensions is the recommended way of activating HTML and XML
+ auto-escaping. You can also associate output formats to templates
+ based on arbitrary name patterns with the <a href="pgui_config_templateconfigurations.html"><code>template_configurations</code>
+ setting</a>; see some examples of that below.</p><p>There's another a related setting, called
+ <code class="inline-code">auto_escaping_policy</code>, which can be used to disable
+ auto-escaping even if the current output format supports it, or enable
+ auto-escaping even if the format by default doesn't escape (but it
+ supports it). Using this setting rarely advisable, as it's potentially
+ confusing for the template authors. (Instead, escaping can be turned
+ on/off explicitly inside the templates with the
+ <code class="inline-code">auto_esc</code> parameter of the <a href="ref_directive_ftl.html"><code>ftl</code> directive</a>,
+ or with the <a href="ref_directive_autoesc.html"><code>noautoesc</code></a>
+ and <a href="ref_directive_autoesc.html"><code>autoesc</code>
+ directive</a>s.)</p><p>To check if you have configured FreeMarker properly, you can use
+ this template:</p>
+
+<div class="code-wrapper"><pre class="code-block code-template"><p>Output format: ${.output_format}
+<p>Auto-escaping: ${.auto_esc?c}</pre></div><p>See the <a href="dgui_misc_autoescaping.html#topic.predefinedOutputFormats">table of
+ predefined output formats here...</a></p><p>Configuration examples:</p><ul>
+ <li>
+ <p>To enable automatic output format associations to
+ <code class="inline-code">*.ftlh</code> and <code class="inline-code">*.ftlx</code>,
+ either:</p>
+
+ <ul>
+ <li>
+ <p>Use <code class="inline-code">incompatible_improvements</code> 2.3.24
+ or higher; see <a href="pgui_config_incompatible_improvements.html#pgui_config_incompatible_improvements_how_to_set">how
+ to set
+ <code>incompatible_improvements</code></a></p>
+ </li>
+
+ <li>
+ <p>Or, enable standard file extension recognizing
+ explicitly:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">// Where you initalize the Configuration singletion, add:
+cfg.setRecognizeStandardFileExtensions(true);</pre></div>
+
+ <p>or if you configure FreeMarker with Java
+ <code class="inline-code">*.properties</code> file:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">recognizeStandardFileExtensions = true</pre></div>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <p>Let's say that you want to associate all templates in the
+ <code class="inline-code">mail</code> directory to the HTML output format. You
+ could achieve that like this (assuming that you are getting the
+ templates with
+ <code class="inline-code">cfg.getTemplate(<em class="code-color">...</em>)</code>,
+ and not instantiating them yourself):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">// Where you initalize the Configuration singletion, add:
+
+TemplateConfiguration tcHTML = new TemplateConfiguration();
+tcHTML.setOutputFormat(HTMLOutputFormat.INSTANCE);
+
+cfg.setTemplateConfigurations(
+ new ConditionalTemplateConfigurationFactory(
+ new PathGlobMatcher("mail/**"),
+ tcHTML));</pre></div>
+
+ <p>or if you are configuring FreeMarker from Java
+ <code class="inline-code">*.properties</code> file (the <code class="inline-code">\</code>-s
+ are required for the Java Properties file format only):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">templateConfigurations = \
+ ConditionalTemplateConfigurationFactory( \
+ PathGlobMatcher("mail/**"), \
+ TemplateConfiguration(outputFormat = HTMLOutputFormat()))</pre></div>
+ </li>
+
+ <li>
+ <p>Let's say you want to associate templates with
+ <code class="inline-code">xml</code> file extension to the XML output format,
+ templates with <code class="inline-code">html</code> and <code class="inline-code">htm</code>
+ extension to the HTML output format, and templates with
+ <code class="inline-code">rtf</code> extension to the <code class="inline-code">RTF</code>
+ output format. You could achieve that like this (assuming that you
+ are getting the templates with
+ <code class="inline-code">cfg.getTemplate(<em class="code-color">...</em>)</code>,
+ and not instantiating them yourself):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">TemplateConfiguration tcHTML = new TemplateConfiguration();
+tcHTML.setOutputFormat(HTMLOutputFormat.INSTANCE);
+
+TemplateConfiguration tcXML = new TemplateConfiguration();
+tcXML.setOutputFormat(XMLOutputFormat.INSTANCE);
+
+TemplateConfiguration tcRTF = new TemplateConfiguration();
+tcRTF.setOutputFormat(RTFOutputFormat.INSTANCE);
+
+cfg.setTemplateConfigurations(
+ new FirstMatchTemplateConfigurationFactory(
+ new ConditionalTemplateConfigurationFactory(
+ new FileExtensionMatcher("xml"),
+ tcXML),
+ new ConditionalTemplateConfigurationFactory(
+ new OrMatcher(
+ new FileExtensionMatcher("html"),
+ new FileExtensionMatcher("htm")),
+ tcHTML),
+ new ConditionalTemplateConfigurationFactory(
+ new FileExtensionMatcher("rtf"),
+ tcRTF)
+ ).allowNoMatch(true)
+);</pre></div>
+
+ <p>or if you are configuring FreeMarker from Java
+ <code class="inline-code">*.properties</code> file (the <code class="inline-code">\</code>-s
+ are required for the Java Properties file format only):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">templateConfigurations = \
+ FirstMatchTemplateConfigurationFactory( \
+ ConditionalTemplateConfigurationFactory( \
+ FileExtensionMatcher("xml"), \
+ TemplateConfiguration(outputFormat = XMLOutputFormat())), \
+ ConditionalTemplateConfigurationFactory( \
+ OrMatcher( \
+ FileExtensionMatcher("html"), \
+ FileExtensionMatcher("htm")), \
+ TemplateConfiguration(outputFormat = HTMLOutputFormat())), \
+ ConditionalTemplateConfigurationFactory( \
+ FileExtensionMatcher("rtf"), \
+ TemplateConfiguration(outputFormat = RTFOutputFormat())), \
+ allowNoMatch = true)</pre></div>
+ </li>
+ </ul><p>(You can find some more complex
+ <code class="inline-code">template_configurations</code> setups <a href="pgui_config_templateconfigurations.html">here...</a>)</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_config_templateconfigurations.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_custom_formats.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_config_settings.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_config_settings.html b/builds/2.3.26-nightly/pgui_config_settings.html
new file mode 100644
index 0000000..322f062
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_config_settings.html
@@ -0,0 +1,378 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Settings - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Settings">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_config_settings.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_config_settings.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config.html"><span itemprop="name">The Configuration</span></a></li><li class="step-3" itempr
op="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_config_settings.html"><span itemprop="name">Settings</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","The Configuration","Settings"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_config_sharedvariables.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_templateloading.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_config_settings" itemprop="headline">Settings</h1>
+</div></div><p><strong>Settings</strong> are named values that
+ influence the behavior of FreeMarker. Examples of settings are:
+ <code class="inline-code">locale</code>, <code class="inline-code">number_format</code>,
+ <code class="inline-code">default_encoding</code>,
+ <code class="inline-code">template_exception_handler</code>. The full list of
+ settings can be found in the <a href="http://freemarker.org/docs/api/freemarker/template/Configuration.html#setSetting-java.lang.String-java.lang.String-">Java
+ API documentation of
+ <code>Configuration.setSetting(...)</code></a>.</p><p>The settings coming from the <code class="inline-code">Configuration</code>
+ can be overridden in a <code class="inline-code">Template</code> instance. For
+ example, if you set the <code class="inline-code">locale</code> setting to
+ <code class="inline-code">"en_US"</code> in the configuration, then the
+ <code class="inline-code">locale</code> in all templates that use this configuration
+ will be <code class="inline-code">"en_US"</code>, except in templates where the
+ <code class="inline-code">locale</code> was explicitly specified differently (see
+ <a href="ref_directive_include.html#ref_directive_include_localized">localization</a>).
+ Thus, the setting values in the <code class="inline-code">Configuration</code> serve
+ as defaults that can be overridden in a per template manner. The value
+ coming from the <code class="inline-code">Configuration</code> instance or
+ <code class="inline-code">Template</code> instance can be further overridden for a
+ single <code class="inline-code">Template.process</code> call. For each such call a
+ <code class="inline-code">freemarker.core.Environment</code> object is created
+ internally that holds the runtime environment of the template
+ processing, including the setting values that were overridden on that
+ level. The values stored there can even be changed during the template
+ processing, so a template can set settings itself, like switching
+ <code class="inline-code">locale</code> at the middle of the ongoing
+ processing.</p><p>This can be imagined as 3 layers
+ (<code class="inline-code">Configuration</code>, <code class="inline-code">Template</code>,
+ <code class="inline-code">Environment</code>) of settings, where the topmost layer
+ that contains the value for a certain setting provides the effective
+ value of that setting. For example (settings A to F are just imaginary
+ settings for this example):</p> <div class="table-responsive">
+ <table class="table">
+
+
+
+
+
+ <thead>
+ <tr>
+ <th align="left"></th>
+
+
+ <th align="center">Setting A</th>
+
+
+ <th align="center">Setting B</th>
+
+
+ <th align="center">Setting C</th>
+
+
+ <th align="center">Setting D</th>
+
+
+ <th align="center">Setting E</th>
+
+
+ <th align="center">Setting F</th>
+
+ </tr>
+
+ </thead>
+
+
+ <tbody>
+ <tr>
+ <td align="left">Layer 3: <code class="inline-code">Environment</code></td>
+
+
+ <td align="center">1</td>
+
+
+ <td align="center">-</td>
+
+
+ <td align="center">-</td>
+
+
+ <td align="center">1</td>
+
+
+ <td align="center">-</td>
+
+
+ <td align="center">-</td>
+
+ </tr>
+
+
+ <tr>
+ <td align="left">Layer 2: <code class="inline-code">Template</code></td>
+
+
+ <td align="center">2</td>
+
+
+ <td align="center">2</td>
+
+
+ <td align="center">-</td>
+
+
+ <td align="center">-</td>
+
+
+ <td align="center">2</td>
+
+
+ <td align="center">-</td>
+
+ </tr>
+
+
+ <tr>
+ <td align="left">Layer 1: <code class="inline-code">Configuration</code></td>
+
+
+ <td align="center">3</td>
+
+
+ <td align="center">3</td>
+
+
+ <td align="center">3</td>
+
+
+ <td align="center">3</td>
+
+
+ <td align="center">-</td>
+
+
+ <td align="center">-</td>
+
+ </tr>
+
+ </tbody>
+
+ </table>
+ </div>
+<p>The effective value of settings will be: A = 1, B = 2, C = 3, D
+ = 1, E = 2. The F setting is probably <code class="inline-code">null</code>, or it
+ throws exception when you try to get it.</p><p>Let's see exactly how to set settings:</p><ul>
+ <li>
+ <p><code class="inline-code">Configuration</code> layer: In principle you set
+ the settings with the setter methods of the
+ <code class="inline-code">Configuration</code> object, fore example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">Configuration myCfg = new Configuration(Configuration.VERSION_2_3_25);
+myCfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
+myCfg.setDefaultEncoding("UTF-8");
+DefaultObjectWrapperBuilder owb = new DefaultObjectWrapperBuilder(Configuration.VERSION_2_3_25);
+owb.setForceLegacyNonListCollections(false);
+owb.setDefaultDateType(TemplateDateModel.DATETIME);
+myCfg.setObjectWrapper(owb.build());</pre></div>
+
+ <p>You do this before you start to actually use the
+ <code class="inline-code">Configuration</code> object (typically, when you
+ initialize the application); you should treat the object as
+ read-only after that.</p>
+
+ <p>In practice, in most frameworks you have to specify the
+ settings in some kind of framework-specific configuration file
+ that require specifying settings as <code class="inline-code">String</code>
+ name-value pairs (like in a <code class="inline-code">.properties</code> file).
+ In that case the authors of the frameworks most probably use the
+ <code class="inline-code">Confguration.setSetting(String name, String
+ value)</code> method; see available setting names and the
+ format of the values in the <a href="http://freemarker.org/docs/api/freemarker/template/Configuration.html#setSetting-java.lang.String-java.lang.String-">API
+ documentation of <code>setSetting</code></a>. Example for
+ Spring Framework:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified"><bean id="freemarkerConfig"
+ class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
+ <property name="freemarkerSettings">
+ <props>
+ <prop key="incompatible_improvements">2.3.25</prop>
+ <prop key="template_exception_handler">rethrow</prop>
+ <prop key="default_encoding">UTF-8</prop>
+ <prop key="object_wrapper">
+ DefaultObjectWrapper(
+ 2.3.25,
+ forceLegacyNonListCollections = false,
+ defaultDateType = freemarker.template.TemplateDateModel.DATETIME)
+ </prop>
+ </props>
+ </property>
+</bean></pre></div>
+
+ <p>Here's the same when configuring FreeMarker for Struts,
+ which looks for a <code class="inline-code">freemarker.properties</code> in the
+ classpath:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">incompatible_improvements=2.3.25
+template_exception_handler=rethrow
+default_encoding=UTF-8
+object_wrapper=DefaultObjectWrapper( \
+ 2.3.25, \
+ forceLegacyNonListCollections = false, \
+ defaultDateType = freemarker.template.TemplateDateModel.DATETIME)</pre></div>
+
+ <p>As demonstrated above with
+ <code class="inline-code">object_wrapper</code>, some settings can accept quite
+ complex values, which can be used to instantiate objects of
+ arbitrary classes and set their properties. Still, configuring
+ with <code class="inline-code">String</code> key-value pairs is limited compared
+ to directly using the Java API, so in some cases you have to find
+ a way to do this in Java.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">Template</code> layer: Settings on individual
+ templates are normally set by <a href="pgui_config_templateconfigurations.html">template
+ configurations (see them in their own chapter)</a>, which
+ basically associate setting assignments to template name (template
+ path) patterns. There's a deviation from this approach with the
+ <code class="inline-code">locale</code> setting, because that you can also
+ specify to <code class="inline-code">Configuration.getTemplate(...)</code> as
+ parameter, to get the template for the requested locale (so called
+ localized lookup).</p>
+
+ <div class="callout warning">
+ <strong class="callout-label">Warning!</strong>
+
+ <p>You should never set settings directly on the
+ <code class="inline-code">Template</code> object that you get from
+ <code class="inline-code">Configuration.getTemplate(...)</code>! Those objects
+ should be treated as already initialized and read-only.</p>
+ </div>
+
+
+ <p>When a template includes or imports another template, most
+ of the settings (like <code class="inline-code">locale</code>,
+ <code class="inline-code">number_format</code>, etc.) will remain those
+ specified by the top-level template. The exceptions are the
+ settings that affect the parsing of the template (like
+ <code class="inline-code">tag_syntax</code>,
+ <code class="inline-code">whitespace_stripping</code>, etc.), as these are not
+ inherited from the top-level template, instead each template
+ always uses its own values, no mater how it was invoked.</p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>If you are going to use template layer settings, you
+ should set <a href="pgui_config_incompatible_improvements.html">the
+ <code>incompatible_improvements</code> setting</a> to
+ 2.3.22 or higher, to avoid some confusing legacy bugs.</p>
+ </div>
+
+ </li>
+
+ <li>
+ <p><code class="inline-code">Environment </code>layer: There are two ways of
+ doing it:</p>
+
+ <ul>
+ <li>
+ <p>With Java API: Use the setter methods of the
+ <code class="inline-code">Environment</code> object. You may run into the
+ API problem that <code class="inline-code">myTemplate.process(...)</code>
+ both creates the <code class="inline-code">Environment</code> object
+ internally and processes the template, so you have no
+ opportunity to adjust the <code class="inline-code">Environment</code> in
+ between. The solution is that those two steps can be separated
+ like this:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">Environment env = myTemplate.createProcessingEnvironment(root, out);
+env.setLocale(java.util.Locale.ITALY);
+env.setNumberFormat("0.####");
+env.process(); // process the template</pre></div>
+ </li>
+
+ <li>
+ <p>Directly in the Template (considered as bad style,
+ usually): Use the <a href="ref_directive_setting.html#ref.directive.setting"><code>setting</code>
+ directive</a>, for example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#setting locale="it_IT">
+<#setting number_format="0.####"></pre></div>
+ </li>
+ </ul>
+
+ <p>There are no restriction regarding when can you change the
+ settings in this layer.</p>
+ </li>
+ </ul><p>To see the list of supported settings and their meaning, please
+ read the following parts of the FreeMarker Java API
+ documentation:</p><ul>
+ <li>
+ <p>Setter methods of
+ <code class="inline-code">freemarker.core.Configurable</code> for the settings
+ that are in all three layers</p>
+ </li>
+
+ <li>
+ <p>Setter methods of
+ <code class="inline-code">freemarker.template.Configuration</code> for the
+ settings that are available only in the
+ <code class="inline-code">Configuration</code> layer</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">freemarker.core.Configurable.setSetting(String,
+ String)</code> for settings that are available in all three
+ layers and are writable with <code class="inline-code">String</code> key-value
+ pairs.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">freemarker.template.Configuration.setSetting(String,
+ String)</code> for settings that are available only in the
+ <code class="inline-code">Configuration</code> layer and are writable with
+ <code class="inline-code">String</code> key-value pairs.</p>
+ </li>
+ </ul><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_config_sharedvariables.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_config_templateloading.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[04/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_25.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_25.html b/builds/2.3.26-nightly/versions_2_3_25.html
new file mode 100644
index 0000000..9ff74f2
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_25.html
@@ -0,0 +1,228 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.25 (incubating at Apache) - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.25 (incubating at Apache)">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_25.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_25.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_25.html"><span itemprop="name">2.3.25 (incubating at Apache)</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.25 (incubating at Apache)"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_26.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_24.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_25" itemprop="headline">2.3.25 (incubating at Apache)</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_158" data-menu-target="autoid_158">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_159" data-menu-target="autoid_159">Changes on the Java side</a></li></ul> </div><p>Release date: 2016-06-26</p><p><strong>This is a stable, final
+ release.</strong> The "incubating" suffix is required
+ by the Apache Software Foundation until the project becomes a fully
+ accepted (graduated) Apache project.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_158">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>Extended the <a href="ref_directive_list.html#ref.directive.list"><code>list</code>
+ directive</a> to support listing hashes (such as
+ <code class="inline-code">Map</code>-s), like <code class="inline-code"><#list map as k,
+ v>${k}: ${v}</#list></code>, where
+ <code class="inline-code">k</code> and <code class="inline-code">v</code> are the key and
+ value in the key-value pairs of the hash.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_159">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>Added the <code class="inline-code">TemplateModelHashEx2</code>
+ interface that extends <code class="inline-code">TemplateModelHashEx</code>
+ with a method for listing the content of the key-value pairs of
+ the hash. (This is utilized by the new hash listing capability
+ of the <a href="ref_directive_list.html#ref.directive.list"><code>list</code>
+ directive</a>, but it's not required by it if all keys are
+ strings.)</p>
+ </li>
+
+ <li>
+ <p>Lazy imports: With the new boolean settings,
+ <code class="inline-code">lazy_imports</code> and
+ <code class="inline-code">lazy_auto_imports</code>, you can make imports (as
+ in <code class="inline-code"><#import "lib/utils.ftl" as u></code>)
+ and/or auto-imports to be lazy. When the import is lazy, the
+ namespace variable (<code class="inline-code">u</code> in this example) will
+ be created immediately, just like before, but the imported
+ template will be loaded and processed only when (and if ever)
+ the content of the imported namespace is accessed. The main
+ application of this is with auto-imports, where you don't want
+ the overhead of importing templates that aren't actually used in
+ a template. (Also, a new
+ <code class="inline-code">Environment.importLib</code> method overload was
+ added, where you can specify if you want a lazy or an eager
+ import.) These new settings can be set on
+ <code class="inline-code">Configuration</code>, <code class="inline-code">Template</code>
+ (<code class="inline-code">TemplateConfiguration</code>) and
+ <code class="inline-code">Environment</code> level.</p>
+ </li>
+
+ <li>
+ <p>It's now possible to set the
+ <code class="inline-code">auto_import</code> and
+ <code class="inline-code">auto_include</code> settings on a per template basis
+ (like templates with a certain name pattern has different
+ auto-imports). This is now possible as these settings were moved
+ from the <code class="inline-code">Configuration</code> level down to the more
+ generic <code class="inline-code">Configurable</code> level, and so are
+ inherited by <code class="inline-code">TemplateConfiguration</code> and
+ <code class="inline-code">Environment</code> too.</p>
+ </li>
+
+ <li>
+ <p>New <code class="inline-code">Configuration</code> (and
+ <code class="inline-code">TemplateConfiguration</code>) setting,
+ <code class="inline-code">tab_size</code>. This only influences how the column
+ number reported in error messages is calculated (and the column
+ number available with other API-s). It doesn't influence the
+ output of the templates. Defaults to 8.</p>
+ </li>
+
+ <li>
+ <p>Added new setting to
+ <code class="inline-code">DefaultObjectWrapper</code> (and to
+ <code class="inline-code">DefaultObjectWrapperBuilder</code>):
+ <code class="inline-code">iterableSupport</code>. This fixes the issue when
+ you couldn't use <code class="inline-code">#list</code> (or
+ <code class="inline-code">?has_next</code>, etc.) on a value that only
+ implements Java 5 <code class="inline-code">java.lang.Iterable</code> (not to
+ be confused with <code class="inline-code">Iterator</code>), but not
+ <code class="inline-code">Collection</code>. This is not enabled by default as
+ it's not compatible with some existing templates, most often
+ because they have used
+ <code class="inline-code">someIterable.iterator()</code> in the template as a
+ workaround. When this is enabled, the
+ <code class="inline-code">Iterable</code> object won't be seen as a generic
+ Java object by FreeMarker anymore, and thus just like with
+ <code class="inline-code">Collection</code>-s, its API won't be exposed to the
+ templates (except through <code class="inline-code">?api</code>, of
+ course).</p>
+ </li>
+
+ <li>
+ <p>Added
+ <code class="inline-code">Configurable.getCustomNumberFormatsWithoutFallback</code>
+ and
+ <code class="inline-code">Configurable.getCustomDateFormatsWithoutFallback</code>
+ methods to make it easier for custom code to investigate the
+ custom formal setting <code class="inline-code">Map</code> hierarchy.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed (<a href="https://issues.apache.org/jira/browse/FREEMARKER-18">FREEMARKER-18</a>):
+ If you had a JSP custom tag and an EL function defined in the
+ same TLD with the same name, the EL function has overwritten the
+ custom tag. This is a bug introduced in 2.3.23, when EL function
+ support was added. JSP allows a custom tag and an EL function in
+ the same TLD to have the same name. In such case now we combine
+ the two into a single value that is both callable as an user
+ defined directive (<code class="inline-code"><@my.foo...></code>) and as
+ a function (<code class="inline-code">my.f(...)</code>).</p>
+ </li>
+
+ <li>
+ <p>Bug fixed (<a href="https://issues.apache.org/jira/browse/FREEMARKER-19">FREEMARKER-19</a>):
+ The column numbers calculated by the parser has assumed tab size
+ 1 since 2.3.25 (an unwanted side effect of updating JavaCC),
+ while before it has assumed tab size 8. The default was restored
+ to 8. This bug has affected the column numbers in error
+ messages. It also broke the output of some rarely used AIP-s,
+ namely <code class="inline-code">Template.getSource(beginCol, beginLine, endCol,
+ endLine)</code>,
+ <code class="inline-code">TemplateObject.getSource()</code> and through that
+ <code class="inline-code">TemplateObject.toString()</code>, if the first or
+ last line has contain tab characters.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: There was a regression with 2.3.24, where
+ <code class="inline-code">Configuration.setAutoImports()</code> haven't
+ removed auto-imports added earlier. (Though it's unlikely that
+ an application uses that method and also adds auto-imports
+ earlier.)</p>
+ </li>
+
+ <li>
+ <p>Bug fixed:
+ <code class="inline-code">TemplateConfiguration.apply(Template)</code> didn't
+ merge the <code class="inline-code">customDateFormats</code> and
+ <code class="inline-code">customNumberFormats</code> <code class="inline-code">Map</code>-s
+ when they were set both in the <code class="inline-code">Template</code> and
+ in the applied <code class="inline-code">TemplateConfiguration</code>, instead
+ it just kept the value in the <code class="inline-code">Template</code> (just
+ like with atomic setting values). Note that it was unlikely to
+ run into this bug, as usually you (or FreeMarker) create a
+ single merged <code class="inline-code">TemplateConfiguration</code> with
+ <code class="inline-code">TemplateConfiguration.merge(TemplateConfiguration)</code>
+ and then apply it on a fresh template.</p>
+ </li>
+
+ <li>
+ <p>Removed FindBugs <code class="inline-code">@SuppressFBWarnings</code>
+ annotations from the binary (<code class="inline-code">freemarker.jar</code>),
+ as they have caused warnings like this when compiling dependant
+ project with Gradle: "warning: Cannot find annotation
+ method 'value()' in type 'SuppressFBWarnings'"</p>
+ </li>
+
+ <li>
+ <p>The Maven source artifact now contains the JavaCC
+ generated java files and <code class="inline-code">FTL.jj</code>.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_26.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_24.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_26.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_26.html b/builds/2.3.26-nightly/versions_2_3_26.html
new file mode 100644
index 0000000..dd5ce6b
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_26.html
@@ -0,0 +1,297 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.26 (incubating at Apache) - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.26 (incubating at Apache)">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_26.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_26.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_26.html"><span itemprop="name">2.3.26 (incubating at Apache)</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.26 (incubating at Apache)"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="app_versions.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_25.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_26" itemprop="headline">2.3.26 (incubating at Apache)</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_155" data-menu-target="autoid_155">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_156" data-menu-target="autoid_156">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_157" data-menu-target="autoid_157">Other changes</a></li></ul> </div><p>Release date: 2017-FIXME</p><p><strong>This is a stable, final
+ release.</strong> The "incubating" suffix is required
+ by the Apache Software Foundation until the project becomes a fully
+ accepted (graduated) Apache project.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_155">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>Bug fixed (<a href="https://issues.apache.org/jira/browse/FREEMARKER-42">FREEMARKER-42</a>):
+ <code class="inline-code">?first</code> now works with FTL collections (things
+ that can be listed but doesn't support getting items by index),
+ not only with sequences. The practical importance of this is
+ that <code class="inline-code">?first</code> now always works on Java
+ <code class="inline-code">Set</code>-s (which is useful for
+ <code class="inline-code">Set</code>-s with well defined ordering), while
+ earlier it has failed depending on the
+ <code class="inline-code">object_wrapper</code> configuration setting.</p>
+ </li>
+
+ <li>
+ <p>Added
+ <code class="inline-code"><em class="code-color">node</em>?next_sibling</code>
+ and
+ <code class="inline-code"><em class="code-color">node</em>?previous_sibling</code>
+ to move sideways in a node trees (<a href="ref_builtins_node.html#ref_builtin_next_sibling">see reference...</a>).
+ This works with XML DOM nodes, or with any custom
+ <code class="inline-code">TemplateNodeModelEx</code> implementations.</p>
+ </li>
+
+ <li>
+ <p>Added new <code class="inline-code">@@</code> keys to XML DOM models:
+ <code class="inline-code">@@next_sibling_element</code>,
+ <code class="inline-code">@@previous_sibling_element</code>. These get the
+ sibling node if that's an element, with the extra that they
+ silently skip any whitespace text and comment and processing
+ instruction between them. (See more about <code class="inline-code">@@</code>
+ keys <a href="xgui_imperative_formal.html">here...</a>)</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_156">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p><a href="https://issues.apache.org/jira/browse/FREEMARKER-24">FREEMARKER-24</a>:
+ Added workaround (not enabled by default) to expose Java 8
+ default methods (and the bean properties they define) to
+ templates, despite that
+ <code class="inline-code">java.beans.Introspector</code> (the official
+ JavaBeans introspector) ignores them, at least as of JRE
+ 1.8.0_66. To enable this workaround, either increase the value
+ of the <code class="inline-code">incompatibleImprovements</code> constructor
+ argument of <code class="inline-code">DefaultObjectWrapper</code> or
+ <code class="inline-code">BeansWrapper</code> the used to 2.3.26, or set its
+ <code class="inline-code">treatDefaultMethodsAsBeanMembers</code> setting to
+ <code class="inline-code">true</code>. Note that if you leave the
+ <code class="inline-code">object_wrapper</code> setting of the
+ <code class="inline-code">Configuration</code> on its default, it's enough to
+ increase the <code class="inline-code">incompatibleImprovements</code> setting
+ of the <code class="inline-code">Configuration</code> to 2.3.26, as that's
+ inherited by the default <code class="inline-code">object_wrapper</code>.
+ </p>
+ </li>
+
+ <li>
+ <p>Added the
+ <code class="inline-code">freemarker.template.TemplateNodeModelEx</code>
+ interface which extends the <code class="inline-code">TemplateNodeModel</code>
+ instance with two methods, <code class="inline-code">TemplateNodeModelEx
+ getNextSibling()</code> and <code class="inline-code">TemplateNodeModelEx
+ getPreviousSibling()</code> methods. This is required by
+ <code class="inline-code"><em class="code-color">node</em>?next_sibling</code>
+ and
+ <code class="inline-code"><em class="code-color">node</em>?previous_sibling</code>
+ in the templates. This new interface is already implemented by
+ the standard W3C DOM node wrapper of FreeMarker.</p>
+ </li>
+
+ <li>
+ <p>Made <code class="inline-code">+</code> operator when adding two hashes
+ significantly faster (be removing the overhead caused be
+ throwing and then catching an exception).</p>
+ </li>
+
+ <li>
+ <p>Better error messages when someone tries to get an invalid
+ <code class="inline-code">@@<em class="code-color">...</em></code> subvariable
+ of an XML DOM node. (Now it's not issued by the XPath
+ implementation, which just sees it as a syntactical
+ error.)</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: If <a href="pgui_config_incompatible_improvements.html#pgui_config_incompatible_improvements_how_to_set">the
+ <code>incompatible_improvements</code> setting</a> is
+ set to 2.3.26 (or higher),
+ <code class="inline-code"><em class="code-color">exp</em>?interpret</code>
+ always gets the parser-related settings from the template that
+ it's called from. Earlier, sometimes it got those from the
+ topmost (main) template instead. Similarly, the generated name
+ of the template that <code class="inline-code">?interpret</code> creates will
+ always refer to the template where's it's called from.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <code class="inline-code">MultiTemplateLoader</code>, when
+ it's in sticky mode (the default), and the
+ <code class="inline-code">TemplateLoader</code> that was successfully used for
+ a given name last time doesn't find the template now (let's call
+ it the sticked <code class="inline-code">TemplateLoader</code>), and thus
+ <code class="inline-code">MultiTemplateLoader</code> falls back to trying all
+ the <code class="inline-code">TemplateLoader</code>-s in order, will now skip
+ the sticked <code class="inline-code">TemplateLoader</code>, as that was
+ already attempted in the same
+ <code class="inline-code">MultiTemplateLoader.findTemplateSource</code>
+ invocation.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed:
+ <code class="inline-code">NodeModel.mergeAdjacentText(Node)</code> didn't
+ merged all adjacent text nodes, only pairs of adjacent text
+ nodes. (Luckily this method is hardly ever used, and the more
+ often used <code class="inline-code">NodeModel.simplify(Node)</code> was
+ working correctly.)</p>
+ </li>
+
+ <li>
+ <p>Performance improvements in the static utility methods of
+ <code class="inline-code">NodeModel</code>: <code class="inline-code">simplify(Node)</code>,
+ <code class="inline-code">mergeAdjacentText(Node)</code>,
+ <code class="inline-code">removeComments(Node)</code>,
+ <code class="inline-code">removePIs(Node)</code>.</p>
+ </li>
+
+ <li>
+ <p>Added warning to the JavaDoc of
+ <code class="inline-code">NodeModel.parse</code> methods to inform users about
+ the possibility of XML External Entity (XXE) attacks if the
+ source XML (not a template) comes from untrusted source. This is
+ just an XML fact (i.e., that in an XML you can have external
+ entities and they can be exploited), and has no much to do with
+ FreeMarker. Also note that FreeMarker itself never calls
+ <code class="inline-code">NodeModel.parse</code>; these are merely convenience
+ methods that some applications directly call themselves to
+ create a <code class="inline-code">NodeModel</code> from an XML file. As this
+ method encapsulates the call to the platform XML parser, we
+ thought it's better to point this risk out.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">DefaultObjectWrapper</code>, only with its
+ <code class="inline-code">incompatible_improvements</code> set to 2.3.26
+ (<a href="pgui_datamodel_objectWrapper.html#topic.defaultObjectWrapperIcI">see how
+ here...</a>), wraps
+ <code class="inline-code">java.util.Enumeration</code>-s into
+ <code class="inline-code">freemarker.template.DefaultEnumerationAdapter</code>
+ (a new class) instead of into
+ <code class="inline-code">freemarker.ext.beans.EnumerationModel</code> (as far
+ as <code class="inline-code">useAdaptersForContainers</code> is
+ <code class="inline-code">true</code>, which is the default). This adapter is
+ cleaner than <code class="inline-code">EnumerationModel</code> as it only
+ implements the minimally required FTL type, which avoids some
+ ambiguous situations. (Note that Java API methods aren't exposed
+ anymore as subvariables; if you really need them, you can use
+ <code class="inline-code">?api</code>).</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">DefaultIteratorAdapter</code> now supports
+ <code class="inline-code">?api</code>. It was an oversight that it
+ didn't.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">Configuration.setSetting(String,
+ String)</code> and <code class="inline-code">setSettings</code> now allows
+ <code class="inline-code">null</code> value for
+ <code class="inline-code">template_loader</code> (because
+ <code class="inline-code">Configuration.setTemplateLoader(null)</code> is also
+ allowed for a while.).</p>
+ </li>
+
+ <li>
+ <p>The
+ <code class="inline-code">freemarker.template.TemplateCollectionModelEx</code>
+ interface and is not experimental anymore, so now it has
+ backward compatibility guarantees. Note that the
+ <code class="inline-code">TemplateCollectionModelEx.contains(TemplateModel)</code>
+ method was removed from it.</p>
+ </li>
+
+ <li>
+ <p><code class="inline-code">freemarker.template.DefaultNonListCollectionAdapter</code>
+ class is not experimental anymore, so now it has backward
+ compatibility guarantees.</p>
+ </li>
+
+ <li>
+ <p>Various smaller code cleanups.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_157">Other changes</h2>
+
+
+ <ul>
+ <li>
+ <p><a href="https://issues.apache.org/jira/browse/FREEMARKER-17">FREEMARKER-17</a>:
+ Removed the Servlet- and JSP-related <code class="inline-code">*.dtd</code>
+ files to simplify licensing. We can operate without them as
+ before, as validation with them was disabled earlier too. At
+ this point, everything in the source code of the FreeMarker
+ engine, and everything in the produced
+ <code class="inline-code">freemarker.jar</code> was created inside the
+ FreeMarker project.</p>
+ </li>
+
+ <li>
+ <p><a href="https://issues.apache.org/jira/browse/FREEMARKER-27">FREEMARKER-27</a>:
+ Moved some content from the <code class="inline-code">NOTICES</code> files
+ over to the <code class="inline-code">LICENSE</code> file, to follow the
+ Apache Incubator guidelines closer.</p>
+ </li>
+
+ <li>
+ <p>Various smaller JavaDoc improvements.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="app_versions.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_25.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_3.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_3.html b/builds/2.3.26-nightly/versions_2_3_3.html
new file mode 100644
index 0000000..ed9d0ed
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_3.html
@@ -0,0 +1,223 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.3 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.3">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_3.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_3.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_3.html"><span itemprop="name">2.3.3</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.3"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_4.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_2.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_3" itemprop="headline">2.3.3</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_210" data-menu-target="autoid_210">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_211" data-menu-target="autoid_211">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_212" data-menu-target="autoid_212">Other changes</a></li></ul> </div><p>Date of release: 2005-06-23</p><p>Some new features and lot of bugfixes.</p><p>Attention:</p><ul>
+ <li>
+ <p>If you are using the Log4J logging, from now at least Log4J
+ 1.2 is required. This is because of incompatible changes in the
+ Log4J API.</p>
+ </li>
+
+ <li>
+ <p>If you build FreeMarker yourself: from now at least JavaCC
+ 3.2 (instead of JavaCC 2.1) and at least Ant 1.6.1 (instead of Ant
+ 1.5.x) is required. This doesn't affect users who use the
+ <code class="inline-code">freemarker.jar</code> comes with the
+ distribution.</p>
+ </li>
+ </ul>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_210">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>New built-in for formatting numbers for "computer
+ audience" as opposed to human audience: <a href="ref_builtins_number.html#ref_builtin_c"><code>c</code></a>. It should
+ be used for numbers that must use Java language formatting
+ regardless of the number format and locale settings, like for a
+ database record ID used as the part of an URL or as invisible
+ field value in a HTML form, or for printing CSS/JavaScript
+ numerical literals.</p>
+ </li>
+
+ <li>
+ <p>New built-in for the columnar/tabular displaying of
+ sequences: <a href="ref_builtins_sequence.html#ref_builtin_chunk"><code>chunk</code></a>.</p>
+ </li>
+
+ <li>
+ <p>The <a href="dgui_template_exp.html#dgui_template_exp_seqenceop_slice">sequence
+ slice</a> and substring operators now allow the omitting of
+ the last index, in which case it defaults to the index of the
+ last sequence item or character. Example:
+ <code class="inline-code">products[2..]</code>. (Also, <a href="dgui_template_exp.html#dgui_template_exp_direct_seuqence">numerical range
+ literals</a> now allow the omitting of the final number, in
+ which case it defaults to infinity. Example:
+ <code class="inline-code">5..</code>.)</p>
+ </li>
+
+ <li>
+ <p>Bugfix: <code class="inline-code">?replace</code> has worked forever if
+ the string to replace was <code class="inline-code">""</code>.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_211">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>New template loader:
+ <code class="inline-code">freemarker.cache.StringTemplateLoader</code>. It
+ uses a <code class="inline-code">Map</code> with <code class="inline-code">Strings</code> as
+ its source of templates. See more in the JavaDoc.</p>
+ </li>
+
+ <li>
+ <p>Experimental Rhino support: FreeMarker now comes with an
+ experimental object wrapper for Rhino (Java ECMAScript
+ implementation):
+ <code class="inline-code">freemarker.ext.rhino.RhinoWrapper</code></p>
+ </li>
+
+ <li>
+ <p>Some new utility methods for
+ <code class="inline-code">Simple<em class="code-color">Xxx</em></code> classes:
+ <code class="inline-code">SimpleHash.toMap()</code>,
+ <code class="inline-code">SimpleSequence.toList()</code>.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: FTL literals and any other
+ <code class="inline-code">SimpleSequnce</code>-s, and
+ <code class="inline-code">SimpleHash</code>-es now can be used as parameters
+ to the FreeMarker-unaware Java methods that are exposed by
+ <code class="inline-code">DefaultWrapper</code> or
+ <code class="inline-code">BeansWrapper</code>. That is, the method parameters
+ are automatically converted from
+ <code class="inline-code">Template<em class="code-color">Type</em>Model</code>-s
+ to <code class="inline-code">java.util.Map</code> and
+ <code class="inline-code">java.util.List</code> respectively.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: The JSP support now works in JSP 2 compliant
+ containers as well. No, it doesn't support the new features of
+ JSP 2 yet, it's just that the JSP 1.2 taglib support has not
+ worked in JSP 2 containers.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: The
+ <code class="inline-code">Configuration.setOutputEncoding</code> and
+ <code class="inline-code">setURLEscapingCharset</code> methods died with
+ <code class="inline-code">NullPointerException</code> when you tried to set
+ the setting value to <code class="inline-code">null</code>, which is legal for
+ these settings.</p>
+ </li>
+
+ <li>
+ <p>Bugfix:
+ <code class="inline-code">freemarker.template.utility.StringUtil.replace(...)</code>
+ has worked forever if the string to replace was
+ <code class="inline-code">""</code>.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: The Log4J logging was updated to be compatible
+ with the upcoming Log4J 1.3. Note that now FreeMarker will need
+ at least Log4J 1.2.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: FreeMarker didn't built from the source code on
+ J2SE 1.5, because of the introduction of the
+ <code class="inline-code">enum</code> keyword.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: The return value of
+ <code class="inline-code">SimpleSequence.synchronizedWrapper()</code> was not
+ properly synchronized. Same with
+ <code class="inline-code">SimpleHash.synchronizedWrapper()</code>.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: Problem with <code class="inline-code">BeansWrapper</code> and
+ overridden bean methods/properties. (Details: bug-tracker entry
+ <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1217661&group_id=794&atid=100794">#1217661</a>
+ and <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1166533&group_id=794&atid=100794">#1166533</a>)</p>
+ </li>
+
+ <li>
+ <p>Bugfix: Can't access JSP taglibs if
+ <code class="inline-code">Request</code> attribute is defined in the
+ data-model (Details: bug-tracker entry <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1202918&group_id=794&atid=100794">#1202918</a>).</p>
+ </li>
+
+ <li>
+ <p>Bugfix: Various minor parser glitches were fixed.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_212">Other changes</h2>
+
+
+ <ul>
+ <li>
+ <p>Manual improvements, especially in the FAQ.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_4.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_2.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_4.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_4.html b/builds/2.3.26-nightly/versions_2_3_4.html
new file mode 100644
index 0000000..4aaa6d0
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_4.html
@@ -0,0 +1,121 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.4 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.4">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_4.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_4.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_4.html"><span itemprop="name">2.3.4</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.4"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_5.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_3.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_4" itemprop="headline">2.3.4</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_207" data-menu-target="autoid_207">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_208" data-menu-target="autoid_208">Changes on the Java side</a></li><li><a class="page-menu-link" href="#autoid_209" data-menu-target="autoid_209">Other changes</a></li></ul> </div><p>Date of release: 2005-10-10</p><p>Some new features and bugfixes.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_207">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>Now you can use <code class="inline-code">[</code> and
+ <code class="inline-code">]</code> instead of <code class="inline-code"><</code> and
+ <code class="inline-code">></code> for the FreeMarker tags. For example you
+ can write <code class="inline-code">[#if
+ loggedIn]<em class="code-color">...</em>[/#if]</code> and
+ <code class="inline-code">[@myMacro /]</code>. <a href="dgui_misc_alternativesyntax.html">More info...</a></p>
+ </li>
+
+ <li>
+ <p>Bugfix: the <code class="inline-code">has_content</code> built-in
+ returned <code class="inline-code">false</code> for number, date and boolean
+ values (if the value was not a multi-type value that is also a
+ sequence or collection or hash or string). Now it always returns
+ <code class="inline-code">true</code> for a number, date or boolean values
+ (except if the value is also a sequence or collection or hash or
+ string, because then it will be examined only like that).</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_208">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>Bugfix: the parameterless constructor of the
+ <code class="inline-code">ClassTemplateLoader</code> didn't worked.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: The Jython wrapper didn't wrapped
+ <code class="inline-code">java.util.Date</code> objects well. Now it wraps
+ them with <code class="inline-code">BeanWrapper</code> to
+ <code class="inline-code">TemplateDateModel</code>.</p>
+ </li>
+
+ <li>
+ <p>Bugfix: the <code class="inline-code">include</code> directive was
+ blamed when the included file had syntax error.</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_209">Other changes</h2>
+
+
+ <ul>
+ <li>
+ <p>Minor Manual fixes.</p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_5.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_3.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/versions_2_3_5.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/versions_2_3_5.html b/builds/2.3.26-nightly/versions_2_3_5.html
new file mode 100644
index 0000000..aab02de
--- /dev/null
+++ b/builds/2.3.26-nightly/versions_2_3_5.html
@@ -0,0 +1,162 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>2.3.5 - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="2.3.5">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/versions_2_3_5.html">
+<link rel="canonical" href="http://freemarker.org/docs/versions_2_3_5.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app.html"><span itemprop="name">Appendixes</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="app_versions.html"><span itemprop="name">Version history</span></a></li><li class="step-3" itemprop="itemListEl
ement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="versions_2_3_5.html"><span itemprop="name">2.3.5</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Appendixes","Version history","2.3.5"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="versions_2_3_6.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_4.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="versions_2_3_5" itemprop="headline">2.3.5</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_205" data-menu-target="autoid_205">Changes on the FTL side</a></li><li><a class="page-menu-link" href="#autoid_206" data-menu-target="autoid_206">Changes on the Java side</a></li></ul> </div><p>Date of release: 2006-03-11</p><p><em>This release was withdrawn because of a serious bug in
+ it. Please don't use it! Of course, all new features of it are
+ included in FreeMarker 2.3.6.</em></p><p>A few new features and several bugfixes.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_205">Changes on the FTL side</h2>
+
+
+ <ul>
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/?func=detail&atid=100794&aid=1435847&group_id=794">[1435847]</a>
+ Alternative syntax doesn't work for comments</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: With the new square bracket syntax, the tag
+ could be closed with <code class="inline-code">></code>. Now it can be
+ closed with <code class="inline-code">]</code> only.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/?func=detail&atid=100794&aid=1324020&group_id=794">[1324020]</a>
+ <code class="inline-code">ParseException</code> with the
+ <code class="inline-code">ftl</code> directive if it wasn't in its own
+ line</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/?func=detail&atid=100794&aid=1404033&group_id=794">[1404033]</a>
+ <code class="inline-code">eval</code> built-in fails with hash
+ concatenation</p>
+ </li>
+ </ul>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_206">Changes on the Java side</h2>
+
+
+ <ul>
+ <li>
+ <p>A new <code class="inline-code">Configuration</code> level setting,
+ <code class="inline-code">tagSyntax</code> was added. This determines the
+ syntax of the templates (angle bracket syntax VS <a href="dgui_misc_alternativesyntax.html">square bracket
+ syntax</a>) that has no <code class="inline-code">ftl</code> directive in
+ it. So now you can choose to use the new square bracket syntax
+ by default. However, the recommended is to use auto-detection
+ (<code class="inline-code">yourConfig.setTagSyntax(Configuration.AUTO_DETECT_TAG_SYNTAX)</code>),
+ because that will be the default starting from 2.4.
+ Auto-detection chooses syntax based on the syntax of the first
+ FreeMarker tag of the template (could be any FreeMarker tag, not
+ just <code class="inline-code">ftl</code>). Note that as with the previous
+ version, if a the template uses <code class="inline-code">ftl</code>
+ directive, then the syntax of the <code class="inline-code">ftl</code>
+ directive determines the syntax of the template, and the
+ <code class="inline-code">tagSyntax</code> setting is ignored.</p>
+ </li>
+
+ <li>
+ <p>Now <code class="inline-code">BeansWrapper</code>,
+ <code class="inline-code">DefaultObjectWrapper</code> and
+ <code class="inline-code">SimpleObjectWrapper</code> support lookup with 1
+ character long strings in <code class="inline-code">Map</code>-s (like
+ <code class="inline-code">myHash["a"]</code>) that use
+ <code class="inline-code">Character</code> keys. Simply, as a special case,
+ when a hash lookup fails on a string that is 1 character long,
+ it checks for the <code class="inline-code">Character</code> key in the
+ underlying map. (Bug tracker entry <a href="http://sourceforge.net/tracker/?func=detail&atid=100794&aid=1299045&group_id=794">[1299045]</a>
+ FreeMarker doesn't support map lookup with Character
+ keys.)</p>
+ </li>
+
+ <li>
+ <p>A new property, <code class="inline-code">strict</code> was added to
+ <code class="inline-code">BeansWrapper</code>,
+ <code class="inline-code">DefaultObjectWrapper</code> and
+ <code class="inline-code">SimpleObjectWrapper</code>. If this property is
+ <code class="inline-code">true</code> then an attempt to read a bean propertly
+ in the template (like <code class="inline-code">myBean.aProperty</code>) that
+ doesn't exist in the bean class (as opposed to just holding
+ <code class="inline-code">null</code> value) will cause
+ <code class="inline-code">InvalidPropertyException</code>, which can't be
+ suppressed in the template (not even with
+ <code class="inline-code">myBean.noSuchProperty?default('something')</code>).
+ This way <code class="inline-code">?default('something')</code> and
+ <code class="inline-code">?exists</code> and similar built-ins can be used to
+ handle existing properties whose value is
+ <code class="inline-code">null</code>, without the risk of hiding typos in the
+ property names. Typos will always cause error. But mind you, it
+ goes against the basic approach of FreeMarker, so use this
+ feature only if you really know what are you doing.</p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1426227&group_id=794&atid=100794">[1426227]</a>
+ <code class="inline-code">NullPointerException</code> in
+ <code class="inline-code">printStackTrace(...)</code></p>
+ </li>
+
+ <li>
+ <p>Bug fixed: <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1386193&group_id=794&atid=100794">[1386193]</a>
+ Division by zero in <code class="inline-code">ArithmeticEngine</code></p>
+ </li>
+ </ul>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="versions_2_3_6.html"><span>Previous</span></a><a class="paging-arrow next" href="versions_2_3_4.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[27/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_builtins_expert.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_builtins_expert.html b/builds/2.3.26-nightly/ref_builtins_expert.html
new file mode 100644
index 0000000..b722d1a
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_builtins_expert.html
@@ -0,0 +1,762 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Seldom used and expert built-ins - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Seldom used and expert built-ins">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_builtins_expert.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_builtins_expert.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins.html"><span itemprop="name">Built-in Reference</span></a></li><li class="step-3"
itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins_expert.html"><span itemprop="name">Seldom used and expert built-ins</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Built-in Reference","Seldom used and expert built-ins"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_builtins_type_independent.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directives.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_builtins_expert" itemprop="headline">Seldom used and expert built-ins</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#ref_buitin_api_and_has_api" data-menu-target="ref_buitin_api_and_has_api">api, has_api</a></li><li><a class="page-menu-link" href="#ref_builtin_numType" data-menu-target="ref_builtin_numType">byte, double, float, int, long, short</a></li><li><a class="page-menu-link" href="#ref_builtin_eval" data-menu-target="ref_builtin_eval">eval</a></li><li><a class="page-menu-link" href="#ref_builtin_has_content" data-menu-target="ref_builtin_has_content">has_content</a></li><li><a class="page-menu-link" href="#ref_builtin_interpret" data-menu-target="ref_builtin_interpret">interpret</a></li><li><a class="page-menu-link" href="#ref_builtin_isType" data-menu-target="ref_builtin_isType">is_...</a></li><li><a class="page-menu-link" href="#ref_builtin_markup_string" data-menu-target="ref_builtin_markup_string">markup_string</a></li><li><a class="page-menu-link" href="#ref_builtin_namespace" data-menu-target="ref_builtin_namespace">namespace</a></li><li><a cla
ss="page-menu-link" href="#ref_builtin_new" data-menu-target="ref_builtin_new">new</a></li><li><a class="page-menu-link" href="#ref_builtin_numToDate" data-menu-target="ref_builtin_numToDate">number_to_date, number_to_time, number_to_datetime</a></li></ul> </div><p>These are the built-ins that normally you should not use, but in
+ exceptional situations (debugging, advanced macros) they can be
+ useful. If you need to use these in your normal page templates, you
+ may revisit the data-model so you don't need to use these.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="ref_buitin_api_and_has_api">api, has_api</h2>
+
+
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>These built-ins exists since FreeMarker 2.3.22</p>
+ </div>
+
+
+ <p><code class="inline-code"><em class="code-color">value</em>?api</code>
+ provides access to the API (usually, the Java API) of
+ <code class="inline-code"><em class="code-color">value</em></code>, like
+ <code class="inline-code"><em class="code-color">value</em>?api.<em class="code-color">someJavaMethod()</em></code>
+ or
+ <code class="inline-code"><em class="code-color">value</em>?api.<em class="code-color">someBeanProperty</em></code>,
+ if the value itself supports exposing its API. This meant to be used
+ rarely, when you need to call a Java method of an object, but the
+ by-design simplistic view of the value that FreeMarker exposes to
+ the templates hides that, and there's no equivalent built-in either.
+ For example, when you put a <code class="inline-code">Map</code> into the
+ data-model (and you are using the default object wrapper),
+ <code class="inline-code">myMap.myMethod()</code> in a template basically
+ translates to <code class="inline-code">((Method)
+ myMap.get("myMethod")).invoke(...)</code> in Java, thus you can't
+ call <code class="inline-code">myMethod</code>. If, however, you write
+ <code class="inline-code">myMap?api.myMethod()</code> instead, that means
+ <code class="inline-code">myMap.myMethod()</code> in Java. Similarly,
+ <code class="inline-code">myMap?api.myProperty</code> translates to
+ <code class="inline-code">myMap.getMyProperty()</code> in Java, instead of to
+ <code class="inline-code">myMap.get("myProperty")</code>.</p>
+
+ <p><em>You should avoid using <code class="inline-code">api</code>, and
+ rely on the capabilities of the FTL types and the related built-ins
+ as far as possible.</em> For example, don't use
+ <code class="inline-code">users?api.size()</code>, but
+ <code class="inline-code">users?size</code>. The variation that uses
+ <code class="inline-code">?api</code> is more verbose, slower, more easily breaks
+ when FreeMarker configuration settings are changed, and most
+ importantly, more prone to break as the technical details of the
+ data-model change. For example, if <code class="inline-code">users</code> is
+ changed from a <code class="inline-code">List</code> to an array,
+ <code class="inline-code">users?size</code> will keep working, while
+ <code class="inline-code">users?api.size()</code> will break.</p>
+
+ <p>Avoid calling methods that <em>modify</em> an
+ object (especially <code class="inline-code">Map</code>-s and
+ <code class="inline-code">Collection</code>-s) or that aren't thread safe from
+ other reasons. Templates usually aren't expected to modify the
+ objects exposed to them, just to display them. Thus the application
+ may passes some objects to multiple (possibly concurrent) template
+ processings.</p>
+
+ <p>The <code class="inline-code">api</code> built-in is not everywhere
+ available, some requirements has to be met:</p>
+
+ <ul>
+ <li>
+ <p>The <code class="inline-code">api_builtin_enabled</code> configuration
+ setting must be set to <code class="inline-code">true</code>. Its default is
+ <code class="inline-code">false</code> (at least as of 2.3.22) for not
+ lowering the security of existing applications.</p>
+ </li>
+
+ <li>
+ <p>The value itself has to support it. We are talking about
+ the value as the template sees it, which is created from the
+ original object (that's coming from the data-model or from a
+ Java method return value) value via <a href="pgui_datamodel_objectWrapper.html">object wrapping</a>.
+ Hence, this depends on the <code class="inline-code">object_wrapper</code>
+ FreeMarker configuration setting, and on the class of the
+ wrapped (the original) object:</p>
+
+ <ul>
+ <li>
+ <p>When the object wrapper is a
+ <code class="inline-code">DefaultObjectWrapper</code> with its
+ <code class="inline-code">incompatibleImprovements</code> set to 2.3.22 or
+ higher (<a href="pgui_datamodel_objectWrapper.html#topic.defaultObjectWrapperIcI">see
+ how to set it here</a>), FTL values made from
+ <code class="inline-code">Map</code>-s and <code class="inline-code">List</code>-s
+ support <code class="inline-code">?api</code>. (Actually, what matters is
+ that its <code class="inline-code">useAdaptersForContainer</code> property
+ is set to <code class="inline-code">true</code>, but that's the default
+ with said <code class="inline-code">incompatibleImprovements</code>.)
+ Other <code class="inline-code">java.util.Collections</code> (such as
+ <code class="inline-code">Set</code>-s) only support
+ <code class="inline-code">?api</code> if
+ <code class="inline-code">DefaultObjectWrapper</code>'s
+ <code class="inline-code">forceLegacyNonListCollections</code> property is
+ set to <code class="inline-code">false</code> (the default is
+ <code class="inline-code">true</code> for better out-of-the-box backward
+ compatibility).</p>
+ </li>
+
+ <li>
+ <p>When wrapped with pure
+ <code class="inline-code">BeansWrapper</code>, all values support
+ <code class="inline-code">?api</code>.</p>
+ </li>
+
+ <li>
+ <p>Custom <code class="inline-code">TemplateModel</code>-s can support
+ <code class="inline-code">?api</code> by implementing the
+ <code class="inline-code">freemarker.template.TemplateModelWithAPISupport</code>
+ interface.</p>
+ </li>
+ </ul>
+ </li>
+ </ul>
+
+ <p>Using <code class="inline-code">?api</code> when it's not allowed in the
+ configuration or when the value doesn't support it will abort
+ template processing with error.</p>
+
+ <p>Whether a value supports <code class="inline-code">?api</code> can be
+ checked like
+ <code class="inline-code"><em class="code-color">value</em>?has_api</code>, which
+ returns a boolean value. Note that the result of
+ <code class="inline-code">?has_api</code> isn't influenced by the
+ <code class="inline-code">api_builtin_enabled</code> setting.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_numType">byte, double, float, int, long, short</h2>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <p>Returns a <code class="inline-code">SimpleNumber</code> which contains the
+ same value as the original variable, but uses
+ <code class="inline-code">java.lang.<em class="code-color">Type</em></code> for the
+ internal representation of the value. This is useful if a method is
+ overloaded, or if a <code class="inline-code">TemplateModel</code> unwrapper has
+ problem with automatically choosing the suitable
+ <code class="inline-code">java.lang.*</code> type. Note that since version 2.3.9
+ the unwrapper has been improved substantially, so you will hardly
+ ever need to use these built-ins to convert between numerical types,
+ except for resolving ambiguity in overloaded method
+ invocation.</p>
+
+ <p>The <code class="inline-code">long</code> built-in can also be used with
+ date, time and date-time values to get the value as
+ <code class="inline-code">java.util.Date.getTime()</code> would return. This is
+ useful if you have to call a Java methods that expect a timestamp as
+ a <code class="inline-code">long</code>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_eval">eval</h2>
+
+
+
+
+
+
+ <p>This built-in evaluates a string as an FTL expression. For
+ example <code class="inline-code">"1+2"?eval</code> returns number 3.</p>
+
+ <p>The evaluated expression sees the same variables (such as
+ locals) that are visible at the place of the invocation of
+ <code class="inline-code">eval</code>. That is, it behaves similarly as if in
+ place of <code class="inline-code"><em class="code-color">s</em>?eval</code> you
+ had the <em>value of</em>
+ <code class="inline-code"><em class="code-color">s</em></code> there. Except, it
+ can't use <a href="ref_builtins_loop_var.html">loop variable
+ built-ins</a> that refer to a loop variable that was created
+ outside <code class="inline-code"><em class="code-color">s</em></code>.</p>
+
+ <p>Regarding the configuration settings that affect the parsing
+ (like syntax) and evaluation the rules are the same as with the
+ <a href="#ref_builtin_interpret"><code>interpret</code>
+ built-in</a>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_has_content">has_content</h2>
+
+
+
+
+ <p>It is <code class="inline-code">true</code> if the variable exists (and
+ isn't Java <code class="inline-code">null</code>) and is not "empty",
+ otherwise it is <code class="inline-code">false</code>. The meaning of
+ "empty" depends on the concrete case. This follows
+ intuitive common-sense ideas. The following are empty: a string with
+ 0 length, a <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_movalues">markup
+ output value</a> with 0 length markup, a sequence or hash with no
+ sub variables, a collection which has passed the last element. If
+ the value is not of any of these types, then it counts as non-empty
+ if it's a number or a date or a boolean (e.g. <code class="inline-code">0</code>
+ and <code class="inline-code">false</code> are not empty), otherwise it counts as
+ empty. Note that when your data-model implements multiple template
+ model interfaces you may get unexpected results. However, when in
+ doubt you can use always use <code class="inline-code">expr!?size > 0</code> or
+ <code class="inline-code">expr!?length > 0</code> instead of
+ <code class="inline-code">expr?has_content</code>.</p>
+
+ <p>This buit-in is exceptional in that you can use the
+ parentheses trick like with the <a href="dgui_template_exp.html#dgui_template_exp_missing_default">default value
+ operator</a>. That is, you can write both
+ <code class="inline-code">product.color?has_content</code> and
+ <code class="inline-code">(product.color)?has_content</code>. The first doesn't
+ handle the case when <code class="inline-code">product</code> is missing, the last
+ does.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_interpret">interpret</h2>
+
+
+
+
+ <p>This built-in parses a string as an FTL template, and returns
+ an user-defined directive that executes that template, just as if a
+ template with that content were <a href="ref_directive_include.html"><code>include</code>-d</a>
+ at that point. Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign x=["a", "b", "c"]>
+<#assign templateSource = r"<#list x as y>${y}</#list>">
+<#-- Note: That r was needed so that the ${y} is not interpreted above -->
+<#assign inlineTemplate = templateSource?interpret>
+<@inlineTemplate /></pre></div>
+
+ <p>The output:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">abc</pre></div>
+
+ <p>As you can see, <code class="inline-code">inlineTemplate</code> is a
+ user-defined directive that, when executed, runs the template whose
+ content is the value of <code class="inline-code">templateSource</code>.</p>
+
+ <p>The name of the template created by
+ <code class="inline-code">interpret</code> is the name of the template that calls
+ <code class="inline-code">interpret</code>, plus
+ <code class="inline-code">"->anonymous_interpreted"</code>. For example, if the
+ template that calls the built-in is
+ <code class="inline-code">"foo/bar.ftl"</code>, then the name of the resulting
+ template is
+ <code class="inline-code">"foo/bar.ftl->anonymous_interpreted"</code>. Thus,
+ relative paths inside the interpreted template are relative to this
+ path (i.e., the base directory will be <code class="inline-code">"foo"</code>),
+ and errors inside the interpreted template will point to this
+ generated template name.</p>
+
+ <p>For more helpful error messages, you can override the template
+ name part after the <code class="inline-code">"->"</code>. For example, let's
+ say <code class="inline-code">mailTemplateSource</code> comes from the
+ <code class="inline-code">mail_template</code> database table, and in the case of
+ error, you want the error log to contain the database ID of the
+ failing template:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign inlineTemplate = [mailTemplateSource, "mail_templates id=${mailTemplateId}"]?interpret></pre></div>
+
+ <p>As you can see, <code class="inline-code">interpret</code> can be applied on
+ a sequence of two items, in which case the first item is the FTL
+ string to interpret, and the second items is the template name used
+ after the <code class="inline-code">"->"</code>.</p>
+
+ <p>The configuration settings that affect the interpreted
+ template are the same as of the surrounding template, except that
+ parser settings specified in the <a href="ref_directive_ftl.html#ref.directive.ftl"><code>ftl</code> directive</a>
+ or was established via tag syntax or naming convention
+ auto-detection are instead coming from the
+ <code class="inline-code">Configuration</code> object (or naturally, from the
+ <a href="pgui_config_templateconfigurations.html"><code>TemplateConfiguration</code></a>,
+ if there's any). Thus the tag syntax, naming convention, whitespace
+ handling, etc. of the interpreted template is independent of that
+ established <em>inside</em> the surrounding template. An
+ important exception from this rule is that the <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_outputformat">output format</a>
+ and auto-escaping policy is inherited from the lexical context where
+ <code class="inline-code">interpret</code> is called from. For example in a
+ template that has <code class="inline-code"><#ftl
+ output_format="XML"></code> header (or if you are inside a
+ <code class="inline-code"><#output_format
+ "XML"><em class="code-color">...</em></#output_format></code>
+ block), <code class="inline-code">interpret</code> calls in it will produce
+ directives with XML output format.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_isType">is_...</h2>
+
+
+
+
+
+
+ <p>These built-ins check the type of a variable, and returns
+ <code class="inline-code">true</code> or <code class="inline-code">false</code> depending on the
+ type. The list of
+ <code class="inline-code">is_<em class="code-color">...</em></code>
+ built-ins:</p>
+
+ <div class="table-responsive">
+ <table class="table">
+
+ <thead>
+ <tr>
+ <th>Built-in</th>
+
+
+ <th>Returns <code class="inline-code">true</code> if the value is a ...</th>
+
+ </tr>
+
+ </thead>
+
+
+ <tbody>
+ <tr>
+ <td><code class="inline-code">is_string</code></td>
+
+
+ <td>string</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">is_number</code></td>
+
+
+ <td>number</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">is_boolean</code></td>
+
+
+ <td>boolean</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">is_date</code></td>
+
+
+ <td>Don't use it! Same as <code class="inline-code">is_date_like</code>, use
+ that instead. Later may changes meaning to
+ <code class="inline-code">date_only</code>.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">is_date_like</code></td>
+
+
+ <td>date-like, means either date, time or date-time, or
+ date-like with unknown precise type (since FreeMarker
+ 2.3.21)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">is_date_only</code></td>
+
+
+ <td>date (no time of the day part) (since FreeMarker
+ 2.3.21)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">is_time</code></td>
+
+
+ <td>time (no year-month-day part) (since FreeMarker
+ 2.3.21)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">is_datetime</code></td>
+
+
+ <td>date-time (contains both year-month-day and time of the
+ day)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">is_unknown_date_like</code></td>
+
+
+ <td>date-like where we don't know if it's a date or a time or
+ a date-time</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">is_method</code></td>
+
+
+ <td>method</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">is_transform</code></td>
+
+
+ <td>transform</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">is_macro</code></td>
+
+
+ <td>macro or function (yes, also for function; a historical
+ glitch)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">is_hash</code></td>
+
+
+ <td>hash (including extended hash)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">is_hash_ex</code></td>
+
+
+ <td>extended hash (supports <code class="inline-code">?keys</code> and
+ <code class="inline-code">?values</code>)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">is_sequence</code></td>
+
+
+ <td>sequence (Historical quirk: Before <a href="pgui_config_incompatible_improvements.html#pgui_config_incompatible_improvements_how_to_set"><code>incompatible_improvements</code></a>
+ 2.3.24 it returns <code class="inline-code">true</code> for Java methods as
+ they implement the
+ <code class="inline-code">[<em class="code-color">index</em>]</code>
+ operator, however, they fail on
+ <code class="inline-code">?size</code>.)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">is_collection</code></td>
+
+
+ <td>collection (including extended collection)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">is_collection_ex</code></td>
+
+
+ <td>extended collection (supports
+ <code class="inline-code">?size</code>)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">is_enumerable</code></td>
+
+
+ <td>sequence or collection</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">is_indexable</code></td>
+
+
+ <td>sequence (Historical quirk: it returns
+ <code class="inline-code">true</code> for Java methods as they implement the
+ <code class="inline-code">[<em class="code-color">index</em>]</code>
+ operator.)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">is_directive</code></td>
+
+
+ <td>Whatever kind of directive (for example a macro, <span class="marked-for-programmers">or
+ <code class="inline-code">TemplateDirectiveModel</code>,
+ <code class="inline-code">TemplateTransformModel</code>, etc.</span>), or
+ function (a historical glitch)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">is_node</code></td>
+
+
+ <td>node</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">is_markup_output</code></td>
+
+
+ <td>markup output (a value that won't be <a href="dgui_misc_autoescaping.html">auto-escaped</a>)</td>
+
+ </tr>
+
+ </tbody>
+
+ </table>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_markup_string">markup_string</h2>
+
+
+ <p></p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.24.</p>
+ </div>
+
+
+ <p>Returns the markup stored inside a <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_movalues">markup output value</a>
+ as string. This is useful if the value has to be passed to a Java
+ method for a <code class="inline-code">String</code> parameter, or if we want to
+ manipulate the markup directly in the template. Note that the
+ resulting string can be converted back to markup output value with
+ <a href="ref_builtins_string.html#ref_builtin_no_esc"><code>?no_esc</code></a>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_namespace">namespace</h2>
+
+
+
+
+ <p>This built-in returns the namespace (i.e. the
+ "gate" hash to the namespace) associated with a macro
+ or function variable. You can use it with macros and functions
+ only.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_new">new</h2>
+
+
+
+
+
+
+ <p>This is to create a variable of a certain
+ <code class="inline-code">TemplateModel</code> implementation.</p>
+
+ <p>On the left side of <code class="inline-code">?</code> you specify a string,
+ the full-qualified class name of a <code class="inline-code">TemplateModel</code>
+ implementation. The result is a method variable that calls the
+ constructor, and returns the new variable.</p>
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#-- Creates an user-defined directive be calling the parameterless constructor of the class -->
+<#assign word_wrapp = "com.acmee.freemarker.WordWrapperDirective"?new()>
+<#-- Creates an user-defined directive be calling the constructor with one numerical argument -->
+<#assign word_wrapp_narrow = "com.acmee.freemarker.WordWrapperDirective"?new(40)></pre></div>
+
+ <p>For more information about how the constructor parameters are
+ unwrapped and how overloaded constructor is chosen, read: <a href="pgui_misc_beanwrapper.html">Programmer's Guide/Miscellaneous/Bean wrapper</a></p>
+
+ <p>This built-in can be a security concern because the template
+ author can create arbitrary Java objects and then use them, as far
+ as they implement <code class="inline-code">TemplateModel</code>. Also the
+ template author can trigger static initialization for classes that
+ don't even implement <code class="inline-code">TemplateModel</code>. You can
+ (since 2.3.17) restrict the classes accessible with this built-in
+ using
+ <code class="inline-code">Configuration.setNewBuiltinClassResolver(TemplateClassResolver)</code>
+ or the <code class="inline-code">new_builtin_class_resolver</code> setting. See
+ the Java API docs for more information. If you are allowing
+ not-so-much-trusted users to upload templates then you should
+ definitely look into this topic.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_numToDate">number_to_date, number_to_time, number_to_datetime</h2>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <p>These are used to convert a number (usually a Java
+ <code class="inline-code">long</code>) to a date, time or date-time, respectively.
+ This does them same as <code class="inline-code">new java.util.Date(long)</code>
+ in Java, that is, the number is interpreted as the milliseconds
+ passed since the epoch. The number can be anything and of any type
+ as far as its value fits into a <code class="inline-code">long</code>. If the
+ number isn't a whole number, it will be rounded to whole with
+ half-up rule.</p>
+
+ <p>Example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${1305575275540?number_to_datetime}
+${1305575275540?number_to_date}
+${1305575275540?number_to_time}</pre></div>
+
+ <p>The output will be something like this (depending on the
+ current locale and time zone):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">May 16, 2011 3:47:55 PM
+May 16, 2011
+3:47:55 PM</pre></div>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_builtins_type_independent.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directives.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_builtins_hash.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_builtins_hash.html b/builds/2.3.26-nightly/ref_builtins_hash.html
new file mode 100644
index 0000000..07e1ad3
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_builtins_hash.html
@@ -0,0 +1,142 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Built-ins for hashes - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Built-ins for hashes">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_builtins_hash.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_builtins_hash.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins.html"><span itemprop="name">Built-in Reference</span></a></li><li class="step-3"
itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins_hash.html"><span itemprop="name">Built-ins for hashes</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Built-in Reference","Built-ins for hashes"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_builtins_sequence.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins_node.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_builtins_hash" itemprop="headline">Built-ins for hashes</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#ref_builtin_keys" data-menu-target="ref_builtin_keys">keys</a></li><li><a class="page-menu-link" href="#ref_builtin_values" data-menu-target="ref_builtin_values">values</a></li></ul> </div>
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_keys">keys</h2>
+
+
+
+
+ <p>A sequence that contains all the lookup keys in the
+ hash.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign myHash = { "name": "mouse", "price": 50 }>
+<#list myHash?keys as k>
+ ${k}
+</#list></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> name
+ price</pre></div>
+
+ <p>Note that not all hashes support this (ask the programmer if a
+ certain hash allows this or not).</p>
+
+ <p>Since hashes do not define an order for their sub variables in
+ general, the order in which key names are returned can be arbitrary.
+ However, some hashes maintain a meaningful order (ask the programmer
+ if a certain hash does that or not). For example, hashes created
+ with the above <code class="inline-code">{<em class="code-color">...</em>}</code>
+ syntax preserve the same order as you have specified the sub
+ variables.</p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>To list both the keys and the values, you can use
+ <code class="inline-code"><#list attrs as key,
+ value>...<#list></code>; see the <a href="ref_directive_list.html#ref.directive.list"><code>list</code>
+ directive</a>.</p>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_values">values</h2>
+
+
+
+
+ <p>A sequence that contains all the variables (the values in the
+ key-value pairs) in the hash.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign myHash = { "name": "mouse", "price": 50 }>
+<#list myHash?values as v>
+ ${v}
+</#list></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> mouse
+ 50</pre></div>
+
+ <p>Note that not all hashes support this (ask the programmer if a
+ certain hash allows this or not).</p>
+
+ <p>As of the order in which the values are returned, the same
+ applies as with the <code class="inline-code">keys</code> built-in; see there.
+ Furthermore, it's not guaranteed that the order of the values
+ corresponds to the order of the keys returned by the
+ <code class="inline-code">keys</code> build-in.</p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>To list both the keys and the values, you can use
+ <code class="inline-code"><#list attrs as key,
+ value>...<#list></code>; see the <a href="ref_directive_list.html#ref.directive.list"><code>list</code>
+ directive</a>.</p>
+ </div>
+
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_builtins_sequence.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins_node.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/ref_builtins_loop_var.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/ref_builtins_loop_var.html b/builds/2.3.26-nightly/ref_builtins_loop_var.html
new file mode 100644
index 0000000..6511bf8
--- /dev/null
+++ b/builds/2.3.26-nightly/ref_builtins_loop_var.html
@@ -0,0 +1,526 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Loop variable built-ins - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Loop variable built-ins">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/ref_builtins_loop_var.html">
+<link rel="canonical" href="http://freemarker.org/docs/ref_builtins_loop_var.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins.html"><span itemprop="name">Built-in Reference</span></a></li><li class="step-3"
itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_builtins_loop_var.html"><span itemprop="name">Loop variable built-ins</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Built-in Reference","Loop variable built-ins"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_builtins_node.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins_type_independent.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="ref_builtins_loop_var" itemprop="headline">Loop variable built-ins</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#ref_builtin_counter" data-menu-target="ref_builtin_counter">counter</a></li><li><a class="page-menu-link" href="#ref_builtin_has_next" data-menu-target="ref_builtin_has_next">has_next</a></li><li><a class="page-menu-link" href="#ref_builtin_index" data-menu-target="ref_builtin_index">index</a></li><li><a class="page-menu-link" href="#ref_builtin_is_even_item" data-menu-target="ref_builtin_is_even_item">is_even_item</a></li><li><a class="page-menu-link" href="#ref_builtin_is_first" data-menu-target="ref_builtin_is_first">is_first</a></li><li><a class="page-menu-link" href="#ref_builtin_is_last" data-menu-target="ref_builtin_is_last">is_last</a></li><li><a class="page-menu-link" href="#ref_builtin_is_odd_item" data-menu-target="ref_builtin_is_odd_item">is_odd_item</a></li><li><a class="page-menu-link" href="#ref_builtin_item_cycle" data-menu-target="ref_builtin_item_cycle">item_cycle</a></li><li><a class="page-menu-link" href="#ref_builtin_item
_parity" data-menu-target="ref_builtin_item_parity">item_parity</a></li><li><a class="page-menu-link" href="#ref_builtin_item_parity_cap" data-menu-target="ref_builtin_item_parity_cap">item_parity_cap</a></li></ul> </div> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>Loop variable built-ins only exists since FreeMarker
+ 2.3.23.</p>
+ </div>
+<p>These built-ins you can only use with the loop variable of the
+ <a href="ref_directive_list.html"><code>list</code> and
+ <code>items</code> directives</a> (and of the deprecated
+ <code class="inline-code">foreach</code> directive). Some explanation of that
+ follows (<code class="inline-code"><em class="code-color">loopVar</em>?index</code>
+ returns the 0-based index in the listable value we iterate
+ through):</p>
+
+<div class="code-wrapper"><pre class="code-block code-template"><#-- Note: x is a loop variable -->
+<#list ['a', 'b', 'c'] as x>
+ ${x?index}
+</#list></pre></div>
+
+<div class="code-wrapper"><pre class="code-block code-output">0
+1
+2</pre></div><p>When the <code class="inline-code">list</code> directive doesn't specify the
+ loop variable, these built-ins are used with the loop variable of the
+ <code class="inline-code">items</code> directive:</p>
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list ['a', 'b', 'c']>
+ <ul>
+ <#items as x>
+ <li>${x?index}</li>
+ </#items>
+ </ul>
+</#list></pre></div><p>Loop variable built-ins only use the <em>name</em>
+ of loop variable, so that they can identify the related ongoing
+ iteration. They don't read the <em>value</em> of the loop
+ variable. Hence, this is a parsing error:</p>
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list ['a', 'b', 'c'] as x>
+ <#assign y = x>
+ ${y?index} <#-- ERROR: y isn't a loop variable -->
+</#list></pre></div>
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_counter">counter</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.23.</p>
+ </div>
+
+
+ <p>Returns the 1-based index where the iteration (which is
+ identified by the loop variable name) currently stands.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list ['a', 'b', 'c'] as i>
+ ${i?counter}: ${i}
+</#list></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> 1: a
+ 2: b
+ 3: c</pre></div>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>For the 0-based index, use the <a href="#ref_builtin_index"><code>index</code>
+ built-in</a>.</p>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_has_next">has_next</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.23.</p>
+ </div>
+
+
+ <p>Tells if the item where the iteration (which is identified by
+ the loop variable name) currently stands is not the last
+ item.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list ['a', 'b', 'c'] as i>${i?has_next?c} </#list></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">true true false </pre></div>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>For separating items with commas and such, use
+ <code class="inline-code"><#sep><em class="code-color">separator</em></#sep></code>
+ instead of <code class="inline-code"><#if
+ <em class="code-color">var</em>?has_next><em class="code-color">separator</em></#if></code>,
+ as it's more readable. (Furthermore the
+ <code class="inline-code"></#sep></code> can be often omitted, like in
+ <code class="inline-code"><#list <em class="code-color">...</em> as
+ <em class="code-color">var</em>><em class="code-color">...</em>${<em class="code-color">var</em>}<em class="code-color">...</em><#sep><em class="code-color">separator</em></#list></code>)</p>
+ </div>
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>If you need the inverse of this built-in, use
+ <code class="inline-code"><em class="code-color">var</em>?is_last</code> instead
+ of <code class="inline-code">!<em class="code-color">var</em>?has_next</code>,
+ because it's more readable.</p>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_index">index</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.23.</p>
+ </div>
+
+
+ <p>Returns the 0-based index where the iteration (which is
+ identified by the loop variable name) currently stands.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list ['a', 'b', 'c'] as i>
+ ${i?index}: ${i}
+</#list></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> 0: a
+ 1: b
+ 2: c</pre></div>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>For the 1-based index, use the <a href="#ref_builtin_counter"><code>counter</code>
+ built-in</a>.</p>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_is_even_item">is_even_item</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.23.</p>
+ </div>
+
+
+ <p>Tells if the item where the iteration (which is identified by
+ the loop variable name) currently stands has an even 1-based
+ index.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list ['a', 'b', 'c', 'd'] as i>${i?is_even_item?c} </#list></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">false true false true</pre></div>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>To make tables with alternating row colors and such, use
+ <a href="#ref_builtin_item_parity"><code><em>var</em>?item_parity</code></a>
+ or <a href="#ref_builtin_item_cycle"><code><em>var</em>?item_cycle(...)</code></a>
+ instead.</p>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_is_first">is_first</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.23.</p>
+ </div>
+
+
+ <p>Tells if the item where the iteration (which is identified by
+ the loop variable name) currently stands is the first item.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list ['a', 'b', 'c'] as i>${i?is_first?c} </#list></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">true false false </pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_is_last">is_last</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.23.</p>
+ </div>
+
+
+ <p>Tells if the item where the iteration (which is identified by
+ the loop variable name) currently stands is the last item.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list ['a', 'b', 'c'] as i>${i?is_last?c} </#list></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">false false true</pre></div>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>If you need the inverse of this built-in, use
+ <code class="inline-code"><em class="code-color">var</em>?has_next</code> instead
+ of <code class="inline-code">!<em class="code-color">var</em>?is_last</code>,
+ because it's more readable.</p>
+ </div>
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>For separating items with commas and such, use
+ <code class="inline-code"><#sep><em class="code-color">separator</em></#sep></code>
+ instead of <code class="inline-code"><#if
+ <em class="code-color">var</em>?has_next><em class="code-color">separator</em></#if></code>,
+ as it's more readable. (Furthermore the
+ <code class="inline-code"></#sep></code> can be often omitted, like in
+ <code class="inline-code"><#list <em class="code-color">...</em> as
+ <em class="code-color">var</em>><em class="code-color">...</em>${<em class="code-color">var</em>}<em class="code-color">...</em><#sep><em class="code-color">separator</em></#list></code>)</p>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_is_odd_item">is_odd_item</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.23.</p>
+ </div>
+
+
+ <p>Tells if the item where the iteration (which is identified by
+ the loop variable name) currently stands has an odd 1-based
+ index.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list ['a', 'b', 'c', 'd'] as i>${i?is_odd_item?c} </#list></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output">true false true false </pre></div>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>To make tables with alternating row colors and such, use
+ <a href="#ref_builtin_item_parity"><code><em>var</em>?item_parity</code></a>
+ or <a href="#ref_builtin_item_cycle"><code><em>var</em>?item_cycle(...)</code></a>
+ instead.</p>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_item_cycle">item_cycle</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.23.</p>
+ </div>
+
+
+ <p>This is a more generic version of the <a href="#ref_builtin_item_parity"><code>item_parity</code>
+ built-in</a>, where you can specify what value to use instead of
+ <code class="inline-code">"odd"</code> and <code class="inline-code">"even"</code>. It also
+ allows more than 2 values that it will cycle through.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list ['a', 'b', 'c', 'd', 'e', 'f', 'g'] as i>
+ <tr class="${i?item_cycle('row1', 'row2', 'row3')}">${i}</tr>
+</#list></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> <tr class="row1">a</tr>
+ <tr class="row2">b</tr>
+ <tr class="row3">c</tr>
+ <tr class="row1">d</tr>
+ <tr class="row2">e</tr>
+ <tr class="row3">f</tr>
+ <tr class="row1">g</tr></pre></div>
+
+ <p>Some details:</p>
+
+ <ul>
+ <li>
+ <p>The number of arguments must be at least 1, and has no
+ upper limit.</p>
+ </li>
+
+ <li>
+ <p>The type of the arguments can be anything, they doesn't
+ have to be strings.</p>
+ </li>
+ </ul>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>Use the <a href="#ref_builtin_item_parity"><code>item_parity</code>
+ built-in</a> instead if the values you need are
+ <code class="inline-code">"odd"</code> and <code class="inline-code">"even"</code>.</p>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_item_parity">item_parity</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.23.</p>
+ </div>
+
+
+ <p>Returns <code class="inline-code">"odd"</code> or <code class="inline-code">"even"</code>
+ string value, depending on the parity of the 1-based index where the
+ iteration (which is identified by the loop variable name) currently
+ stands. This is commonly used for alternating color for table
+ rows:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list ['a', 'b', 'c', 'd'] as i>
+ <tr class="${i?item_parity}Row">${i}</tr>
+</#list></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> <tr class="oddRow">a</tr>
+ <tr class="evenRow">b</tr>
+ <tr class="oddRow">c</tr>
+ <tr class="evenRow">d</tr></pre></div>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>Use the <a href="#ref_builtin_item_parity"><code>item_parity_cap</code>
+ built-in</a> for capitalized <code class="inline-code">"Odd"</code> and
+ <code class="inline-code">"Even"</code>. Use the <a href="#ref_builtin_item_cycle"><code>item_cycle</code>
+ built-in</a> to specify custom values, or more then two
+ values.</p>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="ref_builtin_item_parity_cap">item_parity_cap</h2>
+
+
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>This built-in is available since FreeMarker 2.3.23.</p>
+ </div>
+
+
+ <p>Returns <code class="inline-code">"Odd"</code> or <code class="inline-code">"Even"</code>
+ string value (note the capitalization), depending on the parity of
+ the 1-based index where the iteration (which is identified by the
+ loop variable name) currently stands.</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#list ['a', 'b', 'c', 'd'] as i>
+ <tr class="row${i?item_parity_cap}">${i}</tr>
+</#list></pre></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-output"> <tr class="rowOdd">a</tr>
+ <tr class="rowEven">b</tr>
+ <tr class="rowOdd">c</tr>
+ <tr class="rowEven">d</tr></pre></div>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>Use the <a href="#ref_builtin_item_parity"><code>item_parity</code>
+ built-in</a> for lower case <code class="inline-code">"odd"</code> and
+ <code class="inline-code">"even"</code>.</p>
+ </div>
+
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_builtins_node.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_builtins_type_independent.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[49/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/alphaidx.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/alphaidx.html b/builds/2.3.26-nightly/alphaidx.html
new file mode 100644
index 0000000..cd5df16
--- /dev/null
+++ b/builds/2.3.26-nightly/alphaidx.html
@@ -0,0 +1,1695 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-index">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Alphabetical Index - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Alphabetical Index">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/alphaidx.html">
+<link rel="canonical" href="http://freemarker.org/docs/alphaidx.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="alphaidx.html"><span itemprop="name">Alphabetical Index</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li>Alpha. index</li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expre
ssions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Alphabetical Index"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="gloss.html"><span>Previous</span></a><span class="paging-arrow disabled next"><span>Next</span></span></div><div class="title-wrapper">
+<h1 class="content-header header-part" id="alphaidx" itemprop="headline">Alphabetical Index</h1>
+</div></div>
+ <p>
+<a href="#idx_x24">$</a> | <a href="#idx_x23">#</a> | <a href="#idx_x3C"><</a> | <a href="#idx_A">A</a> | <a href="#idx_B">B</a> | <a href="#idx_C">C</a> | <a href="#idx_D">D</a> | <a href="#idx_E">E</a> | <a href="#idx_F">F</a> | <a href="#idx_G">G</a> | <a href="#idx_H">H</a> | <a href="#idx_I">I</a> | <a href="#idx_J">J</a> | <a href="#idx_K">K</a> | <a href="#idx_L">L</a> | <a href="#idx_M">M</a> | <a href="#idx_N">N</a> | <a href="#idx_O">O</a> | <a href="#idx_P">P</a> | <a href="#idx_R">R</a> | <a href="#idx_S">S</a> | <a href="#idx_T">T</a> | <a href="#idx_U">U</a> | <a href="#idx_V">V</a> | <a href="#idx_W">W</a> | <a href="#idx_X">X</a> </p>
+
+<div class="indexdiv">
+<a name="idx_x24"></a>
+<h2 class="indexLabel">$</h2>
+<dl>
+ <dt>
+ ${...}, <a href="dgui_template_valueinsertion.html">Interpolations</a>
+ </dt>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_x23"></a>
+<h2 class="indexLabel">#</h2>
+<dl>
+ <dt>
+ #, <a href="dgui_template_overallstructure.html">Overall structure</a>,
+<a href="dgui_template_directives.html">Directives</a>
+ </dt>
+ <dt>
+ #{...}, <a href="ref_depr_numerical_interpolation.html">#{...}: Numerical interpolation</a>
+ </dt>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_x3C"></a>
+<h2 class="indexLabel"><</h2>
+<dl>
+ <dt>
+ <#...>, <a href="dgui_template_directives.html">Directives</a>
+ </dt>
+ <dt>
+ <#--...-->, <a href="dgui_template_overallstructure.html">Overall structure</a>
+ </dt>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_A"></a>
+<h2 class="indexLabel">A</h2>
+<dl>
+ <dt>
+ ABC, <a href="ref_builtins_number.html#ref_builtin_lower_abc">lower_abc</a>,
+<a href="ref_builtins_number.html#ref_builtin_upper_abc">upper_abc</a>
+ </dt>
+ <dt>
+ abs built-in, <a href="ref_builtins_number.html#ref_builtin_abs">abs</a>
+ </dt>
+ <dt>
+ absolute value, <a href="ref_builtins_number.html#ref_builtin_abs">abs</a>
+ </dt>
+ <dt>
+ acquisition, <a href="ref_directive_include.html#ref_directive_include_acquisition">Using acquisition</a>
+ </dt>
+ <dt>
+ adding hashes, <a href="dgui_template_exp.html#dgui_template_exp_hashop_cat">Concatenation</a>
+ </dt>
+ <dt>
+ adding sequences, <a href="dgui_template_exp.html#dgui_template_exp_sequenceop_cat">Concatenation</a>
+ </dt>
+ <dt>
+ adding strings, <a href="dgui_template_exp.html#dgui_template_exp_stringop_interpolation">Interpolation and concatenation</a>
+ </dt>
+ <dt>
+ addition, <a href="dgui_template_exp.html#dgui_template_exp_arit">Arithmetical calculations</a>
+ </dt>
+ <dt>
+ alphabetical ordinals, <a href="ref_builtins_number.html#ref_builtin_lower_abc">lower_abc</a>,
+<a href="ref_builtins_number.html#ref_builtin_upper_abc">upper_abc</a>
+ </dt>
+ <dt>
+ alternative syntax, <a href="dgui_misc_alternativesyntax.html">Alternative (square bracket) syntax</a>
+ </dt>
+ <dt>
+ ancestors built-in, <a href="ref_builtins_node.html#ref_builtin_ancestors">ancestors</a>
+ </dt>
+ <dt>
+ and, <a href="dgui_template_exp.html#dgui_template_exp_logicalop">Logical operations</a>
+ </dt>
+ <dt>
+ ant task, <a href="pgui_misc_ant.html">Using FreeMarker with Ant</a>
+ </dt>
+ <dt>
+ api built-in, <a href="ref_builtins_expert.html#ref_buitin_api_and_has_api">api, has_api</a>
+ </dt>
+ <dt>
+ arithmetic, <a href="dgui_template_exp.html#dgui_template_exp_arit">Arithmetical calculations</a>
+ </dt>
+ <dt>
+ assign directive, <a href="ref_directive_assign.html">assign</a>
+ </dt>
+ <dt>
+ attempt directive, <a href="ref_directive_attempt.html">attempt, recover</a>
+ </dt>
+ <dt>
+ auto_esc, <a href="ref_specvar.html">Special Variable Reference</a>
+ </dt>
+ <dt>
+ auto-escaping, <a href="dgui_misc_autoescaping.html">Auto-escaping and output formats</a>,
+<a href="pgui_config_outputformatsautoesc.html">Associating output formats with templates</a>,
+<a href="ref_directive_autoesc.html">autoesc</a>,
+<a href="ref_directive_noautoesc.html">noautoesc</a>,
+<a href="ref_directive_outputformat.html">outputformat</a>
+ </dt>
+ <dt>
+ autoesc directive, <a href="ref_directive_autoesc.html">autoesc</a>
+ </dt>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_B"></a>
+<h2 class="indexLabel">B</h2>
+<dl>
+ <dt>
+ backward compatibility, <a href="pgui_config_incompatible_improvements.html">The "incompatible improvements" setting</a>
+ </dt>
+ <dt>
+ beans </dt>
+ <dd><dl>
+ <dt>wrapping, <a href="pgui_misc_beanwrapper.html">Bean wrapper</a></dt>
+ </dl></dd>
+ <dt>
+ BeansWrapper, <a href="pgui_misc_beanwrapper.html">Bean wrapper</a>
+ </dt>
+ <dt>
+ boolean </dt>
+ <dd><dl>
+ <dt>built-ins, <a href="ref_builtins_boolean.html">Built-ins for booleans</a></dt>
+ <dt>Java side, <a href="pgui_datamodel_scalar.html">Scalars</a></dt>
+ <dt>literal, <a href="dgui_template_exp.html#dgui_template_exp_direct_boolean">Booleans</a></dt>
+ <dt>operations, <a href="dgui_template_exp.html#dgui_template_exp_logicalop">Logical operations</a></dt>
+ <dt>printing, <a href="ref_builtins_boolean.html#ref_builtin_string_for_boolean">string (when used with a boolean value)</a></dt>
+ <dt>the FTL value type, <a href="dgui_datamodel_types.html#dgui_datamodel_scalar">Scalars</a></dt>
+ </dl></dd>
+ <dt>
+ boolean_format, <a href="ref_directive_setting.html#autoid_125">setting</a>
+ </dt>
+ <dt>
+ boolean built-in, <a href="ref_builtins_string.html#ref_builtin_boolean">boolean</a>
+ </dt>
+ <dt>
+ break directive, <a href="ref_directive_list.html#autoid_106">list, else, items, sep, break</a>,
+<a href="ref_directive_switch.html">switch, case, default, break</a>
+ </dt>
+ <dt>
+ built-in, <a href="dgui_template_exp.html#dgui_template_exp_builtin">Built-ins</a>,
+<a href="ref_builtins.html">Built-in Reference</a>,
+<a href="ref_builtins_alphaidx.html">Alphabetical index</a>
+ </dt>
+ <dt>
+ byte built-in, <a href="ref_builtins_expert.html#ref_builtin_numType">byte, double, float, int, long, short</a>
+ </dt>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_C"></a>
+<h2 class="indexLabel">C</h2>
+<dl>
+ <dt>
+ caching, <a href="pgui_config_templateloading.html#pgui_config_templateloading_caching">Template caching</a>
+ </dt>
+ <dt>
+ call a method, <a href="dgui_template_exp.html#dgui_template_exp_methodcall">Method call</a>
+ </dt>
+ <dt>
+ cap_first built-in, <a href="ref_builtins_string.html#ref_builtin_cap_first">cap_first</a>
+ </dt>
+ <dt>
+ capitalize built-in, <a href="ref_builtins_string.html#ref_builtin_capitalize">capitalize</a>
+ </dt>
+ <dt>
+ case directive, <a href="ref_directive_switch.html">switch, case, default, break</a>
+ </dt>
+ <dt>
+ catch-all parameter, <a href="ref_directive_macro.html#autoid_112">macro, nested, return</a>
+ </dt>
+ <dt>
+ c built-in, <a href="ref_builtins_number.html#ref_builtin_c">c (when used with numerical value)</a>,
+<a href="ref_builtins_boolean.html#ref_builtin_c_boolean">c (when used with boolean)</a>
+ </dt>
+ <dt>
+ ceiling built-in, <a href="ref_builtins_number.html#ref_builtin_rounding">round, floor, ceiling</a>
+ </dt>
+ <dt>
+ charAt, <a href="dgui_template_exp.html#dgui_template_exp_get_character">Getting a character</a>
+ </dt>
+ <dt>
+ charset, <a href="pgui_misc_charset.html">Charset issues</a>,
+<a href="ref_directive_ftl.html">ftl</a>
+ </dt>
+ <dt>
+ children built-in, <a href="ref_builtins_node.html#ref_builtin_children">children</a>
+ </dt>
+ <dt>
+ chop_linebreak built-in, <a href="ref_builtins_string.html#ref_builtin_chop_linebreak">chop_linebreak</a>
+ </dt>
+ <dt>
+ chunk built-in, <a href="ref_builtins_sequence.html#ref_builtin_chunk">chunk</a>
+ </dt>
+ <dt>
+ classic_compatible, <a href="ref_directive_setting.html#autoid_125">setting</a>
+ </dt>
+ <dt>
+ collection </dt>
+ <dd><dl>
+ <dt>Java side, <a href="pgui_datamodel_parent.html#autoid_34">Containers</a></dt>
+ <dt>the FTL value type, <a href="dgui_datamodel_types.html#dgui_datamodel_container">Containers</a></dt>
+ </dl></dd>
+ <dt>
+ columnar printing of sequences, <a href="ref_builtins_sequence.html#ref_builtin_chunk">chunk</a>
+ </dt>
+ <dt>
+ command-line, <a href="pgui_misc_ant.html">Using FreeMarker with Ant</a>
+ </dt>
+ <dt>
+ comment, <a href="dgui_template_overallstructure.html">Overall structure</a>
+ </dt>
+ <dt>
+ comparison operators, <a href="dgui_template_exp.html#dgui_template_exp_comparison">Comparison</a>
+ </dt>
+ <dt>
+ compress directive, <a href="ref_directive_compress.html">compress</a>
+ </dt>
+ <dt>
+ concatenate hashes, <a href="dgui_template_exp.html#dgui_template_exp_hashop_cat">Concatenation</a>
+ </dt>
+ <dt>
+ concatenate sequences, <a href="dgui_template_exp.html#dgui_template_exp_sequenceop_cat">Concatenation</a>
+ </dt>
+ <dt>
+ concatenate strings, <a href="dgui_template_exp.html#dgui_template_exp_stringop_interpolation">Interpolation and concatenation</a>
+ </dt>
+ <dt>
+ configuration, <a href="pgui_quickstart_createconfiguration.html">Create a configuration instance</a>
+ </dt>
+ <dt>
+ Configuration, <a href="pgui_config.html">The Configuration</a>
+ </dt>
+ <dt>
+ constant, <a href="dgui_template_exp.html#dgui_template_exp_direct">Specify values directly</a>
+ </dt>
+ <dt>
+ containers </dt>
+ <dd><dl>
+ <dt>Java side, <a href="pgui_datamodel_parent.html">Containers</a></dt>
+ </dl></dd>
+ <dt>
+ contains built-in, <a href="ref_builtins_string.html#ref_builtin_contains">contains</a>
+ </dt>
+ <dt>
+ converting between types, <a href="ref_builtins_string.html#ref_builtin_boolean">boolean</a>,
+<a href="ref_builtins_string.html#ref_builtin_string_date">date, time, datetime</a>,
+<a href="ref_builtins_string.html#ref_builtin_number">number</a>,
+<a href="ref_builtins_number.html#ref_builtin_c">c (when used with numerical value)</a>,
+<a href="ref_builtins_number.html#ref_builtin_string_for_number">string (when used with a numerical value)</a>,
+<a href="ref_builtins_date.html#ref_builtin_date_datetype">date, time, datetime (when used with a date/time/date-time
+ value)</a>,
+<a href="ref_builtins_date.html#ref_builtin_string_for_date">string (when used with a date/time/date-time value)</a>,
+<a href="ref_builtins_boolean.html#ref_builtin_c_boolean">c (when used with boolean)</a>,
+<a href="ref_builtins_boolean.html#ref_builtin_string_for_boolean">string (when used with a boolean value)</a>,
+<a href="ref_builtins_expert.html#ref_builtin_numType">byte, double, float, int, long, short</a>,
+<a href="ref_builtins_expert.html#ref_builtin_numToDate">number_to_date, number_to_time, number_to_datetime</a>
+ </dt>
+ <dt>
+ converting date to long, <a href="ref_builtins_expert.html#ref_builtin_numType">byte, double, float, int, long, short</a>
+ </dt>
+ <dt>
+ converting date to string, <a href="ref_builtins_date.html#ref_builtin_string_for_date">string (when used with a date/time/date-time value)</a>
+ </dt>
+ <dt>
+ converting long to date, <a href="ref_builtins_expert.html#ref_builtin_numToDate">number_to_date, number_to_time, number_to_datetime</a>
+ </dt>
+ <dt>
+ converting string to boolean, <a href="ref_builtins_string.html#ref_builtin_boolean">boolean</a>
+ </dt>
+ <dt>
+ converting string to date, <a href="ref_builtins_string.html#ref_builtin_string_date">date, time, datetime</a>
+ </dt>
+ <dt>
+ converting string to number, <a href="ref_builtins_string.html#ref_builtin_number">number</a>
+ </dt>
+ <dt>
+ converting string to time, <a href="ref_builtins_string.html#ref_builtin_string_date">date, time, datetime</a>
+ </dt>
+ <dt>
+ converting time to string, <a href="ref_builtins_date.html#ref_builtin_string_for_date">string (when used with a date/time/date-time value)</a>
+ </dt>
+ <dt>
+ counter built-in, <a href="ref_builtins_loop_var.html#ref_builtin_counter">counter</a>
+ </dt>
+ <dt>
+ current_template_name, <a href="ref_specvar.html">Special Variable Reference</a>
+ </dt>
+ <dt>
+ current date-time, <a href="ref_specvar.html">Special Variable Reference</a>
+ </dt>
+ <dt>
+ custom directive, <a href="dgui_misc_userdefdir.html">Defining your own directives</a>
+ </dt>
+ <dt>
+ custom object wrapper, <a href="pgui_datamodel_objectWrapper.html#pgui_datamodel_customObjectWrappingExample">Custom object wrapping example</a>
+ </dt>
+ <dt>
+ custom tags, <a href="pgui_misc_servlet.html#autoid_63">Using FreeMarker with servlets</a>
+ </dt>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_D"></a>
+<h2 class="indexLabel">D</h2>
+<dl>
+ <dt>
+ data-model, <a href="dgui_quickstart_basics.html">Template + data-model = output</a>
+ </dt>
+ <dd><dl>
+ <dt>assembling with Java, <a href="pgui_quickstart_createdatamodel.html">Create a data-model</a></dt>
+ <dt>assembling with Java, without object wrapper, <a href="pgui_datamodel_basics.html">Basics</a></dt>
+ </dl></dd>
+ <dt>
+ date </dt>
+ <dd><dl>
+ <dt>built-ins, <a href="ref_builtins_date.html">Built-ins for date/time/date-time values</a></dt>
+ <dt>Java API related difficulties, <a href="pgui_datamodel_scalar.html#autoid_31">Scalars</a></dt>
+ <dt>Java side, <a href="pgui_datamodel_scalar.html">Scalars</a></dt>
+ <dt>the FTL value type, <a href="dgui_datamodel_types.html#dgui_datamodel_scalar">Scalars</a></dt>
+ </dl></dd>
+ <dt>
+ date_format, <a href="ref_directive_setting.html#topic_date_format_settings">setting</a>
+ </dt>
+ <dt>
+ date built-in, <a href="ref_builtins_string.html#ref_builtin_string_date">date, time, datetime</a>,
+<a href="ref_builtins_date.html#ref_builtin_date_datetype">date, time, datetime (when used with a date/time/date-time
+ value)</a>
+ </dt>
+ <dt>
+ datetime </dt>
+ <dd><dl>
+ <dt>built-ins, <a href="ref_builtins_date.html">Built-ins for date/time/date-time values</a></dt>
+ </dl></dd>
+ <dt>
+ date-time </dt>
+ <dd><dl>
+ <dt>the FTL value type, <a href="dgui_datamodel_types.html#dgui_datamodel_scalar">Scalars</a></dt>
+ </dl></dd>
+ <dt>
+ datetime_format, <a href="ref_directive_setting.html#topic_date_format_settings">setting</a>
+ </dt>
+ <dt>
+ datetime built-in, <a href="ref_builtins_string.html#ref_builtin_string_date">date, time, datetime</a>,
+<a href="ref_builtins_date.html#ref_builtin_date_datetype">date, time, datetime (when used with a date/time/date-time
+ value)</a>
+ </dt>
+ <dt>
+ date to long, <a href="ref_builtins_expert.html#ref_builtin_numType">byte, double, float, int, long, short</a>
+ </dt>
+ <dt>
+ date to string, <a href="ref_builtins_date.html#ref_builtin_string_for_date">string (when used with a date/time/date-time value)</a>
+ </dt>
+ <dt>
+ default built-in, <a href="ref_depr_builtin.html">List of deprecated built-ins</a>
+ </dt>
+ <dt>
+ default directive, <a href="ref_directive_switch.html">switch, case, default, break</a>
+ </dt>
+ <dt>
+ DefaultObjectWrapper, <a href="pgui_datamodel_objectWrapper.html#pgui_datamodel_defaultObjectWrapper">The default object wrapper</a>
+ </dt>
+ <dd><dl>
+ <dt>extending, <a href="pgui_datamodel_objectWrapper.html#pgui_datamodel_customObjectWrappingExample">Custom object wrapping example</a></dt>
+ </dl></dd>
+ <dt>
+ default value operator, <a href="dgui_template_exp.html#dgui_template_exp_missing_default">Default value operator</a>
+ </dt>
+ <dt>
+ defining macro, <a href="dgui_misc_userdefdir.html#autoid_19">Defining your own directives</a>
+ </dt>
+ <dt>
+ deprecated, <a href="ref_deprecated.html">Deprecated FTL constructs</a>
+ </dt>
+ <dt>
+ directive, <a href="dgui_template_directives.html">Directives</a>,
+<a href="ref_directives.html">Directive Reference</a>,
+<a href="ref_directive_alphaidx.html">Alphabetical index</a>
+ </dt>
+ <dd><dl>
+ <dt>the FTL value type, <a href="dgui_datamodel_types.html#dgui_datamodel_userdefdir">User-defined directives</a></dt>
+ <dt>user-defined, <a href="dgui_misc_userdefdir.html">Defining your own directives</a></dt>
+ </dl></dd>
+ <dt>
+ directives </dt>
+ <dd><dl>
+ <dt>Java side, <a href="pgui_datamodel_directive.html">Directives</a></dt>
+ </dl></dd>
+ <dt>
+ division, <a href="dgui_template_exp.html#dgui_template_exp_arit">Arithmetical calculations</a>
+ </dt>
+ <dt>
+ double built-in, <a href="ref_builtins_expert.html#ref_builtin_numType">byte, double, float, int, long, short</a>
+ </dt>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_E"></a>
+<h2 class="indexLabel">E</h2>
+<dl>
+ <dt>
+ else directive, <a href="ref_directive_if.html">if, else, elseif</a>
+ </dt>
+ <dt>
+ else directive inside list, <a href="ref_directive_list.html#autoid_103">list, else, items, sep, break</a>
+ </dt>
+ <dt>
+ elseif directive, <a href="ref_directive_if.html">if, else, elseif</a>
+ </dt>
+ <dt>
+ encoding, <a href="pgui_misc_charset.html">Charset issues</a>,
+<a href="ref_directive_ftl.html">ftl</a>
+ </dt>
+ <dd><dl>
+ <dt>URL, <a href="ref_builtins_string.html#ref_builtin_url">url</a></dt>
+ <dt>URL path, <a href="ref_builtins_string.html#ref_builtin_url_path">url_path</a></dt>
+ </dl></dd>
+ <dt>
+ ends_with built-in, <a href="ref_builtins_string.html#ref_builtin_ends_with">ends_with</a>
+ </dt>
+ <dt>
+ ensure_ends_with built-in, <a href="ref_builtins_string.html#ref_builtin_ensure_ends_with">ensure_ends_with</a>,
+<a href="ref_builtins_string.html#ref_builtin_ensure_starts_with">ensure_starts_with</a>
+ </dt>
+ <dt>
+ enum, <a href="pgui_misc_beanwrapper.html#jdk_15_enums">Accessing enums</a>
+ </dt>
+ <dt>
+ error, <a href="ref_specvar.html">Special Variable Reference</a>
+ </dt>
+ <dt>
+ error handling, <a href="dgui_template_exp.html#dgui_template_exp_missing">Handling missing values</a>,
+<a href="pgui_config_errorhandling.html">Error handling</a>,
+<a href="ref_directive_attempt.html">attempt, recover</a>
+ </dt>
+ <dt>
+ escape directive, <a href="ref_directive_escape.html">escape, noescape (deprecated)</a>
+ </dt>
+ <dt>
+ escape sequences, <a href="dgui_template_exp.html#dgui_template_exp_direct_string">Strings</a>
+ </dt>
+ <dt>
+ escaping, <a href="dgui_misc_autoescaping.html">Auto-escaping and output formats</a>,
+<a href="ref_directive_autoesc.html">autoesc</a>,
+<a href="ref_directive_noautoesc.html">noautoesc</a>,
+<a href="ref_directive_outputformat.html">outputformat</a>
+ </dt>
+ <dd><dl>
+ <dt>output, <a href="ref_builtins_string.html#ref_builtin_html">html (deprecated)</a>, <a href="ref_builtins_string.html#ref_builtin_rtf">rtf (deprecated)</a>, <a href="ref_builtins_string.html#ref_builtin_xhtml">xhtml (deprecated)</a>, <a href="ref_builtins_string.html#ref_builtin_xml">xml (deprecated)</a></dt>
+ <dt>URL, <a href="ref_builtins_string.html#ref_builtin_url">url</a></dt>
+ <dt>URL path, <a href="ref_builtins_string.html#ref_builtin_url_path">url_path</a></dt>
+ </dl></dd>
+ <dt>
+ esc built-in, <a href="ref_builtins_string.html#ref_builtin_esc">esc</a>
+ </dt>
+ <dt>
+ eval, <a href="ref_builtins_expert.html#ref_builtin_eval">eval</a>
+ </dt>
+ <dt>
+ evaluate string, <a href="ref_builtins_expert.html#ref_builtin_eval">eval</a>
+ </dt>
+ <dt>
+ exception handling, <a href="pgui_config_errorhandling.html">Error handling</a>
+ </dt>
+ <dt>
+ existence test operator, <a href="dgui_template_exp.html#dgui_template_exp_missing_test">Missing value test operator</a>
+ </dt>
+ <dt>
+ exists built-in, <a href="ref_depr_builtin.html">List of deprecated built-ins</a>
+ </dt>
+ <dt>
+ expression, <a href="dgui_template_exp.html">Expressions</a>
+ </dt>
+ <dt>
+ extended Java decimal format, <a href="ref_builtins_number.html#topic.extendedJavaDecimalFormat">Extended Java decimal format</a>
+ </dt>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_F"></a>
+<h2 class="indexLabel">F</h2>
+<dl>
+ <dt>
+ fallback directive, <a href="ref_directive_visit.html">visit, recurse, fallback</a>
+ </dt>
+ <dt>
+ FAQ, <a href="app_faq.html">FAQ</a>
+ </dt>
+ <dt>
+ first built-in, <a href="ref_builtins_sequence.html#ref_builtin_first">first</a>
+ </dt>
+ <dt>
+ float built-in, <a href="ref_builtins_expert.html#ref_builtin_numType">byte, double, float, int, long, short</a>
+ </dt>
+ <dt>
+ floor built-in, <a href="ref_builtins_number.html#ref_builtin_rounding">round, floor, ceiling</a>
+ </dt>
+ <dt>
+ flush directive, <a href="ref_directive_flush.html">flush</a>
+ </dt>
+ <dt>
+ format </dt>
+ <dd><dl>
+ <dt>boolean, <a href="ref_builtins_boolean.html#ref_builtin_c_boolean">c (when used with boolean)</a>, <a href="ref_builtins_boolean.html#ref_builtin_string_for_boolean">string (when used with a boolean value)</a>, <a href="ref_directive_setting.html#autoid_125">setting</a></dt>
+ <dt>date, <a href="ref_builtins_date.html#ref_builtin_string_for_date">string (when used with a date/time/date-time value)</a>, <a href="ref_directive_setting.html#topic_date_format_settings">setting</a></dt>
+ <dt>date-time, <a href="ref_builtins_date.html#ref_builtin_string_for_date">string (when used with a date/time/date-time value)</a></dt>
+ <dt>number, <a href="ref_builtins_number.html#ref_builtin_c">c (when used with numerical value)</a>, <a href="ref_builtins_number.html#ref_builtin_string_for_number">string (when used with a numerical value)</a>, <a href="ref_directive_setting.html#ref.setting.number_format">setting</a></dt>
+ <dt>time, <a href="ref_builtins_date.html#ref_builtin_string_for_date">string (when used with a date/time/date-time value)</a></dt>
+ <dt>timestamp, <a href="ref_builtins_date.html#ref_builtin_string_for_date">string (when used with a date/time/date-time value)</a></dt>
+ </dl></dd>
+ <dt>
+ format; boolean, <a href="ref_builtins_boolean.html#ref_builtin_then">then</a>
+ </dt>
+ <dt>
+ FTL, <a href="dgui_template_overallstructure.html">Overall structure</a>
+ </dt>
+ <dt>
+ ftl directive, <a href="ref_directive_ftl.html">ftl</a>
+ </dt>
+ <dt>
+ FTL tag, <a href="dgui_template_overallstructure.html">Overall structure</a>,
+<a href="dgui_template_directives.html">Directives</a>
+ </dt>
+ <dt>
+ function directive, <a href="ref_directive_function.html">function, return</a>
+ </dt>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_G"></a>
+<h2 class="indexLabel">G</h2>
+<dl>
+ <dt>
+ get character, <a href="dgui_template_exp.html#dgui_template_exp_get_character">Getting a character</a>
+ </dt>
+ <dt>
+ global directive, <a href="ref_directive_global.html">global</a>
+ </dt>
+ <dt>
+ groups built-in, <a href="ref_builtins_string.html#ref_builtin_groups">groups</a>
+ </dt>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_H"></a>
+<h2 class="indexLabel">H</h2>
+<dl>
+ <dt>
+ handling null-s, <a href="dgui_template_exp.html#dgui_template_exp_missing">Handling missing values</a>
+ </dt>
+ <dt>
+ has_api built-in, <a href="ref_builtins_expert.html#ref_buitin_api_and_has_api">api, has_api</a>
+ </dt>
+ <dt>
+ has_content built-in, <a href="ref_builtins_expert.html#ref_builtin_has_content">has_content</a>
+ </dt>
+ <dt>
+ has_next built-in, <a href="ref_builtins_loop_var.html#ref_builtin_has_next">has_next</a>
+ </dt>
+ <dt>
+ hash </dt>
+ <dd><dl>
+ <dt>accessing subvariable, <a href="dgui_template_exp.html#dgui_template_exp_var_hash">Retrieving data from a hash</a></dt>
+ <dt>built-ins, <a href="ref_builtins_hash.html">Built-ins for hashes</a></dt>
+ <dt>concatenate, <a href="dgui_template_exp.html#dgui_template_exp_hashop_cat">Concatenation</a></dt>
+ <dt>Java side, <a href="pgui_datamodel_parent.html#autoid_32">Containers</a></dt>
+ <dt>key type, <a href="app_faq.html#faq_nonstring_keys">FAQ</a></dt>
+ <dt>literal, <a href="dgui_template_exp.html#dgui_template_exp_direct_hash">Hashes</a></dt>
+ <dt>modify, <a href="app_faq.html#faq_modify_seq_and_map">FAQ</a></dt>
+ <dt>operations, <a href="dgui_template_exp.html#dgui_template_exp_hashop">Hash operations</a></dt>
+ <dt>the FTL value type, <a href="dgui_datamodel_types.html#dgui_datamodel_container">Containers</a></dt>
+ </dl></dd>
+ <dt>
+ header, <a href="ref_directive_ftl.html">ftl</a>
+ </dt>
+ <dt>
+ html built-in, <a href="ref_builtins_string.html#ref_builtin_html">html (deprecated)</a>
+ </dt>
+ <dt>
+ HTML encoding, <a href="dgui_misc_autoescaping.html">Auto-escaping and output formats</a>
+ </dt>
+ <dt>
+ HTML escaping, <a href="dgui_misc_autoescaping.html">Auto-escaping and output formats</a>
+ </dt>
+ <dt>
+ HTTP, <a href="pgui_misc_servlet.html">Using FreeMarker with servlets</a>
+ </dt>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_I"></a>
+<h2 class="indexLabel">I</h2>
+<dl>
+ <dt>
+ if_exists built-in, <a href="ref_depr_builtin.html">List of deprecated built-ins</a>
+ </dt>
+ <dt>
+ if directive, <a href="ref_directive_if.html">if, else, elseif</a>
+ </dt>
+ <dt>
+ import directive, <a href="ref_directive_import.html">import</a>
+ </dt>
+ <dt>
+ include </dt>
+ <dd><dl>
+ <dt>JSP, <a href="pgui_misc_servlet.html#pgui_misc_servlet_include">Including content from other web application
+ resources</a></dt>
+ <dt>servlet, <a href="pgui_misc_servlet.html#pgui_misc_servlet_include">Including content from other web application
+ resources</a></dt>
+ </dl></dd>
+ <dt>
+ include directive, <a href="ref_directive_include.html">include</a>
+ </dt>
+ <dt>
+ incompatible_improvements, <a href="pgui_config_incompatible_improvements.html">The "incompatible improvements" setting</a>
+ </dt>
+ <dt>
+ incompatibleImprovements, <a href="pgui_config_incompatible_improvements.html">The "incompatible improvements" setting</a>
+ </dt>
+ <dt>
+ incompatible improvements, <a href="pgui_config_incompatible_improvements.html">The "incompatible improvements" setting</a>
+ </dt>
+ <dt>
+ incomplatible_improvements, <a href="ref_specvar.html">Special Variable Reference</a>
+ </dt>
+ <dt>
+ index_of built-in, <a href="ref_builtins_string.html#ref_builtin_index_of">index_of</a>
+ </dt>
+ <dt>
+ index built-in, <a href="ref_builtins_loop_var.html#ref_builtin_index">index</a>
+ </dt>
+ <dt>
+ infinite, <a href="ref_builtins_number.html#ref_builtin_is_infinite">is_infinite</a>
+ </dt>
+ <dt>
+ install, <a href="app_install.html">Installing FreeMarker</a>
+ </dt>
+ <dt>
+ instantiating variable, <a href="ref_builtins_expert.html#ref_builtin_new">new</a>
+ </dt>
+ <dt>
+ int built-in, <a href="ref_builtins_expert.html#ref_builtin_numType">byte, double, float, int, long, short</a>
+ </dt>
+ <dt>
+ integer division, <a href="dgui_template_exp.html#dgui_template_exp_arit">Arithmetical calculations</a>
+ </dt>
+ <dt>
+ integer part, <a href="dgui_template_exp.html#dgui_template_exp_arit">Arithmetical calculations</a>
+ </dt>
+ <dt>
+ interpolation, <a href="dgui_template_overallstructure.html">Overall structure</a>,
+<a href="dgui_template_exp.html#dgui_template_exp_stringop_interpolation">Interpolation and concatenation</a>,
+<a href="dgui_template_valueinsertion.html">Interpolations</a>
+ </dt>
+ <dt>
+ interpret built-in, <a href="ref_builtins_expert.html#ref_builtin_interpret">interpret</a>
+ </dt>
+ <dt>
+ is_... built-in, <a href="ref_builtins_expert.html#ref_builtin_isType">is_...</a>
+ </dt>
+ <dt>
+ is_even_item built-in, <a href="ref_builtins_loop_var.html#ref_builtin_is_even_item">is_even_item</a>
+ </dt>
+ <dt>
+ is_first built-in, <a href="ref_builtins_loop_var.html#ref_builtin_is_first">is_first</a>
+ </dt>
+ <dt>
+ is_infinte built-in, <a href="ref_builtins_number.html#ref_builtin_is_infinite">is_infinite</a>
+ </dt>
+ <dt>
+ is_last built-in, <a href="ref_builtins_loop_var.html#ref_builtin_is_last">is_last</a>
+ </dt>
+ <dt>
+ is_nan built-in, <a href="ref_builtins_number.html#ref_builtin_is_nan">is_nan</a>
+ </dt>
+ <dt>
+ is_odd_item built-in, <a href="ref_builtins_loop_var.html#ref_builtin_is_odd_item">is_odd_item</a>
+ </dt>
+ <dt>
+ is null, <a href="dgui_template_exp.html#dgui_template_exp_missing_test">Missing value test operator</a>
+ </dt>
+ <dt>
+ iso_... built-ins, <a href="ref_builtins_date.html#ref_builtin_date_iso">iso_...</a>
+ </dt>
+ <dt>
+ ISO 8601, <a href="ref_directive_setting.html#topic_date_format_settings">setting</a>
+ </dt>
+ <dt>
+ ISO 8601 parsing, <a href="ref_builtins_string.html#ref_builtin_string_date">date, time, datetime</a>
+ </dt>
+ <dt>
+ iso built-in, <a href="ref_builtins_date.html#ref_builtin_date_iso">iso_...</a>
+ </dt>
+ <dt>
+ item_cycle built-in, <a href="ref_builtins_loop_var.html#ref_builtin_item_cycle">item_cycle</a>
+ </dt>
+ <dt>
+ item_parity_cap built-in, <a href="ref_builtins_loop_var.html#ref_builtin_item_parity_cap">item_parity_cap</a>
+ </dt>
+ <dt>
+ item_parity built-in, <a href="ref_builtins_loop_var.html#ref_builtin_item_parity">item_parity</a>
+ </dt>
+ <dt>
+ items directive, <a href="ref_directive_list.html#autoid_104">list, else, items, sep, break</a>
+ </dt>
+ <dt>
+ iteration state, <a href="ref_directive_list.html#autoid_107">list, else, items, sep, break</a>
+ </dt>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_J"></a>
+<h2 class="indexLabel">J</h2>
+<dl>
+ <dt>
+ j_string built-in, <a href="ref_builtins_string.html#ref_builtin_j_string">j_string</a>
+ </dt>
+ <dt>
+ JDBC time zone, <a href="ref_directive_setting.html#autoid_125">setting</a>
+ </dt>
+ <dt>
+ join built-in, <a href="ref_builtins_sequence.html#ref_builtin_join">join</a>
+ </dt>
+ <dt>
+ joining hashes, <a href="dgui_template_exp.html#dgui_template_exp_hashop_cat">Concatenation</a>
+ </dt>
+ <dt>
+ joining sequences, <a href="dgui_template_exp.html#dgui_template_exp_sequenceop_cat">Concatenation</a>
+ </dt>
+ <dt>
+ joining strings, <a href="dgui_template_exp.html#dgui_template_exp_stringop_interpolation">Interpolation and concatenation</a>
+ </dt>
+ <dt>
+ js_string built-in, <a href="ref_builtins_string.html#ref_builtin_js_string">js_string</a>
+ </dt>
+ <dt>
+ json_string built-in, <a href="ref_builtins_string.html#ref_builtin_json_string">json_string</a>
+ </dt>
+ <dt>
+ JSP, <a href="pgui_misc_servlet.html">Using FreeMarker with servlets</a>,
+<a href="app_faq.html#faq_jsp_vs_freemarker">FAQ</a>
+ </dt>
+ <dd><dl>
+ <dt>include, <a href="pgui_misc_servlet.html#pgui_misc_servlet_include">Including content from other web application
+ resources</a></dt>
+ <dt>taglib, <a href="pgui_misc_servlet.html#autoid_63">Using FreeMarker with servlets</a>, <a href="pgui_misc_servlet.html#autoid_64">Using FreeMarker with servlets</a></dt>
+ </dl></dd>
+ <dt>
+ jython </dt>
+ <dd><dl>
+ <dt>wrapping, <a href="pgui_misc_jythonwrapper.html">Jython wrapper</a></dt>
+ </dl></dd>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_K"></a>
+<h2 class="indexLabel">K</h2>
+<dl>
+ <dt>
+ keep_after_last built-in, <a href="ref_builtins_string.html#ref_builtin_keep_after_last">keep_after_last</a>
+ </dt>
+ <dt>
+ keep_after built-in, <a href="ref_builtins_string.html#ref_builtin_keep_after">keep_after</a>
+ </dt>
+ <dt>
+ keep_before_last built-in, <a href="ref_builtins_string.html#ref_builtin_keep_before_last">keep_before_last</a>
+ </dt>
+ <dt>
+ keep_before built-in, <a href="ref_builtins_string.html#ref_builtin_keep_before">keep_before</a>
+ </dt>
+ <dt>
+ keys built-in, <a href="ref_builtins_hash.html#ref_builtin_keys">keys</a>
+ </dt>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_L"></a>
+<h2 class="indexLabel">L</h2>
+<dl>
+ <dt>
+ lang, <a href="ref_specvar.html">Special Variable Reference</a>
+ </dt>
+ <dt>
+ language, <a href="ref_specvar.html">Special Variable Reference</a>
+ </dt>
+ <dt>
+ last_index_of built-in, <a href="ref_builtins_string.html#ref_builtin_last_index_of">last_index_of</a>
+ </dt>
+ <dt>
+ last built-in, <a href="ref_builtins_sequence.html#ref_builtin_last">last</a>
+ </dt>
+ <dt>
+ left_pad built-in, <a href="ref_builtins_string.html#ref_builtin_left_pad">left_pad</a>
+ </dt>
+ <dt>
+ length built-in, <a href="ref_builtins_string.html#ref_builtin_length">length</a>
+ </dt>
+ <dt>
+ libraries, <a href="dgui_misc_namespace.html">Namespaces</a>
+ </dt>
+ <dt>
+ license, <a href="app_license.html">License</a>
+ </dt>
+ <dt>
+ list directive, <a href="ref_directive_list.html">list, else, items, sep, break</a>
+ </dt>
+ <dt>
+ listing state, <a href="ref_directive_list.html#autoid_107">list, else, items, sep, break</a>
+ </dt>
+ <dt>
+ literal, <a href="dgui_template_exp.html#dgui_template_exp_direct">Specify values directly</a>
+ </dt>
+ <dd><dl>
+ <dt>boolean, <a href="dgui_template_exp.html#dgui_template_exp_direct_boolean">Booleans</a></dt>
+ <dt>hash, <a href="dgui_template_exp.html#dgui_template_exp_direct_hash">Hashes</a></dt>
+ </dl></dd>
+ <dt>
+ loading templates, <a href="pgui_config_templateloading.html">Template loading</a>
+ </dt>
+ <dt>
+ local directive, <a href="ref_directive_local.html">local</a>
+ </dt>
+ <dt>
+ locale, <a href="ref_directive_setting.html#autoid_125">setting</a>,
+<a href="ref_specvar.html">Special Variable Reference</a>
+ </dt>
+ <dt>
+ locale_object, <a href="ref_specvar.html">Special Variable Reference</a>
+ </dt>
+ <dt>
+ localization, <a href="ref_directive_include.html#ref_directive_include_localized">Localized lookup</a>
+ </dt>
+ <dt>
+ local variable, <a href="dgui_misc_var.html">Defining variables in the template</a>
+ </dt>
+ <dt>
+ Log4j2, <a href="pgui_misc_logging.html">Logging</a>
+ </dt>
+ <dt>
+ logging, <a href="pgui_misc_logging.html">Logging</a>
+ </dt>
+ <dt>
+ logical operations, <a href="dgui_template_exp.html#dgui_template_exp_logicalop">Logical operations</a>
+ </dt>
+ <dt>
+ long built-in, <a href="ref_builtins_expert.html#ref_builtin_numType">byte, double, float, int, long, short</a>
+ </dt>
+ <dt>
+ long to date, <a href="ref_builtins_expert.html#ref_builtin_numToDate">number_to_date, number_to_time, number_to_datetime</a>
+ </dt>
+ <dt>
+ loop variable, <a href="dgui_misc_userdefdir.html#dgui_misc_userdefdir_loopvar">Macros with loop variables</a>,
+<a href="dgui_misc_var.html">Defining variables in the template</a>
+ </dt>
+ <dt>
+ lower_abc built-in, <a href="ref_builtins_number.html#ref_builtin_lower_abc">lower_abc</a>
+ </dt>
+ <dt>
+ lower_case built-in, <a href="ref_builtins_string.html#ref_builtin_lower_case">lower_case</a>
+ </dt>
+ <dt>
+ lt directive, <a href="ref_directive_t.html">t, lt, rt</a>
+ </dt>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_M"></a>
+<h2 class="indexLabel">M</h2>
+<dl>
+ <dt>
+ macro, <a href="dgui_misc_userdefdir.html">Defining your own directives</a>
+ </dt>
+ <dd><dl>
+ <dt>the FTL value type, <a href="dgui_datamodel_types.html#dgui_datamodel_userdefdir">User-defined directives</a></dt>
+ </dl></dd>
+ <dt>
+ macro directive, <a href="ref_directive_macro.html">macro, nested, return</a>
+ </dt>
+ <dt>
+ main_template_name, <a href="ref_specvar.html">Special Variable Reference</a>
+ </dt>
+ <dt>
+ markup_string built-in, <a href="ref_builtins_expert.html#ref_builtin_markup_string">markup_string</a>
+ </dt>
+ <dt>
+ markup output </dt>
+ <dd><dl>
+ <dt>the FTL value type, <a href="dgui_datamodel_types.html#dgui_datamodel_markupoutput">Markup output</a></dt>
+ </dl></dd>
+ <dt>
+ matches built-in, <a href="ref_builtins_string.html#ref_builtin_matches">matches</a>
+ </dt>
+ <dt>
+ math, <a href="dgui_template_exp.html#dgui_template_exp_arit">Arithmetical calculations</a>
+ </dt>
+ <dt>
+ merging, <a href="pgui_quickstart_merge.html">Merging the template with the data-model</a>
+ </dt>
+ <dt>
+ method </dt>
+ <dd><dl>
+ <dt>call, <a href="dgui_template_exp.html#dgui_template_exp_methodcall">Method call</a></dt>
+ <dt>defining with FTL, <a href="ref_directive_function.html">function, return</a></dt>
+ <dt>Java side, <a href="pgui_datamodel_method.html">Methods</a></dt>
+ <dt>the FTL value type, <a href="dgui_datamodel_types.html#dgui_datamodel_method">Methods and functions</a></dt>
+ </dl></dd>
+ <dt>
+ MIME type, <a href="dgui_misc_autoescaping.html">Auto-escaping and output formats</a>
+ </dt>
+ <dt>
+ missing value test operator, <a href="dgui_template_exp.html#dgui_template_exp_missing_test">Missing value test operator</a>
+ </dt>
+ <dt>
+ missing variable, <a href="dgui_template_exp.html#dgui_template_exp_missing">Handling missing values</a>
+ </dt>
+ <dt>
+ Model 2, <a href="pgui_misc_servlet.html">Using FreeMarker with servlets</a>
+ </dt>
+ <dt>
+ modify hashes, <a href="app_faq.html#faq_modify_seq_and_map">FAQ</a>
+ </dt>
+ <dt>
+ modify sequences, <a href="app_faq.html#faq_modify_seq_and_map">FAQ</a>
+ </dt>
+ <dt>
+ modulus, <a href="dgui_template_exp.html#dgui_template_exp_arit">Arithmetical calculations</a>
+ </dt>
+ <dt>
+ multithreading, <a href="pgui_misc_multithreading.html">Multithreading</a>
+ </dt>
+ <dt>
+ Multi-typed value, <a href="dgui_datamodel_basics.html#topic.multitype">Basics</a>
+ </dt>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_N"></a>
+<h2 class="indexLabel">N</h2>
+<dl>
+ <dt>
+ namespace built-in, <a href="ref_builtins_expert.html#ref_builtin_namespace">namespace</a>
+ </dt>
+ <dt>
+ namespaces, <a href="dgui_misc_namespace.html">Namespaces</a>
+ </dt>
+ <dt>
+ NaN, <a href="ref_builtins_number.html#ref_builtin_is_nan">is_nan</a>
+ </dt>
+ <dt>
+ nested directive, <a href="ref_directive_macro.html">macro, nested, return</a>
+ </dt>
+ <dt>
+ new built-in, <a href="ref_builtins_expert.html#ref_builtin_new">new</a>
+ </dt>
+ <dt>
+ new FTL syntax, <a href="ref_depr_oldsyntax.html">Old FTL syntax</a>
+ </dt>
+ <dt>
+ next_sibling built-in, <a href="ref_builtins_node.html#ref_builtin_next_sibling">next_sibling</a>
+ </dt>
+ <dt>
+ no_esc built-in, <a href="ref_builtins_string.html#ref_builtin_no_esc">no_esc</a>
+ </dt>
+ <dt>
+ noautoesc directive, <a href="ref_directive_noautoesc.html">noautoesc</a>
+ </dt>
+ <dt>
+ node </dt>
+ <dd><dl>
+ <dt>built-ins, <a href="ref_builtins_node.html">Built-ins for nodes (for XML)</a></dt>
+ <dt>Java side, <a href="pgui_datamodel_node.html">Node variables</a></dt>
+ <dt>the FTL value type, <a href="dgui_datamodel_types.html#dgui_datamodel_node">Nodes</a></dt>
+ </dl></dd>
+ <dt>
+ node_name built-in, <a href="ref_builtins_node.html#ref_builtin_node_name">node_name</a>
+ </dt>
+ <dt>
+ node_namespace built-in, <a href="ref_builtins_node.html#ref_builtin_node_namespace">node_namespace</a>
+ </dt>
+ <dt>
+ node_type built-in, <a href="ref_builtins_node.html#ref_builtin_node_type">node_type</a>
+ </dt>
+ <dt>
+ noescape directive, <a href="ref_directive_escape.html">escape, noescape (deprecated)</a>
+ </dt>
+ <dt>
+ noparse directive, <a href="ref_directive_noparse.html">noparse</a>
+ </dt>
+ <dt>
+ not, <a href="dgui_template_exp.html#dgui_template_exp_logicalop">Logical operations</a>
+ </dt>
+ <dt>
+ now, <a href="ref_specvar.html">Special Variable Reference</a>
+ </dt>
+ <dt>
+ nt directive, <a href="ref_directive_nt.html">nt</a>
+ </dt>
+ <dt>
+ null, <a href="dgui_template_exp.html#dgui_template_exp_missing">Handling missing values</a>,
+<a href="app_faq.html#faq_null">FAQ</a>
+ </dt>
+ <dt>
+ number </dt>
+ <dd><dl>
+ <dt>built-ins, <a href="ref_builtins_number.html">Built-ins for numbers</a></dt>
+ <dt>Java side, <a href="pgui_datamodel_scalar.html">Scalars</a></dt>
+ <dt>literal, <a href="dgui_template_exp.html#dgui_template_exp_direct_number">Numbers</a></dt>
+ <dt>the FTL value type, <a href="dgui_datamodel_types.html#dgui_datamodel_scalar">Scalars</a></dt>
+ </dl></dd>
+ <dt>
+ number_format, <a href="ref_directive_setting.html#ref.setting.number_format">setting</a>
+ </dt>
+ <dt>
+ number_to_date built-in, <a href="ref_builtins_expert.html#ref_builtin_numToDate">number_to_date, number_to_time, number_to_datetime</a>
+ </dt>
+ <dt>
+ number_to_datetime built-in, <a href="ref_builtins_expert.html#ref_builtin_numToDate">number_to_date, number_to_time, number_to_datetime</a>
+ </dt>
+ <dt>
+ number_to_time built-in, <a href="ref_builtins_expert.html#ref_builtin_numToDate">number_to_date, number_to_time, number_to_datetime</a>
+ </dt>
+ <dt>
+ number built-in, <a href="ref_builtins_string.html#ref_builtin_number">number</a>
+ </dt>
+ <dt>
+ numerical range expression, <a href="dgui_template_exp.html#dgui_template_exp_direct_seuqence">Sequences</a>
+ </dt>
+ <dt>
+ numerical sequence, <a href="dgui_template_exp.html#dgui_template_exp_direct_seuqence">Sequences</a>
+ </dt>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_O"></a>
+<h2 class="indexLabel">O</h2>
+<dl>
+ <dt>
+ object wrapper, <a href="pgui_datamodel_basics.html">Basics</a>,
+<a href="pgui_datamodel_objectWrapper.html">Object wrappers</a>
+ </dt>
+ <dd><dl>
+ <dt>custom, <a href="pgui_datamodel_objectWrapper.html#pgui_datamodel_customObjectWrappingExample">Custom object wrapping example</a></dt>
+ <dt>default, <a href="pgui_datamodel_objectWrapper.html#pgui_datamodel_defaultObjectWrapper">The default object wrapper</a></dt>
+ </dl></dd>
+ <dt>
+ old FTL syntax, <a href="ref_depr_oldsyntax.html">Old FTL syntax</a>
+ </dt>
+ <dt>
+ operator precedence, <a href="dgui_template_exp.html#dgui_template_exp_precedence">Operator precedence</a>
+ </dt>
+ <dt>
+ or, <a href="dgui_template_exp.html#dgui_template_exp_logicalop">Logical operations</a>
+ </dt>
+ <dt>
+ output </dt>
+ <dd><dl>
+ <dt>generate with Java, <a href="pgui_quickstart_merge.html">Merging the template with the data-model</a></dt>
+ </dl></dd>
+ <dt>
+ output_encoding, <a href="ref_directive_setting.html#autoid_125">setting</a>
+ </dt>
+ <dt>
+ output_format, <a href="ref_specvar.html">Special Variable Reference</a>
+ </dt>
+ <dt>
+ output charset, <a href="pgui_misc_charset.html#autoid_53">Charset issues</a>,
+<a href="ref_builtins_string.html#ref_builtin_url">url</a>,
+<a href="ref_specvar.html">Special Variable Reference</a>
+ </dt>
+ <dt>
+ output encoding, <a href="pgui_misc_charset.html#autoid_53">Charset issues</a>,
+<a href="ref_builtins_string.html#ref_builtin_url">url</a>,
+<a href="ref_specvar.html">Special Variable Reference</a>
+ </dt>
+ <dt>
+ output format, <a href="dgui_misc_autoescaping.html#dgui_misc_autoescaping_outputformat">Output formats</a>,
+<a href="pgui_config_outputformatsautoesc.html">Associating output formats with templates</a>,
+<a href="ref_specvar.html">Special Variable Reference</a>
+ </dt>
+ <dt>
+ outputformat directive, <a href="ref_directive_outputformat.html">outputformat</a>
+ </dt>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_P"></a>
+<h2 class="indexLabel">P</h2>
+<dl>
+ <dt>
+ padding, <a href="ref_builtins_string.html#ref_builtin_left_pad">left_pad</a>,
+<a href="ref_builtins_string.html#ref_builtin_right_pad">right_pad</a>
+ </dt>
+ <dt>
+ parent built-in, <a href="ref_builtins_node.html#ref_builtin_parent">parent</a>
+ </dt>
+ <dt>
+ parentheses, <a href="dgui_template_exp.html#dgui_template_exp_parentheses">Parentheses</a>
+ </dt>
+ <dt>
+ parse string as boolean, <a href="ref_builtins_string.html#ref_builtin_boolean">boolean</a>
+ </dt>
+ <dt>
+ parse string as number, <a href="ref_builtins_string.html#ref_builtin_number">number</a>
+ </dt>
+ <dt>
+ parsing string as date, <a href="ref_builtins_string.html#ref_builtin_string_date">date, time, datetime</a>
+ </dt>
+ <dt>
+ parsing string as time, <a href="ref_builtins_string.html#ref_builtin_string_date">date, time, datetime</a>
+ </dt>
+ <dt>
+ path, <a href="pgui_config_templateloading.html#autoid_42">Template loading</a>
+ </dt>
+ <dt>
+ positional parameter passing, <a href="ref_directive_userDefined.html#ref_directive_userDefined_positionalParam">Positional parameter passing</a>
+ </dt>
+ <dt>
+ precedence, <a href="dgui_template_exp.html#dgui_template_exp_precedence">Operator precedence</a>
+ </dt>
+ <dt>
+ previous_sibling built-in, <a href="ref_builtins_node.html#ref_builtin_previous_sibling">previous_sibling</a>
+ </dt>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_R"></a>
+<h2 class="indexLabel">R</h2>
+<dl>
+ <dt>
+ range expression, <a href="dgui_template_exp.html#dgui_template_exp_direct_seuqence">Sequences</a>
+ </dt>
+ <dt>
+ raw string literal, <a href="dgui_template_exp.html#dgui_template_exp_direct_string">Strings</a>
+ </dt>
+ <dt>
+ recover directive, <a href="ref_directive_attempt.html">attempt, recover</a>
+ </dt>
+ <dt>
+ recurse directive, <a href="ref_directive_visit.html">visit, recurse, fallback</a>
+ </dt>
+ <dt>
+ recursion </dt>
+ <dd><dl>
+ <dt>iterate, <a href="ref_directive_visit.html">visit, recurse, fallback</a></dt>
+ </dl></dd>
+ <dt>
+ regular expression </dt>
+ <dd><dl>
+ <dt>built-ins, <a href="ref_builtins_string.html#ref_builtin_string_flags">Common flags</a></dt>
+ </dl></dd>
+ <dt>
+ remove_beginning built-in, <a href="ref_builtins_string.html#ref_builtin_remove_beginning">remove_beginning</a>
+ </dt>
+ <dt>
+ remove_ending built-in, <a href="ref_builtins_string.html#ref_builtin_remove_ending">remove_ending</a>
+ </dt>
+ <dt>
+ replace built-in, <a href="ref_builtins_string.html#ref_builtin_replace">replace</a>
+ </dt>
+ <dt>
+ reserved name, <a href="ref_reservednames.html">Reserved names in FTL</a>
+ </dt>
+ <dt>
+ return directive, <a href="ref_directive_function.html">function, return</a>,
+<a href="ref_directive_macro.html">macro, nested, return</a>
+ </dt>
+ <dt>
+ reverse built-in, <a href="ref_builtins_sequence.html#ref_builtin_reverse">reverse</a>
+ </dt>
+ <dt>
+ right_pad built-in, <a href="ref_builtins_string.html#ref_builtin_right_pad">right_pad</a>
+ </dt>
+ <dt>
+ root built-in, <a href="ref_builtins_node.html#ref_builtin_root">root</a>
+ </dt>
+ <dt>
+ round built-in, <a href="ref_builtins_number.html#ref_builtin_rounding">round, floor, ceiling</a>
+ </dt>
+ <dt>
+ rounding, <a href="ref_builtins_number.html#ref_builtin_rounding">round, floor, ceiling</a>
+ </dt>
+ <dt>
+ rt directive, <a href="ref_directive_t.html">t, lt, rt</a>
+ </dt>
+ <dt>
+ rtf built-in, <a href="ref_builtins_string.html#ref_builtin_rtf">rtf (deprecated)</a>
+ </dt>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_S"></a>
+<h2 class="indexLabel">S</h2>
+<dl>
+ <dt>
+ scalar </dt>
+ <dd><dl>
+ <dt>Java side, <a href="pgui_datamodel_scalar.html">Scalars</a></dt>
+ </dl></dd>
+ <dt>
+ scopes, <a href="pgui_misc_var.html">Variables, scopes</a>
+ </dt>
+ <dt>
+ security, <a href="pgui_misc_secureenv.html">Configuring security policy for FreeMarker</a>
+ </dt>
+ <dd><dl>
+ <dt>user-provided templates, <a href="app_faq.html#faq_template_uploading_security">FAQ</a></dt>
+ </dl></dd>
+ <dt>
+ sep directive, <a href="ref_directive_list.html#autoid_105">list, else, items, sep, break</a>
+ </dt>
+ <dt>
+ seq_contains built-in, <a href="ref_builtins_sequence.html#ref_builtin_seq_contains">seq_contains</a>
+ </dt>
+ <dt>
+ seq_index_of built-in, <a href="ref_builtins_sequence.html#ref_builtin_seq_index_of">seq_index_of</a>
+ </dt>
+ <dt>
+ seq_last_index_of built-in, <a href="ref_builtins_sequence.html#ref_builtin_seq_last_index_of">seq_last_index_of</a>
+ </dt>
+ <dt>
+ sequence </dt>
+ <dd><dl>
+ <dt>accessing subvariable, <a href="dgui_template_exp.html#dgui_template_exp_var_sequence">Retrieving data from a sequence</a></dt>
+ <dt>built-ins, <a href="ref_builtins_sequence.html">Built-ins for sequences</a></dt>
+ <dt>concatenate, <a href="dgui_template_exp.html#dgui_template_exp_sequenceop_cat">Concatenation</a></dt>
+ <dt>iterate, <a href="ref_directive_list.html">list, else, items, sep, break</a></dt>
+ <dt>Java side, <a href="pgui_datamodel_parent.html#autoid_33">Containers</a></dt>
+ <dt>literal, <a href="dgui_template_exp.html#dgui_template_exp_direct_seuqence">Sequences</a></dt>
+ <dt>modify, <a href="app_faq.html#faq_modify_seq_and_map">FAQ</a></dt>
+ <dt>operations, <a href="dgui_template_exp.html#dgui_template_exp_sequenceop">Sequence operations</a></dt>
+ <dt>slice, <a href="dgui_template_exp.html#dgui_template_exp_seqenceop_slice">Sequence slicing</a></dt>
+ <dt>sorting, <a href="ref_builtins_sequence.html#ref_builtin_sort">sort</a>, <a href="ref_builtins_sequence.html#ref_builtin_sort_by">sort_by</a></dt>
+ <dt>the FTL value type, <a href="dgui_datamodel_types.html#dgui_datamodel_container">Containers</a></dt>
+ </dl></dd>
+ <dt>
+ sequence slice, <a href="dgui_template_exp.html#dgui_template_exp_seqenceop_slice">Sequence slicing</a>
+ </dt>
+ <dt>
+ servlet </dt>
+ <dd><dl>
+ <dt>include, <a href="pgui_misc_servlet.html#pgui_misc_servlet_include">Including content from other web application
+ resources</a></dt>
+ </dl></dd>
+ <dt>
+ Servlet, <a href="pgui_misc_servlet.html">Using FreeMarker with servlets</a>
+ </dt>
+ <dt>
+ setting, <a href="pgui_config_settings.html">Settings</a>
+ </dt>
+ <dt>
+ setting directive, <a href="ref_directive_setting.html">setting</a>
+ </dt>
+ <dt>
+ shared variable, <a href="pgui_config_sharedvariables.html">Shared variables</a>
+ </dt>
+ <dt>
+ short built-in, <a href="ref_builtins_expert.html#ref_builtin_numType">byte, double, float, int, long, short</a>
+ </dt>
+ <dt>
+ size built-in, <a href="ref_builtins_sequence.html#ref_builtin_size">size</a>
+ </dt>
+ <dt>
+ SLF4J, <a href="pgui_misc_logging.html">Logging</a>
+ </dt>
+ <dt>
+ sort_by built-in, <a href="ref_builtins_sequence.html#ref_builtin_sort_by">sort_by</a>
+ </dt>
+ <dt>
+ sort built-in, <a href="ref_builtins_sequence.html#ref_builtin_sort">sort</a>
+ </dt>
+ <dt>
+ special variable, <a href="ref_specvar.html">Special Variable Reference</a>
+ </dt>
+ <dt>
+ special variables, <a href="dgui_template_exp.html#dgui_template_exp_var_special">Special variables</a>
+ </dt>
+ <dt>
+ split built-in, <a href="ref_builtins_string.html#ref_builtin_split">split</a>
+ </dt>
+ <dt>
+ square bracket syntax, <a href="dgui_misc_alternativesyntax.html">Alternative (square bracket) syntax</a>
+ </dt>
+ <dt>
+ starts_with built-in, <a href="ref_builtins_string.html#ref_builtin_starts_with">starts_with</a>
+ </dt>
+ <dt>
+ static method </dt>
+ <dd><dl>
+ <dt>accessing from templates, <a href="pgui_misc_beanwrapper.html#autoid_60">Bean wrapper</a></dt>
+ </dl></dd>
+ <dt>
+ stop directive, <a href="ref_directive_stop.html">stop</a>
+ </dt>
+ <dt>
+ storing templates, <a href="pgui_config_templateloading.html">Template loading</a>
+ </dt>
+ <dt>
+ strict syntax, <a href="ref_depr_oldsyntax.html">Old FTL syntax</a>
+ </dt>
+ <dt>
+ string </dt>
+ <dd><dl>
+ <dt>built-ins, <a href="ref_builtins_string.html">Built-ins for strings</a></dt>
+ <dt>concatenate, <a href="dgui_template_exp.html#dgui_template_exp_stringop_interpolation">Interpolation and concatenation</a></dt>
+ <dt>interpolation, <a href="dgui_template_exp.html#dgui_template_exp_stringop_interpolation">Interpolation and concatenation</a></dt>
+ <dt>Java side, <a href="pgui_datamodel_scalar.html">Scalars</a></dt>
+ <dt>literal, <a href="dgui_template_exp.html#dgui_template_exp_direct_string">Strings</a></dt>
+ <dt>operations, <a href="dgui_template_exp.html#dgui_template_exp_stringop">String operations</a></dt>
+ <dt>slice, <a href="dgui_template_exp.html#dgui_template_exp_stringop_slice">String slicing (substrings)</a></dt>
+ <dt>substring, <a href="dgui_template_exp.html#dgui_template_exp_stringop_slice">String slicing (substrings)</a></dt>
+ <dt>the FTL value type, <a href="dgui_datamodel_types.html#dgui_datamodel_scalar">Scalars</a></dt>
+ </dl></dd>
+ <dt>
+ string built-in, <a href="ref_builtins_number.html#ref_builtin_string_for_number">string (when used with a numerical value)</a>,
+<a href="ref_builtins_date.html#ref_builtin_string_for_date">string (when used with a date/time/date-time value)</a>,
+<a href="ref_builtins_boolean.html#ref_builtin_string_for_boolean">string (when used with a boolean value)</a>
+ </dt>
+ <dt>
+ string slicing, <a href="dgui_template_exp.html#dgui_template_exp_stringop_slice">String slicing (substrings)</a>
+ </dt>
+ <dt>
+ string to boolean, <a href="ref_builtins_string.html#ref_builtin_boolean">boolean</a>
+ </dt>
+ <dt>
+ string to date, <a href="ref_builtins_string.html#ref_builtin_string_date">date, time, datetime</a>
+ </dt>
+ <dt>
+ string to number, <a href="ref_builtins_string.html#ref_builtin_number">number</a>
+ </dt>
+ <dt>
+ string to time, <a href="ref_builtins_string.html#ref_builtin_string_date">date, time, datetime</a>
+ </dt>
+ <dt>
+ Struts, <a href="pgui_misc_servlet.html">Using FreeMarker with servlets</a>
+ </dt>
+ <dt>
+ subsequence, <a href="dgui_template_exp.html#dgui_template_exp_seqenceop_slice">Sequence slicing</a>
+ </dt>
+ <dt>
+ substring, <a href="dgui_template_exp.html#dgui_template_exp_stringop_slice">String slicing (substrings)</a>,
+<a href="ref_builtins_string.html#ref_builtin_substring">substring (deprecated)</a>
+ </dt>
+ <dt>
+ substring built-in, <a href="ref_builtins_string.html#ref_builtin_substring">substring (deprecated)</a>
+ </dt>
+ <dt>
+ subtraction, <a href="dgui_template_exp.html#dgui_template_exp_arit">Arithmetical calculations</a>
+ </dt>
+ <dt>
+ subvariable </dt>
+ <dd><dl>
+ <dt>accessing, <a href="dgui_template_exp.html#dgui_template_exp_var_toplevel">Top-level variables</a>, <a href="dgui_template_exp.html#dgui_template_exp_var_hash">Retrieving data from a hash</a>, <a href="dgui_template_exp.html#dgui_template_exp_var_sequence">Retrieving data from a sequence</a></dt>
+ </dl></dd>
+ <dt>
+ switch built-in, <a href="ref_builtins_type_independent.html#ref_builtin_switch">switch</a>
+ </dt>
+ <dt>
+ switch directive, <a href="ref_directive_switch.html">switch, case, default, break</a>
+ </dt>
+ <dt>
+ switch expression, <a href="ref_builtins_type_independent.html#ref_builtin_switch">switch</a>
+ </dt>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_T"></a>
+<h2 class="indexLabel">T</h2>
+<dl>
+ <dt>
+ tabular printing of sequences, <a href="ref_builtins_sequence.html#ref_builtin_chunk">chunk</a>
+ </dt>
+ <dt>
+ tag </dt>
+ <dd><dl>
+ <dt>user-defined, <a href="dgui_misc_userdefdir.html">Defining your own directives</a></dt>
+ </dl></dd>
+ <dt>
+ taglib, <a href="pgui_misc_servlet.html#autoid_63">Using FreeMarker with servlets</a>
+ </dt>
+ <dt>
+ t directive, <a href="ref_directive_t.html">t, lt, rt</a>
+ </dt>
+ <dt>
+ template, <a href="dgui_template.html">The Template</a>
+ </dt>
+ <dd><dl>
+ <dt>Java side, <a href="pgui_quickstart_gettemplate.html">Get the template</a></dt>
+ </dl></dd>
+ <dt>
+ template_name, <a href="ref_specvar.html">Special Variable Reference</a>
+ </dt>
+ <dt>
+ template caching, <a href="pgui_config_templateloading.html#pgui_config_templateloading_caching">Template caching</a>
+ </dt>
+ <dt>
+ template loaders, <a href="pgui_config_templateloading.html#autoid_38">Template loading</a>
+ </dt>
+ <dt>
+ template loading, <a href="pgui_config_templateloading.html">Template loading</a>
+ </dt>
+ <dt>
+ template name, <a href="pgui_config_templateloading.html#autoid_42">Template loading</a>
+ </dt>
+ <dt>
+ template path, <a href="pgui_config_templateloading.html#autoid_42">Template loading</a>
+ </dt>
+ <dt>
+ temporary variable, <a href="dgui_misc_var.html">Defining variables in the template</a>
+ </dt>
+ <dt>
+ ternary operator, <a href="ref_builtins_boolean.html#ref_builtin_then">then</a>
+ </dt>
+ <dt>
+ testing for missing, <a href="dgui_template_exp.html#dgui_template_exp_missing_test">Missing value test operator</a>
+ </dt>
+ <dt>
+ testing for null, <a href="dgui_template_exp.html#dgui_template_exp_missing_test">Missing value test operator</a>
+ </dt>
+ <dt>
+ testing for undefined, <a href="dgui_template_exp.html#dgui_template_exp_missing_test">Missing value test operator</a>
+ </dt>
+ <dt>
+ text, <a href="dgui_template_overallstructure.html">Overall structure</a>
+ </dt>
+ <dt>
+ then built-in, <a href="ref_builtins_boolean.html#ref_builtin_then">then</a>
+ </dt>
+ <dt>
+ thread-safety, <a href="pgui_misc_multithreading.html">Multithreading</a>
+ </dt>
+ <dt>
+ time </dt>
+ <dd><dl>
+ <dt>built-ins, <a href="ref_builtins_date.html">Built-ins for date/time/date-time values</a></dt>
+ <dt>Java API related difficulties, <a href="pgui_datamodel_scalar.html#autoid_31">Scalars</a></dt>
+ <dt>Java side, <a href="pgui_datamodel_scalar.html">Scalars</a></dt>
+ <dt>the FTL value type, <a href="dgui_datamodel_types.html#dgui_datamodel_scalar">Scalars</a></dt>
+ </dl></dd>
+ <dt>
+ time_format, <a href="ref_directive_setting.html#topic_date_format_settings">setting</a>
+ </dt>
+ <dt>
+ time_zone, <a href="ref_directive_setting.html#autoid_125">setting</a>,
+<a href="ref_directive_setting.html#autoid_125">setting</a>
+ </dt>
+ <dt>
+ time built-in, <a href="ref_builtins_string.html#ref_builtin_string_date">date, time, datetime</a>,
+<a href="ref_builtins_date.html#ref_builtin_date_datetype">date, time, datetime (when used with a date/time/date-time
+ value)</a>
+ </dt>
+ <dt>
+ timestamp </dt>
+ <dd><dl>
+ <dt>built-ins, <a href="ref_builtins_date.html">Built-ins for date/time/date-time values</a></dt>
+ </dl></dd>
+ <dt>
+ time to string, <a href="ref_builtins_date.html#ref_builtin_string_for_date">string (when used with a date/time/date-time value)</a>
+ </dt>
+ <dt>
+ transform, <a href="dgui_misc_userdefdir.html">Defining your own directives</a>
+ </dt>
+ <dt>
+ transform directive, <a href="ref_depr_transform.html">Transform directive</a>
+ </dt>
+ <dt>
+ tree nodes, <a href="pgui_datamodel_node.html">Node variables</a>
+ </dt>
+ <dt>
+ trees, <a href="pgui_datamodel_node.html">Node variables</a>
+ </dt>
+ <dt>
+ trim built-in, <a href="ref_builtins_string.html#ref_builtin_trim">trim</a>
+ </dt>
+ <dt>
+ trimmer directives, <a href="ref_directive_nt.html">nt</a>,
+<a href="ref_directive_t.html">t, lt, rt</a>
+ </dt>
+ <dt>
+ type-casting, <a href="ref_builtins_string.html#ref_builtin_boolean">boolean</a>,
+<a href="ref_builtins_string.html#ref_builtin_string_date">date, time, datetime</a>,
+<a href="ref_builtins_string.html#ref_builtin_number">number</a>,
+<a href="ref_builtins_number.html#ref_builtin_c">c (when used with numerical value)</a>,
+<a href="ref_builtins_number.html#ref_builtin_string_for_number">string (when used with a numerical value)</a>,
+<a href="ref_builtins_date.html#ref_builtin_date_datetype">date, time, datetime (when used with a date/time/date-time
+ value)</a>,
+<a href="ref_builtins_date.html#ref_builtin_string_for_date">string (when used with a date/time/date-time value)</a>,
+<a href="ref_builtins_boolean.html#ref_builtin_c_boolean">c (when used with boolean)</a>,
+<a href="ref_builtins_boolean.html#ref_builtin_string_for_boolean">string (when used with a boolean value)</a>,
+<a href="ref_builtins_expert.html#ref_builtin_numType">byte, double, float, int, long, short</a>,
+<a href="ref_builtins_expert.html#ref_builtin_numToDate">number_to_date, number_to_time, number_to_datetime</a>
+ </dt>
+ <dt>
+ type checking, <a href="ref_builtins_expert.html#ref_builtin_isType">is_...</a>
+ </dt>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_U"></a>
+<h2 class="indexLabel">U</h2>
+<dl>
+ <dt>
+ uncap_first built-in, <a href="ref_builtins_string.html#ref_builtin_uncap_first">uncap_first</a>
+ </dt>
+ <dt>
+ undefined variable, <a href="dgui_template_exp.html#dgui_template_exp_missing">Handling missing values</a>
+ </dt>
+ <dt>
+ upper_abc built-in, <a href="ref_builtins_number.html#ref_builtin_upper_abc">upper_abc</a>
+ </dt>
+ <dt>
+ upper_case built-in, <a href="ref_builtins_string.html#ref_builtin_upper_case">upper_case</a>
+ </dt>
+ <dt>
+ url_escaping_charset, <a href="ref_builtins_string.html#ref_builtin_url">url</a>,
+<a href="ref_directive_setting.html#autoid_125">setting</a>
+ </dt>
+ <dt>
+ url_path built-in, <a href="ref_builtins_string.html#ref_builtin_url_path">url_path</a>
+ </dt>
+ <dt>
+ url built-in, <a href="ref_builtins_string.html#ref_builtin_url">url</a>
+ </dt>
+ <dt>
+ URL encoding, <a href="ref_builtins_string.html#ref_builtin_url">url</a>,
+<a href="ref_builtins_string.html#ref_builtin_url_path">url_path</a>
+ </dt>
+ <dt>
+ URL escaping, <a href="ref_builtins_string.html#ref_builtin_url">url</a>,
+<a href="ref_builtins_string.html#ref_builtin_url_path">url_path</a>
+ </dt>
+ <dt>
+ URL escaping charset, <a href="ref_specvar.html">Special Variable Reference</a>,
+<a href="ref_specvar.html">Special Variable Reference</a>
+ </dt>
+ <dt>
+ user-defined directive, <a href="dgui_misc_userdefdir.html">Defining your own directives</a>,
+<a href="ref_directive_userDefined.html">User-defined directive (<@...>)</a>
+ </dt>
+ <dd><dl>
+ <dt>the FTL value type, <a href="dgui_datamodel_types.html#dgui_datamodel_userdefdir">User-defined directives</a></dt>
+ </dl></dd>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_V"></a>
+<h2 class="indexLabel">V</h2>
+<dl>
+ <dt>
+ value, <a href="dgui_datamodel_basics.html#topic.value">What is a value?</a>
+ </dt>
+ <dt>
+ values built-in, <a href="ref_builtins_hash.html#ref_builtin_values">values</a>
+ </dt>
+ <dt>
+ variable, <a href="dgui_misc_var.html">Defining variables in the template</a>
+ </dt>
+ <dt>
+ variable number of parameters, <a href="ref_directive_macro.html#autoid_112">macro, nested, return</a>
+ </dt>
+ <dt>
+ variables, <a href="pgui_misc_var.html">Variables, scopes</a>
+ </dt>
+ <dd><dl>
+ <dt>names, <a href="app_faq.html#faq_legal_variable_names">FAQ</a></dt>
+ </dl></dd>
+ <dt>
+ variable scopes, <a href="pgui_misc_var.html">Variables, scopes</a>
+ </dt>
+ <dt>
+ version, <a href="ref_specvar.html">Special Variable Reference</a>
+ </dt>
+ <dt>
+ visit directive, <a href="ref_directive_visit.html">visit, recurse, fallback</a>
+ </dt>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_W"></a>
+<h2 class="indexLabel">W</h2>
+<dl>
+ <dt>
+ web_safe built-in, <a href="ref_depr_builtin.html">List of deprecated built-ins</a>
+ </dt>
+ <dt>
+ Web application framework, <a href="pgui_misc_servlet.html">Using FreeMarker with servlets</a>
+ </dt>
+ <dt>
+ white-space removal, <a href="dgui_misc_whitespace.html">White-space handling</a>
+ </dt>
+ <dd><dl>
+ <dt>compress, <a href="dgui_misc_whitespace.html#autoid_30">White-space handling</a>, <a href="ref_directive_compress.html">compress</a></dt>
+ <dt>stripping, <a href="dgui_misc_whitespace.html#dgui_misc_whitespace_stripping">White-space stripping</a>, <a href="ref_directive_ftl.html">ftl</a>, <a href="ref_directive_nt.html">nt</a></dt>
+ <dt>trimming, <a href="ref_directive_nt.html">nt</a>, <a href="ref_directive_t.html">t, lt, rt</a></dt>
+ </dl></dd>
+ <dt>
+ word_list built-in, <a href="ref_builtins_string.html#ref_builtin_word_list">word_list</a>
+ </dt>
+ <dt>
+ wrapper, <a href="pgui_datamodel_basics.html">Basics</a>,
+<a href="pgui_datamodel_objectWrapper.html">Object wrappers</a>
+ </dt>
+ <dt>
+ wrapping </dt>
+ <dd><dl>
+ <dt>beans, <a href="pgui_misc_beanwrapper.html">Bean wrapper</a></dt>
+ <dt>jython, <a href="pgui_misc_jythonwrapper.html">Jython wrapper</a></dt>
+ <dt>reflection, <a href="pgui_misc_beanwrapper.html">Bean wrapper</a></dt>
+ </dl></dd>
+</dl></div>
+<div class="indexdiv">
+<a name="idx_X"></a>
+<h2 class="indexLabel">X</h2>
+<dl>
+ <dt>
+ xhtml built-in, <a href="ref_builtins_string.html#ref_builtin_xhtml">xhtml (deprecated)</a>
+ </dt>
+ <dt>
+ XML </dt>
+ <dd><dl>
+ <dt>declarative processing, <a href="xgui_declarative.html">Declarative XML processing</a></dt>
+ <dt>exposing, <a href="xgui_expose.html">Exposing XML documents</a></dt>
+ <dt>imperative processing, <a href="xgui_imperative.html">Imperative XML processing</a></dt>
+ </dl></dd>
+ <dt>
+ xml built-in, <a href="ref_builtins_string.html#ref_builtin_xml">xml (deprecated)</a>
+ </dt>
+ <dt>
+ XML encoding, <a href="dgui_misc_autoescaping.html">Auto-escaping and output formats</a>
+ </dt>
+ <dt>
+ XML escaping, <a href="dgui_misc_autoescaping.html">Auto-escaping and output formats</a>
+ </dt>
+ <dt>
+ XML namespace </dt>
+ <dd><dl>
+ <dt>in imperative processing, <a href="xgui_imperative_learn.html#autoid_149">Basics</a></dt>
+ </dl></dd>
+ <dt>
+ XML namespaces </dt>
+ <dd><dl>
+ <dt>in declarative processing, <a href="xgui_declarative_details.html#autoid_154">Details</a></dt>
+ </dl></dd>
+ <dt>
+ XML Schema date parsing, <a href="ref_builtins_string.html#ref_builtin_string_date">date, time, datetime</a>
+ </dt>
+ <dt>
+ XML Schema date rendering, <a href="ref_directive_setting.html#topic_date_format_settings">setting</a>
+ </dt>
+ <dt>
+ XML Schema dateTime rendering, <a href="ref_directive_setting.html#topic_date_format_settings">setting</a>
+ </dt>
+ <dt>
+ XML Schema time parsing, <a href="ref_builtins_string.html#ref_builtin_string_date">date, time, datetime</a>
+ </dt>
+ <dt>
+ XML Schema time rendering, <a href="ref_directive_setting.html#topic_date_format_settings">setting</a>
+ </dt>
+ <dt>
+ XSLT, <a href="xgui_declarative.html">Declarative XML processing</a>
+ </dt>
+</dl></div>
+<div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="gloss.html"><span>Previous</span></a><span class="paging-arrow disabled next"><span>Next</span></span></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
[30/50] incubator-freemarker-site git commit: 2.3.26-nightly docs
preview
Posted by dd...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_misc_servlet.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_misc_servlet.html b/builds/2.3.26-nightly/pgui_misc_servlet.html
new file mode 100644
index 0000000..d75da3a
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_misc_servlet.html
@@ -0,0 +1,691 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Using FreeMarker with servlets - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Using FreeMarker with servlets">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_misc_servlet.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_misc_servlet.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_misc.html"><span itemprop="name">Miscellaneous</span></a></li><li class="step-3" itemprop="it
emListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_misc_servlet.html"><span itemprop="name">Using FreeMarker with servlets</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","Miscellaneous","Using FreeMarker with servlets"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_misc_logging.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_misc_secureenv.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_misc_servlet" itemprop="headline">Using FreeMarker with servlets</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#pgui_misc_servlet_model2" data-menu-target="pgui_misc_servlet_model2">Using FreeMarker for "Model 2"</a></li><li><a class="page-menu-link" href="#pgui_misc_servlet_include" data-menu-target="pgui_misc_servlet_include">Including content from other web application
+resources</a></li><li><a class="page-menu-link" href="#autoid_63" data-menu-target="autoid_63">Using JSP custom tags in FTL</a></li><li><a class="page-menu-link" href="#autoid_64" data-menu-target="autoid_64">Embed FTL into JSP pages</a></li></ul> </div><a name="topic.servlet"></a><p>In a fundamental sense, using FreeMarker in the web application
+ space is no different from anywhere else; FreeMarker writes its output
+ to a <code class="inline-code">Writer</code> that you pass to the
+ <code class="inline-code">Template.process</code> method, and it does not care if
+ that <code class="inline-code">Writer</code> prints to the console or to a file or
+ to the output stream of <code class="inline-code">HttpServletResponse</code>.
+ FreeMarker knows nothing about servlets and Web; it just merges Java
+ object with template files and generates text output from them. From
+ here, it is up to you how to build a Web application around
+ this.</p><p>But, probably you want to use FreeMarker with some already
+ existing Web application framework. Many frameworks rely on the
+ "Model 2" architecture, where JSP pages handle
+ presentation. If you use such a framework (for example, <a href="http://jakarta.apache.org/struts">Apache Struts</a>),
+ then read on. For other frameworks please refer to the documentation
+ of the framework.</p>
+
+
+
+
+<h2 class="content-header header-section2" id="pgui_misc_servlet_model2">Using FreeMarker for "Model 2"</h2>
+
+
+ <p>Many frameworks follow the strategy that the HTTP request is
+ dispatched to user-defined "action" classes that put
+ data into <code class="inline-code">ServletContext</code>,
+ <code class="inline-code">HttpSession</code> and
+ <code class="inline-code">HttpServletRequest</code> objects as attributes, and
+ then the request is forwarded by the framework to a JSP page (the
+ view) that will generate the HTML page using the data sent with the
+ attributes. This is often referred as Model 2.</p>
+
+ <p class="center-img"> <img src="figures/model2sketch.png" alt="Figure"> </p>
+
+
+ <p>With these frameworks you can simply use FTL files instead of
+ JSP files. But, since your servlet container (Web application
+ server), unlike with JSP files, does not know out-of-the-box what to
+ do with FTL files, a little extra configuring is needed for your Web
+ application:</p>
+
+ <div class="orderedlist"><ol type="1">
+ <li>
+ <p>Copy <code class="inline-code">freemarker.jar</code> (from the
+ <code class="inline-code">lib</code> directory of the FreeMarker distribution)
+ into the <code class="inline-code">WEB-INF/lib</code> directory of your Web
+ application.</p>
+ </li>
+
+ <li>
+ <p>Insert the following section to the
+ <code class="inline-code">WEB-INF/web.xml</code> file of your Web application
+ (and adjust it if required):</p>
+ </li>
+ </ol></div>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified"><servlet>
+ <servlet-name>freemarker</servlet-name>
+ <servlet-class><strong>freemarker.ext.servlet.FreemarkerServlet</strong></servlet-class>
+
+ <!--
+ Init-param documentation:
+ <a href="http://freemarker.org/docs/api/freemarker/ext/servlet/FreemarkerServlet.html">http://freemarker.org/docs/api/freemarker/ext/servlet/FreemarkerServlet.html</a>
+ -->
+
+ <!-- FreemarkerServlet settings: -->
+ <init-param>
+ <param-name>TemplatePath</param-name>
+ <param-value>/</param-value>
+ </init-param>
+ <init-param>
+ <param-name>NoCache</param-name>
+ <param-value>true</param-value>
+ </init-param>
+ <init-param>
+ <param-name>ResponseCharacterEncoding</param-name>
+ <!-- Use the output_encoding setting of FreeMarker: -->
+ <param-value>fromTemplate</param-value>
+ </init-param>
+ <init-param>
+ <param-name>ExceptionOnMissingTemplate</param-name>
+ <!-- true => HTTP 500 on missing template, instead of HTTP 404. -->
+ <param-value>true</param-value>
+ </init-param>
+
+ <!-- FreeMarker engine settings: -->
+ <init-param>
+ <param-name>incompatible_improvements</param-name>
+ <param-value>2.3.25</param-value>
+ <!--
+ Recommended to set to a high value.
+ See: http://freemarker.org/docs/pgui_config_incompatible_improvements.html
+ -->
+ </init-param>
+ <init-param>
+ <param-name>template_exception_handler</param-name>
+ <!-- Use "html_debug" during development! -->
+ <param-value>rethrow</param-value>
+ </init-param>
+ <init-param>
+ <param-name>template_update_delay</param-name>
+ <!-- Use 0 during development! Consider what value you need otherwise. -->
+ <param-value>30 s</param-value>
+ </init-param>
+ <init-param>
+ <param-name>default_encoding</param-name>
+ <!-- The encoding of the template files: -->
+ <param-value>UTF-8</param-value>
+ </init-param>
+ <init-param>
+ <param-name>output_encoding</param-name>
+ <!-- The encoding of the template output; Note that you must set
+ "ResponseCharacterEncodring" to "fromTemplate" for this to work! -->
+ <param-value>UTF-8</param-value>
+ </init-param>
+ <init-param>
+ <param-name>locale</param-name>
+ <!-- Influences number and date/time formatting, etc. -->
+ <param-value>en_US</param-value>
+ </init-param>
+ <init-param>
+ <param-name>number_format</param-name>
+ <param-value>0.##########</param-value>
+ </init-param>
+
+ <load-on-startup>1</load-on-startup>
+</servlet>
+
+<servlet-mapping>
+ <servlet-name>freemarker</servlet-name>
+ <url-pattern><strong>*.ftl</strong></url-pattern>
+ <!-- HTML and XML auto-escaped if incompatible_improvements >= 2.3.24: -->
+ <url-pattern><strong>*.ftlh</strong></url-pattern>
+ <url-pattern><strong>*.ftl</strong>x</url-pattern>
+</servlet-mapping>
+
+<em>...</em>
+
+<!--
+ Prevent the visiting of MVC Views from outside the servlet container.
+ RequestDispatcher.forward/include should, and will still work.
+ Removing this may open security holes!
+-->
+<security-constraint>
+ <web-resource-collection>
+ <web-resource-name>FreeMarker MVC Views</web-resource-name>
+ <url-pattern>*.ftl</url-pattern>
+ <url-pattern>*.ftlh</url-pattern>
+ <url-pattern>*.ftlx</url-pattern>
+ </web-resource-collection>
+ <auth-constraint>
+ <!-- Nobody is allowed to visit these directly. -->
+ </auth-constraint>
+</security-constraint></pre></div>
+
+ <p>After this, you can use FTL files (<code class="inline-code">*.ftl</code>)
+ in the same manner as JSP (<code class="inline-code">*.jsp</code>) files. (Of
+ course you can choose another extension besides
+ <code class="inline-code">ftl</code>; it is just the convention)</p>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>How does it work? Let's examine how JSP-s work. Many servlet
+ container handles JSP-s with a servlet that is mapped to the
+ <code class="inline-code">*.jsp</code> request URL pattern. That servlet will
+ receive all requests where the request URL ends with
+ <code class="inline-code">.jsp</code>, find the JSP file based on the request
+ URL, and internally compiles it to a <code class="inline-code">Servlet</code>,
+ and then call the generated servlet to generate the page. The
+ <code class="inline-code">FreemarkerServlet</code> mapped here to the
+ <code class="inline-code">*.ftl</code> URL pattern does the same, except that
+ FTL files are not compiled to <code class="inline-code">Servlet</code>-s, but to
+ <code class="inline-code">Template</code> objects, and then the
+ <code class="inline-code">process</code> method of <code class="inline-code">Template</code>
+ will be called to generate the page.</p>
+ </div>
+
+
+ <p><a name="topic.servlet.scopeAttr"></a>For example, instead
+ of this JSP file (note that it heavily uses Struts tag-libs to save
+ designers from embedded Java monsters):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
+<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
+
+<html>
+<head><title>Acmee Products International</title>
+<body>
+ <h1>Hello <bean:write name="user"/>!</h1>
+ <p>These are our latest offers:
+ <ul>
+ <logic:iterate name="latestProducts" id="prod">
+ <li><bean:write name="prod" property="name"/>
+ for <bean:write name="prod" property="price"/> Credits.
+ </logic:iterate>
+ </ul>
+</body>
+</html></pre></div>
+
+ <p>you can use this FTL file (use <code class="inline-code">ftl</code> file
+ extension instead of <code class="inline-code">jsp</code>):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><html>
+<head><title>Acmee Products International</title>
+<body>
+ <h1>Hello ${user}!</h1>
+ <p>These are our latest offers:
+ <ul>
+ <#list latestProducts as prod>
+ <li>${prod.name} for ${prod.price} Credits.
+ </#list>
+ </ul>
+</body>
+</html></pre></div>
+
+ <div class="callout warning">
+ <strong class="callout-label">Warning!</strong>
+
+ <p>In FreeMarker <code class="inline-code"><html:form
+ action="/query"><em class="code-color">...</em></html:form></code>
+ is just static text, so it is printed to the output as is, like
+ any other XML or HTML markup. JSP tags are just FreeMarker
+ directives, nothing special, so you <em>use FreeMarker
+ syntax</em> for calling them, not JSP syntax:
+ <code class="inline-code"><@html.form
+ action="/query"><em class="code-color">...</em></@html.form></code>.
+ Note that in the FreeMarker syntax you <em>don't use
+ <code class="inline-code">${<em class="code-color">...</em>}</code> in
+ parameters</em> as in JSP, and you <em>don't quote the
+ parameter values</em>. So this is
+ <em>WRONG</em>:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#-- WRONG: -->
+<@my.jspTag color="${aVariable}" name="aStringLiteral"
+ width="100" height=${a+b} /></pre></div>
+
+ <p>and this is good:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#-- Good: -->
+<@my.jspTag color=aVariable name="aStringLiteral"
+ width=100 height=a+b /></pre></div>
+ </div>
+
+
+ <p>In both templates, when you refer to <code class="inline-code">user</code>
+ and <code class="inline-code">latestProduct</code>, it will first try to find a
+ variable with that name that was created in the template (like
+ <code class="inline-code">prod</code>; if you master JSP: a page scope attribute).
+ If that fails, it will try to look up an attribute with that name in
+ the <code class="inline-code">HttpServletRequest</code>, and if it is not there
+ then in the <code class="inline-code">HttpSession</code>, and if it still doesn't
+ find it then in the <code class="inline-code">ServletContext</code>. In the case
+ of FTL this works because <code class="inline-code">FreemarkerServlet</code>
+ builds the data-model from the attributes of the mentioned 3
+ objects. That is, in this case the root hash is not a
+ <code class="inline-code">java.util.Map</code> (as it was in some example codes in
+ this manual), but
+ <code class="inline-code">ServletContext</code>+<code class="inline-code">HttpSession</code>+<code class="inline-code">HttpServletRequest</code>;
+ FreeMarker is pretty flexible about what the data-model is. So if
+ you want to put variable <code class="inline-code">"name"</code> into the
+ data-model, then you call
+ <code class="inline-code">servletRequest.setAttribute("name", "Fred")</code>; this
+ is the logic of Model 2, and FreeMarker adapts itself to it.</p>
+
+ <p><code class="inline-code">FreemarkerServlet</code> also puts 3 hashes into
+ the data-model, by which you can access the attributes of the 3
+ objects directly. The hash variables are:
+ <code class="inline-code">Request</code>, <code class="inline-code">Session</code>,
+ <code class="inline-code">Application</code> (corresponds to
+ <code class="inline-code">ServletContext</code>). It also exposes another hash
+ named <code class="inline-code">RequestParameters</code> that provides access to
+ the parameters of the HTTP request.</p>
+
+ <p><code class="inline-code">FreemarkerServlet</code> has various init-params.
+ It can be set up to load templates from an arbitrary directory, from
+ the classpath, or relative to the Web application directory. You can
+ set the charset used for templates, the default locale used by
+ templates, what object wrapper do you want to use, etc.</p>
+
+ <p><code class="inline-code">FreemarkerServlet</code> is easily tailored to
+ special needs through subclassing. Say, if you need to have
+ additional variables available in your data-model for all templates,
+ subclass the servlet and override the
+ <code class="inline-code">preTemplateProcess()</code> method to shove any
+ additional data you need into the model before the template gets
+ processed. Or subclass the servlet, and set these globally available
+ variables as <a href="pgui_config_sharedvariables.html">shared
+ variables</a> in the <code class="inline-code">Configuration</code>.</p>
+
+ <p>For more information please read the Java API documentation of
+ the class.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="pgui_misc_servlet_include">Including content from other web application
+ resources</h2>
+
+
+
+
+
+
+
+
+
+
+ <p>You can use the <code class="inline-code"><@include_page
+ path="..."/></code> custom directive provided by the
+ <code class="inline-code">FreemarkerServlet</code> (since 2.3.15) to include the
+ contents of another web application resource into the output; this
+ is often useful to integrate output of JSP pages (living alongside
+ the FreeMarker templates in the same web server) into the FreeMarker
+ template output. Using:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><@include_page path="path/to/some.jsp"/></pre></div>
+
+ <p>is identical to using this tag in JSP:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><jsp:include page="path/to/some.jsp"></pre></div>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p><code class="inline-code"><@include_page ...></code> is not to be
+ confused with <code class="inline-code"><#include ...></code>, as the last
+ is for including FreeMarker templates without involving the
+ Servlet container. An <code class="inline-code"><#include ...></code>-ed
+ template shares the template processing state with the including
+ template, such as the data-model and the template-language
+ variables, while <code class="inline-code"><@include_page ...></code>
+ starts an independent HTTP request processing.</p>
+ </div>
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>Some Web Application Frameworks provide their own solution
+ for this, in which case you possibly should use that instead. Also
+ some Web Application Frameworks don't use
+ <code class="inline-code">FreemarkerServlet</code>, so
+ <code class="inline-code">include_page</code> is not available.</p>
+ </div>
+
+
+ <p>The path can be relative or absolute. Relative paths are
+ interpreted relative to the URL of the current HTTP request (one
+ that triggered the template processing), while absolute paths are
+ absolute in the current servlet context (current web application).
+ You can not include pages from outside the current web application.
+ Note that you can include any page, not just a JSP page; we just
+ used page with path ending in <code class="inline-code">.jsp</code> as an
+ illustration.</p>
+
+ <p>In addition to the <code class="inline-code">path</code> parameter, you can
+ also specify an optional parameter named
+ <code class="inline-code">inherit_params</code> with a boolean value (defaults to
+ true when not specified) that specifies whether the included page
+ will see the HTTP request parameters of the current request or
+ not.</p>
+
+ <p>Finally, you can specify an optional parameter named
+ <code class="inline-code">params</code> that specifies new request parameters that
+ the included page will see. In case inherited parameters are passed
+ too, the values of specified parameters will get prepended to the
+ values of inherited parameters of the same name. The value of
+ <code class="inline-code">params</code> must be a hash, with each value in it
+ being either a string, or a sequence of strings (if you need
+ multivalued parameters). Here's a full example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><@include_page path="path/to/some.jsp" inherit_params=true params={"foo": "99", "bar": ["a", "b"]}/></pre></div>
+
+ <p>This will include the page
+ <code class="inline-code">path/to/some.jsp</code>, pass it all request parameters
+ of the current request, except for "foo" and "bar", which will be
+ set to "99" and multi-value of "a", "b", respectively. In case the
+ original request already had values for these parameters, the new
+ values will be prepended to the existing values. I.e. if "foo" had
+ values "111" and "123", then it will now have values "99", "111",
+ "123".</p>
+
+ <p><span class="marked-for-programmers">It is in fact possible to pass
+ non-string values for parameter values within
+ <code class="inline-code">params</code>. Such a value will be converted to a
+ suitable Java object first (i.e. a Number, a Boolean, a Date, etc.),
+ and then its Java <code class="inline-code">toString()</code> method will be used
+ to obtain the string value. It is better to not rely on this
+ mechanism, though, and instead explicitly ensure that parameter
+ values that aren't strings are converted to strings on the template
+ level where you have control over formatting using the
+ <code class="inline-code">?string</code> and <code class="inline-code">?c</code> built-ins.
+ </span></p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_63">Using JSP custom tags in FTL</h2>
+
+
+
+
+
+
+
+
+ <p><code class="inline-code">FreemarkerServlet</code> puts the
+ <code class="inline-code">JspTaglibs</code> hash into the data-model, which you
+ can use to access JSP taglibs. The JSP custom tags will be
+ accessible as plain user-defined directives, and the custom EL
+ functions (since FreeMarker 2.3.22) as methods. For example, for
+ this JSP file:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><%@ page contentType="text/html;charset=ISO-8859-2" language="java"%>
+<%@ taglib prefix="e" uri="/WEB-INF/example.tld" %>
+<%@ taglib prefix="oe" uri="/WEB-INF/other-example.tld" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+
+<%-- Custom JSP tags and functions: --%>
+
+<e:someTag numParam="123" boolParam="true" strParam="Example" anotherParam="${someVar}">
+ ...
+</e:someTag>
+
+<oe:otherTag />
+
+${e:someELFunction(1, 2)}
+
+
+<%-- JSTL: --%>
+
+<c:if test="${foo}">
+ Do this
+</c:if>
+
+<c:choose>
+ <c:when test="${x == 1}">
+ Do this
+ </c:when>
+ <c:otherwise>
+ Do that
+ </c:otherwise>
+</c:choose>
+
+<c:forEach var="person" items="${persons}">
+ ${person.name}
+</c:forEach>
+
+${fn:trim(bar)}</pre></div>
+
+ <p>the about equivalent FTL is:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign e=JspTaglibs["/WEB-INF/example.tld"]>
+<#assign oe=JspTaglibs["/WEB-INF/other-example.tld"]>
+
+<#-- Custom JSP tags and functions: --#>
+
+<@e.someTag numParam=123 boolParam=true strParam="Example" anotherParam=someVar>
+ ...
+</@e.someTag>
+
+<@oe.otherTag />
+
+${e.someELFunction(1, 2)}
+
+
+<#-- JSTL - Instead, use native FTL constructs: -->
+
+<#if foo>
+ Do this
+</#if>
+
+<#if x == 1>
+ Do this
+<#else>
+ Do that
+</#if>
+
+<#list persons as person>
+ ${person.name}
+</#list>
+
+${bar?trim}</pre></div>
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p>Parameter values don't use quotation and
+ <code class="inline-code">"${<em class="code-color">...</em>}"</code> like in
+ JSP. See more explanation later.</p>
+ </div>
+
+
+ <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p><code class="inline-code">JspTaglibs</code> is not a core FreeMarker
+ feature; it only exists when the template is called through the
+ <code class="inline-code">FreemarkerServlet</code>. That's because JSP
+ tags/functions assume a servlet environment (FreeMarker doesn't),
+ plus some Servlet concepts have to be emulated in the special
+ FreeMarker data-model that <code class="inline-code">FreemarkerServlet</code>
+ builds. Many modern frameworks use FreeMarker on a pure way, not
+ through <code class="inline-code">FreemarkerServlet</code>.</p>
+ </div>
+
+
+ <p>Since JSP custom tags are written to operate in JSP
+ environment, they assume that variables (often referred as
+ "beans" in JSP world) are stored in 4 scopes: page
+ scope, request scope, session scope and application scope. FTL has
+ no such notation (the 4 scopes), but
+ <code class="inline-code">FreemarkerServlet</code> provides emulated JSP
+ environment for the custom JSP tags, which maintains correspondence
+ between the "beans" of JSP scopes and FTL variables.
+ For the custom JSP tags, the request, session and application scopes
+ are exactly the same as with real JSP: the attributes of the
+ <code class="inline-code">javax.servlet.ServletContext</code>,
+ <code class="inline-code">HttpSession</code> and <code class="inline-code">ServletRequest</code>
+ objects. From the FTL side you see these 3 scopes together as the
+ data-model, as it was explained earlier. The page scope corresponds
+ to the FTL global variables (see the <a href="ref_directive_global.html#ref.directive.global"><code>global</code>
+ directive</a>). That is, if you create a variable with the
+ <code class="inline-code">global</code> directive, it will be visible for the
+ custom tags as page scope variable through the emulated JSP
+ environment. Also, if a JSP-tag creates a new page scope variable,
+ the result will be the same as if you create a variable with the
+ <code class="inline-code">global</code> directive. Note that the variables in the
+ data-model are not visible as page-scope attributes for the JSP
+ tags, despite that they are globally visible, since the data-model
+ corresponds to the request, session and application scopes, not the
+ page-scope.</p>
+
+ <p>On JSP pages you quote all attribute values, it does not mater
+ if the type of the parameter is string or boolean or number. But
+ since custom tags are accessible in FTL templates as user-defined
+ FTL directives, you have to use the FTL syntax rules inside the
+ custom tags, not the JSP rules. So when you specify the value of an
+ "attribute", then on the right side of the
+ <code class="inline-code">=</code> there is an <a href="dgui_template_exp.html">FTL expression</a>. Thus,
+ <em>you must not quote boolean and numerical parameter
+ values</em> (e.g. <code class="inline-code"><@tiles.insert
+ page="/layout.ftl" flush=true/></code>), or they are
+ interpreted as string values, and this will cause a type mismatch
+ error when FreeMarker tries to pass the value to the custom tag that
+ expects non-string value. Also note that, naturally, you can use any
+ FTL expression as attribute value, such as variables, calculated
+ values, etc. (e.g. <code class="inline-code"><@tiles.insert page=layoutName
+ flush=foo && bar/></code>).</p>
+
+ <p>FreeMarker does not rely on the JSP support of the servlet
+ container in which it is run when it uses JSP taglibs since it
+ implements its own lightweight JSP runtime environment. There is
+ only one small detail to pay attention to: to enable the FreeMarker
+ JSP runtime environment to dispatch events to JSP taglibs that
+ register event listeners in their TLD files, you should add this to
+ the <code class="inline-code">WEB-INF/web.xml</code> of your Web
+ application:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified"><listener>
+ <listener-class>freemarker.ext.jsp.EventForwarding</listener-class>
+</listener></pre></div>
+
+ <p>Note that you can use JSP taglibs with FreeMarker even if the
+ servlet container has no native JSP support, just make sure that the
+ <code class="inline-code">javax.servlet.jsp.*</code> packages for JSP 2.0 (or
+ later) are available to your Web application.</p>
+
+ <p>As of this writing, JSP features up to JSP 2.1 are
+ implemented, except the "tag files" feature of JSP 2 (i.e., custom
+ JSP tags <em>implemented</em> in JSP language). The tag
+ files had to be compiled to Java classes to be usable under
+ FreeMarker.</p>
+
+ <p><code class="inline-code">JspTaglibs[<em class="code-color">uri</em>]</code>
+ will have to find the TLD for the URI specified, just like JSP's
+ <code class="inline-code">@taglib</code> directive has to. For this, it implements
+ the TLD discovery mechanism described in the JSP specification. See
+ more there, but in a nutshell, it searches TLD-s in
+ <code class="inline-code">WEB-INF/web.xml</code> <code class="inline-code">taglib</code>
+ elements, at <code class="inline-code">WEB-INF/**/*.tld</code>, and in
+ <code class="inline-code">WEB-INF/lib/*.{jar,zip}/META-INF/**/*.tld</code>.
+ Additionally, it can discover TLD-s that are visible for the class
+ loader even if they are outside the WAR structure, when you set that
+ up with the <code class="inline-code">MetaInfTldSources</code> and/or
+ <code class="inline-code">ClasspathTlds</code>
+ <code class="inline-code">FreemarkerServlet</code> init-params (since 2.3.22). See
+ the Java API documentation of <code class="inline-code">FreemarkerServlet</code>
+ for the description of these. It's also possible to set these from
+ Java system properties, which can be handy when you want to change
+ these in the Eclipse run configuration without modifying the
+ <code class="inline-code">web.xml</code>; again, see the
+ <code class="inline-code">FreemarkerServlet</code> API docs.
+ <code class="inline-code">FreemarkerServlet</code> also recognizes the
+ <code class="inline-code">org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern</code>
+ servlet context attribute, and adds the entries from it to
+ <code class="inline-code">MetaInfTldSources</code>.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_64">Embed FTL into JSP pages</h2>
+
+
+
+
+ <p>There is a taglib that allows you to put FTL fragments into
+ JSP pages. The embedded FTL fragment can access the attributes
+ (Beans) of the 4 JSP scopes. You can find a working example and the
+ taglib in the FreeMarker distribution.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_misc_logging.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_misc_secureenv.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_misc_var.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_misc_var.html b/builds/2.3.26-nightly/pgui_misc_var.html
new file mode 100644
index 0000000..2d36821
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_misc_var.html
@@ -0,0 +1,113 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Variables, scopes - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Variables, scopes">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_misc_var.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_misc_var.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_misc.html"><span itemprop="name">Miscellaneous</span></a></li><li class="step-3" itemprop="it
emListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_misc_var.html"><span itemprop="name">Variables, scopes</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","Miscellaneous","Variables, scopes"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_misc.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_misc_charset.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_misc_var" itemprop="headline">Variables, scopes</h1>
+</div></div><p>This chapter explains what happens when a template tries to
+ access a variable, and how the variables are stored.</p><p>When you call <code class="inline-code">Template.process</code> it will
+ internally create an <code class="inline-code">Environment</code> object that will
+ be in use until <code class="inline-code">process</code> returns. This object stores
+ the runtime state of template processing. Among other things, it
+ stores the variables created by the template with directives like
+ <code class="inline-code">assign</code>, <code class="inline-code">macro</code>,
+ <code class="inline-code">local</code> or <code class="inline-code">global</code>. It never tries
+ to modify the data-model object that you pass to the
+ <code class="inline-code">process</code> call, nor does it create or replace shared
+ variables stored in the configuration.</p><p>When you try to read a variable, FreeMarker will seek the
+ variable in this order, and stops when it finds a variable with the
+ right name:</p><div class="orderedlist"><ol type="1">
+ <li>
+ <p>In the Environment:</p>
+
+ <div class="orderedlist"><ol type="1">
+ <li>
+ <p>If you are in a loop, in the set of loop variables. Loop
+ variables are the variables created by directives like
+ <code class="inline-code">list</code>.</p>
+ </li>
+
+ <li>
+ <p>If you are inside a macro, in the local variable set of
+ the macro. Local variables can be created with the
+ <code class="inline-code">local</code> directive. Also, the parameters of
+ macros are local variables.</p>
+ </li>
+
+ <li>
+ <p>In the current <a href="dgui_misc_namespace.html">namespace</a>. You can put
+ variables into a namespace with the <code class="inline-code">assign</code>
+ directive.</p>
+ </li>
+
+ <li>
+ <p>In the set of variables created with
+ <code class="inline-code">global</code> directive. FTL handles these
+ variables as if they were normal members of the data-model.
+ That is, they are visible in all namespaces, and you can
+ access them as if they would be in the data-model.</p>
+ </li>
+ </ol></div>
+ </li>
+
+ <li>
+ <p>In the data-model object you have passed to the
+ <code class="inline-code">process</code> method</p>
+ </li>
+
+ <li>
+ <p>In the set of shared variables stored in the
+ <code class="inline-code">Configuration</code></p>
+ </li>
+ </ol></div><p>In practice, from the viewpoint of template authors these 6
+ layers are only 4 layers, since from that viewpoint the last 3 layers
+ (variables created with <code class="inline-code">global</code>, the actual
+ data-model object, shared variables) together constitute the set of
+ global variables.</p><p>Note that it is possible to get variables from a specific layer
+ in FTL with <a href="ref_specvar.html">special
+ variables</a>.</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_misc.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_misc_charset.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_misc_xml_legacy.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_misc_xml_legacy.html b/builds/2.3.26-nightly/pgui_misc_xml_legacy.html
new file mode 100644
index 0000000..6adc019
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_misc_xml_legacy.html
@@ -0,0 +1,505 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-section">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Legacy XML wrapper implementation - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Legacy XML wrapper implementation">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_misc_xml_legacy.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_misc_xml_legacy.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_misc.html"><span itemprop="name">Miscellaneous</span></a></li><li class="step-3" itemprop="it
emListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_misc_xml_legacy.html"><span itemprop="name">Legacy XML wrapper implementation</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","Miscellaneous","Legacy XML wrapper implementation"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_misc_secureenv.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_misc_ant.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-section1" id="pgui_misc_xml_legacy" itemprop="headline">Legacy XML wrapper implementation</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Page Contents</div>
+<ul><li><a class="page-menu-link" href="#autoid_65" data-menu-target="autoid_65">TemplateScalarModel</a></li><li><a class="page-menu-link" href="#autoid_66" data-menu-target="autoid_66">TemplateCollectionModel</a></li><li><a class="page-menu-link" href="#autoid_67" data-menu-target="autoid_67">TemplateSequenceModel</a></li><li><a class="page-menu-link" href="#autoid_68" data-menu-target="autoid_68">TemplateHashModel</a></li><li><a class="page-menu-link" href="#autoid_69" data-menu-target="autoid_69">TemplateMethodModel</a></li><li><a class="page-menu-link" href="#autoid_70" data-menu-target="autoid_70">Namespace handling</a></li></ul> </div> <div class="callout note">
+ <strong class="callout-label">Note:</strong>
+
+ <p><em>The legacy XML wrapper is deprecated.</em>
+ FreeMarker 2.3 has introduced support for a new XML processing
+ model. To support this, a new XML wrapper package was introduced,
+ <code class="inline-code">freemarker.ext.dom</code>. For new usage, we encourage
+ you to use that. It is documented in the part <a href="xgui.html">XML Processing Guide</a>.</p>
+ </div>
+<p>The class <code class="inline-code">freemarker.ext.xml.NodeListModel</code>
+ provides a template model for wrapping XML documents represented as
+ node trees. Every node list can contain zero or more XML nodes
+ (documents, elements, texts, processing instructions, comments, entity
+ references, CDATA sections, etc.). The node list implements the
+ following template model interfaces with the following
+ semantics:</p>
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_65">TemplateScalarModel</h2>
+
+
+ <p>When used as a scalar, the node list will render the XML
+ fragment that represents its contained nodes. This makes it handy
+ for use in XML-to-XML transforming templates.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_66">TemplateCollectionModel</h2>
+
+
+ <p>When used as a collection with <code class="inline-code">list</code>
+ directive, it will simply enumerate its nodes. Every node will be
+ returned as a new node list consisting of a single node.</p>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_67">TemplateSequenceModel</h2>
+
+
+ <p>When used as a sequence, it will return the i-th node as a new
+ node list consisting of the single requested node. I.e. to return
+ the 3rd <code class="inline-code"><chapter></code> element of the
+ <code class="inline-code"><book></code> element, you'd use the following
+ (note indexes are zero-based):</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign thirdChapter = xmldoc.book.chapter[2]></pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_68">TemplateHashModel</h2>
+
+
+ <p>When used as a hash, it is basically used to traverse
+ children. That is, if you have a node list named
+ <code class="inline-code">book</code> that wraps an element node with several
+ chapters, then the <code class="inline-code">book.chapter</code> will yield a node
+ list with all chapter elements of that book element. The at sign is
+ used to refer to attributes: <code class="inline-code">book.@title</code> yields a
+ node list with a single attribute node, that is the title attribute
+ of the book element.</p>
+
+ <p>It is important to realize the consequence that, for example,
+ if <code class="inline-code">book</code> has no <code class="inline-code">chapter</code>-s then
+ <code class="inline-code">book.chapter</code> is an empty sequence, so
+ <code class="inline-code">xmldoc.book.chapter??</code> will
+ <em>not</em> be <code class="inline-code">false</code>, it will be
+ always <code class="inline-code">true</code>! Similarly,
+ <code class="inline-code">xmldoc.book.somethingTotallyNonsense??</code> will not
+ be <code class="inline-code">false</code> either. To check if there was no
+ children found, use <code class="inline-code">xmldoc.book.chapter?size ==
+ 0</code>.</p>
+
+ <p>The hash defines several "magic keys" as well. All these keys
+ start with an underscore. The most notable is the
+ <code class="inline-code">_text</code> key which retrieves the text of the node:
+ <code class="inline-code">${book.@title._text}</code> will render the value of the
+ attribute into the template. Similarly, <code class="inline-code">_name</code>
+ will retrieve the name of the element or attribute.
+ <code class="inline-code">*</code> or <code class="inline-code">_allChildren</code> returns all
+ direct children elements of all elements in the node list, while
+ <code class="inline-code">@*</code> or <code class="inline-code">_allAttributes</code> returns
+ all attributes of the elements in the node list. There are many more
+ such keys; here's a detailed summary of all the hash keys:</p>
+
+ <div class="table-responsive">
+ <table class="table">
+
+ <thead>
+ <tr>
+ <th>Key name</th>
+
+
+ <th>Evaluates to</th>
+
+ </tr>
+
+ </thead>
+
+
+ <tbody>
+ <tr>
+ <td><code class="inline-code">*</code> or <code class="inline-code">_children</code></td>
+
+
+ <td>all direct element children of current nodes
+ (non-recursive). Applicable to element and document
+ nodes.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">@*</code> or
+ <code class="inline-code">_attributes</code></td>
+
+
+ <td>all attributes of current nodes. Applicable to elements
+ only.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">@<em class="code-color">attributeName</em></code></td>
+
+
+ <td>named attributes of current nodes. Applicable to elements,
+ doctypes and processing instructions. On doctypes it supports
+ attributes <code class="inline-code">publicId</code>,
+ <code class="inline-code">systemId</code> and
+ <code class="inline-code">elementName</code>. On processing instructions, it
+ supports attributes <code class="inline-code">target</code> and
+ <code class="inline-code">data</code>, as well as any other attribute name
+ specified in data as <code class="inline-code">name="value"</code> pair. The
+ attribute nodes for doctype and processing instruction are
+ synthetic, and as such have no parent. Note, however that
+ <code class="inline-code">@*</code> does NOT operate on doctypes or
+ processing instructions.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">_ancestor</code></td>
+
+
+ <td>all ancestors up to root element (recursive) of current
+ nodes. Applicable to same node types as
+ <code class="inline-code">_parent</code>.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">_ancestorOrSelf</code></td>
+
+
+ <td>all ancestors of current nodes plus current nodes.
+ Applicable to same node types as
+ <code class="inline-code">_parent</code>.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">_cname</code></td>
+
+
+ <td>the canonical names of current nodes (namespace URI +
+ local name), one string per node (non-recursive). Applicable
+ to elements and attributes</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">_content</code></td>
+
+
+ <td>the complete content of current nodes, including children
+ elements, text, entity references, and processing instructions
+ (non-recursive). Applicable to elements and documents.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">_descendant</code></td>
+
+
+ <td>all recursive descendant element children of current
+ nodes. Applicable to document and element nodes.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">_descendantOrSelf</code></td>
+
+
+ <td>all recursive descendant element children of current nodes
+ plus current nodes. Applicable to document and element
+ nodes.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">_document</code></td>
+
+
+ <td>all documents the current nodes belong to. Applicable to
+ all nodes except text.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">_doctype</code></td>
+
+
+ <td>doctypes of the current nodes. Applicable to document
+ nodes only.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">_filterType</code></td>
+
+
+ <td>is a filter-by-type template method model. When called, it
+ will yield a node list that contains only those current nodes
+ whose type matches one of types passed as argument. You should
+ pass arbitrary number of strings to this method containing the
+ names of types to keep. Valid type names are: "attribute",
+ "cdata", "comment", "document", "documentType", "element",
+ "entity", "entityReference", "processingInstruction",
+ "text".</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">_name</code></td>
+
+
+ <td>the names of current nodes, one string per node
+ (non-recursive). Applicable to elements and attributes
+ (returns their local names), entities, processing instructions
+ (returns its target), doctypes (returns its public ID)</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">_nsprefix</code></td>
+
+
+ <td>the namespace prefixes of current nodes, one string per
+ node (non-recursive). Applicable to elements and
+ attributes</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">_nsuri</code></td>
+
+
+ <td>the namespace URIs of current nodes, one string per node
+ (non-recursive). Applicable to elements and attributes</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">_parent</code></td>
+
+
+ <td>parent elements of current nodes. Applicable to element,
+ attribute, comment, entity, processing instruction.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">_qname</code></td>
+
+
+ <td>the qualified names of current nodes in
+ <code class="inline-code">[namespacePrefix:]localName</code> form, one
+ string per node (non-recursive). Applicable to elements and
+ attributes</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">_registerNamespace(prefix, uri)</code></td>
+
+
+ <td>register a XML namespace with the specified prefix and URI
+ for the current node list and all node lists that are derived
+ from the current node list. After registering, you can use the
+ <code class="inline-code">nodelist["prefix:localname"]</code> or
+ <code class="inline-code">nodelist["@prefix:localname"]</code> syntaxes to
+ reach elements and attributes whose names are
+ namespace-scoped. Note that the namespace prefix need not
+ match the actual prefix used by the XML document itself since
+ namespaces are compared solely by their URI.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">_text</code></td>
+
+
+ <td>the text of current nodes, one string per node
+ (non-recursive). Applicable to elements, attributes, comments,
+ processing instructions (returns its data) and CDATA sections.
+ The reserved XML characters ('<' and '&') are not
+ escaped.</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">_type</code></td>
+
+
+ <td>Returns a node list containing one string per node
+ describing the type of the node. Possible node type names are:
+ "attribute", "cdata", "comment", "document", "documentType",
+ "element", "entity", "entityReference",
+ "processingInstruction", "text". If the type of the node is
+ unknown, returns "unknown".</td>
+
+ </tr>
+
+
+ <tr>
+ <td><code class="inline-code">_unique</code></td>
+
+
+ <td>a copy of the current nodes that keeps only the first
+ occurrence of every node, eliminating duplicates. Duplicates
+ can occur in the node list by applying uptree-traversals
+ <code class="inline-code">_parent</code>, <code class="inline-code">_ancestor</code>,
+ <code class="inline-code">_ancestorOrSelf</code>, and
+ <code class="inline-code">_document</code>. I.e.
+ <code class="inline-code">foo._children._parent</code> will return a node
+ list that has duplicates of nodes in foo - each node will have
+ the number of occurrences equal to the number of its children.
+ In these cases, use
+ <code class="inline-code">foo._children._parent._unique</code> to eliminate
+ duplicates. Applicable to all node types.</td>
+
+ </tr>
+
+
+ <tr>
+ <td>any other key</td>
+
+
+ <td>element children of current nodes with name matching the
+ key. This allows for convenience child traversal in
+ <code class="inline-code">book.chapter.title</code> style syntax. Note that
+ <code class="inline-code">nodeset.childname</code> is technically equivalent
+ to <code class="inline-code">nodeset("childname")</code>, but is both
+ shorter to write and evaluates faster. Applicable to document
+ and element nodes.</td>
+
+ </tr>
+
+ </tbody>
+
+ </table>
+ </div>
+
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_69">TemplateMethodModel</h2>
+
+
+ <p>When used as a method model, it returns a node list that is
+ the result of evaluating an XPath expression on the current contents
+ of the node list. For this feature to work, you must have the
+ <code class="inline-code">Jaxen</code> library in your classpath. For
+ example:</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template"><#assign firstChapter=xmldoc("//chapter[first()]")></pre></div>
+
+
+
+
+
+<h2 class="content-header header-section2" id="autoid_70">Namespace handling</h2>
+
+
+ <p>For purposes of traversal of children elements that have
+ namespace-scoped names, you can register namespace prefixes with the
+ node list. You can do it either in Java, calling the</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-unspecified">public void registerNamespace(String prefix, String uri);</pre></div>
+
+ <p>method, or inside a template using the</p>
+
+
+
+<div class="code-wrapper"><pre class="code-block code-template">${<em>nodelist</em>._registerNamespace(<em>prefix</em>, <em>uri</em>)}</pre></div>
+
+ <p>syntax. From there on, you can refer to children elements in
+ the namespace denoted by the particular URI through the
+ syntax</p>
+
+
+<pre class="metaTemplate"><code class="inline-code"><em class="code-color">nodelist</em>["<em class="code-color">prefix</em>:<em class="code-color">localName</em>"]</code></pre>
+
+
+ <p>and</p>
+
+
+<pre class="metaTemplate"><code class="inline-code"><em class="code-color">nodelist</em>["@<em class="code-color">prefix</em>:<em class="code-color">localName</em>"]</code></pre>
+
+
+ <p>as well as use these namespace prefixes in XPath expressions.
+ Namespaces registered with a node list are propagated to all node
+ lists that are derived from the original node list. Note also that
+ namespaces are matched by their URI only, so you can safely use a
+ prefix for a namespace inside your template that differs from the
+ prefix in the actual XML document - a prefix is just a local alias
+ for the URI both in the template and in the XML document.</p>
+ <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_misc_secureenv.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_misc_ant.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/52c070a9/builds/2.3.26-nightly/pgui_quickstart.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/pgui_quickstart.html b/builds/2.3.26-nightly/pgui_quickstart.html
new file mode 100644
index 0000000..b1188e8
--- /dev/null
+++ b/builds/2.3.26-nightly/pgui_quickstart.html
@@ -0,0 +1,54 @@
+<!doctype html>
+<!-- Generated by FreeMarker/Docgen from DocBook -->
+<html lang="en" class="page-type-chapter">
+<head prefix="og: http://ogp.me/ns#">
+<meta charset="utf-8">
+<title>Getting Started with the Java API - Apache FreeMarker Manual</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta name="format-detection" content="telephone=no">
+<meta property="og:site_name" content="Apache FreeMarker Manual">
+<meta property="og:title" content="Getting Started with the Java API">
+<meta property="og:locale" content="en_US">
+<meta property="og:url" content="http://freemarker.org/docs/pgui_quickstart.html">
+<link rel="canonical" href="http://freemarker.org/docs/pgui_quickstart.html">
+<link rel="icon" href="favicon.png" type="image/png">
+<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
+<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
+<script>
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ga('create', 'UA-55420501-1', 'auto');
+ga('send', 'pageview');
+</script>
+</head>
+<body itemscope itemtype="https://schema.org/Code">
+ <meta itemprop="url" content="http://freemarker.org/docs/">
+ <meta itemprop="name" content="Apache FreeMarker Manual">
+
+ <!--[if lte IE 9]>
+ <div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
+ <![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
+</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer's Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_quickstart.html"><span itemprop="name">Getting Started</span></a></li></ul><div class="bookma
rks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
+ <div class="content-wrapper">
+ <div id="table-of-contents-wrapper" class="col-left">
+ <script>var breadcrumb = ["Apache FreeMarker Manual","Programmer\'s Guide","Getting Started"];</script>
+ <script src="toc.js?1489402528979"></script>
+ <script src="docgen-resources/main.min.js?1489402528979"></script>
+ </div>
+<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_quickstart_createconfiguration.html"><span>Next</span></a></div><div class="title-wrapper">
+<h1 class="content-header header-chapter" id="pgui_quickstart" itemprop="headline">Getting Started</h1>
+</div></div><div class="page-menu">
+<div class="page-menu-title">Section Contents</div>
+<ul><li><a class="page-menu-link" href="pgui_quickstart_createconfiguration.html" data-menu-target="pgui_quickstart_createconfiguration">Create a configuration instance</a></li><li><a class="page-menu-link" href="pgui_quickstart_createdatamodel.html" data-menu-target="pgui_quickstart_createdatamodel">Create a data-model</a></li><li><a class="page-menu-link" href="pgui_quickstart_gettemplate.html" data-menu-target="pgui_quickstart_gettemplate">Get the template</a></li><li><a class="page-menu-link" href="pgui_quickstart_merge.html" data-menu-target="pgui_quickstart_merge">Merging the template with the data-model</a></li><li><a class="page-menu-link" href="pgui_quickstart_all.html" data-menu-target="pgui_quickstart_all">Putting all together</a></li></ul> </div><p>If you are new to FreeMarker, you should read at least the <a href="dgui_quickstart_basics.html">Template Author's Guide/Getting Started/Template + data-model = output</a> before this chapter.</p><div class="bottom-pagers-
wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_quickstart_createconfiguration.html"><span>Next</span></a></div></div></div></div> </div>
+ </div>
+<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
+Last generated:
+<time itemprop="dateModified" datetime="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
+<p class="copyright">
+� <span itemprop="copyrightYear">1999</span>\u20132017
+<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
+</div></div></div></body>
+</html>