Freemarker 中的多语言自动转义

Multi-language auto-escape in Freemarker

我最近在 Freemarker 中打开了自动转义并将我的 .ftl 文件更改为 .ftlh 以确保它们得到 formatted/escaped 作为 HTML。然而,这意味着任何内联 <script><style> 标签都会被 HTML 转义,这不是我想要的。我可以通过这样做来解决问题:

<script>
    [#outputformat "JavaScript"]
         jQuery(".stuff").blah();
    [/#outputformat]
</script>

这行得通,但要在每个脚本标记的内容周围添加此包装器似乎需要做很多工作。拥有一个足够智能的 OutputFormat 来检测 script/style 标签并使用正确的格式,或者具有与上述相同效果的自定义标签似乎是有意义的。类似于:

[@smartscript]
    jQuery(".stuff").blah();
[/@smartscript]

是否已经存在类似的东西(或解决此问题的任何东西)?我什么也没找到。

除了在自定义 TemplateLoader 中预处理模板(包装另一个 TemplateLoader 并过滤它返回的 Reader),目前没有解决方案。宏也无济于事,因为 #outputformat 没有运行时效果。它只是将 FTL 源代码的各个部分与输出格式相关联。