|
THotPDF.AssignSyntheticCodepointForGID – metoda Alokátor syntetických kódových bodů PUA pro THotPDF (v2.119.68)
|
GSUB Engine Auto Shaping Pipeline Arabic Shaping |
|
Alokuje a dotazuje syntetické kódové body z Private Use Area (U+E000 - U+F8FF) pro náhradní GID OpenType GSUB, které nemají přirozený kódový bod Unicode dosažitelný přes cmap písma. Uzavírá mezeru ve výstupu na úrovni GID na straně producenta, kterou ponechala dotazovací a zpřesňující API GSUB z verzí v2.119.43-66
Syntaxe Delphi: function AssignSyntheticCodepointForGID(GID: Word; out SyntheticCP: Word): Boolean; function GetSyntheticCodepointForGID(GID: Word): Word;
Proč API existuje Automatický pipeline tvarování na straně producenta z verzí v2.119.32-67 (arabské / latinské / dévanágarí) vyžaduje, aby náhradní GID vrácené enginem GSUB bylo dosažitelné přes kódový bod Unicode - existující pipeline hexadecimálně kódovaného textu vypisuje kódové body, nikoli GID, a spotřebitelský reader převede kódový bod zpět na GID přes vloženou
Náhrady specifické pro písmo, které končí na interních GID písma - většina tvarů klastrů dévanágarí, stylistické alternativy dodané autorem písma pouze jako číslované GID, ideografické variační sekvence CJK (IVS) nebo volitelné ligatury bez odpovídající Presentation Form - však v cmap písma nemají žádný kódový bod. Před v2.119.68 byla tato GID přes hexadecimální pipeline na straně producenta nedosažitelná; v2.119.68 tuto mezeru uzavírá tím, že volajícím dovoluje alokovat syntetický kódový bod v Private Use Area pro libovolné GID
Sémantika AssignSyntheticCodepointForGID Alokuje další dostupný kódový bod PUA (počínaje U+E000) pro dodané GID a promítne přiřazení do každé cache, na které závisí existující hexadecimální pipeline na straně producenta i řetězec řešení ve spotřebitelském readeru:
1. 2. 3.
Při úspěchu vrací
Sémantika GetSyntheticCodepointForGID Čistě funkční dotaz na existující přiřazení. Vrátí syntetický kódový bod alokovaný pro
Životní cyklus stavu alokátoru
Typické workflow (tvar klastru dévanágarí)
PDF.RegisterUnicodeTTF('NotoDeva', 'NotoSansDevanagari-Regular.ttf'); PDF.ShapingFeatures := [sfIndicShaping]; PDF.SetGSUBScript('deva');
// Získání interního GID klastru písma přes engine GSUB ClusterGID := PDF.GetSingleSubstituteGlyph(BaseGID, 'nukt'); if ClusterGID <> BaseGID then begin // Zkontrolujte, zda cmap dosáhne na náhradu - u indických // klastrů obvykle ne, protože GID klastrů jsou interní pro písmo // Alokujte syntetický kódový bod, který může hexadecimální // pipeline na straně producenta vypsat if PDF.AssignSyntheticCodepointForGID(ClusterGID, SyntheticCP) then begin // SyntheticCP je teď v rozsahu U+E000-F8FF; vypište jej // přes UnicodeTextOut stejně jako běžný kódový bod PDF.CurrentPage.UnicodeTextOut(X, Y, 0, UnicodeChar(SyntheticCP)); PDF.MarkUnicodeGlyphUsed(ClusterGID); end; end;
Příklad idempotence
PDF.AssignSyntheticCodepointForGID(150, CP1); // CP1 = $E000 PDF.AssignSyntheticCodepointForGID(151, CP2); // CP2 = $E001 PDF.AssignSyntheticCodepointForGID(150, CP3); // CP3 = $E000 (idempotentní) CP4 := PDF.GetSyntheticCodepointForGID(150); // CP4 = $E000 CP5 := PDF.GetSyntheticCodepointForGID(999); // CP5 = 0 (bez přiřazení)
Chování spotřebitelského readeru Spotřebitelský reader uvidí kódový bod PUA v operátoru zobrazení textu a přes dokumentem vloženou
Chování při kopírování / vložení: kódové body PUA při copy / paste projdou jako samy sebe, když je ToUnicode CMap deklaruje jako identitní mapování. Volající, kteří chtějí místo toho zachovat zdrojové znaky Unicode (vstupní běh, který vytvořil náhradu), mohou zaregistrovat reverzní mapování pomocí
Uzavření roadmapy Phase 8 v2.119.68 / Phase 8c.6 uzavírá roadmapu enginu GSUB v Phase 8: každé dotazovací API LookupType 1-8 (Phase 1-6), API výběru Script / LangSys (Phase 7), vstupní bod uzávěru subsetteru TTF (Phase 9), statické skládání ligatur po průchodu (v2.119.32 / 58 / 60 / 62), volitelný automatický pipeline (v2.119.59), automatický výstup arabského
Viz také: Substituční engine OpenType GSUB, Automatický tvarovací pipeline (Phase 8), Podpora tvarování arabštiny / perštiny / urdštiny, Tvarování syrštiny / mongolštiny / dévanágarí, THotPDF.BeginTaggedContent |