Harfbuzz ตอนแรก ภาษาไทย กับ OpenType

จะว่าพูดถึงการนำ HarfBuzz ไปใช้กับ FreeType (และ SDL2) แต่อยากจะเกริ่นนำเสียเล็กน้อย

เกี่ยวกับ OpenType

ในอดีต สมัยแรก ๆ ฟอนท์ที่เราใช้ ๆ กันจะอยู่ในรูปของ Fixed Font ก็คือ ตัวอักษรจะมีขนาดตายตัว และใช้พื้นที่การแสดงผลเท่ากันหมดทุกตัวอักษร ในยุคของ GUI ระยะแรก ๆ ก็ยังคงใช้ฟอนท์ที่เป็นลักษณะนี้ แต่หลังจากนั้นไม่นานก็มีการออกแบบฟอนท์ในรูปแบบของ Scalable Font ออกมา ซึ่งก็คือฟอนท์ที่สามารถย่อ-ขยายขนาดได้

Scalable Font ในยุคเริ่มต้นมีอยู่สองค่ายหลัก ๆ นั่นคือ TrueType จาก Apple และ Type1 จาก Adobe สำหรับบน Windows นั้น MS ได้ขอสิทธิการใช้งาน TrueType Font จาก Apple ทำให้ระบบปฎิบัติการหลักๆ สองตัวในตลาด (Mac OS และ Windows (ในตอนนั้นเป็นแค่ Shell)) ใช้ฟอนท์ในรูปแบบของ TrueType กันหมด TrueType จึงกลายเป็นรูปแบบฟอนท์ที่มีการใช้งานมากที่สุดไป

หลังจากนั้น Apple ได้พัฒนาส่วนขยายของ TrueType โดยมีชื่อว่า Apple Advanced Typography แต่ว่า Apple ไม่ได้ให้สิทธิการใช้งานเทคโนโลยีตัวนี้ Microsoft ก็เลยพัฒนาเทคโนโลยีใหม่ขึ้นมาบนพื้นฐานของ TrueType และได้ดึง Adobe เข้ามาร่วมวง ออกมาเป็น OpenType นั่นเอง

พูดกันง่าย ๆ OpenType นั้นมีพื้นฐานมาจาก TrueType แต่เพิ่มความสามารถของ Type1 จาก Adobe เข้ามาด้วยนั่นเอง

OpenType กับภาษาไทย

ในส่วนของภาษาไทย OpenType นั้นมีส่วนช่วยให้การวาดข้อความภาษาไทยบนหน้าจอนั้นดูดีขึ้นมากทีเดียว บน TrueType นั้น เราอาจจะเจอปัญหาประเภท วรรณยุกต์ลอย วรรณยุกต์ซ้อนกับตัว ป.ปลา ญ หญิงในคำว่า “กตัญญู” นั้นมีเชิง และอื่น ๆ ปัญหาดังกล่าวนี้สามารถแก้ไขได้ใน OpenType ซึ่งผู้ผลิตฟอนท์จะเป็นคนที่จัดการในส่วนนี้
ใน OpenType Spec สำหรับภาษาไทย มีการแนะนำให้ใช้เทคนิคสองอย่าง ก็คือ Glyph Substitution (GSUB) และ Glyph Positioning (GPOS) เมื่อข้อความที่ต้องจะวาดนั้นเข้ากับเงื่อนไขที่ระบุไว้
GSUB ก็คือการแทน Glyph ของตัวอักษรหนึ่ง ด้วย Glyph อีกตัวหนึ่ง เช่น ในกรณีคำว่า “กตัญญู” นั้น จะมีส่วนหนึ่งของข้อความที่เป็นตัว ญ ตามด้วยสระ ู ซึ่งอยู่ด้านล่าง ดังนั้น Glyph ของตัว ญ จะถูกแทนด้วย Glyph ที่ไม่มีเชิงแทน
ทั้งนี้ เราสามารถแทน Glyph หลาย ๆ Glyph ด้วย Glyph เดียว (เรียกว่าการทำ Ligature) หรือกลับกัน (Decompose) ได้ด้วย แล้วแต่ว่าผู้ออกแบบฟอนท์จะทำมายังไง
GPOS ก็คือการย้ายตำแหน่งของ Glyph เช่น ในกรณีทีมีวรรณยุกต์ตามหลังสระที่อยู่ด้านบน ก็ให้วางวรรณยุกต์สูงขึ้นไปอีก หรือ ถ้าตัวอักษรนำหน้ามีลักษณะที่สูงกว่าอักษรอื่น ๆ เช่น ตัว ป ก็ให้ย้ายวรรณยุกต์ไปข้างหน้า เป็นต้น
ทั้ง GSUB และ GPOS เป็นฟีเจอร์ของ OpenType ซึ่งตัว OpenType Engine (เช่น HarfBuzz) จะเป็นคนดูแลเองทั้งหมด
คราวหน้าจะพูดถึงการนำ HarfBuzz ไปใช้งานนะครับ

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

This site uses Akismet to reduce spam. Learn how your comment data is processed.