Theppitak's blog

My personal blog.

28 กันยายน 2553

Progress of SARA AM Bug in VTE

เล่าสู่กันฟังครับ เกี่ยวกับความคืบหน้าของการแก้ปัญหาสระอำใน gnome-terminal

ปัญหาคือ สระอำใน VTE ที่ใช้ Pango วาดเพื่อรองรับ combining character นั้น มีปัญหากับสระอำของไทย เนื่องจาก Pango จะแยกสระอำเป็นนิคหิตกับลากข้าง แต่เนื่องจากในเทอร์มินัลจะวาดอักขระทีละเซลล์แยกกัน ทำให้นิคหิตที่แยกตัวไปนั้นไม่มีพยัญชนะรองรับ ก็เลยมี dotted circle มาแทนที่ และทำให้ลากข้างต้องตกไปทับเซลล์ถัดไป

ใน blog เก่า ผมได้บันทึกไว้ว่าได้ทำแพตช์แก้ขัดที่ Pango เพื่อไม่ให้มันแยกสระอำ และอัปโหลด Pango รุ่นที่แพตช์แล้วไว้ให้ใช้ที่ debclub ก้านกล้วย ด้วย

จากนั้น ก็ได้ file GNOME #583718 กับ VTE ไว้เพื่อแจ้งปัญหา โดยได้เสนอทางแก้ไว้สองทาง คือวาดสระอำแบบไม่แยกร่าง กับอีกทางคือวาดแบบแยกร่างโดยพยายามให้ VTE รองรับการวาดอักขระทีละหลายเซลล์ ซึ่งวิธีหลังจะเป็นการคิดเผื่อภาษา CTL อื่นด้วย โดยมองว่าเป็นปัญหาเดียวกับที่ทำให้วาดภาษาตระกูลอินเดียบนเทอร์มินัลไม่ได้ เนื่องจากวิธีวาดที่แยกเซลล์นี้เอง

ปัญหาของภาษาตระกูลอินเดียก็คือ เขา encode ข้อความในแบบที่เขาเรียกว่า "logical order" คือเรียงลำดับ พยัญชนะต้น-สระ-ตัวสะกด เสมอ แม้ว่าสระจะเป็นสระหน้าก็ตาม ถ้าเทียบเป็นภาษาไทยก็ประมาณว่า encode คำว่า "เทพ" เป็น "ทเพ" คำว่า "เทา" เป็น "ท{เา}" โดย "{เา}" หมายถึงอักขระที่กำหนดไว้สำหรับสระเอาโดยเฉพาะ ทำให้เวลาวาดจะต้องมีการจัดลำดับใหม่ก่อน ทำให้วิธีวาดแบบแยกเซลล์ใช้การไม่ได้ ต้องวาดเป็นกลุ่มก้อน พร้อม map ตำแหน่งเคอร์เซอร์ให้ถูกลำดับด้วย

มัน logical ตรงไหน? ผมถามตัวเองอยู่เรื่อย ๆ โดยเฉพาะเวลาที่เจอคนประเทศอื่นมาบอกว่าวิธี encode แบบภาษาไทยนั้นไม่ logical เป็นลำดับที่ผิด และได้สร้างความซับซ้อนในการประมวลผลมากมาย จนต้อง เขียนเอกสารอธิบายไว้ ให้เป็นกิจจะลักษณะ ว่านั่นเป็นความเชื่อที่ผิด

คือผมอาจจะเห็นด้วยว่าแบบของเขาก็ logical ในแบบของเขา แต่ก็ไม่เห็นด้วยถ้าจะบอกว่าของไทยนั้นไม่ logical อย่างน้อย ๆ ภาษาอังกฤษก็ไม่ได้ logical เหมือนกันถ้าจะคิดด้วยหลักเดียวกัน เช่น ไม่ได้ encode คำว่า "game" เป็น "g{ae}m", ไม่ได้ encode "table" เป็น "tabel" ฯลฯ และการ encode แบบตรงตามลำดับการเขียนของภาษาไทยก็ไม่เห็นว่าจะไม่ logical สำหรับมนุษย์ตรงไหน

และการที่ภาษาไทยถูกจัดให้เป็นภาษากลุ่ม Complex Text Layout (CTL) ทำให้เราถูกยัดเยียด implementation ตามแบบภาษาอินเดียอยู่เนือง ๆ (เช่น การทำ virama ด้วยพินทุ) และครั้งนี้ การที่นักพัฒนา VTE เลือกวิธี implement แบบอินเดียด้วยการ resolve bug ว่า duplicate กับ บั๊กของเทวนาครี ก็กลายเป็นการทำให้ภาษาไทยต้องรอการแก้บั๊กแบบซับซ้อนตามภาษาอินเดียไปด้วย

เอ้า รอก็รอ ได้สระอำสวย ๆ ก็ไม่เลว แต่เวลาผ่านไปเป็นปีก็ไม่มีทีท่าว่าจะมีทางแก้ ผมเลยตัดสินใจ reopen บั๊ก และ reassign บั๊กให้ Pango เพื่อขอใช้ทางเลือกที่ไม่ต้องแยกร่างสระอำเมื่อวาดด้วยฟอนต์ monospace

แล้วมันก็ค้างอยู่อย่างนั้น จนกระทั่งมีผู้ใช้ภาษาฮินดีฉุนขาด มากระทุ้งบั๊กภาษาอินเดีย ผมเลยถือโอกาสสนทนาแลกเปลี่ยน พร้อมกับกระทุ้งนักพัฒนาอีกครั้งว่าขอเลือกวิธีการต่างหากจาก Complex Text แต่คำตอบของนักพัฒนาก็คือ "I'm afraid not. I don't have any interest in maintaining a separate shaping system just for the terminal."

เอ.. ภาษาไทยชักจะถูกผูกแน่นเข้ากับภาษาอินเดียมากขึ้นทุกที ทั้งที่เราก็ใช้ภาษาไทยบน text console มาได้ตั้งแต่สมัย MS-DOS ทำไมครั้งนี้มันถึงยุ่งยากนัก? เพราะการเหมารวมว่าภาษาไทยเป็น Complex Text Layout และยัดเยียดว่าภาษาไทยต้อง implement เหมือนภาษาอินเดียอีกใช่หรือไม่?

หรือควรเขียนเอกสารให้มันชัด ๆ ไปเลย ว่า Thai is NOT Complex Text (ว้อย!)

จะติดก็อยู่ที่สระอำเจ้าปัญหาตัวเดียวนี่แหละ งานไหนก็ขอจุ้นมันทุกงาน :-P

ป้ายกำกับ: ,

0 ความเห็น:

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

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

hacker emblem