Kazuhiro's blog
ようこそ! Kazuhiro's blog
水曜日, 2月 22 2017 @ 08:14 午前 JST

Lookup 1.4+media

EPWINGに含まれる動画・音声データの再生を可能にしたLookup 1.4の改造版です。 動画データの再生は白井さんから提供頂いたパッチによるものです。 eblookへのパッチと併せて使用して下さい。 細かいバグ修正も入っています。

for your download

lookup-1.4+media-20170115.tar.gz

アーカイブの使い方

インストールは通常のLookupと同様の手順で行って下さい。 ただし、configureスクリプトからの--with-emacsオプションは無効のようなので、指定する場合はbash等のシェル上から

$EMACS=/your/emacs ./configure .....

とするか、make時に

$make EMACS=/your/emacs install

のようにして下さい。 また、eblookにもパッチを当てる必要があります。 20061204以降のLookupを使用する場合は、EB Libraryのバージョンを上げない場合でも「必ず」20061204以降のeblookを使用して下さい。

追加される機能、従来からの変更

ndebエージェントでの音声・動画リンクの生成

パッチをあてたeblookを使う事で音声・動画に対するリンクが生成されます。 対応する音声・動画はEB Libraryに依存しており、EPWINGのWAVE形式の音声とMPEG1形式の動画となります。 (詳細はEB Libraryのドキュメントを参照して下さい。)

た、補助パッケージを使用している場合はarrangeも正しく設定しないといけません。 arrangeの先頭あるいはndeb-arrange-jpeg等のイメージデータのarrangeの直前または直後にndeb-arrange-wavendeb-arrange-mpegを、arrangeの最後にndeb-arrange-snd-autoplayを追加して下さい。

ndeb-binary-programsの拡張

ndeb-binary-programsに、関数名のシンボルを指定する事で外部プログラムの代わりに関数を呼び出す事ができるようになりました。 この際にはプロパティの指定は無視されます。 音声再生用の関数として、play-sound-file関数を使用するndeb-binary-play-sound-fileと、Meadow専用のndeb-binary-play-with-mciが用意されています。

また、プロパティに:directが追加されました。 マルチメディアデータは、一般にHONMONファイル等に収録されており、Lookupではデータを抽出し、一時ファイルを作成した後にプログラムの起動・関数の呼出しを行います。 しかし、動画については抽出せずとも元々一つのファイルとして存在しています。 :directnon-nilにすると、動画の再生時には、最初から存在するファイルを引数にしてプログラムの起動を行うようになります。 このファイルには拡張子が付いていないので、動画を再生するプログラムは拡張子に依らず再生が可能である必要があります。 加えて、対応するeblook (20080116以降)が必要です。

音声・動画リンクの再生

ndeb-binary-programsに、wavempegに対応した記述を追加する事で音声・動画の再生が可能になります。 MCI機能を持つMeadowや、play-sound-file関数を持つEmacsでは外部プログラムを使用せずに音声再生が可能です。 この機能を利用する場合は、ndeb-binary-programswaveに対応する記述としてndeb-binary-play-with-mci、あるいはndeb-binary-play-sound-fileを指定するか、ndeb-binary-programsを一切指定しないでデフォルト値を使用して下さい。 一例としては~/.lookupに以下のような記述を行います。

(setq ndeb-binary-programs
      '((wave ndeb-binary-play-sound-file)
        (jpeg "gv")))

尚、ndeb-binary-play-sound-fileは、Meadowでは使用しないで下さい。 play-sound-fileの挙動が他のEmacsと異なる為に不具合を起こします。 また、ndeb-binary-play-sound-fileを使用する場合、音声再生中はEmacs上で他の操作が一切できなくなります。 この為、後述する:snd-autoplayオプションを有効にすると、音声再生が終了するまでcontentが表示されません。

上記以外の場合の音声再生、及び動画の再生には外部プログラムが必要になります。 ndeb-binary-programsは例えば以下のように設定します。

(setq ndeb-binary-programs
      '((wave "mplayer")
        (mpeg ("mplayerc" "/play") :direct t)
        (bmp "gv")))

ここではmplayerを音声再生プログラムの例に出していますが、音声の最後が再生されない不具合が確認されています(2006/5/1)ので、mplayerは使わない方がよいようです。 お勧めの外部プログラムがあれば教えてください。

Meadowではユーザー側でndeb-binary-programsを設定しない場合、音声に関しては可能であればndeb-binary-play-with-mciを使用し、そうでない場合と、その他の画像・動画データに関してはfiber.exeを起動するように自動的に設定されます。

辞書オプション:snd-autoplayの追加

non-nilにするとarrangeの最後で音声を再生します。 補助パッケージを使用している場合はそのままではオプションが有効になりませんのでarrangeを前述のように設定して下さい。

変数ndeb-play-sound-from-entry, ndeb-play-movie-from-entryの追加

これらの変数にkey(define-keyのdocstringを参照して下さい)を指定する事でEntryモードから音声・動画の再生が可能になります。 例えば、以下の様な内容を~/.lookupに記述を行います。

(setq ndeb-play-sound-from-entry "z")
(setq ndeb-play-movie-from-entry "x")

上記の場合、Entryモードからzを押す事でカーソル位置にあるentryの音声を、xを押す事で動画を再生します。 この際にprefix argumentを指定すると、先頭からn番目の音声、あるいは動画を再生できます。

尚、これらの変数による設定は、後述する変数ndeb-play-binaries-from-entryで、ほぼ同様の事が行えます。 違いはdescribe-keyの時の表示とエラーメッセージの一部だけ(の筈)です。 また、ndeb-play-binaries-from-entryも含め、同じkeyを指定した場合はndeb-play-binaries-from-entryndeb-play-movie-from-entryndeb-play-sound-from-entryの順に設定が優先されます。

変数ndeb-play-binaries-from-entryの追加

この変数にkey(define-keyのdocstringを参照して下さい)とリンクのタイプを指定したリストのリストを設定する事でEntryモードから音声・動画・画像の再生が可能になります。 例えば、以下の様な内容を~/.lookupに記述を行います。

(setq ndeb-play-binaries-from-entry
      '(("z" wave)
        ("x" mpeg)))

上記の場合、Entryモードからzを押す事でカーソル位置にあるentryの音声を、xを押す事で動画を再生します。 この際にprefix argumentを指定すると、先頭からn番目の音声、あるいは動画を再生できます。 変数ndeb-play-sound-from-entry, ndeb-play-movie-from-entryの設定例と同じ状態になる設定です。

リンクのタイプは複数指定する事も可能です。

(setq ndeb-play-binaries-from-entry
      '(("z" wave mpeg)
        ("x" xbm bmp jpeg)))

上記の場合、Entryモードからzを押す事でカーソル位置にあるentryの最初にある音声または動画を、xを押す事でentryの最初にある画像を再生します。 この際にprefix argumentを指定すると、keyに対応するタイプのうち、先頭からn番目のリンクを再生できます。

BMPイメージの表示方法の変更、変数ndeb-binary-bmp-display-typeの追加

Meadowを除く多くのemacsではBMPイメージを直接表示する事はできず、Lookup 1.4では一旦TIFFファイルに変換してから表示しています(ちなみにTIFFイメージが扱えない場合はBMPイメージとして直接表示、それもできない場合は表示しないという実装になっています)。 BMPイメージを直接扱えるMeadowでもその様になっているのはRLE圧縮されたBMPが表示できない頃があった為だったと思うのですが(あまり覚えていません)、現在のMeadowではRLE圧縮されたBMPも表示できるのでBMPで直接表示、ppm、TIFFの順番で表示に使える画像形式を調べるようにしました。 TIFFよりppmを優先して使用するようにしたのは、TIFFは避けたほうがよいという意見があったのと、私のところではNTEmacsでeblookが出力するTIFFファイルを表示できなかった為です。

実際に表示に使用する形式はndeb-binary-bmp-display-typeに設定されます。 不都合がある場合は~/.lookupで直接指定する事もできます。

インライン画像の表示方法の変更

Lookup 1.4では画像は全て前後に改行をはさんで表示するようにしていますが、(理化学辞典等でよく使われている)インライン画像に関しては本文のテキスト中に、改行をはさまずに表示するようになります。 eblookへのパッチも必要です。 尚、この変更により、ndeb-arrange-fill-linesがうまく動かない場合が出てくると思われます。

変数ndeb-gaiji-sizeの追加、辞書オプション・エージェントオプション:gaiji-sizeの追加

ndebエージェントでビットマップイメージによる外字表示を行っている場合、辞書が対応していれば外字の大きさをより大きなものに変更できるようになります。 変数ndeb-gaiji-sizeに、使用する外字の大きさ(高さ)を整数値で指定して下さい。 通常は16, 24, 30, 48のいずれかです。 指定した大きさの外字が無い場合は指定した値を越えない最も大きな外字を探し、それも無い場合は16ドットの外字を使用します。

個々の辞書について指定する場合は辞書オプションまたはエージェントオプション:gaiji-sizeを整数値で指定して下さい。 オプションで指定した大きさの外字が無い場合は16ドットの外字を取得します。 オプションが指定されていない辞書については、初めて外字データを取得する際に変数ndeb-gaiji-sizeの値に応じて自動的にオプションが設定されます。

bitmap-muleによる外字表示を行っている場合は、外字のサイズを大きくすると表示が乱れるので変更できないようにしています。

図版メニューの表示

EPWINGの広辞苑第五版などに含まれる図版メニューに対応しました。 対応するEB Library (4.3以上)とパッチをあてたeblook (20061204以降)が必要です。 selectモードかentryモードからMを押す(lookup-select-menuまたはlookup-entry-show-menu)事で図版メニューが存在する場合はentryに出現します。 同様にイメージマップも表示できるようになりました。

イメージからの参照先は、画像上の領域を示したリンクとして画像の下に表示されます。 また、emacs22以上では画像をクリックする事で該当する参照先を表示させる事ができます。

ndebのキーワード検索への対応

広辞苑第五版のような条件検索やクロス検索に対応した辞書と20070120以降のeblookを使用する事で、キーワード検索に対応します。 キーワード検索を行うには辞書オプション:default-methodや変数lookup-default-methodを設定するか、検索文字列の先頭に"@"をつけて下さい。 複数語を指定する場合はスペースやタブで区切ります。 例えば、広辞苑第五版では

@犬 猿 雉

のように検索文字列を指定します。 条件検索とクロス検索の両方の結果をそのまま返す為、最大でlookup-max-hitsの倍の項目数がヒットする可能性があります。

ndebでワイルドカード検索に対応

ワイルドカード検索に対応したeblookと、対応した辞書を使用する事でa?ple*の様なパターンで検索できるようになります。

ndebにおけるebnet対応

EB Libraryはversion 4から遠隔サーバにある辞書へのアクセスが可能になりました。 ebnetとはこの際に使用されるプロトコルです。 サーバ側にはebnetdが必要です。 同様の事はndtpによっても可能ですが、ebnetを使用すればndtpでは対応していない画像、音声等のマルチメディアデータが扱えます。 UNIX環境ではEB Libraryがebnetに対応していればeblookも自動的に対応しますが、Windows環境(厳密にはコンパイル時にDOS_FILE_PATHがdefineされる環境)ではeblookのソースにも変更が必要です。

ndeb-program-arguments, ndeb-process-coding-systemの変更

ndeb-program-argumentsが文字列から文字列のリストに変更になりました。 Windows上のeblook.exeが従来のndeb-program-argumentsの値を一つの引数として受け取るので、このままでは空白を含まない一つのオプションしか指定できない為です。 自動的に追加されていた-qオプションもこの変数で指定するようにしています。 また、ndeb-process-coding-systemもEUCに明示的に設定しています。 これらの値を~/.lookupで変更している場合は注意して下さい。

ndebにおける字下げの対応
変数ndeb-minimum-indentの追加
辞書オプション:minimum-indentの追加

EPWING辞書に含まれる字下げ情報に対応しました。 20070806以降のeblook 1.6.1+mediaが必要です。 字下げ量の指定が辞書オプション:minimum-indentで指定された値を越えた場合に、越えた文字数分の字下げを行います。 指定しない場合は変数ndeb-minimum-indentの値が参照されます。 デフォルトでは1です。 字下げ量の最小値が0である書籍を使用している場合はこれらの値を0にした方が良いかもしれません。

ndebにおける上付き・下付き文字への対応
変数ndeb-default-script-heightの追加
辞書オプション:script-heightの追加

Emacs 21.1以降でEPWING辞書に含まれる上付き・下付き文字情報に対応しました。 文字の大きさは、displayプロパティでheightを設定して変更しています。 設定する値は辞書オプション:script-heightの値が参照されます。 指定されていない場合は変数ndeb-default-script-heightの値が使用されます。 設定できる値に関してはEmacs lispのリファレンスを参照してください。

ndebにおける文字修飾への対応
ndeb-italic-face, ndeb-bold-face, ndeb-emphasis-faceの新設

EPWING辞書に含まれる文字修飾情報に対応しました。 イタリック体・ボールド体については20090219以降のeblook 1.6.1+mediaが必要です。 イタリック体・ボールド体・強調表示について、それぞれndeb-italic-face, ndeb-bold-face, ndeb-emphasis-faceを割り当てます。 表示が気に入らない場合はfaceの設定を変更してください。 手抜き実装のため、入れ子になっている場合は一番内側の指定のみ有効になります 。

ndebにおけるUnicode外字拡張表示への対応

Boookendsで提供される書籍で使用されている、Unicode外字拡張表示に対応しました。 対応するEmacs (23以降、もしくはMULE-UCSが利用可能) とeblook (1.6.1+media-20100515以降) およびEB Library (4.4.3以降) が必要です。

ndebにおける見出し語への文字修飾情報の出力

ndebエージェントでは、見出し語を得るときはeblookの内部変数decorate-modeoffにする為、上付き・下付き・文字修飾といった情報は捨てていましたが捨てないようにしました。

ndebにおけるJIS X 4081 UTF-8 extensionの書籍への対応

eblookが対応していれば、エージェントオプション:codingutf-8を指定する事でJIS X 4081 UTF-8 extensionの書籍も扱えます。

ndebにおける辞書オプション:backward-methods:backward-headingの新設

:backward-methodsに検索方法のリストを指定した場合にはそれらの検索方法で検索して得られたエントリについて、また、:backward-headingに正規表現を指定した場合はそれに見出しがマッチするエントリについて、エントリの位置は項目の途中を指しているとみなして遡って項目全体を表示するように試みます。 20100515以降のeblook 1.6.1+mediaが必要です。 通常は指定する必要はありません。

ndebエージェントにおけるEBWinのUnicode検索置換ファイルの読み込み
変数ndeb-set-alternates-automaticallyの新設

エージェントの場所として指定したディレクトリ (CATALOGもしくはCATALOGSファイルが存在するディレクトリ)にalternate.iniというファイルがあると、Unicode検索置換ファイルとして読み込みます。 この置換は:expanders:normalizersの処理には影響を与えず、該当するエージェントでの全ての検索時に、実際の検索の直前に常に行われます。 おそらくEmacs 21以前では動作しません。 また、完全な動作にはEmacs 23以降が必要です。 内部的には新設された:alternatesオプションを設定しますが、この部分は変更されるかもしれません。

この動作は変数ndeb-set-alternates-automaticallynil、もしくはエージェントオプション:alternatesが設定されている場合は行われません。

ndebエージェントにおけるEBWinの外字定義ファイルの読み込み
変数ndeb-set-gaiji-table-automaticallyの新設

エージェントの場所として指定したディレクトリ (CATALOGもしくはCATALOGSファイルが存在するディレクトリ)に、例えば辞書の実体が存在するSUBDIRというサブディレクトリとsubdir.mapというファイルがあると、subdir.map外字定義ファイルとして読み込みます。 おそらくEmacs 21以前では動作しません。 また、完全な動作にはEmacs 23以降が必要です。 内部的には:gaiji-tableオプションを設定します。

この動作は変数ndeb-set-gaiji-table-automaticallynil、もしくは辞書オプション:gaiji-tableが指定されている場合は行われません。

ndebsエージェントの新設

ndebsエージェントが新しく使用可能になります。 これはndebエージェントのvariantです。 ndebではエージェント一つに対してeblookのプロセスが一つ必要ですが、ndebsでは複数のエージェントで一つのeblookのプロセスを共有して使います。

利点は起動にかかる時間を短縮できる事と、MeadowやNTEmacsのように同時に起動できる子プロセスの数に制限がある場合に、制限に届きにくくなる事です。 逆に、UNIX環境やエージェントの数が少ない場合にはあまりメリットはありません。 加えて、検索時にはndebエージェントよりeblookへのコマンドの発行数が増える為、ndebよりも時間がかかるかもしれません。

設定はほとんどndebエージェントと変わりません。例えば、以下のように設定します。

(setq lookup-search-agents
      '((ndebs "/usr/local/dic/kojien")))

エージェントオプション、辞書オプションについてもndebエージェントと同じものがほとんど使えます。 多くのケースでは~/.lookupに書かれたエージェントや辞書名に使用している"ndeb""ndebs"に書き換えるだけでそのまま使えます。 ただし、ndeb-binary-*等のカスタマイズ変数まで書き換えないように注意して下さい。

ndebエージェントと異なり、辞書のあるディレクトリの指定が誤っていた場合等にエラーにならずに辞書数0のエージェントとなります。 また、ndeb-program-arguments, ndeb-process-coding-systemによる指定は無視され、ndebs-program-arguments, ndebs-process-coding-systemが参照されます。 辞書オプション:codingによる指定も無視されますが、エージェントオプションによる指定は有効です。

eblookが対応していれば、エージェントオプション:codingutf-8を指定する事でJIS X 4081 UTF-8 extensionの書籍も扱えます。

変数ndeb-set-coding-automaticallyの新設

この値がnon-nilかつ、ndebsエージェントにおいてエージェントオプション:codingが指定されていない場合、初回アクセス時に自動的にエージェントオプション:codingと (Emacs23以降で、かつ設定されていなければ) :charsetsを設定します。 環境によっては初回アクセス時の速度が目に見えて落ちます。 耐えられない人はnilに変更するか、エージェントオプション:codingを全てのndebsエージェントで設定してください。

ndebs辞書における検索方法の自動設定

ndebs辞書では初期化の際に利用可能な検索方法が設定されます。

ndsrdでワイルドカード検索、正規表現検索に対応

a?ple*の様なパターンで検索できるようになります。

ndsrdで検索語の正規化

正規表現検索以外の場合に空白文字などを検索語から取り除くようにしました。

変数ndsrd-program-argumentの追加

ndsrdエージェントがcsrdを呼び出す際に付加するオプションを文字列のリストで指定できるようになりました。 Meadowからcsrdを呼び出す際に、文字列のコードがEUCだとcsrdにうまく渡されない場合があった為、オプションを指定してシフトjisで呼び出せるようにする為です。

ndspellエージェントにおける候補の並び順の変更

ndspellエージェントが複数の候補を返す際に、ispell等が返すのとは逆の順番に候補を並べていたのを合わせるようにしました。

変数ndspell-ispell-program-argumentsの追加

ndspellエージェントがispellプログラムを起動する際に使用する追加の引数を文字列のリストで指定できます。 デフォルトはnilで、追加の引数はありません。 通常は設定する必要はありません。

ndicエージェントにおけるエージェントオプション:codingの有効化

ndicエージェントでSDIC形式の辞書を検索する場合、エージェントオプション:codingによって辞書の文字コードを指定できます。

文字コードの異なる辞書が混在する場合は辞書のディレクトリを分け、複数のエージェントを設定する必要があります。

ndicエージェントにおけるsalook, saryのサポート

ndicエージェントでSDIC形式の辞書を検索する場合、SUFARY (の古い版) に付属するarrayコマンドを利用することで高速に検索が行えますが、salookコマンド及びsaryに付属するsaryコマンドも利用できるようにしました。 array, salook, saryの順番で検索を行い、最初に見つかったコマンドを使用するようになります。 この時、SDIC辞書オブジェクトのstrategyにはそれぞれarray, salook, saryが指定されます。

sdicf.elを改造して実現していますので、SDICに付属するsdicf.elが読み込まれると機能しません。

ndicエージェントにおける、SDIC辞書での検索結果のソート

SDIC辞書をarraysaryで検索した場合、その結果が辞書の登録順にならない (事がある) ので、見出し語を使ってソートするようにしました (saryは検索結果をソートしていました)。 主に英辞郎対策です。

sdicf.elを改造して実現していますので、SDICに附属するsdicf.elが読み込まれると機能しません。

ndicエージェントにおける、SDIC辞書でのcontentの書式の変更
変数ndic-sdic-default-content-formatの追加
ndicエージェントによるSDIC辞書検索時に辞書オプション:content-formatの追加

元々の設定ではSDIC辞書の内容の表示の際に見出しとの間に空行を挟んで4桁インデントされるなど、かなりゆったりとした表示になっていますが、個人的な好みによりもっと詰めて表示するようにしました。 また、変数ndic-sdic-default-content-formatにformat stringを指定することでカスタマイズ可能としました。 以前と同様の表示にするには(setq ndic-sdic-default-content-format "%snn %sn")と設定してください。 また、辞書オプション:content-formatが設定されている場合はndic-sdic-default-content-formatの代わりに参照されます。

変数ndic-sdic-default-strategyの追加
ndicエージェントによるSDIC辞書検索時にエージェントオプション:sdic-strategyの追加

SDIC辞書に対してエージェントオプション:sdic-strategyにより、SDIC辞書検索時のstrategyを指定できます。 値はそのままsdicf-open関数のSTRATEGY引数として使われます。 指定が無い場合はndic-sdic-default-strategyが使用され、nilの場合はSDIC側のデフォルトに従います。 辞書ごとに異なるstrategyを指定したい場合は辞書のディレクトリを分け、複数のエージェントを設定する必要があります。

ndicエージェントによるSDIC辞書検索時におけるgrepの呼び出し方法の変更
変数sdicf-grep-program-argumentsの追加

egrep, fgrepは利用せず、grepを引数付で呼び出すようにしました。 また、デフォルトではgrep-aオプションを付けて呼び出し、辞書ファイルがバイナリファイルと認識される場合がある問題を回避するようにしました。 あまりないと思いますが、grepが古すぎて-aオプションをサポートしない場合などは変数sdicf-grep-program-argumentsnilにしてください。

sdicf.elを改造して実現していますので、SDICに付属するsdicf.elが読み込まれると機能しません。

ndictエージェントにおける検索文字列のチェックの廃止

ndictエージェントは検索文字列にASCII以外の文字があると検索しないようになっていますが、困る時があるのでチェックしないようにしました。

ndestエージェントの新設

これは、平林幹雄さんが作成された全文検索システムであるHyper Estraierのインデックスを検索するエージェントです。 まだ実験段階のものですが、分けて管理するのが面倒になったので一緒に入っています。 説明は別ページに分けています。

ndwnjエージェントの新設

これは、日本語WordNetのsqlite3用データベースを検索するエージェントです。 説明は別ページに分けています。

ワイルドカード検索と正規表現検索の分離

ワイルドカード検索(?*を使った検索)は、Lookup本体側で正規表現検索としてクエリーを作り、エージェントに渡していました。 しかし、ndsrdやndeb[s]エージェントでは正規表現に変換する前の文字列を受け取った方が都合がいいのと、正規表現検索の書式はエージェント依存という建前から、ワイルドカード検索を検索メソッドの一つになるように変更しました。 正規表現への変換等が必要な場合はエージェントが行わなければなりません。 ワイルドカード検索が可能な辞書はSelectモードではmethodに"w"と表記されるようになります。 また、ワイルドカード検索のクエリーにlookup-query-methodを行うとシンボルwildとなります。

ターミナル上での外字表示の変更

ターミナル等のビットマップイメージでの外字表示ができない環境において、外字テーブル(辞書オプション:gaiji-table)で指定のない文字は<gaiji=za423>等の文字列がそのまま表示されます。 この改造版では代替文字(デフォルトでは"_")が表示されるようになります。

変数lookup-reference-default-captionの追加

referenceを貼り付ける文字列や、referenceの見出しの文字列が指定されていない場合に使われる文字列です。 本来はエージェント側で対応する事のような気もしますが、このパッチではLookup側で対応しています。

大きなサイズの画像表示に関する変更

インラインでの画像表示の際に、画像のサイズがndeb-max-image-sizeバイトよりも大きいと先頭からndeb-max-image-sizeバイトまで読み込んで表示しようとしますが、危険なので読み込まないようになります。 尚、XEmacs上ではndeb-max-image-sizeの設定はおそらく無視されます。

辞書オプション:normalizersの新設

関数名のシンボルもしくは関数名のシンボルと引数のリストを要素とするリストを指定する事で、検索文字列の正規化をかけることができます。 ここで指定された正規化は検索前に常に行われます。 例えば、特定の辞書に対しては検索をかける前に検索文字列のアルファベットから常にアクセントを取り除くといった事が行えます。

関数は第一引数として文字列を受け取り、文字列のリスト、もしくはnilを返すものが利用できます。 関数は指定された順番に、直前の関数が返した文字列に対して実行されます。 例えばa, b, c三つの関数を指定した時に、元の検索文字列が"0"に対して関数a("1" "2")という結果を返した場合、関数b"1""2"をそれぞれ引数として計2回実行されます。 関数bが返した結果が("1" "2")("2" "3")だったとすると、関数c"1""2""3"を引数として3回実行されます。

検索は最後の関数によって得られる文字列のリスト (複数回実行された場合はLookup側でまとめます) を使って行われます。 ndsrdエージェントでは実際に使用している例があります。

予め用意している関数として以下のものがあります。

lookup-normalizer-strip-chars

検索文字列から指定された文字を取り除きます。 追加の引数で取り除く文字のリスト、もしくは取り除く文字を含んだ文字列を指定します。

lookup-normalizer-japanese-old-to-new
lookup-normalizer-japanese-new-to-old

日本語の旧字を新字に、もしくは新字を旧字にそれぞれ変換します。 変換テーブルはLookup 2.0のものを利用しています。 文字コードutf-8が扱える環境が必要です。

lookup-normalizer-strip-latin-alphabet-accent

アルファベットからアクセント類を取り除きます。 変換テーブルはLookup 2.0のものを利用しています。 文字コードutf-8が扱える環境が必要です。

lookup-normalizer-wrapper

追加の引数に、文字列を受け取り文字列を返す関数名のシンボルを指定するとnormlizerとして利用できます。 更に追加の引数があれば呼び出す関数に渡されます。

辞書オプション:expandersの新設
変数lookup-query-expansion-methodsの新設
辞書オプション:expansion-methodsの新設

辞書オプション:expandersは辞書オプション:expander, :expand-filter, :hiragana, :stemmerを統合・拡張したようなオプションです。 指定された内容に基づき、検索の際に対象の辞書でヒットしなかった場合に新たな検索文字列候補により検索をかけ、結果を取捨選択できます。

具体的にはexpanderとfilter関数のconsを要素とするリストを指定します。 expanderに指定できる内容は:normalizersオプションの要素と同様で、関数名のシンボルもしくは関数名のシンボルと引数のリストです。 expanderに指定できる関数の仕様も:normalizersオプションの要素と同様で、また、従来の:expanderオプションで指定できる関数も指定できます。 filter関数は従来の:expand-filterオプションで指定できる関数をそのまま指定できます。 すなわち、文字列とエントリのリストを取り、エントリのリストを返す関数名のシンボル、もしくはnilが利用できます。 nilの場合は得られた全てのエントリを結果として用います。

指定された順番にexpanderによる検索とfilterによる選別を行い、最初にエントリが得られた時点で検索を打ち切ります。 例えば従来の:hiraganaオプションと:stemmerオプションでstem-english関数を指定した状態と同等にする場合は

(lookup-set-dictionary-option
 "dictionary-id" ':expanders
 '((lookup-kanji-get-readings . lookup-kanji-filter)
   (stem-english . nil)))

のように設定します。

尚、デフォルトの設定ではワイルドカード検索・正規表現検索・全文検索時にはexpander/filterによる拡張検索は行いません。 これは、辞書オプション:expansion-methodsもしくは変数lookup-query-expansion-methodsで設定できます。 いずれの場合も拡張検索を行う検索方法のシンボルのリストを指定します。 勿論辞書オプションの方が優先されます。

辞書オプション:expander, :expand-filterの廃止

上述の様に、辞書オプション:expandersオプションに統合されたので廃止しました。 :hiragana, :stemmerオプションは使用可能です。

変数lookup-expanded-heading-prefixの新設

expander/filterによる拡張検索でヒットしたエントリの見出しの先頭につける文字列を指定します。 文字列は拡張検索をかける前の検索後を引数にしてformat関数にかけ、その結果を表示に用います。 エントリの本来の見出しはその後に続いて表示されます。

辞書オプション:charsetsの新設

キャラクターセットのリストを指定します。 指定されたキャラクターセットのいずれにも存在しない文字を検索文字列が含んでいた場合に検索を試みなくなります。 不要な検索を試みないことで検索時間の短縮を図ることができます。

このオプションはLookup 2.0に実装されたものを移植したもので、Emacs 23以降でのみ有効です。

辞書オプション:codingの拡張

検索文字列が指定された文字コードで正しくエンコードできない場合には検索を試みなくなります。Emacs 23以降で、:charsetsオプションが指定されている場合はこのチェックは行われません。

辞書オプション:reference-regexpの新設

referenceの開始・終了文字列の正規表現のconsを設定する事で、関数lookup-arrange-referenceが辞書オプション:reference-patternに従ってreferenceを検索する際の検索範囲を制限します。 通常、ユーザが直接指定する事はありません。

辞書コマンドsetup-dictionaryの新設

辞書の初期化時にエージェント/辞書に特有の処理を加えることができるようになります。 辞書IDは設定されていますが、辞書のタイトル、拡張検索の検索方法の一覧への追加、外字テーブルの設定等は行われていない段階で設定されたコマンドが呼び出されます。 通常、ユーザーが直接指定する事はありません。

検索語の切り出し、ndkksエージェント、lookup-kanji-get-readings関数の統合

Lookupではテキストからの検索語の切り出し、読みを検索するndkksエージェント、漢字を含む検索語から読みを検索するlookup-kanji-get-readings関数において形態素解析エンジンとしてKAKASIを利用しています。 Lookup 1.4+mediaでは、これらのコードを統合し、また、ChaSenMeCabの様な他の形態素解析エンジンを利用しやすいように変更を加えています。 詳しい変更内容は別ページにて解説します。

キャッシュ機構の新設

外部ファイルに保存することでLookupやEmacs終了後も内容を保持できるキャッシュ機構を導入しました。 EPWING書籍の副本の一覧や、ndicエージェントにおけるディレクトリ中のファイル一覧等、一度設定してしまえばあまり変更されないであろう部分をキャッシュさせることで起動にかかる時間を短縮させるのがねらいです。

デフォルトでは~/.lookup-cacheにキャッシュの内容を保持します。 ファイル名は変数lookup-cache-file-nameで変更できます。 また、キャッシュファイルの文字コードはlookup-cache-file-coding-systemで指定できますが、デフォルト値はEmacs22以前と23以降で異なります。 複数のバージョンのEmacsを併用している場合は自分で設定してください。 例えば以下のような記述を~/.lookupに追加します。

(setq lookup-cache-file-coding-system 'emacs-mule-unix)

lookup-enable-cachenilにするとキャッシュは無効になりますが、キャッシュデータの収集と保存は行われます。

キャッシュの内容と実際の状態に不整合が生じた場合はキャッシュをクリアしてください。 Lookupを起動した事があるEmacsを全て終了させた状態でキャッシュファイル(デフォルトでは~/.lookup-cache)を削除するか、M-x lookup-cache-clearM-x lookup-cache-saveを実行してEmacsを終了すればクリアできます。

現在キャッシュしている内容は以下の通りです。

ndebsエージェント

各エージェントにおける書籍の一覧。各辞書におけるメニューの有無・利用可能な外字サイズの一覧・利用可能な検索方法の一覧。

ndicエージェント

各エージェントにおけるファイル名の一覧。dictd形式の辞書における(インデックスではない)辞書ファイル名。

ndictエージェント

サーバーのプログラム名と辞書の一覧。

補助パッケージの自動読み込み

Lookupには個々のエージェントや辞書の細かな調整を行うために補助パッケージという仕組みが存在しています。 通常、補助パッケージの利用は~/.lookup等でlookup-use-package関数を使用して明示的に読み込む必要がありますが、ndeb, ndebs, ndic, ndsrdエージェントで、辞書の場所として指定されたディレクトリに特定の名前の補助パッケージを置くことで自動的に読み込むようになります。

デフォルトでは例えば/path/to/DIRECTORYというディレクトリが指定されているエージェントでは/path/to/directory/directory-pkg.elというファイルがあれば補助パッケージとして読み込まれます。 読み込みはエージェントのセットアップの際に行われ、~/.lookup等で同一のエージェントに対して別の補助パッケージを指定している場合も設定を上書きします。 -pkgの部分はlookup-package-autoload-suffixで文字列を指定できます。

また、この機能は変数lookup-enable-package-autoloadnilにするかエージェントオプション:package-autoloadを負数にすると無効になります。

フレームローカル変数使用の取りやめ

lookup-fill-columnlookup-window-heightはフレームローカル変数として定義していましたが、新しいEmacsではフレームローカル変数自体が廃止となります。 そのため、これらの変数は通常の変数とし、代わりにフレームパラメータを参照するようにしました。 フレームパラメータに同名のパラメータがあった場合はそれぞれの変数に優先して使用されます。 例えば、lookup-frame-alist変数のデフォルト値にはlookup-fill-columnパラメータが指定されています。

ドキュメントの更新、info形式のファイルの削除

texi/lookup.texitexi/lookup-guide.texiを更新しました。 元が古いこともあって、現状にそぐわない点とか表現の統一が取れてない点とかまだまだあると思います。 修正・追記案等あればお知らせ下さい。

また、Lookupのパッケージにはinfo形式のファイルが同梱されています。 私の記憶によれば、これはインストール時に非NT系のWindows OS上のMule for Windowsでtexi形式のファイルからinfo形式のファイルが作成できない(と私が言った)為です。 しかし、Lookup 1.4からはemacs 19以前はサポート外という事になっているので、info形式のファイルはパッケージから外しました。 インストール時には Emacs を使って自動的に生成します。

バージョン番号の変更

バージョン番号は1.4から1.4+media-yyyymmddに変更されます。 splash画面、関数lookup-version、変数lookup-versionで確認できます。

修正される不具合

ndeb[s]エージェントでのの改行処理

ndeb, ndebsエージェントでのcontentの表示の際にlookup-arrange-fill-linesでの改行処理がうまくいかずに折り返しが生じることがあります。 不完全ですが応急的に対処しました。

eblookの起動

eblookを起動した際にエラーがあった場合にlookup-debug-modeの値によって挙動が異なります。 また、Windows環境ではeblookの文字コードの指定に不具合があります。

ndkksと:hiraganaオプション

MS WindowsやOS/2環境においてはkakasiを-uオプション付きで起動させないとうまく機能しません。

ndspellにおける異常動作

ndspellが返す候補を再検索した際に一つもマッチしなかった場合に動作がおかしくなります。 マッチしなかった場合は、ndspell自身がentryを一つ返すようにしました。

ndtpでの外字表示

詳細はMeadowのチケットを参照して下さい。 Meadowで、xbmの先頭に空行があると画像が正しく表示されないというものです。 meadow-users-jp MLではImageMagickの問題の可能性が高いとの事だったのであまり積極的に対応するつもりはありませんでしたが、現在のパッチでは修正されているはずです。 ただし、ndtpを使用していないので確認はしていません。

外字によるreferenceの分断

referenceの文字列内に外字があるとreferenceが分断されます。 Entryモードでこのようなreferenceがあるentry上でLを押すと分断されたreferenceに応じて多数のreferenceがentryに並びます。

外字の色

画像による外字表示の際に常に白黒(正確にはdefaultというfaceの色)で表示され、テキストの色が反映されません。 ちなみに、bitmap-muleを使用した場合や、NTEmacsではパッチをあてなくても反映されます。 また、XEmacsやUNIX系OSで動いているEmacsではどうなっているのかは知りません。 尚、変更部分はXEmacsとEmacsではほぼ独立した実装になっており、XEmacsに関しては触っていないので従来通りになります。

連続する外字の表示

同じ外字が連続する場合に1つしか表示されません。

文字等を含まないreference

ndebエージェントで、referenceの開始タグと終了タグの間に何も含まれない場合にreferenceが生成されません。 EPWINGの書籍で、メニューからreferenceをたどると該当するreferenceを認める事があるようです。

外部プログラムの起動

一部の環境で画像表示や音声再生時に外部プログラムを起動しようとすると、下記のようなエラーがでて、外部プログラムの起動に失敗します。

(wrong-type-argument listp :directory-separator)

エラーが確認できたのはEmacs 21.4と、それをベースにしたMeadowです。 property listが余分な要素を含まない完全な形である事を想定しているようです。

splashの表示

bitmap-muleとMule-UCSを併用している場合にsplashが正しく表示されません。 このパッチではlookup-ja MLに投稿された水戸さんが書かれた修正を取り込んでいます。 また、NTEmacsでsplashの表示ができないバグも修正しています。こっちは例外処理を入れただけです。

インタラクティブなインストール時の不具合

Lookupには、インストールの手段の一つとして、Emacsを起動し、diredからinstall.elLで実行してインストールするという方法があります。 しかし、画像表示が可能な状態のEmacsでこの操作を行うと、ファイルのコピーは終了するものの途中でエラーになってしまいます。

message関数呼び出し時の不具合

message関数の呼び出し時に表示させたい文字列をformat-stringとして与えている部分がありますが、明らかに問題のない部分を除いてformat-stringを指定するように変更しました。

この変更をしない場合、例えばモジュール名に'%'を含むモジュールにlookup-module-forwardlookup-module-backwardで切り替えた時にエラーになります。

splash表示後の不具合

Lookupを起動させた時のbufferによってはsplash表示後に元のbufferに戻らない事があります。 lookup-pattern関数等によって初回起動した際にこの現象が起きると、コマンド実行時とは異なるbufferから単語をピックアップしてしまいます。

adjust関数実行後のポイント位置に関する不具合

contentの整形にadjust関数を使用している場合、最後のadjust関数を抜けた際のpointが見えるようにContentバッファは表示されます。 しかし、Contentバッファが予め表示されていた場合には常にバッファの先頭が表示されてしまいます。

著作権情報表示の不具合

Lookupの初回起動直後に、著作権情報の表示に対応した辞書に対してその表示を行おうとするとエラーになります。

補助パッケージを絶対パスで指定する際の不具合

補助パッケージを読み込む際に、lookup-package-directory以外の場所から絶対パスを指定されると、lookup-package-file-directoryの値が不適切なものとなり、特に複数ファイルから成る補助パッケージが正しく動作しません。

更新履歴

2017/01/19 make-variable-frame-localの廃止にちゃんと対応した。 EBWin用のUnicode検索置換ファイルと外字定義ファイルの読み込みがとても遅いのを修正した。

2017/01/12 make-variable-frame-localが廃止されたのにとりあえず対応した。

2016/06/12 ispellの呼び出し時にオプションを追加できるようにした。 ドキュメントを更新した。

2015/09/20 SDICの検索でegrep, fgrepを使うのをやめてgrepを使うようにした。 grep-aオプション付で呼び出すようにした。

2013/09/03 Lookup側のsalookサポートを入れ損ねていたのを修正した。

2013/09/01 salookによるSDIC辞書の検索に対応した。 SDIC辞書での検索結果のソートはSDIC側で行うようにした。 2013/07/04のlisp/ndebs.elの変更でエンバグしていたのを修正した。

2013/08/29 Emacs21以前でバイトコンパイルが通らなくしてしまっていたのを修正した。 SDIC辞書での検索結果をソートするようにした。 SDIC辞書のcontentの書式を変更した。 以前と同様にするには(setq ndic-sdic-default-content-format "%snn %sn")とすること。

2013/07/15 ndestエージェントを更新した。

2013/07/11 ndebsエージェントで、UNIX環境などでもディレクトリ名にASCII以外の文字も指定できる様にした。 ndestエージェントを更新した。 ndwnjエージェントを更新した。

2013/06/23 ファイルの文字コードを明記した。 eb[s]エージェントで、モノクロ画像が文字の色に影響を受けないようにした。

2013/05/01 ndestエージェントを更新した。 細かいリファクタリングなど。

2013/01/07 Emacs 24.2で初回検索時などに、ヒットした最初の項目の内容が自動で表示されないのを修正した。

2012/11/22 ndestエージェントを更新した。

2012/06/11 CygwinからWindows nativeなEmacs23を使ってinstall.elを実行すると、大抵の場合はinfoファイルの作成に失敗するのを修正した。 Unicode外字拡張表示に対応した。 ndestエージェントを更新した。 キャッシュの保存に時間がかかりすぎるのを修正した。

2011/06/28 expanderとnormalizerの適用順位を変更した。 内部動作を一部変更した。 未サポートな環境向けのコードをより積極的に削った。 old style backquotesをなくした。 拡張検索でヒットしたエントリの見出しの一部をカスタマイズできるようにした。

2011/02/12 並列makeが正しく動作しないのを修正した。上野さんありがとうございます。 一部内部動作を変更した。 ndeb[s]で、EBWinの外字定義ファイルUnicode検索置換ファイルを読み込めるようにした。 キャッシュファイルのデフォルトの名前にtypoがあったのを直した。

2010/10/13 NTEmacsで外字の前景色と背景色が入れ換わるのを回避するようにした。 同じ外字が連続して存在する時に一つしか表示されないのを修正した。

2010/08/25 SDIC形式の検索に特別な設定をせずにsaryを利用できるようにした。 複数のファイルから成る補助パッケージを、絶対パスを指定して使用するとエラーになるのを修正した。 補助パッケージを自動的に読み込めるようにした。

2010/07/04 辞書の初期化時にエージェント毎に特有の処理が行えるようにした。 ndebsエージェントで利用可能な検索方法をチェックするようにした。 ndictエージェントで検索文字のキャラクターセットをチェックしないようにした。

2010/07/04 NTEmacs23でsplashが表示されないバグを修正した。 キャッシュ機構を新設した。 ~/.lookup-cacheを使うので同名のファイルがある場合は退避させること。

2010/05/22 ndeb[s]エージェントで辞書オプション:backward-methods:backward-headingが新設された。 最後のadjust関数終了後に意図した位置にpointが移動しない事があるのを修正した。 ドキュメントを更新した。

2009/11/08 ndwnjエージェントを更新した。 古いeblook 1.6.1+mediaへの対応をやめた。 expanderでひっかけた項目を通常の検索で表示させると、見出し語がexpanderでひっかけた時と同様に表示されてしまうのを修正した。

2009/09/15 ndwnjエージェントを追加した。

2009/09/15 Emacs19用のコードとファイル (の一部) を取り除いた。

2009/09/15 検索語の正規化が行なえるようにした (:normalizersオプション)。 検索語にマッチしなかった場合の拡張検索を拡張した (:expandersオプション)。 なるべく不要な検索を行なわなくて済むようにできるようにした (:codingオプション、:charsetsオプション)。 ndebsエージェントで文字コードを自動で設定できるようにした。 ndebsエージェントで初回アクセスがあまりに遅い場合は:codingを設定するかndeb-set-coding-automaticallynilにすること。

2009/07/24 ndebエージェントでもJIS X 4081 UTF-8 extensionの書籍を扱えるようにした。

2009/04/21 ndebsエージェントでJIS X 4081 UTF-8 extensionの書籍を扱えるようにした。

2009/03/03 文字修飾情報に対応した。 上付/下付き文字の大きさをカスタマイズできるようにした。

2008/12/23 ndeb[s]エージェントで、上付き・下付き文字が入れ子になっている場合に表示が乱れていたのを修正し、外側のタグのみ有効になるようにした。 ndsrdエージェントで重複エントリを検索結果から排除するようにした。

2008/11/15 ndeb[s]エージェントで上付き・下付き文字情報に対応した。 typoを修正した。

2008/09/27 ndicエージェントで辞書がSDIC形式である場合に、文字コードを指定できるようにした。

2008/07/31 ndsrdエージェントで、検索文字列に簡単な正規化をかけるようにした。 ndestエージェントを更新した。

2008/03/21 白井さんからパッチを頂く。 参照先一覧を表示 (lookup-entry-list-references) した時に重複するものは表示しないようにした。

2008/03/21 eblookの起動時オプションのデフォルトに-iを追加した。 ndebsエージェントでエージェントオプション:codingを使用可能にした。 これにより、ndebsエージェントでndebエージェントと同様にEPWINGとEBGの辞書の混在が可能になった (はず)。

2008/03/02 初回起動直後に著作権情報の表示 (lookup-select-copyright) を行うとエラーになるのを修正した。

2008/02/01 2008/01/19にエンバグし、MeadowのMCI機能による音声再生後に一時ファイルを削除しなくなっていたのを修正した。

2008/01/19 外部プロセスを呼び出してマルチメディアデータを再生する辺りがごちゃごちゃになってきたので一部書き換えた。 ndeb-binary-programsに指定できる関数の仕様が変わったので、自作している人は要注意。

2008/01/19 買ってないけど広辞苑第六版対策に、動画再生時に一時ファイルを作成せずに再生させられるようにした。 41MBってなんだー。

2007/11/11 パーミッションが (また) おかしくなっていたのを修正した。 ndic.elに余分な文字が入っていたのを取り除いた。 いずれも白井さんからの御指摘。

2007/10/08 (多分) 2006/06/21にエンバグし、外字テーブルでglyphとalternateの両方を指定していると表示が乱れるようになっていたのを修正した。

2007/10/04 message関数の呼び出し方法が適切でない部分を一部修正した。 splash表示後に元のbufferに戻らないことがあるのを修正した。

2007/09/14 8/6にエンバグし、一部の画像が表示されなくなっていたのを修正した。 ndeb[s]で、マルチメディアデータ再生時に無限ループに入ることがあったのを修正した。

2007/08/06 ndeb[s]エージェントで字下げに対応した。

2007/07/10 画像表示可能な状態のEmacs上で、インタラクティブにinstall.elを実行した際にエラーになるのを修正した。

2007/05/29 BSD makeでmakeできるようにした (つもり)。

2007/05/21 texi/以下を更新した。 したけどまだ追いついていない。 info形式のファイルの同梱をやめた。

2007/04/24 ndestエージェントを更新した。

2007/04/21 ndestエージェントを更新した。 それからコードの細かい変更が少しあり。

2007/04/16 ndeb[s]で要求した大きな外字が存在しない場合にエラーにならずに16ドットの外字を取得するようにした。 MyPaedia Toolkit + EBStudioで変換した辞書の大きな外字が、16ドットの外字より文字が少ない事に対する対策。 ndestエージェントを更新した。

2007/03/20 ndestエージェントを更新した。

2007/03/14 ndestエージェントを追加した。 ドキュメントは別ページ

2007/02/19 ndspellにおいて、候補を後ろから順番に並べていたのを変更。 ndspellの候補を再検索した際に、一つもマッチないと動作がおかしくなるのを修正した。

2007/02/06 ワイルドカードから正規表現への変換に失敗するパターンがあったので修正した。 dictdの辞書を利用したndicエージェントではクエリーから正規表現への変換は完全にエージェント側で行うようにした。

2007/02/05 Lookup 1.4.1になされたセキュリティ修正を取り込んだ。 ワイルドカード検索と正規表現検索を分離した。 eblookでワイルドカード検索を可能にし、Lookup側も対応させた。

2007/01/24 ndeb[s]エージェントで条件検索やクロス検索によるキーワード検索を可能にした。 複合検索はできないまま。

2007/01/24 ndeb[s]エージェントで大きな外字を使用できるようにした。

2007/01/08 Entryモードからいろいろ再生する時にcontentの先頭にあるリンクを見つけられないのを修正した。図版メニューの画像とか。

2006/12/15 図版メニューの対応コードの一部がndeb専用になっていたのを修正した。 一部のアレンジ関数に入っている必要ではないコードを外した。

2006/12/04 図版メニューに対応した。 Lookupがイメージマップ (正式名称不明) へのリンクをたどるようになったので古いeblook (リンクは表示するがたどった先はまともに表示できない) と混ぜると危険かも。

2006/12/01 「なんだか設定がよくわからない」との事なのでndebsエージェントの記述をもう少し人に優しくした。

2006/10/22 ndebsを (自分の環境では体感できる程度に) 高速化した。 ndebも同様の処理にしたが普段使ってないので速くなったか不明。 この変更でndebでeblookの起動時にエラーとなっていたケースはndebsではエラーにならずに無視されるようになった。

古い履歴


最終更新日: 木曜日, 1月 19 2017 @ 11:30 午後 JST; 1,800,855 閲覧件数 印刷用画面