2012-02-08 42 views
9

我试图抽象生成标记中的常见情况,我需要一些标签来“包装”任意内容。因此,而不是写这个你能定义一个速度宏来“包装”其他内容吗?

<div class="container"> 
    <p class="someClass">Some header</p> 
    <div id="foo"> 
    <!-- The real content that changes --> 
    </div> 
</div> 

我能写的东西“喜欢”的

#???? 
<!-- The real content that changes 
#end 

显然在哪里,我不知道是什么#????将会。

据我所知,不可能用宏来做到这一点,缺少为块的开始定义宏和为块的结尾定义宏。

#macro(startContained) 
<div class="container"> 
    <p class="someClass">Some header</p> 
    <div id="foo"> 
#end 

#macro(endContained) 
    </div> 
</div> 
#end 

#startContained 
<!-- The real content --> 
#endContained 

有没有更好的方法来做到这一点?

回答

10

使用#@宏调用的语法,用$!bodyContent可变沿着:

#macro(wrapper) 
    <div class="container"> 
    <p class="someClass">Some header</p> 
    <div id="foo"> 
     $!bodyContent## 
    </div> 
    </div> 
#end 

#@wrapper() 
    The real content that changes. 
#end 

#@wrapper() 
    Other different content. 
#end 

呈现为:

<div class="container"> 
    <p class="someClass">Some header</p> 
    <div id="foo"> 
    The real content that changes. 
    </div> 
</div> 

<div class="container"> 
    <p class="someClass">Some header</p> 
    <div id="foo"> 
    Other different content. 
    </div> 
</div> 

(在宏体的##去除尾随空白;对于HTML它可以无关紧要。)

+0

如果内容是HTML?事实上,它会逃脱它。 – tokland 2018-01-29 10:07:49