eblook.vim-1.4.0/0000755000175000017500000000000013752745333013127 5ustar yabukiyabukieblook.vim-1.4.0/LICENSE0000644000175000017500000000207513752745333014140 0ustar yabukiyabukiMIT License Copyright (c) 2012-2015,2017,2020 KIHARA, Hideto Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. eblook.vim-1.4.0/README.markdown0000644000175000017500000002462213752745333015636 0ustar yabukiyabukieblook.vim - EPWING/電子ブック辞書検索プラグインスクリプト ========================================================== 概要 ==== eblook.vimは、`eblook'プログラムを使って、 EPWING/電子ブック辞書の検索を行うプラグインスクリプトです。 VimでもEmacsのLookupのように辞書をひきたかったので作りました。 * Vim上でカーソル位置の単語を辞書引きできます。 * 複数の辞書を一度に検索できます。 * eblookプログラムのフロントエンドです。 ![表示例](http://www1.interq.or.jp/~deton/eblook-vim/eblook-vim.png) 必要なもの ========== * Vim7以降 * `eblook'プログラム http://ikazuhiro.s206.xrea.com/staticpages/index.php/eblook * EPWING/電子ブック辞書 http://hp.vector.co.jp/authors/VA000022/unixdic/unix-dic1.html#c1s4 準備 ==== eblookプログラムをPATHの通った場所に置いて、 実行できるようにしておいてください。 アーカイブに含まれるファイルを次の場所に置いてください。 * ファイル 置く場所 ファイルの説明 * plugin/eblook.vim 'runtimepath'/plugin/ コマンド、キー定義 * autoload/eblook.vim 'runtimepath'/autoload/ スクリプト本体 * autoload/eblook/stem_en.vim 'runtimepath'/autoload/eblook/ 英語stemming用 * autoload/eblook/stem_ja.vim 'runtimepath'/autoload/eblook/ 日本語語尾補正用 * autoload/eblook/supsubmap_utf8.vim 'runtimepath'/autoload/eblook/ 上付き文字置換用 * syntax/eblook.vim 'runtimepath'/syntax/ eblook.vim用syntaxファイル * doc/eblook.jax 'runtimepath'/doc/ スクリプトの説明書 'runtimepath'で示されるディレクトリは、Vim上で :echo &runtimepath を実行することで確認できます。 使い方 ====== doc/eblook.jax を参照してください。 更新履歴 ======== * 1.4.0 (2020-04-19) * 画像/音声/動画再生用の外部ビューアコマンドを辞書ごとに設定するための オプション'viewer_wav'等を追加。 音声データが(wavヘッダを付けた)mp3で収録されている場合に、ファイル名を wavからmp3に変えて再生するshell scriptを設定するため。 (shell script例: wav_mp3_sample.sh) * 1.3.0 (2017-04-10) * contentウインドウ内でリンクをたどった際に、entryウィンドウ内容を更新しない 動作を可能にする、'eblook_update_entrywin_by_contentwin_link'オプション * 1.2.3 (2015-12-04) * oキーで最大化したcontentウィンドウの高さを復元する機能を追加(rキー) * 'wrapmargin'や'textwidth'により、entryウィンドウで長い行が折り返されると、 contentウィンドウの表示が行われない場合があるバグを修正。 * 何も見つからない単語を検索後の単語入力プロンプトを``でキャンセル時、 entryウィンドウやcontentウィンドウの高さが変わる問題を修正。 * 1.2.2 (2014-09-07) * 'eblook_contentwin_height'オプションを追加。 * eblook実行時に、max-hitsとmax-textを0にする処理を追加 (~/.eblookrcでの設定を不要にするため) * 起動後初回使用時、外字ファイルの読み込みがある場合、 eblook_entry_winheight等で指定した高さにならない問題を修正。 * 1.2.1 (2014-02-02) * イタリック表示中にボールド表示がある場合に``等がそのまま表示される バグを修正。ボールド表示中のイタリック表示も同様。 * plugin/eblook.vimからコマンド、キー定義以外をautoload/eblook.vimに移動。 (vim起動高速化のため。起動時に読み込む量を減らして辞書検索時に読み込む) * 'eblook_no_default_key_mappings'オプションを追加。 検索開始キーを`y```以外にしたい場合用。 * &encがutf-8でも、&tencがeuc-jp等の場合は、上付き数字等のUnicode文字は 使用しないように修整。 * Mac OS Xの端末内Vimでcontent/entryウィンドウが生成され続ける可能性を修正 ([tcvimeのissue#3](https://github.com/deton/tcvime/issues/3)) * doc/eblook.txtをdoc/eblook.jaxにファイル名変更し、文字コードをUTF-8に変換。 * 1.2.0 (2012-09-21) * eblook 1.6.1+mediaのdecorate-mode対応 * content中のインデント指定``等に基づいて、 インデントを行う機能を追加。 * イタリック、ボールド表示 * ``による上付き数字(1-9)をUnicodeの上付き数字に置換 (&enc=utf-8環境のみ)。autoload/eblook/supsubmap_utf8.vimファイル追加。 * 上付き・下付き文字列を、`^{上付き}`・`_{下付き}`のように表示する オプション(`eblook_decorate_supsub`)を追加 * ``タグの置換に対応(&enc=utf-8環境のみ) * 検索履歴を汚さないように修整 * [katonoさんによる変更](https://github.com/katono/eblook.vim)を取り込み * PopUpメニュー追加 * マウス操作対応 * 前のreferenceに移動する``キーの追加 * 一時ファイルが削除されない問題の修正 ![表示例](http://www1.interq.or.jp/~deton/eblook-vim/eblook-vim-gtk.png) * 1.1.1 (2012-04-22) * Vimの'hidden'オプションがonの場合、 2回目以降の検索時にE139エラーが発生する問題を修正。 * 1.1.0 (2012-04-05) * 新機能(表示関係) * 発音記号などの外字をUnicode文字列へ置換する機能を追加 ([EBWin用の外字定義ファイル](http://www31.ocn.ne.jp/~h_ishida/EBPocket.html#download_gaiji)を使用) * ``,``,``,``を外部ビューアで 表示・再生する機能を追加(画像等へのリンク上でxキー)。 (音声``と動画``の再生は [eblook 1.6.1+media](http://ikazuhiro.s206.xrea.com/staticpages/index.php/eblook)が必要) * contentウィンドウ内の長い行を|gq|で整形する機能を追加(Oキー)。 (行が長く、ウィンドウの高さが狭い場合でも、問題なく表示できるように) * 新機能(動作関係) * stemming/語尾補正機能を追加。 何も見つからなかった時に、 活用語尾などを取り除いて検索し直す機能を追加。 [porter-stem.vim](https://github.com/msbmsb/porter-stem.vim) がインストール済であれば、porter-stem.vimも使用。 また、日本語用は[EBView](http://ebview.sourceforge.net)と同様の 語尾補正。 * 辞書をグループ化して登録、検索する機能を追加。 検索時に[count]で辞書グループ番号を指定。 * contentウィンドウをoキーで最大化する機能を追加 * 変更点(表示関係) * 置換定義の見つからない外字を_(下線)に置換するように変更 * `...`を``に置換するように変更 (nは、各contentウィンドウ内で1から始まるreference番号。 xxxx:xxxとの対応を取るための番号)。 (conceal syntaxで非表示にしても整形時にはカウントされているため、 行の折り返しがかなり早めにされているように見えるので、なるべく短縮。) また、表示済の場合は``に置換。 * statuslineに検索語、キャプション文字列、辞書名等を表示するようにした * 変更点(動作関係) * Vim6対応を終了。要Vim7 * Rキーやcontentウィンドウ内での``キーにおいて、 [count]で対象reference番号を指定可能にした。 * 何も見つからなかった時に、検索語を編集して再検索するための プロンプトを出すように変更。再検索したくない場合は、 編集せずにそのままリターンキー。 * 変更点(設定関係) * ~/.vimrcでの辞書の設定をVim7のDictionaryとListで行う形式に変更 (辞書の追加・削除・検索順の変更時の手間を減らすため)。 (従来形式の設定にも対応。新形式への変換は:EblookPasteDictListで可能) * entryウィンドウの高さを指定する'eblook_entrywin_height'オプションを 追加 * 検索開始キーを`EblookSearch`と`EblookInput`で 設定可能にした * バグ修正 * 'noequalalways'オプションが設定されている時に、狭いウィンドウ上で 辞書を引こうとすると、見出し一覧や内容表示ウィンドウが開けずに エラー(E36: Not enough room)になる問題を修正 * appendix付きで指定した辞書の後にappendix指定無しの辞書を設定した場合、 eblook側でappendixが引き継がれて、 意図しない外字置換が発生する問題に対処 (eblook 1.6.1+mediaでは修正されているので問題は発生しない) * 1.0.5 (2012-01-19) * katonoさん作成のsyntaxファイルを取り込み * ``の非表示化 (Vim 7.3で追加されたconceal syntaxを使用) * 1.0.4 (2011-04-25) * Visual modeで選択された文字列を検索するためのmapを追加 (katonoさんのmapをもとに作成) * Vimのregisterを汚さないように修整 * 1.0.3 (2009-04-07) * vim7で、単語が見つからない辞書がある場合に、entryバッファでのtitleの 挿入が二重になってしまい、内容が正しく表示されない問題を修正 * set expandtabしている場合に、``先の内容表示ができない問題を修正 * 1.0.2 (2004-06-26) * 'eblook_dict{n}_name'が同じ辞書が複数ある場合に、内容が正しく表示されないバグを修正 * オプションを2つ追加。 * 'eblookprg': eblookプログラムの名前 * 'eblookenc': eblookプログラムの出力を読み込むときのエンコーディング * 1.0.1 (2003-12-06) * スペースを含む単語(de facto等)の検索ができなかったバグを修正。 * 1.0 (2003-06-15) 最初のリリース。 eblook.vim-1.4.0/autoload/0000755000175000017500000000000013752745333014737 5ustar yabukiyabukieblook.vim-1.4.0/autoload/eblook.vim0000644000175000017500000016066313752745333016743 0ustar yabukiyabuki" vi:set ts=8 sts=2 sw=2 tw=0: " " autoload/eblook.vim - functions for plugin/eblook.vim " " Maintainer: KIHARA Hideto " Last Change: 2020-04-18 " License: MIT License {{{ " Copyright (c) 2012-2015,2017,2020 KIHARA, Hideto " " Permission is hereby granted, free of charge, to any person obtaining a copy of " this software and associated documentation files (the "Software"), to deal in " the Software without restriction, including without limitation the rights to " use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of " the Software, and to permit persons to whom the Software is furnished to do so, " subject to the following conditions: " " The above copyright notice and this permission notice shall be included in all " copies or substantial portions of the Software. " " THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR " IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS " FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR " COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER " IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN " CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. " }}} scriptencoding utf-8 let s:save_cpo = &cpo set cpo&vim " entryウィンドウの行数 if !exists('eblook_entrywin_height') let eblook_entrywin_height = 4 endif " contentウィンドウの行数 if !exists('eblook_contentwin_height') let eblook_contentwin_height = -1 endif " 保持しておく過去の検索バッファ数の上限 if !exists('eblook_history_max') let eblook_history_max = 10 endif " contentウインドウ内でリンクをたどった際に、entryウィンドウ内容を更新するか if !exists('eblook_update_entrywin_by_contentwin_link') let eblook_update_entrywin_by_contentwin_link = 1 endif " 表示変更用に保持しておく訪問済リンク数の上限 if !exists('eblook_visited_max') let eblook_visited_max = 100 endif if !exists('eblook_autoformat_default') let eblook_autoformat_default = 0 endif if !exists('eblook_show_refindex') let eblook_show_refindex = 0 endif if !exists('eblook_stemming') let eblook_stemming = 0 endif if !exists('g:eblook_decorate_indmin') let g:eblook_decorate_indmin = 1 endif if !exists('g:eblook_decorate_syntax') if exists("g:syntax_on") let g:eblook_decorate_syntax = 1 else let g:eblook_decorate_syntax = 0 endif endif if !exists('g:eblook_decorate_supsub') let g:eblook_decorate_supsub = 0 endif if !exists('eblook_statusline_content') let eblook_statusline_content = '%{b:group}Eblook content {%{b:caption}} %{b:dtitle}%<' endif if !exists('eblook_statusline_entry') let eblook_statusline_entry = '%{b:group}Eblook entry {%{b:word}}%< [%L]' endif if !exists('eblook_max_hits') let eblook_max_hits = 0 endif " eblookプログラムの名前 if !exists('eblookprg') let eblookprg = 'eblook' endif if !exists('eblook_viewers') if has('win32') || has('win64') " 第1引数に""を指定しないとコマンドプロンプトが開くだけ let eblook_viewers = { \'jpeg': ' start ""', \'bmp': ' start ""', \'pbm': ' start ""', \'wav': ' start ""', \'mpg': ' start ""', \} else " XXX: mailcapを読み込んで設定する? let eblook_viewers = { \'jpeg': 'xdg-open %s &', \'bmp': 'xdg-open %s &', \'pbm': 'xdg-open %s &', \'wav': 'xdg-open %s &', \'mpg': 'xdg-open %s &', \} endif endif " eblookプログラムの出力を読み込むときのエンコーディング if !exists('eblookenc') let eblookenc = &encoding endif " eblookenc値(vimのencoding)からeblook --encodingオプション値への変換テーブル let s:eblookenc2opt = { \ 'euc-jp': 'euc', \ 'cp932': 'sjis', \ 'sjis': 'sjis', \ 'utf-8': 'utf8', \ 'utf8': 'utf8' \} let s:eblookopt = "" if has_key(s:eblookenc2opt, eblookenc) let s:eblookopt = '-e ' . s:eblookenc2opt[eblookenc] endif unlet s:eblookenc2opt " Unicode表示可能かどうか。 " (vimproc用に&enc=utf-8、&tenc=euc-jisx0213にしている場合はUnicode表示不可) if &encoding ==# 'utf-8' && (&termencoding == '' || &termencoding ==# 'utf-8') let s:utf8display = 1 else let s:utf8display = 0 endif " eblookにリダイレクトするコマンドを保持する一時ファイル名 let s:cmdfile = tempname() " entryバッファ名のベース let s:entrybufname = fnamemodify(s:cmdfile, ':p:h') . '/_eblook_entry_' let s:entrybufname = substitute(s:entrybufname, '\\', '/', 'g') " contentバッファ名のベース let s:contentbufname = fnamemodify(s:cmdfile, ':p:h') . '/_eblook_content_' let s:contentbufname = substitute(s:contentbufname, '\\', '/', 'g') " バッファヒストリ中の現在位置 let s:entrybufindex = 0 let s:contentbufindex = 0 " 直前に検索した文字列 let s:lastword = '' " 表示済referenceアドレスリスト(訪問済リンクの表示変更用) let s:visited = [] " stemming後の検索文字列。最初の要素がstemming前の文字列 let s:stemmedwords = [] " stemmedwords内の検索中index let s:stemindex = -1 let s:zen2han = { \'0':'0','1':'1','2':'2','3':'3','4':'4','5':'5','6':'6','7':'7', \'8':'8','9':'9','A':'A','B':'B','C':'C','D':'D','E':'E','F':'F'} augroup Eblook autocmd! execute "autocmd BufEnter " . s:entrybufname . "* call Entry_BufEnter()" execute "autocmd BufEnter " . s:contentbufname . "* call Content_BufEnter()" augroup END " eblook-vim-1.0.5までの辞書指定形式を読み込む if !exists("g:eblook_dictlist1") let g:eblook_dictlist1 = [] let s:i = 1 while exists("g:eblook_dict{s:i}_name") let dict = { 'name': g:eblook_dict{s:i}_name } if exists("g:eblook_dict{s:i}_book") let dict.book = g:eblook_dict{s:i}_book " appendixが指定されている場合、bookとは分離する(扱いやすくするため) let bookapp = matchlist(dict.book, '^\("[^"]\+"\)\s\+\(.\+\)\|^\([^"]\+\)\s\+\(.\+\)') if len(bookapp) > 1 if strlen(bookapp[1]) > 0 let dict.book = bookapp[1] if strlen(bookapp[2]) > 0 let dict.appendix = bookapp[2] endif elseif strlen(bookapp[3]) > 0 let dict.book = bookapp[3] if strlen(bookapp[4]) > 0 let dict.appendix = bookapp[4] endif endif endif endif if exists("g:eblook_dict{s:i}_title") let dict.title = g:eblook_dict{s:i}_title else " 辞書のtitleが設定されていなかったら、辞書番号とnameを設定しておく let dict.title = s:i . dict.name endif if exists("g:eblook_dict{s:i}_skip") let dict.skip = g:eblook_dict{s:i}_skip endif call add(g:eblook_dictlist1, dict) let s:i = s:i + 1 endwhile unlet s:i endif if !exists('g:eblook_group') let g:eblook_group = 1 endif " entryバッファに入った時に実行。set nobuflistedする。 function! s:Entry_BufEnter() set buftype=nofile set bufhidden=hide set noswapfile if has('persistent_undo') setlocal noundofile endif set nobuflisted set nolist setlocal noexpandtab wrapmargin=0 textwidth=0 formatoptions-=a set filetype=eblook if has("conceal") setlocal conceallevel=2 concealcursor=nc endif if strlen(g:eblook_statusline_entry) > 0 setlocal statusline=%!g:eblook_statusline_entry else setlocal statusline= endif nnoremap :call GetContent(v:count) nnoremap J j:call GetContent(0) nnoremap K k:call GetContent(0) nnoremap :call ScrollContent(1) nnoremap :call ScrollContent(0) nnoremap o :call MaximizeContentHeight(1) nnoremap r :call LoadWinHeights(1) nnoremap O :call GetAndFormatContent() nnoremap p :call GoWindow(0) nnoremap q :call Quit() nnoremap R :call ListReferences(v:count) nnoremap s :call eblook#SearchInput(v:count, b:group, 0) nnoremap S :call SearchOtherGroup(v:count, b:group) nnoremap :call History(-1) nnoremap :call History(1) nnoremap :call search("\t") nnoremap :call search("\t", 'b') if has("gui_running") nnoremap <2-LeftMouse> :call GetContent(0) nnoremap :call History(-1) nnoremap :call History(1) endif endfunction " contentバッファに入った時に実行。set nobuflistedする。 function! s:Content_BufEnter() set buftype=nofile set bufhidden=hide set noswapfile if has('persistent_undo') setlocal noundofile endif set nobuflisted set nolist " s:FormatLine()でgqqとindentまわりの処理を楽にするため setlocal expandtab autoindent nosmartindent setlocal formatoptions-=a set filetype=eblook if has("conceal") setlocal conceallevel=2 concealcursor=nc endif if strlen(g:eblook_statusline_content) > 0 setlocal statusline=%!g:eblook_statusline_content else setlocal statusline= endif nnoremap :call SelectReference(v:count) nnoremap x :call ShowMedia(v:count) nnoremap nnoremap nnoremap :call search('<\d\+[\|!]') nnoremap :call search('<\d\+[\|!]', 'b') nnoremap o :call MaximizeContentHeight(0) nnoremap r :call LoadWinHeights(0) nnoremap O :call GetContentSub(1) nnoremap p :call GoWindow(1) nnoremap q :call Quit() nnoremap R :call FollowReference(v:count, 1) nnoremap s :call eblook#SearchInput(v:count, b:group, 0) nnoremap S :call SearchOtherGroup(v:count, b:group) nnoremap :call History(-1):call GoWindow(0) nnoremap :call History(1):call GoWindow(0) if has("gui_running") nnoremap <2-LeftMouse> :call SelectReference(v:count) nnoremap :call History(-1):call GoWindow(0) nnoremap :call History(1):call GoWindow(0) menu .1 PopUp.[eblook]\ Back :call History(-1):call GoWindow(0) menu .2 PopUp.[eblook]\ Forward :call History(1):call GoWindow(0) menu .3 PopUp.[eblook]\ SearchVisual :call eblook#SearchVisual(v:count) menu .4 PopUp.-SEP_EBLOOK- endif endfunction " プロンプトを出して、ユーザから入力された文字列を検索する " @param {Number} group 対象の辞書グループ番号 " @param {Number} defgroup 対象の辞書グループ番号(デフォルト) " @param {Boolean} uselastword 直前の検索文字列をデフォルト文字列として入れるか " (yで取得・検索した文字列を一部変更して再検索できるように。 " input()のプロンプトで|c_CTRL-R_=|の後s:lastwordと入力することで実現可能) function! eblook#SearchInput(group, defgroup, uselastword) let gr = a:group if a:group == 0 let gr = a:defgroup endif if a:uselastword let word = s:lastword else let word = '' endif let str = input(':' . gr . 'EblookSearch ', word) if strlen(str) == 0 || str ==# word && gr == a:defgroup return endif call eblook#Search(gr, str, 0) endfunction " (entry/contentウィンドウから)直前の検索文字列を他の辞書グループで再検索する " @param {Number} group 対象の辞書グループ番号 " @param {Number} defgroup 現在の辞書グループ番号 function! s:SearchOtherGroup(group, defgroup) let gr = s:ExpandDefaultGroup(a:group) if gr == a:defgroup return endif call eblook#Search(gr, s:lastword, 0) endfunction " Visual modeで選択されている文字列を検索する " @param {Number} group 対象の辞書グループ番号 function! eblook#SearchVisual(group) let save_reg = @@ silent execute 'normal! `<' . visualmode() . '`>y' call eblook#Search(a:group, substitute(@@, '\n', '', 'g'), 0) let @@ = save_reg endfunction " 指定された単語の検索を行う。 " entryバッファに検索結果のリストを表示し、 " そのうち先頭のentryの内容をcontentバッファに表示する。 " @param {Number} group 対象の辞書グループ番号 " @param {String} word 検索する単語 " @param {Boolean} isstem stemmingした単語の検索中かどうか function! eblook#Search(group, word, isstem) if strlen(a:word) == 0 echomsg 'eblook-vim: 検索語が空文字列なので、検索を中止します' return -1 endif let s:lastword = a:word let gr = s:ExpandDefaultGroup(a:group) let dictlist = s:GetDictList(gr) if len(dictlist) == 0 echomsg 'eblook-vim: 辞書グループ(g:eblook_dictlist' . gr . ')には辞書がありません' return -1 endif let hasoldwin = bufwinnr(s:entrybufname . s:entrybufindex) if hasoldwin < 0 let hasoldwin = bufwinnr(s:contentbufname . s:contentbufindex) endif if hasoldwin >= 0 && !a:isstem " not save if recursion let s:save_winheights = s:GetWinHeights() endif if s:RedirSearchCommand(dictlist, a:word) < 0 return -1 endif if s:NewBuffers(gr, 1) < 0 return -1 endif let b:word = a:word call s:ExecuteEblook() silent! :g/eblook.*> \(eblook.*> \)/s//\1/g " 必要なgaiji mapファイルのみ読み込む: ', 'bW') != 0 let dnum = matchstr(getline('.'), 'eblook-\zs\d\+\ze>') if strlen(dnum) > 0 call add(gaijidnums, str2nr(dnum)) endif endif endwhile let i = 0 while i < len(dictlist) let dict = dictlist[i] if get(dict, 'skip') let i = i + 1 continue endif let title = get(dict, 'title', '') if strlen(title) == 0 " 辞書のtitleが設定されていなかったら、辞書番号とnameを設定する let dict.title = i . dict.name let title = dict.title endif if index(gaijidnums, i) >= 0 let gaijimap = s:GetGaijiMap(dict) silent! execute 'g/eblook-' . i . '>/;/^eblook/-1s/]*\)>/\=s:GetGaiji(gaijimap, submatch(1))/g' endif silent! execute 'g/eblook-' . i . '>/;/^eblook/-1s/^/' . title . "\t" let i = i + 1 endwhile silent! :g/eblook.\{-}> /s///g call s:ReplaceUnicode() call s:FormatDecorate(1) silent! :g/^$/d _ call histdel('/', -1) " 各行のreference先を配列に格納して、バッファからは削除 " (concealしてもカウントされるので、行が途中で折り返されていまいちなので) let b:refs = [] silent! :g/^\(.\{-}\)\t *\d\+\. \(\x\+:\x\+\)\t\(.*\)/s//\=s:MakeEntryReferenceString(submatch(1), submatch(2), submatch(3))/ call histdel('/', -1) if a:isstem silent! execute "g/\t/s//\t[" . s:stemmedwords[0] . ' ->] /' call histdel('/', -1) endif setlocal nomodifiable if s:GetContent(1) < 0 if search('.', 'w') == 0 bwipeout! silent! call s:History(-1) if hasoldwin < 0 call s:Quit() endif let word = a:word if a:isstem let s:stemindex += 1 if s:stemindex < len(s:stemmedwords) call eblook#Search(gr, s:stemmedwords[s:stemindex], 1) return else let word = s:stemmedwords[0] endif elseif g:eblook_stemming let s:stemmedwords = s:Stem(a:word) call filter(s:stemmedwords, 'v:val !=# "' . a:word . '"') if len(s:stemmedwords) > 0 call insert(s:stemmedwords, a:word) " 元の単語を先頭に入れておく let s:stemindex = 1 call eblook#Search(gr, s:stemmedwords[s:stemindex], 1) return endif endif "redraw | echomsg 'eblook-vim(' . gr . '): 何も見つかりませんでした: <' . word . '>' let str = input(':' . gr . 'EblookSearch(何も見つかりませんでした) ', word) if hasoldwin >= 0 call s:RestoreWinHeights(s:save_winheights) endif if strlen(str) == 0 || str ==# word return endif call eblook#Search(gr, str, 0) endif endif endfunction " stemming/語尾補正した候補文字列のListを取得する " @param {String} word 対象文字列 " @return 候補文字列のList function! s:Stem(word) if a:word =~ '[^ -~]' return eblook#stem_ja#Stem(a:word) " XXX: ebviewと同様に、漢字部分のみを追加する else return eblook#stem_en#Stem(a:word) endif endfunction " eblookプログラムにリダイレクトするための検索コマンドファイルを作成する " @param dictlist 対象の辞書グループ " @param {String} word 検索する単語 function! s:RedirSearchCommand(dictlist, word) if s:OpenWindow('1new') < 0 return -1 endif setlocal noswapfile if has('persistent_undo') setlocal noundofile endif setlocal nobuflisted setlocal wrapmargin=0 textwidth=0 formatoptions-=a execute 'normal! iset max-hits ' . g:eblook_max_hits . "\" if s:IsEblookDecorate() execute 'normal! oset decorate-mode on' . "\" endif let prev_book = '' let i = 0 while i < len(a:dictlist) let dict = a:dictlist[i] if get(dict, 'skip') let i = i + 1 continue endif if exists('dict.book') && dict.book !=# prev_book execute 'normal! obook ' . s:MakeBookArgument(dict) . "\" let prev_book = dict.book endif execute 'normal! oselect ' . dict.name . "\" \ . 'set prompt "eblook-' . i . '> "' . "\" \ . 'search "' . a:word . '"' . "\\" let i = i + 1 endwhile try silent execute 'write! ++enc=' . g:eblookenc . ' ' . s:cmdfile catch /^Vim\%((\a\+)\)\=:E513/ echomsg 'eblook-vim: 検索語をeblookenc(' . g:eblookenc . ')に変換できないため中断: ' . a:word bwipeout! return -1 endtry bwipeout! return 0 endfunction " 指定された辞書グループの辞書リストを取得する " @param {Number} group 対象の辞書グループ番号 " @return 辞書リスト function! s:GetDictList(group) let gr = s:ExpandDefaultGroup(a:group) if exists("g:eblook_dictlist{gr}") let dictlist = g:eblook_dictlist{gr} else let dictlist = [] endif return dictlist endfunction " eblook 1.6.1+media版かどうかを調べる function! s:IsEblookMediaVersion() if !exists('s:eblookmedia') let l:version = system(g:eblookprg . ' -version') if match(l:version, '^eblook 1\.6\.1+media-') >= 0 let s:eblookmedia = 1 else let s:eblookmedia = 0 endif endif return s:eblookmedia endfunction " eblookのbookに指定するための引数値を作る " @param {Dictionary} dict 辞書情報 " @return {String} bookに指定する引数 function! s:MakeBookArgument(dict) if exists('a:dict.appendix') return a:dict.book . ' ' . a:dict.appendix endif " 直前のbook用に指定したappendixが引き継がれないようにappendixは必ず付ける " (eblook 1.6.1+media版では対処されているので不要) if !exists('s:has_appendix_problem') if s:IsEblookMediaVersion() let s:has_appendix_problem = 0 else let s:has_appendix_problem = 1 endif endif if s:has_appendix_problem return a:dict.book . ' ' . a:dict.book else return a:dict.book endif endfunction " eblookプログラムを実行する function! s:ExecuteEblook() " ++encを指定しないとEUCでの短い出力をCP932と誤認識することがある silent execute 'read! ++enc=' . g:eblookenc . ' "' . g:eblookprg . '" ' . s:eblookopt . ' < "' . s:cmdfile . '"' "if &encoding !=# g:eblookenc " let &fileencoding = &encoding "endif silent! :g/^Warning: you should specify a book directory first$/d _ endfunction " 新しく検索を行うために、entryバッファとcontentバッファを作る。 " @param {Number} group 対象の辞書グループ番号 " @param {Number} withentrybuf entryバッファを作るかどうか function! s:NewBuffers(group, withentrybuf) " eblook_update_entrywin_by_contentwin_linkが1の場合は、 " entryバッファとcontentバッファは一対で扱う。 let oldindexe = s:entrybufindex if a:withentrybuf let s:entrybufindex = s:NextBufIndex(s:entrybufindex) if s:CreateBuffer(s:entrybufname, oldindexe, s:entrybufindex) < 0 let s:entrybufindex = oldindexe return -1 endif let b:group = a:group let b:word = '' endif let oldindexc = s:contentbufindex let s:contentbufindex = s:NextBufIndex(s:contentbufindex) if s:CreateBuffer(s:contentbufname, oldindexc, s:contentbufindex) < 0 call s:Quit() let s:entrybufindex = oldindexe let s:contentbufindex = oldindexc return -1 endif if g:eblook_contentwin_height == 0 resize elseif g:eblook_contentwin_height > 0 execute 'resize' g:eblook_contentwin_height endif let b:group = a:group " eblook内でエラーが発生して、結果が無い状態でstatuslineを表示しようとして " Undefined variable: b:captionエラーが発生するのを回避 let b:caption = '' let b:dtitle = '' if s:GoWindow(1) < 0 call s:Quit() let s:entrybufindex = oldindexe let s:contentbufindex = oldindexc return -1 endif execute 'resize' g:eblook_entrywin_height return 0 endfunction " entryバッファかcontentバッファのいずれかを作る " @param bufname s:entrybufnameかs:contentbufnameのいずれか " @param oldindex 現在のentry,contentバッファのインデックス番号 " @param newindex 作成するentry,contentバッファのインデックス番号 function! s:CreateBuffer(bufname, oldindex, newindex) let oldbufname = a:bufname . a:oldindex let newbufname = a:bufname . a:newindex if bufexists(newbufname) let bufexists = 1 else let bufexists = 0 endif if s:SelectWindowByName(oldbufname) < 0 if s:OpenWindow('split ' . newbufname) < 0 return -1 endif else silent execute "edit" newbufname endif setlocal modifiable if bufexists silent %d _ endif return 0 endfunction " entryバッファとcontentバッファの高さを返す function! s:GetWinHeights() let curbuf = bufnr('') if s:GoWindow(0) < 0 let content_winheight = -1 else let content_winheight = winheight(0) endif if s:GoWindow(1) < 0 let entry_winheight = -1 else let entry_winheight = winheight(0) endif execute bufwinnr(curbuf) . 'wincmd w' return [curbuf, content_winheight, entry_winheight] endfunction " entryバッファとcontentバッファの高さを復元する function! s:RestoreWinHeights(winheights) let content_winheight = a:winheights[1] if content_winheight > 0 if s:GoWindow(0) >= 0 execute 'resize' content_winheight endif endif let entry_winheight = a:winheights[2] if entry_winheight > 0 if s:GoWindow(1) >= 0 execute 'resize' entry_winheight endif endif let curbuf = a:winheights[0] execute bufwinnr(curbuf) . 'wincmd w' endfunction " entryバッファの指定行に対応する内容をcontentバッファに表示する " @param count 対象の行番号。0の場合は現在行 " @return -1:content表示失敗, 0:表示成功 function! s:GetContent(count) if a:count > 0 call cursor(a:count, 1) call search("\t") endif let lnum = line('.') let str = getline(lnum) let title = matchstr(str, '^[^\t]\+') if strlen(title) == 0 return -1 endif let dnum = s:GetDictNumFromTitle(b:group, title) if dnum < 0 return -1 endif let ref = get(b:refs, lnum - 1) if type(ref) != type([]) return -1 endif let refid = ref[0] if s:GoWindow(0) < 0 return -1 endif let b:caption = ref[1] let b:dtitle = title let b:dictnum = dnum let b:refid = refid call s:GetContentSub(0) call s:GoWindow(1) return 0 endfunction function! s:IsEblookDecorate() if !exists('g:eblook_decorate') if s:IsEblookMediaVersion() let g:eblook_decorate = 1 else let g:eblook_decorate = 0 endif endif return g:eblook_decorate endfunction " contentを取得してcontentバッファに表示する " @param doformat 整形するかどうか function! s:GetContentSub(doformat) setlocal modifiable silent %d _ let dictlist = s:GetDictList(b:group) let dict = dictlist[b:dictnum] execute 'redir! >' . s:cmdfile silent echo 'set max-text 0' if s:IsEblookDecorate() silent echo 'set decorate-mode on' endif if exists("dict.book") silent echo 'book ' . s:MakeBookArgument(dict) endif silent echo 'select ' . dict.name silent echo 'content ' . b:refid . "\n" redir END call s:ExecuteEblook() "return 0 " DEBUG: 整形前の内容を確認する silent! :g/eblook> /s///g if search(' 0 " any result? let maxover = len(s:visited) - g:eblook_visited_max + 1 if maxover > 0 unlet s:visited[:maxover] endif call add(s:visited, b:dtitle . "\t" . b:refid) endif endfunction " decorateタグを整形する " @param dropind を削除するかどうか function! s:FormatDecorate(dropind) if g:eblook_decorate " 未対応のタグは削除 silent! :g/<\/\?no-newline>/s///g call s:ReplaceTag() " , " ,,のsyntax対応 if g:eblook_decorate_syntax " 短縮形式に置換。長いと行分割に影響が大きいので silent! :g//s///g silent! :g//s///g silent! :g/<\/font>/s//<\/f>/g " OALD8だとxxx等があるが、syntaxで対応するのは面倒なので silent! :%s/\(\_.\{-}\)<\/f>/\1/g silent! :%s/\(\_.\{-}\)<\/f>/\1/g " 1文字ずつは無駄に長くて、concealすると表示との不一致が大きいので。 " 「」→「単語」 silent! :g/<\/em>/s///g else silent! :g/<\/\?em>/s///g silent! :g//s///g silent! :g/<\/font>/s///g endif if a:dropind silent! :g//s///g endif endif endfunction " 上付き文字()、下付き文字を置き換える function! s:ReplaceTag() " utf-8表示時は、の置換を行う。 " g:eblook_decorate_supsub時は、^{}や_{}への置換を行う。 if s:utf8display || g:eblook_decorate_supsub " 新英和・和英中辞典のmarshalで、禁則がらみでが混ざって、 " 下付き文字がばらばらになってて見にくいので、 " 削除後にを1つにする。 " 例:(んす), " を、「(_{げ}_{んす}_{い}), 」でなく「(_{げんすい}), 」にする。 silent! g/<\/sub>/s///g silent! g/<\/sup>/s///g silent! g/\([^<]*\)<\/sup>/s//\=s:GetReplaceTagStr('sup', submatch(1))/g silent! g/\([^<]*\)<\/sub>/s//\=s:GetReplaceTagStr('sub', submatch(1))/g else silent! g/<\/\?su[pb]>/s///g endif endfunction " タグの置換文字列を取得する。 " @param tag タグ。'sup'か'sub' " @param str 元の文字列 " @return 置換文字列 function! s:GetReplaceTagStr(tag, str) if s:utf8display && has_key(g:eblook#supsubmap_utf8#{a:tag}map, a:str) return get(g:eblook#supsubmap_utf8#{a:tag}map, a:str, a:str) elseif g:eblook_decorate_supsub if a:tag == 'sup' return '^{' . a:str . '}' else " XXX:未対応外字置換の_とぶつかる可能性あり return '_{' . a:str . '}' endif else return a:str endif endfunction " を置き換える。 function! s:ReplaceGaiji(dict) let gaijimap = s:GetGaijiMap(a:dict) silent! :g/]*\)>/s//\=s:GetGaiji(gaijimap, submatch(1))/g endfunction " 外字置換表を取得する " @param dict 辞書 " @return 外字置換表 function! s:GetGaijiMap(dict) if !exists("a:dict.gaijimap") try let a:dict.gaijimap = s:LoadGaijiMapFile(a:dict) catch /load-error/ " ウィンドウを閉じて空きを作って再度検索し直した時に外字取得できるように return {} endtry endif return a:dict.gaijimap endfunction " EBWin形式の外字定義ファイルを読み込む " http://hishida.s271.xrea.com/manual/EBPocket/0_0_4_4.html " @param dict 辞書 " @return 読み込んだ外字置換表。{'ha121':[unicode, ascii], ...} function! s:LoadGaijiMapFile(dict) let name = a:dict.name let dir = matchstr(a:dict.book, '"\zs[^"]\+\ze"\|\S\+') " "{dir}/{NAME}_{encoding}.map"が無ければ"{dir}/{NAME}.map"をcp932で読み込み let mapfilebase = dir . '/' . toupper(name) let enc = &termencoding if enc == '' let enc = &encoding endif let encmapfile = mapfilebase . '_' . enc . '.map' let mapfile = mapfilebase . '.map' let gaijimap = {} if filereadable(encmapfile) let mapfile = encmapfile elseif filereadable(mapfile) let enc = 'cp932' else return gaijimap endif " 現在のウィンドウ(entry/content)の高さが足りない場合、 " OpenWindow()により、高さに余裕のあるウィンドウ上でsviewする可能性があるので " closeした後で元のウィンドウに明示的に切り替える必要あり let save_winheights = s:GetWinHeights() " ファイルOpen、Close後に高さを戻す if s:OpenWindow('1sview ++enc=' . enc . ' ' . mapfile) < 0 throw 'load-error' endif setlocal buftype=nowrite setlocal bufhidden=wipe setlocal nobuflisted for line in getline(1, '$') if line !~ '^[hzcg]\x\{4}' continue endif " 例: hA121 u00E0 a # comment let lst = split(line) let gaiji = tolower(get(lst, 0)) let unicode = get(lst, 1, '-') let ascii = get(lst, 2, '') if &encoding ==# 'utf-8' let unicode = substitute(unicode, ',', '', 'g') let unicode = substitute(unicode, 'u\(\x\{4}\)', '\=nr2char("0x" . submatch(1))', 'g') endif let gaijimap[gaiji] = [unicode, ascii] endfor bwipeout! call s:RestoreWinHeights(save_winheights) return gaijimap endfunction " 外字置換文字列を取得する。 " @param gaijimap 外字置換表 " @param key 外字キー " @return 置換文字列 function! s:GetGaiji(gaijimap, key) " XXX:GetGaiji()内からGetGaijiMap()を呼びたいが、 " substitute()で\=が再帰的に呼ばれる形になってしまうため動作せず if !exists("a:gaijimap[a:key]") return '_' "return '_' . a:key . '_' " DEBUG endif let gaiji = a:gaijimap[a:key] if s:utf8display let res = gaiji[0] if res ==# 'null' return '' elseif res ==# '-' let res = gaiji[1] endif else let res = gaiji[1] endif if strlen(res) == 0 return '_' "return '_' . a:key . '_' " DEBUG endif return res endfunction " 4E2F等を置換する " (LogoVistaの「漢字源 改訂第四版」以降で使用されている) function! s:ReplaceUnicode() if s:utf8display silent! g/\([0-9A-F]\+\)<\/unicode>/s//\=s:GetUnicode(submatch(1))/g else silent! g/\([0-9A-F]\+\)<\/unicode>/s//_/g endif " 表の表示(もともとの用途。「ロイヤル英文法」で使用されている) silent! g/<\/\?unicode>/s///g endfunction " 内の文字列に対する置換文字列を返す function! s:GetUnicode(code) " XXX: substitute()内なので再帰的に\=は使えない let han = [] for c in split(a:code, '\zs') call add(han, get(s:zen2han, c, c)) endfor return nr2char('0x' . join(han, '')) endfunction " contentバッファ中の等を短縮形式に置換する function! s:FormatReference() let b:contentrefsm = [] " ... silent! :g;]*\)>\(\_.\{-}\)]*\)>;s;;\=s:MakeCaptionString(submatch(2), 'img', submatch(1), submatch(3));g silent! :g;]*\)>\(\_.\{-}\)]*\)>;s;;\=s:MakeCaptionString(submatch(2), 'inline', submatch(1), submatch(3));g " silent! :g;]*\)>\(\_.\{-}\);s;;\=s:MakeCaptionString(submatch(3), 'snd', submatch(1), submatch(2));g " silent! :g;]*\)>\(\_.\{-}\);s;;\=s:MakeCaptionString(submatch(3), 'mov', submatch(1), submatch(2));g let b:contentrefs = [] silent! :g;\(.\{-}\);s;;\=s:MakeReferenceString(submatch(1), submatch(2));g " /のhistoryに\(.\{-}\)が出ないように call histdel('/', -1) endfunction " 等のcaptionを〈〉等でくくる。 " 等のタグはconcealにするので画像なのか音声/動画なのかを識別できるように。 " @param caption caption文字列。空文字列の可能性あり " @param tag captionの種類:'inline','img','snd','mov' " @return 整形後の文字列 function! s:MakeCaptionString(caption, tag, ftype, addr) let len = strlen(a:caption) " captionが空の場合は補完: " eblook 1.6.1+mediaで『理化学辞典第5版』を表示した場合、 " 数式部分でcaptionが空のが出現。非表示にすると " 文章がつながらなくなる。(+media無しのeblookの場合はで出現) if a:tag ==# 'img' || a:tag ==# 'inline' let markbeg = '〈' let capstr = (len ? a:caption : '画像') let markend = '〉' elseif a:tag ==# 'snd' let markbeg = '《' let capstr = (len ? a:caption : '音声') let markend = '》' elseif a:tag ==# 'mov' let markbeg = '《' let capstr = (len ? a:caption : '動画') let markend = '》' else return a:cation endif call add(b:contentrefsm, [a:ftype, a:addr, capstr]) return '<' . len(b:contentrefsm) . markbeg . capstr . markend . '>' endfunction " 'caption'を " '<1|caption|>'だけにした文字列を返す。 " concealしても表示されないだけで、整形時にはカウントされているので、 " だと長すぎて、 " 行の折り返しがかなり早めにされているように見えるので。 " @param caption caption文字列。空文字列の可能性あり " @param addr reference先アドレス文字列 " @return 変換後の文字列 function! s:MakeReferenceString(caption, addr) let len = strlen(a:caption) let capstr = len ? a:caption : '参照' call add(b:contentrefs, [a:addr, capstr]) return '<' . len(b:contentrefs) . s:Visited(b:dtitle, a:addr) . capstr . '|>' endfunction " 訪問済リンクかどうか調べて、'!'か'|'を返す function! s:Visited(title, addr) if match(s:visited, a:title . "\t" . a:addr) >= 0 return '!' else return '|' endif endfunction " entryバッファの参照先文字列の置換用関数 function! s:MakeEntryReferenceString(title, addr, caption) call add(b:refs, [a:addr, a:caption]) return a:title . "\t<" . len(b:refs) . s:Visited(a:title, a:addr) . a:caption . '|>' endfunction " entryバッファ上からcontentバッファを整形する function! s:GetAndFormatContent() let save = g:eblook_autoformat_default let g:eblook_autoformat_default = 1 if s:GetContent(0) < 0 let g:eblook_autoformat_default = save return -1 endif let g:eblook_autoformat_default = save call s:GoWindow(1) endfunction " で指定されるindent量を使用して現在行をindnet " @param indcur 現在のindent量 function! s:FormatHeadIndent(indcur) let ind = a:indcur let indnew = matchstr(getline('.'), '^') " 行頭にがある場合は、indent量を更新 while indnew != '' let ind = indnew s/^// call histdel('/', -1) " ^のような場合があるのでループしてチェック let indnew = matchstr(getline('.'), '^') endwhile if ind > g:eblook_decorate_indmin s/^/\=printf('%*s', ind - g:eblook_decorate_indmin, '')/ call histdel('/', -1) endif return ind endfunction " contentバッファ内のを整形する function! s:FormatIndent() silent! :g/^<\%(next\|prev\)>/s/^// let ind = 0 let lnum = 1 let lastline = line('$') while lnum <= lastline call cursor(lnum, 1) let ind = s:FormatHeadIndent(ind) " 行の途中にがある場合は、次行以降のindent量を更新 let indnew = matchstr(getline('.'), '') while indnew != '' s/// let ind = indnew let indnew = matchstr(getline('.'), '') endwhile let lnum = lnum + 1 endwhile endfunction " contentバッファを整形する function! s:FormatContent() let tw = &textwidth if tw == 0 && &wrapmargin let tw = winwidth(0) - &wrapmargin else let tw = winwidth(0) - 1 endif if tw <= 0 return endif setlocal modifiable if g:eblook_decorate silent! :g/^<\%(next\|prev\)>/s/^// endif let ind = 0 normal! 1G$ while 1 if g:eblook_decorate let ind = s:FormatHeadIndent(ind) " 行の途中にあるを考慮して長い行を分割する normal! ^ while search('', 'c', line('.')) > 0 let indnew = matchstr(getline('.'), '') let vcol = virtcol('.') if vcol > tw let startline = line('.') let stopline = s:FormatLine(ind) call cursor(startline, 1) let indline = search('', 'c', stopline) s/// " を削った後、再整形のため行結合 if indline < stopline let n = stopline - indline + 1 execute "normal! " . n . "J" endif else s/// endif let ind = indnew endwhile normal! $ endif if virtcol('$') > tw call s:FormatLine(ind) endif if line('.') == line('$') break endif normal! j$ endwhile setlocal nomodifiable normal! 1G endfunction " 長い行を分割する。 " @param ind インデント量 " @return 分割後の複数行のうちの最終行の行番号(line('.')と同じ) function! s:FormatLine(ind) let first = line('.') let indprev = matchstr(getline('.'), '^ *') silent normal! gqq let last = line('.') if last == first return last endif " gqqが付けたindentは削除。をもとにindentを付けるので、余分。 if g:eblook_decorate if a:ind > g:eblook_decorate_indmin let indcur = printf('%*s', a:ind - g:eblook_decorate_indmin, '') else let indcur = '' endif if indcur != indprev silent! execute (first + 1) . ',' . last . 's/^' . indprev . '/' . indcur . '/' call cursor(last, 1) endif endif return last endfunction " contentバッファ中のカーソル位置付近のreferenceを抽出して、 " その内容を表示する。 " @param count [count]で指定された、表示対象のreferenceのindex番号 function! s:SelectReference(count) if a:count > 0 let index = a:count if a:count > len(b:contentrefs) let index = len(b:contentrefs) endif else let index = s:GetIndex('<\zs\d\+\ze[|!]') if strlen(index) == 0 return endif endif call s:FollowReference(index, g:eblook_update_entrywin_by_contentwin_link) endfunction " contentバッファ中のカーソル位置付近のrefpatを抽出して、 " refpatに含まれるindex番号を返す。 function! s:GetIndex(refpat) let index = s:GetIndexHere(a:refpat, '.') if strlen(index) == 0 " 複数行にわたるcaptionの2行目以降で操作した場合でも表示できるようにする let lnum = search(a:refpat, 'bnW') if lnum == 0 return '' endif let index = s:GetIndexHere(a:refpat, lnum) if strlen(index) == 0 return '' endif endif return index endfunction " contentバッファ中の指定行内でのカーソル位置付近のrefpatを抽出して、 " refpatに含まれるindex番号を返す。 function! s:GetIndexHere(refpat, lnum) let str = getline(a:lnum) let index = matchstr(str, a:refpat) let m1 = matchend(str, a:refpat) if m1 < 0 return '' endif " referenceが1行に2つ以上ある場合は、カーソルが位置する方を使う let m2 = match(str, a:refpat, m1) if m2 >= 0 if a:lnum == '.' let col = col('.') elseif line('.') > a:lnum let col = col('$') else let col = 1 endif let offset = strridx(strpart(str, 0, col), '<') if offset >= 0 let index = matchstr(str, a:refpat, offset) endif endif return index endfunction " entryバッファでカーソル行のエントリに含まれるreferenceのリストを表示 " @param count [count]で指定された、表示対象のreferenceのindex番号 function! s:ListReferences(count) if s:GetContent(0) < 0 return -1 endif call s:FollowReference(a:count, 1) endfunction " referenceをリストアップしてentryバッファに表示し、 " 指定されたreferenceの内容をcontentバッファに表示する。 " @param count [count]で指定された、表示対象のreferenceのindex番号 " @param {Number} withentrybuf entryバッファを作るかどうか function! s:FollowReference(count, withentrybuf) let on_contentbuf = exists('b:dtitle') if s:GoWindow(0) < 0 return endif let dnum = b:dictnum let contentrefs = b:contentrefs let contentcaption = b:caption let title = b:dtitle if s:NewBuffers(b:group, a:withentrybuf) < 0 return -1 endif if a:withentrybuf " contentバッファ内のreferenceリストを、entryバッファに表示 let j = 0 while j < len(contentrefs) let refstr = '<' . (j + 1) . s:Visited(title, contentrefs[j][0]) . contentrefs[j][1] . '|>' execute 'normal! o' . title . "\\" . refstr . "\" let j = j + 1 endwhile let b:refs = contentrefs let b:word = contentcaption silent! :g/^$/d _ setlocal nomodifiable normal! gg if a:count > 0 call cursor(a:count, 1) call search("\t") endif endif " content取得事前準備としてb:変数を設定。s:GetContent()と同様 if s:GoWindow(0) < 0 return -1 endif let b:dictnum = dnum let b:dtitle = title let i = a:count if i < 1 let i = 1 endif let ref = get(contentrefs, i - 1) if type(ref) != type([]) return -1 endif let b:refid = ref[0] let b:caption = ref[1] call s:GetContentSub(0) if a:withentrybuf || !on_contentbuf call s:GoWindow(1) endif endfunction " contentバッファ中のカーソル位置付近のimg等を抽出して、 " その内容を外部プログラムで表示する。 " @param count [count]で指定された、表示対象のindex番号 function! s:ShowMedia(count) if a:count > 0 let index = a:count if a:count > len(b:contentrefsm) let index = len(b:contentrefsm) endif else let index = s:GetIndex('<\zs\d\+\ze[〈《]') if strlen(index) == 0 return endif endif let ref = get(b:contentrefsm, index - 1) if type(ref) != type([]) return endif let ftype = ref[0] let refid = ref[1] let tmpext = substitute(ftype, ':.*', '', '') if tmpext ==# 'mono' let tmpext = 'pbm' endif " mspaintはパス区切りが\でないと駄目 let tmpfshell = tempname() . '.' . tmpext " eblook内ではパス区切りは\では駄目 let tmpfeb = substitute(tmpfshell, '\\', '/', 'g') let dictlist = s:GetDictList(b:group) let dict = dictlist[b:dictnum] execute 'redir! >' . s:cmdfile if exists("dict.book") silent echo 'book ' . s:MakeBookArgument(dict) endif silent echo 'select ' . dict.name if tmpext ==# 'pbm' let m = matchlist(ftype, 'mono:\(\d\+\)x\(\d\+\)') silent echo 'pbm ' . refid . ' ' . m[1] . ' ' . m[2] elseif tmpext ==# 'wav' let m = matchlist(refid, '\(\d\+:\d\+\)-\(\d\+:\d\+\)') silent echo 'wav ' . m[1] . ' ' . m[2] . ' "' . tmpfeb . '"' elseif tmpext ==# 'mpg' let m = matchlist(refid, '\(\d\+\),\(\d\+\),\(\d\+\),\(\d\+\)') silent echo printf('mpeg %s %s %s %s "%s"', m[1], m[2], m[3], m[4], tmpfeb) else " bmp || jpeg silent echo tmpext . ' ' . refid . ' "' . tmpfeb . '"' endif redir END let res = system('"' . g:eblookprg . '" ' . s:eblookopt . ' < "' . s:cmdfile . '"') let ngmsg = matchstr(res, 'eblook> \zsNG: .*\ze\n') if v:shell_error || strlen(ngmsg) > 0 echomsg tmpext . 'ファイル抽出失敗: ' . (v:shell_error ? res : ngmsg) return endif if tmpext ==# 'pbm' let pbm = substitute(res, 'Warning: you should specify a book directory first', '', '') let pbm = substitute(pbm, 'eblook> ', '', 'g') let pbm = substitute(pbm, '\%^\n\n', '', '') execute 'redir! > ' . tmpfshell silent echon pbm redir END endif let viewer = get(dict, 'viewer_' . tmpext, '') if strlen(viewer) == 0 let viewer = get(g:eblook_viewers, tmpext, '') if strlen(viewer) == 0 echomsg tmpext . '用ビューアがg:eblook_viewersに設定されていません' return endif endif if match(viewer, '%s') >= 0 let cmdline = substitute(viewer, '%s', shellescape(tmpfshell), '') else let cmdline = viewer . ' ' . shellescape(tmpfshell) endif " hit-enter promptが出ると面倒なのでsilent execute 'silent !' . cmdline endfunction " バッファのヒストリをたどる。 " @param dir -1:古い方向へ, 1:新しい方向へ function! s:History(dir) " eblook_update_entrywin_by_contentwin_linkが1の場合は、 " entryバッファとcontentバッファは一対で扱う。 if g:eblook_update_entrywin_by_contentwin_link if a:dir > 0 let ni = s:NextBufIndex(s:entrybufindex) if !bufexists(s:entrybufname . ni) || !bufexists(s:contentbufname . ni) echomsg 'eblook-vim: 次のバッファはありません' return endif else let ni = s:PrevBufIndex(s:entrybufindex) if !bufexists(s:entrybufname . ni) || !bufexists(s:contentbufname . ni) echomsg 'eblook-vim: 前のバッファはありません' return endif endif let ni = s:HistoryBuf(a:dir, s:entrybufname, s:entrybufindex) if ni >= 0 let s:entrybufindex = ni endif let ni = s:HistoryBuf(a:dir, s:contentbufname, s:contentbufindex) if ni >= 0 let s:contentbufindex = ni endif call s:GoWindow(1) return endif if exists('b:dtitle') " contentbuf? let ni = s:HistoryBuf(a:dir, s:contentbufname, s:contentbufindex) if ni >= 0 let s:contentbufindex = ni endif else let ni = s:HistoryBuf(a:dir, s:entrybufname, s:entrybufindex) if ni >= 0 let s:entrybufindex = ni endif endif endfunction " entrybuf/contentbufのヒストリをたどる。 " @param dir -1:古い方向へ, 1:新しい方向へ function! s:HistoryBuf(dir, bufname, bufindex) if a:dir > 0 let ni = s:NextBufIndex(a:bufindex) if !bufexists(a:bufname . ni) echomsg 'eblook-vim: 次のバッファはありません' return -1 endif else let ni = s:PrevBufIndex(a:bufindex) if !bufexists(a:bufname . ni) echomsg 'eblook-vim: 前のバッファはありません' return -1 endif endif if s:SelectWindowByName(a:bufname . a:bufindex) < 0 call s:OpenWindow('split ' . a:bufname . ni) else silent execute "edit " . a:bufname . ni endif return ni endfunction " バッファの次のインデックス番号を返す " @param oldbufindex 現在のインデックス番号 " @return バッファの次のインデックス番号 function! s:NextBufIndex(oldbufindex) let i = a:oldbufindex + 1 if i > g:eblook_history_max let i = 1 endif return i endfunction " バッファの前のインデックス番号を返す " @param oldbufindex 現在のインデックス番号 " @return バッファの前のインデックス番号 function! s:PrevBufIndex(oldbufindex) let i = a:oldbufindex - 1 if i < 1 let i = g:eblook_history_max endif return i endfunction " entryウィンドウとcontentウィンドウを隠す function! s:Quit() if has("gui_running") unmenu PopUp.[eblook]\ Back unmenu PopUp.[eblook]\ Forward unmenu PopUp.[eblook]\ SearchVisual unmenu PopUp.-SEP_EBLOOK- endif if s:SelectWindowByName(s:contentbufname . s:contentbufindex) >= 0 hide endif if s:SelectWindowByName(s:entrybufname . s:entrybufindex) >= 0 hide endif call delete(s:cmdfile) endfunction " entryウィンドウからcontentウィンドウをスクロールする。 " @param down 1の場合下に、0の場合上に。 function! s:ScrollContent(down) if s:GoWindow(0) < 0 return endif if a:down execute "normal! \" else execute "normal! \" endif call s:GoWindow(1) endfunction " entryウィンドウ/contentウィンドウに移動する " @param to_entry_buf 1:entryウィンドウに移動, 0:contentウィンドウに移動 function! s:GoWindow(to_entry_buf) if a:to_entry_buf let bufname = s:entrybufname . s:entrybufindex else let bufname = s:contentbufname . s:contentbufindex endif if s:SelectWindowByName(bufname) < 0 if s:OpenWindow('split ' . bufname) < 0 return -1 endif endif return 0 endfunction " contentウィンドウの高さを最大化する " @param on_entry_buf 1:entryウィンドウ上で実行, 0:contentウィンドウ上で実行 function! s:MaximizeContentHeight(on_entry_buf) if a:on_entry_buf == 0 call s:GoWindow(1) endif " entryウィンドウのwinheightを保存 if !exists('b:winheight') let b:winheight = winheight(0) endif if s:GoWindow(0) < 0 return endif " contentウィンドウのwinheightを保存 if !exists('b:winheight') let b:winheight = winheight(0) endif resize call s:GoWindow(a:on_entry_buf) endfunction " entryバッファとcontentバッファの高さを復元する " @param on_entry_buf 1:entryウィンドウ上で実行, 0:contentウィンドウ上で実行 function! s:LoadWinHeights(on_entry_buf) if a:on_entry_buf == 0 || s:GoWindow(0) >= 0 call s:LoadContentWinHeight() endif if s:GoWindow(1) >= 0 " LoadContentWinHeightでウィンドウ最大化の可能性があるので、その後で実行 call s:LoadEntryWinHeight() endif call s:GoWindow(a:on_entry_buf) endfunction " contentウィンドウの高さを復元する function! s:LoadContentWinHeight() if exists('b:winheight') let content_winheight = b:winheight unlet b:winheight else let content_winheight = g:eblook_contentwin_height endif if content_winheight == 0 resize elseif content_winheight > 0 execute 'resize' content_winheight endif endfunction " entryウィンドウの高さを復元する function! s:LoadEntryWinHeight() if exists('b:winheight') let entry_winheight = b:winheight unlet b:winheight else let entry_winheight = g:eblook_entrywin_height endif execute 'resize' entry_winheight endfunction " title文字列から辞書番号を返す " @param title 辞書のtitle文字列 " @return 辞書番号 function! s:GetDictNumFromTitle(group, title) let dictlist = s:GetDictList(a:group) let i = 0 while i < len(dictlist) if a:title ==# dictlist[i].title return i endif let i = i + 1 endwhile return -1 endfunction " 辞書一覧を表示する " @param {Number} group 対象の辞書グループ番号 function! eblook#ListDict(group) let gr = s:ExpandDefaultGroup(a:group) let dictlist = s:GetDictList(gr) echo '辞書グループ: ' . gr " EblookSkipDict等では辞書番号を指定するので、辞書番号付きで表示する let i = 0 while i < len(dictlist) let dict = dictlist[i] let skip = ' ' if get(dict, 'skip') let skip = 'skip' endif let book = get(dict, 'book', '') let appendix = get(dict, 'appendix', '') echo skip . ' ' . i . ' ' . dict.title . ' ' . dict.name . ' ' . book . ' ' . appendix let i = i + 1 endwhile endfunction " 辞書をスキップするかどうかを一時的に設定する。 " @param {Number} group 対象の辞書グループ番号 " @param is_skip スキップするかどうか。1:スキップする, 0:スキップしない " @param ... 辞書番号のリスト function! eblook#SetDictSkip(group, is_skip, ...) let dictlist = s:GetDictList(a:group) for dnum in a:000 let dictlist[dnum].skip = a:is_skip endfor endfunction " 辞書グループの一覧を表示する " @param {Number} max チェックする辞書グループ番号の最大値 function! eblook#ListGroup(max) let maxnum = a:max if maxnum == 0 let maxnum = 99 endif let i = 1 while i <= maxnum if exists("g:eblook_dictlist{i}") let dictlist = g:eblook_dictlist{i} let titles = [] let skipdicts = 0 let j = 0 while j < len(dictlist) let dict = dictlist[j] if get(dict, 'skip') call add(titles, '(' . dict.title . ')') let skipdicts += 1 else call add(titles, dict.title) endif let j = j + 1 endwhile let ndicts = len(dictlist) if skipdicts > 0 let ndicts .= '(' . skipdicts . ')' endif echo i . ' ' . ndicts . ' ' . join(titles, ', ') endif let i = i + 1 endwhile endfunction " countが指定されていない時に検索対象にする辞書グループ番号を設定する " @param {Number} group 対象の辞書グループ番号 function! eblook#SetDefaultGroup(group) if a:group == 0 echomsg 'eblook-vim: g:eblook_group=' . g:eblook_group else let g:eblook_group = a:group endif endfunction " group番号が0(未指定)であれば、g:eblook_groupの値を返す。 " (countを指定せずに操作した時に、どの辞書グループが使われたかが、 " ユーザにわかるようにするため) function! s:ExpandDefaultGroup(group) if a:group == 0 return g:eblook_group else return a:group endif endfunction " SelectWindowByName(name) " Acitvate selected window by a:name. function! s:SelectWindowByName(name) let num = bufwinnr(a:name) if num > 0 && num != winnr() execute num . 'wincmd w' endif return num endfunction " 新しいウィンドウを開く function! s:OpenWindow(cmd) if winheight(0) > 2 silent execute a:cmd return winnr() else " 'noequalalways'の場合、高さが足りずにsplitがE36エラーになる場合あるので、 " 一番高さのあるwindowで再度splitを試みる let maxheight = 2 let maxnr = 0 for i in range(1, winnr('$')) let height = winheight(i) if height > maxheight let maxheight = height let maxnr = i endif endfor if maxnr > 0 execute maxnr . 'wincmd w' silent execute a:cmd return winnr() else redraw echomsg 'eblook-vim: 画面上の空きが足りないため新規ウィンドウを開くのに失敗しました。ウィンドウを閉じて空きを作ってください(:' . a:cmd . ')' return -1 endif endif endfunction " eblook-vim-1.1.0からの辞書指定形式をペーストする。 " eblook-vim-1.0.5からの形式変換用。 " @param {Number} group 対象の辞書グループ番号 function! eblook#PasteDictList(group) let gr = s:ExpandDefaultGroup(a:group) let dictlist = s:GetDictList(gr) let save_paste = &paste let &paste = 1 execute 'normal! olet eblook_dictlist' . gr . " = [\" for dict in dictlist execute 'normal! o' \ . " \\{ 'title': '" . dict.title . "',\" \ . " \\'book': '" . dict.book . "',\" \ . " \\'name': '" . dict.name . "',\" if exists('dict.appendix') execute 'normal! o' \ . " \\'appendix': '" . dict.appendix . "',\" endif if exists('dict.skip') execute 'normal! o' \ . " \\'skip': " . dict.skip . ",\" endif execute 'normal! o' \ . " \\},\" endfor execute 'normal! o\]' . "\" let &paste = save_paste endfunction let &cpo = s:save_cpo eblook.vim-1.4.0/autoload/eblook/0000755000175000017500000000000013752745333016212 5ustar yabukiyabukieblook.vim-1.4.0/autoload/eblook/stem_en.vim0000644000175000017500000004754313752745333020376 0ustar yabukiyabukiscriptencoding utf-8 " 英単語のstemmingを行う function! eblook#stem_en#Stem(word) let lword = tolower(a:word) let stemmed = [] if lword !=# a:word call add(stemmed, lword) endif let res = s:StemHeuristics(lword) for w in res call s:AddNew(stemmed, w) endfor if exists(':PorterStem') let res = s:StemPorter(lword) for w in res call s:AddNew(stemmed, w) endfor endif return sort(stemmed, 's:CompareLen') endfunction " リストに含まれていなければ追加する " @param lis 追加先リスト " @param x 追加しようとしている要素 function! s:AddNew(lis, x) if index(a:lis, a:x) == -1 return add(a:lis, a:x) endif return a:lis endfunction function! s:CompareLen(i1, i2) return len(a:i1) - len(a:i2) endfunction " 動詞/形容詞の活用形と名詞の複数形の活用語尾を取り除く。 " 与えられた語の原形として可能性のある語のリストを返す。 " (lookupのstem-english.elのstem:extraからの移植) function! s:StemHeuristics(word) let irr = get(g:eblook#stem_en#irregular_verb_alist, a:word) if type(irr) == type([]) return irr endif if a:word ==# 'as' return ['as'] endif for rule in g:eblook#stem_en#rules if a:word =~ rule[0] let ret = [] for sub in rule[1] call add(ret, substitute(a:word, rule[0], sub, '')) endfor return ret endif endfor return [] endfunction " porter-stem.vimを使ったstemming function! s:StemPorter(word) function! s:GetPorterStemFuncs() " porter-stem.vim番号取得 " :PorterStemはを使ってないので:command結果からの取得は不可 " http://d.hatena.ne.jp/thinca/20111228 silent! redir => sliststr silent! scriptnames silent! redir END let slist = split(sliststr, "\n") call filter(slist, 'v:val =~ "porter-stem.vim"') let porterstem_sid = substitute(slist[0], '^\s*\(\d\+\):.*$', '\1', '') let s:Step1a = function('' . porterstem_sid . '_Step1a') let s:Step1b = function('' . porterstem_sid . '_Step1b') let s:Step1c = function('' . porterstem_sid . '_Step1c') let s:Step2 = function('' . porterstem_sid . '_Step2') let s:Step3 = function('' . porterstem_sid . '_Step3') let s:Step4 = function('' . porterstem_sid . '_Step4') let s:Step5a = function('' . porterstem_sid . '_Step5a') let s:Step5b = function('' . porterstem_sid . '_Step5b') function! s:Step1(word) let newword = s:Step1a(a:word) let newword = s:Step1b(newword) return s:Step1c(newword) endfunction function! s:Step5(word) let newword = s:Step5a(a:word) return s:Step5b(newword) endfunction endfunction if len(a:word) <= 2 return [] endif if !exists('s:Step1a') call s:GetPorterStemFuncs() endif " copy from GetWordStem() let newword = a:word " initial y fix let changedY = 0 if newword[0] == 'y' let newword = 'Y'.newword[1:] let changedY = 1 endif " Porter Stemming let newword1 = s:Step1(newword) let newword2 = s:Step2(newword1) let newword3 = s:Step3(newword2) let newword4 = s:Step4(newword3) let newword5 = s:Step5(newword4) let newwords = [newword1] call s:AddNew(newwords, newword2) call s:AddNew(newwords, newword3) call s:AddNew(newwords, newword4) call s:AddNew(newwords, newword5) if changedY call map(newwords, '"y" . v:val[1:]') endif return newwords endfunction " s:StemHeuristics()で使う置換ルール " (lookupのstem-english.elのstem:extraからの移植) let g:eblook#stem_en#rules = [ \['\([^aeiou]\)\1e\%(r\|st\)$', ['\1', '\1\1e']], \['\([^aeiou]\)ie\%(r\|st\)$', ['\1y', '\1ie']], \['e\%(r\|st\)$', ['', 'e']], \['ches$', ['ch', 'che']], \['shes$', ['sh', 'che']], \['ses$', ['s', 'se']], \['xes$', ['x', 'xe']], \['zes$', ['z', 'ze']], \['ves$', ['f', 'fe']], \['\([^aeiou]\)oes$', ['\1o', '\1oe']], \['\([^aeiou]\)ies$', ['\1y', '\1ie']], \['es$', ['', 'e']], \['s$', ['']], \['\([^aeiou]\)ied$', ['\1y', '\1ie']], \['\([^aeiou]\)\1ed$', ['\1', '\1\1e']], \['cked$', ['c', 'cke']], \['ed$', ['', 'e']], \['\([^aeiou]\)\1ing$', ['\1']], \['ing$', ['', 'e']], \] " 不規則動詞と原形の連想配列" " (lookupのstem-english.elのstem:irregular-verb-alistから変換) let g:eblook#stem_en#irregular_verb_alist = { \"abode": ["abide"], \"abided": ["abide"], \"alighted": ["alight"], \"arose": ["arise"], \"arisen": ["arise"], \"awoke": ["awake"], \"awaked": ["awake"], \"awoken": ["awake"], \"baby-sat": ["baby-sit"], \"backbit": ["backbite"], \"backbitten": ["backbite"], \"backslid": ["backslide"], \"backslidden": ["backslide"], \"was": ["be", "am", "is", "are"], \"were": ["be", "am", "is", "are"], \"been": ["be", "am", "is", "are"], \"bore": ["bear"], \"bare": ["bear"], \"borne": ["bear"], \"born": ["bear"], \"beat": ["beat"], \"beaten": ["beat"], \"befell": ["befall"], \"befallen": ["befall"], \"begot": ["beget"], \"begat": ["beget"], \"begotten": ["beget"], \"began": ["begin"], \"begun": ["begin"], \"begirt": ["begird"], \"begirded": ["begird"], \"beheld": ["behold"], \"bent": ["bend"], \"bended": ["bend"], \"bereaved": ["bereave"], \"bereft": ["bereave"], \"besought": ["beseech"], \"beseeched": ["beseech"], \"beset": ["beset"], \"bespoke": ["bespeak"], \"bespoken": ["bespeak"], \"bestrewed": ["bestrew"], \"bestrewn": ["bestrew"], \"bestrode": ["bestride"], \"bestrid": ["bestride"], \"bestridden": ["bestride"], \"bet": ["bet"], \"betted": ["bet"], \"betook": ["betake"], \"betaken": ["betake"], \"bethought": ["bethink"], \"bade": ["bid"], \"bid": ["bid"], \"bad": ["bid"], \"bedden": ["bid"], \"bided": ["bide"], \"bode": ["bide"], \"bound": ["bind"], \"bit": ["bite"], \"bitten": ["bite"], \"bled": ["bleed"], \"blended": ["blend"], \"blent": ["blend"], \"blessed": ["bless"], \"blest": ["bless"], \"blew": ["blow"], \"blown": ["blow"], \"blowed": ["blow"], \"bottle-fed": ["bottle-feed"], \"broke": ["break"], \"broken": ["break"], \"breast-fed": ["breast-feed"], \"bred": ["breed"], \"brought": ["bring"], \"broadcast": ["broadcast"], \"broadcasted": ["broadcast"], \"browbeat": ["browbeat"], \"browbeaten": ["browbeat"], \"built": ["build"], \"builded": ["build"], \"burned": ["burn"], \"burnt": ["burn"], \"burst": ["burst"], \"busted": ["bust"], \"bust": ["bust"], \"bought": ["buy"], \"cast": ["cast"], \"chid": ["chide"], \"chided": ["chide"], \"chidden": ["chide"], \"chose": ["choose"], \"chosen": ["choose"], \"clove": ["cleave"], \"cleft": ["cleave"], \"cleaved": ["cleave"], \"cloven": ["cleave"], \"clave": ["cleave"], \"clung": ["cling"], \"clothed": ["clothe"], \"clad": ["clothe"], \"colorcast": ["colorcast"], \"clorcasted": ["colorcast"], \"came": ["come"], \"come": ["come"], \"cost": ["cost"], \"costed": ["cost"], \"countersank": ["countersink"], \"countersunk": ["countersink"], \"crept": ["creep"], \"crossbred": ["crossbreed"], \"crowed": ["crow"], \"crew": ["crow"], \"cursed": ["curse"], \"curst": ["curse"], \"cut": ["cut"], \"dared": ["dare"], \"durst": ["dare"], \"dealt": ["deal"], \"deep-froze": ["deep-freeze"], \"deep-freezed": ["deep-freeze"], \"deep-frozen": ["deep-freeze"], \"dug": ["dig"], \"digged": ["dig"], \"dived": ["dive"], \"dove": ["dive"], \"did": ["do"], \"done": ["do"], \"drew": ["draw"], \"drawn": ["draw"], \"dreamed": ["dream"], \"dreamt": ["dream"], \"drank": ["drink"], \"drunk": ["drink"], \"dripped": ["drip"], \"dript": ["drip"], \"drove": ["drive"], \"drave": ["drive"], \"driven": ["drive"], \"dropped": ["drop"], \"dropt": ["drop"], \"dwelt": ["dwell"], \"dwelled": ["dwell"], \"ate": ["eat"], \"eaten": ["eat"], \"fell": ["fall"], \"fallen": ["fall"], \"fed": ["feed"], \"felt": ["feel"], \"fought": ["fight"], \"found": ["find"], \"fled": ["fly", "flee"], \"flung": ["fling"], \"flew": ["fly"], \"flied": ["fly"], \"flown": ["fly"], \"forbore": ["forbear"], \"forborne": ["forbear"], \"forbade": ["forbid"], \"forbad": ["forbid"], \"forbidden": ["forbid"], \"forecast": ["forecast"], \"forecasted": ["forecast"], \"forewent": ["forego"], \"foregone": ["forego"], \"foreknew": ["foreknow"], \"foreknown": ["foreknow"], \"foreran": ["forerun"], \"forerun": ["forerun"], \"foresaw": ["foresee"], \"foreseen": ["foresee"], \"foreshowed": ["foreshow"], \"foreshown": ["foreshow"], \"foretold": ["foretell"], \"forgot": ["forget"], \"forgotten": ["forget"], \"forgave": ["forgive"], \"forgiven": ["forgive"], \"forwent": ["forgo"], \"forgone": ["forgo"], \"forsook": ["forsake"], \"forsaken": ["forsake"], \"forswore": ["forswear"], \"forsworn": ["forswear"], \"froze": ["freeze"], \"frozen": ["freeze"], \"gainsaid": ["gainsay"], \"gelded": ["geld"], \"gelt": ["geld"], \"got": ["get"], \"gotten": ["get"], \"ghostwrote": ["ghostwrite"], \"ghostwritten": ["ghostwrite"], \"gilded": ["gild"], \"gilt": ["gild"], \"girded": ["gird"], \"girt": ["gird"], \"gave": ["give"], \"given": ["give"], \"gnawed": ["gnaw"], \"gnawn": ["gnaw"], \"went": ["go", "wend"], \"gone": ["go"], \"graved": ["grave"], \"graven": ["grave"], \"ground": ["grind"], \"gripped": ["grip"], \"gript": ["grip"], \"grew": ["grow"], \"grown": ["grow"], \"hamstrung": ["hamstring"], \"hamstringed": ["hamstring"], \"hung": ["hang"], \"hanged": ["hang"], \"had": ["have"], \"heard": ["hear"], \"heaved": ["heave"], \"hove": ["heave"], \"hewed": ["hew"], \"hewn": ["hew"], \"hid": ["hide"], \"hidden": ["hide"], \"hit": ["hit"], \"held": ["hold"], \"hurt": ["hurt"], \"indwelt": ["indwell"], \"inlaid": ["inlay"], \"inlet": ["inlet"], \"inputted": ["input"], \"input": ["input"], \"inset": ["inset"], \"insetted": ["inset"], \"interwove": ["interweave"], \"interweaved": ["interweave"], \"jigsawed": ["jigsaw"], \"jigsawn": ["jigsaw"], \"kept": ["keep"], \"knelt": ["kneel"], \"kneeled": ["kneel"], \"knitted": ["knit"], \"knit": ["knit"], \"knew": ["know"], \"known": ["know"], \"laded": ["lade"], \"laden": ["lade"], \"laid": ["lay"], \"led": ["lead"], \"leaned": ["lean"], \"leant": ["lean"], \"leaped": ["leap"], \"leapt": ["leap"], \"learned": ["learn"], \"learnt": ["learn"], \"left": ["leave"], \"lent": ["lend"], \"let": ["let"], \"lay": ["lie"], \"lain": ["lie"], \"lighted": ["light"], \"lit": ["light"], \"lip-read": ["lip-read"], \"lost": ["lose"], \"made": ["make"], \"meant": ["mean"], \"met": ["meet"], \"melted": ["melt"], \"methougt": ["methinks"], \"misbecame": ["misbecome"], \"misbecome": ["misbecome"], \"miscast": ["miscast"], \"miscasted": ["miscast"], \"misdealt": ["misdeal"], \"misdid": ["misdo"], \"misdone": ["misdo"], \"misgave": ["misgive"], \"misgiven": ["misgive"], \"mishit": ["mishit"], \"mislaid": ["mislay"], \"misled": ["mislead"], \"misread": ["misread"], \"misspelt": ["misspell"], \"missplled": ["misspell"], \"misspent": ["misspend"], \"mistook": ["mistake"], \"mistaken": ["mistake"], \"misunderstood": ["misunderstand"], \"mowed": ["mow"], \"mown": ["mow"], \"offset": ["offset"], \"outbid": ["outbid"], \"outbade": ["outbid"], \"outbidden": ["outbid"], \"outdid": ["outdo"], \"outdone": ["outdo"], \"outfought": ["outfight"], \"outgrew": ["outgrown"], \"outgrown": ["outgrown"], \"outlaid": ["outlay"], \"output": ["output"], \"outputted": ["output"], \"ooutputted": ["output"], \"outrode": ["outride"], \"outridden": ["outride"], \"outran": ["outrun"], \"outrun": ["outrun"], \"outsold": ["outsell"], \"outshone": ["outshine"], \"outshot": ["outshoot"], \"outwore": ["outwear"], \"outworn": ["outwear"], \"overbore": ["overbear"], \"overborne": ["overbear"], \"overbid": ["overbid"], \"overblew": ["overblow"], \"overblown": ["overblow"], \"overcame": ["overcome"], \"overcome": ["overcome"], \"overdid": ["overdo"], \"overdone": ["overdo"], \"overdrew": ["overdraw"], \"overdrawn": ["overdraw"], \"overdrank": ["overdrink"], \"overdrunk": ["overdrink"], \"overate": ["overeat"], \"overeaten": ["overeat"], \"overfed": ["overfeed"], \"overflowed": ["overflow"], \"overflown": ["overfly", "overflow"], \"overflew": ["overfly"], \"overgrew": ["overgrow"], \"overgrown": ["overgrow"], \"overhung": ["overhang"], \"overhanged": ["overhang"], \"ovearheard": ["overhear"], \"overlaid": ["overlay"], \"overleaped": ["overleap"], \"overleapt": ["overleap"], \"overlay": ["overlie"], \"overlain": ["overlie"], \"overpaid": ["overpay"], \"overrode": ["override"], \"overridden": ["override"], \"overran": ["overrun"], \"overrun": ["overrun"], \"oversaw": ["oversee"], \"overseen": ["oversee"], \"oversold": ["oversell"], \"overset": ["overset"], \"overshot": ["overshoot"], \"overspent": ["overspend"], \"overspread": ["overspread"], \"overtook": ["overtake"], \"overtaken": ["overtake"], \"overthrew": ["overthrow"], \"overthrown": ["overthrow"], \"overworked": ["overwork"], \"overwrought": ["overwork"], \"partook": ["partake"], \"partaken": ["partake"], \"paid": ["pay"], \"penned": ["pen"], \"pent": ["pen"], \"pinch-hit": ["pinch-hit"], \"pleaded": ["plead"], \"plead": ["plead"], \"pled": ["plead"], \"prepaid": ["prepay"], \"preset": ["preset"], \"proofread": ["proofread"], \"proved": ["prove"], \"proven": ["prove"], \"put": ["put"], \"quick-froze": ["quick-freeze"], \"quick-frozen": ["quick-freeze"], \"quit": ["quit"], \"quitted": ["quit"], \"read": ["read"], \"reaved": ["reave"], \"reft": ["reave"], \"rebound": ["rebind"], \"rebroadcast": ["rebroadcast"], \"rebroadcasted": ["rebroadcast"], \"rebuilt": ["rebuild"], \"recast": ["recast"], \"recasted": ["recast"], \"re-did": ["re-do"], \"re-done": ["re-do"], \"reeved": ["reeve"], \"rove": ["reeve"], \"reheard": ["rehear"], \"relaid": ["relay"], \"remade": ["remake"], \"rent": ["rend"], \"repaid": ["repay"], \"reread": ["reread"], \"reran": ["rerun"], \"rerun": ["rerun"], \"resold": ["resell"], \"reset": ["reset"], \"retook": ["retake"], \"retaken": ["retake"], \"retold": ["retell"], \"rethought": ["rethink"], \"rewound": ["rewind"], \"rewinded": ["rewind"], \"rewrote": ["rewrite"], \"rewritten": ["rewrite"], \"rid": ["ride"], \"ridded": ["rid"], \"rode": ["ride"], \"ridden": ["ride"], \"rang": ["ring"], \"rung": ["ring"], \"rose": ["rise"], \"risen": ["rise"], \"rived": ["rive"], \"riven": ["rive"], \"roughcast": ["roughcast"], \"roughhewed": ["roughhew"], \"roughhewn": ["roughhew"], \"ran": ["run"], \"run": ["run"], \"sawed": ["saw"], \"sawn": ["saw"], \"said": ["say"], \"saw": ["see"], \"seen": ["see"], \"sought": ["seek"], \"sold": ["sell"], \"sent": ["send"], \"set": ["set"], \"sewed": ["sew"], \"sewn": ["sew"], \"shook": ["shake"], \"shaken": ["shake"], \"shaved": ["shave"], \"shaven": ["shave"], \"sheared": ["shear"], \"shore": ["shear"], \"shorn": ["shear"], \"shed": ["shed"], \"shone": ["shine"], \"shined": ["shine"], \"shit": ["shit"], \"shat": ["shit"], \"shitted": ["shit"], \"shod": ["shoe"], \"shoed": ["shoe"], \"shot": ["shoot"], \"showed": ["show"], \"shown": ["show"], \"shredded": ["shred"], \"shred": ["shred"], \"shrank": ["shrink"], \"shrunk": ["shrink"], \"shrunken": ["shrink"], \"shrived": ["shrive"], \"shrove": ["shrive"], \"shriven": ["shrive"], \"shut": ["shut"], \"sight-read": ["sight-read"], \"simulcast": ["simulcast"], \"simulcasted": ["simulcast"], \"sang": ["sing"], \"sung": ["sing"], \"sank": ["sink"], \"sunk": ["sink"], \"sunken": ["sink"], \"sat": ["sit"], \"sate": ["sit"], \"slew": ["slay"], \"slain": ["slay"], \"slept": ["sleep"], \"slid": ["slide"], \"slidden": ["slide"], \"slunk": ["slink"], \"smelled": ["smell"], \"smelt": ["smell"], \"smote": ["smite"], \"smitten": ["smite"], \"smit": ["smite"], \"sowed": ["sow"], \"sown": ["sow"], \"spoke": ["speak"], \"spoken": ["speak"], \"sped": ["speed"], \"speeded": ["speed"], \"spelled": ["spell"], \"spelt": ["spell"], \"spellbound": ["spellbind"], \"spent": ["spend"], \"spilled": ["spill"], \"spilt": ["spill"], \"spun": ["spin"], \"span": ["spin"], \"spat": ["spit"], \"spit": ["spit"], \"split": ["split"], \"spoiled": ["spoil"], \"spoilt": ["spoil"], \"spoon-fed": ["spoon-feed"], \"spread": ["spread"], \"sprang": ["spring"], \"sprung": ["spring"], \"stood": ["stand"], \"staved": ["stave"], \"stove": ["stave"], \"stayed": ["stay"], \"staid": ["stay"], \"stole": ["steal"], \"stolen": ["steal"], \"stuck": ["stick"], \"stung": ["sting"], \"stank": ["stink"], \"stunk": ["stink"], \"strewed": ["strew"], \"strewn": ["strew"], \"strode": ["stride"], \"stridden": ["stride"], \"struck": ["strike"], \"stricken": ["strike"], \"strung": ["string"], \"strove": ["strive"], \"striven": ["strive"], \"sublet": ["sublet"], \"sunburned": ["sunburn"], \"sunburnt": ["sunburn"], \"swore": ["swear"], \"sware": ["swear"], \"sworn": ["swear"], \"sweat": ["sweat"], \"sweated": ["sweat"], \"swept": ["sweep"], \"swelled": ["swell"], \"swollen": ["swell"], \"swam": ["swim"], \"swum": ["swim"], \"swung": ["swing"], \"took": ["take"], \"taken": ["take"], \"taught": ["teach"], \"tore": ["tear"], \"torn": ["tear"], \"telecast": ["telecast"], \"telecasted": ["telecast"], \"told": ["tell"], \"thought": ["think"], \"thrived": ["thrive"], \"throve": ["thrive"], \"thriven": ["thrive"], \"threw": ["thrown"], \"thrown": ["thrown"], \"thrust": ["thrust"], \"tossed": ["toss"], \"tost": ["toss"], \"trod": ["tread"], \"treaded": ["tread"], \"trode": ["tread"], \"trodden": ["tread"], \"typecast": ["typecast"], \"typewrote": ["typewrite"], \"typewritten": ["typewrite"], \"unbent": ["unbend"], \"unbended": ["unbend"], \"unbound": ["unbind"], \"underbid": ["underbid"], \"underbidden": ["underbid"], \"undercut": ["undercut"], \"underwent": ["undergo"], \"undergone": ["undergo"], \"underlaid": ["underlay"], \"underlay": ["underlie"], \"underlain": ["underlie"], \"underpaid": ["underpay"], \"undersold": ["undersell"], \"undershot": ["undershoot"], \"understood": ["understand"], \"undertook": ["undertake"], \"undertaken": ["undertake"], \"underwrote": ["underwrite"], \"underwritten": ["underwrite"], \"undid": ["undo"], \"undone": ["undo"], \"undrew": ["undraw"], \"undrawn": ["undraw"], \"ungirded": ["ungird"], \"ungirt": ["ungird"], \"unlearnt": ["unlearn"], \"unlearned": ["unlearn"], \"unmade": ["unmake"], \"unsaid": ["unsay"], \"unstuck": ["unstick"], \"unstrung": ["unstring"], \"unwound": ["unwind"], \"upheld": ["uphold"], \"uprose": ["uprise"], \"uprisen": ["uprise"], \"upset": ["upset"], \"upswept": ["upsweep"], \"woke": ["wake"], \"waked": ["wake"], \"woken": ["wake"], \"waylaid": ["waylay"], \"wore": ["wear"], \"worn": ["wear"], \"wove": ["weave"], \"weaved": ["weave"], \"woven": ["weave"], \"wed": ["wed"], \"wedded": ["wed"], \"wept": ["weep"], \"wended": ["wend"], \"wetted": ["wet"], \"wet": ["wet"], \"won": ["win"], \"wound": ["wind"], \"winded": ["wind"], \"wiredrew": ["wiredraw"], \"wiredrawn": ["wiredraw"], \"wist": ["wit"], \"withdrew": ["withdraw"], \"withdrawn": ["withdraw"], \"withheld": ["withhold"], \"withstood": ["withstand"], \"worked": ["work"], \"wrought": ["work"], \"wrapped": ["wrap"], \"wrapt": ["wrap"], \"wrung": ["wring"], \"wrote": ["write"], \"writ": ["write"], \"written": ["write"], \} eblook.vim-1.4.0/autoload/eblook/stem_ja.vim0000644000175000017500000002104513752745333020353 0ustar yabukiyabukiscriptencoding utf-8 " 語尾補正ルールを使った語尾補正を行う function! eblook#stem_ja#Stem(word) let stemmed = [] for rule in g:eblook#stem_ja#rules if a:word =~ rule[0] call add(stemmed, substitute(a:word, rule[0], rule[1], '')) endif endfor return stemmed endfunction " 日本語用語尾補正ルールリスト (ebviewのdata/endinglist-ja.xmlから変換) let g:eblook#stem_ja#rules = [ \['た$', 'る'], \['て$', 'る'], \['かない$', 'く'], \['かなか$', 'く'], \['きます$', 'く'], \['きまし$', 'く'], \['きませんでした$', 'く'], \['きません$', 'く'], \['きましょう$', 'く'], \['けば$', 'く'], \['こう$', 'く'], \['いて$', 'く'], \['って$', 'く'], \['いた$', 'く'], \['った$', 'く'], \['かれ$', 'く'], \['かせ$', 'く'], \['け$', 'く'], \['さない$', 'す'], \['さなか$', 'す'], \['します$', 'す'], \['しまし$', 'す'], \['しませんでした$', 'す'], \['しません$', 'す'], \['しましょう$', 'す'], \['せば$', 'す'], \['そう$', 'す'], \['して$', 'す'], \['した$', 'す'], \['され$', 'す'], \['させ$', 'す'], \['せ$', 'す'], \['たない$', 'つ'], \['たなか$', 'つ'], \['ちます$', 'つ'], \['ちまし$', 'つ'], \['ちませんでした$', 'つ'], \['ちません$', 'つ'], \['ちましょう$', 'つ'], \['てば$', 'つ'], \['とう$', 'つ'], \['って$', 'つ'], \['った$', 'つ'], \['たれ$', 'つ'], \['たせ$', 'つ'], \['て$', 'つ'], \['なない$', 'ぬ'], \['ななか$', 'ぬ'], \['にます$', 'ぬ'], \['にまし$', 'ぬ'], \['にませんでした$', 'ぬ'], \['にません$', 'ぬ'], \['にましょう$', 'に'], \['ねば$', 'ぬ'], \['のう$', 'ぬ'], \['んで$', 'ぬ'], \['んだ$', 'ぬ'], \['なれ$', 'ぬ'], \['なせ$', 'ぬ'], \['ね$', 'ぬ'], \['まない$', 'む'], \['まなか$', 'む'], \['みます$', 'む'], \['みまし$', 'む'], \['みませんでした$', 'む'], \['みません$', 'む'], \['みましょう$', 'む'], \['めば$', 'む'], \['もう$', 'む'], \['んで$', 'む'], \['んだ$', 'む'], \['まれ$', 'む'], \['ませ$', 'む'], \['め$', 'む'], \['らない$', 'る'], \['らなか$', 'る'], \['ります$', 'る'], \['りまし$', 'る'], \['りませんでした$', 'る'], \['りません$', 'る'], \['りましょう$', 'る'], \['れば$', 'る'], \['ろう$', 'る'], \['って$', 'る'], \['った$', 'る'], \['られ$', 'る'], \['らせ$', 'る'], \['わない$', 'う'], \['わなか$', 'う'], \['います$', 'う'], \['いまし$', 'う'], \['いませんでした$', 'う'], \['いません$', 'う'], \['いましょう$', 'う'], \['えば$', 'う'], \['おう$', 'う'], \['って$', 'う'], \['った$', 'う'], \['われ$', 'う'], \['わせ$', 'う'], \['え$', 'う'], \['がない$', 'ぐ'], \['がなか$', 'ぐ'], \['ぎます$', 'ぐ'], \['ぎまし$', 'ぐ'], \['ぎませんでした$', 'ぐ'], \['ぎません$', 'ぐ'], \['ぎましょう$', 'ぐ'], \['げば$', 'ぐ'], \['ごう$', 'ぐ'], \['いで$', 'ぐ'], \['いだ$', 'ぐ'], \['がれ$', 'ぐ'], \['がせ$', 'ぐ'], \['げ$', 'ぐ'], \['ばない$', 'ぶ'], \['ばなか$', 'ぶ'], \['びます$', 'ぶ'], \['びました$', 'ぶ'], \['びませんでした$', 'ぶ'], \['びません$', 'ぶ'], \['びましょう$', 'ぶ'], \['べば$', 'ぶ'], \['ぼう$', 'ぶ'], \['んで$', 'ぶ'], \['んだ$', 'ぶ'], \['ばれ$', 'ぶ'], \['ばせ$', 'ぶ'], \['べ$', 'ぶ'], \['ない$', 'る'], \['なか$', 'る'], \['ます$', 'る'], \['ました$', 'る'], \['ませんでした$', 'る'], \['ません$', 'る'], \['ましょう$', 'る'], \['れば$', 'る'], \['よう$', 'る'], \['て$', 'る'], \['た$', 'る'], \['られ$', 'る'], \['させ$', 'る'], \['ろ$', 'る'], \['らま$', 'る'], \['くなか$', 'い'], \['くな$', 'い'], \['かった$', 'い'], \['く$', 'く'], \['く$', 'い'], \['しか$', 'しい'], \['けます$', 'ける'], \['けました$', 'ける'], \['けませんでし$', 'ける'], \['けません$', 'ける'], \['けましょう$', 'ける'], \['けない$', 'ける'], \['けなか$', 'ける'], \['けれ$', 'ける'], \['けよ$', 'ける'], \['けて$', 'ける'], \['けた$', 'ける'], \['けら$', 'ける'], \['けさ$', 'ける'], \['けろ$', 'ける'], \['げます$', 'げる'], \['げました$', 'げる'], \['げませんでし$', 'げる'], \['げません$', 'げる'], \['げましょう$', 'げる'], \['げない$', 'げる'], \['げなか$', 'げる'], \['げて$', 'げる'], \['げれ$', 'げる'], \['げよ$', 'げる'], \['げた$', 'げる'], \['げら$', 'げる'], \['げさ$', 'げる'], \['げろ$', 'げる'], \['べます$', 'べる'], \['べました$', 'べる'], \['べませんでし$', 'べる'], \['べません$', 'べる'], \['べましょう$', 'べる'], \['べない$', 'べる'], \['べなか$', 'べる'], \['べれ$', 'べる'], \['べよ$', 'べる'], \['べて$', 'べる'], \['べた$', 'べる'], \['べら$', 'べる'], \['べさ$', 'べる'], \['べろ$', 'べる'], \['めます$', 'める'], \['めました$', 'める'], \['めませんでし$', 'める'], \['めません$', 'める'], \['めましょう$', 'める'], \['めない$', 'める'], \['めなか$', 'める'], \['めれ$', 'める'], \['めよ$', 'める'], \['めて$', 'める'], \['めた$', 'める'], \['めら$', 'める'], \['めさ$', 'める'], \['めろ$', 'める'], \['えます$', 'える'], \['えました$', 'える'], \['えませんでし$', 'える'], \['えません$', 'える'], \['えましょう$', 'える'], \['えない$', 'える'], \['えなか$', 'える'], \['えれ$', 'える'], \['えよ$', 'える'], \['えて$', 'える'], \['えた$', 'える'], \['えら$', 'える'], \['えさ$', 'える'], \['えろ$', 'える'], \['れます$', 'れる'], \['れました$', 'れる'], \['れませんでし$', 'れる'], \['れません$', 'れる'], \['れましょう$', 'れる'], \['れない$', 'れる'], \['れなか$', 'れる'], \['れれ$', 'れる'], \['れよ$', 'れる'], \['れて$', 'れる'], \['れた$', 'れる'], \['れら$', 'れる'], \['れさ$', 'れる'], \['れろ$', 'れる'], \['れ$', 'る'], \['ねます$', 'ねる'], \['ねました$', 'ねる'], \['ねませんでし$', 'ねる'], \['ねません$', 'ねる'], \['ねましょう$', 'ねる'], \['ねない$', 'ねる'], \['ねなか$', 'ねる'], \['ねれ$', 'ねる'], \['ねよ$', 'ねる'], \['ねて$', 'ねる'], \['ねた$', 'ねる'], \['ねら$', 'ねる'], \['ねさ$', 'ねる'], \['ねろ$', 'ねる'], \['せます$', 'せる'], \['せました$', 'せる'], \['せませんでし$', 'せる'], \['せません$', 'せる'], \['せましょう$', 'せる'], \['せない$', 'せる'], \['せなか$', 'せる'], \['せれ$', 'せる'], \['せよ$', 'せる'], \['せて$', 'せる'], \['せた$', 'せる'], \['せら$', 'せる'], \['せさ$', 'せる'], \['せろ$', 'せる'], \['ぜます$', 'ぜる'], \['ぜました$', 'ぜる'], \['ぜませんでし$', 'ぜる'], \['ぜません$', 'ぜる'], \['ぜましょう$', 'ぜる'], \['ぜない$', 'ぜる'], \['ぜなか$', 'ぜる'], \['ぜれ$', 'ぜる'], \['ぜよ$', 'ぜる'], \['ぜて$', 'ぜる'], \['ぜた$', 'ぜる'], \['ぜら$', 'ぜる'], \['ぜさ$', 'ぜる'], \['ぜろ$', 'ぜる'], \['てます$', 'てる'], \['てました$', 'てる'], \['てませんでし$', 'てる'], \['てません$', 'てる'], \['てましょう$', 'てる'], \['てない$', 'てる'], \['てなか$', 'てる'], \['てれ$', 'てる'], \['てよ$', 'てる'], \['てて$', 'てる'], \['てた$', 'てる'], \['てら$', 'てる'], \['てさ$', 'てる'], \['てろ$', 'てる'], \['でます$', 'でる'], \['でました$', 'でる'], \['でませんでし$', 'でる'], \['でません$', 'でる'], \['でましょう$', 'でる'], \['でない$', 'でる'], \['でなか$', 'でる'], \['でれ$', 'でる'], \['でよ$', 'でる'], \['でて$', 'でる'], \['でた$', 'でる'], \['でら$', 'でる'], \['でさ$', 'でる'], \['でろ$', 'でる'], \] eblook.vim-1.4.0/autoload/eblook/supsubmap_utf8.vim0000644000175000017500000000060213752745333021712 0ustar yabukiyabukiscriptencoding utf-8 let g:eblook#supsubmap_utf8#supmap = { \'1': '¹', \'2': '²', \'3': '³', \'4': '⁴', \'5': '⁵', \'6': '⁶', \'7': '⁷', \'8': '⁸', \'9': '⁹', \'1': '¹', \'2': '²', \'3': '³', \'4': '⁴', \'5': '⁵', \'6': '⁶', \'7': '⁷', \'8': '⁸', \'9': '⁹', \} let g:eblook#supsubmap_utf8#submap = {} eblook.vim-1.4.0/doc/0000755000175000017500000000000013752745333013674 5ustar yabukiyabukieblook.vim-1.4.0/doc/eblook.jax0000644000175000017500000007467513752745333015676 0ustar yabukiyabuki*eblook.jax* EPWING辞書検索プラグイン eblook.vim説明書 EPWING辞書検索プラグイン *eblook* 1. 概要 |eblook-overview| 2. 準備 |eblook-setup| 3. チュートリアル |eblook-tutorial| 4. 操作法 |eblook-usage| 5. オプション |eblook-option| 6. コマンド |eblook-command| 7. 問題点 |eblook-problem| {Vi does not have any of these features} ============================================================================== 1. 概要 *eblook-overview* eblook.vimは、`eblook'プログラムを使って、 EPWING/電子ブック辞書の検索を行うプラグインです。 このプラグインを使うには、`eblook'プログラム http://ikazuhiro.s206.xrea.com/staticpages/index.php/eblook とEPWING/電子ブック辞書が必要です。 ============================================================================== 2. 準備 *eblook-setup* |eblook-setup-dict| 準備: 検索対象辞書の指定 |eblook-setup-gaiji| 準備: 外字置換設定 準備: 検索対象辞書の指定 *eblook-setup-dict* ------------------------ eblook.vimの使用前に、検索を行う辞書をvimrcで設定しておく必要があります。 詳細は|eblook-option|を参照してください。 設定する値を調べる方法は以下のようになります。 (a) eblookプログラムを起動します: % eblook eblook> (b) catalogsファイルのあるディレクトリを指定してbookコマンドを実行します: eblook> book /usr/local/epwing/iwanami/koujien パス中にスペースが含まれる場合は、パスを""でくくってください: eblook> book "C:/Program Files/epwing/iwanami/koujien" (c) listコマンドを実行します: eblook> list 1. kojien 広辞苑第五版 2. furoku 付属資料 (d) vimrcの設定 以下のように各辞書用の|Dictionary|データを記述します。 (b)でbookコマンドの引数に指定したディレクトリを'book'キーに設定します。 (c)のlistコマンド実行時に表示されたsubbookを'name'キーに設定します。 (c)のlistコマンド実行時に表示された辞書タイトルを'title'キーに設定します。 \{ \'book': '/usr/local/epwing/iwanami/koujien', \'name': 'kojien', \'title': '広辞苑第五版', \}, (e) (b)-(d)を、使いたい辞書について繰り返して、 各辞書用の|Dictionary|データを記述し、 各Dictionaryデータを要素として持つ eblook_dictlist1の|List|データを初期化します。 let eblook_dictlist1 = [ \{ \'book': '/usr/local/epwing/iwanami/koujien', \'name': 'kojien', \'title': '広辞苑第五版', \}, \{ \'book': '/usr/local/epwing/kenkyush/chujisnd', \'name': 'chujiten', \'title': '研究社 新英和・和英中辞典', \}, \{ \'book': '/usr/local/epwing/PLUS', \'name': 'plus', \'title': '研究社リーダーズ+プラスV2', \}, \] 準備: 外字置換設定 *eblook-setup-gaiji* ------------------ 発音記号などの外字をUnicode文字列へ置換するには、以下の設定をしてください。 EBWin用の外字定義ファイルを使用します。 http://ebstudio.info/manual/EBPocket/0_0_4_4.html なお、eblook-vimは、外字(eblookコマンドののような出力)に 対する置換文字が見つからない場合、外字を _ に置換して表示します。 (1)EBWinのアプリケーションディレクトリもしくは以下から外字定義ファイルを入手。 http://ebstudio.info/home/EBPocket.html#download_gaiji (2)bookで指定したディレクトリに、{nameの大文字}.mapファイルをコピー。 例:/usr/local/epwing/iwanami/koujien/に、KOJIEN.mapをコピー。 なお、GENIUS_DAIEIWA.map、GENIUS4.map、KANJIGEN_EPW.mapはコピー後、 ファイル名をGENIUS.map、GENIUS.map、KANJIGEN.mapに変更する必要があります。 (3)可能であれば、Vimの|'encoding'|をutf-8にする。 なお、Vimの&encodingがutf-8以外の場合は、Unicodeへの置換ではなく、 mapファイルで指定される置換文字列への置換を行います。 Windows環境でVimをUTF-8化するには以下を参照してください。 http://sites.google.com/site/fudist/Home/vim-nihongo-ban ただし、eblookコマンドとして、以下で配布されているWin32用バイナリ eblook-1.6.1+media-20110801-ebu-4.4.3-20110801.exe http://ikazuhiro.s206.xrea.com/staticpages/index.php/eblook を使う場合、|'eblookenc'|オプションをcp932に設定してください。 例: let eblookenc='cp932' (eblookコマンドの入出力エンコーディングとして-e utf8を指定しても効かない ようなので、eblookコマンドとのやりとりをcp932で行うように設定) euc-jp環境で置換後の丸数字等が?@や?Aのように文字化けする場合は、 mapファイルをnkf -eでeuc-jpに変換して、{nameの大文字}_{&termencodingの値}.map というファイル名で上記(2)のディレクトリに置いてください。 例: nkf -e KOJIEN.map >KOJIEN_euc-jp.map nkf -e KANJIGEN.map >KANJIGEN_euc-jp.map nkf -e READERS2.map >READERS2_euc-jp.map (UNIX上のvimやiconvではエンコーディング変換に失敗するようなので、 nkfやWindows上のvimで変換してください) ({&termencodingの値}付きの名前のファイルがあれば、{&termencodingの値}無しの.map ファイルよりも優先して読み込みます。 それぞれを読む際のfileencodingは、&termencodingとcp932です) ({&termencodingの値}は、&termencodingが空の場合は&encodingの値を使用します) (vimproc用に&enc=utf-8,&tenc=euc-jpにしている環境の場合、丸数字が??に化けます。 &tenc=euc-jisx0213にすれば丸数字は表示可能ですが、U+2015(HORIZONTAL BAR)が ??に化けます。&tenc=euc-jp-msにすれば両方表示可能) EBライブラリ用のAppendixでの外字置換を無効にして、mapファイルによる 外字置換を行いたい場合は、Appendixを指定しないようにしてください。 ただし、Appendixによってstop codeを設定しないと内容が正しく表示されない辞書 の場合(例:「新編英和活用大事典」)は、外字置換設定を削除したAppendixを 指定する必要があります。(外字置換設定を削除するには、Appendix内の .appファイルのbegin narrow...endとbegin wide...endをコメントアウト後に ebappendixコマンドを使ってAppendixを作り直す) (なお、「ジーニアス英和大辞典」もAppendixが必須ですが、genius2-1.1には 外字置換設定は含まれていません。) 外字置換設定を削除したAppendix(colloc-2.0とplus-2.0)を以下に置いてあります。 http://www1.interq.or.jp/~deton/eblook-vim/#appendix ============================================================================== 3. チュートリアル *eblook-tutorial* |eblook-tutor-search| 検索 |eblook-tutor-entry| 見出し一覧 |eblook-tutor-content| 内容表示 |eblook-tutor-quit| 終了 検索 *eblook-tutor-search* ---- を押すと、検索語の入力プロンプト(1EblookSearch: )が コマンド行に表示されます。 (は|mapleader|で設定されたキーです。 eblook.vimではデフォルトでCTRL-Kです。つまり、はCTRL-K CTRL-Y) 検索語を入力すると検索が行われます。 検索結果はentryウィンドウとcontentウィンドウに表示されます。 テスト【test】 (1)試験。検査。特に、学力試験。「心理―」「読解力を―する」 (2)一般に、考えたことや試作品などを実際に試してみること。 「―‐ドライバー」 <1|⇒―‐ケース【test case】|> <2|⇒―‐パイロット【test pilot】|> <3|⇒―‐パターン【test pattern】|> <4|⇒―‐ピース【test-piece】|> ~ ==1Eblook content {テスト【test】}======================================= 広辞苑第五版 テスト【test】 研究社 新英和・和英中辞典 テスト 研究社リーダーズ+プラスV2  テスト 研究社リーダーズ+プラスV2  テスト ==1Eblook entry {test} [5]=============================================== 見出し一覧 *eblook-tutor-entry* ---------- 検索で見つかった見出しの一覧がentryウィンドウに表示されます。 最初の見出しの内容がcontentウィンドウに表示されます。 entryウィンドウでj,kキーでカーソルを移動して、を押すと その行の見出しの内容をcontentウィンドウに表示します。 ,でcontentウィンドウのPageDown,PageUpができます。 内容表示 *eblook-tutor-content* -------- 内容中に(nは1から始まる数字。reference番号として[count]で指定可能) がある場合は、contentウィンドウののある行でを押すと、 referenceの先の内容が表示されます。 このとき、entryウィンドウには、元の内容内のreference一覧が表示されます。 ('eblook_update_entrywin_by_contentwin_link'が1の場合) 元の内容に戻るには、を押して検索履歴を戻ります。 終了 *eblook-tutor-quit* ---- 検索結果を表示しているentryウィンドウとcontentウィンドウの両方を閉じるには、 "q"を押します。 ============================================================================== 4. 操作法 *eblook-usage* 検索を行うには、次のキーを入力するか、|:EblookSearch|コマンドを実行します。 検索単語を入力して検索を行う。 検索対象の辞書グループ番号を[count]で指定可能。 y カーソル位置にある単語を検索する。 Visual modeの場合は、選択した文字列を検索する。 検索対象の辞書グループ番号を[count]で指定可能。 検索結果は、{n}Eblook entryと{n}Eblook contentというウィンドウに 表示されます。{n}は辞書グループ番号に対応する数字です。 entryウィンドウには見出し一覧が表示されます。 contentウィンドウには見出しに対応する内容が表示されます。 ,で検索履歴をたどることができます。 reference先を表示した後で元の検索結果に戻りたい場合などに使ってください。 検索履歴は過去のentryバッファを表示します。 entryウィンドウでの操作 *eblook-usage-entry* ----------------------- カーソル行のentryに対応するcontentを表示する J カーソルを下の行に移動してcontentを表示する K カーソルを上の行に移動してcontentを表示する contentウィンドウでPageDownを行う contentウィンドウでPageUpを行う q entryウィンドウとcontentウィンドウを閉じる s 新しい単語を入力して検索する(と同じ) 検索対象の辞書グループ番号を[count]で指定可能 S 直前の検索語を[count]で指定する辞書グループで再検索する p contentウィンドウに移動する R reference一覧を表示する [count]でcontentウィンドウ内のreference番号を指定可能 検索履歴中の一つ前のバッファを表示する 検索履歴中の一つ次のバッファを表示する o contentウィンドウを最大化する r contentウィンドウ最大化前のウィンドウ高さに復元する O contentウィンドウ内の長い行を|gq|で整形する contentウィンドウでの操作 *eblook-usage-content* ------------------------- カーソル位置もしくは[count]で指定するreferenceを表示する PageDownを行う PageUpを行う 次のreferenceにカーソルを移動する 前のreferenceにカーソルを移動する q entryウィンドウとcontentウィンドウを閉じる s 新しい単語を入力して検索する(と同じ) 検索対象の辞書グループ番号を[count]で指定可能 S 直前の検索語を[count]で指定する辞書グループで再検索する p entryウィンドウに移動する R reference一覧を表示する [count]で対象のreference番号を指定可能 検索履歴中の一つ前のバッファを表示する 検索履歴中の一つ次のバッファを表示する o contentウィンドウを最大化する r contentウィンドウ最大化前のウィンドウ高さに復元する O contentウィンドウ内の長い行を|gq|で整形する x カーソル位置か[count]で指定する画像・音声・動画を表示・再生 ============================================================================== 5. オプション *eblook-option* *'eblook_dictlist{n}'* EPWING/電子ブック辞書は、各辞書ごとに次の11個のキーを持つ|Dictionary|データ を要素として持つ|List|データとして設定します。bookとnameは必須です。 let eblook_dictlist1 = [ \{ \'book': '/usr/local/epwing/iwanami/koujien', \'name': 'kojien', \'title': '広辞苑第五版', \'skip': 0, \}, \] 'book' 辞書ディレクトリ。(eblookのbookコマンドの引数) 'name' 辞書名。(eblookのselectコマンドの引数) 'title' 辞書識別子 'appendix' Appendix 'skip' この辞書を検索対象にするかどうか 'autoformat' content表示時に長い行を|gq|で整形するかどうか 'viewer_wav' この辞書用の音声再生用の外部ビューアコマンド 'viewer_jpeg' この辞書用のjpeg画像表示用の外部ビューアコマンド 'viewer_bmp' この辞書用のbmp画像表示用の外部ビューアコマンド 'viewer_pbm' この辞書用のpbm画像表示用の外部ビューアコマンド 'viewer_mpg' この辞書用の動画再生用の外部ビューアコマンド 'book' *'eblook_dictlist{n}[m].book'* 辞書のあるディレクトリ(catalogsファイルのあるディレクトリ)を指定します。 eblookプログラムの`book'コマンドに渡すパラメータです。 パスの途中にスペースが含まれる場合は、パス全体を""でくくってください。 例: 'book': '"C:/Program Files/epwing/iwanami/koujien"', 'name' *'eblook_dictlist{n}[m].name'* 辞書名を指定します。eblookプログラムの`select'コマンドに渡すパラメータです。 eblookプログラムのlistコマンドで調べてください。 例: 'name': 'kojien', 'title' *'eblook_dictlist{n}[m].title'* 辞書の識別子を指定します。デフォルトでは、 辞書番号とnameを組み合わせたものが設定されます。 entryウィンドウ内で辞書を識別するために使われます。 辞書を識別するのに使うだけなので、 eblookプログラムのlistコマンドで表示される文字列など、 他の辞書とぶつからない文字列を適当に指定します。 例: 'title': '広辞苑第五版', (vimproc用に&enc=utf-8,&tenc=euc-jpにすると、entryウィンドウの辞書titleが 文字化けする場合、eblook_dictlistを設定しているvimrcで、scriptencodingが set encoding=utf-8の後に来ていることを確認してください) 'appendix' *'eblook_dictlist{n}[m].appendix'* Appendixを使う場合は、Appendixディレクトリを指定します。 パスの途中にスペースが含まれる場合は、パス全体を""でくくってください。 例: 'appendix': '"C:/Program Files/epwing/appendix/plus-2.0"', 'skip' *'eblook_dictlist{n}[m].skip'* 0でない値を設定すると、この辞書は検索しません。 skipする設定にしている辞書は、:EblookNotSkipDictコマンドを使って 検索対象にすることができます。 例: 'skip': 1, 'autoformat' *'eblook_dictlist{n}[m].autoformat'* content表示時に長い行を|gq|で整形するかどうか。 全辞書を対象とするデフォルト値|'eblook_autoformat_default'|に対し、 個々の辞書の設定値を変えたい場合用。 'viewer_wav' *'eblook_dictlist{n}[m].viewer_wav'* この辞書用の音声再生用の外部ビューアコマンド。 全辞書を対象とする値|'eblook_viewers'|に対し、 個々の辞書の設定値を変えたい場合用。 音声データが(wavヘッダを付けた)mp3で収録されている場合に、ファイル名を wavからmp3に変えて再生するスクリプトを設定するため。 例: let eblook_dictlist2 = [ \{ 'title': 'ロングマン現代英英辞典 5訂版', \'book': '/home/deton/lib/epwing/LDOCE5', \'name': 'ldoce5', \'viewer_wav': 'sh ~/bin/wav_mp3.sh %s &', \}, 例(wav_mp3.sh): #!/bin/sh # rename .wav to .mp3 and play file=$1 filemp3=$(echo "$file" | sed -e s/\.wav/.mp3/) mv "$file" "$filemp3" afplay "$filemp3" 'viewer_jpeg' *'eblook_dictlist{n}[m].viewer_jpeg'* この辞書用のjpeg画像表示用の外部ビューアコマンド 全辞書を対象とする値|'eblook_viewers'|に対し、 個々の辞書の設定値を変えたい場合用。 'viewer_bmp' *'eblook_dictlist{n}[m].viewer_bmp'* この辞書用のbmp画像表示用の外部ビューアコマンド 全辞書を対象とする値|'eblook_viewers'|に対し、 個々の辞書の設定値を変えたい場合用。 'viewer_pbm' *'eblook_dictlist{n}[m].viewer_pbm'* この辞書用のpbm画像表示用の外部ビューアコマンド 全辞書を対象とする値|'eblook_viewers'|に対し、 個々の辞書の設定値を変えたい場合用。 'viewer_mpg' *'eblook_dictlist{n}[m].viewer_mpg'* この辞書用の動画再生用の外部ビューアコマンド 全辞書を対象とする値|'eblook_viewers'|に対し、 個々の辞書の設定値を変えたい場合用。 'eblook_group' *'eblook_group'* |[count]|が指定されていない時に検索対象にする辞書グループ番号。省略値: 1 'eblook_stemming' *'eblook_stemming'* 指定文字列で何も見つからなかった時に、活用語尾などを取り除いた 文字列を使って検索し直すかどうか。省略値: 0 語尾補正をして検索し直す場合は以下のように設定してください。 let eblook_stemming = 1 https://github.com/msbmsb/porter-stem.vim がインストール済であれば、 porter-stem.vimも使用します。 'eblook_decorate' *'eblook_decorate'* eblook 1.6.1+mediaのdecorate-modeを有効にすると出力される、 content中のインデント指定に基づいて、インデントを行うかどうか。 省略値: 1(eblook 1.6.1+mediaの場合), 0(それ以外の場合) 'eblook_decorate_syntax' *'eblook_decorate_syntax'* decorate-mode有効時に、content中の指定に基づいて、 イタリック、ボールド表示を行うかどうか。 省略値: 0(syntax offの場合), 1(それ以外の場合) 'eblook_decorate_supsub' *'eblook_decorate_supsub'* decorate-mode有効時に、上付き・下付き文字列を、 それぞれ^{上付き}・_{下付き}のように表示するかどうか。省略値: 0 'eblook_decorate_indmin' *'eblook_decorate_indmin'* この値を越えたインデント量がcontent中で指定された場合に、 越えた文字数分のインデントを行う。省略値: 1 'eblook_entrywin_height' *'eblook_entrywin_height'* entryウィンドウの行数(目安)。省略値: 4 'eblook_contentwin_height' *'eblook_contentwin_height'* contentウィンドウの行数(目安)。|CTRL-W__|を指定された行数で実行。 0を指定した場合は、可能な限り高くする。 省略値: -1(ウィンドウ行数の設定はしない) 'eblook_history_max' *'eblook_history_max'* 保持しておく過去の検索履歴バッファ数の上限。省略値: 10 'eblook_update_entrywin_by_contentwin_link' *'eblook_update_entrywin_by_contentwin_link'* contentウインドウ内でリンクをたどった際に、entryウィンドウ内容を 更新するかどうか。省略値: 1 なお、0に設定した場合、,による検索履歴の表示において、 entryバッファとcontentバッファの連動表示もされなくなります。 (それぞれのバッファで独立して検索履歴を表示) 'eblook_visited_max' *'eblook_visited_max'* 表示変更用に保持しておく訪問済リンク数の上限。省略値: 100 'eblook_autoformat_default' *'eblook_autoformat_default'* contentウィンドウ内の長い行を|gq|で整形するかどうかのデフォルト値。 全辞書を常に整形したい場合向け(全辞書について'autoformat'プロパティ を指定するのは面倒なので)。省略値: 0 全辞書を常に整形する場合は以下のように設定してください。 let eblook_autoformat_default = 1 'eblook_show_refindex' *'eblook_show_refindex'* contentウィンドウ内のreference番号を表示するかどうか。省略値: 0 デフォルトでは、conceal syntaxを使って非表示にします。 Rキーやcontentウィンドウ内でのキーにおいて、 [count]で対象reference番号を指定したい場合は、 以下のように設定してreference番号を表示するようにしてください。 let eblook_show_refindex = 1 'eblook_statusline_entry' *'eblook_statusline_entry'* entryウィンドウ用の|statusline|。 省略値: %{b:group}Eblook entry {%{b:word}}%< [%L] |'ruler'|を追加したい場合は以下のように設定してください (参考:|statusline|のヘルプのExamples)。 let eblook_statusline_entry = '%{b:group}Eblook entry {%{b:word}}%< [%L]%=%-14.(%l,%c%V%) %P' 'eblook_statusline_content' *'eblook_statusline_content'* contentウィンドウ用の|statusline|。 省略値: %{b:group}Eblook content {%{b:caption}} %{b:dtitle}%< |'ruler'|を追加したい場合は以下のように設定してください。 let eblook_statusline_content = '%{b:group}Eblook content {%{b:caption}} %{b:dtitle}%<%=%-14.(%l,%c%V%) %P' 'eblook_viewers' *'eblook_viewers'* 画像や音声再生用の外部ビューアコマンド。 contentウィンドウで、画像や音声へのリンクの上でxキーを押すと、 画像や音声を一時ファイルに保存した後、この変数で指定された 外部ビューアコマンドを実行(|:!|)します。 外部ビューアコマンド文字列に%sが含まれる場合は、 |shellescape()|した一時ファイル名に置換します。 含まれない場合は、外部ビューアコマンド文字列の後に スペースとshellescape()した一時ファイル名を追加します。 省略値(Windowsの場合): { \'jpeg': ' start ""', \'bmp': ' start ""', \'pbm': ' start ""', \'wav': ' start ""', \'mpg': ' start ""', \} 省略値(Windows以外の場合): { \'jpeg': 'xdg-open %s &', \'bmp': 'xdg-open %s &', \'pbm': 'xdg-open %s &', \'wav': 'xdg-open %s &', \'mpg': 'xdg-open %s &', \} 設定例1: let eblook_viewers = { \'jpeg': ' start ""', \'bmp': 'start mspaint', \'pbm': 'start "C:\Program Files\IrfanView\i_view32.exe"', \'wav': 'start "C:\Program Files\foobar2000\foobar2000.exe"', \'mpg': 'start "C:\Program Files\Windows Media Player\wmplayer.exe"', \} 設定例2: let eblook_viewers = { \'jpeg': 'xli -quiet %s &', \'bmp': 'xli -quiet %s &', \'pbm': 'xli -quiet %s &', \'wav': 'aplay -q %s &', \'mpg': 'mplayer -really-quiet %s >/dev/null 2>&1 &', \} 'eblookprg' *'eblookprg'* スクリプトから呼び出すeblookプログラムの名前。省略値: "eblook" 'eblookenc' *'eblookenc'* eblookプログラムの出力を読み込むときのエンコーディング。 設定可能な値は|'encoding'|参照。省略値: &encoding 'EblookInput' *'EblookInput'* 検索単語を入力して検索を行うためのキー。省略値: を指定する場合の例: map EblookInput 'EblookSearch' *'EblookSearch'* カーソル位置にある単語(nmap)/選択した文字列(vmap)を検索するためのキー。 省略値: y yを指定する場合の例: map y EblookSearch 'eblook_no_default_key_mappings' *'eblook_no_default_key_mappings'* デフォルトのキーマッピングyとを登録したくない場合 (自分で他のキーにmapしたい場合)は1に設定してください。 let eblook_no_default_key_mappings = 1 'mapleader' キーマッピングのプレフィックス。|mapleader|を参照。省略値: CTRL-K CTRL-Kを指定する場合の例: let mapleader = "\" 'plugin_eblook_disable' *'plugin_eblook_disable'* このプラグインを読み込みたくない場合に次のように設定します。 let plugin_eblook_disable = 1 設定例 ------ 辞書の設定例です。この例では、4つの辞書グループを設定しています。 let eblook_dictlist1 = [ \{ 'book': '/usr/local/epwing/iwanami/koujien', \'name': 'kojien', \'title': '広辞苑第五版', \}, \{ 'book': '/usr/local/epwing/kenkyush/chujisnd', \'name': 'chujiten', \'title': '研究社 新英和・和英中辞典', \}, \] let eblook_dictlist2 = [ \{ 'book': '/usr/local/epwing/tougou99', \'name': 'kanjigen', \'title': '漢字源', \}, \{ 'book': '/usr/local/epwing/tougou99', \'name': 'gn99ep01', \'title': '現代用語の基礎知識1999年版', \'autoformat': 1, \}, \{ 'book': '/usr/local/epwing/tougou99', \'name': 'gn99ep02', \'title': '最新日本語活用事典', \}, \] let eblook_dictlist3 = [ \{ 'book': '/usr/local/epwing/kenkyush/chujisnd', \'name': 'chujiten', \'title': '研究社 新英和・和英中辞典', \}, \{ 'book': '/usr/local/epwing/PLUS', \'appendix': '/usr/local/epwing/appendix/plus-2.0', \'name': 'plus', \'title': '研究社リーダーズ+プラスV2', \}, \] let eblook_dictlist9 = [ \{ 'title': '理化学辞典第5版', \'book': '/usr/local/epwing/RIKAGAKU', \'name': 'rikagaku', \'autoformat': 1, }, \] more point ---------- contentウィンドウやentryウィンドウの内容がのように終わっていて、 全ての内容が表示されていない場合、eblookのmax-hitsの値(デフォルト256)を 増やしてください(eblookのmax-textの値(デフォルト8192)も参考)。 ~/.eblookrcに以下のように記述します(0にすると無制限)。 set max-hits 512 set max-text 0 ============================================================================== 6. コマンド *eblook-command* :[N]EblookSearch {word} *:EblookSearch* 辞書グループ番号N内の辞書の検索を行います。 検索する文字列を引数に指定します。 :[N]EblookListGroup [N] *:EblookListGroup* 辞書グループの一覧を表示します。 辞書グループ番号は連続していない可能性があるため、 'eblook_dictlist{m}'が存在するかどうか、mが1からNの範囲でチェックします。 デフォルトでは99までチェックします。 :[N]EblookGroup [N] *:EblookGroup* 明示的に[count]や[N]で辞書グループ番号が指定されていない時に使う デフォルトの辞書グループ番号'g:eblook_group'を設定します。 辞書グループ番号無しで実行した場合は、現在の値を表示します。 :[N]EblookListDict [N] *:EblookListDict* 辞書グループ番号Nに含まれる辞書の一覧を表示します。 'eblook_dictlistN'に設定されている内容を表示します。 :[N]EblookSkipDict {m} *:EblookSkipDict* 引数で指定した辞書番号の辞書を一時的に検索対象から外します。 'eblook_dictlistN[m].skip'を1に設定するのと同じです。 複数の辞書番号を引数に指定する場合は、間にスペースを入れてください。 対象の辞書グループ番号をNで指定可能(|:command-range|)。 :[N]EblookNotSkipDict {m} *:EblookNotSkipDict* 引数で指定した辞書番号の辞書を一時的に検索対象に入れます。 'eblook_dictlistN[m].skip'を0に設定するのと同じです。 複数の辞書番号を引数に指定する場合は、間にスペースを入れてください。 対象の辞書グループ番号をNで指定可能。 :[N]EblookPasteDictList [N] *:EblookPasteDictList* 辞書の設定内容を、~/.vimrcに記述可能な形式でペーストします。 eblook-vim-1.0.5からeblook-vim-1.1.0で辞書の設定形式が変更されたので、 旧形式の設定を読み込んだ後でこのコマンドを実行して、 新形式へ変換するために使います。 対象の辞書グループ番号をNで指定可能。 ============================================================================== 7. 問題点 *eblook-problem* 発音記号をUnicodeに置換して表示した際、アクセント位置等がずれることがあります。 :se ambiwidth=single すると少しはましになることもあります。 ============================================================================== vim:set ft=help: eblook.vim-1.4.0/plugin/0000755000175000017500000000000013752745333014425 5ustar yabukiyabukieblook.vim-1.4.0/plugin/eblook.vim0000644000175000017500000000424213752745333016417 0ustar yabukiyabuki" vi:set ts=8 sts=2 sw=2 tw=0: " " plugin/eblook.vim - lookup EPWING dictionary using `eblook' command. " " Maintainer: KIHARA Hideto " Last Change: 2014-01-26 scriptencoding utf-8 if exists('plugin_eblook_disable') || exists('g:loaded_eblook') finish endif let g:loaded_eblook = 1 if !exists(":EblookSearch") command -range=0 -nargs=1 EblookSearch call eblook#Search(, , 0) endif if !exists(":EblookListGroup") command -count=0 EblookListGroup call eblook#ListGroup() endif if !exists(":EblookGroup") command -count=0 EblookGroup call eblook#SetDefaultGroup() endif if !exists(":EblookListDict") command -count=0 EblookListDict call eblook#ListDict() endif if !exists(":EblookSkipDict") command -range=0 -nargs=+ EblookSkipDict call eblook#SetDictSkip(, 1, ) endif if !exists(":EblookNotSkipDict") command -range=0 -nargs=+ EblookNotSkipDict call eblook#SetDictSkip(, 0, ) endif if !exists(":EblookPasteDictList") command -count=0 EblookPasteDictList call eblook#PasteDictList() endif " (EblookSearchとEblookSearchInputにすると、 " EblookSearchの方が|'timeout'|待ちになる) noremap