[mayaa-user:604] outputMayaaWhitespaceのパラメタの使い方とmayaaファイルでのCDATAの扱いについて
佐竹雅央
[E-MAIL ADDRESS DELETED]
2007年 12月 25日 (火) 04:41:31 JST
ジークステクノロジの佐竹と申します。
現在プロジェクトにてMayaa1.1.15〜16を使わせて頂いています。
mayaaファイル中の記述から空白が取り除かれる仕様について、
確認させてください。
WEBサイトのドキュメントを見る限りでは詳しい説明が見つからな
かったのですが、mayaaファイル中の記述から空白を取り除く機能は
設定ファイル(〜.ServiceProvider)の「specificationBuilder」要素で
パラメータ「outputMayaaWhitespace」にtrue/falseを設定することで
ON/OFFが可能、ということで宜しいでしょうか。
************以下、確認を求めるに至った経緯************
http://mayaa.seasar.org/documentation/equals_id_resolver.html
の中では「templateBuilder」要素のパラメータとして設定しています。
また、mayaaのjarに同梱されているデフォルト設定ファイルの中では
「specificationBuilder」と「templateBuilder」の両方の要素で、
「outputTemplateWhitespace」と「outputMayaaWhitespace」の両方の
パラメータを設定しています。
しかし、ソースコードを見る限りでは「specificationBuilder」で使われる
のは「outputMayaaWhitespace」だけであり、「templateBuilder」で
使われるのは「outputTemplateWhitespace」だけであるように見えます。
***********************************************************
また、そもそもこの機能をOFFにしたかったのは、mayaaファイルで
下記のような記述がうまく働かなかったためです。
***********************************************************
<m:write m:id="hogeTextarea"
m:replace="false" m:escapeEol="false">
<![CDATA[
${bean.hogehoge}
]]>
</m:write>
***********************************************************
明示的に改行を埋め込むためにCDATAを使ったのですが、
改行が丸められてしまいました。
SpecificationNodeHandlerがendElementイベント内で
addCharactersNodeメソッドを呼び、その中でisRemoveWhitespace
メソッドで前述の設定ファイル値と「_inCData」という「CDATAの中か」の
フラグを見ているのですが、
イベントが
・要素開始
・CDATA開始(→_inCData:ON)
・CDATA終了(→_inCData:OFF)
・要素終了(→addCharactersNodeでisRemoveWhitespaceを聞く)
という順番になるので、_inCDataが空回りしている感じです。
CDATA中に読み込んだ文字列は別のバッファに格納するなどして、
addCharactersNodeに通常文字列と区別して処理するべきでは
ないでしょうか。
この考えで間違っていなければパッチを作成してお送りすることも
できますが、取りあえず確認させていただきたく。
#聖夜も明けちゃうし。
以上、よろしくお願い致します。
mayaa-user メーリングリストの案内