XHMTLで出力
http://d.hatena.ne.jp/coolstyle/20070417の閉じタグの話について。
DefaultMarkupModelそのままならscriptタグにはEndTagStyle.REQUIREを返すので、ちゃんと とレンダリングしてくれます。なので、traditionalなHTMLでよければ問題無さそうで、XHTMLMarkupModelのようなものをちゃんと用意するのが正攻法かと思います。
しかしMarkupModel絡みのソースをざっと見たところ、<br>...</br>とかできないようにするにはorg.apache.tapestry.dom.Elementなどの修正も必要な感じ。概要としてはだいたい以下のようになると思います。
- EndTagStyleにもうひとつ定数を追加する(仮にNOCHILDという定数名とします)。
- org.apache.tapestry.dom.ElementクラスのtoMarkupメソッドの中ほどあたりを次のように修正する。
public void toMarkup(PrintWriter writer) { ... EndTagStyle style = _document.getMarkupModel().getEndTagStyle(_name); boolean hasChildren = hasChildren(); + if (hasChildren && style == EndTagStyle.NOCHILD) { + // 例外投げる + } String close = (!hasChildren && style == EndTagStyle.ABBREVIATE) ? "/>" : ">"; ... }
- brタグなどにはNOCHILDを返すXHTMLMarkupModelを用意する。DefaultMarkupModelを拡張して次のようにしてもとりあえずはOKかな?
public class XHTMLMarkupModel extends DefaultMarkupModel { @Override public EndTagStyle getEndTagStyle(String element) { if ("option".equalsIgnoreCase(element)) { return EndTagStyle.REQUIRE; } EndTagStyle style = super.getEndTagStyle(element); return (style == EndTagStyle.OMIT) ? EndTagStyle.NOCHILD : style; } }
# 実際に試してみてはいないですが。