font feature

機能 (フォント)

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

目次

  1. 仕様書
  2. 意味
  3. 機能タグ
  4. 文脈
  5. 機能の選択
  6. 処理
  7. 機能引数
  8. 機能の一覧
  9. font-feature-settings (CSS)
  10. フォントの実例
  11. メモ

仕様書#

意味#

[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] フォント機能
機能タグFriendly name >>6主たる用法既定の状態説明引数CSS
aaltAccess All AlternatesGSUB 1, 3無効 利用者が手動で選択できる代替のグリフの候補(群)です。
abvfAbove-base FormsGSUB 1自動 above-base form を置き換えます。
abvmAbove-base Mark PositioningGPOS 4, 5自動 基底グリフ上のマークの位置を調整します。
abvsAbove-base SubstitutionsGSUB 4自動 基底グリフとその上のマーク合字に置き換えます。
afrcAlternative Fractions無効 分数形に置き換えます。 font-variant-numeric: stacked-fractions
akhnAkhandGSUB 4自動 Akhand合字に置き換えます。
blwfBelow-base FormsGSUB 4自動 below-base form を置き換えます。
blwmBelow-base Mark PositioningGPOS 4, 5自動 基底グリフ下のマークの位置を調整します。
blwsBelow-base SubstitutionsGSUB 4自動 基底グリフとその下のマーク合字に置き換えます。
c2pcPetite Capitals From CapitalsGSUB 1無効 大文字petite capital に置き換えます。 font-variant-caps: all-petite-caps
c2scSmall Capitals From CapitalsGSUB 1無効 大文字small capital に置き換えます。 font-variant-caps: all-small-caps
caltContextual AlternatesGSUB 6有効 文脈に応じてグリフを置き換えます。 font-variant-ligatures: contextual
caseCase-Sensitive FormsGSUB 1, GPOS 1無効 oldstyle figurelining figures に置き換えまたは位置調整します。 句読点大文字に合わせたものに置き換えまたは位置調整します。
ccmpGlyph Composition/DecompositionGSUB 2, 4有効 フォント構成の便宜によりグリフを分解したり合成したりします。有効
cfarConjunct Form After Ro
chwsContextual Half-width SpacingGPOS 2, 8 CJK の advanced layout に対応していないなら、 CJK 横書きのとき、有効 全角幅のグリフ半角幅に変更します。
cjctConjunct Forms
cligContextual LigaturesGSUB有効 文脈依存の合字に置き換えます。 font-variant-ligatures: common-ligatures
cpctCentered CJK Punctuation無効 中央寄せの句読点に置き換えます。
cpspCapital Spacing(有効) 大文字語用に字間を調整します。
cswhContextual Swash
cursCursive PositioningGPOS 3有効 続け字の接続位置を調整します。
cv01 ... cv99Character Variant 1 ... Character Variant 99GSUB 1, 3 無効 異体字グリフに置き換えます。 名前, 異体字Unicodeスカラー値 font-variant-alternates: character-variant(...)
distDistances
dligDiscretionary LigaturesGSUB 4無効 利用者の判断により合字に置き換えます。 font-variant-ligatures: discretionary-ligatures
dnomDenominatorsGSUB 1自動 斜線の後の数字分母用に置き換えます。
dtlsDotless FormsGSUB 1自動 ij の無点形に置き換えます。
exptExpert FormsGSUB 1 任意 漢字を expert form に置き換えます。
faltFinal Glyph on Line Alternates
fin2Terminal Form #2
fin3Terminal Form #3
finaTerminal FormsGSUB 1, 5, 6, 8自動 語末形に置き換えます。
flacFlattened ascent forms
fracFractionsGSUB 1, 4無効 分数に置き換えます。 font-variant-numeric: diagonal-fractions
fwidFull WidthsGSUB 1, GPOS 1無効 全角グリフに置き換えます。 欧州フォントでは 0.6em の固定幅グリフに置き換えます。font-variant-east-asian: full-width
halfHalf Forms
halnHalant Forms
haltAlternate Half WidthsGPOS 1 CJK の advanced layout に対応していないなら、 CJK 横書きのとき、有効 全角幅のグリフ半角幅に調整します。text-spacing
histHistorical FormsGSUB 1無効 歴史的な字形に置き換えます。 font-variant-alternates: historical-forms
hknaHorizontal Kana AlternatesGSUB 1 無効 横書き用の仮名グリフに置き換えます。
hligHistorical Ligatures
hnglHangul
hojoHojo Kanji Forms (JIS X 0212-1990 Kanji Forms)無効 JIS X 0212字形に置き換えます。
hwidHalf WidthsGSUB 1, GPOS 1無効 半角グリフに置き換えます。text-combine-upright
initInitial FormsGSUB 1, 5, 6, 8自動 語頭形に置き換えます。
isolIsolated FormsGSUB 1, 5, 6, 8自動 孤立形に置き換えます。
italItalicsGSUB 1 イタリック指定時に有効 イタリックグリフに置き換えます。
jaltJustification Alternates
jp78JIS78 FormsGSUB 1, 3無効 利用者が手動で選択できる JIS X 0208:1978 字形(群)です。font-variant-east-asian: jis78
jp83JIS83 FormsGSUB 1無効 JIS X 0208:1983字形に置き換えます。font-variant-east-asian: jis83
jp90JIS90 FormsGSUB 1無効 JIS X 0208:1990字形に置き換えます。font-variant-east-asian: jis90
jp04JIS2004 FormsGSUB 1無効 JIS X 0213:2004字形に置き換えます。font-variant-east-asian: jis04
kernKerningGPOS 2, 8 横書きなら有効。 利用者が無効化や手動調整できてもよい。 水平カーニング, すなわち隣接グリフとの位置関係を調整します。 font-kerning: normal 横書き
lfbdLeft Bounds
ligaStandard LigaturesGSUB 4有効 通常使う合字に置き換えます。 font-variant-ligatures: common-ligatures
ljmoLeading Jamo Forms
lnumLining FiguresGSUB 1無効 lining figure (大文字に合う数字) に置き換えます。 font-variant-numeric: lining-nums
loclLocalized FormsGSUB 1有効、 言語設定等によります。 地方に適した形に置き換えます。有効
ltraLeft-to-right glyph alternatesGSUB 1自動 左横書きグリフに置き換えます。 ltrm との使い分けがあります。 書字方向依存グリフ
ltrmLeft-to-right mirrored formsGSUB 1自動 左横書きグリフに置き換えます。 ltrm との使い分けがあります。 書字方向依存グリフ
markMark Positioning GSUB 4, 5有効 基底グリフに対してマークの位置を調整します。有効
med2Medial Forms #2
mediMedial FormsGSUB 1, 5, 6, 8自動 語中形に置き換えます。
mgrkMathematical Greek
mkmkMark to Mark Positioning GSUB 6有効 マークグリフに対してマークの位置を調整します。有効
mset
naltAlternate Annotation FormsGSUB 1, 3無効 囲み文字に置き換えます。 font-variant-alternates: annotation(...)
nlckNLC Kanji FormsGSUB 1無効 表外漢字字体表字形に置き換えます。
nuktNukta FormsGSUB 4自動 nukta 系に置き換えます。
numrNumeratorsGSUB 1自動 斜線とその前の数字分数用に置き換えます。
onumOldstyle FiguresGSUB 1無効 数字oldstlyle に置き換えます。 font-variant-numeric: oldstyle-nums
opbdOptical Bounds
ordnOrdinalsGSUB 4, 6無効 アルファベットグリフ序数標識に置き換えます。 font-variant-numeric: ordinal
ornmOrnaments
paltProportional Alternate WidthsGPOS 1無効 グリフ幅を可変幅用に調整します。
pcapPetite Capitals
pknaProportional Kana
pnumProportional FiguresGSUB 1無効 数字を可変幅のものに置き換えます。 font-variant-numeric: proportional-nums
prefPre-base FormsGSUB 4自動 pre-base form を置き換えます。
presPre-base SubstitutionsGSUB 4, 5自動 pre-base form に置き換えます。
pstfPost-base FormsGSUB 4自動 post-base form を置き換えます。
pstsPost-base SubstitutionsGSUB 4自動 post-base form に置き換えます。
pwidProportional WidthsGSUB 1 市場に合わせて有効でも無効でもよい 可変幅のグリフに置き換えます。
qwidQuarter Widths
randRandomize
rcltRequired Contextual Alternates
rkrfRakar Forms
rligRequired LigaturesGSUB 4自動 必須の合字に置き換えます。有効
rphfReph FormGSUB 4自動reph 系に置き換えます。
rtbdRight Bounds
rtlaRight-to-left alternatesGSUB 1自動 右横書きグリフに置き換えます。 rtlm との使い分けがあります。 書字方向依存グリフ
rtlmRight-to-left mirrored formsGSUB 1自動 右横書きグリフに置き換えます。 rtla との使い分けがあります。 書字方向依存グリフ
rubyRuby Notation FormsGSUB 1無効 ルビ用のグリフに置き換えます。font-variant-east-asian: ruby
rvrnRequired Variation Alternates
saltStylistic AlternatesGSUB 1, 3無効 利用者が手動で選択できる別様式のグリフの候補(群)です。 font-variant-alternates: stylistic(...)
sinfScientific Inferiors
sizeOptical size
params
smcpSmall CapitalsGSUB 1無効 小文字small capital に置き換えます。 font-variant-caps: small-caps, font-variant-caps: all-small-caps
smplSimplified Forms
ss01 ... ss20Stylistic Set 1 ... Stylistic Set 20GSUB 1無効 別様式のグリフに置き換えます。利用者向けの名前 font-variant-alternates: styleset(...)
sstyMath script style alternatesGSUB 3自動 数式 subscript, superscriptグリフに置き換えます。水準 (?)
stchStretching Glyph Decomposition
subsSubscriptGSUB 1, 2無効 下付きグリフに置き換えます。font-variant-position: sub
supsSuperscriptGSUB 1 無効 上付きグリフに置き換えます。font-variant-position: super
swshSwash
titlTitling
tjmoTrailing Jamo Forms
tnamTraditional Name Forms
tnumTabular Figures
tradTraditional FormsGSUB 1, 3 無効 中文日本語の伝統的字形に置き換えます。font-variant-east-asian: traditional
twidThird Widths
unicUnicase
valtAlternate Vertical Metrics
vatuVattu VariantsGSUB 4自動 vattu 系に置き換えます。
vchwVertical Contextual Half-width Spacing
vertVertical AlternatesGSUB 1 縦書きのとき有効 縦書き用のグリフに置き換えます。縦書き
vhalAlternate Vertical Half MetricsGPOS 1 無効、 JLREQ 応用等は適宜適用して良い。 全角の高さのグリフ半角の高さに調整します。
vjmoVowel Jamo Forms
vknaVertical Kana AlternatesGSUB 1 無効 縦書き用の仮名グリフに置き換えます。
vkrnVertical KerningGPOS 2, 8 縦書きなら有効。 利用者が無効化や手動調整できてもよい。 垂直カーニング, すなわち隣接グリフとの位置関係を調整します。 font-kerning: normal 縦書き
vpalProportional Alternate Vertical MetricsGPOS 1無効。 vkrn を有効にするとき、 有効にしなければなりません。 文字高さ可変での表示用に位置調整します。
vrt2Vertical Alternates and RotationGSUB 1 縦書きのとき有効 縦書き用のグリフに置き換えます。 横書き文字は回転済のグリフに置き換えます。不使用
vrtrVertical Alternates for Rotation
zeroSlashed ZeroGSUB 1 無効 0斜線付きのグリフに置き換えます。 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] エディターで制御文字を表示したいとか、結合文字の点線を表示したいとか、 空き領域の符号位置を表示したいとか、みたいな目的で使える機能があればいいのになあ。