|
THotPDF.AssignSyntheticCodepointForGID / GetSyntheticCodepointForGID مخصص نقاط الترميز الاصطناعية PUA لـ THotPDF (الإصدار v2.119.68)
|
GSUB Engine Auto Shaping Pipeline Arabic Shaping |
|
يخصص ويستعلم عن نقاط الترميز الاصطناعية لمنطقة الاستخدام الخاص (U+E000 - U+F8FF) لمعرفات GIDs البديلة لـ OpenType GSUB التي لا تحتوي على نقطة ترميز Unicode طبيعية يمكن الوصول إليها عبر cmap الخاص بالخط؛ ويغلق فجوة إصدار مستوى GID على جانب المنتج التي تركتها واجهات برمجة تطبيقات استعلام وتنقية GSUB للإصدارات v2.119.43-66
Delphi syntax: function AssignSyntheticCodepointForGID(GID: Word; out SyntheticCP: Word): Boolean; function GetSyntheticCodepointForGID(GID: Word): Word;
لماذا توجد واجهة برمجة التطبيقات هذه يتطلب خط معالجة التشكيل التلقائي على جانب المنتج للإصدار v2.119.32-67 (العربي / اللاتيني / الديفاناغاري) أن تكون معرفات GIDs البديلة التي يرجعها محرك GSUB قابلة للوصول إليها عبر نقطة ترميز Unicode - حيث يقوم خط معالجة النصوص المشفرة بنظام الستة عشري الحالي بإصدار نقاط ترميز، وليس معرفات GIDs، ويقوم القارئ المستهلك بحل نقطة الترميز مرة أخرى إلى معرف GID من خلال
ولكن البدائل الخاصة بالخط التي تهبط على معرفات GIDs الداخلية للخط - معظم أشكال مجموعات الديفاناغاري، والبدائل الأسلوبية التي يشحنها مصمم الخط فقط كمعرفات GIDs مرقمة، ومتسلسلات الاختلاف الأيديوجرافي CJK (IVS)، والروابط التقديرية التي لا تحتوي على شكل عرض مقابل - لا تحتوي على نقطة ترميز على الإطلاق في cmap الخاص بالخط؛ قبل الإصدار v2.119.68، كان لا يمكن الوصول إلى معرفات GIDs هذه عبر خط المعالجة الستة عشري على جانب المنتج؛ ويغلق الإصدار v2.119.68 هذه الفجوة بالسماح للمستدعين بتخصيص نقطة ترميز اصطناعية في منطقة الاستخدام الخاص لأي معرف GID
دلالات AssignSyntheticCodepointForGID يخصص نقطة ترميز PUA التالية المتاحة (بدءًا من U+E000) لمعرف GID المقدم ويعكس التعيين في كل ذاكرة تخزين مؤقت يعتمد عليها خط المعالجة الستة عشري الحالي على جانب المنتج + سلسلة حل القارئ المستهلك:
1. 2. 3.
يرجع
دلالات GetSyntheticCodepointForGID استعلام وظيفي بحت لأي تعيين موجود؛ يرجع نقطة الترميز الاصطناعية المخصصة لـ معرف
دورة حياة حالة المخصص ينشأ
سير العمل النموذجي (شكل مجموعة الديفاناغاري)
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;
مثال تطابق القيمة
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)
سلوك القارئ المستهلك يرى القارئ المستهلك نقطة ترميز PUA في عامل تشغيل عرض النص ويحلها من خلال
سلوك النسخ / اللصق: تعود نقاط ترميز PUA كأنفسها من خلال النسخ / اللصق عندما يعلن ToUnicode CMap عنها كتعيينات هوية؛ ويمكن للمستدعين الذين يريدون أن تعود أحرف Unicode المصدر (التشغيل المدخل الذي أنتج البديل) بدلاً من ذلك تسجيل تعيين عكسي باستخدام
إغلاق خارطة طريق المرحلة 8 يغلق الإصدار v2.119.68 / المرحلة 8c.6 خارطة طريق محرك GSUB للمرحلة 8: واجهة برمجة تطبيقات استعلام LookupType 1-8 (المرحلة 1-6)، وواجهة برمجة تطبيقات تحديد Script / LangSys (المرحلة 7)، ونقطة دخول إغلاق مخصص مخرجات TTF (المرحلة 9)، وطي الروابط الثابت للممر اللاحق (v2.119.32 / 58 / 60 / 62)، وخط معالجة التشكيل التلقائي الاختياري (v2.119.59)، والإصدار التلقائي لـ
انظر أيضًا: OpenType GSUB Substitution Engine، Automatic Shaping Pipeline (Phase 8)، Arabic / Persian / Urdu Shaping Support، Syriac / Mongolian / Devanagari Shaping، THotPDF.BeginTaggedContent |