freemarker-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ddek...@apache.org
Subject [26/50] incubator-freemarker-site git commit: 2.3.26-nightly docs preview
Date Mon, 13 Mar 2017 10:58:02 GMT
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&#39;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(&quot;section&quot;)</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&#39;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&#39;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&#39;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&#39;s possible that a node doesn&#39;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&#39;t use the returned
+          value.</p>
+
+          <p>XML: In the case of XML, it&#39;s the XML namespace URI (such as
+          <code class="inline-code">&quot;http://www.w3.org/1999/xhtml&quot;</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&#39;s possible that a node doesn&#39;t support
+          node type at all. In this case, the built-in evaluates to an
+          undefined value, so you can&#39;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">&quot;attribute&quot;</code>,
+          <code class="inline-code">&quot;text&quot;</code>, <code class="inline-code">&quot;comment&quot;</code>,
+          <code class="inline-code">&quot;document_fragment&quot;</code>,
+          <code class="inline-code">&quot;document&quot;</code>, <code class="inline-code">&quot;document_type&quot;</code>,
+          <code class="inline-code">&quot;element&quot;</code>, <code class="inline-code">&quot;entity&quot;</code>,
+          <code class="inline-code">&quot;entity_reference&quot;</code>,
+          <code class="inline-code">&quot;notation&quot;</code>, <code class="inline-code">&quot;pi&quot;</code>. Note that a
+          there is no <code class="inline-code">&quot;cdata&quot;</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&#39;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[&quot;..&quot;]</code>), however if there&#39;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>–2017
+<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&#39;s set
+          to 2.3.20 or higher and you are outside a string literal), this
+          built-in will return <code class="inline-code">&quot;INF&quot;</code>,
+          <code class="inline-code">&quot;-INF&quot;</code> and <code class="inline-code">&quot;NaN&quot;</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">&quot;a&quot;</code>,
+          <code class="inline-code">&quot;b&quot;</code>, <code class="inline-code">&quot;c&quot;</code>, etc. When reaching
+          <code class="inline-code">&quot;z&quot;</code>, it continues like <code class="inline-code">&quot;aa&quot;</code>,
+          <code class="inline-code">&quot;ab&quot;</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&#39;s no
+          upper limit. If the number is <code class="inline-code">0</code> or less or it
+          isn&#39;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">&lt;#list 1..30 as n&gt;${n?lower_abc} &lt;/#list&gt;</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">&lt;#assign testlist=[
+  0, 1, -1, 0.5, 1.5, -0.5,
+  -1.5, 0.25, -0.25, 1.75, -1.75]&gt;
+&lt;#list testlist as result&gt;
+    ${result} ?floor=${result?floor} ?ceiling=${result?ceiling} ?round=${result?round}
+&lt;/#list&gt;</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">&lt;#assign x=42&gt;
+${x}
+${x?string}  &lt;#-- the same as ${x} --&gt;
+${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">&lt;#setting number_format=&quot;currency&quot;&gt;
+&lt;#assign x=42&gt;
+${x}
+${x?string}  &lt;#-- the same as ${x} --&gt;
+${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">&lt;#assign x = 1.234&gt;
+${x?string[&quot;0&quot;]}
+${x?string[&quot;0.#&quot;]}
+${x?string[&quot;0.##&quot;]}
+${x?string[&quot;0.###&quot;]}
+${x?string[&quot;0.####&quot;]}
+
+${1?string[&quot;000.00&quot;]}
+${12.1?string[&quot;000.00&quot;]}
+${123.456?string[&quot;000.00&quot;]}
+
+${1.2?string[&quot;0&quot;]}
+${1.8?string[&quot;0&quot;]}
+${1.5?string[&quot;0&quot;]} &lt;-- 1.5, rounded towards even neighbor
+${2.5?string[&quot;0&quot;]} &lt;-- 2.5, rounded towards even neighbor
+
+${12345?string[&quot;0.##E0&quot;]}</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 &lt;-- 1.5, rounded towards even neighbor
+2 &lt;-- 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[&quot;bar&quot;]</code>, you could also write
+          <code class="inline-code">x?string.currency</code> as
+          <code class="inline-code">x?string[&quot;currency&quot;]</code>, but of course that wouldn&#39;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&#39;t allowed syntactically after the dot
+          operator.</p>
+
+          <p>For historical reasons, you could also write things like
+          <code class="inline-code">x?string(&quot;0.#&quot;)</code>, which does exactly the same as
+          <code class="inline-code">x?string[&quot;0.#&quot;]</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">&lt;#setting number_format=&quot;0.##&quot;&gt;
+${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">&lt;#setting number_format=&quot;,##0.00&quot;&gt;
+&lt;#setting locale=&quot;en_US&quot;&gt;
+US people write:     ${12345678}
+&lt;#setting locale=&quot;hu&quot;&gt;
+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">&quot;0.0;minus
+            0.0&quot;</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[&quot;,000&quot;]}
+Extended decimal format: ${10002.5?string[&quot;,000<strong>;; roundingMode=halfUp groupingSeparator=_</strong>&quot;]}</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">&quot;_&quot;</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&#39; 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">&quot;.&quot;</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">&quot;,&quot;</code> in
+                  <code class="inline-code">1,000,000</code>) Note that grouping is turned
+                  on by using <code class="inline-code">&quot;,&quot;</code> in the pattern, as shown
+                  in the earlier example. If it&#39;s not turned on, this option
+                  won&#39;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">&quot;E&quot;</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">&quot;0.##E0&quot;</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">&quot;-&quot;</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">&quot;%&quot;</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">&quot;‰&quot;</code> in <code class="inline-code">50021‰</code>). Only
+                  has visible effect if the pattern contains
+                  <code class="inline-code">‰</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&#39;s an error
+                  to specify a code that&#39;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">&#39;</code>) or normal quotation mark
+                (<code class="inline-code">&quot;</code>) , like
+                <code class="inline-code">exponentSeparator=&#39;*10^&#39;</code> or
+                <code class="inline-code">exponentSeparator=&quot;*10^&quot;</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=&#39;It&#39;&#39;s
+                infinite&#39;</code>, but you could also write
+                <code class="inline-code">infinity=&quot;It&#39;s infinite&quot;</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">&quot;_&quot;</code>
+                non-<code class="inline-code">&quot;$&quot;</code> characters. Thus, for example, both
+                <code class="inline-code">roundingMode=down</code> and
+                <code class="inline-code">roundingMode=&quot;down&quot;</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">&quot;A&quot;</code>,
+          <code class="inline-code">&quot;B&quot;</code>, <code class="inline-code">&quot;C&quot;</code>, …,
+          <code class="inline-code">&quot;AA&quot;</code>, <code class="inline-code">&quot;AB&quot;</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>–2017
+<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, &#39;-&#39;)</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">&lt;#assign seq = [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;f&#39;, &#39;g&#39;, &#39;h&#39;, &#39;i&#39;, &#39;j&#39;]&gt;
+
+&lt;#list seq?chunk(4) as row&gt;
+  &lt;#list row as cell&gt;${cell} &lt;/#list&gt;
+&lt;/#list&gt;
+
+&lt;#list seq?chunk(4, &#39;-&#39;) as row&gt;
+  &lt;#list row as cell&gt;${cell} &lt;/#list&gt;
+&lt;/#list&gt;</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">&quot;\xA0&quot;</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&#39;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!&#39;No item was
+          found&#39;</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">&lt;#assign colors = [&quot;red&quot;, &quot;green&quot;, &quot;blue&quot;]&gt;
+${colors?join(&quot;, &quot;)}</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">&quot;&quot;</code> (empty
+              string): The value used if the sequence contains no
+              items.</p>
+            </li>
+
+            <li>
+              <p>List ending, defaults to <code class="inline-code">&quot;&quot;</code> (empty
+              string): The value printed after the last value, if the list
+              sequence wasn&#39;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(&quot;, &quot;, &quot;-&quot;)}
+${[]?join(&quot;, &quot;, &quot;-&quot;)}
+
+${colors?join(&quot;, &quot;, &quot;-&quot;, &quot;.&quot;)}
+${[]?join(&quot;, &quot;, &quot;-&quot;, &quot;.&quot;)}</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&#39;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">&lt;#assign x = [&quot;red&quot;, 16, &quot;blue&quot;, &quot;cyan&quot;]&gt;
+&quot;blue&quot;: ${x?seq_contains(&quot;blue&quot;)?string(&quot;yes&quot;, &quot;no&quot;)}
+&quot;yellow&quot;: ${x?seq_contains(&quot;yellow&quot;)?string(&quot;yes&quot;, &quot;no&quot;)}
+16: ${x?seq_contains(16)?string(&quot;yes&quot;, &quot;no&quot;)}
+&quot;16&quot;: ${x?seq_contains(&quot;16&quot;)?string(&quot;yes&quot;, &quot;no&quot;)}</pre></div>
+
+          <p>The output will be:</p>
+
+          
+
+<div class="code-wrapper"><pre class="code-block code-output">&quot;blue&quot;: yes
+&quot;yellow&quot;: no
+16: yes
+&quot;16&quot;: no</pre></div>
+
+          <p>To find the value the built-in uses FreeMarker&#39;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&#39;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&#39;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&#39;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">&lt;#assign colors = [&quot;red&quot;, &quot;green&quot;, &quot;blue&quot;]&gt;
+${colors?seq_index_of(&quot;blue&quot;)}
+${colors?seq_index_of(&quot;red&quot;)}
+${colors?seq_index_of(&quot;purple&quot;)}</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&#39;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&#39;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">&lt;#assign names = [&quot;Joe&quot;, &quot;Fred&quot;, &quot;Joe&quot;, &quot;Susan&quot;]&gt;
+No 2nd param: ${names?seq_index_of(&quot;Joe&quot;)}
+-2: ${names?seq_index_of(&quot;Joe&quot;, -2)}
+-1: ${names?seq_index_of(&quot;Joe&quot;, -1)}
+ 0: ${names?seq_index_of(&quot;Joe&quot;, 0)}
+ 1: ${names?seq_index_of(&quot;Joe&quot;, 1)}
+ 2: ${names?seq_index_of(&quot;Joe&quot;, 2)}
+ 3: ${names?seq_index_of(&quot;Joe&quot;, 3)}
+ 4: ${names?seq_index_of(&quot;Joe&quot;, 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&#39;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&#39;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">&lt;#assign names = [&quot;Joe&quot;, &quot;Fred&quot;, &quot;Joe&quot;, &quot;Susan&quot;]&gt;
+No 2nd param: ${names?seq_last_index_of(&quot;Joe&quot;)}
+-2: ${names?seq_last_index_of(&quot;Joe&quot;, -2)}
+-1: ${names?seq_last_index_of(&quot;Joe&quot;, -1)}
+ 0: ${names?seq_last_index_of(&quot;Joe&quot;, 0)}
+ 1: ${names?seq_last_index_of(&quot;Joe&quot;, 1)}
+ 2: ${names?seq_last_index_of(&quot;Joe&quot;, 2)}
+ 3: ${names?seq_last_index_of(&quot;Joe&quot;, 3)}
+ 4: ${names?seq_last_index_of(&quot;Joe&quot;, 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">&lt;#assign ls = [&quot;whale&quot;, &quot;Barbara&quot;, &quot;zeppelin&quot;, &quot;aardvark&quot;, &quot;beetroot&quot;]?sort&gt;
+&lt;#list ls as i&gt;${i} &lt;/#list&gt;</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">&lt;#assign ls = [
+  {&quot;name&quot;:&quot;whale&quot;, &quot;weight&quot;:2000},
+  {&quot;name&quot;:&quot;Barbara&quot;, &quot;weight&quot;:53},
+  {&quot;name&quot;:&quot;zeppelin&quot;, &quot;weight&quot;:-200},
+  {&quot;name&quot;:&quot;aardvark&quot;, &quot;weight&quot;:30},
+  {&quot;name&quot;:&quot;beetroot&quot;, &quot;weight&quot;:0.3}
+]&gt;
+Order by name:
+&lt;#list ls?sort_by(&quot;name&quot;) as i&gt;
+- ${i.name}: ${i.weight}
+&lt;/#list&gt;
+
+Order by weight:
+&lt;#list ls?sort_by(&quot;weight&quot;) as i&gt;
+- ${i.name}: ${i.weight}
+&lt;/#list&gt;</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">&lt;#assign members = [
+    {&quot;name&quot;: {&quot;first&quot;: &quot;Joe&quot;, &quot;last&quot;: &quot;Smith&quot;}, &quot;age&quot;: 40},
+    {&quot;name&quot;: {&quot;first&quot;: &quot;Fred&quot;, &quot;last&quot;: &quot;Crooger&quot;}, &quot;age&quot;: 35},
+    {&quot;name&quot;: {&quot;first&quot;: &quot;Amanda&quot;, &quot;last&quot;: &quot;Fox&quot;}, &quot;age&quot;: 25}]&gt;
+Sorted by name.last:
+&lt;#list members?sort_by([&#39;name&#39;, &#39;last&#39;]) as m&gt;
+- ${m.name.last}, ${m.name.first}: ${m.age} years old
+&lt;/#list&gt;</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>–2017
+<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>


Mime
View raw message