
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
                                                           2006/07/16
  hs ファイル仕様書 Version 2.0

  S.Programs 2001-2006
                                         http://sprocket.babyblue.jp/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

■ はじめに
￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣
このドキュメントは、HSP ヘルプマネージャ用のヘルプファイルである「hs ファイル」
の仕様を定義するものです。

本書で定義する hs ファイル仕様 (Version 2.0) は、原型の HSP HELP Tools もしくは 
HSP HELP Browser 1.x の仕様で書かれた hs ファイルに対して上位互換であると共に、
より柔軟でシンプルな書式にも対応したものとなっています。

本ドキュメントでは、HSP HELP Tools / HSP HELP Browser 1.x の hs ファイル仕様を
特に区別する場合、「旧仕様」と呼ぶ場合があります。



■ 改定履歴
￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣
2004/04/07 (HSP HELP Browser 1.40 実装)
・作成

2005/05/25 (HSP HELP Browser 1.50 実装)
・行頭の特殊文字 '%', '^' のエスケープ仕様を追加
・パラメータ書式の関数型表記仕様を追加
・重複するシンボル名のリネームを廃止

2006/07/16 (hs ファイル仕様 Version 2.0)
・グローバルメンバ、ローカルメンバの区別を撤廃
・新フィールドタグ %port, %portinfo に対応
・差分記述の仕様を追加
・行頭の特殊文字 '^' のエスケープ仕様の削除
・容量制限の記述を削除
・用語の一般化
 - ページ → 「レコード」
 - メンバ → 「フィールド」
 - メンバ定義キーワード → 「フィールドタグ」



■ 用語の定義
￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣
・hs ファイル
ヘルプマネージャ用のヘルプ情報が格納されたテキストファイルを「hs ファイル」とい
います。拡張子は hs です。文字コードは、Shift_JIS を用います。

・レコード
HSP で使われる特定のシンボル (命令など) について説明した、解説文やサンプルスクリ
プトなどのデータ (フィールド) のひとまとまりをレコードと呼びます。ヘルプページの
1 ページが、1 レコードに当たります。hs ファイルには、一つ以上のレコードが含まれ
ることになります。

・フィールド
フィールドとは、レコードに含まれる各要素のことです。命令名や見出し、解説文などが
それに当たります。すべてのフィールドは文字列データとなっています。

ヘルプデータは、レコード×フィールドの、単純なカード型のデータベースとして扱われ
ます。



■ 基本書式
￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣
hs ファイル形式は、プレーンテキスト・データベースのヘルプ情報を記述するフォーマ
ットです。基本的に、テキスト文章をファイルにそのまま記述していく形式となります。

レコードとフィールドを制御するために、文字 '%' で始まる「フィールドタグ」を使用
します。フィールドタグは、そのタグ以降に記述されるテキストがどのフィールド・レコ
ードに属するかを宣言します。

フィールドタグには、下記の種類があります。

  (タグ)    (内容)
・%index    シンボル名, 見出し
・%prm      パラメータリスト, パラメータ説明文
・%inst     解説文
・%sample   サンプルスクリプト
・%href     関連項目
・%dll      使用プラグイン/モジュール
・%ver      バージョン
・%date     日付
・%author   著作者
・%url      関連 URL
・%note     備考 (補足情報等)
・%type     タイプ
・%group    グループ
・%port     対応環境
・%portinfo 移植のヒント

フィールドタグは、行の頭に書く必要があります。大文字、小文字は区別されません。フ
ィールドの値は、フィールドタグの次の行から、次のフィールドタグの前の行、もしくは
ファイルの終了までに書かれたテキストデータとなります。フィールドタグは、どのよう
な順番で記述してもかまいません。

%index は特に重要かつ特殊なタグで、フィールドの制御だけでなくレコードの区切りを
行う役目を持っています。一つのレコード内の情報は、%index から、次の %index もし
くはファイルの終了までに書かれた値となります。よって、hs ファイルに含まれるレコ
ードは、そのファイル内の %index の数だけ存在することになります。

また、ファイルの先頭から最初の %index までにフィールドタグで記述された値は、その
hs ファイルのすべてのレコードのデフォルトの値となります。たとえば、最初の %index 
までに %port で対応環境を記述しておくと、その hs ファイルに含まれるレコードのう
ち %port タグを含まないものは、すべて最初に記述された値が採用されます。明示的に 
値が設定された場合は、そちらが優先されます。

hs ファイル中に不明なフィールドタグ (例 : %hoge) がある場合は、その中の値は無視
されます。また、ファイル先頭から最初のフィールドタグまでに含まれる文字列も同様に
無視されます。

※
説明文の中などで '%' で始まる行がある場合は、行頭を '%%' とすることでフィールド
タグとして認識しないようにすることができます。



■ 各フィールドの書式
￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣
各フィールドの記述ルールの説明の前に、すべてのフィールドに共通のルールを説明しま
す。

シンボル名 (%index) 以外のすべてのフィールドは省略可能です。記述が省略され、デフ
ォルト値も記述されていないフィールドの値は、空になります。

文章の改行はビューアーの表示サイズに応じた自動折り返しとなりますので、文の途中で
改行を行わないで、段落ごとに改行を行うことを推奨します。また、英字、数字はなるべ
く半角文字を使用することを推奨します。

各フィールド個別の記述ルールは、以下のようになります。

◆ %index (シンボル名, 見出し)
シンボル名と見出しを記述します。1 行目にシンボル名、2 行目に見出しを記述してくだ
さい。このフィールドタグが、レコードの記述の開始地点となります。シンボル名の省略
はできません。

見出しは、シンボルの機能を簡潔に表した、なるべく短いものにしてください。見出しに
は改行は使えません。


◆ %prm (パラメータリスト, パラメータ説明文)
命令やマクロのパラメータを記述します。1 行目にパラメータリスト (パラメータ書式)、
2 行目以降は各パラメータの概要を記述してください。

パラメータを持たないシンボルの場合は、"パラメータ無し" 等と書かないで、フィール
ドタグの記述を省略してください。また、パラメータを関数式記述にする場合は、パラメ
ータリストを括弧 ( ) で囲んでください。


◆ %inst (解説文)
解説文を記述します。

この部分がヘルプページのメインとなります。表示されるときに等幅フォントが使用され
るため、等幅用に作られた、記号を用いた図表がずれないで表示できます。


◆ %sample (サンプルスクリプト)
サンプルスクリプトを記述します。

行の 1 文字目がセミコロン ';' の場合、hs ファイルのコメントとして扱われ、行が無
視されますので注意してください。


◆ %href (関連項目)
関連するシンボルを、改行区切りで記述します。


◆ %dll (使用プラグイン/モジュール)
使用するプラグインやモジュールがある場合、その名称を記述します。一行のみ書くこと
ができます。

HSP 標準機能でないヘルプでは、この記述は省略できません。DLL を使用しないモジュー
ルであっても、モジュールファイル名などを記述する必要があります。


◆ %ver (バージョン)
バージョンを記述します。一行のみ書くことができます。


◆ %date (日付)
日付を記述します。更新履歴などのために必要であれば、複数行にわたって書くことがで
きます。


◆ %author (著作者)
著作者名を記述します。連名にする場合は、複数行で書きます。


◆ %url (関連 URL)
関連する URL を記述します。複数の URL を記述する場合は、複数行にします。


◆ %note (備考)
備考や注意書きがあれば記述します。複数行にわたって記述できます。


◆ %type (タイプ)
シンボルのタイプを記述します。記述例は "拡張命令", "ユーザー拡張命令" などです。
一行のみ書くことができます。


◆ %group (グループ)
機能を分類するグループを記述します。記述例は、"画面制御命令", "文字列操作命令", 
"入出力制御命令" などです。一行のみ書くことができます。


◆ %port (対応環境)
どのプラットフォームの HSP 実行環境に対応するかを表すフラグ文字列を記述します。

フラグ文字列は、大文字、小文字まで正確に記述してください。複数のプラットフォーム
で実行できる場合、複数行に分けて書きます。現在決まっているフラグは、下記のものが
あります。

 (フラグ)  (環境)
・Win      Windows 版 HSP
・Mac      Macintosh 版 HSP
・Let      HSPLet
・Cli      コマンドライン版 HSP


◆ %portinfo (移植のヒント)
プラットフォーム間の移植についてのヒントを記述します。



■ フィールドの差分記述
￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣
下記のフィールドタグは、(最初の %index までに書かれる) デフォルト値に対する差分
の記述をサポートします。

・%port+    対応環境フラグへ追加
・%port-    対応環境フラグから除外

たとえば、下記のような hs ファイル記述がある場合、

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
%port ; デフォルト
Win
Let

%index
test1
%port+ ; 差分 (追加)
Mac

%index
test2
%port- ; 差分 (除外)
Let
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

シンボル test1 の %port フィールドの値は、デフォルト値に Mac を追加した 3 行とな
り、test2 の %port フィールドの値は、デフォルト値から Let を除外した 1 行となり
ます。

一つのレコードで %port+ と %port- を両方記述することもできます。また、追加時に、
すでに含まれるフラグは重複しての追加はされません。



■ 旧仕様との互換性について
￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣
本書の hs ファイル仕様のバージョンでは、HSP HELP Tools および HSP HELP Browser 
1.x の仕様 (旧仕様) に存在した「グローバルメンバ」と「ローカルメンバ」の区別がな
くなり、すべてのフィールドをユニバーサルに扱う、シンプルな仕様に変更されました。

旧仕様では、%dll, %ver, %date など 7 種類のフィールドは「グローバルメンバ」と呼
ばれ、一つの hs ファイルに一種類の値しか定義できませんでした。これに対し本書の 
hs ファイル仕様では、すべてのフィールドにおいてレコードごとに異なる値を持つこと
ができます。

最初の %index までに記述されたフィールド値が、それ以降に記述されるレコードのデフ
ォルト値として採用される仕様となっているため、本書の仕様に準拠したヘルプツールは
旧仕様で書かれた hs ファイルに対しても完全な互換性を持ちます。

これにより、異なるプラグイン/モジュールに依存する命令のヘルプを一つの hs ファイ
ルにまとめたり、hs ファイル内の多くのレコードで同じ内容となるフィールドの値を一
度の記述で済ませたりと、柔軟な記述が出来るようになりました。

※
旧仕様のヘルプツールと互換性のある hs ファイルを書く場合は、下記のフィールドタグ
は最初の %index までに記述してください。

・%dll      使用プラグイン/モジュール
・%ver      バージョン
・%date     日付
・%author   著作者
・%url      関連 URL
・%note     備考 (補足情報等)
・%type     タイプ

また、旧仕様では下記のフィールドタグは最初の %index より後にしか記述できません。

・%prm      パラメータリスト, パラメータ説明文
・%inst     解説文
・%sample   サンプルスクリプト
・%href     関連項目
・%group    グループ

下記のフィールドタグは、旧仕様ではサポートされません。

・%port     対応環境
・%portinfo 移植のヒント

同様に、差分記述方式のタグも旧仕様ではサポートされません。



■ タグ ( ^ ) の扱い
￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣
HSP HELP Tools では、"^" もしくは "^p" と書かれた行をタグといい、テキストの処理
を制御する役割を持っています。

本書の hs ファイル仕様ではこのタグは使用されておらず、"^" もしくは "^p" とだけ書
かれている行は単なる空行として処理されます。そうでない行は、行頭文字が '^' であ
ってもそのまま表示されます。たとえば、"^a" と書かれた行は、そのまま表示されます。



■ コメントについて
￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣
セミコロン文字 ';' で始まる行はコメントとみなされ、無視されます。また、'%' で始
まるタグ行では、タグ文字列以降の ';' からコメントとして扱われます。

(コメントの例)
; -------- comment
%index ; -------- comment

特にサンプルスクリプト中でスクリプトのコメント用に ';' を使う場合は、それを行頭
に書かないように注意してください。';' の前にスペースやタブがある場合はコメントと
みなされません。



■ hs ファイルの記述例
￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣
;---------------------------------------------------------------
; hs ファイル サンプル
; (hs specification version 2.0)
;---------------------------------------------------------------

%dll ; モジュールの名前
hhx_db.hsp

%ver
2.0

%date
2006/07/16

%author
sprocket

%url
http://sprocket.babyblue.jp/

%note
hhx_db.hsp をインクルードすること。

%type
ユーザー拡張命令

%group
hs データベース処理

%port
Win

; ここまでに定義されたフィールドの値が、以降のレコードのデフォルト値となります。
;---------------------------------------- record start
%index
HHX_init_load_db
hs データベースをロード

%inst
カレントディレクトリにある hs データベースファイル (hhx.db) をロードします。この
命令が成功した場合、システム変数 stat に 0 が返ります。

hs ファイルが更新されている場合や、hhx.db が存在しない場合は、stat に 1 が返りま
す。その場合は、HHX_init_rebuild_db 命令で hhx.db を再構成してください。

HHX_init_load_db, HHX_init_rebuild_db の実行後には、HHX_init_extract_db 命令でロ
ードしたデータベースをメモリ上に展開する必要があります。

%sample
#include "hhx_db.hsp"

	; HHX データベース ロードシーケンス
	mes "loading..."
	HHX_init_load_db
	if stat {
		mes "rebuilding db..."
		HHX_init_rebuild_db
	}
	HHX_init_extract_db
	mes "complete."

%href
HHX_init_rebuild_db
HHX_init_extract_db

;---------------------------------------- record start
%index
HHX_select_where
hs データベース 検索実行

%prm
("str", FID, XID)
"str" : 検索する文字列
FID   : 完全一致を要求するフィールドの ID
XID   : 検索結果から除外するレコード ID

%inst
hs データベースから文字列 "str" を検索し、検索結果の数を返します。検索文字列は、
大文字小文字、全角半角 の区別はされません。

FID にフィールド ID (C_XXXX) を指定すると、そのフィールドが検索文字列と完全一致
するフィールドのみを列挙します。何も指定しない場合は、-1 としてください。

XID には、検索結果から除外するレコード ID を指定します。何も指定しない場合は、
-1 としてください。

検索結果のレコードの ID は、HHX_get_next() 関数で順に取り出すことができます。

%sample
	; "test" を含むレコードのリストを表示
	repeat HHX_select_where("test", -1, -1)
		c = HHX_get_next()
		mes hhxdata.c.C_NAME + " - " + hhxdata.c.C_SUMMARY
	loop

%href
HHX_find_next
HHX_exist



━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━