Theppitak's blog

My personal blog.

27 สิงหาคม 2555

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:

Loma on new Pango

ฟอนต์ Arundina Sans ซึ่งใช้ GSUB อย่างเดียว (แต่แท็กภาษามีการแก้ไขให้เป็น 'thai' แล้ว):

Arundina Sans on new Pango

แต่สำหรับฟอนต์ที่ไม่มี OpenType feature เลยล่ะก็.. เละตุ้มเป๊ะ:

Non-OpenType on new Pango

และใน 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 แล้ว จะเป็นดังนี้:
    Thai on VTE with new Pango
    คือได้ย้ายนิคหิตมาอยู่ในเซลล์เดียวกับลากข้างแล้ว แต่เลื่อนตำแหน่งไปอยู่ข้างหลัง ถามว่าถูกต้องไหม มันก็ยังไม่ถูก แต่อย่างน้อยปัญหาเรื่อง dotted circle ก็หายไปแล้ว ถือว่าพอทนได้หรือเปล่า? จนกว่าเขาจะออกแบบเทอร์มินัลใหม่ให้รองรับภาษาตระกูลอินเดียทั้งหมด :P

บั๊กที่ยังอยู่:

  • GNOME #576156 เกี่ยวกับการเลื่อนเคอร์เซอร์ในข้อความภาษาไทย ที่จะกระโดดข้ามสระหน้า-สระหลัง แทนที่จะเลื่อนทีละเซลล์ตามปกติ ตรงนี้เป็นการตีขลุมของคณะทำงานยูนิโค้ดว่าภาษาไทย-ลาวจะนับคลัสเตอร์เหมือนภาษาตระกูลอินเดีย เราได้ผลักดันแก้ UAX #29 จนสำเร็จใน Unicode 6.1.0 แต่ Behdad ก็ยังไม่รับแพตช์ ที่ผ่านมาอาจจะยังยุ่งกับ HarfBuzz อยู่ ตอนนี้ก็อาจได้เวลาผลักดันใหม่อีกครั้งหนึ่ง

ป้ายกำกับ:

0 ความเห็น:

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

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

hacker emblem