DITA-OTの憂鬱(その後2)

悪い便りです.せっかくdost.jarを書き換えてテーブルの出力はバッチリと思ったのですが、また障害報告が来てしまいました.PDFでテーブルの出力がボコボコになっているというのです.送られたPDFを見ると確かにテーブルの表示がぜんぜんダメです.原因のtopicを探し当てると次のようなデータになっていました.(一部のみ抜粋)
 
<?xxx remove_begin?>
<row>
   <?xxx remove_begin?>
   <entry colname="col1" morerows="8"><?xxx text_remove_begin?>環境設定<?xxx text_remove_end?></entry>
   <?xxx remove_end?>
   <?xxx remove_begin?>
   <entry colname="col2"><?xxx text_remove_begin?>ユーザの非表示<?xxx text_remove_end?></entry>
   <?xxx remove_end?>
   <?xxx remove_begin?>
   <entry colname="col3"><?xxx text_remove_begin?>ログインユーザを表示しません. <?xxx
text_remove_end?></entry>
   <?xxx remove_end?>
</row>
<?xxx remove_end?>
<?xxx insert_begin?>
<row>
  <?xxx insert_begin?>
  <entry colname="col1" morerows="9"><?xxx text_insert_begin?>環境設定<?xxx text_insert_end?></entry>
  <?xxx insert_end?>
  <?xxx insert_begin?>
  <entry colname="col2"><?xxx text_insert_begin?>ユーザの非表示<?xxx text_insert_end?></entry>
  <?xxx insert_end?>
  <?xxx insert_begin?>
  <entry colname="col3"><?xxx text_insert_begin?>ログインユーザを表示しません. <?xxx text_insert_end?></entry>
  <?xxx insert_end?>
</row>
<?xxx insert_end?>
 
お客さんはオーサリング内容を修正するとCMSのpublication engineの比較機能をつかってPDFを出力します.修正による削除/挿入の情報は処理命令を使って表現されるのですが、上のテーブルの一部がその結果なのです.確かに削除されたrowと挿入されたrowは処理命令を使って表されています.でも処理命令抜きに解釈すると最初の行と二番目の行でrow/entry/@morerowsが完全にカブっています.このデータがDITA-OTで処理されて中間ファイルができるのですが、DITA-OTがCMSの処理命令など考慮してくれる訳はありません.案の定中間ファイルのentry/@colnameはダメです.それをXSL-FOに変換してPDFを作るのですから、そもそもまともなテーブルなど出力しようがないのです.
 
唯一の解決方法は、DITA-OTのコアモジュールdost.jarのソースを修正して、CMSの処理命令を解釈するように変更して再ビルドするしかありません.この場合は、<?xxx remove_begin?>~<?xxx remove_end?>で囲まれているならentry/@morerowsを削除しなければなりません.
 
バグフィックスを吸収するだけでなく、DITA-OT自身をCMSの出力にあうように修正しなければならないとは想像もつきませんでした.時間かかりそうです.ガックリ...