投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/10/7 10:57:48
> 2の異体字セレクタは IVS の [VS1]、
> 3の異体字セレクタは IVS の [VS17] です。
おぉっと。
『2の異体字セレクタは SVS の [VS1]』の書き間違いです。


> VBAで、マクロの表示をすると、何でも表示されてしまうので、
> subに何か、変数を渡す形にすると、表示されないための対策の癖でした。
Public / Friend / Private の修飾子を付けてみるのはどうでしょうか?
Public は「マクロの表示」に現れますが、Private は表示されません。

Public Sub MAIN()
End Sub

Private Sub IVDINI()
End Sub



> UVS マップでは、Unicode値として uint32 あるいは uint24 を扱います。
> .NET の Char 型は 16 ビットなので、U+10000 以降の文字を扱う場合は、
> 検索前に Unicode コードポイントに変換しておいてください。

『BMP (U+0000~U+FFFF) および第1~16面(U+10000~U+10FFFF)の任意の一文字』を
表すデータ型として、System.Text.Rune 構造体を使うこともできます。
(.NET Framework 環境では使えませんが)

Rune 構造体を使って "𩸽" を 0x29E3D に変換する例。

[C#]
if (System.Text.Rune.TryGetRuneAt("𩸽", 0, out System.Text.Rune rune))
{
    // U+00029E3D
    Console.WriteLine($"U+{rune.Value:X8}");

    // D867,DE3D
    char[] utf16 = new char[2]; // 格納するために十分なバッファ
    int n = rune.EncodeToUtf16(utf16);
    Console.WriteLine(string.Join(',', utf16.Take(n).Select(c => $"{(int)c:X4}"))); 

    // f0 a9 b8 bd
    byte[] utf8 = new byte[4]; // 格納するために十分なバッファ
    int m = rune.EncodeToUtf8(utf8);
    Console.WriteLine(string.Join(' ', utf8.Take(m).Select(b => $"{b:x2}"))); 
}



>> 𩸽は、29E3D,E0100~29E3D,E0104
> 以前 Gekka さんが、フォントファイルの cmap Format 14 から
> 異体字セレクタを列挙するコードを MSDN Forum に投稿されていました。
Gekka さんのコードを参考にして、「𩸽」の文字を試してみました。

IPAmj明朝 には、Adobe-Japan1 コレクションの異体字が含まれていませんが
花園明朝A には、Adobe-Japan1 コレクションと Moji_Joho コレクションが含まれていました。