| 最近のニュース |
JavaHelpジェネレータ(JHG)をGPLにてリリースしました。開発者向けのソフトウェアツールです。商品スタッフIIのヘルプファイル作成に利用しています。
本ソフトウェア及びドキュメントはGNU General Public Licenseにてライセンスされます。
著作権者は有限会社クリプトメディアです。
JavaHelpを簡単に作成するためのツールです。一般に、JavaHelpを作成するには、(特別なオーサリングソフトを使わない限り)ヘルプセット、マップファイル、インデックスファイルなどを手書きで記述しなければなりませんが、これは極めて退屈な作業で間違いも発生しやすいと思われます。
JHGは、ある「取り決め」を前提として、これらのファイルを自動生成します。JavaHelpのコンテンツはHTML3.2のファイル(及び画像などの任意のファイル)ですが、これらのファイル群の構成とファイル中に記述されたコメントを元にします。
また、「ファイルパス」と「ID」を同一にしてしまい、その扱いを簡単にします。
JavaHelpのマップファイルは、ファイルのパスと任意のIDを結びつける役割がありますが、この「任意のID」がそもそもくせものです。大量のファイルから構成されるJavaHelpでは、ファイルとIDの対応関係を覚えていられなくなると思われます。
JHGではすべてのファイルのパス及びアンカー付htmlのパスをIDとして使用します(ファイルはhtmlだけではないことに注意してください)。
例をあげます。
<mapID target="index.html" url="index.html"/> <mapID target="index.html#Viewer" url="index.html#Viewer"/> <mapID target="alone/index.html" url="alone/index.html"/> <mapID target="alone/Files.html" url="alone/Files.html"/> <mapID target="alone/Files.html#Backup" url="alone/Files.html#Backup"/> <mapID target="alone/Guide.html" url="alone/Guide.html"/> <mapID target="alone/helpButton.png" url="alone/helpButton.png"/> <mapID target="alone/Install.html" url="alone/Install.html"/>
このようにファイルパスとIDは同一になります。
目次は基本的に、ソースファイル群のディレクトリ構造をそのまま反映したものです。
TOP
+-- index.html
+-- general
| +-- index.html
| +-- GS.html
| +-- Support.html
| +-- FAQ.html
+-- concept
+-- index.html
+-- Classification.html
+-- Goods.html
このようなディレクトリ構造があった場合、JHGは次のような目次定義ファイルを出力します。
<tocitem text="商品スタッフII ヘルプ" target="index.html"> <tocitem text="概要" target="general/index.html"> <tocitem text="商品スタッフIIについて" target="general/GS.html"/> <tocitem text="サポート及びクライアント・サーバ版について" target="general/Support.html"/> <tocitem text="よくある質問とその答え" target="general/FAQ.html"/> </tocitem> <tocitem text="概念" target="concept/index.html"> <tocitem text="分類" target="concept/Classification.html"/> <tocitem text="商品" target="concept/Goods.html"/>
targetに指定されるのは「ID」ですが、前述したようにJHGはファイルパスと同一です。
各目次アイテム(tocitem)の名称は、htmlファイルのhead部分のtitleから取得されます。また、ディレクトリ部分にあたる目次アイテムの名称は、index.htmlのtitleです。ですから、先にあげたファイルは以下のようなタイトルを持っていることになります。
TOP
+-- index.html 商品スタッフII ヘルプ
+-- general
| +-- index.html 概要
| +-- GS.html 商品スタッフIIについて
| +-- Support.html サポート及びクライアント・サーバ版について
| +-- FAQ.html よくある質問とその答え
+-- concept
+-- index.html 概念
+-- Classification.html 分類
+-- Goods.html 商品
しかし、目次アイテムの順序の指定が必要です。そのままではgeneralディレクトリのGS.html, Support.html, FAQ.htmlをどのような順序で並べてよいのかわかりません。ファイル名のアルファベット順では不適当です。
そこで、index.htmlに特別なコメントをつけて、これらの順序を指定します。「general/index.html」には次のようなコメントを追加しています。
<!-- $TOC GS.html Support.html FAQ.html --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <head>
最初の$TOCが目次並びの定義を示します。それに続いて、目次に表示するhtmlファイルあるいは下位のディレクトリ名を記述します。区切りは空白あるいは改行です。
索引ファイルを手作業で作成するのも大変なものです。JHGは、htmlファイル中に記述されたコメントを元に自動的に索引ファイルを作成します。例をあげます。
<h1>商品</h1> <!--$INDEX 商品 しょうひん --> <h2>概念</h2> <p> 「商品」は本システムの中心的な役割を果たす概念です。 そのため、本システムの名称も「商品スタッフ」となっています (「II」は次世代システムであることを象徴すべくつけられています)。 </p> <p> 本システムでの「商品」は基本的に仕入先から仕入れ、顧客に販売するものです。 その過程でお店の利益を得ます。 利益を最大限にするためには、商品を効率的に取り扱うことが必要です。 顧客へのその他のサポートはそのような基盤があってこそ初めて可能であると思われます。 </p> <h2><a name="Basic">商品の基本的属性</a></h2> <p> 現実の事物をソフトウェアで扱うためには「モデル化」というものが必要です。 どのようなモデルにするのかという点は決して簡単なことではありません。 様々な試行錯誤を経て決定されるものです。 本システムでは、商品は以下のような属性を持つオブジェクトであるというモデル化を行っています。 </p> <h3><a name="Code">商品コード</a></h3> <!-- $INDEX 商品コード しょうひんこーど --> <!-- $INDEX コード、商品の こーど、しょうひんの -->
このように$INDEXに続いて、索引語句とその読みを指定します。これらの区切りは空白ですが、空白を語句に含めたい場合は"EPSON TM-T88"のようにダブルクォートで囲みます。
JHGは索引ファイルを作成する際に、よみの頭文字ごとにまとめ、読み順にソートします。
<indexitem text="こ"> <indexitem text="顧客管理" target="concept/Customer.html"/> <indexitem text="顧客クリップ" target="concept/Clip.html#Goods"/> <indexitem text="顧客抽出画面" target="window/common/CustExtractor.html"/> <indexitem text="個人" target="concept/Customer.html#Structure"/> <indexitem text="コード、商品の" target="concept/Goods.html#Code"/> </indexitem>
ここでもtargetに指定されるのは「ID」ですが、JHGの場合はファイルパスと同一です。また、$INDEXコメントがアンカーの後にある場合、そのアンカーが指定された形になります。
まとめますと、以下のようになります。
本プログラムはコマンドラインから使用するようにはなっていません。適当なJavaプログラムを記述してください。最も簡単なプログラムとしては以下です。
// ソースファイルツリーを作成
FileTree fileTree = new FileTree(new File(".\\docs"), "Windows-31J");
// JavaHelp定義ファイルジェネレータを作成
JHFiles jhFiles = new JHFiles(fileTree)
.setXMLEncoding("Shift_JIS")
.setFileEncoding("Windows-31J");
jhFiles.createHelpSet("GSHelp.hs")
.setHelpTitle("商品スタッフII ヘルプ")
;
jhFiles.createMap("GSHelp_map.jhm");
jhFiles.createTOC("GSHelp_toc.xml");
jhFiles.createIndex("GSHelp_index.xml");
jhFiles.createManifest();
// Jarファイルを作成
new JarGenerator(jhFiles).generate(new File(".\\GSHelp.jar"));