Theppitak's blog

My personal blog.

02 ตุลาคม 2547

Pango OT Episode II

ก่อนจะ generalize Pango มอดูลไทย เพื่อเพิ่มภาษาลาว ก็ขัดสีฉวีวรรณก่อนเสียหน่อย เกี่ยวกับ OpenType support ที่ขยักแรกมีผลไปแล้วใน Pango 1.6.0 และ 1.4.x (รุ่นไหนจำไม่ได้) เป็นการใช้ OpenType table เสริมท้ายเข้าไป หลังจากทำ PUA substitution (คือการใช้ glyph ใน Unicode Private Use Area [PUA] แทนที่ glyph ปกติ) เพื่อจัดการสระ-วรรณยุกต์หลบหางพยัญชนะหางยาว ซึ่งตารางหลักที่จะมีผลคงเป็น GPOS เพราะงานของ GSUB นั้น โดน shaper ทำไปหมดก่อนแล้ว

ทีนี้ หลังจาก thaifonts-scalable ที่มี OpenType ได้กระจายออกไปให้ทดสอบใช้กับ GNOME 2.8 กันระยะหนึ่งแล้ว ก็เริ่มขยักที่สอง คือให้ OpenType table ได้ยืดเส้นยืดสายเต็มที่ โดยลดการใช้ PUA ลงเป็นตัวเลือกสำรองสำหรับฟอนต์ที่ไม่มี OpenType table เท่านั้น โดยได้จัดโครงสร้าง thai-ot ใน Pango Thai module นิดหน่อย แล้ว file GNOME Bug #153927 ไว้อ้างอิง โดยได้ปรึกษาปัญหาใน gtk-i18n-list ด้วย ก็ได้คำชี้แนะจาก Owen เกี่ยวกับทางเลือกต่างๆ จนถึงบางอ้อ ว่าเราควรแบ่งหน้าที่ของ shaper กับ OpenType table ที่ตรงไหน

สรุปโดยย่อสำหรับผู้สนใจ: pango shaper จะแบ่งข้อความเป็น cluster ก่อน แต่ละ cluster ก็คือหน่วยย่อยที่สุดที่สามารถวิเคราะห์การเรียงอักขระได้ เช่น “ที่แม่น้ำน่าน” ก็จะแบ่ง cluster เป็น “ที่|แ|ม่|น้ำ|น่|า|น” จากนั้น ส่ง clusterized text ให้ GSUB ไปประมวลผล ซึ่งในฟอนต์ก็จะเลือกชุดวรรณยุกต์สูง-ต่ำ (ในฟอนต์ OpenType จะคงเหลือ glyph วรรณยุกต์สองชุด คือชุดเล็กไว้วางบนวรรณยุกต์ กับชุดใหญ่ไว้วางบนพยัญชนะ ชุดที่ใช้หลบหางถูกตัดทิ้งไป เพราะจัดการด้วย GPOS ได้ และเหตุที่ไม่เหลือชุดเดียวไปเลย เพราะวรรณยุกต์จำเป็นต้องมีสองขนาด ไม่งั้นวางแล้วไม่สวย) ตัดเชิง ญ ฐ ถ้ามีสระล่าง ฯลฯ จากนั้นจึงใช้ GPOS จัดการเรื่องการวางตำแหน่งสระ-วรรณยุกต์ให้สวยงาม (ผมเคยร่าง spec ของ Thai OpenType font ไว้ แต่ยังไม่ใช่ฉบับสุดท้าย อาจมีการแก้ไขอีก)

นอกจากนี้ ยังแจ้งบอกใน TLWG devel forum ให้ช่วยทดสอบกัน ผลปรากฏว่า ไม่มีใครรายงานว่าพบข้อผิดพลาด ก็เลยถือว่าไม่มี bug แล้ว วันนี้เลย commit patch เข้าไปใน CVS แล้ว ใครเจอ bug ก็ไป reopen bug เอาละกันนะคร้าบ

0 ความเห็น:

แสดงความเห็น (มีการกลั่นกรองสำหรับ blog ที่เก่ากว่า 14 วัน)

<< กลับหน้าแรก

hacker emblem