アラビア語の実装

たまたまDITAでアラビア語の仕事をさせていただいています.XSL-FOは左から右へ書く通常の英語だけでなく(writing-mode="lr-tb")、右から左にも書く(writing-mode="rl-tb")にも対応しています.でも実戦でこれを使うかどうかとなるとひとえにお客様がその言語を必要としているかにかかっているので、実はアラビア語スタイルシートを書いたことは今までありませんでした.

今回いままでやった知識でFOで簡単なサンプルを作ってみたので紹介いたします.アラビア語のXSL-FOを作るのには簡単に言うと

1.fo:rootでwriting-mode="lr-tb"から"rl-tb"に変更する.
2.fo:region-endなどに詰め見出しがある場合、fo:simple-page-masterには、writing-mode="from-master-region()"を記述し、fo:region-startとfo:region-endの位置がwriting-modeの指定で自動的に置き換わるようにする.fo:region-endのreference-orientation="-90"から"90"に換える.
4.必要だったらアラビア語のフォントを割り当てる.
5.揃えの指定はtext-align="left","right"からwriting-modeを意識して"start","end"に書き直す.

くらいではないかと思います.

最初は普通の英語の組版例です.

[英語の組版例⇒fo:root/@writing-mode="lr-tb"]

イメージ 1


このFOのfo:root/@writing-mode="lr-tb"⇒"rl-tb"にすると、主要な部分は自動的に変わってくれます.

アラビア語組版例⇒fo:root/@writing-mode="rl-tb"に変えただけ]

イメージ 2


ここがFormatterのすごいところですが、

- テキストの文字方向が右⇒左になります.(サンプルが英語なので実感できませんが...)
- リストも右に行頭番号/行頭文字が配置されます.
- テーブルの列の順序も列位置の1番目が一番右側になります.

あと調整が必要なところは、以下です.

- fo:region-endに詰め見出しをつけています.英語のときはreference-orientation="-90"にしていたのですが、アラビア語のときは、refrence-orientation="90"にしないとこの例ではつじつまが合いません.
- fo:block-containerで絶対位置を指定していたものは、left="~"からright="~"に書き換えます.

このようにしてできたのが、次の例です.

アラビア語組版例⇒fo:root/@writing-mode="rl-tb"とその他を補正]

イメージ 3


こうしてみるとXSL-FOは多言語組版で非常に優秀だなと再認識しました.

私はスタイル定義をすべて外付けにしています.非常に大雑把な比較ですが、プロダクションレベルの共通のスタイル定義は約3600ステップです.これに対してアラビア語の差分は約140ステップでした.(コメントや空行を含みます)単に共通のスタイル(変数)定義にアラビア語の差分をカスケードするだけで、スタイルシートのロジックの変更は一切行う必要がありません.これで一つのスタイルシートで英語もアラビア語も出来てしまうのですからすごいものだなと思いました.

しかしアラビア語を実際に仕上げるためには、翻訳やタッチアップなどスタイルシートの手の届かない範囲での作業も必要です.たいてい技術文書は英語版から展開していくのが常ですが、あらかじめアラビア語に展開する予定があるなら、writing-mode="rl-tb"がどのようなものか知っておいたほうが吉でしょう.

ここで紹介した例は以下からダウンロードできます.(よく考えたらアラビア語が全然入っていませんでしたがサンプルにはなります.)

英語の組版例⇒fo:root/@writing-mode="lr-tb"
⇒ltr_01.fo、ltr_01.pdf
アラビア語組版例⇒fo:root/@writing-mode="rl-tb"に変えただけ
⇒rtl_01.fo、rtl_01.pdf
アラビア語組版例⇒fo:root/@writing-mode="rl-tb"とその他を補正
⇒rtl_02.fo、rtl_02.pdf

http://yahoo.jp/box/o6Pw8v に圧縮してあります.