中本です。 On Mon, 2 Oct 2006 00:28:46 +0900 Takashi Nakamoto <[EMAIL PROTECTED]> wrote: > これで、0.3にしようかと思いますが、Windowsのバージョン判定のコード修正 > [EMAIL PROTECTED] > トを待ちましょうか?
Win98系のパッチについてですが、 On Mon, 02 Oct 2006 10:49:42 +0900 matuaki <[EMAIL PROTECTED]> wrote: > matuakiです。 > > >> http://www32.ocn.ne.jp/~curvirgo/openoffice/furigana-0.3pre1-Win32.uno.pkg > >> > 上記のパッケージをWin98SE+MS IME2000の環境に入れてみました。 > 表示は空白ではなくなりましたが、正しい表示ではないようです。 > > 結果は以下の通りです。 > > =FURIGANA("海外") -> 「wmY」 > A2のセルの値:「日本」で =FURIGANA("A2") > ->「・c・,・,cg」(正確な表現ではありませんがこんな感じの表示 > になります) > A3のセルの値:「Abcd」で =FURIGANA("A3") -> 「A」 > A4のセルの値:「あいうえお」で =FURIGANA("A4") -> 「B0 D0 F0 H0 > J0」 A5のセルの値:「海」で =FURIGANA("A5") -> 「wm」 [EMAIL PROTECTED] B(0x0042) 0(0x0030) D(0x0044) 0(0x0030) ... となっている(正解は0x3042 0x3044)ので、以下のようなパッチを書いて修正 してみました。 ただ、その他の結果をみると、そもそも逆変換が行われていないようです。例 えば、「海外」と「海」の結果の最初の2文字が w(0x0077) m(0x006d) となっていますが、これを正しいUnicodeに直すと「海 (0x6d77)」と元の文字 に戻るだけです。 Index: furigana_impl.cxx =================================================================== RCS file: /cvsroot/waooo/furigana/furigana_impl.cxx,v retrieving revision 1.19 diff -u -w -r1.19 furigana_impl.cxx --- furigana_impl.cxx 1 Oct 2006 15:19:39 -0000 1.19 +++ furigana_impl.cxx 2 Oct 2006 15:11:47 -0000 @@ -38,12 +38,11 @@ #include <mecab.h> #endif #if defined(WIN) || defined(WNT) -//#define _WIN32_WINNT #include <windows.h> #include <imm.h> #endif #include <string.h> -#include <stdio.h> +#define TO_UNICODE(c1,c2) ((c2>=0?c2:c2+0x100)*0x100+(c1>=0?c1:c1 +0x100)) using namespace ::rtl; using namespace ::com::sun::star; @@ -176,6 +175,8 @@ HKL hKL; DWORD aConversionListSize; LPCANDIDATELIST aConversionList; + OSVERSIONINFO aOSVersionInfo; + OUStringBuffer buf; hIMC = ImmCreateContext(); hKL = GetKeyboardLayout(0); @@ -194,7 +195,18 @@ ImmGetConversionList(hKL, hIMC, aStr.getStr(), aConversionList, aConversionListSize, GCL_REVERSECONVERSION); const char *result = (const char *) aConversionList + aConversionList->dwOffset[0]; + aOSVersionInfo.dwOSVersionInfoSize = sizeof (aOSVersionInfo); + GetVersionEx(&aOSVersionInfo); + if(aOSVersionInfo.dwPlatformId < 2) + { + for(int k=0;k<strlen(result);k+=2) + buf.append(TO_UNICODE(result[k],result[k +1])); + res += buf.makeStringAndClear(); + } + else + { res += OUString(result, strlen (result), RTL_TEXTENCODING_SHIFT_JIS); + } HeapFree(GetProcessHeap(), 0, aConversionList); } -- 中本 崇志 ( Takashi Nakamoto ) E-Mail : [EMAIL PROTECTED], [EMAIL PROTECTED] Homepage: http://bd.tank.jp/ blog : http://bd.tank.jp/diary --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
