━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 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 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━