HPDFShapeHeadlessTextStyledSpan

function HPDFShapeHeadlessTextStyledSpan(const Context: UnicodeString;
  FirstUnit, UnitCount: Integer; const Order: THPDFHeadlessTextOrder;
  const FontBytes: SysUtils.TBytes; MaximumGlyphs: Integer;
  CancellationToken: THPDFCancellationToken;
  CharacterAdvance, WordAdvance: Double;
  CSSLetterSpacing, CSSWordSpacing: Boolean): THPDFHeadlessShapedGlyphs;

HPDFHeadlessShaping で宣言されるこの関数は、完全な周囲コンテキストと事前解決済みの視覚順序を使って UTF-16 スパンにシェーピングを適用します。供給された HarfBuzz・FriBidi ランタイムとフォントバイトを使用します

FirstUnit はゼロベースの UTF-16 オフセットで、UnitCount が要求されたスパンを選択します。呼び出し側は互換性のある順序データと正の MaximumGlyphs 予算を供給しなければなりません

CharacterAdvance と WordAdvance は PDF ポイントではなく、正規化された 1000 フォント単位のアドバンスを使います。呼び出し前に points * 1000 / fontSize でポイントスペーシングを変換してください

生アドバンスは有限で絶対値 1000000000000000 以下でなければなりません。これにより、サポートされる最小の正のフォントサイズでもネイティブのポイント予算が成立します。外観ビルダは、記述値と計算値それぞれのポイント上限を別途適用します

CSSLetterSpacing はタイポグラフィ単位のトラッキングと任意合字の処理を有効にします。CSSWordSpacing は、区切り記号を含め、SPACE と NBSP クラスタの前後の半分スペーシングを有効にします。これは上限付きスペーシングプロファイルに従います

返されるグリフのアドバンスとオフセットには要求されたスペーシングが含まれます。SpacingAdvance がその寄与を記録し、TypographicUnit・CursiveUnit・WordSeparator はリッチ物理行コンポーザ向けの境界メタデータを提供します

キャンセルは分類とシェーピングの間に検査され、グリフ予算や不正入力の失敗は既存のシェーピング例外契約を使います。この関数は PDF を公開せず、呼び出し側のフォントバイトやトークンも所有しません

既存のシェーピングエントリポイントは以前のセマンティクスを保持します。一致する公開グリフレコードと生成ヘッダを使い、Pascal と C++Builder のコンシューマを再ビルドしてください