|
アラビア語 / ペルシア語 / ウルドゥー語 シェーピングサポート プロデューサー側のシェーピングパイプライン (v2.85.0 - v2.119.68)
|
Open型 GSUB エンジン CFF / Open型 サブセット化 |
|
HotPDFは、PDFテキスト出力中にUnicode入力のアラビア語、ペルシア語、ウルドゥー語のランをアラビア表示形に折りたたむプロデューサー側のシェーピングパイプラインを実行するため、コンシューマーリーダーは、独自のHarfbuzzクラスのシェーパーを必要とせずに、すぐにレンダリングできる位置/合字グリフを受け取ります。
パイプラインの機能 位置のシェーピング (v2.85.0): すべてのアラビア語の基本文字には、独立形 (
LAM-ALEF の必須合字 (v2.119.32): アラビア語のUnicodeシェーピング仕様では、LAM (U+0644) の直後に ALEF (U+0627 プレーン、U+0622 上部にマッダ、U+0623 上部にハムザ、U+0625 下部にハムザ) が続く場合、単一の合字グリフ (U+FEFB - U+FEFC 独立/語尾形、適切なハムザ/マッダのバリアント付き) に折りたたむことが義務付けられています。これは、アラビア語タイポグラフィにおけるごくわずかな必須の合字の1つであり、正確さのために必要です。これらを別々のグリフとしてレンダリングすると、ネイティブの読者がすぐに不正な形式であると認識するテキストが生成されます。HotPDFは出力中に折りたたみを行うため、呼び出し元は独自のコードパスにHarfbuzzクラスのシェーパーを必要としません。
ペルシア語 / ウルドゥー語のコア9文字 (v2.119.35): ペルシア語とウルドゥー語は、アラビア表示形Bブロック(U+FE70 - U+FEFC)にはない文字でアラビア語を拡張します。最もよく使われる9つの文字(PEH (U+067E)、TCHEH (U+0686)、JEH (U+0698)、KEH (U+06A9 / U+06AF)、GAF (U+06AF)、NOON GHUNNA (U+06BA)、HEH DOACHASHMEE (U+06BE)、YEH BARREE (U+06D2)、HEH GOAL (U+06C1) を含む)は、アラビア表示形A(U+FB50 - U+FDFF)に表示形を持っています。HotPDFは、位置のシェーピング中にこれらの文字を適切なForms-Aグリフにマッピングするようになったため、ペルシア語とウルドゥー語のテキストは、どのコンシューマーリーダーでも正しい語頭/語中/語尾/独立形でレンダリングされます。
アラビア文字拡張A + 補足 (v2.119.52, v2.119.56): 結合クラステーブルは、残りのアラビア文字拡張A文字 (ALEF WASLA / NOON GHUNNA / HEH バリアント)、アラビア文字補足 U+0750-U+077F、および上位のアラビア文字拡張A U+08A0-U+08FF の範囲をカバーするようになりました。静的な表示形Aのエンコーディングを持つ文字は、既存の4位置シェーパーを通じてマッピングされます。持たない文字(拡張Aのほとんど)は結合クラスの分類のみを取得するため、文字自体が変更されずに通過した場合でも、隣接する文字は正しくシェーピングされます。v2.119.56 では、v2.119.52 によって導入された2つの誤った Forms-A マッピング (U+06C2 / U+06C3) が修正されました。
ペルシア語 / ウルドゥー語 Form-B のフルカバレッジ (v2.119.57): 結合クラステーブルが拡張され、U+0672-U+06D5 の範囲全体(REH / DAL / SEEN / SAD / TAH / AIN / FEH / QAF / KAF / GAF / LAM / NOON / HEH / WAW / YEH のバリアントをカバーする約80文字)にまたがるようになり、26の新しい表示形Aマッピングが追加されました(15のDクラス4形式 + 11のRクラス2形式)。特に、ウルドゥー語の標準の 'h' HEH DOACHASHMEE (U+06BE → FBAA-FBAD) とウルドゥー語の語尾の yeh YEH BARREE (U+06D2 → FBAE-FBAF) は、v2.119.52 ALEF WASLA / NOON GHUNNA の一時的な修正によって誤用されていた Forms-A スロットに正しくマッピングされるようになりました。静的な Forms-A カバレッジは現在40以上のソース文字に及びます。
YEH-HAMZA + 母音合字のポストパス (v2.119.58): 位置のシェーピング後に
Allah 合字 (v2.119.60): 4文字のシーケンス ALEF + LAM + LAM + HEH は、U+FDF2 ARABIC LIGATURE ALLAH ISOLATED FORM に折りたたまれます。
Bismillah フレーズの合字 (v2.119.62): 標準の22コードポイントのBismillahフレーズ "بسم الله الرحمن الرحيم" は、単一のグリフ U+FDFD ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM に折りたたまれます。
パブリッククエリヘルパー
呼び出し元からの呼び出し方法 shaping pipeline は Unicode text emission methods 内で自動実行されます。明示的な「shape this」呼び出しは不要です。Unicode-input の Arabic / Persian / Urdu strings を
フォントの要件
Noto Sans Arabic (ラテン文字 + アラビア文字; Forms-A + Forms-B + アラビア文字拡張A)。 Noto Naskh Arabic, Noto Naskh Arabic UI。 Amiri (伝統的な Naskh, Forms-A + Forms-B のフルカバレッジ)。 Scheherazade New (SIL, イスラム世界の言語向けに設計)。 Microsoft Arabic タイプetting / Tahoma / Times New Roman (Windowsにバンドル、Forms-B のフルカバレッジ。一部は Forms-A カバレッジを持つ)。
登録されたフォントに派生した表示形のグリフがない場合、HotPDFはベースのUnicodeコードポイントにフォールバックし、変更せずにそれを出力します。その後、コンシューマーリーダーは独自のシェーピング(Acrobat、Foxit)を試みるか、
一般的なワークフロー
PDF.RegisterUnicodeTTF('NotoArab', 'NotoSansArabic-Regular.ttf'); PDF.BeginDoc; PDF.CurrentPage.SetFont('NotoArab', [], 14); PDF.CurrentPage.RtLTextOut(100, 700, 0, UnicodeString(#$0645#$0631#$062D#$0628#$0627)); // "marhaba" (hello) PDF.EndDoc;
自動フェーズ8パイプラインの統合 (v2.119.59 - v2.119.68) v2.119.59 では、オプトインの
ToUnicode CMap 合字リバースマッピング (v2.119.61, v2.119.62, v2.119.65)
PUA 合成コードポイント出力 (v2.119.68)
Open型 GSUB エンジンとの関係 上記の static post-pass shaper (v2.85.0 + v2.119.32 / 58 / 60 / 62) は default では OpenType GSUB engine から独立しています。
Unicode コードポイントを持たない置換グリフの場合、呼び出し元は
範囲と制限事項 BiDi algorithm はこの page の範囲外です。callers は mixed LTR / RTL runs を自分で order するか、別の BiDi library を使用する必要があります。GPOS、Indic/Tibetan/Mongolian、Hebrew、N'Ko、Adlam、Thai/Lao、Javanese support は別の opt-in shaping flag と API pages に移ったため、この page は static および GSUB-based Arabic shaping のみに focus します
See also: Open型 GSUB 置換エンジン, 自動シェーピングパイプライン (フェーズ 8), シリア語 / モンゴル語 / デーヴァナーガリー文字のシェーピング, THotPDF.AssignSyntheticCodepointForGID, THPDFPage.RtLTextOut, THPDFPage.UnicodeTextOut, CFF / Open型 フォント サブセット化 |