TrueTypeデータ読み込み 🔗
TTF形式はグリフ数分のglyf、locaテーブルを抽出する必要がある。
locaテーブルにはglyfテーブルの長さの情報が入っている。
glyfテーブルにはグリフのアウトライン情報が格納されている。
関連するテーブルをまとめると以下のようになる。
graph LR;
subgraph head
indexToLocFormat;
end
subgraph maxp
numGlyphs;
end
subgraph hhea
numberOfHMetrics;
end
subgraph hmtx
hMetrics["hMetrics[numGlyphs]"];
leftSideBearings["leftSideBearings[numGlyphs - numberOfHMetrics]"];
end
subgraph loca
direction LR;
offsets0["offsets[0]"];
offsets1["offsets[1]"];
offsets2["offsets[2]"];
offsets3["offsets[3]"];
offsetsx["offsets[...]"];
offsetslast["offsets[numGlyphs + 1]"];
end
subgraph glyf
direction LR;
glyf0["GID 0 (.notdef)"];
glyf1["GID 1"];
glyf2["GID 2"];
glyflast["GID numGlyphs"];
end
numGlyphs --> hMetrics;
numGlyphs --> leftSideBearings;
numGlyphs --> loca;
numberOfHMetrics --> leftSideBearings;
indexToLocFormat --> loca;
offsets1 --"offsets[0]~offsets[1]の差分"--> glyf0;
offsets2 --"offsets[1]~offsets[2]の差分"--> glyf1;
offsets3 --"offsets[2]~offsets[3]の差分"--> glyf2;
offsetslast --"offsets[numGlyphs]~offsets[numGlyphs + 1]の差分"--> glyflast;
locaテーブル 🔗
locaの配列の差分がglyfの長さになる。
アウトライン情報がない場合は差分がゼロ(offsets[GID] == offsets[GID + 1])になる。
headのindexToLocFormatが0の場合、locaは実際のオフセットを2で割った値が格納されている。
glyfテーブル 🔗
グリフデータにはSimple glyphとComposite glyphがある。
どちらも座標データのみであるため、抽出を行うだけであれば中身を解析する必要はない。
headのindexToLocFormatが0の場合、2バイトアライメントにする必要がある。