mozlibthai
เรื่อง ทางเลือกของการตัดคำไทยใน firefox ที่โพสต์เมื่อวันก่อน คิดว่าได้ทางออกที่ดีแล้วครับ
โดยอาศัยความเห็นของ Mike Hommey จากเดเบียนคนเดิม ที่ว่าควรจะแยกออกมาเป็น component โดยหลังจากดูตัวอย่างของ mozgnome component ที่เขาชี้ ก็เริ่มเห็นด้วย ว่าเป็นวิธีที่เหมาะเจาะที่สุด แต่ครั้นจะทำแบบ generic เพื่อเสียบเข้าใน line breaker framework ที่มีอยู่หรือ ก็ยังไม่มีกลไกแยกภาษาอย่างที่ว่า ก็เลยตกลงใจ เสนอทำเป็น component อย่างที่ Mike แนะนำ แต่ใช้เฉพาะกิจสำหรับภาษาไทยภาษาเดียวไปก่อน จนกว่าจะมีการปรับปรุง framework ให้มีกลไกคล้าย Pango
แนวคิดก็คือ กำหนด interface ขึ้นมาใช้เรียกจากภายใน line breaker กลางของ Gecko ผ่าน XPCOM จากนั้น ก็ทำส่วนที่จะเชื่อมกับ libthai เป็น component มารองรับ (พูดง่ายๆ ก็คือ ใช้ Dependency Inversion Principle นั่นเอง) ซึ่ง component นี้ จะติดตั้งหรือไม่ก็ได้ โดยถ้าไม่ติดตั้ง ก็จะ fallback ไปใช้ rule base ที่พี่สัมพันธ์เคยทำไว้เมื่อนานมาแล้ว
component นี้ จะลิงก์กับ libthai ในแบบปกติ จึงสามารถปล่อยให้เป็นหน้าที่ของ loader ของระบบตามปกติได้ โดยไม่ต้องกำหนด absolute path ตามแบบ PR_LoadLibrary และปัญหาเรื่องการบังคับ dependency กับ libthai ก็หมดไป โดย distro สามารถ build แพกเกจแบบใช้ libthai แล้วแยก mozlibthai component ออกไปเป็นแพกเกจย่อยต่างหากได้ ไม่ต้องรวมกับแพกเกจ firefox หลัก ใครอยากใช้ libthai ตัดคำ ก็แค่ติดตั้งแพกเกจที่ว่าเพิ่มเอา เรียกว่าแก้ปัญหาที่มีในทางเลือกเดิมได้หมด วู้! มันยอดมากเลยจอร์จ..
หลังจากเสนอแพตช์เข้าใน bug ไปแล้ว ต่อไปก็คือ รอรีวิวแพตช์ (หวังว่าจะใช้เวลาเหมือนกามนิตภาคพื้นดิน ไม่ใช่ภาคสวรรค์) แล้วก็ พยายามแต่งองค์ทรงเครื่อง libthai ให้ใช้บนวินโดวส์ได้ จะได้ใช้ solution เดียวกันนี้บนนั้นได้ด้วย ทั้งนี้ รวมถึง Linux distro ต่างๆ นอกเหนือจาก Debian และ Ubuntu ที่ยังไม่มี libthai ด้วย!
ความจริงแล้ว การแยก component แบบนี้ มีประโยชน์อีกอย่าง ตรงที่สามารถมี engine แบบอื่นได้อีก เช่น ใครชอบ icu ก็ทำ component mozicu หรืออะไรทำนองนี้ มาเสียบใน interface นี้แทน mozlibthai ก็ได้ (โดยซอร์สจะอยู่ที่ต้นน้ำหรือไม่ก็ได้) แต่อีกเรื่องที่ควรทำก็คือ generalize interface นี้ ให้ใช้กับภาษาอื่นได้ด้วยเสียก่อน (เช่น ลาว เขมร พม่า)
ฝันซะไกล.. ขอให้แพตช์ผ่านรีวิวทีเถิด.. สาธุ! ^_^'