CSSの縦書きとUnicode(TR#50)がホットです

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の文字は固有の方向で書かれる。縦書き用の異形グリフや縦書きのフォントメトリックスが使えるときはテキストにセットする。

「PDFインフラストラクチャー解説」EPUB本の0.12版を公開

昨夜より、「PDFインフラストラクチャー解説」EPUB本の0.12版を公開しました。
EPUBはこちらからダウンロードしていただくことができます。

「PDFインフラストラクチャー解説」EPUB本の0.12版

2016年1月に本書発売により無料配布を終了させていただきました。詳細ご案内は下の【広告】をどうぞ。

0.12版で0.1版から追加になったのは、次の通りです。

6章の6.4以降
6.4 Unicode の歴史
6-5 漢字の文字コードと字形
6-6 漢字の大文字セット
6-7 グリフとグリフセット
6-8 ハングル
6-9 ラテンアルファベットと結合文字
6-10 アラビア文字
6-11 リガチャ

第7章スクリプト処理
7-1 スクリプト処理エンジン
7-2 結合文字と文字の合成
7-3 アラビア文字の処理

四六版にして50頁弱です。文字コード関連の記事は、「PDF千夜一夜」でも結構気合を入れて書いた内容なのですが、いままでまとめていなかったので、今回まとめることができて大満足ですが、タイ語などの南インド系の文字、デバナガリなどがほとんど記載がなくて片手落ちなのに気がつきました。今後、なんとか、記事を追加したいと思っています。

PDF版もあるのですが図版の配置がみすぼらしいのでまだ公開しません。

やっていて、CAS-UBでEPUB本を作るのは少なくともタグの編集をするよりは数倍生産性が高いと、自信をもちました。一方で、CAS-UBの編集メニューには、まだまだ改善の余地があることを感じました。だんだんよくしていくつもりです。

PDFInterestグループもよろしく!

PDFについて語ろう!
http://www.facebook.com/groups/PDFinterest/

[お知らせ]
★IE8/IE9でダウンロードしようとして、上記のリンクをクリックすると次のエラーが表示されます。
「スタイル シートを使用した XML 入力は表示できません。エラーを訂正してく
ださい。
[更新] ボタンをクリックするか、または後でやり直してください。」

恐れ入りますが、Chrome、あるいは、FireFoxでダウンロードしてください。
また、iPadのSafariでダウンロードしてiBooksで読んでいただくこともできます。

なお、現在、EPUB2の出力で図の参照、見出しの参照のリンク設定に問題があり、EPUBリーダによっては、リンク先がファイルの先頭になってしまいます。この障害は修正する予定です。  

レンダリングエンジンにGeckoを使うEPUBリーダ、AZARDIクイック・レビュー

現在、皆EPUB3のリーダを待ちわびている状態ですが、その一つで、AZARDIというリーダの新しいバージョン(バージョン8)がリリースされました。AZARDIに注目している理由は、レンダリング・エンジンがGeckoベースとされているためです。EPUBリーダのレンダリング・エンジンは、1)独自開発、2)WebKit、3)アドビのRMSDKベースが多いのですが、Geckoベースはあまりありません。

ではなぜ、Geckoベースに着目するかというとEPUB3で標準となった数式(MathML)の表示が可能になるからです。上記の1)~3)いずれも数式を表示できるものはまだありません。Adobe Digital Editionsのプレビュー版(1.8.1)でも数式は不可です。

ということで、早速試してみました。実は以前のバージョン(AZARDI6)でも試したのですが、一つ問題があってCAS-UBで作ったEPUB3を表示できなかったのです。CAS-UB側を直してAZARDIの旧バージョンで表示できるようにする方法(回避策)はありましたが、しかし根本原因はAZARDI側がEPUB仕様に準拠していない、ということなので開発元に直してもらうのが筋だろうと考えて、先方に問題を連絡して直してもらいました。このあたりが相互運用性の難しさということになりますが、向こうも比較的協力的でGood!Microsoft やAdobeでは絶対期待できない迅速な回答は嬉しいです。ベンチャのよさです。やはりイノベーションはベンチャだ!

で待望のAZARDI8を早速試してみました。次の図は数式を表示しているところです。とりあえずレイアウトは別にして表示しています。EPUBリーダで数式を表示するところを実際に見たのは初めてです。感激!

しかし、少し先へ行くとこんな感じになります。

他のEPUBファイルも見てみましたが、どうやらpre要素(整形済み)が頁の表示領域をはみ出すと乱れるようです。この機能は小説などにはあまり出てこないのですが、専門書ではかなり頻繁に使うと思います。数式がでてくるのは専門書なので重要な機能となります。かなりまずいです。

いくつか他のEPUBも試してみました。文字だけであれば表示は特に大きく乱れないようですが、画像が入ると乱れます。

次は「OnDeck」の一画面です。

他の箇所を見ても画像の位置の制御ができていないようです。ということで、結論は、「まだまだ」ということでした。残念。

「PDFインフラストラクチャー解説」EPUB本の0.1版を公開

明けましておめでとうございます。今年もよろしくお願いします。

昨年の末から、2005年から2008年にかけてブログで1000日間連載した「PDF千夜一夜」(http://blog.antenna.co.jp/PDFTool/)の記事を整理して電子本を作っています。もちろん全面的にCAS-UBを使っています。

発行しようとしている本の名前を仮に「PDFインフラストラクチャ解説」という名前にしました。とりあえず、夏ごろに発行したいと考えています。昨年末からはじめてまだ4,5日ですが、四六版PDFにしますと約120頁程度(見出しだけの頁を含めて全178頁)できましたので、少々気が速いですが、0.1版としてEPUB版を公開しました。次からダウンロードしていただくことができます。

「PDFインフラストラクチャ解説」EPUB2.0版(0.1版)(無償) 2016年1月に本書発売となり、無償配布を終了させていただきました。

本書はPDFという情報インフラについて多くの人に理解を深めてもらうことができるよう書籍としての完成度を高めたいと思っています。そこで本書は完成するまでの間、無償で配布して皆様のご意見を賜りながら内容を改めて、完成したら有償で出版したいと考えています。しかし、人気が出ない場合は電子版のままかもしれません。

また本書について議論していただくことのできる場所としてfacebookグループ(http://www.facebook.com/groups/PDFinterest/)を開設しました。関心をお持ちの方はグループにご参加いただき、質問、コメント、議論をいただければ幸いです。PDFinterestグループに参加いただいた方は、書籍完成の折には、奥付けに名前を掲載させていただきたいと考えています。

ブログの記事が1000件ある中で書籍に盛り込む意味がありそうなのが500件位あります。その中でいまのところ1割強を整理しました。少しオリジナルも書いています。まだ目次だけあって内容のないページが多い状態ですが、この調子でいくと500ページを超えそうで、だいぶ時間がかかりそうです。夏が目標ですがそれまでにできないかもしれません。

それにしてもブログを書いたときは存在したリンク先のページが削除・移動されてリンク切れとなり、記載した情報の裏付けがなくなってしまっているものが多いのには困ります。やはりまとまった情報はきちんと一つのパッケージとして出版しておかないと長期的に内容の担保ができないことを改めて感じます。

ブログを書いてから記事によっては3年から5年を経過した今、改めて見直しますとソフトウェア世界の変化に改めてビックリです。大きな変化は、ブログを書いている間にPDFがISOの標準(32000-1)になったこと、それから、WindowsはXPからVistaを経て現在はWindows7になっています。今年はWindows8が出る予定です。Adobe PDFはバージョン7でしたが、現在はバージョンXになっています。

クラウドもブログを書いている頃に注目を集め始めたのですが、既にクラウド全盛に近くなっています。こうした変化の激しさに改めて感慨深いものがあります。もっと大きな変化は、スマホの登場、iPadの登場でしょうか。そしていわずと知れた電子書籍、EPUBへの期待があります。

この5,6年でPDFがビジネスのインフラの地位を確立し、PDFソフトはコモディティ化しました。この間PDF技術の中核はあまり変わっていません。PDFはもともとPostScriptという高度な技術がベースでありましたので、最初から完成度が高かったのですが、20年を経てPDFはもうかなり枯れた技術になっています。そういう意味で安心感があります。

【広告】
「EPUBによる電子出版ビジネスソリューション調査報告書2012 追補版」で5つ星評価のEPUB制作ソリューション