|
پشتیبانی شکلدهی سریانی / مغولی / دواناگری بخشهای قابلیت چند اسکریپتی (نسخه ۲.۱۱۹.۵۳ - ۲.۱۱۹.۵۵)
|
شکلدهی عربی خط لوله شکلدهی خودکار موتور GSUB |
|
HotPDF برای سه خط پیچیده فراتر از عربی، سطحهای joining-class، تحلیل موقعیت و category هجایی Indic را در معرض میگذارد: سریانی (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;
سریانی همان چارچوب چهارکلاسه Right-Joining / Dual-Joining / Transparent / Non-Joining را مثل عربی دنبال میکند؛
برخلاف عربی، بلوک سریانی Presentation Forms از پیش در Unicode ندارد - معادلی برای بلوکهای Arabic Presentation Forms U+FB50-FDFF / U+FE70-FEFC در سریانی وجود ندارد. بنابراین مصرفکنندهها باید شکلدهی سریانی را از طریق GSUB lookupهای تعریفشده در فونت (معمولاً
قابلیت شکلدهی مغولی (v2.119.54) دو روش موازی برای مغولی:
function GetMongolianJoiningClass(CP: Cardinal): TJoiningClass; function GetMongolianPosition(const Run: array of Cardinal; Index: Integer): TPosition;
پوشش شامل Mongolian پایه (U+1820-U+1842)، Todo (U+1843-U+1877)، Sibe (U+1880-U+18A8)، Manchu و extensionهای Ali Gali است. Variation Selectorهای FVS1 / FVS2 / FVS3 (U+180B-U+180D)، خطتیره نرم NIRUGU (U+180A) و نشانهای واکه Ali Gali همگی به عنوان Transparent (T-class) دستهبندی میشوند تا بدون شکستن پیمایش، در اتصال مشارکت کنند
مثل سریانی، مغولی هم Presentation Forms از پیشکدگذاریشده در Unicode ندارد. چیدمان عمودی سنتی مغولی، قواعد پیچیده تغییر شکل نویسهها و انتخاب شکل مبتنی بر FVS همگی باید از طریق GSUB lookupهای تعریفشده در فونت هدایت شوند (معمولاً
قابلیت شکلدهی Indic برای دواناگری (v2.119.55) دواناگری از عربی / سریانی / مغولی بنیادیتر متفاوت است - این یک خط abugida از خانواده Indic است که در آن واحد معنادار خوشه هجایی (akshara) است، نه یک نویسه منفرد، و ترتیب نمایش glyphها درون یک خوشه اغلب با ترتیب منطقی Unicode تفاوت دارد. دو روش، لایه قابلیت Indic دواناگری را در معرض میگذارند:
function GetDevanagariCategory(CP: Cardinal): TIndicCategory; procedure ApplyDevanagariReorder(var Run: array of Cardinal);
ادغام خودکار (v2.119.67): وقتی
گردشکار معمول (سریانی)
PDF.RegisterUnicodeTTF('Estrangelo', 'SyrCOMEdessa.otf'); PDF.SetGSUBScript('syrc'); // see GSUB engine doc 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]; // auto Repha + I-matra reorder PDF.CurrentPage.SetFont('NotoDeva', [], 14); PDF.CurrentPage.UnicodeTextOut(50, 700, 0, UnicodeString(#$0939#$093F#$0928#$094D#$0926#$0940)); // "Hindi"
کمکرویههای Unicode برای subset و استخراج
دامنه و محدودیتها ادغام فعلی سمت تولیدکننده شکلدهی سریانی، مغولی، تبتی و Indic اکنون صفحههای مرجع API جداگانه دارند. سریانی را میتوان از طریق دامنهٔ فعلی همچنین N'Ko و Adlam را بهعنوان scriptهای cursive راستبهچپ، ترتیبدهی SARA AM و tone-mark در Thai/Lao، ترتیبدهی niqqud عبری، و نشانههای pre-base در Javanese پوشش میدهد. این مسیرها در روشهای پیشپردازش شکلدهی script مستند شدهاند
همچنین ببینید: پشتیبانی شکلدهی عربی / فارسی / اردو, خط لولهٔ شکلدهی خودکار (Phase 8), موتور جایگزینی OpenType GSUB, THotPDF.AssignSyntheticCodepointForGID |