|
THotPDF.AssignSyntheticCodepointForGID / GetSyntheticCodepointForGID THotPDF allocator συνθετικών codepoints PUA (v2.119.68)
|
GSUB Engine Auto Shaping Pipeline Arabic Shaping |
|
Κατανέμει και ερωτά συνθετικά codepoints Private Use Area (U+E000 - U+F8FF) για OpenType GSUB substitute GIDs που δεν έχουν φυσικό Unicode codepoint προσβάσιμο μέσω του cmap της γραμματοσειράς. Κλείνει το κενό producer-side εκπομπής σε επίπεδο GID που άφησαν τα v2.119.43-66 GSUB query και refinement APIs
Σύνταξη Delphi: function AssignSyntheticCodepointForGID(GID: Word; out SyntheticCP: Word): Boolean; function GetSyntheticCodepointForGID(GID: Word): Word;
Γιατί υπάρχει το API Η v2.119.32-67 producer-side automatic shaping pipeline (Arabic / Latin / Devanagari) απαιτεί τα substitute GIDs που επιστρέφει ο GSUB engine να είναι προσβάσιμα μέσω Unicode codepoint. Η υπάρχουσα hex-encoded text pipeline εκπέμπει codepoints, όχι GIDs, και ο consumer reader επιλύει το codepoint πίσω σε GID μέσω του ενσωματωμένου
Όμως τα font-specific substitutes που καταλήγουν σε font-internal GIDs, όπως τα περισσότερα Devanagari cluster shapes, stylistic alternates που ο σχεδιαστής γραμματοσειράς παρέχει μόνο ως numbered GIDs, CJK ideographic variation sequences (IVS) και discretionary ligatures χωρίς αντίστοιχο Presentation Form, δεν έχουν καθόλου codepoint στο cmap της γραμματοσειράς. Πριν από το v2.119.68 αυτά τα GIDs δεν ήταν προσβάσιμα μέσω της producer-side hex pipeline. Το v2.119.68 κλείνει αυτό το κενό επιτρέποντας στους callers να κατανέμουν ένα συνθετικό codepoint στο Private Use Area για οποιοδήποτε GID
Σημασιολογία AssignSyntheticCodepointForGID Κατανέμει το επόμενο διαθέσιμο PUA codepoint (ξεκινώντας από U+E000) για το παρεχόμενο GID και αντικατοπτρίζει την ανάθεση σε κάθε cache από την οποία εξαρτάται η υπάρχουσα producer-side hex pipeline + consumer-reader resolution chain:
1. 2. 3.
Επιστρέφει
Σημασιολογία GetSyntheticCodepointForGID Pure-functional query οποιασδήποτε υπάρχουσας ανάθεσης. Επιστρέφει το synthetic codepoint που έχει κατανεμηθεί για το
Κύκλος ζωής allocator state
Τυπική ροή εργασίας (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
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)
Συμπεριφορά consumer reader Ο consumer reader βλέπει το PUA codepoint στον text-showing operator και το επιλύει μέσω του ενσωματωμένου στο έγγραφο
Συμπεριφορά copy / paste: τα PUA codepoints κάνουν round-trip ως έχουν μέσω copy / paste όταν το ToUnicode CMap τα δηλώνει ως identity mappings. Callers που θέλουν τα source Unicode characters (το input run που παρήγαγε το substitute) να κάνουν round-trip αντ' αυτού μπορούν να καταχωρήσουν reverse mapping με
Κλείσιμο Phase 8 roadmap Το v2.119.68 / Phase 8c.6 κλείνει το Phase 8 GSUB engine roadmap: κάθε LookupType 1-8 query API (Phase 1-6), το Script / LangSys selection API (Phase 7), το TTF subsetter closure entry point (Phase 9), το static post-pass ligature folding (v2.119.32 / 58 / 60 / 62), η opt-in automatic pipeline (v2.119.59), η automatic emission Arabic
Δείτε επίσης: OpenType GSUB Substitution Engine, Automatic Shaping Pipeline (Phase 8), Arabic / Persian / Urdu Shaping Support, Syriac / Mongolian / Devanagari Shaping, THotPDF.BeginTaggedContent |