Offset

表 (OpenType)

[1] (ひょう) (テーブル) (table) は、 TrueType / OpenType フォントデータ構造の基本単位の1つです。

仕様書

意味

[6] OpenType では (field) を持った構造記録があり、 これらが OpenType ファイルの主要な構成要素になっています。

[7] (ひょう) (table) は一般に offset で参照されるものです。 >>5

[8] () (ろく) (record) は親構造中に順序に従って出現するものです。 >>5

[9] から offset で参照される他の () (ぶん) (ひょう) (subtable) と呼ばれています。 曖昧でない時は部分表と呼ばれています。 文脈なくというときはたいていはフォントの最上位の構造に相当するのことを指しています。

offset

[10] OpenType における Offset16, Offset24, Offset32 は、それぞれ uint16, uint24, uint32 で, 部分表への offset (位置の差分) を表しています。 >>5

[11] offset起算点によって違い、 仕様書の関係するところで一々規定されています。 大抵はその offset が出現した部分表の先頭を 0 と数えています。

[12] offset 値は 0 とすることができ、 NULL 値と呼ばれています。 >>5

[13] NULL 値を使えるかどうかはによって違い、 仕様書の関係するところで一々規定されています。 >>5

[14] フォント不適合な場合は使えないところでも NULL が使われる場合がありますから、 フォントを解釈する実装はそれを想定しておくべき (should) です。 >>5 そうしなければ参照元の部分表自体が参照されていることになりますから、 処理がおかしくなってしまいます。

[15] フォントファイル中のの配置位置は決まっていません。 符号無し整数なので起算点より前には置けませんし、 offset 欄のビット数で表せる最大の位置よりも後には置けませんが、 その中間の好きな位置に置けます。 複数の offset 値が同じ位置を参照することもできます。

[16] 例えば複数の lookup が同等の Coverage を使いたければ、 同じものを2つ配置する必要はなく、 それらより後に1つだけ配置して、どちらにもその先頭を指すような offset を設定することができます。 offset の値は違うかもしれませんが、 参照元の起算点 + offset が同じ値になります。

[30] 仕様上はどこに置いても良さそうに (置く場所に制限はなさそうに) も読めるのですが、 どうも実装によってはそうでもないことがあるみたいです。 親のに属する部分表は親のの範囲に含まれる、 と仕様書を解釈するべきなのでしょうか。よくわかりません。

[31] 例えば Chromecmap format 14 部分表nonDefaultUVSOffset が指す記録がその部分表length までの範囲内になければ構文解析エラーとします。

[17] フォントファイルを解釈する実装は、 バッファー溢れ等、 不正なメモリー操作が発生しないよう注意が必要です。 フォントファイルは壊れているかもしれませんし、 不正なデータかもしれません。

表タグ

[22] フォントの最上位に当たるの種別は (ひょう) タグ (table tag) で識別されます。

[23] TableRecordtableTagの識別子たるタグです。 >>20

[26] OpenType フォントは、 OpenTypeの他、 TrueType 等、他の仕様のも含められます。 >>20 TrueType と OpenType の仕様の関係は OpenType

[24] OpenType規定では、 同じタグフォント当たり高々1つだけ含められます。 複数ある場合の挙動は未定義で、 実装はどれかを選んでも構いませんし、非妥当として拒絶しても構いません。 >>20

[25] OpenType 以外のは、 同じタグを複数使っても構いません。 >>20

[27] TrueType は、すべて小文字表タグApple 用に予約しています。 >>20 OpenType小文字表タグ大文字表タグが一見無秩序に混在しているのは、 この規定の影響のようです。

[28] OpenType表タグを特に制限することなく独自の利用 (カスタムタグ (custom tag) ) を認めているものの、 先方互換性のため Microsoft に通知するべき (should) だとしています。 >>20

[29] 大文字と小文字の区別を当の OpenType 仕様書がきっちりしていないのは、 困ったものです。 CMAP, KERN

OpenTypeタグ, 私用

表の一覧

[21] フォントの最上位に当たるは次のものがあります。

[3] OpenType
tag
タグ
o
OpenType >>19
l
OpenType Layout >>2
v
Visual TrueType >>4
ttc
TTC >>19
ttc2
TTC その他
tag
avar
o
Font Variations
tag
BASE
l
o
advanced typographic
tag
CBDT
o
bitmap glyph, color fonts
tag
CBLC
o
bitmap glyph, color fonts
tag
CFF
o
CFF outline (準必須)
tag
CFF2
o
CFF outline (準必須)
tag
cmap
o
必須
ttc
各々持つべき
tag
COLR
o
color fonts
tag
CPAL
o
color fonts
tag
cvar
o
Font Variations
tag
cvt
o
TrueType outline
ttc
共有すべき
tag
DSIG
o
other
ttc2
末尾
tag
EBDT
o
bitmap glyph
ttc
共有すべき
tag
EBLC
o
bitmap glyph
ttc
共有すべき
tag
EBSC
o
bitmap glyph
ttc
共有すべき
tag
fpgm
o
TrueType outline
ttc
共有すべき
tag
fvar
o
Font Variations
tag
gasp
o
TrueType outline
tag
GDEF
l
o
advanced typographic
tag
glyf
o
TrueType outline (必須)
ttc
共有すべき
tag
GPOS
l
o
advanced typographic
tag
GSUB
l
o
advanced typographic
tag
gvar
o
Font Variations
tag
hdmx
o
other
ttc
共有すべき
tag
head
o
必須
tag
hhea
o
必須
tag
hmtx
o
必須
ttc
共有すべき
tag
HVAR
o
Font Variations
tag
JSTF
l
o
advanced typographic
tag
kern
o
other
tag
loca
o
TrueType outline (必須)
ttc
共有すべき
tag
LTSH
o
other
ttc
共有すべき
tag
MATH
o
advanced typographic
tag
maxp
o
必須
ttc
共有すべき
tag
MERG
o
other
tag
meta
o
other
tag
MVAR
o
Font Variations
tag
name
o
必須
ttc
各々持つべき
tag
OS/2
o
必須
ttc
各々持つべき
tag
PCLT
o
other
tag
post
o
必須
tag
prep
o
TrueType outline
ttc
共有すべき
tag
sbix
o
bitmap glyph, color fonts
tag
STAT
o
Font Variations, other
tag
SVG
o
SVG outline, color fonts
tag
TSI0
v
tag
TSI1
v
tag
TSI2
v
tag
TSI3
v
tag
TSI4
v
廃止
tag
TSI5
v
tag
TSIB
v
廃止
tag
TSIC
v
tag
TSID
v
廃止
tag
TSIJ
v
廃止
tag
TSIP
v
廃止
tag
TSIS
v
廃止
tag
VDMX
o
other
tag
vhea
o
other
tag
vmtx
o
other
tag
VORG
o
CFF outline
tag
VVAR
o
Font Variations

メモ