|
シリア語 / モンゴル語 / デーヴァナーガリー文字 シェーピングサポート マルチスクリプト機能サーフェス (v2.119.53 - v2.119.55)
|
アラビア文字シェーピング 自動シェーピングパイプライン GSUB エンジン |
|
HotPDF は、アラビア語以外の 3 つの複雑スクリプト、Syriac(U+0700-U+074F)、Mongolian(U+1800-U+18AF)、Devanagari(U+0900-U+097F)に対して、接合クラス / 位置解析 / インディック音節カテゴリのケイパビリティサーフェスを公開します。各ケイパビリティにより、呼び出し側は既存の OpenType GSUB エンジンを通じて正しくシェイピングされたスクリプトを駆動でき、重い処理(クラスタ境界検出、BiDi 解決、GPOS ポジショニング)は HotPDF の守備範囲の外に保たれます
Syriac シェイピングケイパビリティ (v2.119.53) Syriac の接合挙動を公開する 2 つのメソッド:
function GetSyriacJoiningClass(CP: Cardinal): TJoiningClass; function GetSyriacPosition(const Run: array of Cardinal; Index: Integer): TPosition;
Syriac はアラビア語と同じ Right-Joining / Dual-Joining / Transparent / Non-Joining の 4 クラス枠組みに従います。
アラビア語と異なり、Syriac ブロックにはUnicode にプレエンコードされた Presentation Forms がありません。U+FB50-FDFF / U+FE70-FEFC の Arabic Presentation Forms ブロックに相当する Syriac のものは存在しないのです。したがって、Syriac のシェイピングはコードポイント書き換えではなく、フォント定義の GSUB ルックアップ(通常
Mongolian シェイピングケイパビリティ (v2.119.54) Mongolian 向けの対になる 2 つのメソッド:
function GetMongolianJoiningClass(CP: Cardinal): TJoiningClass; function GetMongolianPosition(const Run: array of Cardinal; Index: Integer): TPosition;
カバレッジには、基本モンゴル文字(U+1820-U+1842)、Todo(U+1843-U+1877)、Sibe(U+1880-U+18A8)、満州文字、アリガリ拡張が含まれます。異体字セレクタ FVS1 / FVS2 / FVS3(U+180B-U+180D)、ソフトハイフン相当の NIRUGU(U+180A)、アリガリの母音記号はすべて Transparent(T クラス)として分類され、探索を壊さずに接合に参加します
Syriac と同様に、Mongolian にも Unicode にプレエンコードされた Presentation Forms はありません。モンゴル文字の伝統的な縦書きレイアウト、複雑な字形変化規則、FVS による字形選択は、すべてフォント定義の GSUB ルックアップ(通常
Devanagari インディックシェイピングケイパビリティ (v2.119.55) Devanagari はアラビア語 / Syriac / Mongolian とは根本的に異なります。意味のある単位が単一の文字ではなく音節クラスタ(アクシャラ)であるインド系アブギダ文字で、クラスタ内グリフの描画順序は論理的な Unicode 順としばしば異なります。Devanagari のインディックケイパビリティ層を公開する 2 つのメソッド:
function GetDevanagariCategory(CP: Cardinal): TIndicCategory; procedure ApplyDevanagariReorder(var Run: array of Cardinal);
自動統合 (v2.119.67):
典型的なワークフロー (Syriac)
PDF.RegisterUnicodeTTF('Estrangelo', 'SyrCOMEdessa.otf'); PDF.SetGSUBScript('syrc'); // see GSUB engine doc for i := 0 to Length(Run) - 1 do begin Pos := PDF.GetSyriacPosition(Run, i); // init / medi / fina / isol // query GSUB for the position-appropriate substitute glyph // emit + MarkUnicodeGlyphUsed end;
典型的なワークフロー (自動並べ替え付き Devanagari)
PDF.RegisterUnicodeTTF('NotoDeva', 'NotoSansDevanagari-Regular.ttf'); PDF.ShapingFeatures := [sfIndicShaping]; // auto Repha + I-matra reorder PDF.CurrentPage.SetFont('NotoDeva', [], 14); PDF.CurrentPage.UnicodeTextOut(50, 700, 0, UnicodeString(#$0939#$093F#$0928#$094D#$0926#$0940)); // "Hindi"
Unicode サブセットと抽出ヘルパー
守備範囲と制限 現在のプロデューサー側統合 Syriac、Mongolian、Tibetan、Indic のシェイピングには、明示的な API リファレンスページがあります。Syriac は 現在の守備範囲は、RTL 筆記体スクリプトとしての N'Ko と Adlam、タイ語 / ラーオ語の SARA AM と声調記号の順序、ヘブライ語のニクダー順序、ジャワ語の前置記号もカバーします。これらのパスは script shaping preprocess methods に文書化されています
関連項目: Arabic / Persian / Urdu Shaping Support, Automatic Shaping Pipeline (Phase 8), OpenType GSUB Substitution Engine, THotPDF.AssignSyntheticCodepointForGID |