feature parameter

機能 (フォント)

[41] OpenType Layout >>48, >>40 (OTL) >>40 () (のう) (feature(s)) (フィーチャー, フォント () (のう) (font feature(s)) ) は、 OpenType フォントを使って各用字系言語の適切な文字のレンダリングを行うためのグリフ置換や位置調整を行うもので、 そのための情報が各フォントに格納されています。

仕様書

意味

[43] OpenType Layout における機能組版的な能力 (typographic capability) 各種を表すものと説明されています。 >>37

[98] 機能は、 フォント中のグリフをある用字系言語文章 (text) を layout するためどのように使うかの情報を提供するものです。 >>6

[99] 例えばアラビア文字フォントでは initial glyph form (語頭形グリフ) に置換する機能を持つかもしれませんし、 漢字フォントではグリフを垂直に位置付けする (縦書きの) ための機能を持つかもしれません。 >>6

[44] 機能は正しい文字のレンダリングに必須となるものもあれば、 利用者 (著者) の要望に応じてオプションで適用できるものもあります。

[45] 機能活性化 (activate) すると、 グリフを条件に応じて他のグリフに置き換えたり、 グリフの位置を調整したりします。 その規則はフォント依存であり、フォント内にそのための情報が入っています。

[46] 例えば2つの文字字間を調整する kern (カーニング) は、 フォントごとのグリフ次第で調整量が異なってきますので、 どのグリフをどう調整するかを GPOS に格納します。

[47] 機能低水準 (low-level) の操作とされており >>37、 必ずしもそれだけで正しい文字のレンダリングができるわけではなく、 事前に shaping が必要になります。

機能タグ

[22]機能タグ (機能タグ (feature tag) ) で識別されます。 >>6

[100] OpenType では, 用字系, 言語などでタグが使われています OpenTypeタグ が、 それらとは別の名前空間っぽいです。

[101] 慣習として、登録されている機能タグはすべて小文字を使っています。 >>6 実際には数字も使われているので、これは大文字を使わないという意味のようです。 英数字以外は使われていません。

[102] 4つのASCII大文字機能タグは、 事業者空間 (vendor space) として予約 (reserved) されています。 フォント事業者 (font vendor) は、 私的 (private) 機能の識別のためにこれを使うことができます (may) 。 私的な機能の相互運用性は保証されません。 >>6


[112] Microsoft は、フォント開発者が登録済みの機能の機能を実装するときは登録済みの機能タグを使うことを推奨 (encourage) しつつも、 フォント開発者が自身で機能を定義し登録することも認めています (may) >>6 OpenTypeタグ

[113] 登録申請する機能は、 機能タグによって明確に識別される単一の機能性 (single function) を持たなければなりません (must) >>6

[114] 機能性は、最低の有用性の水準 (lowest useful level) において定義されるべき (should) で、 登録済みの他の機能明らかに異なら (distinctly different) なければなりません (must) >>6

[115] 実装詳細を提供する必要はありません (do not have to) >>6

[116] 実際に登録者として Microsoft, Apple, Adobe その他があります。

文脈

[8] OpenType フォントでは GSUB (グリフの置換), GPOS (グリフの位置の調整) に情報が格納されています。

[71] OpenType フォントでは、 BASE (基線) にも情報を格納できます。

[49] なお、 OpenType Layout としては他に JSTF, GDEFがあります。

機能の選択

[52] GSUB GPOS では用字系言語系の組に対して適用される機能を指定できます。

[72] GSUBGPOS は、 用字系言語系機能lookup という構造になっています >>73, >>76用字系言語系が決まると、 それに対して適用可能な機能の一覧を取得できます。 用字系と言語系の一致判定については用字系, 言語系


[53] GSUBGPOS それぞれ、 用字系言語系の組に対して高々1つの機能は必須と指定でき、 その他は任意となります。 >>51

[54] 例えばキリル文字用字系においてセルビア語言語系ロシア語言語系と違って表示したいときに、それを必須とできます。 >>51

[55] この「必須」をどう処理するべきかは定かではありません。例えば未知の機能タグのとき、 どう処理するのが適切なのか不明です。

[58] 機能タグに依存する挙動というのはなくて、 lookup に挙動が書かれているのを束ねたのが機能なので、 未知の機能タグでも適用してしまって構わないのでしょうか?

[56] 「必須」は高々1つしか指定できません。1つの機能に複数の lookup を指定できるので機能性に制約はない >>51 と説明されています。仕様書のこの説明は謎で、 意味的に別の機能でも制約回避のために適当な機能タグでまとめてしまえということなのでしょうか。

[57] 実際のフォントでは言語系的に必須そうなものでもすべてを任意扱いにしていることが多いみたいです。 相互運用性を考えるとフォントごとにまちまちな「必須」で適当に機能が選ばれることを期待するより、 実装側で用字系言語系 (と shaping engine の判断) に応じて適切な機能を有効にするべきなのでしょう。


[74] GSUB, GPOS の各機能は、 それぞれ必ず適用するべきもの、 ある条件下で適用するべきもの、 著者が任意選択で適用できるもの、 と決められています。 各機能の項

[61] GSUB, GPOS の各機能は、 それぞれまったく個別に適用するのではなく、 いくつかまとめて実行できます。 中の lookup の配置によりフォント開発者は相互作用を制御できます >>51 lookup

[62] しかしすべての機能が一度にまとめて処理されるとは限りません。 全体的な処理のどの段階でどの機能を処理するかは OpenType 仕様としては決められていません。 >>51

[63] それでは相互運用可能フォントが作れない気がするのですが... 困ったものです。

[64] 実際上どうなっているのかは shaping 参照。


[75] 適用するべき機能を決定した後、 Feature Variation がある場合には、 それに従って適宜調整します。 >>73, >>76


[109] 機能によっては lookup の種別の提案 ([suggested) が説明に含まれています。 しかしこれは推奨、提案 (recommendations or suggestions) に過ぎません。 lookup をどのように使って機能を実装するかは、 プラットフォーム応用フォントフォント開発者によって違って構いません (may) >>6

[110] 従ってフォントの実装はすべての機能とすべての lookup の種別の組み合わせがあり得ると想定する必要があります。 実際には実用に供されている実装の多くは問題なく対応できるようですが、 フォントを読み書きするライブラリーの類の中には lookup の種別によっては対処できないものもあるようです。

処理

[60] 全体的な処理の流れは文字のレンダリング, shaping 参照。

[59] GSUB, GPOS の処理方法は各項参照。 GSUB, GPOS, lookup


[103] OpenType 仕様書の機能タグの登録簿には、各機能の説明があります。

[105] しかし、グリフの置換や位置付けを適切に実装するために必要 (required) なすべての情報を提供していないことがあります (might) >>6

[106] また、フォントGSUBGPOS にも text processing において機能をいつどこに適用するべきかの情報が含まれていないことがあります。

[107] 多くの場合には text processing client は追加のデータが必要となります。 >>6

[108] すべてに於いて text processing client は機能の適用、結合 (combining) 仲裁 (arbitrating) を経て結果をレンダリングすることに責任を有します。 >>6

[104] 例えば語頭形を表す init について、 GSUB にはそれをいつどこに適用するかの情報がありません。 アラビア文字の文章に於いては character context と joining 特性に基づき connected letter group の始まりを特定し、どのグリフinit 機能を適用して initial glyph form に変更するかを text processing client は決めなければなりません。 >>6

[111] 機能におっては text layout software が機能とどう相互作用することが期待 (expected) されるか、 機能固有の詳細を説明しているものもあります。 >>6

機能引数

[66] 機能は、 () (のう) (ひき) (すう) (ぐん) (Feature Parameters) を指定させることができます。 機能により必須とも、任意ともできます。 >>65

[67] GSUB GPOS 機能には featureParamsOffset があります。 の値は機能の先頭からの Offset です。 >>65

[68] 機能において機能引数群が定義されていない場合や、 定義されていても使用しない場合には、 NULL としなければなりません (must) >>65

[70] 必須なのに NULL が指定された場合や、 定義されていないのに非 NULL が指定された場合に実装がどう処理するべきかは不明です。

[69] 機能引数群の共通の内容は定められておらず、 機能によって異なります。

機能の一覧

[42] 機能OpenType 仕様書内の登録簿で規定されています >>6

[14] フォント機能
tag
機能タグ
name
Friendly name >>6
usage
主たる用法
default
既定の状態
desc
説明
params
引数
css
CSS
tag
aalt
name
Access All Alternates
usage
GSUB 1, 3
desc
利用者が手動で選択できる代替のグリフの候補(群)です。
default
無効
tag
abvf
name
Above-base Forms
usage
GSUB 1
default
自動
desc
above-base form を置き換えます。
tag
abvm
name
Above-base Mark Positioning
usage
GPOS 4, 5
default
自動
desc
基底グリフ上のマークの位置を調整します。
tag
abvs
name
Above-base Substitutions
usage
GSUB 4
default
自動
desc
基底グリフとその上のマーク合字に置き換えます。
tag
afrc
name
Alternative Fractions
desc
tag
akhn
name
Akhand
usage
GSUB 4
default
自動
desc
Akhand合字に置き換えます。
tag
blwf
name
Below-base Forms
usage
GSUB 4
default
自動
desc
below-base form を置き換えます。
tag
blwm
name
Below-base Mark Positioning
usage
GPOS 4, 5
default
自動
desc
基底グリフ下のマークの位置を調整します。
tag
blws
name
Below-base Substitutions
usage
GSUB 4
default
自動
desc
基底グリフとその下のマーク合字に置き換えます。
tag
c2pc
name
Petite Capitals From Capitals
desc
大文字petite capital に置き換えます。
default
無効
usage
GSUB 1
css
font-variant-caps: all-petite-caps
tag
c2sc
name
Small Capitals From Capitals
desc
大文字small capital に置き換えます。
default
無効
usage
GSUB 1
css
font-variant-caps: all-small-caps
tag
calt
name
Contextual Alternates
usage
GSUB 6
default
有効
desc
文脈に応じてグリフを置き換えます。
css
font-variant-ligatures: contextual
tag
case
name
Case-Sensitive Forms
usage
GSUB 1, GPOS 1
desc
oldstyle figurelining figures に置き換えまたは位置調整します。 句読点大文字に合わせたものに置き換えまたは位置調整します。
default
無効
tag
ccmp
name
Glyph Composition/Decomposition
usage
GSUB 2, 4
default
有効
desc
フォント構成の便宜によりグリフを分解したり合成したりします。
css
有効
tag
cfar
name
Conjunct Form After Ro
desc
tag
chws
name
Contextual Half-width Spacing
usage
GPOS 2, 8
default
CJK の advanced layout に対応していないなら、 CJK 横書きのとき、有効
desc
全角幅のグリフ半角幅に変更します。
tag
cjct
name
Conjunct Forms
desc
tag
clig
name
Contextual Ligatures
usage
GSUB
default
有効
desc
文脈依存の合字に置き換えます。
css
font-variant-ligatures: common-ligatures
tag
cpct
name
Centered CJK Punctuation
desc
tag
cpsp
name
Capital Spacing
desc
tag
cswh
name
Contextual Swash
desc
tag
curs
name
Cursive Positioning
usage
GPOS 3
default
有効
desc
続け字の接続位置を調整します。
tag
cv01 ... cv99
name
Character Variant 1 ... Character Variant 99
desc
異体字グリフに置き換えます。
default
無効
usage
GSUB 1, 3
params
名前, 異体字Unicodeスカラー値
css
font-variant-alternates: character-variant(...)
tag
dist
name
Distances
desc
tag
dlig
name
Discretionary Ligatures
usage
GSUB 4
desc
利用者の判断により合字に置き換えます。
default
無効
css
font-variant-ligatures: discretionary-ligatures
tag
dnom
name
Denominators
usage
GSUB 1
default
自動
desc
斜線の後の数字分母用に置き換えます。
tag
dtls
name
Dotless Forms
default
自動
usage
GSUB 1
desc
ij の無点形に置き換えます。
tag
expt
name
Expert Forms
usage
GSUB 1
desc
漢字を expert form に置き換えます。
default
任意
tag
falt
name
Final Glyph on Line Alternates
desc
tag
fin2
name
Terminal Form #2
desc
tag
fin3
name
Terminal Form #3
desc
tag
fina
name
Terminal Forms
default
自動
desc
語末形に置き換えます。
usage
GSUB 1, 5, 6, 8
tag
flac
name
Flattened ascent forms
desc
tag
frac
name
Fractions
default
無効
desc
分数に置き換えます。
usage
GSUB 1, 4
css
font-variant-numeric: diagonal-fractions
tag
fwid
name
Full Widths
default
無効
desc
全角グリフに置き換えます。 欧州フォントでは 0.6em の固定幅グリフに置き換えます。
usage
GSUB 1, GPOS 1
css
font-variant-east-asian: full-width
tag
half
name
Half Forms
desc
tag
haln
name
Halant Forms
desc
tag
halt
name
Alternate Half Widths
usage
GPOS 1
default
CJK の advanced layout に対応していないなら、 CJK 横書きのとき、有効
desc
全角幅のグリフ半角幅に調整します。
css
text-spacing
tag
hist
name
Historical Forms
usage
GSUB 1
desc
歴史的な字形に置き換えます。
default
無効
css
font-variant-alternates: historical-forms
tag
hkna
name
Horizontal Kana Alternates
usage
GSUB 1
desc
横書き用の仮名グリフに置き換えます。
default
無効
tag
hlig
name
Historical Ligatures
desc
tag
hngl
name
Hangul
desc
tag
hojo
name
Hojo Kanji Forms (JIS X 0212-1990 Kanji Forms)
default
無効
desc
JIS X 0212字形に置き換えます。
tag
hwid
name
Half Widths
default
無効
desc
半角グリフに置き換えます。
usage
GSUB 1, GPOS 1
css
text-combine-upright
tag
init
name
Initial Forms
default
自動
desc
語頭形に置き換えます。
usage
GSUB 1, 5, 6, 8
tag
isol
name
Isolated Forms
default
自動
desc
孤立形に置き換えます。
usage
GSUB 1, 5, 6, 8
tag
ital
name
Italics
default
イタリック指定時に有効
desc
イタリックグリフに置き換えます。
usage
GSUB 1
tag
jalt
name
Justification Alternates
desc
tag
jp78
name
JIS78 Forms
usage
GSUB 1, 3
desc
利用者が手動で選択できる JIS X 0208:1978 字形(群)です。
default
無効
css
font-variant-east-asian: jis78
tag
jp83
name
JIS83 Forms
usage
GSUB 1
desc
JIS X 0208:1983字形に置き換えます。
default
無効
css
font-variant-east-asian: jis83
tag
jp90
name
JIS90 Forms
usage
GSUB 1
desc
JIS X 0208:1990字形に置き換えます。
default
無効
css
font-variant-east-asian: jis90
tag
jp04
name
JIS2004 Forms
usage
GSUB 1
desc
JIS X 0213:2004字形に置き換えます。
default
無効
css
font-variant-east-asian: jis04
tag
kern
name
Kerning
usage
GPOS 2, 8
desc
水平カーニング, すなわち隣接グリフとの位置関係を調整します。
default
横書きなら有効。 利用者が無効化や手動調整できてもよい。
css
font-kerning: normal 横書き
tag
lfbd
name
Left Bounds
desc
tag
liga
name
Standard Ligatures
usage
GSUB 4
desc
通常使う合字に置き換えます。
default
有効
css
font-variant-ligatures: common-ligatures
tag
ljmo
name
Leading Jamo Forms
desc
tag
lnum
name
Lining Figures
usage
GSUB 1
desc
lining figure (大文字に合う数字) に置き換えます。
default
無効
css
font-variant-numeric: lining-nums
tag
locl
name
Localized Forms
usage
GSUB 1
desc
地方に適した形に置き換えます。
default
有効、 言語設定等によります。
css
有効
tag
ltra
name
Left-to-right glyph alternates
usage
GSUB 1
desc
左横書きグリフに置き換えます。 ltrm との使い分けがあります。 書字方向依存グリフ
default
自動
tag
ltrm
name
Left-to-right mirrored forms
usage
GSUB 1
desc
左横書きグリフに置き換えます。 ltrm との使い分けがあります。 書字方向依存グリフ
default
自動
tag
mark
name
Mark Positioning
default
有効
desc
基底グリフに対してマークの位置を調整します。
usage
GSUB 4, 5
css
有効
tag
med2
name
Medial Forms #2
desc
tag
medi
name
Medial Forms
default
自動
desc
語中形に置き換えます。
usage
GSUB 1, 5, 6, 8
tag
mgrk
name
Mathematical Greek
desc
tag
mkmk
name
Mark to Mark Positioning
default
有効
desc
マークグリフに対してマークの位置を調整します。
usage
GSUB 6
css
有効
tag
mset
desc
tag
nalt
name
Alternate Annotation Forms
usage
GSUB 1, 3
default
無効
desc
囲み文字に置き換えます。
css
font-variant-alternates: annotation(...)
tag
nlck
name
NLC Kanji Forms
usage
GSUB 1
desc
表外漢字字体表字形に置き換えます。
default
無効
tag
nukt
name
Nukta Forms
usage
GSUB 4
desc
nukta 系に置き換えます。
default
自動
tag
numr
name
Numerators
usage
GSUB 1
desc
斜線とその前の数字分数用に置き換えます。
default
自動
tag
onum
name
Oldstyle Figures
default
無効
usage
GSUB 1
desc
数字oldstlyle に置き換えます。
css
font-variant-numeric: oldstyle-nums
tag
opbd
name
Optical Bounds
desc
tag
ordn
name
Ordinals
usage
GSUB 4, 6
desc
アルファベットグリフ序数標識に置き換えます。
default
無効
css
font-variant-numeric: ordinal
tag
ornm
name
Ornaments
desc
tag
palt
name
Proportional Alternate Widths
usage
GPOS 1
desc
グリフ幅を可変幅用に調整します。
default
無効
tag
pcap
name
Petite Capitals
desc
tag
pkna
name
Proportional Kana
desc
tag
pnum
name
Proportional Figures
default
無効
usage
GSUB 1
desc
数字を可変幅のものに置き換えます。
css
font-variant-numeric: proportional-nums
tag
pref
name
Pre-base Forms
usage
GSUB 4
default
自動
desc
pre-base form を置き換えます。
tag
pres
name
Pre-base Substitutions
usage
GSUB 4, 5
default
自動
desc
pre-base form に置き換えます。
tag
pstf
name
Post-base Forms
usage
GSUB 4
default
自動
desc
post-base form を置き換えます。
tag
psts
name
Post-base Substitutions
usage
GSUB 4
default
自動
desc
post-base form に置き換えます。
tag
pwid
name
Proportional Widths
usage
GSUB 1
desc
可変幅のグリフに置き換えます。
default
市場に合わせて有効でも無効でもよい
tag
qwid
name
Quarter Widths
desc
tag
rand
name
Randomize
desc
tag
rclt
name
Required Contextual Alternates
desc
tag
rkrf
name
Rakar Forms
desc
tag
rlig
name
Required Ligatures
usage
GSUB 4
desc
必須の合字に置き換えます。
default
自動
css
有効
tag
rphf
name
Reph Form
usage
GSUB 4
desc
reph 系に置き換えます。
default
自動
tag
rtbd
name
Right Bounds
desc
tag
rtla
name
Right-to-left alternates
usage
GSUB 1
desc
右横書きグリフに置き換えます。 rtlm との使い分けがあります。 書字方向依存グリフ
default
自動
tag
rtlm
name
Right-to-left mirrored forms
usage
GSUB 1
desc
右横書きグリフに置き換えます。 rtla との使い分けがあります。 書字方向依存グリフ
default
自動
tag
ruby
name
Ruby Notation Forms
usage
GSUB 1
desc
ルビ用のグリフに置き換えます。
default
無効
css
font-variant-east-asian: ruby
tag
rvrn
name
Required Variation Alternates
desc
tag
salt
name
Stylistic Alternates
usage
GSUB 1, 3
desc
利用者が手動で選択できる別様式のグリフの候補(群)です。
default
無効
css
font-variant-alternates: stylistic(...)
tag
sinf
name
Scientific Inferiors
desc
tag
size
name
Optical size
desc
params
tag
smcp
name
Small Capitals
usage
GSUB 1
default
無効
desc
小文字small capital に置き換えます。
css
font-variant-caps: small-caps, font-variant-caps: all-small-caps
tag
smpl
name
Simplified Forms
desc
tag
ss01 ... ss20
name
Stylistic Set 1 ... Stylistic Set 20
usage
GSUB 1
desc
別様式のグリフに置き換えます。
default
無効
params
利用者向けの名前
css
font-variant-alternates: styleset(...)
tag
ssty
name
Math script style alternates
default
自動
usage
GSUB 3
desc
数式 subscript, superscriptグリフに置き換えます。
params
水準 (?)
tag
stch
name
Stretching Glyph Decomposition
desc
tag
subs
name
Subscript
usage
GSUB 1, 2
desc
下付きグリフに置き換えます。
default
無効
css
font-variant-position: sub
tag
sups
name
Superscript
usage
GSUB 1
desc
上付きグリフに置き換えます。
default
無効
css
font-variant-position: super
tag
swsh
name
Swash
desc
tag
titl
name
Titling
desc
tag
tjmo
name
Trailing Jamo Forms
desc
tag
tnam
name
Traditional Name Forms
desc
tag
tnum
name
Tabular Figures
desc
tag
trad
name
Traditional Forms
usage
GSUB 1, 3
desc
中文日本語の伝統的字形に置き換えます。
default
無効
css
font-variant-east-asian: traditional
tag
twid
name
Third Widths
desc
tag
unic
name
Unicase
desc
tag
valt
name
Alternate Vertical Metrics
desc
tag
vatu
name
Vattu Variants
usage
GSUB 4
desc
vattu 系に置き換えます。
default
自動
tag
vchw
name
Vertical Contextual Half-width Spacing
desc
tag
vert
name
Vertical Alternates
usage
GSUB 1
desc
縦書き用のグリフに置き換えます。
default
縦書きのとき有効
css
縦書き
tag
vhal
name
Alternate Vertical Half Metrics
usage
GPOS 1
desc
全角の高さのグリフ半角の高さに調整します。
default
無効、 JLREQ 応用等は適宜適用して良い。
tag
vjmo
name
Vowel Jamo Forms
desc
tag
vkna
name
Vertical Kana Alternates
usage
GSUB 1
desc
縦書き用の仮名グリフに置き換えます。
default
無効
tag
vkrn
name
Vertical Kerning
usage
GPOS 2, 8
desc
垂直カーニング, すなわち隣接グリフとの位置関係を調整します。
default
縦書きなら有効。 利用者が無効化や手動調整できてもよい。
css
font-kerning: normal 縦書き
tag
vpal
name
Proportional Alternate Vertical Metrics
usage
GPOS 1
desc
文字高さ可変での表示用に位置調整します。
default
無効。 vkrn を有効にするとき、 有効にしなければなりません。
tag
vrt2
name
Vertical Alternates and Rotation
usage
GSUB 1
desc
縦書き用のグリフに置き換えます。 横書き文字は回転済のグリフに置き換えます。
default
縦書きのとき有効
css
不使用
tag
vrtr
name
Vertical Alternates for Rotation
desc
tag
zero
name
Slashed Zero
usage
GSUB 1
desc
0斜線付きのグリフに置き換えます。
default
無効
css
font-variant-numeric: slashed-zero

[38] 登録簿は期待される用法を書いているものの、 応用は他の仕様書や用途に応じて適宜仕立てして構わないとされています。 >>37

[39] つまり相互運用性は最初からぶん投げられています...

[15] 仕様書の登録簿の説明は実装に必要な情報が何も書かれていなかったり、 実装方法がわからないことが書かれていたり (GSUB の結果文字コードが変わるから新旧とも覚えておけとか) やばいのが多い...

[16] 似たようなものが違って説明されていて一貫性がないのが、 意図的なのかどうか判断つかないとか。

[17] いろいろな機能が他の機能利用者との相互作用で「override」 したりされたりすると説明されているのだが、 それが処理全体のどの段階で何をどうすることが意図されているのか判断しかねるのが多い。 例えば A の GSUB が B の GSUB を override するとして、 A と B が適用されたとき実装はどうするのが正解なのか。 フォントはどう作るのが正しいのか。 B が先にグリフを置換していたら override もなにも A の適用の前提がなくなる可能性がある。 実装は B を抑制するべきなのか。 フォントは B の出力が A の入力に来ることを想定するべきなのか。

[32] CSS Fonts は一応 OpenType に限定しない形でフォント特性の記述とその利用の方法を規定しつつも、 OpenType機能との対応関係を示しています。 特性OpenType機能にほぼ対応するよう設計されていて、 将来の新しいフォント技術はそれを踏襲するよう要請しています。

[33] そのような建付けにした上で、 CSS としての各機能の説明やフォント開発者に対する推奨が仕様書で説明されています。 実質的に OpenType機能の利用方法を補足説明するものとして利用できます。

font-feature-settings (CSS)

[29] CSS では font-feature-settings プロパティーで適用する機能を指定できます。 >>30

フォントの実例

[1] しっぽり明朝|商用・同人誌利用可能フリーフォント, , https://fontdasu.com/shippori-mincho/

GSUB ss01 - ss02 (引数なし), aalt ccmp dlig frac fwid hwid jp78 jp83 liga nlck ordn salt sups vert vkna vrt2

GPOS abvm mark mkmk palt vpal

[2] GPOSのCursive Attachment Positioningについて - にせねこメモ, https://nixeneko.hatenablog.com/entry/2017/01/14/200258

GPOS curs

[3] OpenTypeフォントで万年カレンダーをつくる - にせねこメモ, https://nixeneko.hatenablog.com/entry/2017/02/13/000000

liga, mkmk

[4] BabelStone Han

GSUB ccmp, GSUB calt

(lookupType 1 substFormat 2, lookupType 4 substFormat 1, lookupType 6 substFormat 3)

GPOS chws, kern (2, 2)

[5] 花園明朝

GSUB aalt

(lookupType 1 substFormat 1)

[7] Nishiki-teki

GSUB " " (0x20 × 4), calt, ccmp, dlig, fina, frac, init, isol, liga, lnum, locl, medi, vert, vkna, vrt2, zero

(lookup 1 - 1, 1 - 2, 4 - 1, 6 - 2, 6 - 3)

GPOS kern, mark, mkmk

[18] 全字庫フォント TW-Sung

GSUB vert, rtla

GPOS はあるが中身空

[20] Honoka Shin Mincho L

GSUB aalt, ccmp, frac, fwid, hwid, ital, jp78, liga, ordn, sups, trad, vert, vkna, vrt2 (1, 2; 3, 1; 2, 1; 4, 1; 6, 3; 1, 1)

GPOS kern (2, 1; 2, 2)

[21] Kikai Chokoku JIS Medium

GSUB: aalt, ccmp, fwid, hwid, jp04, jp78, jp83, jp90, liga, palt, pwid, salt, ss01, ss02, ss03, ss05, ss06, ss07, ss11, ss12, ss20, trad, vert, vkna, vrt2 (1, 2; 3, 1; 4, 1; 1, 1)

GPOS: kern (2, 2; 2, 1)

[23] Makoto Comic

GSUB: aalt, ccmp, dlig, fwid, hist, hwid, jp78, jp83, jp90, liga, locl, nlck, pwid, vert, vrt2 (1, 2; 3, 1; 4, 1; 1, 1)

GPOS: halt, kern, palt, vhal, vkrn, vpal (1, 1; 2, 1; 2, 2; 1, 2)

[24] BIZen Antique Bold

GSUB: aalt, ccmp, dlig, expt, frac, fwid, hojo, hwid, jp78, jp83, jp90, liga, nalt, nlck, numr, ruby, sups, trad, vert, vrt2, zero (1, 2; 3, 1; 4, 1; 1, 1)

[25] >>24 ruby で「、」「。」の点が中央に移動します。 果たしてそれがルビに適したグリフと言えるのかは疑問。

[26] OptimaModoki

GSUB: (空白4つ), abvf, abvs, akhn, blwf, blws, ccmp, clig, half, init, liga, nukt, pref, pstf, psts, rlig, rphf, vatu (4, 1; 2, 1; 1, 2; 6, 3; 1, 1)

GPOS: abvm, blwm, mkmk (4, 1; 6, 1)

[27] STIX Two Text Italic

GSUB: c2sc, case, ccmp, cv01, cv02, cv03, dnom, frac, liga, locl, numr, onum, pnum, smcp, ss01, ss02, subs, sups (7, 1 (1, 1); 7, 1 (1, 2); 7, 1 (2, 1); 7, 1 (4, 1); 7, 1 (6, 3))

GPOS: kern, mark, mkmk (4, 1; 6, 1; 9, 1 (2, 1); 9, 1 (2, 2))

[28] Asana Math

GSUB: dtls, onum, salt, ssty (1, 1; 1, 2; 3, 1)

GPOS: kern (2, 1)

[31] Iosevka, https://be5invis.github.io/Iosevka/

  • 和文の句読点や括弧が連続したときのアキを自動調整するフォント。
  • GPOSのchws/vchwで自動調整します。

[82] 西暦表記を元号による表記にするフォント: mottainaiDTP, http://mottainaidtp.seesaa.net/article/425166883.html

calt

[83] 3桁ごとにカンマが発生するフォント: mottainaiDTP, http://mottainaidtp.seesaa.net/article/395328634.html

calt

[94] 小数点以下の数字が小さく表示されるフォント: mottainaiDTP, https://mottainaidtp.seesaa.net/article/429751961.html?seesaa_related=category

calt

[85] BabelStone Han liga, calt

[86] UnifrakturMaguntia, a Unicode Fraktur Font, , https://unifraktur.sourceforge.net/maguntia.html

ss, cv, hlig, dlig, tnum, lnum, liga, ccmp

[89] How to enable stylistic sets · tonsky/FiraCode Wiki · GitHub, https://github.com/tonsky/FiraCode/wiki/How-to-enable-stylistic-sets

cv, ss, zero, onum

[91] Download - Abyssinica SIL, https://software.sil.org/abyssinica/download/

cv, 言語

[95] OpenTypeフォントで万年カレンダーをつくる - にせねこメモ, https://nixeneko.hatenablog.com/entry/2017/02/13/000000

mkmk

[97] Details of available Stylistic Sets · Issue #246 · adobe-fonts/source-code-pro · GitHub, https://github.com/adobe-fonts/source-code-pro/issues/246

ss, cv, salt, zero

メモ

[19] GSUB lookup が適用された結果、直接または間接に、元の入力に戻ることもあります。

[40] OpenType glyph processing (part 1) - Typography | Microsoft Docs, alib-ms, https://docs.microsoft.com/ja-jp/typography/develop/processing-part1#opentype-fonts

[50] pango で縦書きとその能力, , https://cat-in-136.github.io/2016/04/pango-view-vertical-writing.html

[77] CSS での OpenType 機能の構文, https://helpx.adobe.com/jp/fonts/using/open-type-syntax.html

[84] 5-B3. 霧ゴシック(ゴシック体フォント) (, ) http://www.akenotsuki.com/eyeben/fonts/kirigo.html

横書き時、欧文用の三点リーダが使われてしまうことがある問題に対処しました。

源ノ角ゴシックのfeatureファイル(フォントの設定ファイル)では、「三点リーダがラテン・ギリシア・キリル文字とともに使われる時、グリフを既定の…(ボックス真ん中に点)から欧文用の...(ベースライン付近に点)に切り替える、ただし日本語環境ではこの切り替えをしない」という設定になっているのですが、Windowsではこれがうまく機能せず、日本語の文書でも欧文用の...になってしまうことがしばしばありましたため、この切り替え機能自体を無効化しました。

[92] Safari で Osaka フォントの表示不具合を CSS で対処 | Memorandom, , https://memorandom.whitepenguins.com/posts/safari-osaka/

[93] >>92 配置がずれる謎の不具合を palt で回避する。なんかよくわからんけど palt を有効にすると文字幅計算方法が変わってまともになるってコト!?

[96] エディターで制御文字を表示したいとか、結合文字の点線を表示したいとか、 空き領域の符号位置を表示したいとか、みたいな目的で使える機能があればいいのになあ。