|
THotPDF.AssignSyntheticCodepointForGID / GetSyntheticCodepointForGID THotPDF alokator syntetycznych punktów kodowych PUA (v2.119.68)
|
GSUB Engine Auto Shaping Pipeline Arabic Shaping |
|
Alokuje i odpytuje syntetyczne punkty kodowe Private Use Area (U+E000 - U+F8FF) dla zastępczych GID OpenType GSUB, które nie mają naturalnego punktu kodowego Unicode osiągalnego przez cmap fontu. Zamyka lukę emisji na poziomie GID po stronie producenta pozostawioną przez API zapytań i doprecyzowania GSUB v2.119.43-66
Delphi syntax: function AssignSyntheticCodepointForGID(GID: Word; out SyntheticCP: Word): Boolean; function GetSyntheticCodepointForGID(GID: Word): Word;
Dlaczego API istnieje Automatyczny potok kształtowania po stronie producenta v2.119.32-67 (Arabic / Latin / Devanagari) wymaga, aby zastępcze GID zwrócone przez silnik GSUB były osiągalne przez punkt kodowy Unicode - istniejący potok tekstu kodowanego szesnastkowo emituje punkty kodowe, nie GID, a czytnik konsumencki rozwiązuje punkt kodowy z powrotem do GID przez osadzony
Jednak substytuty specyficzne dla fontu, które trafiają na wewnętrzne GID fontu - większość kształtów klastrów Devanagari, warianty stylistyczne dostarczone przez projektanta fontu tylko jako numerowane GID, sekwencje wariantów ideograficznych CJK (IVS), ligatury uznaniowe bez odpowiadającej im Presentation Form - w ogóle nie mają punktu kodowego w cmap fontu. Przed v2.119.68 te GID były nieosiągalne przez potok hex po stronie producenta; v2.119.68 zamyka tę lukę, pozwalając wywołującym alokować syntetyczny punkt kodowy w Private Use Area dla dowolnego GID
Semantyka AssignSyntheticCodepointForGID Alokuje następny dostępny punkt kodowy PUA (zaczynając od U+E000) dla podanego GID i odzwierciedla przypisanie w każdej pamięci podręcznej, od której zależy istniejący łańcuch potoku hex po stronie producenta + rozwiązywania przez czytnik konsumencki:
1. 2. 3.
Zwraca
Semantyka GetSyntheticCodepointForGID Czyste zapytanie funkcyjne o istniejące przypisanie. Zwraca syntetyczny punkt kodowy przydzielony dla
Cykl życia stanu alokatora
Typical workflow (Devanagari cluster shape)
PDF.RegisterUnicodeTTF('NotoDeva', 'NotoSansDevanagari-Regular.ttf'); PDF.ShapingFeatures := [sfIndicShaping]; PDF.SetGSUBScript('deva');
// Get a font-internal cluster GID through the GSUB engine ClusterGID := PDF.GetSingleSubstituteGlyph(BaseGID, 'nukt'); if ClusterGID <> BaseGID then begin // Check if cmap reaches the substitute - usually no for Indic // clusters, since cluster GIDs are font-internal // Allocate a synthetic codepoint that the producer-side // hex pipeline can emit if PDF.AssignSyntheticCodepointForGID(ClusterGID, SyntheticCP) then begin // SyntheticCP is now in the U+E000-F8FF range; emit it // through UnicodeTextOut just like a normal codepoint PDF.CurrentPage.UnicodeTextOut(X, Y, 0, UnicodeChar(SyntheticCP)); PDF.MarkUnicodeGlyphUsed(ClusterGID); end; end;
Idempotency example
PDF.AssignSyntheticCodepointForGID(150, CP1); // CP1 = $E000 PDF.AssignSyntheticCodepointForGID(151, CP2); // CP2 = $E001 PDF.AssignSyntheticCodepointForGID(150, CP3); // CP3 = $E000 (idempotent) CP4 := PDF.GetSyntheticCodepointForGID(150); // CP4 = $E000 CP5 := PDF.GetSyntheticCodepointForGID(999); // CP5 = 0 (no assignment)
Zachowanie czytnika konsumenckiego Czytnik konsumencki widzi punkt kodowy PUA w operatorze wyświetlania tekstu i rozwiązuje go przez osadzony w dokumencie
Zachowanie kopiowania / wklejania: punkty kodowe PUA przechodzą przez kopiowanie / wklejanie jako one same, gdy ToUnicode CMap deklaruje je jako mapowania tożsamościowe. Wywołujący, którzy zamiast tego chcą zachować znaki Unicode źródła (wejściowy przebieg, który wytworzył substytut), mogą zarejestrować mapowanie odwrotne przez
Domknięcie mapy drogowej Phase 8 v2.119.68 / Phase 8c.6 domyka mapę drogową silnika GSUB Phase 8: wszystkie API zapytań LookupType 1-8 (Phase 1-6), API wyboru Script / LangSys (Phase 7), punkt domknięcia subsettera TTF (Phase 9), statyczne składanie ligatur w post-pass (v2.119.32 / 58 / 60 / 62), opcjonalny potok automatyczny (v2.119.59), automatyczna emisja Arabic
Zobacz też: OpenType GSUB Substitution Engine, Automatic Shaping Pipeline (Phase 8), Arabic / Persian / Urdu Shaping Support, Syriac / Mongolian / Devanagari Shaping, THotPDF.BeginTaggedContent |