-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathref_builtins_sequence.html
519 lines (300 loc) · 24.6 KB
/
ref_builtins_sequence.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
<!doctype html>
<html lang="en" class="page-type-section">
<head prefix="og: http://ogp.me/ns#">
<meta charset="utf-8">
<title>序列内建函数 - FreeMarker 手册</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="FreeMarker 手册">
<meta property="og:title" content="序列内建函数">
<meta property="og:locale" content="en_US">
<meta property="og:url" content="http://freemarker.org/docs/ref_builtins_sequence.html">
<link rel="canoical" 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="docgen-resources/docgen.min.css">
</head>
<body itemscope itemtype="https://schema.org/Code">
<meta itemprop="url" content="http://freemarker.org/docs/">
<meta itemprop="name" content="FreeMarker 手册">
<!--[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="http://freemarker.org/docs/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://sourceforge.net/p/freemarker/bugs/new/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="toc.html" class="navigation-header">Manual</a><div class="navigation-header"></div></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="toc.html"><span itemprop="name">FreeMarker 手册</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">模板语言参考 </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">内建函数参考</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">序列内建函数</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 = ["FreeMarker 手册","模板语言参考 ","内建函数参考","序列内建函数"];</script>
<script src="toc.js"></script>
<script src="docgen-resources/main.min.js"></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">序列内建函数</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>该内建函数从 FreeMarker 2.3.3 版本开始存在。</p>
</div>
<p>该内建函数将序列分隔为多个序列,长度为第一个参数给定的值
(比如 <code class="inline-code">mySeq?chunk(3)</code>)。结果是包含这些序列的一个序列。
最后一个序列可能比给定的长度要小,除非第二个参数也给定了
(比如 比如 <code class="inline-code">mySeq?chunk(3, '-')</code>),
这就是用来填充最后一个序列,以达到给定的长度。例如:</p>
<div class="code-wrapper"><pre class="code-block code-template"><#assign seq = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']>
<#list seq?chunk(4) as row>
<#list row as cell>${cell} </#list>
</#list>
<#list seq?chunk(4, '-') as row>
<#list row as cell>${cell} </#list>
</#list></pre></div>
<p>将会输出:</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>该内建函数通常在输出的序列中使用表格/柱状的格式。
当被用于HTML表格时,第二个参数通常是<code class="inline-code">"\xA0"</code>
(也就是不换行的空格代码,也就是我们所知的"nbsp"),
所以空TD的边界就不会不丢失。</p>
<p>第一个参数必须是一个数字,而且至少是1。如果这个数字不是整数,
那么它会被静默地去掉小数部分(也就是说3.1和3.9都会被规整为3)。
第二个参数可以是任意类型的值。</p>
<h2 class="content-header header-section2" id="ref_builtin_first">first</h2>
<p>序列的第一个子变量。如果序列为空,那么模板处理将会中止。</p>
<h2 class="content-header header-section2" id="ref_builtin_join">join</h2>
<p>使用给定的分隔符来连接序列中的项为一个独立的字符串,例如:</p>
<div class="code-wrapper"><pre class="code-block code-template"><#assign colors = ["red", "green", "blue"]>
${colors?join(", ")}</pre></div>
<p>将会输出:</p>
<div class="code-wrapper"><pre class="code-block code-output">red, green, blue</pre></div>
<p>序列中不是字符串的项会被转换为字符串,使用
<code class="inline-code">${<em class="code-color">...</em>}</code> 相同的转换规则
(当然这里不会应用自动转义)。</p>
<p><code class="inline-code">?join(<em class="code-color">...</em>)</code>
最多可以有3个参数:</p>
<div class="orderedlist"><ol type="1">
<li>
<p>分隔符,是必须的:插入到每一项中间的字符串</p>
</li>
<li>
<p>空值,默认是 <code class="inline-code">""</code> (空字符串):
如果序列为空,使用该值。</p>
</li>
<li>
<p>列表结尾,默认是 <code class="inline-code">""</code> (空字符串):
如果列表序列不为空,该值在最后一个值后面输出。</p>
</li>
</ol></div>
<p>所以 (这里 <code class="inline-code">[]</code> 意味着空序列):</p>
<div class="code-wrapper"><pre class="code-block code-template">${colors?join(", ", "-")}
${[]?join(", ", "-")}
${colors?join(", ", "-", ".")}
${[]?join(", ", "-", ".")}</pre></div>
<p>将会输出:</p>
<div class="code-wrapper"><pre class="code-block code-output">red, green, blue
-
red, green, blue.
-</pre></div>
<p class="programmers-note">来自Java的序列可能会包含
<code class="inline-code">null</code> 值。那些值会被该内建函数忽略,
就像它们从列表中被移除了。</p>
<h2 class="content-header header-section2" id="ref_builtin_last">last</h2>
<p>序列的最后一个子变量。如果序列为空,那么模板处理将会中止。</p>
<h2 class="content-header header-section2" id="ref_builtin_reverse">reverse</h2>
<p>序列的反序形式。</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>该内建函数从 FreeMarker 2.3.1 版本开始可用。
而在 2.3 版本中不存在。</p>
</div>
<div class="callout note">
<strong class="callout-label">Note:</strong>
<p><code class="inline-code">seq_</code> 前缀在该内建函数名字中是需要的,
用来和 <a href="ref_builtins_string.html#ref_builtin_contains"><code>contains</code>
内建函数</a> 区分开。contains 用来在字符串中查找子串
(因为变量可以同时当作字符串和序列)。</p>
</div>
<p>辨别序列中是否包含指定值。它包含一个参数,就是来查找的值。比如:</p>
<div class="code-wrapper"><pre class="code-block code-template"><#assign x = ["red", 16, "blue", "cyan"]>
"blue": ${x?seq_contains("blue")?string("yes", "no")}
"yellow": ${x?seq_contains("yellow")?string("yes", "no")}
16: ${x?seq_contains(16)?string("yes", "no")}
"16": ${x?seq_contains("16")?string("yes", "no")}</pre></div>
<p>将会输出:</p>
<div class="code-wrapper"><pre class="code-block code-output">"blue": yes
"yellow": no
16: yes
"16": no</pre></div>
<p>为了查找值,该内建函数使用了 FreeMarker 的比较规则
(就像使用 <a href="dgui_template_exp.html#dgui_template_exp_comparison"><code>==</code>
操作符</a>),除了比较两个不同类型的值,或 FreeMarker 不支持的类型来比较,
其他都不会引起错误,只是会评估两个值不相等。因此,你可以使用它来查找标量值
(也就是字符串,数字,布尔值,或日期/时间类型)。
对于其他类型结果通常都是 <code class="inline-code">false</code>。</p>
<p>对于容错性,该内建函数还对 collection 起作用。</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>该内建函数从 FreeMarker 2.3.1 版本开始可用。
而在 2.3 版本中不存在。</p>
</div>
<div class="callout note">
<strong class="callout-label">Note:</strong>
<p><code class="inline-code">seq_</code> 前缀在该内建函数名字中是需要的,
用来和 <a href="ref_builtins_string.html#ref_builtin_index_of"><code>index_of</code>
内建函数</a> 区分开。index_of 用来在字符串中查找子串
(因为变量可以同时当作字符串和序列)。</p>
</div>
<p>返回序列中第一次出现该值时的索引位置,
如果序列不包含指定的值时返回 <code class="inline-code">-1</code>。
要查找的值作为第一个参数。比如这个模板:</p>
<div class="code-wrapper"><pre class="code-block code-template"><#assign colors = ["red", "green", "blue"]>
${colors?seq_index_of("blue")}
${colors?seq_index_of("red")}
${colors?seq_index_of("purple")}</pre></div>
<p>将会输出:</p>
<div class="code-wrapper"><pre class="code-block code-output">2
0
-1</pre></div>
<p>为了查找值,该内建函数使用了FreeMarker 的比较规则
(就像使用了 <a href="dgui_template_exp.html#dgui_template_exp_comparison"><code>==</code>
操作符</a>),除了比较两个不同类型的值,或 FreeMarker 不支持的类型来比较,
其他都不会引起错误,只是会评估两个值不相等。因此,你可以使用它来查找标量值
(也就是字符串,数字,布尔值,或日期/时间类型)。
对于其他类型结果通常是 <code class="inline-code">-1</code>。</p>
<p>搜索开始的索引值可以由第二个可选参数来确定。
如果在同一个序列中相同的项可以多次出现时,这是很有用的。
第二个参数的数值没有什么限制:如果它是负数,那么就和它是零的效果一样,
而如果它是比序列长度还大的数,那么就和它是序列长度值的效果一样。
小数值会被切成整数。比如:</p>
<div class="code-wrapper"><pre class="code-block code-template"><#assign names = ["Joe", "Fred", "Joe", "Susan"]>
No 2nd param: ${names?seq_index_of("Joe")}
-2: ${names?seq_index_of("Joe", -2)}
-1: ${names?seq_index_of("Joe", -1)}
0: ${names?seq_index_of("Joe", 0)}
1: ${names?seq_index_of("Joe", 1)}
2: ${names?seq_index_of("Joe", 2)}
3: ${names?seq_index_of("Joe", 3)}
4: ${names?seq_index_of("Joe", 4)}</pre></div>
<p>将会输出:</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>该内建函数从 FreeMarker 2.3.1 版本开始可用。而在2.3版本中不存在。</p>
</div>
<div class="callout note">
<strong class="callout-label">Note:</strong>
<p><code class="inline-code">seq_</code> 前缀在该内建函数名字中是需要的,
用来和 <a href="ref_builtins_string.html#ref_builtin_last_index_of"><code>last_index_of</code>
内建函数</a> 区分开。last_index_of 用来在字符串中查找子串
(因为变量可以同时当作字符串和序列)。</p>
</div>
<p>返回序列中最后一次出现值的索引位置,
如果序列不包含指定的值时返回 <code class="inline-code">-1</code>。也就是说,和 <a href="#ref_builtin_seq_index_of"><code>seq_index_of</code></a> 相同,
只是在序列中从最后一项开始向前搜索。
它也支持可选的第二个参数来确定从哪里开始搜索的索引位置。比如:</p>
<div class="code-wrapper"><pre class="code-block code-template"><#assign names = ["Joe", "Fred", "Joe", "Susan"]>
No 2nd param: ${names?seq_last_index_of("Joe")}
-2: ${names?seq_last_index_of("Joe", -2)}
-1: ${names?seq_last_index_of("Joe", -1)}
0: ${names?seq_last_index_of("Joe", 0)}
1: ${names?seq_last_index_of("Joe", 1)}
2: ${names?seq_last_index_of("Joe", 2)}
3: ${names?seq_last_index_of("Joe", 3)}
4: ${names?seq_last_index_of("Joe", 4)}</pre></div>
<p>将会输出:</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>序列中子变量的数量(作为数字值)。假设序列中至少有一个子变量,
那么序列 <code class="inline-code">s</code> 中最大的索引是 <code class="inline-code">s?size - 1</code>
(因为第一个子变量的序列是0)。</p>
<h2 class="content-header header-section2" id="ref_builtin_sort">sort</h2>
<p>以升序方式返回序列。(要使用降序排列时,使用它之后使用 <a href="#ref_builtin_reverse"><code>reverse</code> 内建函数</a>。)
这仅在子变量都是字符串时有效,或者子变量都是数字,或者子变量都是日期值
(日期,时间,或日期+时间),或者所有子变量都是布尔值时(从2.3.17版本开始)。
如果子变量是字符串,它使用本地化(语言)的具体单词排序(通常是大小写不敏感的)。比如:</p>
<div class="code-wrapper"><pre class="code-block code-template"><#assign ls = ["whale", "Barbara", "zeppelin", "aardvark", "beetroot"]?sort>
<#list ls as i>${i} </#list></pre></div>
<p>将会输出(至少是US区域设置):</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>返回由给定的哈希表子变量来升序排序的哈希表序列。
(要降序排列使用该内建函数后还要使用 <a href="#ref_builtin_reverse"><code>reverse</code> 内建函数</a>。)
这个规则和 <a href="#ref_builtin_sort"><code>sort</code> 内建函数</a> 是一样的,
除了序列中的子变量必须是哈希表类型,而且你不得不给哈希变量的命名,
那会用来决定排序顺序。比如:</p>
<div class="code-wrapper"><pre class="code-block code-template"><#assign ls = [
{"name":"whale", "weight":2000},
{"name":"Barbara", "weight":53},
{"name":"zeppelin", "weight":-200},
{"name":"aardvark", "weight":30},
{"name":"beetroot", "weight":0.3}
]>
Order by name:
<#list ls?sort_by("name") as i>
- ${i.name}: ${i.weight}
</#list>
Order by weight:
<#list ls?sort_by("weight") as i>
- ${i.name}: ${i.weight}
</#list></pre></div>
<p>将会输出(至少是US区域设置):</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>如果你用来排序的子变量的层次很深
(也就是说,它是子变量的子变量的子变量,以此类推),
那么你可以使用序列来作为参数,它指定了子变量的名字,
来向下引导所需的子变量。比如:</p>
<div class="code-wrapper"><pre class="code-block code-template"><#assign members = [
{"name": {"first": "Joe", "last": "Smith"}, "age": 40},
{"name": {"first": "Fred", "last": "Crooger"}, "age": 35},
{"name": {"first": "Amanda", "last": "Fox"}, "age": 25}]>
Sorted by name.last:
<#list members?sort_by(['name', 'last']) as m>
- ${m.name.last}, ${m.name.first}: ${m.age} years old
</#list></pre></div>
<p>将会输出(至少是US区域设置):</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/index.html">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/nanlei/freemarker/tree/manual-zh-2.3-gae/src/manual">Chinese Manual on Github</a></li><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://sourceforge.net/p/freemarker/bugs/new/">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><span class="generated-for-product">Generated for: Freemarker 2.3.23</span><span class="last-updated"> Last generated:
<time itemprop="dateModified" datetime="2015-09-18T14:38:51Z" title="Friday, September 18, 2015 2:38:51 PM GMT">2015-09-18 14:38:51 GMT</time></span></p> <p class="copyright">
© <span itemprop="copyrightYear">1999</span>–2015
<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://freemarker.org">The FreeMarker Project</a>. All rights reserved. </p>
</div></div></div></body>
</html>