中本です。

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]

メールによる返信