単純化したテンプレートに StringTemplate.v4 を使用しようとしています。つまり、%body%
if ロジック、サブテンプレート、式などの他の機能は使用していません。
(正直なところ、このAPIは文書化されておらず、現時点では完全に放棄することを検討しています。JavaDocのソース コードへのリンクがあればいいのにと思います。少なくとも自分でいろいろ調べて理解できました。本当にイライラしました。 .)
匿名テンプレートに存在するギャップを特定して、使用する前に必要なギャップがあることを確認しようとしています。
import java.util.Arrays;
import java.util.Map;
import java.util.Set;
import org.stringtemplate.v4.ST;
import org.stringtemplate.v4.compiler.FormalArgument;
public class GapsInAnST {
public static final void main(String[] ignored) {
ST tmpl = new ST("Hello %name%. You are %age% years old.", '%', '%');
Map<String,Object> gapMap = tmpl.getAttributes();
System.out.println("gapMap=" + gapMap);
if(gapMap != null) {
System.out.println("getAttributes()=" + Arrays.toString(gapMap.keySet().toArray()));
}
System.out.println("tmpl.impl.hasFormalArgs=" + tmpl.impl.hasFormalArgs);
Map<String,FormalArgument> formalArgMap = tmpl.impl.formalArguments;
if(formalArgMap != null) {
System.out.println("getAttributes()=" + Arrays.toString(formalArgMap.keySet().toArray()));
}
tmpl.add("name", "Seymour");
tmpl.add("age", "43");
System.out.println(tmpl.render());
}
}
出力:
gapMap=null
tmpl.impl.hasFormalArgs=false
Hello Seymour. You are 43 years old.
この google groups スレッドでgetAttributes()
返される理由と、この質問: StringTemplate list of attributes defined for a given template ) について調べました。null
formalArguments
では、ギャップを埋める前に、匿名テンプレートに実際に存在するすべてのギャップを取得するにはどうすればよいでしょうか? regexでできることはわかっていますが、これを行う方法が組み込まれていることを願っています。
ありがとう。