有没有办法从生成的FreeMarker模板中记录特定的行/字符位置?目的是突出显示生成的输出文件的特定部分,而不必解析生成的输出文件。
例如,我们说我有这个模板:
function foo()
{
ordinary_crap();
ordinary_crap();
do_something_special();<@mark foospecial>
ordinary_crap();
}
function bar()
{
ordinary_crap();
do_something_really_special();<@mark barspecial>
ordinary_crap();
ordinary_crap();
}
function baz()
{
foo();<@mark foo_call_1>
ordinary_crap();
bar();<@mark bar_call_1>
}
我希望<@mark>
指令不产生任何生成的输出,而是将标记名称foospecial
,barspecial
,foo_call_1
和bar_call_1
与该行相关联和<@mark>
指令在生成的输出中的位置。上面的示例我显示了独立的单点,但是使用开始/结束对标记特定范围也很有用。
我能看到的替代方案是
添加&#34;标记提示&#34;并通过我自己的后处理步骤删除它们。例如
<mark name="years">Fourscore and seven</mark> years ago
something really brilliant happened to a really nice guy named
<mark name="niceguyname">Fred</mark>.
然后我可以对此进行后处理并移除<mark >
标签(假设它们不与其他内容发生冲突),记录我的位置。
但这两件事看起来都很糟糕。
答案 0 :(得分:1)
从TemplateDirectiveModel
实施(我假设您实施mark
的方式而不是#macro
),致电env.getCurrentDirectiveCallPlace()
。返回的DirectiveCallPlace
具有getBeginColumn()
和getBeginLine()
方法。