- 作成者投稿
- 2008年3月3日 6:08 am #5892匿名ゲスト
ATOK設定で「カーソル位置前後の文章を参照して変換する 」をオンにすると、一太郎やワードでは入力文字の前後の文脈を解析して、文脈に合うように変換しますが、EmEditorもこの機能を使えるようにしてほしいです。
(前後参照変換の例)
花が
布を
時間を
上記の行末で「さいた」と入力して変換を行うと、それぞれ「咲いた」「裂いた」「割いた」が第一候補となります。2009年4月26日 9:06 am #7475Aye Wongメンバー前後参照変換への対応については、以下のURLで実装方法が紹介されていますね。
http://d.hatena.ne.jp/topiyama/20070703/p12009年4月27日 6:04 am #7478Yutaka EmuraキーマスターAye Wongさんは書きました:
前後参照変換への対応については、以下のURLで実装方法が紹介されていますね。
http://d.hatena.ne.jp/topiyama/20070703/p1これも参考にしてやってみましたが、なかなかうまくいかないですね。何が足りないのでしょうか?
2009年4月27日 12:53 pm #7480星くず 彼方に参加者横から失礼
このスレ見てプラグインを作ろうとしてたのですが、本体側で対応してくれるのならプラグインいらないですね。
こっちでは機能するようになったので、ソースの一部を張っときます。
case WM_IME_REQUEST:
if( wParam == IMR_DOCUMENTFEED ){
POINT_PTR pos;
Editor_GetCaretPos( hwnd, POS_LOGICAL_W, &pos );
GET_LINE_INFO inf;
inf.cch = 0;
inf.flags = FLAG_LOGICAL;
inf.yLine = pos.y;
UINT_PTR size( Editor_GetLineW( hwnd, &inf, NULL ) );
inf.cch = size + 32;
wchar_t* buf( (wchar_t*)_alloca( inf.cch * sizeof(wchar_t) ) );
if( buf ){
Editor_GetLineW( hwnd, &inf, buf );
size_t len( wcslen(buf) );
/* wchar_t str[30];
swprintf_s( str, L” %d”, lParam );
wcscat_s( buf, inf.cch, str );
MessageBox( hwnd, buf, L””, MB_OK );/**/
if( lParam ){
RECONVERTSTRING* rcs( (RECONVERTSTRING*)lParam );
memset( rcs, 0, sizeof(RECONVERTSTRING) );
rcs->dwSize = sizeof(RECONVERTSTRING);
rcs->dwStrOffset = sizeof(RECONVERTSTRING);
rcs->dwStrLen = (DWORD)len;
rcs->dwTargetStrOffset = (DWORD)(min( (size_t)max( pos.x, 0 ), len ) * sizeof(wchar_t));
wcscpy_s( (wchar_t*)(rcs + 1), len + 1, buf );
}
return sizeof(RECONVERTSTRING) + (len + 1) * sizeof(wchar_t);
}
}
break;このソースはUnicode版のものです。
多分に余計なものも含まれてるでしょうが、私のところではこれで、32bit,64bitともに動いてます。参考になりますでしょうか・・・
2009年4月27日 3:16 pm #7482Yutaka EmuraキーマスターOTStardustさんは書きました:
横から失礼このスレ見てプラグインを作ろうとしてたのですが、本体側で対応してくれるのならプラグインいらないですね。
こっちでは機能するようになったので、ソースの一部を張っときます。
case WM_IME_REQUEST:
if( wParam == IMR_DOCUMENTFEED ){
POINT_PTR pos;
Editor_GetCaretPos( hwnd, POS_LOGICAL_W, &pos );
GET_LINE_INFO inf;
inf.cch = 0;
inf.flags = FLAG_LOGICAL;
inf.yLine = pos.y;
UINT_PTR size( Editor_GetLineW( hwnd, &inf, NULL ) );
inf.cch = size + 32;
wchar_t* buf( (wchar_t*)_alloca( inf.cch * sizeof(wchar_t) ) );
if( buf ){
Editor_GetLineW( hwnd, &inf, buf );
size_t len( wcslen(buf) );
/* wchar_t str[30];
swprintf_s( str, L” %d”, lParam );
wcscat_s( buf, inf.cch, str );
MessageBox( hwnd, buf, L””, MB_OK );/**/
if( lParam ){
RECONVERTSTRING* rcs( (RECONVERTSTRING*)lParam );
memset( rcs, 0, sizeof(RECONVERTSTRING) );
rcs->dwSize = sizeof(RECONVERTSTRING);
rcs->dwStrOffset = sizeof(RECONVERTSTRING);
rcs->dwStrLen = (DWORD)len;
rcs->dwTargetStrOffset = (DWORD)(min( (size_t)max( pos.x, 0 ), len ) * sizeof(wchar_t));
wcscpy_s( (wchar_t*)(rcs + 1), len + 1, buf );
}
return sizeof(RECONVERTSTRING) + (len + 1) * sizeof(wchar_t);
}
}
break;このソースはUnicode版のものです。
多分に余計なものも含まれてるでしょうが、私のところではこれで、32bit,64bitともに動いてます。参考になりますでしょうか・・・
ありがとうございます。まったく同じようにやっているはずなのですが、私の手元の MS-IME (Windows Vista 64bit に付属) ではうまくいかなかったです。これから他の環境でもテストしてみます。ちなみに、どういう環境でうまくいきましたか? OS、ATOK (MS-IME) のバージョンを教えていただけますか?
2009年4月27日 4:26 pm #7483星くず 彼方に参加者こちらのコードが動いたのは、
32bit版
WinXP+ATOK2008
WinXP+MS-IME2002(詳細なテキストサービスのサポートをプログラムのすべてに拡張する offの時のみ)
64bit版
WinVista+ATOK2008
EmEditor 8.05ですWinVista64bit+MS-IMEは、こっちもダメですね・・・
2009年4月27日 6:38 pm #7484Yutaka EmuraキーマスターOTStardustさんは書きました:
こちらのコードが動いたのは、
32bit版
WinXP+ATOK2008
WinXP+MS-IME2002(詳細なテキストサービスのサポートをプログラムのすべてに拡張する offの時のみ)
64bit版
WinVista+ATOK2008
EmEditor 8.05ですWinVista64bit+MS-IMEは、こっちもダメですね・・・
こちらでも、Windows XP + 付属の MS-IME では正しく動作しました。Windows Vista ではだめですね。「詳細なテキストサービスのサポートをプログラムのすべてに拡張する 」というのがポイントのようですね。Windows Vista ではこれが常にオンになるようです。Text Services Framework に対応しないといけないのかもしれないですね。この件は、時間があるときにさらに調べてみたいと思います。どうも調べていただいて、ありがとうございました。
2009年5月23日 5:39 am #7537Yutaka EmuraキーマスターYutakaさんは書きました:
OTStardustさんは書きました:
こちらのコードが動いたのは、
32bit版
WinXP+ATOK2008
WinXP+MS-IME2002(詳細なテキストサービスのサポートをプログラムのすべてに拡張する offの時のみ)
64bit版
WinVista+ATOK2008
EmEditor 8.05ですWinVista64bit+MS-IMEは、こっちもダメですね・・・
こちらでも、Windows XP + 付属の MS-IME では正しく動作しました。Windows Vista ではだめですね。「詳細なテキストサービスのサポートをプログラムのすべてに拡張する 」というのがポイントのようですね。Windows Vista ではこれが常にオンになるようです。Text Services Framework に対応しないといけないのかもしれないですね。この件は、時間があるときにさらに調べてみたいと思います。どうも調べていただいて、ありがとうございました。
やっと Vista でも、MS-IME の前後参照変換に対応できました。Text Services Framework に対応する必要もありませんでした。v9 alpha 20 が公開されたら、お試しください。
- 作成者投稿
- このトピックに返信するにはログインしてください。