CSS3のWriting Modeで縦書きを指定できるようになって、EPUB3がそれを採用してEPUBで縦書きができるようになった、というのは昨年(2010年~2011年)の話です。
CSS Writing Modes Module Level 3
その後、Unicodeで文字のコードポイント毎に方向の特性を定義しようという、TR#50というものが浮上しています。
UNICODE PROPERTIES FOR VERTICAL TEXT LAYOUT(Draft)
この全体像はまだ読んでいないですが、ざっと見ると、縦書きにするときの文字の挙動として、文字単位で次の分類をしようとしています。
U:直立する文字 characters which are displayed upright
S:横倒しになる文字 characters which are displayed sideways
SB:横倒しになる括弧 brackets which are displayed sideways
T:単に上とか横ではなく、別のグリフが必要な文字 characters which are not just upright or sideways, but require a different glyph
スコープとしては、主に日本語の文字ですが、中国語などにも広げようとしているように見えます。
そして、CSS3の新しいEditor’s Draftでは、縦書きではこのUTR#50を利用して縦書きのときの文字の挙動を指定しようとしているようです。(注1)
CSS Writing Modes Module Level 3 Editor’s Draft 5 January 2012
さあ、これはうまく行くのでしょうか?直感的にはあまり意味がないような気がします。理由は以下の通りです。
「PDFインフラストラクチャ解説」http://www.cas-ub.com/project/index.html(でEPUB版を無償配布しています。)で文字と字形について整理しています(『PDFインフラストラクチャ解説』はプリントオンデマンドとEPUBを販売しています。)ので、そこを読んでいただくと分かると思いますが、文字のコードポイントは抽象的字体を定めるものであって、文字の表示形(字形、グリフ)を決めていない、と考えています。そして、文字の字形を与えるものはグリフであって、現在のフォント技術ではグリフはフォントファイルの中にあります。必然的に、コードポイントからグリフへのマッピングの仕組みが必要になります。日本語の縦書きは書記方法のひとつであり、表示形になるので本来コードポイントとは別の階層になります。コードポイントが基底階層とすると印刷や表示は表層です。そして日本語の文字には横書きと縦書きするときでグリフが違うものがあるのですが、これに対処するためにマッピングを切り替えることで文字の表示形を切り替える仕組を入れます。このマッピングの仕組みは必ずフォント依存になります(グリフはフォントファイルの中にあるからです)。
あとは、日本語の中に欧文などのほかの言語の列が来たときは、オリジナル言語の書記方向(たいていは左から右への横書き)で書いておいて、それを言語単位毎に文字列全体を回転させて日本語の文中に埋め込みます。こうすれば縦書きが簡単にできます。
こうして考えると、文字のコードポイント一つ一つに方向性を定義するのはあまり意味のないことだし、抽象化に反します。いわば、数十年前に先祖がえりというか・・・
しかし、CSS3 Writing ModeはTR#50に依存することになりそうです。これが正式な仕様になると、これからのブラウザは文字をひとつづつ回転させることになるかもしれませんね。どうもCSSのワーキングはフォント依存を嫌っているようなのです。その気持ちは分かりますが、しかし、フォント依存性をなくそうとすると文字毎に表示形を自力で操作することになり、また同時に、過去20年程度のフォントの技術の発展を無視することになります。以上のことからUTR#50は完全な解決策にはならないだろうと予想します(以上、1/11メモ)。
2012/1/13 追記(メモ)
TR#50をもう一度読みました。この文書は二つのこと、つまり日本語の(1)縦書きのときに字形を変えるべきかどうか、(2)文字と文字の間の空き量をどう変えるべきか、に対する指針を決めようとしているようです。この二つの問題は一応別の問題なので、とりあえず、ここでは(1)だけ取り上げることにすると、まず、Unicodeをはじめとする文字セットは原則として抽象的な文字(漢字の場合は字体)を決めているものです。そして、抽象的な文字を使って、日本語を横書きか、縦書きで書き表すことになります。現在日本語で使われている文字の中には、a. 横書専用の文字(例:U+2019 RIGHT SINGLE QUOTATION MARK)b.縦書き専用の文字(U+301D REVERSED DOUBLE PRIME QUOTATION MARK)c.縦書きと横書きで字の形(グリフ)が同じでよい文字(ほとんどの漢字)、d.縦書きと横書きで字の形を変えるべき文字(句読点類、括弧類など)があります。例は、日本語組版処理の要件(日本語版)(JLReq)の付属書に記載されているものより。
ですので、もし日本語の文字を分けるとすると上のa.~d.に分けるのが良いと思います。
さて、ラテンアルファベットなども日本語として1文字づつ使うときは、c.(日本語の縦書きで直立)にすべきで、URT#50で、CL-27(Western Character)をS:横倒しとしているのは正しくないでしょう。但し、英語の単語が縦書きの中に現れれば単語ごとそっくり横倒しです。これは文字を回転するのではありません。(CL-27を横倒しにしているのは、UTR#50の著者の頭の中に英語表記のスコープが混じっているからだと思います。しかし、文字単位で考えたら縦になる(正立する)のは自明だと思います)。つまり、TR#50は日本語縦書きの中に英語や他の言語(合わせて欧文という)の表記が入るとどうするか、と言う問題、いわゆる和欧混交の段落を縦書きするときの話を混同していると思います。しかし、日本語の中における欧文の表記、和欧混交の表示問題はTR#50のスコープ外になっているようですし、これは別の問題としてスコープ外のままで良いと思います。(★ここはちょっと表現がよくなくて、コメントがあります)
2012/1/14追記
CSS3のWriting-modeでは日本語縦書きの中にラテン文字を直立させる組版方法は、text-orientation:uprightで、日本語縦書きの中にラテン文字を欧文組版のブロックとして挿入する方法はtext-orientation:upright-rightを指定すると実現できます。従って、問題は縦書きのときのグリフとグリフメトリックスをどう決定するかということに尽きるようです。
2012/1/15追記
JLreqでは、日本語の縦組時に文中に挿入される英数字の向きは、(1)和文文字と同じように正常な向きで1字1字配置する。(2)主に英字の単語、文などは文字を時計回りに90度回転し,配置する。という二通りを挙げている。
英数字(ASCII文字)のUnicodeにおけるコードポイントは、Basic Latin(U+0020~たとえばAにはU+0041)であり、慣例的に半角形と呼ばれる。UnicodeではASCII文字の全角形(異形文字)にはコードポイントU+FF00~(たとえばAの全角形はU+FF21)が与えられている。したがって、(1)のように直立するときは全角形の文字コードを使い、(2)のように寝かせるときは半角形の文字を使いわければ、1冊の出版物の中で(1)と(2)の印刷時の表記を使い分けることができる。しかし、もし、一つの出版物の中ですべての英数字を半角形で作成すれば(1)と(2)の表記を自動的に切り替えることはできない。このときは、英数字の直立・横倒しを切り替えるには何からのマークアップを使う必要がある。
日本語を読む上では、(1)の表記の方が読みやすく、(2)のような横倒しは読みにくいのは明らかである。もし、全角文字と半角文字を使い分けせず、また、文字が横倒しになるのをできるだけ避けるとするならば、解決策としては、連続3文字までは直立し4文字以降は横倒し、というような規則で自動処理する方法もあるだろうが、あまり有効に働きそうもない。
で結局?
ASCII文字を立てる寝かせるというような問題は言語の書記方法の問題なので、Unicodeのような標準にはなじまないのではないか?
————————————————————–
(注1)
CSS Writing Modeのエディタは、UTR#50の文字のスコープをUnicodeの全域に広げようとしているようだ。そのために文字のカテゴリーを少し詳しく定義しなおすことを試みている。
http://dev.w3.org/csswg/css3-writing-modes/#vertical-typesetting-detailsの抄訳
(なお、この文章はエディターズ・ドラフトというものであって、CSSの正式なドキュメントではないので注意。)
1.URT#50と次の規則により縦組みの時の文字の挙動を5つのクラスのどれかに分ける。
なお、‘upright-right’と‘upright’は、CSS Writeing Modeのtext-orientation特性で指定する値である。この詳細は後述する。☆を見よ。
1) 直立upright (U)
‘upright-right’ と ‘upright’ 書記指定時で直立する
2) 横倒しsideways (Sv)
‘upright-right’ と ‘upright’ 書記指定時で横倒し (時計回りに90度回転) (★SvとSBの違いが分かりにくい)
3) 非ネイティブ non-native (Sh)
‘upright-right’ 書記指定時は横倒し、‘upright’ 書記指定時に直立
4) 括弧brackets (SB)
‘upright-right’ と‘upright’ 書記指定時にともに横倒し。しかし、縦書きをサポートするOpenTypeフォントが直立の異形グリフをもつので、縦組みフォント設定オンで直立する。
5) 変形transforms (T)
縦組みと横組みでグリフの形が大幅に変わるもの。‘upright-right’と‘upright’ 書記方向で直立するが、正しい組版では波形グリフを必要とする。
SvとShは、UTR#50執筆時ではSとなっている。‘upright’ 指定時の挙動の違いで分割した。
2)のSvは、Sカテゴリーの次の文字からなる:
・回転する縦書き言語に属する文字 (e.g. Mongolian)
・空白 (Zs), 接続文字 (Pc), ダーシ (Pd) あるいは括弧のような句読文字 (Ps, Pe, Pi, Pf)(★←SBに入っていたのではないか?)
・Box Drawing、Block Element区域の文字
その他のS文字はShになる。
2.Unicode文字の分類は次のようになるだろう。(以下のa, b, cの分類はUTR#50によるものだと思う。英語の文章はそうは読めないけれども。)
a. 括弧類brackets (SB)には次が入る
東アジアのすべて全角(F) と広い(W) 括弧句読文字 (Ps, Pe, Pi, Pf)
b. 横倒しsideways (S)には次が入る
Currency Symbols (Sc), Math Symbols (Sm), and Modifier Symbols (Sk)、Dashes (Pd)(全角のハイフンマイナスを除く)
東アジアの半角East Asian Halfwidth (H) 文字、上付き、下付き、 and non-Indic fractions from the Other Number (No) category.
Aegean numbers and North Indic fractions from the Other Number (No) category.
All characters from the Box Drawing and Block Elements blocks
All directional arrows: the Arrows block, the Pointing hand symbols from the Miscellaneous Symbols block, any arrow from the Miscellaneous Symbols and Arrows block, any Dingbat arrows from the Dingbats block
Other Symbols (So) from the Latin-1 Supplement and Letterlike Symbols blocks.
Other Symbols (So) from the Aegean Numbers, Ancient Symbols, Common Indic Number Forms blocks
Characters belonging to any horizontal-only or rotating vertical scripts.
c. 直立upright (U)には次が入る
すべての東アジアの全角文字 (F) と広い (W) 文字でSBに割り当てられているものを除く
Other Numbers (No) and Other Symbols (So) except those assigned to S
All letters (L*), marks (M*), and numbers (N*) belonging to any translating vertical scripts.
3.☆text-orientationの値の説明。以下の値は縦組のときの話である。デフォルトは、‘upright-right’ なので、text-orientationになにもしない指定ときは‘upright-right’である。
a. ‘upright-right’ 縦組のとき、横書き専用のsriptの文字は横倒しになる。すなわち、標準の方向から時計回りに90度回転する。縦書きの記法がある文字は固有の方向となる。
b. ‘upright’ 縦組みでは、横書き専用のsriptの文字は直立で可視化される。このような記法の文字の字形は独立系となる(アラビア文字などの独立形のこと)。縦書きscriptの文字は固有の方向で書かれる。縦書き用の異形グリフや縦書きのフォントメトリックスが使えるときはテキストにセットする。