Otomatik şekillendirme pipeline'ı (faz 8)

Üretici tarafında isteğe bağlı GSUB pipeline'ı (v2.119.59 - v2.120.10)

 

Arapça şekillendirme  Çoklu yazı şekillendirme  GSUB motoru

Otomatik şekillendirme pipeline'ı, OpenType GSUB motorunu yalnızca yetenek sorgulama yüzeyi olmaktan çıkarıp PDF içerik akışlarına metin yazılırken otomatik uygulanan üretici tarafı bir özelliğe yükseltir. Çağıranlar belirli GSUB özelliklerini türlendirilmiş bir set üzerinden etkinleştirir (ShapingFeatures: THPDFShapingFeatures) ve HotPDF doğru değiştirmeleri çalıştırmayı, yedek glifleri gömülü font alt kümesine işaretlemeyi ve erişilebilirlik için gereken ToUnicode CMap ters eşleme girdilerini üretmeyi üstlenir.

 

İsteğe bağlı framework (v2.119.59 / faz 8a)

Yeni enum ve özellik, metin çıktısı sırasında hangi otomatik değiştirmelerin çalışacağını kontrol eder:

 

type

  THPDFShapingFeature = (

    sfArabicGSUB,    // yerel Arapça init / medi / fina / isol + rlig / calt / rclt

    sfStandardLigatures, // Latin 'liga' (ff / fi / fl / ffi / ffl / sft / st)

    sfContextualLigatures,// Latin 'clig' (bağlamsal ligatürler)

    sfContextualAlternates,// 'rclt' (Required Contextual Alternates)

    sfIndicShaping); // Devanagari Repha + pre-base I-matra yeniden sıralama

  THPDFShapingFeatures = set of THPDFShapingFeature;

 

property ShapingFeatures: THPDFShapingFeatures read ... write ...;

 

Varsayılan [] değeridir (boş set) ve v2.119.32-58 statik post-pass shaper davranışına bağlı çağıranlar için bayt olarak aynı çıktıyı korur. Bir veya daha fazla flag ayarlamak, motoru ilgili özellikler için otomatik moda yükseltir.

 

sfArabicGSUB - yerel Arapça GSUB şekillendirme (v2.185.0)

sfArabicGSUB ayarlandığında HotPDF mantıksal Arapça çalışmayı temel glif ID'lerine eşler, kayıtlı fontun konumsal init, medi, fina ve isol lookup'larını her harf için seçilen birleşme konumlarında uygular, ardından şekillendirilmiş çalışma üzerinde rlig, calt ve rclt uygular. Unicode codepoint'i olmayan yedek glifler, ToUnicode ters eşlemeleriyle sentetik codepoint yolu üzerinden yazılır; böylece bağlamsal Arapça glifleri cmap dışında bulunan fontlar yine de gömülebilir ve doğru kopyalanabilir

 

sfArabicGSUB ayarlamak Arapça için v2.85.0 statik 4 konumlu shaper'ı örtük olarak atlar - fontun GSUB beyanı dışındaki codepoint'leri statik shaper'ın işlemeye devam etmesini isteyen çağıranlar sfArabicGSUB değerini kapalı bırakmalıdır.

 

sfStandardLigatures / sfContextualLigatures - faz 8b (v2.119.65)

sfStandardLigatures ayarlandığında Latin Standard Ligatures, fontun liga özelliği kullanılarak otomatik katlanır. ApplyLatinLigatureRefinement, Alphabetic Presentation Forms bloğunu (U+FB00-FB4F) hedefler - tipik olarak FB00 ff, FB01 fi, FB02 fl, FB03 ffi, FB04 ffl, FB05 long-s + t, FB06 st. sfContextualLigatures, fontun clig özelliği için ikinci bir geçiş ekler. Her iki geçiş de sfArabicGSUB ile aynı reverse-cmap mekanizmasını kullanır ve 7 yeni ToUnicode CMap ters eşleme girdisi (FB00-FB06) üretir; böylece tüketici okuyucuda kopyala / yapıştır ligatürü kaynak harflere geri çözer.

 

sfContextualAlternates - GSUB 'rclt' (v2.119.66)

sfContextualAlternates ayarlandığında fontun rclt (Required Contextual Alternates) özelliği uygulanır. ApplyArabicGSUBContextualRefinement, v2.119.47 ApplyContextualSubst giriş noktasını kullanır ve değişken uzunluklu N'den M'ye çıktı işler (değiştirme yalnızca her yedek GID reverse cmap üzerinden erişilebildiğinde işlenir). Reverse cmap aralığı Latin + Arabic + Hebrew Presentation Forms kapsamı için FB00-FDFF + FE70-FEFF değerlerine genişletilir.

 

rclt için kanonik kullanıcılar: font konumsal şekillendirmeyi Unicode Presentation Forms codepoint'leri yerine GSUB üzerinden yürüttüğünde Arapça init / medi / fina / isol; bazı Latin dizi ayrıştırma kuralları; font tasarımcısı tarafından rclt olarak kaydedildiğinde Hint yazısı şekillendirme pres / blws / psts / half / pstf / cjct özellikleri.

 

sfIndicShaping - faz 8e (v2.119.67)

sfIndicShaping ayarlandığında v2.119.55 Devanagari yeteneği ApplyDevanagariReorder, manuel yöntemden üç BuildUnicode*FieldContent yardımcısı içinde uygulanan otomatik pre-pass'e yükseltilir. Devanagari çalışmaları Repha'yı (cluster başında Ra + Halant) post-base konumuna, pre-base I-matra'yı (U+093F) cluster temel ünsüzünden önceye taşır; böylece tüketici okuyucunun GSUB motoru heceyi doğru render sırasıyla alır. Diğer Hint yeniden sıralamaları (above-base / below-base matra, conjunct oluşumu) fontun GSUB'unda kalır.

 

Advance sorgu desteği (v2.119.64 / faz 8c.5)

Eşlik eden API, çağıranların GSUB ile değiştirilmiş glifleri yazarken word-wrap hesabını doğru yapabilmesi için önbelleğe alınmış /W em oranını açığa çıkarır:

 

function GetCodepointAdvance(CP: Cardinal): Single;

 

CP adresinde cmap ile çözülen glif için hmtx kaynaklı advance genişliğini em oranı olarak döndürür. Aynı sürüm, Arabic Presentation Forms (U+FB50-FDFF + U+FE70-FEFF) değerlerini WIDE yerine NARROW olarak sınıflandırmak üzere CodeUnitAdvance düzeltmesini de yaptı (heuristic fallback v2.65 öncesinde hatalıydı).

 

Tipik iş akışı (tam Arapça otomatik şekillendirme)

 

PDF.RegisterUnicodeTTF('NotoArab', 'NotoSansArabic-Regular.ttf');

PDF.ShapingFeatures :=

  [sfArabicGSUB,  // yerel Arapça GSUB bağlamsal glifleri

   sfCursiveAttachment];  // GPOS cursive giriş / çıkış anchor'ları

PDF.SetGSUBScript('arab');

PDF.BeginDoc;

PDF.CurrentPage.SetFont('NotoArab', [], 14);

PDF.CurrentPage.RtLTextOut(100, 700, 0,

  UnicodeString(#$0628#$0633#$0645#$0020#$0627#$0644#$0644#$0647));

PDF.EndDoc;

 

Tipik iş akışı (Latin standart ligatürler + Devanagari yeniden sıralama)

 

PDF.RegisterUnicodeTTF('NotoSans', 'NotoSans-Regular.ttf');

PDF.RegisterUnicodeTTF('NotoDeva', 'NotoSansDevanagari-Regular.ttf');

PDF.ShapingFeatures :=

  [sfStandardLigatures, // FB00-FB06 Latin liga

   sfContextualLigatures, // + clig

   sfIndicShaping]; // Devanagari Repha + I-matra yeniden sıralama

 

Faz 8 roadmap kapanışı

Faz 8a (v2.119.59) isteğe bağlı framework + Arapça yeteneği; faz 8b (v2.119.65) Latin standart ligatürleri; faz 8c.1 (v2.119.60) Allah; faz 8c.2 (v2.119.63) GID düzeyinde GSUB rlig; faz 8c.3 (v2.119.61) ToUnicode ters eşleme; faz 8c.4 (v2.119.62) Bismillah; faz 8c.5 (v2.119.64) advance sorgusu + heuristic düzeltme; faz 8c.6 (v2.119.68) PUA sentetik codepoint üretimi; faz 8d, 8c alt fazlarına dahil edildi; faz 8e (v2.119.67) Devanagari otomatik yeniden sıralama. v2.119.68 ile faz 8 yetenek matrisi kapandı; diğer iyileştirmeler (ek Hint yazıları, OpenType GPOS konumlandırma, BiDi çözümleme) ayrı roadmap öğelerinde izlenir.

 

Kapsam ve sınırlamalar

İsteğe bağlı pipeline, statik post-pass shaper üzerine bilinçli olarak eklenir - mevcut çağıranlar etkinleştirmedikçe davranış değişikliği görmez. Varsayılan [] seti, bayt kararlı regresyon için güvenli seçimdir. İstenen GSUB özellik tabloları olmayan fontlar güvenli no-op çıktı üretir (çağıranlar uygulanan değiştirme veya istisna görmez).

 

Geçerli şekillendirme API haritası

Geçerli pipeline artık yalnızca değiştirme değildir: sfKerning GPOS pair kerning uygular, sfMarkPositioning Mark-to-Base ve Mark-to-Mark offset'lerini uygular, sfMarkToLigature Mark-to-Ligature yerleşimini uygular, sfCursiveAttachment cursive giriş/çıkış anchor hizalaması uygular, sfTibetanShaping Tibetçe GSUB şekillendirme uygular, sfMongolianShaping Moğolca konumsal formları uygular ve sfIndicGSUB hece yeniden sıralamasından sonra Indic GSUB özellik zincirini uygular. Bkz. ShapingFeatures, GPOS yöntemleri ve Indic şekillendirme yöntemleri

Son eklemeler locl için sfLocalizedForms, ApplyGSUBContextualFeature üzerinden calt, bağlamsal ve dikey GPOS kerning, yerel Arapça GSUB bağlamsal glif üretimi ve N'Ko, Adlam, Thai/Lao, Hebrew ve Javanese yollarını ekler. Bkz. script shaping preprocess yöntemleri

 

Ayrıca bkz.: OpenType GSUB değiştirme motoru, Arapça / Farsça / Urduca şekillendirme desteği, Süryanice / Moğolca / Devanagari şekillendirme, THotPDF.AssignSyntheticCodepointForGID, CFF / OpenType font alt kümeleme