Ruby EB 拡張ライブラリ

概要

EPWING/EBなどのCD-ROM 書籍にアクセスするための関数を集めた、C 言語のライブラリ 「EB」 をrubyから利用するための拡張ライブラリです。EBについて詳しくは配布元である こちら のページへどうぞ。EBの作者はMotoyuki Kasaharaさんです。

利用には当然EBが正しくインストールされている必要があります。

EBが漢字コードとしてEUCを要求しますので、$KCODEはEUCでお願いします。

EB自身がGPLのため、本Ruby拡張ライブラリもGPLとします。

実はこの文章は こちら の笠原氏の文章のパクリの部分が多々あります。どうもすみません。

Book#search2系、Book#content,フック関連、Positionクラスなどは黒田様からのパッチに拠るところが大きいです。どうもありがとうございました。

EBの3.0への対応は新改様のコーディングに依るものです。どうもありがとうございます。


module EB

errorcode
ebでエラーが発生したときセットされます。
error_message
errorcodeを文字列にしたものを返します

EB::Book

クラスメソッド

new

メソッド

bind
オブジェクトを、パス path にある CD-ROM 書籍に結び付けます。パスは書籍のトップディレクトリ、つまり `CATALOG' か `CATALOGS' ファイルのあるディレクトリでなくてはなりません。
suspend
オブジェクトが現在選択中のもの、すなわち、選択中の副本、言語、フォントの高さをすべて未選択にします
bound?
書籍に結び付いているかどうかを調べます。
disctype
ディスクの形式を返します。 オブジェクトはあらかじめ書籍に結び付いていなければなりません。
path
書籍のパスを返します。 オブジェクトはあらかじめ書籍に結び付いていなければなりません。
charcode
書かれている文字コードを返します。 オブジェクトはあらかじめ書籍に結び付いていなければなりません。
subbook_count
オブジェクト内の副本の数を返します。オブジェクトは、あらかじめ書籍に結び付けられていなくてはなりません。
subbook_list
副本のリストを作成して副本コードの配列として返します。ここで得られる副本コードを用いて、set(subbook)/title/directoryメソッドにおいて副本を指定します。
title(subbook=currently)
現在選択中の副本の題名を返します。あらかじめ、オブジェクト内のいずれかの副本が選択されていなくてはなりません。
引数を省略すると、現在選択されている副本の題名を返します。
directory(subbook=currently)
現在選択中の副本のディレクトリ名を返します。あらかじめ、オブジェクト内内のいずれかの副本が選択されていなくてはなりません。
引数を省略すると、現在選択されている副本のディレクトリを返します。
set(subbook) : alias subbook=
副本を選択します。
subbook
現在選択中の副本の副本コードを返します。あらかじめ、オブジェクト内のいずれかの副本が選択されていなくてはなりません。
unset
副本の選択を解除します。
search_available?
現在選択中の副本が前方一致検索メソッドを持っているかどうか調べます。
副本が選択されていない場合はRuntimeErrorをraiseします。
exactsearch_available?
現在選択中の副本が完全一致検索メソッドを持っているかどうか調べます。
副本が選択されていない場合はRuntimeErrorをraiseします。
endsearch_available?
現在選択中の副本が後方一致検索メソッドを持っているかどうか調べます。
副本が選択されていない場合はRuntimeErrorをraiseします。
search(word,max=all)
wordをキーとして前方一致検索を行い、結果を配列に入れて返します。配列の各要素は[ heading, text ]として与えられます。
イテレータとして用いると、[heading,text]の配列をyieldします。返り値としてEB::Cancelを与えると、イテレートを終了します。(breakで抜けても良いです)
exactsearch(word,max=all)
wordをキーとして完全一致検索を行い、結果を配列に入れて返します。配列の各要素は[ heading, text ]として与えられます。
イテレータとして用いると、[heading,text]の配列をyieldします。返り値としてEB::Cancelを与えると、イテレートを終了します。(breakで抜けても良いです)
endsearch(word,max=all)
wordをキーとして後方一致検索を行い、結果を配列に入れて返します。配列の各要素は[ heading, text ]として与えられます。
イテレータとして用いると、[heading,text]の配列をyieldします。返り値としてEB::Cancelを与えると、イテレートを終了します。(breakで抜けても良いです)
search2(word,max=all)
exactsearch2(word,max=all)
endsearch2(word,max=all)
この3つはそれぞれ、search/exactsearch/endsearchと同じですが、配列に入れたりyieldするものが異なります。
イテレートとして用いると、[結果のEB::Positionインスタンス,検索語]をyieldします。そうでない場合は、同じ物を配列に入れて返します。
content(position)
positionはEB::Positionのインスタンスです。
positionで示される位置の辞書の内容を返します。
register_hook(hook,proc)
register_hook(hook){|buff,argv| proc }
イベント発生時に呼ばれるメソッドを設定します。hookに与える定数は、EB::の下に定数として定義されています。"EB::定数"の項参照。

EB::Position

クラスメソッド

new(page,offset)
ページとオフセットからEB_Positionを設定します。

属性

読み書き可能です。
page
offset

EB::定数

すみませんが、eb.cの最後の方の定義を見て下さい。


require "eb"

b=EB::Book.new
b.bind("/cdrom")
b.subbook=0
b.exactsearch( "じしょ" ) do |word,desc|
  print "====================¥n"
  print "==   ",word,"¥n"
  print "¥n",desc,"¥n"
#  EB::Cancel   # yield will be stopped
end

例2


require "eb"

b=EB::Book.new
b.bind("/cdrom")
b.subbook=0
b.exactsearch2( "じしょ" ) do |pos,word|
  print "====================¥n"
  print "==   ",word,"¥n"
  print "¥n",b.content(pos),"¥n"
#  EB::Cancel   # yield will be stopped
end

履歴


Email:nyasu@osk.3web.ne.jp