* 仕様書

[REFS[

- [5] 
[CITE@en-us[Registered features, a-e (OpenType 1.9.1) - Typography | [[Microsoft Learn]]]], [[PeterCon]], [TIME[2024-07-07T00:58:54.000Z]], [TIME[2024-12-04T09:20:53.391Z]] <https://learn.microsoft.com/en-us/typography/opentype/spec/features_ae>
- [43] 
[CITE@en-us[Registered features, f-j (OpenType 1.9.1) - Typography | [[Microsoft Learn]]]], [[PeterCon]], [TIME[2024-05-31T17:42:16.000Z]], [TIME[2025-05-13T13:11:57.799Z]] <https://learn.microsoft.com/en-us/typography/opentype/spec/features_fj>

]REFS]

* [CODE[aalt]]

[6] 
[DFN[[CODE[aalt]]]]
は、
Access All Alternates
とされています。
[SRC[>>5]]

[7] 
選択された[[文字]]のすべての[RUBYB[[[異体]]][variation]]にアクセス可能とするものです。
[SRC[>>5]]

[11] 
次のような状況が想定されています。 [SRC[>>5]]

- [8] 
[[応用]]は[RUBYB[望ましい][desired]][[グリフ]]に通常アクセスするための[[フォント機能]]に対応していないことがあります。
- [9] 
[[利用者]]は通常の[RUBYB[置換][substitution]]により対応される文脈以外で[[グリフ]]を必要とすることがあります。
- [10] 
[[利用者]]は望ましい[[グリフ]]が得られる[[フォント機能]]を知らないかもしれません。

[19] 
ということで他の様々な[[フォント機能]]で利用できる別字形をみな含めることが期待されているようです。
他に適当な[[フォント機能]]がないものを含めても構わなそうです。

[20] 
[[フォント]]編集ソフトウェアは他の[[フォント機能]]の定義を参照してひとまとめにできるような仕組みを提供すると有用かもしれません。

[12] 
既定の[[グリフ]]を選択肢の1つに含めることが[RUBYB[できます][can]]。
その場合は最初の選択肢とする[RUBYB[べきです][should]]。
[SRC[>>5]]

[18] 
[[応用]]は最初の[[グリフ]]が[RUBYB[好ましい形][preferred form]]と想定して[RUBYB[構いません][may]]。
[[フォント開発者]]はその想定で並べる[RUBYB[べきです][should]]。
[SRC[>>5]]


[13] 
[[合字]]の構成要素の[[グリフ]]の代替として[[合字]]の[[グリフ]]を含める[RUBYB[べきではありません][should not]]。
[SRC[>>5]]

[EG[

[14] 
[CH[f]] の [CODE[aalt]] に [CH[fi]] を含めるべきではありません。
[SRC[>>5]]
もちろん [CH[fi]] の [CODE[aalt]] として別字形の [CH[fi]] を含めるのは適当です。

]EG]

[15] 
同じ typographic family に属する別の[[フォント]]で同じ代替があるなら、
順序は揃える[RUBYB[べきです][should]]。
[SRC[>>5]]

;; [16] しかしどのような[[グリフ]]を提供するべきか一般的な規則はなく、
[[フォント]]の開発者が決められます。

;; [17] 
[[Adobe-Japan1]] や [[Adobe-GB]] などでは共通して利用できる定義のリストが一般公開されています。
各項参照。

[1] 
通常は [CODE[GSUB]] [F[[CODE[lookupType]]]] [N[3]] を使う[RUBYB[べきです][should]]。
[SRC[>>5]]

[2] 
代替が1つだけのときは [CODE[GSUB]] [F[[CODE[lookupType]]]] [N[1]] を使うことが[RUBYB[できます][could]]。
[N[3]] と [N[1]] の併用も[RUBYB[できます][could]]。
[SRC[>>5]]

[21] 
その他の [[lookup]] は[RUBYB[非推奨][not recommended]]です。 [SRC[>>5]]
しかし[[フォント機能]]全般の通則として、推奨されない [CODE[GSUB]] や [CODE[GPOS]]
が禁止されているわけではありません。


[22] 
[[応用]]は、[[利用者]]の[[文書]]におけるどの[[グリフ]]が代替形を持つかを[[利用者]]に示す[RUBYB[べきです][should]]。
[SRC[>>5]]

[23] 
そして[[利用者]]が代替[[グリフ]]を選択する手段を[[利用者]]に提供する[RUBYB[べきです][should]]。
文脈内に順番に代替形を表示させることもできますし、
すべての代替形を同時に表示するパレットを提示することもできますし、
そうした手法から[[利用者]]に選択肢を提示することもできます。
代替が1つだけのときは、代替形と既定形を直接切り替えることもできます。
[SRC[>>5]]


* [CODE[calt]]

[SEE[ [[calt]] ]]

* [CODE[cswh]]

[SEE[ [[cswh]] ]]

* [CODE[cv[VAR[*]]]]

[24] 
[[フォント機能]]
[DFN[[CODE[cv01]]]] から [DFN[[CODE[cv99]]]]
は
Character Variant 1 から Character Variant 99
とされています。
[SRC[>>5]]

[31] 
[CODE[cv[VAR[*]]]]
は1つの[[文字]]か、[[大文字]]と[[小文字]]や[[基底文字]]と[[合成済み文字]]のような近い関係にある[[文字]]群にのみ適用されるような[[グリフ]]の[[異体]]に使う[RUBYB[べきです][should]]。
[SRC[>>5]]

[25] 
ある[[文字]]の[RUBYB[[[異体]]][variation]]が他の[[文字]]の[[異体]]とは[RUBYB[体系的][systematically]]には関係していないような
stylistic-variant [[グリフ]]を持つことがあります。
[SRC[>>5]]

[26] 
また、[[異体]]がある[[文字]]とその casing pair ([[大文字]]・[[小文字]]違いの[[文字]])
や関係する[[合成済み文字]]には存在するものの、
他の無関係の[[文字]]には適用できないことがあります。
[SRC[>>5]]

[27] 
場合によっては、個々の [[Unicode文字]]に別々に[[グリフ]]の[[異体]]の制御を提供する必要があるかもしれません。
[SRC[>>5]]

[28] 
[CODE[ss[VAR[*]]]] は[RUBYB[広い範囲][broad set]]の [[Unicode文字]]に適用される[RUBYB[頻用][recurring]]の
stylistic variations を想定していますが、
[CODE[cv[VAR[*]]]]
は広い範囲の [[Unicode文字]]ではなく特定の[[文字]]の[[異体]]を想定しています。
[SRC[>>5]]

[29] 
[CODE[salt]] は[[グリフ]]の[[異体]]へのアクセスを提供するものの、
[[応用]]が[[文字]]単位で制御できません。
[CODE[cv[VAR[*]]]]
はより[RUBYB[大きな粒度][greater granularity]]で制御できます。
[SRC[>>5]]

[30] 
[CODE[locl]]
は特定の[[言語]]で[RUBYB[好まれる][preferred]]ような[[文字]]の[[異体]]に使いますが、
すべての関連する[[言語]]に対して特定の[[言語系]]に[[グリフ]]の[[異体]]を関連付けることが[RUBYB[できないかもしれません][might not be feasible]]。
例えば特定の[[言語]]の要件が[[フォント]]の開発時に知られてい[RUBYB[ないかもしれません][might not]]。
[SRC[>>5]]
そうした場合には[[言語]]を特定しないで使える [CODE[cv[VAR[*]]]] が有用です。


[32] 
[CODE[GSUB]] [F[[CODE[lookupType]]]] [N[3]]
や、[[異体]]が1つなら
[CODE[GSUB]] [F[[CODE[lookupType]]]] [N[1]]
が[RUBYB[[[推奨]]][recommended]]されています。
[SRC[>>5]]
他の [CODE[GSUB]] や [CODE[GPOS]] が禁止されているわけではありません。

[33] 
各 [CODE[cv[VAR[*]]]]
に於いて[[異体]]の数はすべての[[グリフ]]に対して同じである[RUBYB[べき][should]]で、
順序は対応する (同じ[[異体]]の順になるよう並べる) [RUBYB[べき][should]]です。
[SRC[>>5]]


[34] 
[[feature parameter]] として、
[CODE[name]] [[表][OpenType表]]を参照する形で、

- [35] [[利用者インターフェイス]]で使う[[フォント機能]]の[RUBYB[名札][label]]
- [36] [[tooltip]] で使う短い説明の[RUBYB[文章][text]]
- [37] [[フォント機能]]の効果を示す例文
- [38] 各[[異体]]について、[[利用者インターフェイス]]で使う名札

を記述できます。また、[[フォント機能]]の適用対象となる [[Unicode文字]]を記述できます。
[SRC[>>5]]

[39] 
[CODE[name]] によって複数の[[言語]]を含められますが、
fallback として [[English]] の[[文字列]]を含める[RUBYB[べきです][should]]。
[SRC[>>5]]

;; [40] こんなところにも謎の[[英語帝国主義]]が!?
[[文字]]の違いの説明なんてその[[言語]]以外で説明するのが難しいケースの方が多そうですが...


[41] 
既定では無効とする[RUBYB[べきです][should]]。
[[応用]]は[[グリフ]]パレットのような形で[[グリフ]]の[[異体]]を表示[RUBYB[できます][can]]。
[[feature parameter]]
が指定されていれば、[[利用者インターフェイス]]で活用できます。
[SRC[>>5]]

[42] 
[[合字]]や contextual form の
obligatory substitution
が必須の
[[complex script]] 
で使われる問は、
obligatory script behavior
の[[フォント機能]]より前に適用される[RUBYB[べきです][should]]。
[SRC[>>5]]

* [CODE[falt]]

[SEE[ [[falt]] ]]

* [CODE[hist]]

[44] 
[[フォント機能]] 
[DFN[[CODE[hist]]]]
は、
Historical Forms
とされています。
[SRC[>>43]]

[45] 
[[フォント機能]]
[CODE[hist]]
は、
[RUBYB[既定][default]] ([RUBYB[現在][current]]) の[RUBYB[字形][form]]を[RUBYB[歴史的な代替形][historical alternates]]に[RUBYB[置き換え][replace]]ます。
[RUBYB[過去][past]]には[RUBYB[一般的に使われていた][in common use]][RUBYB[字形][letterforms]]が今日では[RUBYB[時代錯誤的][anachronistic]]になっていることがあり、
[[フォント]]によってはそうした[RUBYB[歴史的字形][historical forms]]を含めて
[RUBYB[「時代」的な効果][“period” effect]]に使えるようにしています。
[SRC[>>43]]

[EG[
[46] 
[CH[s]] の long form が該当します。
[SRC[>>43]]
]EG]

[EG[
[47] 
古い
Fraktur k
が該当します。
[SRC[>>43]]
]EG]

[EG[
[49] 
[CITE[Adobe Jenson]]
では
archaic forms 
の
[CH[M]], [CH[Q]], [CH[Z]]
の呼び出しに使えます。
[SRC[>>43]]

]EG]

[53] 
具体的にどのような旧字形を実装するべきかは [[OpenType]] としては特に定められておらず、
[[フォント]]に完全に委ねられています。

[54] 
分野依存の基準なり[[事実上の標準]]なりが成立していても良さそうなものですが、見当たりません。

[56] 
[[OpenType]] 仕様書の例示はすべて[[ラテン文字]]関連です。それ以外が特に禁止されているわけではありませんが、
特に具体的に使い方が示されているわけでもありません。

[55] 
[[漢字]]については [CODE[trad]] その他が特に用意されています。そちらを使うのが望ましいでしょう。

-*-*-


[50] 
[CODE[GSUB]] [F[[CODE[lookupType]]]] [N[1]] 
が[RUBYB[推奨][recommended]]されています。
[SRC[>>43]]

[48] 
[CODE[hist]] は単一文字のみ扱います。
[RUBYB[歴史的効果][historical effect]]のためには[RUBYB[[[合字]]][ligatures]]も使われることがありますが、
それには [CODE[hlig]] を使います。
[SRC[>>43]]

[51] 
技術的には他の [F[[CODE[lookupType]]]] や [CODE[GPOS]]
も禁止されているわけではありませんが、
>>48 の通りあまり好ましくない用法とされているようです。

[52] 
[CODE[hist]]
は既定で無効とする[RUBYB[べき][should]]であり、
[[グリフ]]の[[連なり]]に対して[[文書]]の[[マーク付け]]、
[[利用者]]の制御、
その他[[応用]]依存の方法で適用できます。
[SRC[>>43]]



* [CODE[palt]]

@@
[SEE[ [[palt]] ]]
[SEE[ [[apkn]] ]]

* 関連

[4] 共通事項は[[フォント機能]]参照。

* メモ