縦書き時の文字の方向特性を決めようとするUTR#50に関して新しい提案が3月5日に公開されました。現在公開されているUTR#50(Revision 3)は、Eric Mullerさん(アドビ)によるものですが、このカウンター提案は、LaurentiuさんとDwayneさん(両者ともMS)の共同によるものです。
「Updated Proposal to Revise UTR#50 Unicode Properties for Vertical Text Layout」
Unicode コンソーシアムのUTC #130会議で発表されたものを元にして、(1) Unicode全文字についての方向クラス(Orientation_Class)特性値の組を含めたのと、(2) UTR#50のRevision 3への参照を含むように更新されたものです。
UTR#50のrevision 3(2012年2月10日版、以下、UTR#50-20120210)についての説明はこちらを参照してください:縦書きにおける文字の方向について、UTR#50改訂版ドラフトの内容紹介
1.本提案の概要
(1) UTR#50-20120210は日本語を中心に考えているが、縦書きは日本語だけではないので、一般的な言語の縦組みレイアウトを実装するための文字特性とガイドを定義しなければならない。次のようなシナリオにおける縦書きレイアウトのグリフの方向を決めることができるような文字のデフォルトのクラス化を提供したい。
- モンゴル、’Phags-paのような縦書きの文字、漢字・ハングルなどの縦書き記法のデフォルト・レイアウト
- アラビア・デバナガリのような横書き文字のグリフを回転して表示して接続特性を維持する縦書きのデフォルト・レイアウト
- ラテン文字のような横書き文字をサイン看板などのように垂直に積み重ねる方式のレイアウト
(2) Orientation_Class(以下、方向クラス)という列挙型のUnicode文字特性とアルゴリズムを提案する。これにより次の二つの縦書きレイアウトモードにおいて、任意のテキストのグリフの方向を決定することができる。
- デフォルトモードでは縦書き時における文字の普通の方向を表す。デフォルトでは漢字は正立であり、ラテン文字は右に回転して横倒しになる。CSS3のtext-orientation特性値”upright-right”にあたる。
- スタックモードでは、普通は横倒しになる文字が垂直の方向になり、垂直方向に積み重なる。例えば、スタックモードでは漢字は垂直のままであり、ラテン文字は垂直に戻る。CSS3のtext-orientation特性値”upright”にあたる。
方向クラス値はすべてのUnicode文字の上記の二つのモードにおける挙動を記述するもので、一以上の方向属性(次の表)の組み合わせにより定義される。
表1.方向属性
属性 名前 説明
S Stackable 縦書きでグリフを正立して表示可能な文字
R Rotatable 縦書きでグリフを横倒しして表示可能な文字
T Transformable OpenTypeのGSUB ’vert’による置き換えのようにフォントの特性をつかってグリフの字形変換がなされる文字
I Inherited 結合文字のように先行するグリフから方向を継承する文字
A Arrow 矢印や類似の文字
B Break 改行特性値を持つ文字
例えば、ラテン文字の方向クラス値はRS(Rotatable とStackable)であり、デフォルトモードでは回転し、スタックモードでは正立する。アラビア文字はRである。
表2.方向クラス値
クラス値 説明 例
S Stackableのみ 任意の縦書きレイアウトでグリフが正立する分離記述の文字 象形文字、仮名、ハングルなど
RS Rotatable & Stackable の両方 デフォルトモードでは回転し、スタックモードでは正立する。 分離記述文字の大部分、句読点の一部、デバナガリ文字
R Rotatable のみ 結合記述文字のように隣のグリフとの結合を維持するために回転するもの、ベースラインに従う一部の括弧類
TS 字形変換とStackable グリフは正立のままでフォントの特性により字形変換を蒙る分離記述の文字 カタカナ組み文字、こがきのかな
TR 字形変換とRotatable フォントの特性による字形変換を受けた上でグリフは横倒しになる文字 CJKの括弧、全角幅の括弧
IS Inherited とStackable 結合時は基底文字の方向を継承、分離時は正立する結合文字 かなの濁音・半濁音
IRS InheritedでRotatableまたはStackable 結合時は基底文字の方向を継承、分離時はデフォルトモードで回転、スタックモードで正立する結合文字 一般の付加記号(かなの濁音・半濁音を除く)
IR Inheritedで分離時Rotatable 結合時は基底文字の方向を継承、分離時は回転する結合文字 アラビア、シリア、モンゴルなどの付加記号
A Arrows 矢印はAに分類し、上位のプロトコルでASまたはARSになる
AS Stackableのみの矢印 デフォルトモード、スタックモードともに正立する 一般の矢印
ARS RotatableとStackableの矢印 デフォルトモードで回転、スタックモードで正立する矢印 半角幅の矢印
BR 改行
・方向クラス値は優先度の高い方から低い方への順に並んでいる。例えば、TRではTはRより優先し、TができないときRでも良い。
・方向クラス値は拡張可能である。
・方向属性Rは、UTR#50-20120210のEAVOのS(横倒し)とほぼ同じ。方向属性Sは、UTR#50-20120210のU(正立)とほぼ同じである。UTR#50-20120210のSとUは排他的であるが、方向属性RとSは組み合わせできる。
・多くの分離記述の非CJK文字はRSのようにデフォルトでR、スタック時Sの特性が与えられる。
(4)縦組みにおける双方向テキストについて(省略)
(5)アルゴリズム(概略)
1)Aの文字をAS, ARSに決定する
2)BRが先行しないなら先行モードを続ける
3)縦書きのモードがデフォルトモードのときとスタックモードでそれぞれの文字の方向と変形を行なう。
2.Unicodeの各文字についての方向クラス値
提案のPDFに含まれていますが、これをテキストにしたものがこちらにあります。
http://nadita.com/murakami/utr50-ms-table.txt
3.私見:この提案仕様について、ざっと読んでの疑問
1)デフォルトモードとスタックモードの切り替えのタイミングは?日本語の場合、ひとつの文書中で両方使われるので文書全体ではありえない。そうすると、どういうタイミングで切り替えるのか?段落の中でデフォルトモードとスタックモードを切り替えることになると、これを簡単に実現する仕組みが欲しい。(それともCSSのtext-orientationで切り替えるだけなのか?それなら、Unicodeの仕様にする必要はないだろう)。
2)アラビア文字には分離形と結合形があり、文字ではなくて、単語の中の位置でグリフの形を変える。つまりダイナミックに形が変わるが、この文章では文字のグリフ固定を想定しているように見えてしまう。日本語の漢字やかなの筆文字は結合する、つまり、分離形・結合形はフォント依存になるのではないのだろうか?英語だって手書きだと結合するんだけどな~~
上の1)、2)の疑問はもう少し考えないと・・・