Groovyのテンプレートエンジンで改行の出力を調整する方法
Groovyでテンプレートエンジン - No Programming, No Lifeで紹介されているとおり、Groovyではテンプレートエンジンと呼ばれるものが使えます。
このテンプレートエンジンを使っていて、改行のみの不要な行が出力されることに悩まされていたのですが、テンプレートファイル側を調整することで解決できたのでメモしておきます。
テンプレートの呼び出し側のコード(共通)
def f = new File('sample.template') def engine = new groovy.text.SimpleTemplateEngine() def binding = [ 'title' : '', 'items1' : [], 'items2' : [], ] binding.title = 'サンプル' binding.items1 = [ 1, 2 ] binding.items2 = [ 'A', 'B' ] def template = engine.createTemplate(f).make(binding) println template.toString()
Groovyでテンプレートエンジン - No Programming, No LifeのSimpleTemplateEngine版のコードを、少し実践寄りのコードに変更しています。
調整するのはテンプレートファイル側なので、このGroovyコードは共通です。
sample.template(不要な改行のみの行が出力される版)
まずは、調整前のテンプレートファイルと、出力結果を示します。
# # タイトル: <%= title %> # <% items1.each { item1 -> items2.each { item2 -> %> アイテム: <%= item1 %><%= item2 %> <% } } %>
C:\Groovy\Template>groovy sample.groovy # # タイトル: サンプル # アイテム: 1A アイテム: 1B アイテム: 2A アイテム: 2B C:\Groovy\Template>
テンプレートファイル内のGroovyコード「<% 〜 %>」が記述されている箇所が、改行のみの行として出力されるので出力結果が美しくありません。
sample.template(不要な改行のみの行が出力されない版)
次に、調整後のテンプレートファイルと、出力結果を示します。
# # タイトル: <%= title %> # <% items1.each { item1 -> items2.each { item2 -> %>\ アイテム: <%= item1 %><%= item2 %> <% } } %>\
C:\Groovy\Template>groovy sample.groovy # # タイトル: サンプル # アイテム: 1A アイテム: 1B アイテム: 2A アイテム: 2B C:\Groovy\Template>
「%>」と書いていた箇所を、「%>¥」と書くだけのお手軽さです。
この手に気づくまでは、「%>」の後ろに改行を入れないようにして改行箇所を調整していたのですが、テンプレートファイルの可読性が極めて悪くなっていました。
この手に気づいてからは、可読性を下げずにテンプレートファイルが書けるようになりました。