[1] [DFN[[CODE(MIME)[font/[VAR[*]]]]]] は、[[フォント]]のデータに使われることのある[[媒体型]]です。

* 仕様書

[REFS[
- [7] '''[CITE@en[RFC 8081 - The "font" Top-Level Media Type]] ([TIME[2017-03-01 12:40:02 +09:00]]) <https://tools.ietf.org/html/rfc8081>'''
]REFS]

* 意味

[12] 本[[最上位型]]の [[MIME型]]で識別される[[内容]]が、
これを[[フォント]]データとして処理するためには[[フォントレンダリングエンジン]]など
(場合によっては[[テキストレイアウトエンジン]]や [[shaping engine]] も。)
の特定の[RUBYB[[[図形]]]@en[graphic]][[部分システム]]が必要であり、
それには更に一定水準の [[CPU]] 性能や[[メモリー]]容量のような[[ハードウェア]]能力が必要である、
ということを示しています。 [SRC[>>7]]

[13] [[データ形式]]や[[フォント]]情報の解釈方法などは特に定めません [SRC[>>7]]。

[14] [[MIME型]]の[F[部分型]]が、[[フォント]]形式の名前を表します [SRC[>>7]]。

* 処理

[15] 未知の [CODE(MIME)@en[font/[VAR[*]]]] [[MIME型]]は、
[CODE(MIME)@en[application/octet-stream]] として扱う[RUBYB[べき]@en[should]]です
[SRC[>>7]]。

[16] 共通の[[フォント]]処理システムのようなものがあれば、
未知の [[MIME型]]であってもそちらに渡しても構いません [SRC[>>7]]。

* 素片識別子

[38] 新しい [[MIME型]]を登録する場合、複数の[[フォント]]を含めることができるなら、
[[素片識別子]]も定義する[RUBYB[べき]@en[should]]です [SRC[>>7]]。

[39] 単一の[[フォント]]しか含まれない場合にどうするべきかには何の言及もありません。

[40] 複数の[[フォント]]が含まれるべき場合に採用しなければならないとは書かれていませんが、
次のような[[素片識別子]]が規定されており、採用されることが期待されているものと推測されます。

-*-*-

[17] [[font collection]] の[[素片識別子]]は、
[[ISO/IEC 14496-22:2015]] [[PostScript name]] ([[name ID]] = [N[6]])
によって特定の[[フォント]]を識別します [SRC[>>7]]。

[23] すなわち、 [ [CODE(char)[U+0031]], [CODE(char)[U+007E]] ] の[[文字]]のうち、
[CODE[ [ ]], [CODE[ ] ]], [CODE[(]], [CODE[)]], [CODE[{]], [CODE[}]],
[CODE[<]], [CODE[>]], [CODE[/]], [CODE[%]] を''除いた''もので構成される63[[文字]][[以下]]の[[文字列]]です。
[SRC[>>7]]

[REFS[
- [37] 認められる[[文字]]の一覧:
[CITE@en[Character set "a character in PostScript name"]] ([TIME[2017-03-02 19:14:15 +09:00]]) <https://chars.suikawiki.org/set/%24rfc8081%3Apostscript-name-char>
]REFS]

;; [24] [[空文字列]]は認められるのでしょうか?

[25] このうち、 [CODE["]], [CODE[#]], [CODE[\]], [CODE[^]], [CODE[`]], [CODE[|]]
は [[RFC 3986]] [[素片識別子]]では使うことができず、[[パーセント符号化]]しなければなりません
[SRC[>>7]]。

[27] [[URL]] [VAR[URL]] で [[font collection]] [VAR[コレクション]]から選ばれるべき[[フォント]]は、
次のように決定します [SRC[>>7]]。

[FIG(steps)[
= [26] [VAR[URL]] の[F[素片識別子]]が [CODE[null]] でない場合、
== [28] [VAR[名前]]を、[VAR[URL]] の[F[素片識別子]]に[[パーセント復号]]を適用した結果に設定します。
== [29] [VAR[フォント]]を、[VAR[コレクション]]内の [F[PostScript name]] が[VAR[名前]]の[[フォント]]に設定します。
== [30] [VAR[フォント]]が [CODE[null]] でない場合、
=== [31] [VAR[フォント]]を返し、ここで停止します。
== [32] それ以外の場合、
=== [33] [VAR[コレクション]]内の最初の[[フォント]]を返します。
= [34] それ以外の場合、
== [35] [VAR[コレクション]]内の最初の[[フォント]]を返します。
]FIG]

[36] なお、[VAR[コレクション]]内の[[フォント]]の順序は[[フォント]]の改訂により変化する可能性がありますから、
最初の[[フォント]]が選ばれることに依存するのは懸命ではありません [SRC[>>7]]。

[46] 本[[素片識別子]]形式は、次の [[MIME型]]で採用されています。

[FIG(short list)[
- [CODE(MIME)@en[font/collection]]
- [CODE(MIME)@en[font/woff2]]
]FIG]

[HISTORY[
[277] [[css-fonts]] は、 (特に [CODE[font/[VAR[*]]]] に限らず) [[フォント]]の[[素片識別子]]が定義されていない場合に、
整数 ([[1起源]]) の[[素片識別子]]で識別する[SHOULD[べき]]だと規定していました [SRC[>>41]]
が、 後に削除されました [SRC[>>47]]。
]HISTORY]

-*-*-

[42] 個別の[[フォント]]形式の[[素片識別子]]は、各 [[MIME型]]の項を参照。

* 一覧

[FIG(list short)[ [2] [CODE(MIME)@en[font/[VAR[*]]]] [[MIME型]]の一覧
,[CODE(MIME)@en[[[font/x-bdf]]]]
,[CODE(MIME)@en[font/collection]]
,[CODE(MIME)@en[[[font/x-dos]]]]
,[CODE(MIME)@en[[[font/eot]]]]
,[CODE(MIME)@en[[[x-font/eot]]]]
,[CODE(MIME)@en[[[font/x-figlet]]]]
,[CODE(MIME)@en[[[font/x-framemaker]]]]
,[CODE(MIME)@en[[[font/x-libgrx]]]]
,[CODE(MIME)@en[[[font/vnd.ms-fontobject]]]]
,[CODE(MIME)@en[[[font/opentype]]]]
,[CODE(MIME)@en[[[font/otf]]]]
,[CODE(MIME)@en[[[font/x-sunos-news]]]]
,[CODE(MIME)@en[[[font/x-pcf]]]]
,[CODE(MIME)@en[[[font/x-linux-psf]]]]
,[CODE(MIME)@en[font/sfnt]]
,[CODE(MIME)@en[[[font/x-snf]]]]
,[CODE(MIME)@en[[[font/x-speedo]]]]
,[CODE(MIME)@en[[[font/x-tex]]]]	
,[CODE(MIME)@en[[[font/x-tex-tfm]]]]
,[CODE(MIME)@en[[[font/truetype]]]]
,[CODE(MIME)@en[[[font/ttf]]]]
,[CODE(MIME)@en[[[x-font/ttf]]]]
,[CODE(MIME)@en[[[font/type1]]]]
,[CODE(MIME)@en[[[font/x-vfont]]]]
,[CODE(MIME)@en[[[font/x-hp-windows]]]]
,[CODE(MIME)@en[[[font/woff]]]]
,[CODE(MIME)@en[[[font/x-woff]]]]
,[CODE(MIME)@en[[[x-font/woff]]]]
]FIG]

* 引数

[43] 共通の[[引数]]はありません。

[44] 複数の [[MIME型]]で同じように定義されている[[引数]]はいくつかあります。

[FIG(short list)[
- [CODE(MIME)@en[outlines]]
- [CODE(MIME)@en[layout][layout (MIME型)]]
]FIG]

[45] 新規[[MIME型]]の登録に関する規定の中に、
[[コンマ]]区切りで未知の値があれば無視するべきという謎の規定 [SRC[>>7]] がありますが、
文脈的にはこれらの[[引数]] (やそれと同様の[[引数]]?) を使う場合の処理に言及したかったようにみえます。

* 関連

[3] ちなみに、他に [CODE(MIME)[[[application/x-font]]]]
というのも使われていることがわかっています。

* 歴史

[8] [CODE[font/[VAR[*]]]] は古くから提案され、[[非標準]]ながら長年あちこちで使われてきました。
しかし [[IETF]] は[[最上位型]]の新規追加に極めて慎重で、
現実に歩み寄ることを頑なに拒み続けてきました。

[18]
[CITE[Web Printing]] ([CODE[1998-05-13 20:45:28 +09:00]] 版) <http://www.w3.org/Printing/chase.html>
([[名無しさん]])


[19]
[CITE@en[draft-singer-font-mime-00 - The Font Primary Content Type for Multipurpose Internet Mail Extensions]] ([TIME[2008-05-25 11:55:34 +09:00]] 版) <http://tools.ietf.org/html/draft-singer-font-mime-00>

** 承認

[10] 2010年代に入り、 [[Web Fonts]] の普及により[[フォント]]の [[MIME型]]に再び注目が集まりました。
[[W3C]] で[[フォント]]や [[CSS]] に関する作業を担当する [[Chris Lilley]]
が中心となり、正式に [CODE[font/[VAR[*]]]] を[[標準化]]する動きが起きました。
[TIME[2017年2月][2017-02]]になって、ようやく [DFN[RFC 8081]] が出版されるに至りました。

[20] [CITE[IRC logs: freenode / #whatwg / 20100628]]
([TIME[2010-07-04 18:57:06 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20100628#l-498>

[21] [CITE[IRC logs: freenode / #whatwg / 20121031]]
( ([TIME[2012-11-23 14:34:19 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20121031#l-895>

[22] [CITE[IRC logs: freenode / #whatwg / 20121117]]
( ([TIME[2012-12-02 12:59:20 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20121117>

[4] [CITE@en[draft-singer-font-mime-00 - The Font Primary Content Type for Multipurpose Internet Mail Extensions]]
([TIME[2015-01-25 21:17:37 +09:00]] 版)
<https://tools.ietf.org/html/draft-singer-font-mime-00>

[5] [CITE@en[Re: Font MIME types]]
([[Chris Lilley]] 著, [TIME[2015-04-23 02:04:40 +09:00]] 版)
<https://lists.w3.org/Archives/Public/www-style/2015Apr/0334.html>

[6] [CITE@en[draft-ietf-justfont-toplevel-06 - The font Top Level Type]]
([TIME[2016-12-20 05:28:30 +09:00]])
<https://tools.ietf.org/html/draft-ietf-justfont-toplevel-06>

[9] [CITE@en[RFC 8081 - The "font" Top-Level Media Type]] ([TIME[2017-03-01 12:40:02 +09:00]]) <https://tools.ietf.org/html/rfc8081>

[11] それにしても [[IETF]] が関わるとあらゆる出来事の進みが遅くなるんですね!


- [41] [CITE@en[CSS Fonts Module Level 3]] ([TIME[2016-12-31 17:32:15 +09:00]]) <https://drafts.csswg.org/css-fonts/#src-desc>
-- [276] 旧 [CITE@en[CSS Fonts Module Level 3]] ([TIME[2013-09-17 15:52:00 +09:00]] 版) <http://dev.w3.org/csswg/css-fonts/#src-desc>
- [47] [CITE@en[Fix #2205 by referencing RFC8081 for collection fragment syntax]]
([[svgeesus]]著, [TIME[2018-01-26 06:43:53 +09:00]])
<https://github.com/w3c/csswg-drafts/commit/d4e059749a1e84e5845398b853b841f7122ddccd>
- [48] [CITE@en['''['''css-fonts-4''']''' Support Font Collection File Formats · Issue #2205 · w3c/csswg-drafts]] ([TIME[2018-01-27 16:57:36 +09:00]]) <https://github.com/w3c/csswg-drafts/issues/2205>


[49] [CITE@en[Update font types list and sniffing]]
([[domenic]]著, [TIME[2018-02-06 06:09:50 +09:00]])
<https://github.com/whatwg/mimesniff/commit/e29b9f4a22843bf6c7f0177223b0147bc03e37f7>

[50] [CITE@en[Reflect RFC 8081 about font MIME type · Issue #23 · whatwg/mimesniff]]
([TIME[2018-02-11 18:49:19 +09:00]])
<https://github.com/whatwg/mimesniff/issues/23>

[51] [CITE@en[Support for WOFF File Format 2.0 · Issue #28 · whatwg/mimesniff]]
([TIME[2018-02-11 18:50:51 +09:00]])
<https://github.com/whatwg/mimesniff/issues/28>

[52] [CITE@en[Update font types list and sniffing by domenic · Pull Request #57 · whatwg/mimesniff]]
([TIME[2018-02-11 18:51:39 +09:00]])
<https://github.com/whatwg/mimesniff/pull/57>

[53] [CITE@ja[MKVのフォント埋め込み — faireal.net]], [TIME[2021-09-18T18:29:20.000Z]], [TIME[2023-11-23T14:00:46.725Z]] <https://yosei.fi/articles/9/22/#e91020>


[54] 
>>53 なんかよくわからんけど地獄が広がっているようだ...

