この仕様書は、読者にBNF記法とOpenType仕様の知識があることを前提にしています。
unicmapのカスタム変換定義ファイルは、TrueType/OpenTypeフォントに対する以下のような操作を定義するテキストファイルです。
文字コードとグリフの対応を追加・削除・変更する。
OpenType仕様の合成定義・置換定義をフォントに追加する。
異体字セレクタの定義をフォントに追加する。
以下、本仕様書では操作が行われる前のフォントを入力フォント、操作が行われた後のフォントを出力フォントと呼びます。
<カスタム変換定義> ::= { <入力フォントの文字定義> <SP>+ <出力フォントの文字定義> <EOL> } <入力フォントの文字定義> ::= <文字コード>
文字コードは入力フォントのcmapを基準に解釈されます。出力フォントの文字定義にも同じ文字コードを指定しない限り、ここで指定した文字コードは出力フォントのcmapから削除されます。
<文字コード> ::= /[0-9A-Fa-f]{4,6}/
文字コードは4-6桁の16進数で指定します。入力フォントのエンコーディングは入力フォントのcmapに従います。ただしプラットフォームID=3, エンコーディングID=2はマイクロソフト標準キャラクタセットではなく、Shift_JIS-2004であると解釈されます。出力フォントのエンコーディングは常にUnicodeになります。
<出力フォントの文字定義> ::= ( <文字コード> | <グリフ合成定義> | <グリフ置換定義> ) [ <SP>+ <出力フォントのグリフ指定> ... ]
ここで指定した文字コードが出力フォントのcmapに追加されます。
<グリフ合成定義> ::= <文字コード> '+' <文字コード>
ここでグリフ合成定義として指定した文字コードの組み合わせが、出力フォントのGSUBテーブルにOpenType機能の'ccmp'として追加されます。文字コードは出力フォントのcmapに基づいてグリフIDへ変換されます。入力フォントのcmapではないことに注意してください。つまり、定義ファイルの他の部分で出力フォントの文字定義として文字コードを指定していた場合は、その指定に従ってグリフIDに変換されます。
2文字目の文字コードがU+E0100-U+E0FFFの範囲にある場合は、GSUBテーブルの代わりにcmapエンコーディングフォーマット14のUVSサブテーブルが生成されます。UVSサブテーブルの仕様は2008年3月現在草案であることに注意してください。
<グリフ置換定義> ::= <機能名> '(' <文字コード> ')' <機能名> ::= 'expt' | 'hojo' | 'jp04' | 'jp78' | 'jp83' | 'jp90' | 'nlck' | 'vert'
ここで指定した文字コードとOpenType機能の組み合わせが、出力フォントのGSUBテーブルに追加されます。文字コードからグリフへの変換は、出力フォントのcmapに基づいて行われます。
以下、特に断りのない限り入力フォントのエンコーディングはすべてUnicodeであると仮定しています。
AAA1 20089
入力フォントにおいてU+AAA1に定義されていたグリフをU+20089に移動します。
AAA1 AAA1 20089
入力フォントのU+AAA1に定義されていたグリフを残しつつ、U+20089でも同じグリフが参照されるようにします。
注意:
1つのグリフに複数の文字コードを割り当てると、アプリケーションによっては正常にフォントを処理できなくなる場合があります。
Unicode 5.0.0までの時点ではU+AAA1に文字は未割り当てです。使用すべきではありません。
02EF 02E9 02E5
入力フォントにおいてU+02EFに定義されていたグリフにOpenTypeの合成定義を与え、<U+02E5,U+02E9>で参照できるようにします。U+02EFは未定義になります。