|
Automatic Shaping Pipeline (Phase 8) Opt-in producer-side GSUB pipeline (v2.119.59 - v2.120.10)
|
Arabic Shaping Multi-Script Shaping GSUB Engine |
|
ไปป์ไลน์การปรับรูปร่างอัตโนมัติจะยกระดับเครื่องมือ OpenType GSUB จากเดิมที่เป็นเพียงเครื่องมือสืบค้นความสามารถ ให้กลายเป็นคุณลักษณะฝั่งผู้ผลิตที่จะถูกนำไปใช้โดยอัตโนมัติเมื่อมีการส่งข้อความไปยังสตรีมเนื้อหา PDF ผู้เรียกใช้งานจะเปิดใช้งานคุณลักษณะ GSUB เฉพาะผ่านชุดที่ระบุประเภท (ShapingFeatures: THPDFShapingFeatures) และ HotPDF จะทำหน้าที่เรียกใช้การแทนที่ที่ถูกต้อง ทำเครื่องหมายสัญลักษณ์ฟอนต์ทดแทนลงในซับเซ็ตฟอนต์ที่ฝังไว้ และส่งรายการแผนผังย้อนกลับ ToUnicode CMap ที่จำเป็นสำหรับการเข้าถึง
เฟรมเวิร์กการเลือกใช้เอง (v2.119.59 / Phase 8a) enum และคุณสมบัติใหม่ใช้ควบคุมการแทนที่อัตโนมัติที่ทำงานในระหว่างการส่งข้อความ
ประเภท THPDFShapingFeature = ( sfArabicGSUB, // native Arabic init / medi / fina / isol + rlig / calt / rclt sfStandardLigatures, // Latin 'liga' (ff / fi / fl / ffi / ffl / sft / st) sfContextualLigatures,// Latin 'clig' (contextual ligatures) sfContextualAlternates,// 'rclt' (Required Contextual Alternates) sfIndicShaping); // Devanagari Repha + pre-base I-matra reorder THPDFShapingFeatures = set of THPDFShapingFeature;
property ShapingFeatures: THPDFShapingFeatures read ... write ...;
ค่าเริ่มต้นคือ [] (ชุดว่าง) ซึ่งจะรักษาเอาต์พุตที่เหมือนกันทุกไบต์สำหรับผู้เรียกที่ขึ้นอยู่กับการปรับรูปแบบหลังการส่งผ่านแบบคงที่ของ v2.119.32-58 การตั้งค่าสถานะอย่างน้อยหนึ่งรายการจะยกระดับเครื่องมือเข้าสู่โหมดอัตโนมัติสำหรับคุณลักษณะที่เกี่ยวข้อง
sfArabicGSUB - การปรับรูปร่างตามบริบทภาษาอาหรับ GSUB แบบเนทีฟ (v2.185.0) เมื่อตั้งค่า sfArabicGSUB แล้ว HotPDF จะแมปกลุ่มอักขระภาษาอาหรับเชิงตรรกะเข้ากับรหัสสัญลักษณ์ฟอนต์พื้นฐาน ใช้การสืบค้นหาค่าของตำแหน่ง init, medi, fina และ isol ของฟอนต์ที่ลงทะเบียนที่ตำแหน่งการเชื่อมโยงที่เลือกสำหรับอักษรแต่ละตัว จากนั้นใช้ rlig, calt และ rclt บนกลุ่มอักขระที่ปรับรูปแบบแล้ว สัญลักษณ์ฟอนต์ทดแทนที่ไม่มีรหัสอักขระ Unicode จะถูกส่งออกผ่านพาทรหัสสังเคราะห์ด้วยแผนผังย้อนกลับ ToUnicode ดังนั้นฟอนต์ที่สัญลักษณ์ภาษาอาหรับตามบริบทอยู่นอก cmap ยังคงสามารถฝังและคัดลอกได้อย่างถูกต้อง
การตั้งค่า sfArabicGSUB จะเป็นการข้ามโปรแกรมปรับรูปแบบ 4 ตำแหน่งแบบคงที่ v2.85.0 สำหรับภาษาอาหรับโดยปริยาย ผู้เรียกที่ต้องการให้โปรแกรมปรับรูปแบบคงที่ยังคงจัดการกับรหัสอักขระนอกเหนือจากที่ GSUB ของฟอนต์ระบุไว้ควรปิดใช้งาน sfArabicGSUB ไว้
sfStandardLigatures / sfContextualLigatures - Phase 8b (v2.119.65) เมื่อตั้งค่า sfStandardLigatures อักษรควบมาตรฐานภาษาละตินจะถูกพับโดยอัตโนมัติโดยใช้คุณลักษณะ liga ของฟอนต์ ฟังก์ชัน ApplyLatinLigatureRefinement มุ่งเป้าไปที่บล็อกรูปแบบการแสดงผลตัวอักษร (U+FB00-FB4F) - โดยทั่วไปคือ FB00 ff, FB01 fi, FB02 fl, FB03 ffi, FB04 ffl, FB05 long-s + t, FB06 st ส่วน sfContextualLigatures จะเพิ่มการประมวลผลรอบที่สองสำหรับคุณลักษณะ clig ของฟอนต์ ทั้งสองรอบใช้กลไก cmap ย้อนกลับแบบเดียวกับ sfArabicGSUB และส่งรายการแผนผังย้อนกลับ ToUnicode CMap ใหม่ 7 รายการ (FB00-FB06) เพื่อให้การคัดลอก / วางของโปรแกรมอ่านแปลงอักษรควบกลับไปเป็นตัวอักษรต้นทางได้
sfContextualAlternates - GSUB 'rclt' (v2.119.66) เมื่อตั้งค่า sfContextualAlternates แล้ว คุณลักษณะ rclt (Required Contextual Alternates) ของฟอนต์จะถูกนำไปใช้ ฟังก์ชัน ApplyArabicGSUBContextualRefinement ใช้จุดเชื่อมต่อ v2.119.47 ApplyContextualSubst และจัดการกับเอาต์พุต N-to-M ที่มีความยาวผันแปรได้ (การแทนที่จะเกิดขึ้นก็ต่อเมื่อทุกๆ GID สำหรับการทดแทนสามารถเข้าถึงได้ผ่านทาง cmap ย้อนกลับเท่านั้น) ช่วง cmap ย้อนกลับได้รับการขยายเป็น FB00-FDFF + FE70-FEFF เพื่อครอบคลุมรูปแบบการแสดงผลภาษาละติน + อาหรับ + ฮิบรู
การใช้งานทั่วไปของ rclt: อักษรอาหรับ init / medi / fina / isol เมื่อฟอนต์กำหนดการปรับเปลี่ยนรูปร่างตามตำแหน่งผ่าน GSUB แทนที่จะเป็นรหัส Unicode Presentation Forms; กฎการแก้ความกำกวมของลำดับอักษรละตินบางประการ; คุณลักษณะการปรับเปลี่ยนอักษรอินเดีย pres / blws / psts / half / pstf / cjct เมื่อลงทะเบียนเป็น rclt โดยผู้ออกแบบฟอนต์
sfIndicShaping - Phase 8e (v2.119.67) เมื่อตั้งค่า sfIndicShaping แล้ว ความสามารถอักษรเทวนาครี v2.119.55 ApplyDevanagariReorder จะถูกยกระดับจากเมธอดที่ใช้ด้วยตนเองไปเป็นตัวช่วยประมวลผลล่วงหน้าโดยอัตโนมัติภายในตัวช่วย BuildUnicode*FieldContent ทั้งสามตัว กลุ่มอักษรเทวนาครีจะได้รับการย้าย Repha (Ra + Halant ที่จุดเริ่มต้นคลัสเตอร์) ไปยังตำแหน่งหลังฐาน และย้าย I-matra ก่อนฐาน (U+093F) ไปไว้ก่อนพยัญชนะฐานคลัสเตอร์ เพื่อให้เครื่องมือ GSUB ของโปรแกรมอ่านของลูกค้าตรวจพบพยางค์ในลำดับการแสดงผลที่ถูกต้อง ส่วนการจัดลำดับใหม่อื่นๆ ของอักษรอินเดีย (matra เหนือฐาน / ใต้ฐาน, การสร้างอักษรควบ) จะยังคงอยู่ใน GSUB ของฟอนต์
การรองรับการสอบถามข้อมูลขั้นสูง (v2.119.64 / Phase 8c.5) API เสริมจะแสดงค่าความกว้างของตัวอักษร /W em-fraction ที่แคชไว้ เพื่อให้ผู้เรียกสามารถคำนวณการตัดคำได้อย่างถูกต้องเมื่อส่งสัญลักษณ์ฟอนต์ที่ถูกแทนที่ด้วย GSUB
function GetCodepointAdvance(CP: Cardinal): Single;
ส่งคืนความกว้างล่วงหน้าที่ได้จาก hmtx เป็นเศษส่วนของ em สำหรับสัญลักษณ์ฟอนต์ที่แก้ไขด้วย cmap ที่ CP โดยรุ่นเดียวกันนี้ยังได้แก้ไข CodeUnitAdvance เพื่อจัดประเภทการแสดงผลอักษรอาหรับ (U+FB50-FDFF + U+FE70-FEFF) เป็น NARROW แทนที่จะเป็น WIDE (ค่าเริ่มต้นแบบฮิวริสติกนั้นไม่ถูกต้องก่อน v2.65)
เวิร์กโฟลว์ทั่วไป (การปรับรูปร่างอัตโนมัติภาษาอาหรับแบบเต็มรูปแบบ)
PDF.RegisterUnicodeTTF('NotoArab', 'NotoSansArabic-Regular.ttf'); PDF.ShapingFeatures := [sfArabicGSUB, // native Arabic GSUB contextual glyphs sfCursiveAttachment]; // GPOS cursive entry / exit anchors PDF.SetGSUBScript('arab'); PDF.BeginDoc; PDF.CurrentPage.SetFont('NotoArab', [], 14); PDF.CurrentPage.RtLTextOut(100, 700, 0, UnicodeString(#$0628#$0633#$0645#$0020#$0627#$0644#$0644#$0647)); PDF.EndDoc;
เวิร์กโฟลว์ทั่วไป (อักษรควบมาตรฐานละติน + การจัดเรียงอักษรเทวนาครีใหม่)
PDF.RegisterUnicodeTTF('NotoSans', 'NotoSans-Regular.ttf'); PDF.RegisterUnicodeTTF('NotoDeva', 'NotoSansDevanagari-Regular.ttf'); PDF.ShapingFeatures := [sfStandardLigatures, // FB00-FB06 Latin liga sfContextualLigatures, // + clig sfIndicShaping]; // Devanagari Repha + I-matra reorder
การสิ้นสุดแผนงาน Phase 8 Phase 8a (v2.119.59) เฟรมเวิร์กสำหรับเลือกใช้เอง + ความสามารถภาษาอาหรับ; Phase 8b (v2.119.65) อักษรควบมาตรฐานละติน; Phase 8c.1 (v2.119.60) คำว่าอัลเลาะห์; Phase 8c.2 (v2.119.63) GSUB rlig ในระดับ GID; Phase 8c.3 (v2.119.61) การแมปแบบย้อนกลับ ToUnicode; Phase 8c.4 (v2.119.62) คำว่าบิสมิลลาฮ์; Phase 8c.5 (v2.119.64) การสอบถามข้อมูลล่วงหน้า + การแก้ไขฮิวริสติก; Phase 8c.6 (v2.119.68) การส่งออกรหัสสังเคราะห์ PUA; สำหรับ Phase 8d ถูกรวมเข้าเป็นเฟสย่อย 8c; Phase 8e (v2.119.67) การจัดลำดับใหม่อัตโนมัติอักษรเทวนาครี ด้วยเวอร์ชัน v2.119.68 เมทริกซ์ความสามารถของ Phase 8 สิ้นสุดลงแล้ว การปรับปรุงเพิ่มเติม (อักษรอินเดียเพิ่มเติม, การวางตำแหน่ง OpenType GPOS, การแก้ไข BiDi) จะได้รับการติดตามภายใต้แผนงานอื่นแยกต่างหาก
ขอบเขตและข้อจำกัด ไปป์ไลน์แบบเลือกใช้เองได้รับการออกแบบมาเพื่อเสริมคุณลักษณะทับบนโปรแกรมจัดรูปแบบหลังการส่งผ่านแบบคงที่ โดยผู้เรียกใช้งานปัจจุบันจะไม่เห็นพฤติกรรมเปลี่ยนแปลงใดๆ เว้นแต่จะเลือกใช้ ค่าเริ่มต้นชุด [] เป็นทางเลือกที่ปลอดภัยสำหรับความเข้ากันได้แบบเสถียรระดับไบต์ ฟอนต์ที่ไม่มีตารางคุณลักษณะ GSUB ที่ร้องขอจะสร้างเอาต์พุตแบบไม่มีการดำเนินการที่ปลอดภัย (ผู้เรียกใช้จะไม่พบการแทนที่ใดๆ และไม่มีการระบุข้อผิดพลาด)
แผนผัง API การปรับรูปร่างปัจจุบัน ไปป์ไลน์ปัจจุบันไม่ได้จำกัดอยู่เพียงการแทนที่เท่านั้น: sfKerning ใช้การจัดช่องไฟคู่ GPOS, sfMarkPositioning ใช้ระยะออฟเซต Mark-to-Base และ Mark-to-Mark, sfMarkToLigature ใช้การจัดวาง Mark-to-Ligature, sfCursiveAttachment ใช้การจัดตำแหน่งแองเคอร์ทางเข้า/ทางออกเขียนหวัด, sfTibetanShaping ใช้การจัดรูปแบบภาษาทิเบต GSUB, sfMongolianShaping ใช้รูปแบบตำแหน่งภาษามองโกเลีย และ sfIndicGSUB ใช้เชนคุณลักษณะ Indic GSUB หลังจากการจัดลำดับพยางค์ใหม่ ดู ShapingFeatures, เมธอด GPOS และวิธีการจัดรูปแบบอักษรอินเดีย การเพิ่มเข้ามาล่าสุด ได้แก่ sfLocalizedForms สำหรับ locl, calt ผ่าน ApplyGSUBContextualFeature, การจัดช่องไฟ GPOS แบบตามบริบทและแนวตั้ง, การส่งออกสัญลักษณ์ฟอนต์ตามบริบทของภาษาอาหรับ GSUB แบบเนทีฟ และพาธภาษาเอ็นโก ภาษาแอดลัม ภาษาไทย/ลาว ภาษาฮิบรู และภาษาชวา ดูวิธีการประมวลผลการจัดรูปแบบสคริปต์ล่วงหน้า
ดูเพิ่มเติม: OpenType GSUB Substitution Engine, Arabic / Persian / Urdu Shaping Support, Syriac / Mongolian / Devanagari Shaping, THotPDF.AssignSyntheticCodepointForGID, CFF / OpenType Font Subsetting |