IPAフォントの改造 濁点

Mac OS Xでは、濁音(半濁音)を清音 + U+3099(U+309A)で表している。
IPAフォントで、そのようなテキスト「がぎぐげごザジズゼゾか゚き゚く゚け゚こ゚パピプペポ」を開いたら、こう表示される。

「かきくけこ」に半濁点は、合字の設定がされているから表示されている。ということは、他の文字も設定すれば、きちんと表示される。

次のスクリプトを使う。UTF-8で保存。

#!/usr/bin/env fontforge

if ($argc > 2)
   OutputFile = $2;
else
   OutputFile = "new."+$1:t;
endif

Open($1);
Reencode("original");

plain = [0x304B, 0x304D, 0x304F, 0x3051, 0x3053, 0x3055, 0x3057, 0x3059, 0x305B, 0x305D, 0x305F, 0x3061, 0x3064, 0x3066, 0x3068, 0x306F, 0x3072, 0x3075, 0x3078, 0x307B, 0x309D];
Select(0u3099);
v_mark = GlyphInfo("Name");
i = 0;
while (i < SizeOf(plain))
    Select(UCodePoint(plain[i]));
    p = GlyphInfo("Name");
    Select(UCodePoint(plain[i]+1));
    AddPosSub("'ccmp' グリフ合成/分解 lookup 1 subtable", p+" "+v_mark);
    Select(UCodePoint(plain[i]+0x60));
    p = GlyphInfo("Name");
    Select(UCodePoint(plain[i]+0x60+1));
    AddPosSub("'ccmp' グリフ合成/分解 lookup 1 subtable", p+" "+v_mark);
    i++;
endloop

plain = [0x3046, 0x30A6, 0x30EF, 0x30F0, 0x30F1, 0x30F2];
voiced = [0x3094, 0x30F4, 0x30F7, 0x30F8, 0x30F9, 0x30FA];
i = 0;
while (i < SizeOf(plain))
    Select(UCodePoint(plain[i]));
    p = GlyphInfo("Name");
    Select(UCodePoint(voiced[i]));
    AddPosSub("'ccmp' グリフ合成/分解 lookup 1 subtable", p+" "+v_mark);
    i++;
endloop

plain = [0x306F, 0x3072, 0x3075, 0x3078, 0x307B];
Select(0u309A);
v_mark = GlyphInfo("Name");
i = 0;
while (i < SizeOf(plain))
    Select(UCodePoint(plain[i]));
    p = GlyphInfo("Name");
    Select(UCodePoint(plain[i]+2));
    AddPosSub("'ccmp' グリフ合成/分解 lookup 1 subtable", p+" "+v_mark);
    Select(UCodePoint(plain[i]+0x60));
    p = GlyphInfo("Name");
    Select(UCodePoint(plain[i]+0x60+2));
    AddPosSub("'ccmp' グリフ合成/分解 lookup 1 subtable", p+" "+v_mark);
    i++;
endloop

Generate(OutputFile, "otf");
Quit(0);