module EB

# 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.0alphaへの対応は新改様のコーディングに依るものです。どうもありがとうございました。

EB3.0+への対応は、やまだ様、うえち様両名よりパッチを頂きました。どうもありがとうございました。

EB-3.2.1への対応は、高宗様、knu様作成のパッチによります。どうもありがとうございました。

## 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)
  この３つはそれぞれ、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の最後の方の定義を見て下さい。

### 例

    #!/bin/env ruby -Ke
    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

## 履歴

- v1.7 2002/03/31 高宗様、knu様のパッチにより、EB-3.2.1へ対応（定数）
- v1.6 2001/06/22 やまだ様、うえち様のパッチによりEB3.0の定数名変更に対応。
- v1.5 2001/04/04 新改様のコードにより、EBの3.0に対応。
- v1.4(再) 2000/06/26 折田様のパッチにより、人を惑わすextconf.rbを修正。
- v1.4 2000/06/23 search2系、イテレータ使用時のキャンセルが効くように
- v1.3 2000/06/22 黒田様からの再パッチ。活動時間の差異によるタイミングずれが....
- v1.2 2000/06/22 v1.1への修正。メソッド追加、機能整理など。(未公開)
- v1.1 2000/06/21 黒田様からのパッチによるsearch2系、Position、フック（未公開）
- v1.0 2000/04/10 初版