|
でるもんた・いいじまです。
秀丸上で「Unicodeのコードポイントから、その文字の名前を知る方法」をさがして
います。
☆ ☆ ☆
条件は次の通り。
@とりあえず、秀丸9.xx (32bit/64bit版) で動けばいい。ただし、XP/Vistaを見捨
てるのは避けてほしい。
ABMP以外の文字にも対応してほしいし、Unicodeの規格改定にも常時追随してほしい。
B漢字については、文字名自体は機械的な命名法なので必要ないが、どのセットに入
っているのか(基本セット、互換A、拡張B、etc)の情報があると嬉しい。
C手元には MinGW-w64(32bit・64bit両方)と ActivePerl をインストール済みです。
なので、「DLLのソースコードは既に存在するから、あとは http://ftp.unicode.org
/ から最新の文字リストをダウンロードして、それをC言語に変換してビルドして
ね」という解法も使えます。
この条件下で、何かいいソリューションをご存じないでしょうか。
特に、「その目的のDLLは既に◯◯に存在するから、秀丸用のラッパーDLLを作ればそ
れでゴールだよ」という情報があるとありがたいです。
※特定のスクリプト言語のパッケージを丸ごとインストールしなさい、はご勘弁くだ
さい^^ 特定のパッケージから特定のDLLを抜き出せば使えますよ、は大歓迎です。
☆ ☆ ☆
ちなみにご存じの方も多いとは思いますが、Windows自体にも一応この機能はあって、
getuname.dllというDLLから下記の関数がエクスポートされています。
DWORD GetUName(IN WCHAR c, OUT LPWSTR buffer, IN DWORD len);
ところが、
@第一引数cの型は、ネット上の資料ではDWORDと書かれていることが多いですが、実
際に0x20000台の値を与えてみても、下16bitだけしか見てくれません。
B第三引数lenにはバッファのサイズを指定するはずなのですが、明らかに小さすぎ
る値、たとえば4を指定しても、その文字数を超えたデータがバッファにかきこまれ
てしまいます。
というわけで、Aはバッファサイズに余裕を持たせておけば実質大丈夫だろうけど、
@の状況ではちょっと使えないな、と。
☆ ☆ ☆
以上、何かご存じの方がいらっしゃいましたらよろしくお願いしま。
P.S.
Excel上でいろいろ試してみたテストコードを添付しておきます。
'-------------------------
#If VBA7 Then
Declare PtrSafe Function GetUName Lib "getuname.dll" (ByVal c As Long, _
ByRef lpBuffer As Integer, ByVal nBufSize As Long) As Long
#Else
Declare Function GetUName Lib "getuname.dll" (ByVal c As Long, _
ByRef lpBuffer As Integer, ByVal nBufSize As Long) As Long
#End If
Option Base 0
Function charName(c As Long) As Variant
Dim buf(1024) As Integer
Dim ret As Long, L As Long
L = UBound(buf)
buf(0) = Asc("*")
buf(1) = 0
ret = GetUName(c, buf(0), L) ' Testing param#3 := 4 ... the function st
ill returns a long text.
If ret > L Then
charName = CVErr(xlErrValue)
Exit Function
End If
Dim s As String, i As Long
s = ""
For i = 0 To L
If buf(i) = 0 Then Exit For
s = s & ChrW(buf(i))
Next
charName = s
End Function
'-------------------------
|
|