fwid

文字幅

[2] 文字幅は、 全角文字半角文字です。

[3] 文字のレンダリングの問題だったり、 文字コード表現の問題だったり、 その他何だかよくわからない問題だったりします。

目次

  1. フォント機能
    1. フォント機能 chws (OpenType)
    2. フォント機能 fwid (OpenType)
    3. フォント機能 halt (OpenType)
  2. 関連
  3. メモ

フォント機能#

フォント機能 chws (OpenType)#

フォント機能 fwid (OpenType)#

[8] OpenTypeフォント機能 fwid は、 Full Widths (全幅) と説明されています。 >>7


[9] fwid は、グリフ集合中にあってその他の (width) に設定されているグリフを置換して、 全 (通常は em) 幅 (full (usually em) width) に設定されたグリフとします。 >>7

[10] CJKVフォントでは、 「lower ASCII」 ラテン文字や各種記号 (symbol) を含むかもしれません。 >>7

[12] ちょっと何言ってるのかわかりませんが、世にいう半角ASCII文字のことでしょうか。

[11] 欧州のフォント (European font) では、 可変幅 (proportionally-spaced) グリフ固定幅 (fixed-width) グリフ (通常 (generally) は 0.6 em 幅に設定) に置換します。 >>7

[13] fullwidth というのは普通は東洋全角文字 (1em 幅で表示) を指す用語ですが、 ここでは欧州の 0.6em 幅の固定幅の表示にも使えるとされています。 任意幅 → 固定幅、という点こそ共通しているものの、 両者はまったくの別物です。同時実装不能です。 東洋フォントと欧州フォントは別製品なので交わることはないという世界観なのでしょうか。 それとも言語系などで区別しろということなのでしょうか。

[14] AJ1 はじめ東洋のフォントでは fwid は実際に半角から全角への置換などで一般的に使われています。 欧州のフォントではどうなのでしょう。


[15] GSUB lookup 1グリフ前進幅 (full advance width) のものに置換することもできますし、 GPOS lookup 1xPlacementxAdvance で proportional グリフに全角 metrics を指定することもできます。 >>7 こうした実装方法が推奨 (recommended) されている >>7 ものの、その他の lookup 型が禁止されているわけではありません。

[16] 既定の状態では無効とするべき (should) で、 文書マーク付け利用者の制御やその他の応用の基準に応じてグリフ連なりに適用できるという形に実装できます。 >>7

[17] 他の水平グリフ幅機能 (chws, halt, hwid, palt, pkna, pwid, qwid, twid, pnum, tnum) とは互いに排他的であり、 fwid が適用されるときはこれらは無効とするべきです (should) >>7

[18] fwid が適用されるときは apknkern は無効とするべき (should) です。 >>7

[19] こうした排他的適用に関する推奨事項が誰に対するものなのか、フォント開発者なのか (仕様上難しそう)、 応用の実装者なのか、フォント応用利用者なのか、よくわかりません。

フォント機能 halt (OpenType)#

[21] フォント機能 halt は、 Alternate Half Widths と説明されています。 >>20

[22] halt は、 既定の状態 (by default) 全角の大きさ (have full-width metrics) グリフを、 固定幅で半角幅 (fixed, half-em widths) に合わせて再配置 (Re-spaces) することで、 JLREQ (特に 3.1.4 Positioning of Consecutive Opening Brackets, Closing Brackets, Commas, Full Stops and Middle Dots, B. Spacing between Characters) や同様の CJKV 文章配置 (text-layout) 仕様書 (具体例: CLREQ, KLREQ) で説明されているような、 既定のグリフ全角幅 (full-width) である文字半角形 (half-width forms) を期待するような、 より洗練された文章配置法を近似するものです。 >>20

[27] CLREQ, JLREQ, KLREQ で説明される CJKV 文章 (text) 高度な配置 (advanced layout) に対応した配置エンジン (layout engine) は、 halt を使うべきではありません (should not) 。 そのような応用では、 halt を用いるかどうかの選択肢を利用者に提示しないのが適切です。 >>20

[28] そうでない実装では、 halt横書き配置 (horizontal layout) におけるすべての CJKV 文章 (text) に対して、 または特別な扱いを必要とする特定の文字、例えば括弧 (brackets) , 句読点 (punctuation) , 引用符 (quotation marks) に選択的に、 有効にするべきです (should) 。 これは CJK 文章に対しては既定の状態で有効とするべきです (should) >>20

[25] GPOS lookupType 1xPlacement, yPlacement, xAdvance, yAdvance で代替となる metrics を指定することが推奨 (recommended) されています。 >>20

[23] halthwid とは違って新しいグリフ置換 (substitute) するものではありません。 >>20

[24] haltchws とは違って文脈的 (contextual) ではありません。 >>20

[26] OpenType の仕様上は >>25 以外の方法が禁止されているわけではなく、 例えば他の lookupType により条件を記述することも、 GSUB で別のグリフに置換することも技術的には可能ですが、 >>23>>24 のような説明があり、そうした用法は期待されていないようです。

[32] 文脈的でないものに限るとされていること、既定の状態で有効にすることが求められていることで、 このフォント機能の利用場面は限られてきます。 例えばは通常次の文章と密着しないように右半分にアキがある状態の全角字形とされます。 もし halt でこのアキを削って半角に調整すると、読みづらい文章になってしまいますから、 それが既定の状態となるべきではなく、 halt で指定するべきではなかったということになります。 また、置換ではなく GPOS によって全角から半角に変換することが求められているので、 全角英数字から半角英数字への置換には適用できない場合が多いと考えられますし、 JLREQ の参照箇所から考えてもその用途は想定外と思われます。 こうした適用できない場面を除くと、 実際に使えそうなのは括弧の前後の空白の除去くらいでしょうか。

[29] 他の水平グリフ幅機能 (chws, fwid, hwid, palt, pkna, pwid, qwid, twid, pnum, tnum) とは互いに排他的であり、 halt が適用されるときはこれらは無効とするべきです (should) >>20

[30] halt が適用されるときは apknkern は無効とするべき (should) です。 >>7

[31] こうした排他的適用に関する推奨事項が誰に対するものなのか、フォント開発者なのか (仕様上難しそう)、 応用の実装者なのか、フォント応用利用者なのか、よくわかりません。 UI suggestion から参照されているので、応用が提示する利用者インターフェイス利用者に対する推奨でしょうか。

関連#

[6] 関連: 幅写像, AA

メモ#