دعم تشكيل السريانية / المغولية / الديفاناغارية

أسطح إمكانات النصوص المتعددة (v2.119.53 - v2.119.55)

 

تشكيل العربية  خط أنابيب التشكيل التلقائي  محرك GSUB

يكشف HotPDF عن أسطح إمكانات فئة الربط / التحليل الموضعي / فئة المقاطع الهندية لثلاثة نصوص معقدة خارج العربية: السريانية (U+0700-U+074F)، والمغولية (U+1800-U+18AF)، والديفاناغارية (U+0900-U+097F). تتيح كل إمكانية للمستدعين تشغيل النص عبر محرك OpenType GSUB الحالي للحصول على تشكيل صحيح، مع إبقاء العمل الشاق (كشف حدود المجموعات، وحل BiDi، وتحديد موضع GPOS) خارج نطاق HotPDF

 

إمكانية تشكيل السريانية (v2.119.53)

طريقتان جديدتان تكشفان عن سلوك ربط السريانية:

 

function GetSyriacJoiningClass(CP: Cardinal): TJoiningClass;

function GetSyriacPosition(const Run: array of Cardinal; Index: Integer): TPosition;

 

تتبع السريانية نفس إطار الفئات الأربع (الربط الأيمن / الربط الثنائي / الشفاف / عدم الربط) مثل العربية؛ يصنف GetSyriacJoiningClass كل نقطة ترميز في كتلة U+0700-U+074F وفقًا لخاصية ربط Unicode. يحلل GetSyriacPosition مقطعًا سريانيًا ويحل كل حرف إلى موضعه المنفصل / البدائي / الوسطي / النهائي بناءً على فئات ربط جيرانه المباشرين

 

على عكس العربية، لا تحتوي الكتلة السريانية على أي أشكال عرض مسبقة الترميز في Unicode - لا يوجد مكافئ سرياني لكتل أشكال العرض العربية U+FB50-FDFF / U+FE70-FEFC. لذلك يجب على المستهلكين تشغيل تشكيل السريانية من خلال عمليات بحث GSUB المحددة بالخط (عادةً init / medi / fina / isol + rlig) بدلاً من إعادة كتابة نقاط الترميز. تمنح طبقة الإمكانات أعلاه المستدعين تسميات المواضع التي يحتاجونها للاستعلام عن ميزة GSUB المناسبة لكل رمز

 

إمكانية تشكيل المغولية (v2.119.54)

طريقتان متوازيتان للمغولية:

 

function GetMongolianJoiningClass(CP: Cardinal): TJoiningClass;

function GetMongolianPosition(const Run: array of Cardinal; Index: Integer): TPosition;

 

تغطي التغطية المغولية الأساسية (U+1820-U+1842)، وتودو (U+1843-U+1877)، وسيبيه (U+1880-U+18A8)، والمانشو، وملحقات ألي غالي. تصنف محددات الاختلاف FVS1 / FVS2 / FVS3 (U+180B-U+180D)، والواصلة الناعمة NIRUGU (U+180A)، وعلامات علة ألي غالي جميعها على أنها شفافة (T-class) لذا فهي تشارك في الربط دون كسر سير العمل

 

مثل السريانية، لا تحتوي المغولية على أشكال عرض مسبقة الترميز في Unicode. من المتوقع أن يتم تشغيل التخطيط الرأسي التقليدي للمغولية، وقواعد تباين أشكال الحروف المعقدة، واختيار الشكل المدفوع بـ FVS بواسطة عمليات بحث GSUB المحددة بالخط (عادةً init / medi / fina / isol + ccmp / rlig / locl)؛ تمنح طبقة الإمكانات المستدعين تسميات المواضع اللازمة للاستعلام عن تلك الميزات

 

إمكانية تشكيل الديفاناغارية الهندية (v2.119.55)

تختلف الديفاناغارية جوهريًا عن العربية / السريانية / المغولية - فهي نص أبوجيدا هندي حيث الوحدة ذات المعنى هي مجموعة مقاطع لفظية (akshara)، وليست حرفًا واحدًا، وغالبًا ما يختلف الترتيب المعروض للرموز داخل المجموعة عن ترتيب Unicode المنطقي. تكشف طريقتان عن طبقة إمكانات الديفاناغارية الهندية:

 

function GetDevanagariCategory(CP: Cardinal): TIndicCategory;

procedure ApplyDevanagariReorder(var Run: array of Cardinal);

 

يصنف GetDevanagariCategory كل نقطة ترميز في U+0900-U+097F إلى واحدة من 13 فئة مقطعية هندية (أساسي / ساكن / علة / علة مستقلة / علة مدمجة / ماترا قبل الأساس / ماترا فوق الأساس / ماترا تحت الأساس / هالانتا فيراما / ريفا / أنوسفارا / فيسارغا / غير ذلك) بحيث يمكن للمستدعين كشف حدود المقاطع وتحديد المواضع التي تحتاج إلى إعادة ترتيب داخل كل مجموعة

 

يعد ApplyDevanagariReorder ممرًا مسبقًا يمشي في مقطع الإدخال ويطبق قاعدتي إعادة ترتيب الديفاناغارية الرئيسيتين: (1) يتم نقل Repha (Ra + Halant في بداية مجموعة المقاطع) إلى الموضع بعد الحرف الساكن الأساسي للمجموعة بحيث يتم عرضه كخطاف علوي؛ (2) يتم نقل I-matra قبل الأساس (U+093F DEVANAGARI VOWEL SIGN I) قبل الحرف الساكن الأساسي للمجموعة بحيث يتم عرضه كخطاف في الجانب الأيسر. تُترك عمليات إعادة الترتيب الهندية الأخرى (ماترا فوق الأساس، ماترا تحت الأساس، تشكيل الحروف المدمجة) لمحرك GSUB الخاص بالخط لأنها تتطلب جداول بحث مخصصة للخط

 

التكامل التلقائي (v2.119.67): عند وجود sfIndicShaping في PDF.ShapingFeatures، يتم تطبيق ApplyDevanagariReorder تلقائيًا كممر مسبق داخل المساعدين الثلاثة لـ BuildUnicode*FieldContent. يلتقط محرك GSUB في قارئ المستهلك المقطع بالترتيب الصحيح ويطبق قواعد التشكيل السياقية الخاصة به. راجع خط أنابيب التشكيل التلقائي

 

سير العمل النموذجي (السريانية)

 

PDF.RegisterUnicodeTTF('Estrangelo', 'SyrCOMEdessa.otf');

PDF.SetGSUBScript('syrc');  // انظر مستند محرك GSUB

for i := 0 to Length(Run) - 1 do

begin

  Pos := PDF.GetSyriacPosition(Run, i);  // init / medi / fina / isol

  // query GSUB for the position-appropriate substitute glyph

  // emit + MarkUnicodeGlyphUsed

end;

 

سير العمل النموذجي (الديفاناغارية مع إعادة الترتيب التلقائي)

 

PDF.RegisterUnicodeTTF('NotoDeva', 'NotoSansDevanagari-Regular.ttf');

PDF.ShapingFeatures := [sfIndicShaping];  // إعادة ترتيب التلقائي لـ Repha + I-matra

PDF.CurrentPage.SetFont('NotoDeva', [], 14);

PDF.CurrentPage.UnicodeTextOut(50, 700, 0,

  UnicodeString(#$0939#$093F#$0928#$094D#$0926#$0940)); // "Hindi"

 

docs-sync:unicode-helper-api:start

مساعدات استخراج وتجزئة Unicode

يسجل RegisterToUnicodeReverseMapping نقاط الترميز المصدرية لمخرجات الرموز المشكلة أو الاصطناعية. يعيد ClearToUnicodeReverseMappings ضبط الجدول، ويعلن ToUnicodeReverseMappingCount عن حجمه، ويعيد GetUnicodeGlyphForCodepoint معرف رمز الخط المسجل لنقطة ترميز Unicode، ويحدد EnableShapingFeatureForSubset رموز الاستبدال من ميزة GSUB لتضمينها في المجموعة الفرعية المدمجة

 

docs-sync:unicode-helper-api:end

النطاق والقيود

التكامل الحالي من جانب المنتج

أصبح لتشكيل السريانية والمغولية والتبتية والهندية الآن صفحات مرجعية صريحة لواجهة برمجة التطبيقات API. يمكن تمكين السريانية من خلال AutoShapeSyriac، والمغولية من خلال sfMongolianShaping، والتبتية من خلال sfTibetanShaping، وإعادة ترتيب الهندية من خلال sfIndicShaping، وتشكيل GSUB الهندي الكامل من خلال sfIndicGSUB. تم توثيق نقاط الإدخال التفصيلية في طرق تشكيل التبتية/المغولية/السريانية و طرق التشكيل الهندية

يغطي النطاق الحالي أيضًا N'Ko وAdlam كخطوط متصلة من اليمين إلى اليسار، وترتيب علامات التشكيل نبرة الصوت لـ Thai/Lao SARA AM، وترتيب نيقود العبرية، وعلامات ما قبل الأساس لـ Javanese. تم توثيق هذه المسارات في طرق معالجة تشكيل النصوص مسبقًا

 

 

انظر أيضا: Arabic / Persian / Urdu Shaping Support, Automatic Shaping Pipeline (Phase 8), OpenType GSUB Substitution Engine, THotPDF.AssignSyntheticCodepointForGID