ebmini - ドキュメント

概要

ebminiは、電子書籍を検索するためのコマンドラインインターフェース型の検索プログラムです。書籍へのアクセスにはEB Libraryを使用しており、EB Libraryが対応している書籍のうち、データがJIS X 0208(日本語のかな漢字)のみで書かれているEPWINGやEBなどの形式のものを検索することができます。

特徴

動作環境

CygwinやLinuxなど、Unix互換のプラットフォームであれば動作する可能性があると思います。以下の環境で動作することを確認しています。

使用ライブラリ

EB Library
電子書籍にアクセスするためのライブラリです。
GNU Libiconv
文字エンコーディング変換用のiconv()関数を提供するライブラリです。プラットフォームによっては、glibcがiconv()関数を含む形で提供されているかもしれません。

使い方

ebminiは、一回の起動につき一つの書籍内の副本一つを対象として、検索メソッドと検索語を複数指定して検索をおこなうことができます。

起動

ebminiで検索をおこなうには、以下のようにコマンドラインで必要なオプションを与えて起動します(オプションを一つも与えずに起動するとオプション一覧が表示されます)。

ebmini [オプション...]

検索メソッドや検索語などは、このオプションにより指定します。また、書籍(副本)に対応した設定ファイルを-cオプションにより指定することで、表示の体裁などをより細かくカスタマイズすることができます。オプションの詳細は「コマンドラインオプションと環境変数」の項を、設定ファイルの詳細は「設定ファイル」の項を参照してください。

検索結果は、初期状態では標準出力へ書き出されます。-oオプションやリダイレクトによりファイルへ書き出すこともできるので、エディターなど別のプログラムで結果を閲覧するような使い方が可能です。

書籍のパスが有効でないなど継続不可能なエラーが起こった場合は、その時点で処理は終了します。不正なオプションが指定されたなど実行そのものに差し障りのないエラーの場合は、警告が表示され処理は続行されます。

出力内容

ebminiが出力する要素には、おもに次の二種類があります。

書籍から読み出されたデータ
検索によって得られた本文や見出しなどのテキストデータです。これらは読み出されるさいに、設定ファイルの表示データ加工用の文字列(%で始まる項目)と外字代替文字列により、細かい体裁が加工されます。
表示制御用のフォーマット文字列
書籍の開始文字列など表示の見栄えを整えるための各種文字列で、設定ファイルの$で始まる項目がこれにあたります。これらは設定した文字列がそのまま出力として用いられます。

この二種類のデータが、一定の順序で組み合わされて出力されます。 以下の表では、書籍から読み出されたデータを●印で、設定ファイルでカスタマイズできる表示制御用の文字列を■印で示しています。

全体の出力の流れは次のようになります。

ebminiの出力内容
■書籍の開始文字列($BookStart)
※指定したメソッドによる検索結果
(検索メソッドを複数指定したときは、指定した順に連続して結果が出力される)
■書籍の終了文字列($BookEnd)

※の部分は各検索メソッドによって細かい違いがあります。詳しくは、次の「検索メソッド」の項を参照してください。

検索メソッド

ebminiで使用できる検索メソッドには、本文データを検索する前方一致検索・後方一致検索・条件検索、参照リンクを辿るリンク検索、本文とは独立したデータを読み出すメニュー・著作権表示などがあります。それぞれの詳細を以下に示します。

なお、-tオプションや-lオプションにより指定できる最大の表示項目数は1024項目となっています。

前方一致検索/後方一致検索

前方一致検索と後方一致検索は、それぞれ先頭/末尾が検索語に一致する項目を検索するメソッドです。検索語を複数指定した場合は、すべての語句を連結して一つの語句と見なして検索が行われます。

前方/後方一致検索の出力要素
■前方/後方一致検索の開始文字列($MethodWordStart/$MethodEndwordStart)
(-mオプションにより表示のON/OFFを指定可能)
【本文】
初期状態では完全一致項目のみを出力
(-tオプションにより変更可能)
■本文項目の開始文字列($TextItemStart)
●ヒットした項目の本文データ
■本文項目の終了文字列($TextItemEnd)
【見出し一覧】
(-lオプションで「非表示」を指定すると一覧自体の出力を抑制)
■見出し一覧の開始文字列($ListStart)
初期状態では最大20項目まで出力
(-lオプションにより変更可能)
■見出し一覧項目の開始文字列($ListItemStart)
●ヒットした項目の見出しデータ
■見出し一覧項目の終了文字列($ListItemEnd)
■見出し一覧の終了文字列($ListEnd)

条件検索/クロス検索

条件検索とクロス検索は、複数の検索語が共通して含まれる項目を検索するメソッドで、両者は非常によく似ています。指定した検索語全部を対象の語句として検索処理がおこなわれます。

条件/クロス検索の出力要素
■条件/クロス検索の開始文字列($MethodKeywordStart/$MethodCrossStart)
(-mオプションにより表示のON/OFFを指定可能)
【本文】
初期状態ではヒットした項目すべてを出力
(-tオプションにより変更可能)
■本文項目の開始文字列($TextItemStart)
●ヒットした項目の本文データ
■本文項目の終了文字列($TextItemEnd)
【見出し一覧】
(-lオプションで「非表示」を指定すると一覧自体の出力を抑制)
■見出し一覧の開始文字列($ListStart)
初期状態では最大20項目まで出力
(-lオプションにより変更可能)
■見出し一覧項目の開始文字列($ListItemStart)
●ヒットした項目の見出しデータ
■見出し一覧項目の終了文字列($ListItemEnd)
■見出し一覧の終了文字列($ListEnd)

リンク検索

リンク検索は、データの位置情報を検索語として指定することでその位置の項目を読み出すメソッドで、書籍(副本)中に埋めこまれている参照リンクの位置情報をそのまま利用することができます。検索語の-sオプションの書式が他と異なり、-sPage:Offsetの形でページ番号とオフセットを指定します。検索語を複数指定した場合は、指定した順に各項目が並べて出力されます。

リンク検索の結果はつねに参照先の一項目のみになるので、-tおよび-lオプションで上限を指定しても意味を持ちませんが、非表示にすることは可能です。

リンク検索の出力要素
■リンク検索の開始文字列($MethodLinkStart)
(-mオプションにより表示のON/OFFを指定可能)
【本文】
参照先の一項目を出力 ■本文項目の開始文字列($TextItemStart)
●参照先項目の本文データ
■本文項目の終了文字列($TextItemEnd)
【見出し一覧】
(-lオプションで「非表示」を指定すると一覧自体の出力を抑制)
■見出し一覧の開始文字列($ListStart)
参照先の一項目を出力 ■見出し一覧項目の開始文字列($ListItemStart)
●参照先項目の見出しデータ
■見出し一覧項目の終了文字列($ListItemEnd)
■見出し一覧の終了文字列($ListEnd)

メニュー

メニューは、書籍(副本)に用意されたメニューを表示するメソッドです。出力されるデータはメニューの第一階層で、そこに含まれる参照先をリンク検索で辿ることで、さらに深い階層のメニューを閲覧することができます。このメソッドには検索語は関係せず、指定した場合は無視されます。

書籍によっては、メニューデータ内のリンクが通常の参照リンクではなく、複合検索の候補グループとして記録されているものもあります。そうした書籍でメニューを閲覧する場合は、設定ファイルの項目「複合検索の候補の終了文字列」(%EndCandidateGroup)を利用してリンク先を表示させる必要があります。

メニューの出力要素
■メニューの開始文字列($MethodMenuStart)
(-mオプションにより表示のON/OFFを指定可能)
●メニュー第一階層のデータ

著作権表示

著作権表示は、書籍(副本)の著作権に関するデータを表示するメソッドです。このメソッドには検索語は関係せず、指定した場合は無視されます。

著作権表示の出力要素
■著作権表示の開始文字列($MethodCopyrightStart)
(-mオプションにより表示のON/OFFを指定可能)
●著作権データ

コマンドラインオプションと環境変数

ebminiの各種の設定は、起動時にコマンドラインでオプションを指定することでおこないます。一部のオプションについては、環境変数によっても指定することができます。

オプションは最初に環境変数が解析され、次にコマンドラインで指定したものが先頭から順に解析されます。一部の例外をのぞき、同じオプションを繰り返し指定するとあとから指定した値が既存の設定に上書きされます。詳しくは一覧を参照してください。

オプション一覧

オプションの一覧を以下に示します。対応する環境変数が存在するものは、オプションの欄に括弧つきで併記してあります。

オプション一覧
オプション
[環境変数]
機能 初期値
-o[+]Path
[EBMINI_OUTFILE]
出力ファイル指定。
このオプションは最初の一回のみ有効で、指定した時点で出力先が標準出力から指定したファイルへ切り替わります。
コマンドラインの先頭で指定すると、警告表示なども含めて以降の出力をすべて指定したファイルへ書き出すことができます(環境変数で指定している場合は最初に解析され、他の環境変数より先に有効になります)。
Pathの前に“+”をつけると追加モードになります。
標準出力
-cPath
[EBMINI_CFGFILE]
設定ファイル指定。
複数回指定が可能で、指定した順にすべてのファイルが解析されます。
-bPath
[EBMINI_BOOKPATH]
書籍のパス指定。
書籍のトップディレクトリ(catalogまたはcatalogsファイルのあるディレクトリ)を指定します。
未設定(空文字列)
-nNumber
[EBMINI_SUBBOOK]
副本の選択。
先頭の副本を1として、選択する副本の番号を指定します。
例)
-n2
1
-KIEncoding
[EBMINI_INCODE]
-KOEncoding
[EBMINI_OUTCODE]
検索語と検索結果の文字エンコーディング指定。
-KIが検索語、-KOが検索結果の指定になります。
Encodingは以下のものが指定できます。
eまたはEUC-JP
日本語EUC
sまたはShift_JIS
シフトJIS
uまたはUTF-8
UTF-8
例)
-KIs -KOu
-KIShift_JIS -KOUTF-8
日本語EUC
-m[+/-]Method
[EBMINI_METHOD]
検索メソッド指定およびメソッド名出力のON/OFF指定。
検索メソッドはコンマで区切って、複数指定することができます。
Methodの前に“+”をつけるとメソッド名出力がONに、“-”をつけるとOFFになります。
Methodは以下のものが指定できます。
wまたはword
前方一致検索
eまたはendword
後方一致検索
kまたはkeyword
条件検索
cまたはcross
クロス検索
lまたはlink
リンク検索
Mまたはmenu
メニュー
Cまたはcopyright
著作権表示
例)
-me
-mendword
-mw,c
-mword,cross
前方一致検索
メソッド名出力ON
-tSetting
[EBMINI_TEXTVIEW]
本文の表示設定変更。
Settingは以下のものが指定できます。
+
標準設定。前方・後方一致検索は完全一致項目のみ、条件検索はすべてのヒット項目、リンク検索は参照先の一項目が出力されます。
-
非表示。
数値
上限の指定。指定した数に達するまでヒットした項目が出力されます。0を指定すると-と同じ意味になります。
max
ebminiが一度に取得できる最大数まで出力されます。
例)
-t+
-tmax
標準設定
-lSetting
[EBMINI_LISTVIEW]
見出し一覧の表示設定変更。
Settingは以下のものが指定できます。
-
非表示。一覧の開始文字列と終了文字列も含め、見出し一覧全体が表示されなくなります。
数値
上限の指定。指定した数に達するまでヒットした項目が出力されます。0を指定すると-と同じ意味になります。
max
ebminiが一度に取得できる最大数まで出力されます。
例)
-l-
-l50
20
-sString
-sPage:Offset
検索語指定。
複数個指定が可能で、先に指定したものから順に15個までが有効になります。
通常は-sStringの形で検索語を直接指定します。リンク検索の場合は、-sPage:Offsetのようにコロン(:)をあいだにはさんでページ番号とオフセットを並べて、参照先の位置を指定します。
例)
-sdictionary
-s"辞書"
-s168094:982

補足事項

検索語のクォーティング

検索語(-sオプション)には指定したエンコーディングのマルチバイト文字を直接使用することができますが、おもにWindowsでシフトJISを使用する場合に、マルチバイト文字列内のいずれかのバイトがコマンドインタプリタやシェルの特殊文字として解釈されることがあります。こうしたケースでは、環境に合わせて検索語をクォーティングする必要があります。
例)
-KIShift_JIS -s"日本"
(Windowsのコマンドインタプリタの例)
-KIShift_JIS -s'表裏'
(bashシェルの例)

パスの表記

Pathの値は、Cygwin環境ではPOSIX形式に加えてWin32形式でも指定することができます。
例)
-o/cygdrive/c/windows/temp/ebdata.txt
-oc:/windows/temp/ebdata.txt
-oc:\windows\temp\ebdata.txt ※
(※Windowsのコマンドインタプリタの例。bashシェル上では\のエスケープが必要)

設定ファイル

検索結果の体裁をカスタマイズするには、設定ファイルを用います。設定ファイルでは、体裁を変更するためのフォーマット文字列や外字代替文字列が指定できるほか、オプションの一部も指定できるので、書籍(副本)に固有の設定を一つにまとめておくことが可能です。

書式

設定ファイルの各行は以下の書式で記述します。

[項目名] = [値]    ;コメント

";"があれば以降の部分はコメントとして取り除かれます。残りの行内に"="が含まれていたら、最初に出てくる"="より前が項目名、後ろが値とみなされ、その項目に値が設定されます。値の部分に何も記述しなければ、値は空文字列となります。

各行はファイル先頭から順に解析され、同じ項目を繰り返し指定するとあとから指定した値が既存の設定に上書きされます。

値の文字列には半角空白を含めることができますが、解析時に先頭と末尾の空白文字が取り除かれるため、先頭と末尾には空白文字を直接記述することができません。先頭と末尾に半角空白を置きたい場合は、下記のエスケープシーケンスを利用して\sまたは\x20と指定してください。
また、";"はどの位置にも直接記述することができないので、";"を含めたい場合も同様に\x3bと指定してください。

フォーマット文字列や外字代替文字列に設定する値には、マルチバイト文字を含めることができます。この場合は、設定ファイルのエンコーディングを出力用に指定するエンコーディングと同じにして保存する必要があります。たとえば、-KOオプションや設定ファイル項目OutputEncodingで出力用のエンコーディングをUTF-8と指定するなら、設定ファイル自体もUTF-8で保存するようにします。

値の特殊表記

フォーマット文字列と外字代替文字列の値には、以下の特殊表記を使うことができます。

エスケープシーケンス

\で始まるエスケープ文字列によって、1バイトの文字を表すことができます。使える組み合わせは以下のとおりです。

\t水平タブ
\n改行
\eエスケープコード(外字代替文字列に設定すると、デフォルト文字列の表示を抑制できる)
\s半角空白
\xhh16進数(2桁まで有効。\xの直後に16進数字がない場合は無視される)
\\\記号

%変換指定子

項目の一部には、対応する引数が設定されているものがあります。そうした項目の場合、%で始まる変換指定子を値に含めることで、引数を変換して表示させることができます。C言語のprintf系の関数と同じ動作ですが、書式は以下のように制限されています。

% [0] [数値] 変換文字

0 指定すると、フィールド幅を満たすための文字が空白ではなく0になります。
数値 表示する最小フィールド幅を表す数値です。指定すると、変換後の引数がこの幅に満たない場合はその幅になるまで空白が左側に詰められます。
変換文字 引数の型を以下のいずれかで指定します。
d : 符号あり10進整数
u : 符号なし10進整数
x : 16進整数、アルファベットは小文字
X : 16進整数、アルファベットは大文字

%記号自体を表示するには"%%"と記述します。"%%"をのぞく%の数が設定された引数の個数より多い場合、あるいは%変換指定子の書式が不正な場合はエラーとなり、値の設定はおこなわれません。

項目一覧

設定ファイルの項目一覧を以下に示します。

表中の%nは、n番目の%変換指定子で表示できる引数を表します。
各項目に設定できる最大バイト数は、フォーマット文字列が255バイトまで、外字代替文字列が31バイトまでとなっています。

設定ファイル項目一覧
項目 機能 初期値
オプション
BookPath = Path 書籍のパス指定。
書籍のトップディレクトリ(catalogまたはcatalogsファイルのあるディレクトリ)を指定します。
未設定(空文字列)
SubBookNumber = Number 副本の選択。
先頭の副本を1として、選択する副本の番号を指定します。
例)
SubBookNumber = 2
1
OutputEncoding = Encoding 検索結果の文字エンコーディング指定。
Encodingの指定のしかたは-KOオプションと同じですので、コマンドラインオプションの項を参照してください。
例)
OutputEncoding = u
OutputEncoding = UTF-8
日本語EUC
TextView = Setting 本文の表示設定変更。
Settingの指定のしかたは-tオプションと同じですので、コマンドラインオプションの項を参照してください。
例)
TextView = +
TextView = max
標準設定
ListView = Setting 見出し一覧の表示設定変更。
Settingの指定のしかたは-lオプションと同じですので、コマンドラインオプションの項を参照してください。
例)
ListView = -
ListView = 50
20
フォーマット文字列(基本表示制御用)
$BookStart = String 書籍の開始文字列。 空文字列
$MethodWordStart = String
$MethodEndwordStart = String
$MethodKeywordStart = String
$MethodCrossStart = String
$MethodLinkStart = String
$MethodMenuStart = String
$MethodCopyrightStart = String
各検索メソッドの開始文字列。 空文字列
$TextItemStart = String 本文項目の開始文字列。 空文字列
$TextItemEnd = String 本文項目の終了文字列。 \n
$ListStart = String 見出し一覧の開始文字列。 <Heading-List>\n
$ListItemStart = String 見出し一覧項目の開始文字列。
%1 : 見出し一覧項目の本文データのページ番号
%2 : 見出し一覧項目の本文データのオフセット
空文字列
$ListItemEnd = String 見出し一覧項目の終了文字列。
%1 : 見出し一覧項目の本文データのページ番号
%2 : 見出し一覧項目の本文データのオフセット
\n
$ListEnd = String 見出し一覧の終了文字列。 \n
$BookEnd = String 書籍の終了文字列。 \n
フォーマット文字列(EB Libraryによる表示データ加工用)
%IndentNumber = String インデント文字列。
Numberはインデント量で、0〜7が指定できます。
例)
%Indent1 = \t
空文字列
%BeginReference = String 参照開始文字列。 <
%EndReference = String 参照終了文字列。
%1 : 参照先のページ番号
%2 : 参照先のオフセット
|%d:%d>
%BeginSubscript = String 下付き表示の開始文字列。 空文字列
%EndSubscript = String 下付き表示の終了文字列。 空文字列
%BeginSuperscript = String 上付き表示の開始文字列。 空文字列
%EndSuperscript = String 上付き表示の終了文字列。 空文字列
%BeginCandidate = String 複合検索の候補の開始文字列。 空文字列
%EndCandidateLeaf = String 複合検索の候補の終了文字列(検索の入力語として直接使える候補の場合)。 空文字列
%EndCandidateGroup = String 複合検索の候補の終了文字列(候補がさらに細かい選択肢に分かれる場合)。
書籍によっては、メニューデータ内のリンクが通常の参照リンクではなく、複合検索の候補グループとして記録されているものもあります。そうした書籍でメニューを閲覧する場合は、この項目を利用してリンク先を表示させる必要があります。
%1 : 次の階層の候補一覧データのページ番号
%2 : 次の階層の候補一覧データのオフセット
空文字列
%BeginEmphasis = String 強調表示の開始文字列。 空文字列
%EndEmphasis = String 強調表示の終了文字列。 空文字列
%BeginKeyword = String 検索キーの開始文字列。 空文字列
%EndKeyword = String 検索キーの終了文字列。 空文字列
%BeginDecoration = String 文字修飾の開始文字列。 空文字列
%EndDecoration = String 文字修飾の終了文字列。 空文字列
%Newline = String 改行文字列。 \n
%GaijiFullDefault = String デフォルトの全角外字代替文字列。
%1 : 外字番号
[@f%04X]
%GaijiHalfDefault = String デフォルトの半角外字代替文字列。
%1 : 外字番号
[@h%04X]
外字代替文字列
@fNumber = String
@hNumber = String
外字代替文字列。
@fNumberが全角外字、@hNumberが半角外字の指定になります。Numberは外字番号を16進数で指定します。
代替文字列が未設定(空文字列)の外字は、デフォルトの代替文字列が表示されます。
また、"\e"または"\x1b"(エスケープコード一文字のみの文字列)を設定すると、デフォルト文字列の表示も抑制することができます。外字二個で表現されている文字に一つの文字を割り当てるような場合は、この方法でどちらかの外字の出力を抑制してください。
未設定(空文字列)

ライセンス

ebminiは、GPL(GNU General Public License)に基づいて配布されるソフトウェアです。バージョン2、あるいはそれ以降の任意のバージョンのGPLが定める条項にしたがって、再配布や改変をすることができます。

このソフトウェアは有用な面が見出されることを期待して公開するものではありますが、公開にあたってはいかなる保証もおこないません。詳しくは、ソースパッケージに付属のGNU General Public Licenseをお読みください。

なお、出力結果のエンコーディング変換を実現するにあたり、EB Libraryオリジナルのフック関数の一部を改変して利用させていただいています。EB Libraryの使用許諾については、ソースコード中の該当部分に示した著作権・ライセンス情報を参照してください。

Copyright©2005-2007 Kiichiro Kawano All rights reserved.
E-mail:k-kawano@mail.707.to
最終更新日: 2007/12/01(Sat)