kiwa

警告

 このソフトウェアは、低レ憲に則って公開されている、低レベルなソフトウェアです。

kiwaの利用目的

 小説のようなテキストデータについて、単一のソースから複数のターゲット(InDesign、cHTML)用のデータを生成すること。

言語と環境

 Java。

 Eclipse 3.1.2とJDK 6。

 InDesign 2.0、iモードやezweb対応の携帯電話。

kiwaを書かずにはすませられなかった理由

 私は小説を書いて同人誌即売会で売っています。文字組みにはこだわるので、InDesign 2.0を使っています。

 あるとき、携帯電話用に体験版を用意しようと思いました。どうもcHTMLで書くのがよさそうです。

 InDesign上で組版したものをcHTMLに直すのは気が重いので、単一のソースからInDesignとcHTMLを生成したいところです。

 さらに私は某エロゲー屋のプログラマです。そのエロゲー屋で使っているシナリオ記述フォーマットを新しくしたい、という事情もあります。ノベルゲームのシナリオデータは、単一のソースからボイス収録用台本とゲーム本体用データを生成する必要があるので、上と事情が似ています。

どうしてこんな設計になったのか

 JAXB 2.0を使って要素をクラスにマッピングし、リフレクションでハンドラを探しています。

 XSLTではいけなかった理由:これまでの経験から、破壊的代入が必要な場面があることが明らかでした。

 SAXではいけなかった理由:next-siblingノードをみて処理することが必要な場面があるからです。たとえばInDesign用Ruby要素ハンドラは、モノルビとグループルビを、next-siblingノードをみて使い分けています。

  DOMやJDOMではいけなかった理由:型があるとラクだからです。たとえばJAXB 2.0は、列挙ファセットをenumに変換してくれます。

ソースのありか

 こちらです。CVSリポジトリに入っています。

試しに実行してみる方法

 org.kaoriha.kiwa.tools.TextCompilerを、引数"indesign test.xml"で起動します。binフォルダ内にtest.txtが生成されます。これはInDesignタグ付きテキストです。なおInDesignは、タグ付きテキストの配置にややこしいバグがあるので気をつけましょう。引数のindesignのかわりにhtmlだとHTML、chtmlだとcHTMLが生成されます。

SourceForge.jp