前回からの続き。
catdumpでCATALOGSファイルを作成するには、まず、テキストファイル形式のカタログファイルを作成する必要がある。
テキストファイルのカタログファイルは、
このページに参考例がある。
とはいえ、ただの例なので、自分の辞書CDがどのような構成になっているのかを知る必要がある。
普通にCDを見てみると、ファイルの構成はこのようになっている。
$ tree xxx
xxx
├── README.FreeBSD
├── README.LINUX
├── TRANS.TBL
└── chujiten
├── TRANS.TBL
├── data
│ ├── TRANS.TBL
│ └── honmon
└── gaiji
├── TRANS.TBL
├── gai16f00
├── gai16h00
├── gai24f00
├── gai24h00
├── gai30f00
├── gai30h00
├── gai48f00
└── gai48h00
3 directories, 15 files
(xxxはCDのマウントポイント)
"chujiten/data/honmon"が辞書データそのものだろう。
前回ビルドしたepwutil内にあるbookinfoで見てみると以下のように表示された。
$ bookinfo dict/chujiten/data/honmon
; 電子ブック/EPWING 書籍管理情報 (generated by bookinfo v1.0)
対象書籍ファイル = dict/chujiten/data/honmon
情報所在ブロック = 1
書籍構成要素数 = 13
予備領域1(書籍種別/保護情報) = 2000H
書籍種別: 英和辞典
保護情報: 表示許可, 印刷許可, テキスト引用許可, 図版引用許可,
カラー図版引用禁止, 動画引用禁止, 大量引用禁止
INDEX情報の取扱法 = 02H (INDEX情報は有効)
ID 名称 先頭 サイズ INDEX情報 予備3/4
*00 本文 34398 44941 00/0000
*91 前方一致表記形インデックス 4244 4236 .a....... 00/0000
*71 後方一致表記形インデックス 8 4236 .a....... 00/0000
*02 著作権表示 7 1 00/0000
*01 メニュー 26941 1 00/0000
FF 複合検索 *** 1969 00/0000
FF 複合検索 *** 33305 00/0000
FF 複合検索 *** 16261 00/0000
FF 複合検索 *** 5 00/0000
FF 複合検索 *** 23 00/0000
*05 前方一致表記形見出し 26946 3726 00/0000
*07 後方一致表記形見出し 30672 3726 00/0000
D8 PCM音声 79339 83391 00/0000
表示方法の初期値情報:
有効無効フラグ = 01H (初期値情報は有効)
一覧表表示 = 00H (直接本文表示)
本文表示法 = 00H (検索結果を項目単位に連続して表示)
書籍ファイルサイズ = 318MB
マーク部分のサイズ = 119MB
文字のサイズと文字のバイト数が合わないので、ズレズレ表示になっているが、読めなくはない。
CDが壊れているかもと思っていたが、辞書データは使えるようだ。
このページの例を参考に、上記情報とディレクトリ構成を元に、catalogs.txtという名前で、以下のようなテキストファイルを作成した。
[Catalog]
FileName = catalogs
Type = EPWING1
Books = 1
[Book]
BookType = 2000
Title = "新英和・和英中辞典"
Directory = "chujiten"
InfoBlock = 0001
ZenGaiji = "gai16f00gai24f00gai30f00gai48f00"
HanGaiji = "gai16h00gai24h00gai30h00gai48h00"
このテキストファイルは、UTF-8で書いている。
ソースコードやMakefileを読めば解るが、Unix系でのcatdumpは、EUC-JPを期待した作りになっている(WindowsではShift_JIS)。
そのためEUC−JPに変換しなければならない。
以下のようにして、変換する。
$ nkf -e catalogs.txt > catalogs.euc
一応、確認。
$ nkf -g catalogs.euc
EUC-JP
よしよし。
これを使ってバイナリのCATALOGSを作成する。
$ catdump -u catalogs.euc CATALOGS
これでカタログファイルはできたけど、相手はCDROMだ。書き込むことはできない。
壊れているとはいえ勝手にコピーしてしまうのも問題だ。
こういうときは、overlayマウント(unionマウントとも言う)してしまおう。
いくつか方法はあるが、以前からoverlayfsを使っているので、それを使う。
デフォルトではoverlayfs用のカーネルモジュールが読み込まれていないので、モジュールを読み込む。
$ sudo modprobe overlay
つぎに、読み書きディレクトリ、作業ディレクトリ、マウントポイントを用意する。
$ mkdir rw wk dict
そして、overlayマウントする(xxxにCDがマウントされているものとする)。
$ sudo mount -t overlay overlay dict/ -o lowerdir=xxx,upperdir=rw,workdir=wk
これで、dict/を通してxxx/をアクセスでき、書き込みもできるようになる。
dict/へ作成したCATALOGSファイルをコピーする。
$ cp CATALOGS dict/
これで、多くの辞書アプリでアクセス可能になる。
試しに、eblookで見てみよう。以下のようにしてインストールする。
$ sudo apt install eblook
インストール後、overlayマウントしたマウントポイントを指定して起動する。
以下は、英単語"english"をひいたときの様子。
$ eblook dict/
eblook> list
1. chujiten 新英和・和英中辞典
eblook> select 1
eblook> search english
1. 37402:692 English
eblook> content english
Invalid entry number: english
eblook> content 1
<gaiji=ha123>En・glish /<gaiji=ha137><gaiji=ha22f>gl<gaiji=ha228><gaiji=ha22d>/→<gaiji=za339>
<gaiji=za34e><gaiji=za323>
1 イングランドの; 《俗に》 イギリスの,英国の.
2 イングランド人の; 《俗に》 イギリス人の,英国人の.
3 英語の.<reference>→<gaiji=za33a></reference=53513:1184>
<gaiji=za34e><gaiji=za321>
1 <gaiji=za32f> 英語.<reference>→<gaiji=za33a></reference=53513:1284>
2 [the 〜; 複数扱い]
a イングランド人; 《俗に》 イギリス人,英国人 (cf. the Scots,the Welsh,the Irish).
b 英軍.
<gaiji=ha126>古期英語 ‘of the race of Angles' の意; ⇒ENGLAND<gaiji=ha127>
<prev><reference><gaiji=ha123>En・gland /<gaiji=ha137><gaiji=ha22f>gl<gaiji=ha226>nd/→<gaiji=za339></reference=37401:1782></prev>
<next><reference><gaiji=ha155>nglish br<gaiji=ha168>akfast</reference=37402:1602></next>
eblook> quit
外字が<gaiji=xxxxx>のように表示されて読みにくいが、動作しているのはわかる。
GUIアプリのebviewで表示すると、発音記号その他外字も表示される。
外字の大きさが、文字と合っていないのが少し気になる…。
メニューから、ツール->オプションで、「設定項目」から「外部プログラム」を選んで、「音声再生プログラム」を"aplay %f"にすると、音声も再生できるようになる。
これでネットにつながらなくても、電子辞書が使える。