name テーブル
name テーブルには、フォント名などの文字列が格納されています。
必須テーブルです。
必須テーブルです。
テーブルデータ
フォーマットは2種類ありますが、今のところ format 1 はあまり使われていません。
platformID などの値により、文字列データのエンコードは異なります。
platformID/encodingID/languageID は、基本的に cmap テーブルで使われるのと同じ値です。
言語タグ文字列は、IETF BCP 47 によって定義された言語名。
参考: IETF言語タグ (Wikipedia)
言語タグ文字列は、UTF-16BE でエンコードされています。
NameRecord の languageID が 0x8000 以上の場合、「languageID - 0x8000」の値をインデックス値として、LangTagRecord の配列から読み込んで参照します。
uint16 format | フォーマット番号。0 or 1 |
---|---|
uint16 count | 文字列データの数 |
Offset16 stringOffset | 文字列が格納されている領域の先頭のオフセット位置。 (name テーブルの先頭を 0 とする) |
NameRecord nameRecord[count] | NameRecord の配列 (各文字列のデータ)。 「platformID < encodingID < languageID < nameID」の順で並んでいる。 |
format = 1 の場合、以下が続く | |
uint16 langTagCount | LangTagRecord の数 |
LangTagRecord langTagRecord[langTagCount] | LangTagRecord の配列。 言語を文字列で表す場合、各言語の情報。 |
NameRecord (各文字列のデータ)
uint16 platformID | プラットフォーム ID |
---|---|
uint16 encodingID | エンコーディング ID |
uint16 languageID | 言語 ID |
uint16 nameID | 名前 ID |
uint16 length | 文字列の長さ (バイト数) |
Offset16 offset | 文字列へのオフセット位置 (stringOffset の位置を 0 とする) |
platformID などの値により、文字列データのエンコードは異なります。
platformID/encodingID/languageID は、基本的に cmap テーブルで使われるのと同じ値です。
LangTagRecord (各言語のデータ)
uint16 | 言語タグの文字列の長さ (バイト数) |
---|---|
Offset16 | 言語タグの文字列へのオフセット位置 (stringOffset の位置を 0 とする) |
言語タグ文字列は、IETF BCP 47 によって定義された言語名。
参考: IETF言語タグ (Wikipedia)
言語タグ文字列は、UTF-16BE でエンコードされています。
NameRecord の languageID が 0x8000 以上の場合、「languageID - 0x8000」の値をインデックス値として、LangTagRecord の配列から読み込んで参照します。
platformID/encodingID/languageID
この値により、各文字列の言語やエンコーディングなどが指定されます。
※ここでは、実際に使われている主な値のみ解説します。
Windows/Mac の両方に対応するため、「platformID = 1, 3」の両方の文字列データが格納されているフォントが多いですが、「platformID = 3 (Windows)」のデータしかない場合もあります。
※ここでは、実際に使われている主な値のみ解説します。
Windows/Mac の両方に対応するため、「platformID = 1, 3」の両方の文字列データが格納されているフォントが多いですが、「platformID = 3 (Windows)」のデータしかない場合もあります。
platformID = 0 (Unicode)
Unicode での文字列です。
encodingID = 0〜3 の場合は 16bit で表現できる文字なので、UTF-16BE エンコーディング。
encodingID = 0〜3 の場合は 16bit で表現できる文字なので、UTF-16BE エンコーディング。
platformID = 1 (Macintosh)
Mac 用。
文字列のエンコーディングは、encodingID によって異なります。1byte or 2byte エンコーディング。
encodingID は、0 = Roman (ローマ字)、1 = Japanese、ほか。
languageID は、0 = English、11 = Japanese、ほか。
文字列のエンコーディングは、encodingID によって異なります。1byte or 2byte エンコーディング。
encodingID は、0 = Roman (ローマ字)、1 = Japanese、ほか。
languageID は、0 = English、11 = Japanese、ほか。
platformID = 3 (Windows)
Windows 用。
Unicode の場合は「encodingID = 1」、シンボルフォントの場合は「encodingID = 0」。
文字列はすべて UTF-16BE エンコーディング。
languageID には、各言語の ID 値が入っています。詳しい値は仕様書で。
英語 = 0x0409
日本語 = 0x0411
Unicode の場合は「encodingID = 1」、シンボルフォントの場合は「encodingID = 0」。
文字列はすべて UTF-16BE エンコーディング。
languageID には、各言語の ID 値が入っています。詳しい値は仕様書で。
英語 = 0x0409
日本語 = 0x0411
nameID
文字列の内容の種類です。
26〜255 は、将来の名前のために予約されています。
256〜32767 は、フォント固有の名前用に予約されています。
26〜255 は、将来の名前のために予約されています。
256〜32767 は、フォント固有の名前用に予約されています。
0 | 著作権 |
---|---|
1 | フォントのファミリー名。 フォント名に nameID=2 の名前を付加して使われることが多い。 |
2 | フォントのサブファミリー名。 "Regular" など、フォントのスタイルを表す名前。 |
3 | 一意のフォント識別子 |
4 | 完全なフォント名 |
5 | バージョン文字列。 基本的に「Version <number>.<number>」で始まるが、この形式ではない場合もある。 |
6 | フォントの PostScript 名 |
7 | 商標 |
8 | 製造者 |
9 | デザイナーの名前 |
10 | 説明 |
11 | ベンダーの URL |
12 | デザイナーの URL |
13 | ライセンス説明 |
14 | ライセンス情報の URL |
15 | 予約 |
16 | 印刷用のファミリー名。 nameID=0 とは異なり、スタイル名は含まない。 フォントが同じでスタイルが異なるものをグループ化したい時に使う。 |
17 | 印刷用のサブファミリー名。 |
18 | (Mac のみ) 互換性のあるフルネーム |
19 | サンプルテキスト。 フォントのサンプル表示時に適した文字列。 |
20 | PostScript CID findfont 名 |
21 | WWS ファミリー名 |
22 | WWS サブファミリー名 |
23 | 明るい背景パレット (CPAL テーブル) |
24 | 暗い背景パレット (CPAL テーブル) |
25 | バリエーションの PostScript 名の接頭語 |
プログラム
>> 05_name.c
name テーブルの一覧を表示するプログラムです。
フォントファイルを指定すると、「output.txt」に結果を出力します。
(出力が Unicode 文字列を含むため、コンソールのエンコーディングに左右されないように、テキストファイルに UTF-8 で出力します)
ここでは、「platformID = 0、encodingID = 0〜3」と「platformID = 3」の、UTF-16BE 文字列のみ出力します。
name テーブルの一覧を表示するプログラムです。
フォントファイルを指定すると、「output.txt」に結果を出力します。
(出力が Unicode 文字列を含むため、コンソールのエンコーディングに左右されないように、テキストファイルに UTF-8 で出力します)
ここでは、「platformID = 0、encodingID = 0〜3」と「platformID = 3」の、UTF-16BE 文字列のみ出力します。
フォント名の実際の使われ方
Linux の場合は、「$ fc-list」で出力した fontconfig のフォント一覧と見比べてみると、フォント名とスタイル名の使われ方がわかります。
nameID = 16,17 がない場合
「源ノ明朝」では、以下のようになっています。
languageID = 0x409 が英語での名前、languageID = 0x411 が日本語での名前です。
nameID = 16, 17 の文字列が存在しないため、
フォントのファミリー名は nameID = 1 の「Source Han Serif (源ノ明朝)」となり、
スタイル名は nameID = 2 の「Regular」となります。
[platID:3 | encID:1 | langID:1033 (0x409) | nameID:1 | offset:204] Source Han Serif [platID:3 | encID:1 | langID:1033 (0x409) | nameID:2 | offset:236] Regular [platID:3 | encID:1 | langID:1041 (0x411) | nameID:1 | offset:2242] 源ノ明朝 [platID:3 | encID:1 | langID:1041 (0x411) | nameID:2 | offset:236] Regular
languageID = 0x409 が英語での名前、languageID = 0x411 が日本語での名前です。
nameID = 16, 17 の文字列が存在しないため、
フォントのファミリー名は nameID = 1 の「Source Han Serif (源ノ明朝)」となり、
スタイル名は nameID = 2 の「Regular」となります。
nameID = 16,17 がある場合
「源柔ゴシック」の場合は、以下のようになっています。
nameID = 1 では、末尾にスタイル名「Regular」が付加されています。
nameID = 16 では、フォント名のみとなっています。
フォント一覧を表示する際、同じフォントでスタイルが異なるものをグループ化したい場合には、nameID = 16 の文字列を使います。
「フォント名とスタイル」を一つのかたまりとしてリスト化したい場合には、nameID = 1 の文字列を使います。
[platID:3 | encID:1 | langID:1033 (0x409) | nameID:1 | offset:546] Gen Jyuu Gothic Regular [platID:3 | encID:1 | langID:1033 (0x409) | nameID:2 | offset:618] Regular [platID:3 | encID:1 | langID:1033 (0x409) | nameID:16 | offset:3634] Gen Jyuu Gothic [platID:3 | encID:1 | langID:1033 (0x409) | nameID:17 | offset:3682] Regular [platID:3 | encID:1 | langID:1041 (0x411) | nameID:1 | offset:3706] 源柔ゴシック Regular [platID:3 | encID:1 | langID:1041 (0x411) | nameID:16 | offset:3766] 源柔ゴシック [platID:3 | encID:1 | langID:1041 (0x411) | nameID:17 | offset:3780] Regular ▼ fc-list の出力 <path>/GenJyuuGothic-Regular.ttf: 源柔ゴシック,Gen Jyuu Gothic,Gen Jyuu Gothic Regular,源柔ゴシック Regular:style=Regular
nameID = 1 では、末尾にスタイル名「Regular」が付加されています。
nameID = 16 では、フォント名のみとなっています。
フォント一覧を表示する際、同じフォントでスタイルが異なるものをグループ化したい場合には、nameID = 16 の文字列を使います。
「フォント名とスタイル」を一つのかたまりとしてリスト化したい場合には、nameID = 1 の文字列を使います。