Pango-HarfBuzz Merge and Effects on Thai Script
ความเปลี่ยนแปลงที่สำคัญรายการหนึ่งใน GNOME 3.6 คือ Pango จะเปลี่ยนมาใช้ HarfBuzz ในการวาดข้อความภาษาต่าง ๆ แล้ว โดยได้โละ shaping engine เดิมใน Pango ทิ้งหมด ไปเรียก HarfBuzz แทน ส่วน language engine (ตัวตัดคำ) ยังคงอยู่
ก็เลยต้องมาประเมินใหม่ ว่าหลังจาก merge HarfBuzz มาแล้ว มีความเปลี่ยนแปลงอย่างไรบ้างสำหรับภาษาไทย
จากการไล่โค้ดคร่าว ๆ ถือว่า Behdad ทำการบ้านมาดีมากสำหรับภาษาไทย (ภาษาอื่นก็คงเช่นกัน) โดยได้ถอดแบบการทำงานของ Uniscribe ของวินโดวส์มาให้มากที่สุด เพื่อความเข้ากันได้ รวมถึงการเก็บข้อมูลจากรายงานบั๊กใน Mozilla เกี่ยวกับปัญหาการ hack ของฟอนต์ราชการ 13 ฟอนต์ของ SIPA ที่ไปใช้แท็ก 'latn'
ในการ implement ภาษาไทย แทนที่จะเป็น 'thai'
ซึ่งผิดสเปค แต่ในโลกซอฟต์แวร์ กฎหมู่มักอยู่เหนือกฎหมายเสมอ ๆ ผิดก็เป็นถูกได้ถ้าเสียงดังพอ
ฟอนต์ที่รองรับ
เมื่อทดลอง Pango ตัวใหม่กับฟอนต์ทั่วไปที่มีการออกแบบ GPOS/GSUB เอาไว้ ก็สามารถแสดงผลได้ดีไม่มีปัญหา
ฟอนต์ Loma ซึ่งใช้ GPOS, GSUB:
ฟอนต์ Arundina Sans ซึ่งใช้ GSUB อย่างเดียว (แต่แท็กภาษามีการแก้ไขให้เป็น 'thai'
แล้ว):
แต่สำหรับฟอนต์ที่ไม่มี OpenType feature เลยล่ะก็.. เละตุ้มเป๊ะ:
และใน HarfBuzz ยังไม่รองรับการใช้ PUA glyph (ตัวหลบหางทั้งหลาย) ในการจัดแสดงภาษาไทย ซึ่งก็หมายความว่า legacy font ทั้งหลายจะเละบน Pango ตัวใหม่นี้ทั้งหมด ซึ่งหมายถึงฟอนต์ที่ออกแบบมาสำหรับ Windows XP ลงไป ส่วนฟอนต์ใน Windows 7 ได้ข่าวว่ามี OpenType feature สำหรับภาษาไทยเรียบร้อยแล้ว ไม่น่ามีปัญหา
พูดสั้น ๆ ก็คือ Pango/HarfBuzz ได้ deprecate การใช้ตัวหลบไปแล้ว รองรับฟอนต์ OpenType เท่านั้น
บั๊กที่คั่งค้าง
เมื่อ Pango โละ engine เก่าทิ้งหมด ก็เกิดการเปลี่ยนแปลงกับบั๊กต่าง ๆ เป็นธรรมดา มีบางบั๊กที่ปิดไปโดยปริยาย มีบางบั๊กที่ยังเป็นบั๊กอยู่ โดยสรุปก็คือ:
บั๊กที่ปิดไป:
- GNOME #616495 เกี่ยวกับการแสดงไม้กงของภาษาลาว ซึ่งมอดูลไทยพลาดกรณีนี้ไป ผมได้เสนอแพตช์ไว้ แต่เขายังไม่รับ ตอนนี้ย้ายไป HarfBuzz แล้ว ปัญหาหายไปแล้ว บั๊กจึงปิดโดยปริยาย
- GNOME #378001 บั๊กที่ Martin Hosken รายงานไว้เมื่อ 6 ปีที่แล้ว เกี่ยวกับการรองรับภาษาชาติพันธุ์ด้วยอักษรไทย ผมรอสเปค วทท. 3.0 อยู่ เลยยังไม่ได้ทำเสียที ตอนนี้ย้ายไป HarfBuzz แล้ว ไม่มีการตรวจลำดับด้วย วทท. 2.0 อีกต่อไป ถ้าฟอนต์รองรับก็จะสามารถแสดงภาษาชาติพันธุ์ต่าง ๆ ได้แล้ว
- GNOME #393307, #677090 เกี่ยวกับการวาดเครื่องหมายกำกับประเภท zero width ต่าง ๆ ในยูนิโค้ด เช่น ZWJ (U+200D) ซึ่งมอดูลไทยไม่ได้กรองออก บั๊กนี้มีนักพัฒนาอื่นรายงานมา Behdad ตอบมาแล้ว แต่ยังไม่มีใครทำอะไรต่อ แต่ปัญหาหมดไปเมื่อย้ายไป HarfBuzz
บั๊กที่ยังเป็นคำถาม:
- GNOME #583718 เกี่ยวกับการวาดสระอำใน VTE และ gnome-terminal ที่จะมี dotted circle แทรกเข้ามา ซึ่งที่ผ่านมาได้ยื้อไปยื้อมากับ Behdad อยู่ว่าควรจะจัดการภาษาไทยแยกต่างหากจากภาษาตระกูลอินเดียหรือไม่ ผมเห็นว่าควรแยก โดยได้เสนอแพตช์ให้วาดฟอนต์ monospace ในแบบพิมพ์ดีด ที่วาดนิคหิตของสระอำไว้ในช่องเดียวกับลากข้าง แต่ Behdad ยืนยันที่จะให้จัดการภาษาไทยในฐานะภาษาตระกูลอินเดีย ซึ่งเรื่องจะยาวมาก ต้องออกแบบโครงสร้างโค้ดใหม่เลยทีเดียว แต่ถ้าดูผลลัพธ์ของ Pango/HarfBuzz แล้ว จะเป็นดังนี้:
คือได้ย้ายนิคหิตมาอยู่ในเซลล์เดียวกับลากข้างแล้ว แต่เลื่อนตำแหน่งไปอยู่ข้างหลัง ถามว่าถูกต้องไหม มันก็ยังไม่ถูก แต่อย่างน้อยปัญหาเรื่อง dotted circle ก็หายไปแล้ว ถือว่าพอทนได้หรือเปล่า? จนกว่าเขาจะออกแบบเทอร์มินัลใหม่ให้รองรับภาษาตระกูลอินเดียทั้งหมด :P
บั๊กที่ยังอยู่:
- GNOME #576156 เกี่ยวกับการเลื่อนเคอร์เซอร์ในข้อความภาษาไทย ที่จะกระโดดข้ามสระหน้า-สระหลัง แทนที่จะเลื่อนทีละเซลล์ตามปกติ ตรงนี้เป็นการตีขลุมของคณะทำงานยูนิโค้ดว่าภาษาไทย-ลาวจะนับคลัสเตอร์เหมือนภาษาตระกูลอินเดีย เราได้ผลักดันแก้ UAX #29 จนสำเร็จใน Unicode 6.1.0 แต่ Behdad ก็ยังไม่รับแพตช์ ที่ผ่านมาอาจจะยังยุ่งกับ HarfBuzz อยู่ ตอนนี้ก็อาจได้เวลาผลักดันใหม่อีกครั้งหนึ่ง
ป้ายกำกับ: gnome