ラベル EPWING の投稿を表示しています。 すべての投稿を表示
ラベル EPWING の投稿を表示しています。 すべての投稿を表示

2024年10月26日土曜日

PPvでEPWING形式の辞書を引く(PPvを分割)

PPvを分割して別のPPvを開いたり閉じたりする動作が気に入ったので、PPv+EBWIN4もこの形式にしてみる。

必要なもの

EBWIN4には、EPWING形式の辞書をあらかじめ登録しておこう。

準備

以下の二つのファイルをScriptフォルダに保存する。dic.luaのEBWIN4のパスは環境に応じて読み替えてください。

以下を編集して取込。

_Command    = {    ; ユーザコマンド・関数
splitppv    = *string i,height0=%*windowrect(,h)
    *string i,height1=%*calc("%*arg(2)*%*windowrect(,h)/100")
    *string i,height2=%*calc("%*windowrect(,h)-%si"height1"")
    *windowsize %N,%*windowrect(,w),%si"height1"
    *ppv -bootid:X -k %%J"%*arg(1)" %%: *fitwindow %N,%%N,4 %%: *windowsize %%N,%*windowrect(,w),%si"height2" %%: *selectppx %n
ebwin2ppv = *string i,ratio=%*arg(1)
    *string i,tempfile=%*temp(name,f)
    %Oi nyagos -f %0Script\dic.lua %*script(%0Script\selectword.js) %si"tempfile"
    *ifmatch 0,0%NVX %: *splitppv %si"tempfile",%si"ratio" %: *mapkey use,K_splitppv %: *stop
    *execute VX,%%J%si"tempfile"
}

K_splitppv    = {
Q    ,*ifmatch !0,0%NVX %: %Oi *windowsize %N,%*windowrect(,w),%si"height0"
    *mapkey delete,K_splitppv
    *closeppx "%n,VX"
ENTER    ,*ifmatch !0,0%NVX %: %Oi *windowsize %N,%*windowrect(,w),%si"height0" %: *closeppx VX %: *stop
    *splitppv %si"tempfile",%si"ratio"
}

やり方

[I]でキャレットモードにしてから、辞書を引きたい単語を範囲選択して、以下のコマンドを実行する。

*ebwin2ppv 50

引数で分割の割合を変更できる。単位は百分率。半分にしたかったら50、四分の一なら75、とすればいい。 僕はマウス中クリックでこのコマンドを起動するようにしている。

MV_click    = {    ; PPv メイン窓
M_SPC    ,*ebwin2ppv 50
}

参考

つかさのほえほえ日記: PPvでEPWING形式の辞書を引く

2023年8月8日火曜日

PPvでPDFのテキストを読む

PDFファイルをtext形式に変換してPPvに表示する。変換にはpdftotextというコマンドラインツールを使用。 なぜこんなことをするかというと、EPWING形式の辞書を引くためです。

準備

Releases ・ oschwartz10612/poppler-windowsからRelease-23.07.0-0.zipをダウンロード。適当な場所に解凍する。

以下を編集して取込。pdftotextのパスは各自読み替えてください。

A_exec	= {	; エイリアス
pdftotext	= D:\bin\poppler\Library\bin\pdftotext.exe
}

_Command	= {	; ユーザコマンド・関数
pdftoppv	= *string o,tempfile=%*temp(name,f) %: %Oi pdftotext -f %*arg(2) -l %*arg(2) -layout -nopgbrk "%*arg(1)" %so"tempfile" %: *ppv -utf8 %so"tempfile" -k *string i,pagenum=%*arg(2) %%: *string i,name="%*arg(1)" %%: *string i,tempfile=%so"tempfile" %%: *mapkey use,K_forpdftoppv
pdftoppvnext	= %Oi pdftotext -f %*calc("%si"pagenum"+1") -l %*calc("%si"pagenum"+1") -layout -nopgbrk %si"name" %si"tempfile" %: *ppv -utf8 -r -bootid:%*rightstr("%n", 1) %si"tempfile" -k *string i,pagenum=%*calc("%si"pagenum"+1")
pdftoppvprev	= %Oi pdftotext -f %*calc("%si"pagenum"-1") -l %*calc("%si"pagenum"-1") -layout -nopgbrk %si"name" %si"tempfile" %: *ppv -utf8 -r -bootid:%*rightstr("%n", 1) %si"tempfile" -k *string i,pagenum=%*calc("%si"pagenum"-1")
pdftoppvjump	= %Oi pdftotext -f %en %"移動するページ数" %${%si"pagenum"%} -l %${%si"pagenum"%} -layout -nopgbrk %si"name" %si"tempfile" %: *ppv -utf8 -r -bootid:%*rightstr("%n", 1) %si"tempfile" -k *string i,pagenum=%${%si"pagenum"%}
}

K_forpdftoppv    = {
^LEFT    ,*pdftoppvprev
^RIGHT    ,*pdftoppvnext
J    ,*pdftoppvjump
}

やり方

PDFファイルにカーソルをあわせて以下を実行する。第一引数にはファイルパスを、第二引数にはページ数を指定する。

*pdftoppv %FCDN,1

PPvには以下の操作が追加される。

  • ^[←] 前のページ
  • ^[→] 次のページ
  • [J] 指定したページへ移動

おまけ:標準出力の場合

標準出力を利用する場合は以下のようになる。

A_exec	= {	; エイリアス
pdftotext	= D:\bin\poppler\Library\bin\pdftotext.exe
}

_Command	= {	; ユーザコマンド・関数
pdftoppv	= *ppv "%*arg(1)" -esc:on -text -utf8 -document:"pdftotext -f %*arg(2) -l %*arg(2) -layout -nopgbrk %"%*arg(1)" - > %%si'TempFile'" -k *string i,pagenum=%*arg(2) %%: *mapkey use,K_forpdftoppv
pdftoppvnext	= *ppv -r -bootid:%*rightstr("%n", 1) %FCD -esc:on -text -utf8 -document:"pdftotext -f %*calc("%si"pagenum"+1") -l %*calc("%si"pagenum"+1") -layout -nopgbrk %%FCD - > %%si'TempFile'" -k *string i,pagenum=%*calc("%si"pagenum"+1")
pdftoppvprev	= *ppv -r -bootid:%*rightstr("%n", 1) %FCD -esc:on -text -utf8 -document:"pdftotext -f %*calc("%si"pagenum"-1") -l %*calc("%si"pagenum"-1") -layout -nopgbrk %%FCD - > %%si'TempFile'" -k *string i,pagenum=%*calc("%si"pagenum"-1")
pdftoppvjump	= *ppv -r -bootid:%*rightstr("%n", 1) %FCD -esc:on -text -utf8 -document:"pdftotext -f %en %"移動するページ数" %${%si"pagenum"%} -l %${%si"pagenum"%} -layout -nopgbrk %%FCD - > %%si'TempFile'" -k *string i,pagenum=%${%si"pagenum"%}
}

K_forpdftoppv    = {
^LEFT    ,*pdftoppvprev
^RIGHT    ,*pdftoppvnext
J    ,*pdftoppvjump
}

参考

2023年7月30日日曜日

PPvでEPWING形式の辞書を引く

PPvで、カーソル位置の/範囲選択した単語をEPWING形式の辞書で検索し、PPv[X]にその内容を表示する。

必要なもの

EBWIN4には、EPWING形式の辞書をあらかじめ登録しておこう。

準備

以下のファイルをScriptフォルダに保存する。dic.luaのEBWIN4のパスは環境に応じて読み替えてください。

カーソル位置の単語を検索

単語が空白区切りになっている英文等の場合はこちらが便利。 [I]でキャレットモードにして、辞書を引きたい単語上にカーソルを置いてから、以下のコマンドを実行する。

*string o,tempfile=%*temp(name,f) %: %Oi nyagos -f %0Script\dic.lua %*script(%0Script\selectword.js) %so"tempfile" %: *ppv -utf8 -bootid:x -r %so"tempfile" -k *selectppx %n

一時ファイルが一々つくられるのが嫌な場合は、以下を適当なキーに登録して実行する。

*ifmatch "!o:e,a:d-",%si"tempfile" %: *string i,tempfile=%*temp(name,f)
%Oi nyagos -f %0Script\dic.lua %*script(%0Script\selectword.js) %si"tempfile"
*ppv -utf8 -bootid:x -r %si"tempfile" -k *selectppx %n

単語を範囲選択して検索

日本語で辞書を引くとき等は、単語の自動取得が難しいので、おそらくこちらの方法を取ることになる。

*string o,tempfile=%*temp(name,f) %: %Oi nyagos -f %0Script\dic.lua %*selecttext %so"tempfile" %: *ppv -utf8 -bootid:x -r %so"tempfile" -k *selectppx %n

参考

2022年2月8日火曜日

Windows10のEmacsにEPWING形式の辞書を導入

xyzzyだと外字を表示できないので、Emacsで辞書を引く方法を調べた。

辞書

EPWING形式の辞書を予め用意しておく。

eblook

Kazuhiro's blog - eblook 1.6.1+media

からダウンロード。 ダウンロードしたファイルをeblook.exeにリネームし、パスを通した場所に置く。僕はEmacsのbinフォルダにパスを通し、その中に入れている。

lookup

Kazuhiro's blog - Lookup 1.4+media

からダウンロードし、適当な場所に解凍しておく。

C-x dで解凍したフォルダを指定すると、ファイラのdiredが開く。install.elにカーソルをあわせてShift+Lで、インストールが開始される。



init.el

init.elに以下を追加。辞書のパスは読み替えてください。

;; lookup
(setq lookup-enable-splash nil)
(autoload 'lookup "lookup" nil t)
(autoload 'lookup-region "lookup" nil t)
(autoload 'lookup-pattern "lookup" nil t)
(autoload 'lookup-word "lookup" nil t)
(setq lookup-search-agents
      '((ndeb "~/emacs/Dictionary/eld-morph")
	(ndeb "~/emacs/Dictionary/F2J2")))
(global-set-key [mouse-2] 'lookup-word)

使い方

辞書を引きたい単語にカーソルをあわせて、M-xからlookup-wordとするか、マウスホイールクリックで辞書を引けるようになる。



参考

2022年2月4日金曜日

xyzzyでEPWING形式の辞書を引く

最近暇すぎてラテン語で書かれた本を読んでる。読みたい文献をテキストファイル化してxyzzyで表示し、単語クリックで辞書を引けるようにしたら完璧じゃねと思いついて色々調べてみた。EPWING for the classicsで公開されている羅英辞書は、なんと変化形から引くことができるのだ!

オフライン辞書について

そもそもEPWINGとは何かというと、30年ほど前に富士通が中心になってまとめた共通規格。市販されているCD-ROM辞書のデファクトスタンダードになっているようだ。名前はWINGビルで会議をしたことにちなむらしい。

他に有名な規格として、PDICがある。PDICはDOS時代から公開されている辞書ソフト。当初は単語帳のような使い方が主流だったが、後に多くの辞書データが公開され、辞書の形式として定着したらしい。

辞書の用意

ではやり方を見ていこう。

EPWING形式の辞書を予め用意しておく。

EBライブラリ

*Megahurtz:xyzzy:ebdict:manual

からeb-4.2.2-win32.exeをダウンロードし、インストール。

インストールフォルダにあるbin/eb.dllをxyzzyのetcフォルダにコピーする。

ebdictのインストール

GitHub - deecay/ebdict: EPWING for xyzzy

からeb.lをダウンロードして、site-lispフォルダに入れる。 ついで、「.xyzzy」に以下を追加。辞書フォルダのパスは各自読み替えてください。

(require "eb")
(setq *ebdict-directories* '("D:/work/Dictionary/eld-morph" "D:/work/Dictionary/F2J2"))
(global-set-key #\MBtnDown 'ebdict-lookup)

使い方

テキストを読み込み、単語にカーソルをあわせて、M-x ebdict-lookup [C-M-,]


僕は、ホイールクリックでも辞書を引けるようにしている。ちなみに、検索結果を表示しているバッファからさらに辞書を引くことも可能。 ただ、xyzzyだと外字を表示できず、文字化けしてしまうようだ。emacsにもlookpupという拡張があり、こちらだと文字化けしない。こちらの使用方法については次回。