アラビア文字組版レンダリングにおける技術的負債

デジタルレンダリングと古典的アラビア文字組版のギャップ

最新のウェブブラウザは、アラビア語の正しい両端揃えをネイティブに実行できません。ラテン文字は単語間のスペースを伸ばすことでテキストを揃えますが、古典的なアラビア文字組版は taṭwīl(または kashida)を使用し、行を余白まで埋めるために単語内部の接続ストロークを伸長させます。

現代のレイアウトエンジンはアラビア語の両端揃えを形状問題ではなく間隔問題として扱うため、"ragged" な端や単語間の不格好な隙間が生じます。この失敗は理論的知識の欠如ではなく(比例文字(al-khaṭṭ al-mansūb)の規則は10世紀の宰相Ibn Muqlaによって体系化されました)、ブラウザエンジンがテキストの改行や字形の伸長を処理する構造的な欠陥によるものです。

文脈依存形状形成の複雑さ

アラビア語は本質的に筆記体であり、印刷体と手書き体の区別がありません。各文字は隣接文字との位置関係に応じて形を変え、isolated、initial、medial、final の4つの形が必要です。

形状形成エンジンの役割

アラビア語を正しくレンダリングするには、ソフトウェアは形状形成エンジン(例:HarfBuzz)を使用して、抽象的なUnicodeコードポイントをレンダリング時に具体的な字形に変換する必要があります。このプロセスでは OpenType 機能を適用します:

  • isol, init, medi, fina: 位置形状。
  • rlig: 必要な合字(例:lām-alif)で、これが無いとテキストは読めないとみなされます。
  • markmkmk: 母音記号のスタック。

形状形成エンジンが無い場合、テキストは左から右へ配置された切り離された孤立文字の連続として表示され、古い PDF ジェネレータや一部のプロットライブラリ(例:matplotlib)、レシートプリンタでよく見られる失敗です。

レガシーエンコーディングの負債

Unicode には「Arabic Presentation Forms」(U+FB50 から U+FEFF)という、抽象文字ではなく形状自体を格納するブロックが含まれています。これは 8 ビットコードページとの往復互換性のために追加されました。このため大きな技術的負債が生じます。画面上では同一に見える2つの文字列でも、1つは抽象文字、もう1つは表示形としてエンコードされているため検索に失敗します。これを解決するには、形状を基底文字に戻す NFKC 正規化が必要です。

双方向(Bidi)レイアウトと「嘘つき」カーソル

ラテン文字、数字、URL などを含む混在コンテンツのアラビア語は、Unicode 双方向アルゴリズム(UAX #9)に従います。このアルゴリズムは文字に「方向性の属性」(Strong RTL、Strong LTR、Weak、Neutral)を割り当て、表示のために再配置します。

カーソル境界問題

画面上の視覚的順序がメモリ上の論理順序と異なるため、テキストエディタはラン境界でのキャレット位置決めに苦労します。その結果、混在スクリプトテキストをナビゲートするとカーソルが「ジャンプ」したり「戻って」しまいます。

数字の弱さ

数字は「weak」文字として分類されます。UAX #9 の規則 W2 により、数字がアラビア文字に続く場合は ARABIC NUMBER に再分類され、そうでなければ EUROPEAN NUMBER となります。このため、電話番号(例:"010-1234-5678")が画面上で逆転するなどの一般的なレンダリングバグが発生します。ハイフンが neutral とみなされ、数字列がその周囲で位置を入れ替えるためです。

技術的妥協の歴史

アラビア印刷の歴史は、文字を機械の制限に合わせるための一連の簡略化です:

  • 1514 (Fano): 最初の活字アラビア語の本は話者でない者によって組版され、文字が切れ離れ、点がずれる結果となりました。
  • 1924 (Cairo Qurʾān): Bulaq/Amiria Press は位置形態と合字用に数百の個別金属活字を使用し、高忠実度のレンダリングを実現しました。
  • 1958 (Simplified Arabic): Linotype 機械の 90 チャネルマガジンに合わせるため、Kamel Mrowa と Linotype は初期形態を中間形に、最終形を孤立形に統合し、ほとんどの合字を削除しました。この「Simplified Arabic」はコストと速度の面でニュースルームの世界標準となりました。

オープンソースインフラの現状

実用的なアラビア語テキストスタックの多くは、商業的投資ではなく無償のボランティア努力の結果です:

  • Amiri Font: Khaled Hosny によって作成されたこの OFL フォントは Bulaq Press の書体を復活させ、手動伸長用の曲線的カシーダを含みます。
  • HarfBuzz: Chrome と Android が使用する形状形成エンジンで、Behdad Esfahbod と Khaled Hosny によって大幅に開発されました。
  • The Justification Standoff: W3C の Arabic Layout Requirements タスクフォースがあるにもかかわらず、jstf OpenType テーブル(フォントが両端揃えの優先度を宣言できる)はエンジンによってほとんど読まれず、鋳造所でも出荷されていません。

"ブラウザベンダーは HarfBuzz が無料で完成していた時に取り入れましたが、書記システムを画面上で最終的に動作させるための両端揃え作業にはほぼ何も貢献していません。"

Sources