[41] OpenType Layout >>48, >>40 (OTL) >>40 の機能 (フィーチャー, フォント機能) は、 OpenType フォントを使って各用字系、言語の適切な文字のレンダリングを行うためのグリフ置換や位置調整を行うもので、 そのための情報が各フォントに格納されています。
[43] OpenType Layout における機能は組版的な能力各種を表すものと説明されています。 >>37
[98] 機能は、 フォント中のグリフをある用字系や言語で文章を layout するためどのように使うかの情報を提供するものです。 >>6
[99] 例えばアラビア文字のフォントでは initial glyph form (語頭形のグリフ) に置換する機能を持つかもしれませんし、 漢字のフォントではグリフを垂直に位置付けする (縦書きの) ための機能を持つかもしれません。 >>6
[44] 機能は正しい文字のレンダリングに必須となるものもあれば、 利用者 (著者) の要望に応じてオプションで適用できるものもあります。
[45] 機能を活性化すると、 グリフを条件に応じて他のグリフに置き換えたり、 グリフの位置を調整したりします。 その規則はフォント依存であり、フォント内にそのための情報が入っています。
[47] 機能は低水準の操作とされており >>37、 必ずしもそれだけで正しい文字のレンダリングができるわけではなく、 事前に shaping が必要になります。
[22] 各機能はタグ (機能タグ) で識別されます。 >>6
[100]
OpenType では表, 用字系, 言語などでタグが使われています
[101] 慣習として、登録されている機能タグはすべて小文字を使っています。 >>6 実際には数字も使われているので、これは大文字を使わないという意味のようです。 英数字以外は使われていません。
[102] 4つのASCII大文字の機能タグは、 事業者空間として予約されています。 フォント事業者は、 私的な機能の識別のためにこれを使うことができます。 私的な機能の相互運用性は保証されません。 >>6
[112]
Microsoft は、フォント開発者が登録済みの機能の機能を実装するときは登録済みの機能タグを使うことを推奨しつつも、
フォント開発者が自身で機能を定義し登録することも認めています。
>>6
[113] 登録申請する機能は、 機能タグによって明確に識別される単一の機能性を持たなければなりません。 >>6
[114] 機能性は、最低の有用性の水準において定義されるべきで、 登録済みの他の機能と明らかに異ならなければなりません。 >>6
[8]
OpenType フォントでは
GSUB
表 (グリフの置換),
GPOS
表 (グリフの位置の調整)
に情報が格納されています。
[71]
OpenType フォントでは、
BASE
表 (基線)
にも情報を格納できます。
[49]
なお、 OpenType Layout としては他に
JSTF
, GDEF
各表があります。
[52]
GSUB
表や
GPOS
表では用字系と言語系の組に対して適用される機能を指定できます。
[72]
GSUB
と GPOS
は、
用字系 → 言語系 → 機能 → lookup
という構造になっています >>73, >>76。
用字系と言語系が決まると、
それに対して適用可能な機能の一覧を取得できます。
[53]
GSUB
と GPOS
それぞれ、
用字系と言語系の組に対して高々1つの機能は必須と指定でき、
その他は任意となります。
>>51
[55] この「必須」をどう処理するべきかは定かではありません。例えば未知の機能タグのとき、 どう処理するのが適切なのか不明です。
[56] 「必須」は高々1つしか指定できません。1つの機能に複数の lookup を指定できるので機能性に制約はない >>51 と説明されています。仕様書のこの説明は謎で、 意味的に別の機能でも制約回避のために適当な機能タグでまとめてしまえということなのでしょうか。
[57] 実際のフォントでは言語系的に必須そうなものでもすべてを任意扱いにしていることが多いみたいです。 相互運用性を考えるとフォントごとにまちまちな「必須」で適当に機能が選ばれることを期待するより、 実装側で用字系と言語系 (と shaping engine の判断) に応じて適切な機能を有効にするべきなのでしょう。
[74]
GSUB
, GPOS
の各機能は、
それぞれ必ず適用するべきもの、
ある条件下で適用するべきもの、
著者が任意選択で適用できるもの、
と決められています。
[61]
GSUB
, GPOS
の各機能は、
それぞれまったく個別に適用するのではなく、
いくつかまとめて実行できます。
表中の lookup の配置によりフォント開発者は相互作用を制御できます
>>51。
[62] しかしすべての機能が一度にまとめて処理されるとは限りません。 全体的な処理のどの段階でどの機能を処理するかは OpenType 仕様としては決められていません。 >>51
[64] 実際上どうなっているのかは shaping 参照。
[75] 適用するべき機能を決定した後、 Feature Variation 表がある場合には、 それに従って適宜調整します。 >>73, >>76
[109] 機能によっては lookup の種別の提案が説明に含まれています。 しかしこれは推奨、提案に過ぎません。 lookup をどのように使って機能を実装するかは、 プラットフォーム、応用、フォント、フォント開発者によって違って構いません。 >>6
[110] 従ってフォントの実装はすべての機能とすべての lookup の種別の組み合わせがあり得ると想定する必要があります。 実際には実用に供されている実装の多くは問題なく対応できるようですが、 フォントを読み書きするライブラリーの類の中には lookup の種別によっては対処できないものもあるようです。
[60] 全体的な処理の流れは文字のレンダリング, shaping 参照。
[59]
GSUB
, GPOS
の処理方法は各項参照。
[103] OpenType 仕様書の機能タグの登録簿には、各機能の説明があります。
[105] しかし、グリフの置換や位置付けを適切に実装するために必要なすべての情報を提供していないことがあります。 >>6
[106]
また、フォントの GSUB
や GPOS
にも text processing において機能をいつどこに適用するべきかの情報が含まれていないことがあります。
[107] 多くの場合には text processing client は追加のデータが必要となります。 >>6
[108] すべてに於いて text processing client は機能の適用、結合、仲裁を経て結果をレンダリングすることに責任を有します。 >>6
[104]
例えば語頭形を表す init
について、 GSUB
にはそれをいつどこに適用するかの情報がありません。
アラビア文字の文章に於いては character context と joining 特性に基づき
connected letter group
の始まりを特定し、どのグリフに init
機能を適用して
initial glyph form に変更するかを text processing client は決めなければなりません。
>>6
[111] 機能におっては text layout software が機能とどう相互作用することが期待されるか、 機能固有の詳細を説明しているものもあります。 >>6
[66] 機能は、 機能引数群表を指定させることができます。 機能により必須とも、任意ともできます。 >>65
[67]
GSUB
表や
GPOS
表の機能表には
featureParamsOffset
欄があります。
欄の値は機能表の先頭からの Offset です。
>>65
[68]
機能において機能引数群表が定義されていない場合や、
定義されていても使用しない場合には、
NULL
としなければなりません。
>>65
[70]
必須なのに NULL
が指定された場合や、
定義されていないのに非 NULL
が指定された場合に実装がどう処理するべきかは不明です。
[42] 機能は OpenType 仕様書内の登録簿で規定されています >>6。
機能タグ | Friendly name >>6 | 主たる用法 | 既定の状態 | 説明 | 引数 | CSS |
---|---|---|---|---|---|---|
aalt | Access All Alternates | GSUB 1, 3 | 無効 | 利用者が手動で選択できる代替のグリフの候補(群)です。 | ||
abvf | Above-base Forms | GSUB 1 | 自動 | above-base form を置き換えます。 | ||
abvm | Above-base Mark Positioning | GPOS 4, 5 | 自動 | 基底グリフ上のマークの位置を調整します。 | ||
abvs | Above-base Substitutions | GSUB 4 | 自動 | 基底グリフとその上のマークの合字に置き換えます。 | ||
afrc | Alternative Fractions | 無効 | 分数形に置き換えます。 |
font-variant-numeric: stacked-fractions | ||
akhn | Akhand | GSUB 4 | 自動 | Akhand を合字に置き換えます。 | ||
blwf | Below-base Forms | GSUB 4 | 自動 | below-base form を置き換えます。 | ||
blwm | Below-base Mark Positioning | GPOS 4, 5 | 自動 | 基底グリフ下のマークの位置を調整します。 | ||
blws | Below-base Substitutions | GSUB 4 | 自動 | 基底グリフとその下のマークの合字に置き換えます。 | ||
c2pc | Petite Capitals From Capitals | GSUB 1 | 無効 | 大文字を petite capital に置き換えます。 |
font-variant-caps: all-petite-caps | |
c2sc | Small Capitals From Capitals | GSUB 1 | 無効 | 大文字を small capital に置き換えます。 |
font-variant-caps: all-small-caps | |
calt | Contextual Alternates | GSUB 6 | 有効 | 文脈に応じてグリフを置き換えます。 |
font-variant-ligatures: contextual | |
case | Case-Sensitive Forms | GSUB 1, GPOS 1 | 無効 | oldstyle figure を lining figures に置き換えまたは位置調整します。 句読点を大文字に合わせたものに置き換えまたは位置調整します。 | ||
ccmp | Glyph Composition/Decomposition | GSUB 2, 4 | 有効 | フォント構成の便宜によりグリフを分解したり合成したりします。 | 有効 | |
cfar | Conjunct Form After Ro | |||||
chws | Contextual Half-width Spacing | GPOS 2, 8 | CJK の advanced layout に対応していないなら、 CJK 横書きのとき、有効 | 全角幅のグリフを半角幅に変更します。 | ||
cjct | Conjunct Forms | |||||
clig | Contextual Ligatures | GSUB | 有効 | 文脈依存の合字に置き換えます。 |
font-variant-ligatures: common-ligatures | |
cpct | Centered CJK Punctuation | 無効 | 中央寄せの句読点に置き換えます。 | |||
cpsp | Capital Spacing | (有効) | 大文字語用に字間を調整します。 | |||
cswh | Contextual Swash |
| ||||
curs | Cursive Positioning | GPOS 3 | 有効 | 続け字の接続位置を調整します。 | ||
cv01 ... cv99 | Character Variant 1 ... Character Variant 99 | GSUB 1, 3 | 無効 | 異体字グリフに置き換えます。 | 名前, 異体字のUnicodeスカラー値 |
font-variant-alternates: character-variant(...) |
dist | Distances | |||||
dlig | Discretionary Ligatures | GSUB 4 | 無効 | 利用者の判断により合字に置き換えます。 |
font-variant-ligatures: discretionary-ligatures | |
dnom | Denominators | GSUB 1 | 自動 | 斜線の後の数字を分母用に置き換えます。 | ||
dtls | Dotless Forms | GSUB 1 | 自動 | i や j の無点形に置き換えます。 | ||
expt | Expert Forms | GSUB 1 | 任意 | 漢字を expert form に置き換えます。 | ||
falt | Final Glyph on Line Alternates | |||||
fin2 | Terminal Form #2 | |||||
fin3 | Terminal Form #3 | |||||
fina | Terminal Forms | GSUB 1, 5, 6, 8 | 自動 | 語末形に置き換えます。 | ||
flac | Flattened ascent forms | |||||
frac | Fractions | GSUB 1, 4 | 無効 | 分数に置き換えます。 |
font-variant-numeric: diagonal-fractions | |
fwid | Full Widths | GSUB 1, GPOS 1 | 無効 | 全角のグリフに置き換えます。 欧州フォントでは 0.6em の固定幅グリフに置き換えます。 | font-variant-east-asian: full-width | |
half | Half Forms | |||||
haln | Halant Forms | |||||
halt | Alternate Half Widths | GPOS 1 | CJK の advanced layout に対応していないなら、 CJK 横書きのとき、有効 | 全角幅のグリフを半角幅に調整します。 | text-spacing | |
hist | Historical Forms | GSUB 1 | 無効 | 歴史的な字形に置き換えます。 |
font-variant-alternates: historical-forms | |
hkna | Horizontal Kana Alternates | GSUB 1 | 無効 | 横書き用の仮名のグリフに置き換えます。 | ||
hlig | Historical Ligatures | |||||
hngl | Hangul | |||||
hojo | Hojo Kanji Forms (JIS X 0212-1990 Kanji Forms) | 無効 | JIS X 0212 の字形に置き換えます。 | |||
hwid | Half Widths | GSUB 1, GPOS 1 | 無効 | 半角のグリフに置き換えます。 | text-combine-upright | |
init | Initial Forms | GSUB 1, 5, 6, 8 | 自動 | 語頭形に置き換えます。 | ||
isol | Isolated Forms | GSUB 1, 5, 6, 8 | 自動 | 孤立形に置き換えます。 | ||
ital | Italics | GSUB 1 | イタリック指定時に有効 | イタリックのグリフに置き換えます。 | ||
jalt | Justification Alternates | |||||
jp78 | JIS78 Forms | GSUB 1, 3 | 無効 | 利用者が手動で選択できる JIS X 0208:1978 字形(群)です。 | font-variant-east-asian: jis78 | |
jp83 | JIS83 Forms | GSUB 1 | 無効 | JIS X 0208:1983 の字形に置き換えます。 | font-variant-east-asian: jis83 | |
jp90 | JIS90 Forms | GSUB 1 | 無効 | JIS X 0208:1990 の字形に置き換えます。 | font-variant-east-asian: jis90 | |
jp04 | JIS2004 Forms | GSUB 1 | 無効 | JIS X 0213:2004 の字形に置き換えます。 | font-variant-east-asian: jis04 | |
kern | Kerning | GPOS 2, 8 | 横書きなら有効。 利用者が無効化や手動調整できてもよい。 | 水平のカーニング, すなわち隣接グリフとの位置関係を調整します。 |
font-kerning: normal
横書き系 | |
lfbd | Left Bounds | |||||
liga | Standard Ligatures | GSUB 4 | 有効 | 通常使う合字に置き換えます。 |
font-variant-ligatures: common-ligatures | |
ljmo | Leading Jamo Forms | |||||
lnum | Lining Figures | GSUB 1 | 無効 | lining figure (大文字に合う数字) に置き換えます。 |
font-variant-numeric: lining-nums | |
locl | Localized Forms | GSUB 1 | 有効、 言語設定等によります。 | 地方に適した形に置き換えます。 | 有効 | |
ltra | Left-to-right glyph alternates | GSUB 1 | 自動 |
左横書き用グリフに置き換えます。
ltrm との使い分けがあります。
| ||
ltrm | Left-to-right mirrored forms | GSUB 1 | 自動 |
左横書き用グリフに置き換えます。
ltrm との使い分けがあります。
| ||
mark | Mark Positioning |
GSUB 4, 5 | 有効 | 基底グリフに対してマークの位置を調整します。 | 有効 | |
med2 | Medial Forms #2 | |||||
medi | Medial Forms | GSUB 1, 5, 6, 8 | 自動 | 語中形に置き換えます。 | ||
mgrk | Mathematical Greek | |||||
mkmk | Mark to Mark Positioning |
GSUB 6 | 有効 | マークグリフに対してマークの位置を調整します。 | 有効 | |
mset | ||||||
nalt | Alternate Annotation Forms | GSUB 1, 3 | 無効 | 囲み文字に置き換えます。 |
font-variant-alternates: annotation(...) | |
nlck | NLC Kanji Forms | GSUB 1 | 無効 | 表外漢字字体表の字形に置き換えます。 | ||
nukt | Nukta Forms | GSUB 4 | 自動 | nukta 系に置き換えます。 | ||
numr | Numerators | GSUB 1 | 自動 | 斜線とその前の数字を分数用に置き換えます。 | ||
onum | Oldstyle Figures | GSUB 1 | 無効 | 数字を oldstlyle に置き換えます。 |
font-variant-numeric: oldstyle-nums | |
opbd | Optical Bounds | |||||
ordn | Ordinals | GSUB 4, 6 | 無効 | アルファベットのグリフを序数標識に置き換えます。 |
font-variant-numeric: ordinal | |
ornm | Ornaments |
| ||||
palt | Proportional Alternate Widths | GPOS 1 | 無効 | グリフ幅を可変幅用に調整します。 | ||
pcap | Petite Capitals | |||||
pkna | Proportional Kana | |||||
pnum | Proportional Figures | GSUB 1 | 無効 | 数字を可変幅のものに置き換えます。 |
font-variant-numeric: proportional-nums | |
pref | Pre-base Forms | GSUB 4 | 自動 | pre-base form を置き換えます。 | ||
pres | Pre-base Substitutions | GSUB 4, 5 | 自動 | pre-base form に置き換えます。 | ||
pstf | Post-base Forms | GSUB 4 | 自動 | post-base form を置き換えます。 | ||
psts | Post-base Substitutions | GSUB 4 | 自動 | post-base form に置き換えます。 | ||
pwid | Proportional Widths | GSUB 1 | 市場に合わせて有効でも無効でもよい | 可変幅のグリフに置き換えます。 | ||
qwid | Quarter Widths | |||||
rand | Randomize | |||||
rclt | Required Contextual Alternates | |||||
rkrf | Rakar Forms | |||||
rlig | Required Ligatures | GSUB 4 | 自動 | 必須の合字に置き換えます。 | 有効 | |
rphf | Reph Form | GSUB 4 | 自動 | reph 系に置き換えます。 | ||
rtbd | Right Bounds | |||||
rtla | Right-to-left alternates | GSUB 1 | 自動 |
右横書き用グリフに置き換えます。
rtlm との使い分けがあります。
| ||
rtlm | Right-to-left mirrored forms | GSUB 1 | 自動 |
右横書き用グリフに置き換えます。
rtla との使い分けがあります。
| ||
ruby | Ruby Notation Forms | GSUB 1 | 無効 | ルビ用のグリフに置き換えます。 | font-variant-east-asian: ruby | |
rvrn | Required Variation Alternates | |||||
salt | Stylistic Alternates | GSUB 1, 3 | 無効 | 利用者が手動で選択できる別様式のグリフの候補(群)です。 |
font-variant-alternates: stylistic(...) | |
sinf | Scientific Inferiors | |||||
size | Optical size |
| ||||
smcp | Small Capitals | GSUB 1 | 無効 | 小文字を small capital に置き換えます。 |
font-variant-caps: small-caps ,
font-variant-caps: all-small-caps | |
smpl | Simplified Forms | |||||
ss01 ... ss20 | Stylistic Set 1 ... Stylistic Set 20 | GSUB 1 | 無効 | 別様式のグリフに置き換えます。 | 利用者向けの名前 |
font-variant-alternates: styleset(...) |
ssty | Math script style alternates | GSUB 3 | 自動 | 数式 subscript, superscript 用グリフに置き換えます。 | 水準 (?) | |
stch | Stretching Glyph Decomposition | |||||
subs | Subscript | GSUB 1, 2 | 無効 | 下付きのグリフに置き換えます。 | font-variant-position: sub | |
sups | Superscript | GSUB 1 | 無効 | 上付きのグリフに置き換えます。 | font-variant-position: super | |
swsh | Swash |
| ||||
titl | Titling | |||||
tjmo | Trailing Jamo Forms | |||||
tnam | Traditional Name Forms | |||||
tnum | Tabular Figures | |||||
trad | Traditional Forms | GSUB 1, 3 | 無効 | 中文や日本語の伝統的字形に置き換えます。 | font-variant-east-asian: traditional | |
twid | Third Widths | |||||
unic | Unicase |
| ||||
valt | Alternate Vertical Metrics |
| ||||
vatu | Vattu Variants | GSUB 4 | 自動 | vattu 系に置き換えます。 | ||
vchw | Vertical Contextual Half-width Spacing | |||||
vert | Vertical Alternates | GSUB 1 | 縦書きのとき有効 | 縦書き用のグリフに置き換えます。 | 縦書き系 | |
vhal | Alternate Vertical Half Metrics | GPOS 1 | 無効、 JLREQ 応用等は適宜適用して良い。 | 全角の高さのグリフを半角の高さに調整します。 | ||
vjmo | Vowel Jamo Forms | |||||
vkna | Vertical Kana Alternates | GSUB 1 | 無効 | 縦書き用の仮名のグリフに置き換えます。 | ||
vkrn | Vertical Kerning | GPOS 2, 8 | 縦書きなら有効。 利用者が無効化や手動調整できてもよい。 | 垂直のカーニング, すなわち隣接グリフとの位置関係を調整します。 |
font-kerning: normal
縦書き系 | |
vpal | Proportional Alternate Vertical Metrics | GPOS 1 | 無効。
vkrn を有効にするとき、
有効にしなければなりません。 | 文字高さ可変での表示用に位置調整します。 | ||
vrt2 | Vertical Alternates and Rotation | GSUB 1 | 縦書きのとき有効 | 縦書き用のグリフに置き換えます。 横書き文字は回転済のグリフに置き換えます。 | 不使用 | |
vrtr | Vertical Alternates for Rotation | |||||
zero | Slashed Zero | GSUB 1 | 無効 | 0 を斜線付きのグリフに置き換えます。 |
font-variant-numeric: slashed-zero |
[38] 登録簿は期待される用法を書いているものの、 応用は他の仕様書や用途に応じて適宜仕立てして構わないとされています。 >>37
[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
[3] OpenTypeフォントで万年カレンダーをつくる - にせねこメモ, https://nixeneko.hatenablog.com/entry/2017/02/13/000000
(lookupType
1 substFormat
2,
lookupType
4 substFormat
1,
lookupType
6 substFormat
3)
(lookupType
1 substFormat
1)
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)
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)
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)
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)
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
で「、」「。」の点が中央に移動します。
果たしてそれがルビに適したグリフと言えるのかは疑問。
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)
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))
GSUB
:
dtls
, onum
, salt
, ssty
(1, 1; 1, 2; 3, 1)
[31] Iosevka, https://be5invis.github.io/Iosevka/
- 和文の句読点や括弧が連続したときのアキを自動調整するフォント。
- GPOSのchws/vchwで自動調整します。
[82] 西暦表記を元号による表記にするフォント: mottainaiDTP, http://mottainaidtp.seesaa.net/article/425166883.html
[83] 3桁ごとにカンマが発生するフォント: mottainaiDTP, http://mottainaidtp.seesaa.net/article/395328634.html
[94] 小数点以下の数字が小さく表示されるフォント: mottainaiDTP, https://mottainaidtp.seesaa.net/article/429751961.html?seesaa_related=category
[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
[91] Download - Abyssinica SIL, https://software.sil.org/abyssinica/download/
cv
, 言語
[95] OpenTypeフォントで万年カレンダーをつくる - にせねこメモ, https://nixeneko.hatenablog.com/entry/2017/02/13/000000
[97] Details of available Stylistic Sets · Issue #246 · adobe-fonts/source-code-pro · GitHub, https://github.com/adobe-fonts/source-code-pro/issues/246
[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
[92] Safari で Osaka フォントの表示不具合を CSS で対処 | Memorandom, , https://memorandom.whitepenguins.com/posts/safari-osaka/
[93] >>92 配置がずれる謎の不具合を palt
で回避する。なんかよくわからんけど
palt
を有効にすると文字幅計算方法が変わってまともになるってコト!?
[96] エディターで制御文字を表示したいとか、結合文字の点線を表示したいとか、 空き領域の符号位置を表示したいとか、みたいな目的で使える機能があればいいのになあ。