[44] TrueType と OpenType は現在最も広く使われているフォント形式です。
[20] 当初 Apple が TrueType を開発し Microsoft も採用しましたが、 後に Microsoft と Adobe がそれを拡張する形で OpenType を開発しました。
[21] 現在 Apple は自社ウェブサイトで TrueType の仕様書を公開しています >>42。 Microsoft は自社ウェブサイトで OpenType の仕様書を公開しています >>3。
[22] 従って TrueType よりも OpenType の方が新しいバージョンで機能が豊富ということになるのですが、 仕様書としては別物で、技術的に共通でも仕様書は同内容ではありません。 そして両者それぞれに改訂されているので、 OpenType 仕様書になく TrueType 仕様書にはある機能もいくつかあります。 この機能は Apple の仕様書を見よ、 この機能は Microsoft の仕様書を見よ、 と相互に参照しあっています。
[23] 両仕様書には、 Microsoft はこう実装している、 Apple はこう実装している、 名前を挙げずにこういう実装もある、 というような記述も含まれています。 公的な工業標準というよりは企業の技術公開文書という性質の強い、 私的な規格ですが、事実上の標準の地位を得ています。
[28] Apple も Microsoft も自社の技術文書の公開サイトの1項目として仕様書を提供しているので、 仕様書として独立した形になっていないのが困ったところです。
[29] 本段落執筆時点では Microsoft 版の変更履歴に 「Version 1.9 Released December 2021」 と書かれているのですが、 ページの日付 (おそらく Microsoft のドキュメント管理システムがつけているもの) は 「2022/06/16」 となっていて、半年新しいことになってます。でもそれが何を意味しているのかわかりません。
[30] Webサイトで最新版(だけ)が公開されているのに、バージョンがついていて、 でもそのバージョンと無関係に更新されていて、今見てるのがバージョン何なのかわからない、 引用して数年後に記述が食い違っていたらどう理解したらいいのかわからない、 という困った状況です。
[25] ISO/IEC で ISO/IEC 14496-22 として国際標準になっています。 規格票は ISO の Webサイトで無償公開されています >>41。 その内容は Microsoft の OpenType 仕様書をアレンジしたもののようです。 (そんな品質でも国際標準になれるのですね。)
[27] 時点の最新版はです。 一方 Microsoft 版の最新版はのものです。 こうしたものは一度国際標準の判子を押されたら後は放置されがちですが、 比較的きちんとメンテナンスされているみたいですね。
[26] 一般には ISO/IEC よりも Microsoft の仕様書が参照されているようです。 両者の内容は完全に一致しているわけではないのですが、 差分ははっきりしないので、 ISO/IEC 版を参照するのはリスキーといえます。
OpenType 1.9 incorporates revisions in Draft Amendment 2 of the 4th edition of the ISO/IEC 14496-22 “Open Font Format” standard.
と書かれています。ということは(少なくてもこの版では) まず ISO/IEC 版の改訂を作って、それを Microsoft 版に適用する、という順番で開発してるようです。 DAM 段階で先走ってるのは、投票で覆ることはないという前提で進んでるのでしょうか。
[4] , https://www.iwatafont.co.jp/news/img/about_font.pdf
[8] OpenType フォント・フォーマット, https://aznote.jakou.com/prog/opentype/index.html
[32] 表や用字系や機能などの識別にはタグが使われています。 タグは4文字のASCII文字です。
[57]
データ型としての Tag
は、
uint8
の4つの配列です。
[ 0x20, 0x7E ]
で
UTF-8
のバイトと解釈されます。
>>56
[58]
タグの 0x20 SPACE
は末尾でのみ使えます。
最大3文字で、最初の1文字は 0x20 以外でなければなりません。
>>56
[37]
こういうプロトコル要素では記号類は敬遠されがちですが、
TrueType / OpenType ではそういう忌避はないみたいで、
OS/2
表のように /
が入っていたり、
CFF
表のように
が入っていたりします。
[39] 大文字・小文字を区別する上に、大文字・小文字のどちらも使われています。 パッと見た感じ大文字と小文字の区別だけで使い分けられているものはまだ無いみたいですが。
[101] 大文字は私用 (カスタムタグ) のために割り振られていることもありますが、 タグごとに状況が違います。(各項参照。)
[33] 表以外のタグは Microsoft の仕様書に登録簿 (Registry) があって、そこに登録できることになっています。 Microsoft を含むフォント関係事業者各社が登録しているようです。
[34] なぜか登録制度になっていますが、仕様書に組み込まれていて、 他の規格のように仕様書の改版と独立して登録できる制度とは違うようです。
[35] ISO/IEC 版の ISO/IEC 14496-22 も登録簿部分も規格本文に含めています。
[36] 要求を即時に反映できるとか、 通常の標準化手続きより手軽に登録できるとかのメリットはなさそうで、 名前だけ登録して処理モデルを明確に定義しないで済む相互運用性の抜け穴になっているような。
[60] 仕様書は度々改訂されて版番号が付いていますが、 新しい仕様は古い仕様への追加と修正なので、 (OpenType と TrueType の違い >>22 を除けば) 常に最新版の仕様書を参照をすれば間違いありません。 この意味で仕様書の版は重要ではありません。
[61] OpenType フォントファイル中で使われるいくつかの構造には版があります。 版によって欄が増減したり、解釈が変わったりすることがあります。 フォントの生成時には適切な版番号を設定する必要がありますし、 フォントの解釈時には版番号によって処理を変更する必要があります。
[62] この各構造の版は、仕様書の版とは連動していません。 また、ある構造の版がこれなら他の構造の版はこれ、 といった制約も基本的にはなくて、 各構造の記述や実装の都合でそれぞれ好きに選べるようです。
[83] ほとんどの版番号は大版と小版で表されます。 小版に相当する番号のみで構成されることもあります。
uint16
。>>63uint16
と uint16
の組。 >>63uint32
。 >>63Version16Dot16
。 >>63uint32
。 >>63[84] 表を読む実装は、 版番号を検査しなければなりません。 >>63
[85] 小版(だけ)の変更は、 その書式変更が互換性のある拡張であることを意味しています。 当該大版を理解する実装は、 小版に関わらず安全に処理を進められます。 対応していない小版で拡張された欄を検知できないだけです。 >>63
[87] 未定義や予約とされた欄は、 小版の変更により意味を割り当てられることがあります。 実装はその値に何ら仮定を置くべきではなく、 それらを無視できます。 フォントを出力する際は、 0 を常に書き込むべきです。 検証器は非 0 のとき警告するべきです。 >>63
[86] 大版が認識できないときは、 その表を読んではなりません。 表が存在しないものと扱うべきです。 >>63
[89]
post
のように実際に大版の違いで欄があったりなかったりする事例があります。
post
の場合は数値が大きな (そして新しい) 大版で以前の大版にあった欄が削除されていたり、
数値が大きな大版が現在主に使われているものではなかったりします。
[88]
いくつかの部分表には uint16
の型や書式があります。
型や書式も版と同じく構造を定める役割を担っています。
[90] 例えば lookup に lookupType
があります。
[91] 型や書式はどちらかというと大版の違いに近いものです。 機能性が値によって大きく違っていたり、 欄の構成がまったく違っていたりします。
sfntVersion
[93]
単独のフォントの最上位に当たる
TableDirectory
表には
uint32
の
sfntVersion
欄があり >>92、
フォントの OpenType の版を表します。
[96] この欄の値は版を表すタグである >>63 ないしタグと解釈し得ることがある >>92 とされています。 この欄の一部の値はタグの構文要件を満たしていません。
[95] TrueType outline の OpenType フォントでは、値 0x00010000 を使うべきとされます。 >>92
[97]
CFF データを含む OpenType フォントでは、値
OTTO
(0x4F54544F)
を使うべきとされます。
>>92
[98]
OpenType フォントは TrueType フォントを表す
true
,
typ1
を使うべきではないとされます。
>>92
[100]
OpenType font collection の TTCヘッダーでは、
ttcTag
欄と呼ばれており、
値
ttcf
とします。
>>99
[102] 5-4. フォントの技術情報, , http://www.akenotsuki.com/eyeben/fonts/fontinfo.html
[2] RFC 8081 - The "font" Top-Level Media Type () https://tools.ietf.org/html/rfc8081#section-4.4.3
[11]
.otf
, .otc
(OpenType),
.ttf
, .ttc
(TrueType)
がよく使われています。
[54]
OpenType フォントファイルは、拡張子
.otf
,
.ttf
,
.otc
,
.ttc
を使うべきです。
>>53
[55]
.otc
,
.ttc
は、
font collection file
にのみ使うべきです。
>>53
[40]
TrueType 形式でグリフが格納された OpenType フォントを
.ttf
ファイルとするなど、
.otf
系と .ttf
系はあまり厳密に使い分けられていません
(し拡張子で区別しても意味はありません)。
[47] Microsoft は OpenType Layout Services library (OTLS) を開発し Windows に搭載しています。 OpenType フォントによる文字のレンダリングのための API を Windowsアプリケーションに提供しています。 >>46
[48] 提携企業に公開しているらしいですが、 OSS ではなさそうです。
[46] OpenType glyph processing (part 1) - Typography | Microsoft Docs, alib-ms, https://docs.microsoft.com/ja-jp/typography/develop/processing-part1
The OpenType font format is the central element of the Windows glyph processing model. The OpenType Layout Services library (OTLS), on the other hand, is not essential, but it has great benefits to application developers who need to support glyph processing but want to be insulated from details of the font file format.
[49] 欧米や東アジアの古くからの文字のレンダリング処理だけなら OTLS で実現できるのですが、インド系文字なども扱うには Uniscribe が必要になります。 (Uniscribe は OTLS を置き換えるものではなく、 OTLS と併用するか、 OTLS を内部で間接的に呼び出す形になります。)
[50] その他に各種 OS, DTP ソフトウェア, フォント編集等のソフトウェア, Webブラウザーなどが OpenType や TrueType を実装しています。 その対応の程度は様々です。
[51] 近年では Webフォントの普及と機能拡張が進んで、 OS よりも Webブラウザーの方が OpenType の実装として高機能化してきているかもしれません。
[1]
ttfdump
,
opentype.js,
Typr
[6] fonts - What is the status of TTF support in Internet Explorer? - Stack Overflow ( 版) http://stackoverflow.com/questions/17694143/what-is-the-status-of-ttf-support-in-internet-explorer
[103] OpenType font viewer, , https://manakai.github.io/otfontviewer/
[104] manakai/opentypejs: A modified copy of opentype.js, https://github.com/manakai/opentypejs
[45] OpenType overview - Typography | Microsoft Docs, PeterCon, https://docs.microsoft.com/ja-jp/typography/opentype/
[52] Issues · MicrosoftDocs/typography-issues · GitHub, https://github.com/MicrosoftDocs/typography-issues/issues
[106] Standards – MPEG, https://www.mpeg.org/standards/MPEG-4/22/
[9] OpenTypeフォント: vanillaの日記 () http://vanillasky-room.cocolog-nifty.com/blog/2008/02/opentype-e54f.html
[17] OpenType Feature File Specification | afdko, , http://adobe-type-tools.github.io/afdko/OpenTypeFeatureFileSpecification.html
[18]
全字庫フォント:
name
表にUnicode名の他に
MacChineseTrad 名も入っている (ものもある)。
[19]
Nosutaru-dot M+H 10 Regular:
name
表にUnicode名の他に
MacJapanese 名も入っている。
MacRoman 名はほぼ全項目に入っている。
[105] GitHub - MPEGGroup/OpenFontFormat: Official MPEG repository to discuss issues on Open Font Format (ISO/IEC 14496-22), https://github.com/MPEGGroup/OpenFontFormat