วันพฤหัสบดีที่ 20 มกราคม พ.ศ. 2548

Thai Firefox ตัดคำและจัดระดับวรรณยุกต์สระใน Gentoo

จากกระแสการตัดคำภาษาไทยใน Firefox, ตอนนี้เรามีแพชสามตัวสามแบบที่สามารถทำให้ตัดคำภาษาไทยได้ถูกต้องใน Firefox. แต่ละแบบก็มีคุณสมบัติ, ข้อดีข้อเสียต่างๆกัน. เท่าที่เคยลองแพชตัดคำของลินุกซ์ทะเลดูแล้ว, ปรากฏว่าไม่รู้ผมทำอะไรพลาด, แพชอันใหม่ที่คุณสัมพันธ์ทำใช้ไม่ได้แต่แพชอันเก่าที่ว่าอืดๆใช้ได้ดี.

วันนี้พยายามใหม่อีกครั้งกับแพช ICU ของคุณสัมพันธ์แต่ก็ยังใช้ไม่ได้อยู่ดี. ใช้ไม่ได้นี่หมายถึงคอมไพล์อะไรผ่านหมดแต่มันไม่ตัดคำให้. เลยทำใจว่างๆใหม่ตัดสินใจลองแพชที่พี่ฮุ้ย submit ไว้ใน CVS แล้วกัน.

เตรียมแพช

ก่อนอื่นดาว์นโหลดแพชตัดคำ Firefox ของพี่ฮุ้ย firefox-cttex-wbr-b3.patch.gz.
$ wget -nd ftp://linux.thai.net/pub/ThaiLinux/cvs/software/mozilla+thai/cttex-wbr/firefox-cttex-wbr-b3.patch.gz
$ gunzip firefox-cttex-wbr-b3.patch.gz 
ลองใช้ดูแล้ว, ปรากฏว่าแพชของพี่ฮุ้ยยังไม่สามารถใช้กับ Gentoo ได้ทันทีต้องแก้ไขเล็กน้อย. คือแพชของพี่ฮุ้ยจะสร้างจากไดเรกทอรีย่อยที่อยู่ใต้ไดเรกทอรีหลักอีกที, ทำให้แพชด้วยไฟล์ .ebuild ไม่ได้ (หรือผมไม่รู้วิธี). จึงต้องแก้ช่วงที่เป็นชื่อไฟล์จาก
 diff -rup --new-file src.org/Makefile.in src/Makefile.in
--- src.org/Makefile.in Fri Apr 18 04:19:27 2003
+++ src/Makefile.in     Fri Jan 14 00:21:40 2005
...
ให้เป็น
diff -rup --new-file src.org/Makefile.in src/Makefile.in
--- firefox.org/intl/lwbrk/src/Makefile.in      Fri Apr 18 04:19:27 2003
+++ firefox/intl/lwbrk/src/Makefile.in  Fri Jan 14 00:21:40 2005
...
ผมเลยสร้างแพชสำหรับไฟล์แพชนี้อีกทีหนึ่ง firefox-cttex-wbr-b3_prefix.patch. ใช้หลังจากที่ดาว์นโหลดแพชของพี่ฮุ้ยอีกที
$ ls 
firefox-cttex-wbr-b3.patch     firefox-cttex-wbr-b3_prefix.patch
$ patch -p0 < firefox-cttex-wbr-b3_prefix.patch
patching file firefox-cttex-wbr-b3.patch
$ head firefox-cttex-wbr-b3.patch
diff -rup --new-file src.org/Makefile.in src/Makefile.in
--- firefox.org/intl/lwbrk/src/Makefile.in      Fri Apr 18 04:19:27 2003
+++ firefox/intl/lwbrk/src/Makefile.in  Fri Jan 14 00:21:40 2005
@@ -35,7 +35,7 @@ REQUIRES      = xpcom                   unicharutil                   $(NULL)

-CSRCS          = rulebrk.c
+CSRCS          = rulebrk.c cttex-wrap.c findword.c map.c cache.c
เสร็จแล้วเอาไฟล์แพชที่แก้ไขแล้วไปไว้ที่ไดเรกทอรี /usr/portage/net-www/mozilla-firefox/files.
# cp firefox-cttex-wbr-b3.patch /usr/portage/net-www/mozilla-firefox/files
เสร็จการเตรียมแพชสำหรับตัดคำครับ.

เตรียมแพชสำหรับสภาพแวดล้อมภาษาไทย

ไหนๆทำตัดคำแล้วก็เลยอยากจะทำสภาพแวดล้อมของ firefox ให้เป็นภาษาไทยซะเลย. อันนี้ไม่ใช่อะไรใหม่, ก็เอาไฟล์แพชมาจากไฟล์ firefox-1.0-5.tlc.src.rpm ซึ่งเป็นต้นฉบับของ RPM มากระจายแล้วเลือกเอาแพชมาแก้อีกทีหนึ่ง.
# emerge rpm
# wget -nd ftp://ftp.opentle.org/pub/linux-tle/7.0/i386/TLE/SRPMS.main/firefox-1.0-5.tlc.src.rpm
# rpm -ihv firefox-1.0-5.tlc.src.rpm
ไฟล์รหัสต้นฉบับของ RPM จะไปอยู่ที่ไดเรกทอรี /usr/src/redhat/SOURCES. ไฟล์ที่ต้องการคือ firefox-1.0rc-config-tle.patch แต่ไม่เอามาใช้ทั้งหมด, ต้องแก้ไขเล็กน้อย. แพชอันนี้จะเปลี่ยนค่าปริยายต่างๆเช่นฟอนต์ปริยายจะใช้ฟอนต์ Loma, เอ็นโค้ดดิงก์โดยปริยายจะเป็น TIS-620 ฯลฯ. เพื่อความสะดวกผมเปลี่ยนชื่อและเนื้อหาให้เรียบร้อยเป็น firefox-1.0-thai-env.patch. ดาว์นโหลดไฟล์นี้ไปไว้ที่ /usr/portage/www-net/mozilla-firefox/files.

สิ่งที่ทำคือพยายามจะเปลี่ยนค่าปริยายให้น้อยที่สุดคือเปลี่ยนเฉพาะส่วนที่เกี่ยวกับฟอนต์ปริยาย, เอ็นโค้ดดิงก์. ส่วนที่แตกต่างได้แก่

  • ลบไซด์ค้นหาโดยปริยายจาก nipa ออก, ให้ใช้ google ตามที่ mozilla ตั้งค่ามา
  • คงค่า URL ต่างๆไว้ตามเดิมเช่นหน้าแรกเป็น mozilla.org / firefox
  • แก้ไฟล์ fontEncoding.properties
แก้ไฟล์ fontEncoding.properties เพราะเวลาคอมไพล์จะใช้ --enable-ctl (Enable Thai Complex Script support) เนื้อหาที่แก้ไขดูได้จากไฟล์ /usr/lib/MozillaFirefox/res/fonts/fontEncoding.properties หลังติดตั้งเสร็จเรียบร้อยแล้ว. จะเป็นแบบนี้
...
# Thai TTFs
# glyph arrangement : TIS620-2 Windows encoding,
# code points used : Unicode Thai block + about 10 PUA code points in U+F700,
# coverage : US-ASCII, Thai (U+0E00-U+0E07F), punctuation marks
#            U+2018, U+2019, U+201c, U+201d, U+2022, U+2013, U+2014 )
#
# These familes of fonts and other fonts with the same PUA assignment
# are included as a part of Thai language support in most Linux distributions.
encoding.norasi.ttf = x-thaittf-0.wide
encoding.garuda.ttf = x-thaittf-0.wide
encoding.dbthaitext.ttf = x-thaittf-0.wide
encoding.kinnari.ttf = x-thaittf-0.wide
encoding.loma.ttf = x-thaittf-0.wide
encoding.tlwgmono.ttf = x-thaittf-0.wide
encoding.tlwgtypewriter.ttf = x-thaittf-0.wide
...

แก้ไฟล์ .ebuild

ไฟล์ .ebuild เป็นหัวใจสำหรับการคอมไพล์. ในระบบที่ผมใช้ Firefox มีชื่อรุ่นเป็น 1.0-r3 ดังนั้นไฟล์ที่ต้องแก้คือ mozilla-firefox-1.0-r3.ebuild ที่อยู่ในไดเรกทอรี /usr/portage/net-www/mozilla-firefox/.

ใช้บรรณาธิกรณ์ที่ถนัดเปิดไฟล์แล้วแก้ไข. ถัดจากบรรทัด

    # patch to fix separate character on euro keyboards, bug 68995
    epatch ${FILESDIR}/mozilla-firefox-1.0-kp_separator.patch
เพิ่มต่อท้ายดังต่อไปนี้
    # patch to fix separate character on euro keyboards, bug 68995
    epatch ${FILESDIR}/mozilla-firefox-1.0-kp_separator.patch
    # patches for Thai work break and setting environment
    epatch ${FILESDIR}/firefox-1.0-thai-env.patch
    epatch ${FILESDIR}/firefox-cttex-wbr-b3.patch
อีกที่หนึ่งคือบรรทัด
    mozconfig_annotate '' --enable-oji --enable-mathml
ให้เปลี่ยนเป็น
    mozconfig_annotate '' --enable-oji --enable-mathml --enable-ctl
สิ่งที่ต้องแก้ในไฟล์ .ebuild มีเพียงเท่านี้ครับ.

ติดตั้ง Firefox ภาษาไทย

ถึงขั้นนี้แล้วทุกก็พร้อมสำหรับการติดตั้ง. ให้สั่งคำสั่งต่อไปนี้
# emerge -pv mozilla-firefox

These are the packages that I would merge, in order:

Calculating dependencies ...done!
[ebuild   R   ] net-www/mozilla-firefox-1.0-r3  -debug +gnome +java +ldap -mozdevelop -moznoxft -mozsvg -mozxmlterm -xinerama -xprint 0 kB

Total size of downloads: 0 kB

ดูให้แน่ใจว่าเป็นเวอร์ชัน 1.0-r3 เสร็จแล้วเอาจริง
# USE="xprint" mozilla-firefox
สั่งให้ใช้ xprint ด้วย. ถ้าต้องการพิมพ์ออกทางเครื่องพิมพ์เป็นภาษาไทยต้องใช้ xprint.

เครื่องที่ผมใช้ Pentium 4 2.4GHz ใช้เวลาคอมไพล์ประมาณ 50 นาทีครับ. เรียบร้อยแล้วจะได้ผลดังนี้.

หลังจากที่ขยายหน้าต่างให้กว้างอีกหน่อยจะเห็นว่ามีการตัดคำได้จริง (สังเกตตรงคำว่า "เริ่มร้อนแรง") และที่การจัดระดับวรรณยุกต์และสระ (สระไม่ลอย).

ในหน้าจอ textedit ก็ตัดคำได้ดีไม่มีปัญหาครับ.

ทั้งนี้และทั้งนั้นต้องขอขอบคุณทุกท่านที่เกี่ยวข้องกับการทำแพชต่างๆด้วยครับ. ก็รอคอยให้มันเข้าไปอยู่ใน mainstream นี่แหละครับ. :)

3 ความคิดเห็น:

Hui/ฮุ้ย กล่าวว่า...

แพช firefox-1.0-thai-env.patch นี่แก้อะไรบ้าง ?

เห็นมีพวก encoding ของฟอนต์ต่างๆ น่าลองแฮะ
เผื่อจะทำให้ Firefox/Mac ใช้ฟอนต์ไทยได้มากขึ้น ?

t·o·o กล่าวว่า...

ผมสังเกตุว่า firefox ของผมตัดคำได้ปกติหน่ะไม่จำเป็นต้อง patch ถ้า web นั้นใช้ utf-8

rome กล่าวว่า...

สวยดีครับ