Freemarker:去除换行符但不压缩空格?

Freemarker: strip newlines but do NOT compress whitespace?

是否有去除换行符但压缩空格的简单方法?

<@compress> directive两者兼而有之,这不是我想要的。

我有一个这样的循环部分:

<#list items as item>
 * <#if something>${something?right_pad(10)}<#else>${something_else?right_pad(10)}</#if><#if another_thing>${more_data?right_pad(20)}<#else>${even_more_data?right_pad(20)}</#if>
</#list>

这会造成一些非常长的队伍,我非常愿意这样做:

<#list items as item>
 * <#if something>
       ${something?right_pad(10)}
   <#else>
       ${something_else?right_pad(10)}
   </#if>
   <#if another_thing>
       ${more_data?right_pad(20)}
   <#else>
       ${even_more_data?right_pad(20)}
   </#if>
</#list>

但似乎没有一种简单的方法可以消除此处为清楚起见而给出的间距的歧义,我想使用 right_pad.

输出间距

您至少有两个选择:

1) 使用注释掉的空格:

<#list items as item>
 * <#if something><#--
       -->${something?right_pad(10)}<#--
   --><#else><#--
       ${something_else?right_pad(10)}<#--
   --></#if><#--
   --><#if another_thing><#--
       -->${more_data?right_pad(20)}<#--
   --><#else><#--
       -->${even_more_data?right_pad(20)}<#--
   --></#if>
</#list>

2) 使用 <#lt>(左 trim 表示当前行不带换行符)or/and <#rt>(右 trim 表示当前行带换行符)

<#list items as item>
 * <#if something><#rt>
       ${something?right_pad(10)}<#lt><#rt>
   <#else><#lt><#rt>
       ${something_else?right_pad(10)}<#lt><#rt>
   </#if><#lt><#rt>
   <#if another_thing><#lt><#rt>
       ${more_data?right_pad(20)}<#lt><#rt>
   <#else><#lt><#rt>
       ${even_more_data?right_pad(20)}<#lt><#rt>
   </#if><#lt>
</#list>

检查这里了解详情:http://freemarker.org/docs/dgui_misc_whitespace.html