blob: 91d8164aa924a6109e85cc51524c804ae66350c6 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_281) on Sun Jan 15 15:58:34 CET 2023 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>TruncateBuiltinAlgorithm (FreeMarker 2.3.32 API)</title>
<meta name="date" content="2023-01-15">
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="TruncateBuiltinAlgorithm (FreeMarker 2.3.32 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/TruncateBuiltinAlgorithm.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-all.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../freemarker/core/TemplateXMLOutputModel.html" title="class in freemarker.core"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../freemarker/core/UndefinedCustomFormatException.html" title="class in freemarker.core"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../index.html?freemarker/core/TruncateBuiltinAlgorithm.html" target="_top">Frames</a></li>
<li><a href="TruncateBuiltinAlgorithm.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">freemarker.core</div>
<h2 title="Class TruncateBuiltinAlgorithm" class="title">Class TruncateBuiltinAlgorithm</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>freemarker.core.TruncateBuiltinAlgorithm</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><a href="../../freemarker/core/DefaultTruncateBuiltinAlgorithm.html" title="class in freemarker.core">DefaultTruncateBuiltinAlgorithm</a></dd>
</dl>
<hr>
<br>
<pre>public abstract class <span class="typeNameLabel">TruncateBuiltinAlgorithm</span>
extends java.lang.Object</pre>
<div class="block">Used for implementing the "truncate" family of built-ins. There are several variations of the "truncate" built-ins,
each has a corresponding method here. See
<a href="../../freemarker/core/TruncateBuiltinAlgorithm.html#truncateM-java.lang.String-int-freemarker.template.TemplateModel-java.lang.Integer-freemarker.core.Environment-"><code>truncateM(String, int, TemplateModel, Integer, Environment)</code></a>
as the starting point.
<p>New methods may be added in later versions, whoever they won't be abstract for backward compatibility.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.3.29</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../freemarker/core/Configurable.html#setTruncateBuiltinAlgorithm-freemarker.core.TruncateBuiltinAlgorithm-"><code>Configurable.setTruncateBuiltinAlgorithm(TruncateBuiltinAlgorithm)</code></a></dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../freemarker/core/TruncateBuiltinAlgorithm.html#TruncateBuiltinAlgorithm--">TruncateBuiltinAlgorithm</a></span>()</code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>abstract <a href="../../freemarker/template/TemplateScalarModel.html" title="interface in freemarker.template">TemplateScalarModel</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/core/TruncateBuiltinAlgorithm.html#truncate-java.lang.String-int-freemarker.template.TemplateScalarModel-java.lang.Integer-freemarker.core.Environment-">truncate</a></span>(java.lang.String&nbsp;s,
int&nbsp;maxLength,
<a href="../../freemarker/template/TemplateScalarModel.html" title="interface in freemarker.template">TemplateScalarModel</a>&nbsp;terminator,
java.lang.Integer&nbsp;terminatorLength,
<a href="../../freemarker/core/Environment.html" title="class in freemarker.core">Environment</a>&nbsp;env)</code>
<div class="block">Corresponds to <code>?truncate(...)</code> in templates.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>abstract <a href="../../freemarker/template/TemplateScalarModel.html" title="interface in freemarker.template">TemplateScalarModel</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/core/TruncateBuiltinAlgorithm.html#truncateC-java.lang.String-int-freemarker.template.TemplateScalarModel-java.lang.Integer-freemarker.core.Environment-">truncateC</a></span>(java.lang.String&nbsp;s,
int&nbsp;maxLength,
<a href="../../freemarker/template/TemplateScalarModel.html" title="interface in freemarker.template">TemplateScalarModel</a>&nbsp;terminator,
java.lang.Integer&nbsp;terminatorLength,
<a href="../../freemarker/core/Environment.html" title="class in freemarker.core">Environment</a>&nbsp;env)</code>
<div class="block">Corresponds to <code>?truncate_c_m(...)</code> in templates.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>abstract <a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template">TemplateModel</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/core/TruncateBuiltinAlgorithm.html#truncateCM-java.lang.String-int-freemarker.template.TemplateModel-java.lang.Integer-freemarker.core.Environment-">truncateCM</a></span>(java.lang.String&nbsp;s,
int&nbsp;maxLength,
<a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template">TemplateModel</a>&nbsp;terminator,
java.lang.Integer&nbsp;terminatorLength,
<a href="../../freemarker/core/Environment.html" title="class in freemarker.core">Environment</a>&nbsp;env)</code>
<div class="block">Corresponds to <code>?truncate_c_m(...)</code> in templates.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>abstract <a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template">TemplateModel</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/core/TruncateBuiltinAlgorithm.html#truncateM-java.lang.String-int-freemarker.template.TemplateModel-java.lang.Integer-freemarker.core.Environment-">truncateM</a></span>(java.lang.String&nbsp;s,
int&nbsp;maxLength,
<a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template">TemplateModel</a>&nbsp;terminator,
java.lang.Integer&nbsp;terminatorLength,
<a href="../../freemarker/core/Environment.html" title="class in freemarker.core">Environment</a>&nbsp;env)</code>
<div class="block">Corresponds to <code>?truncate_m(...)</code> in templates.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>abstract <a href="../../freemarker/template/TemplateScalarModel.html" title="interface in freemarker.template">TemplateScalarModel</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/core/TruncateBuiltinAlgorithm.html#truncateW-java.lang.String-int-freemarker.template.TemplateScalarModel-java.lang.Integer-freemarker.core.Environment-">truncateW</a></span>(java.lang.String&nbsp;s,
int&nbsp;maxLength,
<a href="../../freemarker/template/TemplateScalarModel.html" title="interface in freemarker.template">TemplateScalarModel</a>&nbsp;terminator,
java.lang.Integer&nbsp;terminatorLength,
<a href="../../freemarker/core/Environment.html" title="class in freemarker.core">Environment</a>&nbsp;env)</code>
<div class="block">Corresponds to <code>?truncate_w(...)</code> in templates.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>abstract <a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template">TemplateModel</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/core/TruncateBuiltinAlgorithm.html#truncateWM-java.lang.String-int-freemarker.template.TemplateModel-java.lang.Integer-freemarker.core.Environment-">truncateWM</a></span>(java.lang.String&nbsp;s,
int&nbsp;maxLength,
<a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template">TemplateModel</a>&nbsp;terminator,
java.lang.Integer&nbsp;terminatorLength,
<a href="../../freemarker/core/Environment.html" title="class in freemarker.core">Environment</a>&nbsp;env)</code>
<div class="block">Corresponds to <code>?truncate_w_m(...)</code> in templates.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="TruncateBuiltinAlgorithm--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>TruncateBuiltinAlgorithm</h4>
<pre>public&nbsp;TruncateBuiltinAlgorithm()</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="truncateM-java.lang.String-int-freemarker.template.TemplateModel-java.lang.Integer-freemarker.core.Environment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>truncateM</h4>
<pre>public abstract&nbsp;<a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template">TemplateModel</a>&nbsp;truncateM(java.lang.String&nbsp;s,
int&nbsp;maxLength,
<a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template">TemplateModel</a>&nbsp;terminator,
java.lang.Integer&nbsp;terminatorLength,
<a href="../../freemarker/core/Environment.html" title="class in freemarker.core">Environment</a>&nbsp;env)
throws <a href="../../freemarker/template/TemplateException.html" title="class in freemarker.template">TemplateException</a></pre>
<div class="block">Corresponds to <code>?truncate_m(...)</code> in templates. This method decides automatically if it will truncate at
word boundary (see <a href="../../freemarker/core/TruncateBuiltinAlgorithm.html#truncateWM-java.lang.String-int-freemarker.template.TemplateModel-java.lang.Integer-freemarker.core.Environment-"><code>truncateWM(java.lang.String, int, freemarker.template.TemplateModel, java.lang.Integer, freemarker.core.Environment)</code></a>) or at character boundary (see <a href="../../freemarker/core/TruncateBuiltinAlgorithm.html#truncateCM-java.lang.String-int-freemarker.template.TemplateModel-java.lang.Integer-freemarker.core.Environment-"><code>truncateCM(java.lang.String, int, freemarker.template.TemplateModel, java.lang.Integer, freemarker.core.Environment)</code></a>). While it depends
on the implementation, the idea is that it should truncate at word boundary, unless that gives a too short
string, in which case it falls back to truncation at character duration.
<p>The terminator and the return value can be <a href="../../freemarker/core/TemplateMarkupOutputModel.html" title="interface in freemarker.core"><code>TemplateMarkupOutputModel</code></a> (FTL markup output type), not
just <code>String</code> (FTL string type), hence the "m" in the name.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>s</code> - The input string whose length need to be limited. The caller (the FreeMarker core normally) is
expected to guarantee that this won't be <code>null</code>.</dd>
<dd><code>maxLength</code> - The maximum length of the returned string, although the algorithm need not guarantee this strictly.
For example, if this is less than the length of the <code>terminator</code> string, then most algorithms
should still return the <code>terminator</code> string. Or, some sophisticated algorithm may counts in
letters differently depending on their visual width. The goal is usually to prevent unusually long
string values to ruin visual layout, while showing clearly to the user that the end of the string
was cut off. If the input string is not longer than the maximum length, then it should be returned
as is. The caller (the FreeMarker core normally) is expected to guarantee that this will be at
least 0.</dd>
<dd><code>terminator</code> - The string or markup to show at the end of the returned string if the string was actually truncated.
This can be <code>null</code>, in which case the default terminator of the algorithm will be used. It
can be an FTL string (a <a href="../../freemarker/template/TemplateScalarModel.html" title="interface in freemarker.template"><code>TemplateScalarModel</code></a>) of any length (including 0), or a
<a href="../../freemarker/core/TemplateMarkupOutputModel.html" title="interface in freemarker.core"><code>TemplateMarkupOutputModel</code></a> (typically HTML markup). If it's <a href="../../freemarker/core/TemplateMarkupOutputModel.html" title="interface in freemarker.core"><code>TemplateMarkupOutputModel</code></a>,
then the result is <a href="../../freemarker/core/TemplateMarkupOutputModel.html" title="interface in freemarker.core"><code>TemplateMarkupOutputModel</code></a> of the same output format as well, otherwise
it can remain <a href="../../freemarker/template/TemplateScalarModel.html" title="interface in freemarker.template"><code>TemplateScalarModel</code></a>. Note that the length of the terminator counts into the
result length that shouldn't be exceed (<code>maxLength</code>) (or at least the algorithm should make
an effort to avoid that).</dd>
<dd><code>terminatorLength</code> - The assumed length of the terminator. If this is <code>null</code> (and typically it is), then the method
decides the length of the terminator. If this is not <code>null</code>, then the method must pretend
that the terminator length is this. This can be used to specify the visual length of a terminator
explicitly, which can't always be decided well programmatically.</dd>
<dd><code>env</code> - The runtime environment from which this algorithm was called. The caller (the FreeMarker core
normally) is expected to guarantee that this won't be <code>null</code>.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The truncated text, which is either a <a href="../../freemarker/template/TemplateScalarModel.html" title="interface in freemarker.template"><code>TemplateScalarModel</code></a> (FTL string), or a
<a href="../../freemarker/core/TemplateMarkupOutputModel.html" title="interface in freemarker.core"><code>TemplateMarkupOutputModel</code></a>.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../freemarker/template/TemplateException.html" title="class in freemarker.template">TemplateException</a></code> - If anything goes wrong during truncating. It's unlikely that an implementation will need this though.</dd>
</dl>
</li>
</ul>
<a name="truncate-java.lang.String-int-freemarker.template.TemplateScalarModel-java.lang.Integer-freemarker.core.Environment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>truncate</h4>
<pre>public abstract&nbsp;<a href="../../freemarker/template/TemplateScalarModel.html" title="interface in freemarker.template">TemplateScalarModel</a>&nbsp;truncate(java.lang.String&nbsp;s,
int&nbsp;maxLength,
<a href="../../freemarker/template/TemplateScalarModel.html" title="interface in freemarker.template">TemplateScalarModel</a>&nbsp;terminator,
java.lang.Integer&nbsp;terminatorLength,
<a href="../../freemarker/core/Environment.html" title="class in freemarker.core">Environment</a>&nbsp;env)
throws <a href="../../freemarker/template/TemplateException.html" title="class in freemarker.template">TemplateException</a></pre>
<div class="block">Corresponds to <code>?truncate(...)</code> in templates.
Similar to <a href="../../freemarker/core/TruncateBuiltinAlgorithm.html#truncateM-java.lang.String-int-freemarker.template.TemplateModel-java.lang.Integer-freemarker.core.Environment-"><code>truncateM(String, int, TemplateModel, Integer, Environment)</code></a>, but only allows
an FTL string as terminator, and thence the return value is always an FTL string as well (not
<a href="../../freemarker/core/TemplateMarkupOutputModel.html" title="interface in freemarker.core"><code>TemplateMarkupOutputModel</code></a>).</div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../freemarker/template/TemplateException.html" title="class in freemarker.template">TemplateException</a></code></dd>
</dl>
</li>
</ul>
<a name="truncateW-java.lang.String-int-freemarker.template.TemplateScalarModel-java.lang.Integer-freemarker.core.Environment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>truncateW</h4>
<pre>public abstract&nbsp;<a href="../../freemarker/template/TemplateScalarModel.html" title="interface in freemarker.template">TemplateScalarModel</a>&nbsp;truncateW(java.lang.String&nbsp;s,
int&nbsp;maxLength,
<a href="../../freemarker/template/TemplateScalarModel.html" title="interface in freemarker.template">TemplateScalarModel</a>&nbsp;terminator,
java.lang.Integer&nbsp;terminatorLength,
<a href="../../freemarker/core/Environment.html" title="class in freemarker.core">Environment</a>&nbsp;env)
throws <a href="../../freemarker/template/TemplateException.html" title="class in freemarker.template">TemplateException</a></pre>
<div class="block">Corresponds to <code>?truncate_w(...)</code> in templates.
Same as <a href="../../freemarker/core/TruncateBuiltinAlgorithm.html#truncateWM-java.lang.String-int-freemarker.template.TemplateModel-java.lang.Integer-freemarker.core.Environment-"><code>truncateWM(String, int, TemplateModel, Integer, Environment)</code></a>, but only allows
an FTL string as terminator, and thence the return value is always an FTL string as well (not
<a href="../../freemarker/core/TemplateMarkupOutputModel.html" title="interface in freemarker.core"><code>TemplateMarkupOutputModel</code></a>).</div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../freemarker/template/TemplateException.html" title="class in freemarker.template">TemplateException</a></code></dd>
</dl>
</li>
</ul>
<a name="truncateWM-java.lang.String-int-freemarker.template.TemplateModel-java.lang.Integer-freemarker.core.Environment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>truncateWM</h4>
<pre>public abstract&nbsp;<a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template">TemplateModel</a>&nbsp;truncateWM(java.lang.String&nbsp;s,
int&nbsp;maxLength,
<a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template">TemplateModel</a>&nbsp;terminator,
java.lang.Integer&nbsp;terminatorLength,
<a href="../../freemarker/core/Environment.html" title="class in freemarker.core">Environment</a>&nbsp;env)
throws <a href="../../freemarker/template/TemplateException.html" title="class in freemarker.template">TemplateException</a></pre>
<div class="block">Corresponds to <code>?truncate_w_m(...)</code> in templates.
Similar to <a href="../../freemarker/core/TruncateBuiltinAlgorithm.html#truncateM-java.lang.String-int-freemarker.template.TemplateModel-java.lang.Integer-freemarker.core.Environment-"><code>truncateM(String, int, TemplateModel, Integer, Environment)</code></a>, but the
truncation should happen at word boundary (hence the "w"). That is, the truncation isn't allowed to truncate a
word. What counts as a word, is up to the implementation, but at least in <a href="../../freemarker/core/DefaultTruncateBuiltinAlgorithm.html" title="class in freemarker.core"><code>DefaultTruncateBuiltinAlgorithm</code></a>
words are the sections that are separated by whitespace (so punctuation doesn't separate words).</div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../freemarker/template/TemplateException.html" title="class in freemarker.template">TemplateException</a></code></dd>
</dl>
</li>
</ul>
<a name="truncateC-java.lang.String-int-freemarker.template.TemplateScalarModel-java.lang.Integer-freemarker.core.Environment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>truncateC</h4>
<pre>public abstract&nbsp;<a href="../../freemarker/template/TemplateScalarModel.html" title="interface in freemarker.template">TemplateScalarModel</a>&nbsp;truncateC(java.lang.String&nbsp;s,
int&nbsp;maxLength,
<a href="../../freemarker/template/TemplateScalarModel.html" title="interface in freemarker.template">TemplateScalarModel</a>&nbsp;terminator,
java.lang.Integer&nbsp;terminatorLength,
<a href="../../freemarker/core/Environment.html" title="class in freemarker.core">Environment</a>&nbsp;env)
throws <a href="../../freemarker/template/TemplateException.html" title="class in freemarker.template">TemplateException</a></pre>
<div class="block">Corresponds to <code>?truncate_c_m(...)</code> in templates.
Same as <a href="../../freemarker/core/TruncateBuiltinAlgorithm.html#truncateCM-java.lang.String-int-freemarker.template.TemplateModel-java.lang.Integer-freemarker.core.Environment-"><code>truncateCM(String, int, TemplateModel, Integer, Environment)</code></a>, but only allows
an FTL string as terminator, and thence the return value is always an FTL string as well (not markup).</div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../freemarker/template/TemplateException.html" title="class in freemarker.template">TemplateException</a></code></dd>
</dl>
</li>
</ul>
<a name="truncateCM-java.lang.String-int-freemarker.template.TemplateModel-java.lang.Integer-freemarker.core.Environment-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>truncateCM</h4>
<pre>public abstract&nbsp;<a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template">TemplateModel</a>&nbsp;truncateCM(java.lang.String&nbsp;s,
int&nbsp;maxLength,
<a href="../../freemarker/template/TemplateModel.html" title="interface in freemarker.template">TemplateModel</a>&nbsp;terminator,
java.lang.Integer&nbsp;terminatorLength,
<a href="../../freemarker/core/Environment.html" title="class in freemarker.core">Environment</a>&nbsp;env)
throws <a href="../../freemarker/template/TemplateException.html" title="class in freemarker.template">TemplateException</a></pre>
<div class="block">Corresponds to <code>?truncate_c_m(...)</code> in templates.
Similar to <a href="../../freemarker/core/TruncateBuiltinAlgorithm.html#truncateM-java.lang.String-int-freemarker.template.TemplateModel-java.lang.Integer-freemarker.core.Environment-"><code>truncateM(String, int, TemplateModel, Integer, Environment)</code></a>, but the
truncation should not prefer truncating at word boundaries over the closer approximation of the desired <code>maxLength</code>. Hence, we say that it truncates at character boundary (hence the "c").</div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../freemarker/template/TemplateException.html" title="class in freemarker.template">TemplateException</a></code></dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/TruncateBuiltinAlgorithm.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-all.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../freemarker/core/TemplateXMLOutputModel.html" title="class in freemarker.core"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../freemarker/core/UndefinedCustomFormatException.html" title="class in freemarker.core"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../index.html?freemarker/core/TruncateBuiltinAlgorithm.html" target="_top">Frames</a></li>
<li><a href="TruncateBuiltinAlgorithm.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>