« 2006年01月19日 | メイン | 2006年01月21日 »
2006年01月20日
PDFと文字 (28) – アラビア文字のプログラム処理
アラビア文字はアラビア語以外の表記に使われるようになる際、文字が追加されています。Unicodeのアラビア文字ブロックには、アラビア語以外の言語用に追加されたアラビア文字も含まれています。
拡張アラビア文字(Extended Arabic Letters)という見出し付きで、ペルシャ語(イラン)、ウルドゥ語(パキスタン)、パシュトゥー語(アフガニスタンほか)、シンディー語(インド)など各種の言語用に追加された文字が規定されています。
アラビア文字を表示・印刷・PDFに処理するプログラムは、単に文字コードからグリフに対応つけるだけではなく、幾つかの必須処理を行わねばなりません。
次に簡単に紹介しておきます。
(1) 文字の結合(Cursive Joining)
アラビア文字は接合に関して次の6つのクラスになります。
・接合しない文字:ゼロ幅非接合子(Zero Width Non-Joiner U+200C)など
・右接形のみ:印刷の際に右の文字にのみ接合する文字
・両接形:両方の文字に接合する文字
・接合を起こす文字:ゼロ幅接合子(Zero Width Joiner U+200D)など
・接合に対して影響を与えない文字
※左節形しかないものはありません。
プログラムはアラビア文字自身がどのクラスに属するか、及び、左右の文字のクラスを見て、その文字の表示・印刷・PDF作成用のグリフを選択します。
(2) Harakatの処理
アラビア文字にはHarakat(母音記号など)があります。Harakatは基底になる文字の上、または下につけて発音を表します。Unicodeでは、Harakatに基底の文字とは別のコードポイントを与えていますので、表示・印刷・PDF作成では、プログラムで基底文字と結合し、Harakatを基底文字の上あるいは下に配置しなければなりません。
(3) リガチャの処理
アラビア文字を筆記するには、必須とされている2文字のリガチャがあります。必須リガチャについては、単に接合させるだけではなく、2文字を組みにした新しいグリフに入れ替えなけばなりません。
アラビア文字を表示したり、印刷・PDF作成では、文字のコードポイントから単純に該当するグリフを取って来るだけではなく、プログラムで(1)から(3)の処理を行わねばなりません。そのためのロジックは、昔ならば、各アプリケーションのメーカが研究したものでしょう。ロジックをゼロから研究するにはアラビア語を理解して、アラビア文字を独自に研究する必要があります。
Unicodeの仕様書に標準のアルゴリズムが掲載されていることで、これを忠実に実装すれば、アラビア語を全然知らなくても、最低限のアラビア文字処理ができることになったわけです。
アンテナハウスでは、XSL-FOに準拠する組版ソフトXSL Formatterを開発・販売しています。XSL Formatterは、2002年にアラビア文字の組版・PDF化を、この分野の製品としては世界で始めて実装しました。これにより、自動車、OA機器などのアラビア語などのマニュアル作成用途として、メーカやローカリゼーションの関連の多数の会社に採用していただくことができました。XSL Formatterの成功のきっかけは、アラビア語組版を、世界で一番最初に実現したことにあるともいえます。
その後、他のXSL-FO組版エンジンのメーカもアラビア文字組版を実現してきているようです。誰でもできるわけですから、その分、ソフトウエアのグローバルな競争も厳しくなるわけですね。
※参考資料
Unicode 4.1.0 Middle Eastern Scripts
Unicode4.0仕様書pp.199~202