試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

C/Migemoの辞書についての覚え書き(既定の辞書について)

C/Migemoは、バージョン1.3cの時点では辞書の場所を-dオプションで指定できるが、付けない場合は現在の作業ディレクトリから辞書ファイル(migemo-dict)を探し、開くのに失敗したらその1階層上のディレクトリを探すようになっている。
vimEmacsでは辞書の場所を拡張のコード内に記述するため毎回オプション指定するようなことはないが、直接コマンドを叩くときに上の挙動だと、辞書の配置場所が決まっているのにも関わらず-dオプションを使わないと見付けられないので不便。

$ echo toky | cmigemo | iconv -f eucjp -t utf8
migemo_open("./dict/migemo-dict")=0xa0b010
migemo_open("../dict/migemo-dict")=0xa0b010
clock()=0.000000
QUERY: PATTERN: toky
QUERY: 

そこで、インストール先接頭辞*1により決定される辞書のディレクトリ(のmakeマクロ「dictdir」)を使用して既定の辞書を開いてくれるような修正をした。(広い意味での)UNIX系OSでのビルド時にのみ挙動が変更されるようになっている。パッチはShift_JISエンコーディングで使用する。
[任意]ファイル名: cmigemo-1.3c-MIT-defaultdicdir.patch

This patch is licensed under MIT license.
diff -ur cmigemo-1.3c-MIT.orig/compile/unix.mak cmigemo-1.3c-MIT/compile/unix.mak
--- cmigemo-1.3c-MIT.orig/compile/unix.mak
+++ cmigemo-1.3c-MIT/compile/unix.mak
@@ -9,7 +9,7 @@
 libmigemo_SRC = $(SRC)
 libmigemo_OBJ = $(OBJ)
 
-DEFINES	=
+DEFINES	= -DDICTDIR=\"$(dictdir)\"
 CFLAGS	= -O2 -Wall $(DEFINES) $(CFLAGS_MIGEMO)
 LDFLAGS = $(LDFLAGS_MIGEMO)
 LIBS	= 
diff -ur cmigemo-1.3c-MIT.orig/src/main.c cmigemo-1.3c-MIT/src/main.c
--- cmigemo-1.3c-MIT.orig/src/main.c
+++ cmigemo-1.3c-MIT/src/main.c
@@ -116,9 +116,18 @@
     fplog = fopen("exe.log", "wt");
 #endif
 
-    /* 辞書をカレントディレクトリと1つ上のディレクトリから捜す */
     if (!dict)
     {
+#ifdef DICTDIR
+	/* 既定の辞書を開く */
+	pmigemo = migemo_open(DICTDIR "/" MIGEMODICT_NAME);
+	if (!word && !mode_quiet)
+	{
+	    fprintf(fplog, "migemo_open(\"%s\")=%p\n",
+		    DICTDIR "/" MIGEMODICT_NAME, pmigemo);
+	}
+#else
+	/* 辞書をカレントディレクトリと1つ上のディレクトリから捜す */
 	pmigemo = migemo_open("./dict/" MIGEMODICT_NAME);
 	if (!word && !mode_quiet)
 	{
@@ -135,6 +144,7 @@
 			"../dict/" MIGEMODICT_NAME, pmigemo);
 	    }
 	}
+#endif
     }
     else
     {

これで、-dオプションが省略できるようになった。インストール後には下のような感じで動作している。

$ echo toky | cmigemo | iconv -f eucjp -t utf8
migemo_open("/usr/share/migemo/migemo-dict")=0xb19010
clock()=0.160000
QUERY: PATTERN: (toky|東京|ト(ーキョー|キ[ャィュェョ])|toky|とき[ゃぃゅぇょ]|徒競走|都響)
QUERY: 

*1:このパッケージのconfigureスクリプトへのオプション指定では設定できないため、作成しているRPMパッケージの.specファイルでは、あらかじめcompile/config.mk.inの「/usr/local」を「%{_prefix}」に置換しておくことにした