Ruby/EB 拡張ライブラリ
for version 2
概要
EPWING/EBなどのCD-ROM 書籍にアクセスするための関数を集めた、C 言語のライブラリ
「EB」
をrubyから利用するための拡張ライブラリです。EBについて詳しくは配布元である
こちら
のページへどうぞ。EBの作者はMotoyuki Kasahara様です。
利用には当然EBが正しくインストールされている必要があります。
Ruby/EB version2より、EBの3.2以降を要求します。
また、Ruby/EBの1.xに対してテキストフック関係の仕様が変更されています。ご注意下さい。
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します。
 
  - keywordsearch_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で抜けても良いです)
 
  - keywordsearch(words,max=all)
  
 - wordsはキーワードの配列とし、キーワードによる検索を行います。それ以外は上記検索メソッドと同じ。
 
 - search2(word,max=all)
 
- exactsearch2(word,max=all)
 
- endsearch2(word,max=all)
  
   - この3つはそれぞれ、search/exactsearch/endsearchと同じですが、配列に入れたりyieldするものが異なります。
  
- イテレートとして用いると、[結果のEB::Positionインスタンス,検索語]をyieldします。そうでない場合は、同じ物を配列に入れて返します。
 
  - keywordsearch2(words,max=all)
  
 - wordsはキーワードの配列とし、キーワードによる検索を行います。それ以外は上記検索メソッドと同じ。
 
 - content(position)
  
 - positionはEB::Positionのインスタンスです。
  
- positionで示される位置の辞書の内容を返します。
 
  - copyright
  
 - 著作権表示を返します。
 
 - fontcode_list
  
 - 利用可能なフォントの一覧(配列)を返します。中身はintegerですが、それぞれEB::FONT_**の定数に対応します。FONT_16,FONT_24,FONT_30,FONT_48がそれぞれ0,1,2,3です。
 
 - fontcode/fontcode=
  
 - フォントの大きさを取得・指定します。EB::FONT_**の定数を与えます。取得する外字フォントのサイズに影響します。
 
 - get_widefont(code)
  
 - codeで示される全角外字フォントを得ます。返値はEB::ExtFontのインスタンスです。
 
 - get_narrowfont
  
 - codeで示される半角外字フォントを得ます。返値はEB::ExtFontのインスタンスです。
 
 - wide_startcode
  
 - 選択中の副本における全角外字の先頭コードを返します。
 
 - wide_endcode
  
 - 選択中の副本における全角外字の終了コードを返します。
 
 - narrow_startcode
  
 - 選択中の副本における半角外字の先頭コードを返します。
 
 - narrow_endcode
  
 - 選択中の副本における半角外字の終了コードを返します。
 
 - read_monographic(pos,width,height)
  
 - モノクロ図版のデータを取得し、Stringとして返します。
  
- posはEB::Positionのインスタンスで読み込み位置を示します。また、widthとheightで読み込まれるべき図版のサイズを指定します。サイズや位置はテキストフックの引数として得られます。
 
  - read_colorgraphic(pos,stoplength=65530)
 
- read_colorgraphic(pos,stoplength=65530){|block| proc}
  
  - カラーの図版を取得し、Stringとして返します。(最大stoplengthバイトまで)
  
- イテレータとして用いるとstoplengthバイトを読み出してblockとして与え、終わるまで繰り返します。その場合、メソッドの返値は読み込み長を返します。
  
- posはEB::Positionのインスタンスで読み込み位置を示します。また、stoplengthで読み込みバイト数を指定します。stoplengthは読み込むバイト数の上限です。電子ブックではEBライブラリに「データ終了位置が来ても読み込みをやめない」という制限事項があります。(BMPやJPEGのデコードを本ライブラリで行い、適当に止めれれば良いのですが)
 
   - read_wavedata(startpos,endpos,maxlen=65530)
  
 - 音声データをStringとして取得します。(最大stoplengthバイトまで)
  
- イテレータとして用いるとstoplengthバイトを読み出してblockとして与え、終わるまで繰り返します。その場合、メソッドの返値は読み込み長を返します。
  
- startposは開始位置、endposは終了位置を示す、EB::Positionのインスタンスです。これらはテキストフックから情報が得られます。
 
   - read_mpeg(code1,code2,code3,code4,maxlen=65530)
  
 - 動画データをStringとして取得します。(最大stoplengthバイトまで)
  
- イテレータとして用いるとstoplengthバイトを読み出してblockとして与え、終わるまで繰り返します。その場合、メソッドの返値は読み込み長を返します。
  
- code1かcode4までは、HOOK_BEGIN_MPEGのargv[2]からargv[5]に相当します。
 
   - compose_moviefilename(code1,code2,code3,code4)
  
 - code1からcode4で示される動画のファイル名を取得します。
 
 - hookset/hooset=
  
 - テキストフックのセットを取得・設定します。設定する場合はEB::Hooksetのインスタンスかnilしか出来ません。nilを設定したときはフックを解除します。
 
EB::Position
クラスメソッド
 - new(page,offset)
  
 - ページとオフセットからEB_Positionを設定します。
 
属性
読み書き可能です。
 - page
 
- offset
  
EB::ExtFont
外字を表します。インスタンスはEB::Book#get_widefontもしくはEB::Bookget_narrowfontで取得します。
 - widefont?
  
 - 外字が全角であればtrueを返します。
 
 - code
  
 - 外字のコードを返します。
 
 - to_xbm
  
 - 外字のビットマップデータをxbm形式のStringで返します。
 
 - to_xpm
  
 - 外字のビットマップデータをxpm形式のStringで返します。
 
 - to_gif
  
 - 外字のビットマップデータをgif形式のStringで返します。
  
- ファイルに落とせばそのままgifファイルになります。
 
  - to_bmp
  
 - 外字のビットマップデータをbmp形式のStringで返します。
  
- ファイルに落とせばそのままbmpファイル(Windows・OS/2)になります。
  
EB::Hookset
クラスメソッド
 - new
  
 - Hooksetのインスタンスを作成します。これはテキストフックを扱います。
 
メソッド
 - register(hook,proc)
 
- register(hook){|eb,argv|  proc }
  
  - hookはフックの種類を示す定数です。
  
- ebは呼び出し元のEB::Bookであり、argvはテキストフックの引数の配列です。
  
- イベント発生時に呼ばれるメソッドを設定します。hookに与える定数は、EB::の下に定数として定義されています(EB::HOOK_****)。"EB::定数"の項参照。v1.8からはbuffは無視されます。
また、返値がnil以外の場合はテキストに返値を書き込みます。(String以外の場合はObject#inspectします)
  
- 同じフックに対して複数回設定を行うと、最後に行った設定のみ有効です。
    
EB::定数
eb-3.2以降では以下のようなものが定義されています。eb.cの最後の方と、EB Libraryのリファレンスを参照して下さい。
- FONT_16
 - FONT_24
 - FONT_30
 - FONT_48
 - FONT_INVALID
 - HOOK_BEGIN_CANDIDATE
 - HOOK_BEGIN_COLOR_BMP(hookcode,?,page,offset)
 - HOOK_BEGIN_COLOR_JPEG(hookcode,?,page,offset)
 - HOOK_BEGIN_EMPHASIS
 - HOOK_BEGIN_GRAPHIC_REFERENCE
 - HOOK_BEGIN_GRAY_GRAPHIC
 - HOOK_BEGIN_IN_COLOR_BMP(hookcode,?,page,offset)
 - HOOK_BEGIN_IN_COLOR_JPEG
 - HOOK_BEGIN_KEYWORD
 - HOOK_BEGIN_MONO_GRAPHIC(hookcode,?,width,height)
 - HOOK_BEGIN_MPEG(hookcode,?,code1,code2,code3,code4)
 - HOOK_BEGIN_NARROW
 - HOOK_BEGIN_NO_NEWLINE
 - HOOK_BEGIN_REFERENCE
 - HOOK_BEGIN_SUBSCRIPT
 - HOOK_BEGIN_SUPERSCRIPT
 - HOOK_BEGIN_WAVE
 - HOOK_END_CANDIDATE_GROUP(hookcode,page,offset)
 - HOOK_END_CANDIDATE_LEAF(hookcode,0,0)
 - HOOK_END_COLOR_GRAPHIC(hookcode,page,offset)
 - HOOK_END_EMPHASIS
 - HOOK_END_GRAPHIC_REFERENCE
 - HOOK_END_GRAY_GRAPHIC
 - HOOK_END_IN_COLOR_GRAPHIC(hookcode,page,offset)
 - HOOK_END_KEYWORD
 - HOOK_END_MONO_GRAPHIC(hookcode,page,offset)
 - HOOK_END_MPEG
 - HOOK_END_NARROW
 - HOOK_END_NO_NEWLINE
 - HOOK_END_REFERENCE (hookcode,page,offset)
 - HOOK_END_SUBSCRIPT
 - HOOK_END_SUPERSCRIPT
 - HOOK_END_WAVE
 - HOOK_GB2312
 - HOOK_GRAPHIC_REFERENCE
 - HOOK_INITIALIZE
 - HOOK_ISO8859_1()
 - HOOK_NARROW_FONT(code)
 - HOOK_NARROW_JISX0208()
 - HOOK_NEWLINE()
 - HOOK_SET_INDENT(hookcode,indent)
 - HOOK_WIDE_FONT(code)
 - HOOK_WIDE_JISX0208()
 
例
#!/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 初版
 
Email:nyasu@osk.3web.ne.jp