|
THotPDF.AssignSyntheticCodepointForGID / GetSyntheticCodepointForGID THotPDF pengalokasi codepoint sintetis PUA (v2.119.68)
|
Mesin GSUB Pipeline Shaping Otomatis Shaping Arab |
|
Mengalokasikan dan menanyakan codepoint sintetis Private Use Area (U+E000 - U+F8FF) untuk GID substitusi OpenType GSUB yang tidak memiliki codepoint Unicode alami yang dapat dijangkau melalui cmap font. Menutup celah emisi level GID sisi produsen yang tersisa dari API query dan refinement GSUB v2.119.43-66
Sintaks Delphi: function AssignSyntheticCodepointForGID(GID: Word; out SyntheticCP: Word): Boolean; function GetSyntheticCodepointForGID(GID: Word): Word;
Mengapa API ini ada Pipeline shaping otomatis sisi produsen v2.119.32-67 (Arabic / Latin / Devanagari) memerlukan GID substitusi yang dikembalikan mesin GSUB agar dapat dijangkau melalui codepoint Unicode - pipeline teks ber-hex yang sudah ada mengeluarkan codepoint, bukan GID, dan pembaca klien memetakan kembali codepoint ke GID melalui
Namun substitusi khusus font yang berakhir pada GID internal font - sebagian besar bentuk klaster Devanagari, alternate stilistik yang hanya dikirim desainer font sebagai GID bernomor, sequence variasi ideografis CJK (IVS), discretionary ligature tanpa Presentation Form yang bersesuaian - sama sekali tidak memiliki codepoint di cmap font. Sebelum v2.119.68, GID ini tidak dapat dijangkau melalui pipeline hex sisi produsen; v2.119.68 menutup celah itu dengan membiarkan pemanggil mengalokasikan codepoint sintetis di Private Use Area untuk GID apa pun
Semantik AssignSyntheticCodepointForGID Mengalokasikan codepoint PUA berikutnya yang masih tersedia, mulai dari U+E000, untuk GID yang diberikan, lalu menyalin penugasan itu ke setiap cache yang dipakai rantai pipeline hex sisi produsen + resolusi pembaca konsumen:
1 2 3
Mengembalikan
Semantik GetSyntheticCodepointForGID Query murni fungsional atas assignment yang sudah ada. Mengembalikan codepoint sintetis yang dialokasikan untuk
Siklus hidup state allocator
Alur kerja umum (bentuk klaster Devanagari)
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;
Contoh idempoten
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)
Perilaku pembaca konsumen Pembaca konsumen melihat codepoint PUA di operator text-showing dan memetakannya melalui
Perilaku copy / paste: codepoint PUA round-trip sebagai dirinya sendiri melalui copy / paste ketika CMap ToUnicode menyatakannya sebagai pemetaan identitas. Pemanggil yang ingin karakter Unicode sumber, yaitu run input yang menghasilkan substitusi, ikut round-trip dapat mendaftarkan pemetaan balik dengan
Penutupan roadmap Phase 8 v2.119.68 / Phase 8c.6 menutup roadmap mesin GSUB Phase 8: semua API query LookupType 1-8 (Phase 1-6), API pemilihan Script / LangSys (Phase 7), entry point penutupan subsetter TTF (Phase 9), folding ligatur pasca-langkah statis (v2.119.32 / 58 / 60 / 62), pipeline otomatis opt-in (v2.119.59), emisi otomatis Arabic
Lihat juga: Mesin Substitusi OpenType GSUB, Pipeline Shaping Otomatis (Phase 8), Dukungan shaping Arab / Persia / Urdu, Shaping Syriac / Mongolian / Devanagari, THotPDF.BeginTaggedContent |