スタイルをまたぐリッチテキスト結合記号
型付きリッチテキストは、先頭の結合記号を同じ物理行の直前に実際にレンダリングされたグリフに対して配置しつつ、元の論理 V と正規化された RV を保持します
ベースと記号は、供給された regular・bold・italic・bold-italic の異なるフォントプログラム、異なるポイントサイズ、異なる色を使えます
配置は、拡張ポジショニングルックアップを含め、実際の GPOS mark-to-base、mark-to-ligature、mark-to-mark アタッチメントを読みます。ベースアンカーはベース自身のフォントとスケールを、マークアンカーはマーク自身のフォントとスケールを使います
文脈的なアラビア語の接続はスタイル境界をまたいでも有効のままで、取り付いたマークは孤立した名目グリフではなく、接続結果のベースグリフを使います
先頭マークは独立した子変換を受け取るため、マークを取り付けても後続の通常テキストは動かず、論理的な文字間隔アドバンスも変わりません
リッチ子フォームは、負の原点を持つ結合記号やイタリックのアウトラインを含め、グリフのオーバーハングを保持します。所有側の外観がウィジェットのクリップ、回転、段落配置を供給します
取り付いたインクは行範囲のフィッティングに算入されるため、積み重なったマークもフィールド上部に見え続けられます。ウィジェットより高い分割不能クラスタは、既存の有界クリッピング動作を保ちます
一致するアタッチメントカバレッジがないときは、実際に選択された TrueType のグリフヘッダー境界が、独立したポイントサイズスケールとネイティブの Unicode 結合クラスによる配置フォールバックを供給します
フォールバック配置は、above、below、attached、左右、二重の各マークを区別します。同側のマークは積み重なり、反対側のマークはベースアウトラインに戻り、一致する GPOS アンカーが常に優先されます
二重の結合記号は、Unicode の行分割クラスが nonbreaking でもアタッチメント候補のままです。論理テキスト、元のスタイル、後続の文字間隔アドバンスはそのまま保たれます
二重マークのフォールバックエッジは、テキスト項目の実際に解決された bidi レベルに従います。段落内に埋め込まれた逆方向項目も含まれます
フォールバック境界は、実際のフォントが宣言しているアウトラインヘッダーを表します。任意のフォントファミリーの自動再構築は、この供給フォント契約の対象外です
フォントテーブルの読み取りは実際の GPOS テーブルに限定され、キャンセルを観測し、供給されたすべてのスタイルフォント間で走査予算を共有します。無効なテーブルオフセットは、ドキュメントフィールドが変更される前に失敗します
ヒンティングなしの PDF アウトラインはデザイン座標のアンカーを使い、デバイス固有のピクセル調整を行いません
受け入れテスト
HotPDFHeadlessRichMarkTests.pas は、実際のラテン文字・アラビア文字・ヘブライ文字のマーク外観、積み重ねマーク、本物のアラビア語リガチャ、混在サイズと色、折り返し、スペーシング、配置、回転を保存して再読み込みします
Verify-HeadlessRichMarks.py は fontTools を通じて本物の埋め込みフォントプログラムを読み、GPOS アンカーを独立に計算し、ソースの値とスタイルを検証した上で、そのマークを省いた同じ実際の外観をレンダリングすることで、各マークが可視の MuPDF ピクセルに寄与していることを確認します
HotPDFHeadlessRichMarkFallbackTests.pas と Verify-HeadlessRichMarkFallback.py は、実際に GPOS を欠くフォント、可視の保存済み外観、生の結合クラス、選択グリフの境界、キャンセルをチェックします。一致するアンカーがフォールバック配置より優先され続けることも検証されます