|
Automatic Shaping Pipeline (Phase 8) Opt-in producer-side GSUB pipeline (v2.119.59 - v2.120.10)
|
Arabic Shaping Multi-Script Shaping GSUB Engine |
|
O pipeline automático de formação eleva o motor GSUB OpenType de uma superfície de consulta apenas de capacidades para uma funcionalidade do lado do produtor que é aplicada automaticamente à medida que o texto é emitido para fluxos de conteúdo PDF. Os chamadores ativam funcionalidades GSUB específicas através de um conjunto tipado (
Opt-in framework (v2.119.59 / Phase 8a) A new enum and property control which automatic substitutions run during text emission:
type THPDFShapingFeature = ( sfArabicGSUB, // native Arabic init / medi / fina / isol + rlig / calt / rclt sfStandardLigatures, // Latin 'liga' (ff / fi / fl / ffi / ffl / sft / st) sfContextualLigatures,// Latin 'clig' (contextual ligatures) sfContextualAlternates,// 'rclt' (Required Contextual Alternates) sfIndicShaping); // Devanagari Repha + pre-base I-matra reorder THPDFShapingFeatures = set of THPDFShapingFeature;
property ShapingFeatures: THPDFShapingFeatures read ... write ...;
A predefinição é [] (conjunto vazio), o que preserva saída byte a byte idêntica para chamadores que dependem do shaper estático de pós-processamento v2.119.32-58. Definir uma ou mais flags eleva o motor para o modo automático das funcionalidades correspondentes
sfArabicGSUB - native Arabic GSUB shaping (v2.185.0) Quando
Definir sfArabicGSUB contorna implicitamente o shaper estático de 4 posições v2.85.0 para árabe - os chamadores que precisem que o shaper estático continue a tratar codepoints fora do que a GSUB da fonte declara devem deixar sfArabicGSUB desligado
sfStandardLigatures / sfContextualLigatures - Phase 8b (v2.119.65) Quando
sfContextualAlternates - GSUB 'rclt' (v2.119.66) Quando
Canonical users of
sfIndicShaping - Phase 8e (v2.119.67) Quando
Advance-query support (v2.119.64 / Phase 8c.5) A API complementar expõe o valor de
function GetCodepointAdvance(CP: Cardinal): Single;
Devolve a largura de avanço derivada de hmtx como fração do em para o glifo resolvido pela cmap em CP. A mesma versão também corrigiu CodeUnitAdvance para classificar as Arabic Presentation Forms (U+FB50-FDFF + U+FE70-FEFF) como NARROW em vez de WIDE (o fallback heurístico estava errado antes da v2.65)
Typical workflow (full Arabic auto-shaping)
PDF.RegisterUnicodeTTF('NotoArab', 'NotoSansArabic-Regular.ttf'); PDF.ShapingFeatures := [sfArabicGSUB, // native Arabic GSUB contextual glyphs sfCursiveAttachment]; // GPOS cursive entry / exit anchors 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;
Typical workflow (Latin standard ligatures + Devanagari reorder)
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 reorder
Phase 8 roadmap closure Phase 8a (v2.119.59) opt-in framework + Arabic capability; Phase 8b (v2.119.65) Latin standard ligatures; Phase 8c.1 (v2.119.60) Allah; Phase 8c.2 (v2.119.63) GID-level GSUB
Scope and limitations O pipeline opt-in é deliberadamente aditivo em relação ao formador estático de pós-passagem - os chamadores existentes não veem qualquer alteração de comportamento a menos que optem por o ativar. O conjunto predefinido
Mapa atual da API de formação O pipeline atual já não é apenas de substituição: As adições recentes incluem sfLocalizedForms para locl, calt através de ApplyGSUBContextualFeature, kerning GPOS contextual e vertical, emissão nativa de glifos contextuais GSUB em árabe e os caminhos N'Ko, Adlam, Thai/Lao, hebraico e javanês. Consulte os métodos de pré-processamento de shaping de script
See also: OpenType GSUB Substitution Engine, Arabic / Persian / Urdu Shaping Support, Syriac / Mongolian / Devanagari Shaping, THotPDF.AssignSyntheticCodepointForGID, CFF / OpenType Font Subsetting |