Theppitak's blog

My personal blog.

24 พฤษภาคม 2552

Pango Patch for SARA AM in VTE

ด้วยฝีมือของ Behdad Esfabod ใน GNOME #149631 ทำให้ vte widget และ gnome-terminal สามารถวาด combining character ได้ตั้งแต่รุ่น 2.26 เป็นต้นมา ..พูดเป็นภาษาไทยก็คือ มีการจัดระดับสระบน-ล่างและวรรณยุกต์เรียบร้อย

ติดอยู่ที่ปัญหาเล็ก ๆ คือ แพตช์นี้เป็นการใช้ pango วาดเซลล์แต่ละเซลล์บนหน้าจอ ซึ่ง pango จะมีการจัดการ cluster แยกร่างสระอำเป็นนิคหิตและลากข้าง เพื่อนำนิคหิตไปวางบนพยัญชนะอย่างถูกต้องสวยงาม แต่บนเทอร์มินัลนั้น สระอำจำเป็นต้องอยู่ในเซลล์ของตัวเองแยกจากพยัญชนะ เวลาที่ vte สั่งวาดทีละเซลล์ สระอำจึงถูกวาดโดยไม่มีพยัญชนะนำหน้า นิคหิตที่ถูกแยกร่างโดยไม่มีพยัญชนะนำหน้า จึงมี dotted circle มารองรับ ทำให้สระอำเปรอะ และกินเนื้อที่ล้ำไปสู่เซลล์ถัดไปด้วย

ปัญหานี้ ทีมสุริยันก็เคยพบกับ konsole ซึ่งในตอนนั้นผมแนะให้เช็กฟอนต์ว่าเป็น monospace หรือไม่ ถ้าเป็น ก็ยอม render สระอำแบบไม่แยกร่าง (เหมือนพิมพ์ดีด) ถ้าไม่เป็น จึงจะแยก (เหมือนเรียงพิมพ์บนแท่นพิมพ์) ตอนนี้ ก็เลยดัดแปลงวิธีนั้นมาใช้กับ pango ด้วย

ผลคือแพตช์ pango-1.24.2-thai-sara-am-mono.patch ครับ

ก่อน:

VTE rendering, before patching

หลัง:

VTE rendering, after patching

พร้อมกันนี้ ก็เลย build เป็น deb ไว้ที่ debclub ก้านกล้วย ด้วย เพื่อความสะดวกในการทดสอบ โดยรวมเอาแพตช์แก้เรื่องการเลื่อนเคอร์เซอร์ (pango-1.24.2-thai-grapheme-cluster.patch) ที่เคยทำไว้ตาม blog เก่า (GNOME #576156) ด้วย

เนื่องจากเพิ่งทำเสร็จใหม่ ๆ ยังต้องทดสอบความเรียบร้อยสักพัก แล้วค่อย file bug อีกที

ป้ายกำกับ:

4 ความเห็น:

  • 24 พฤษภาคม 2552 เวลา 20:41 , Blogger Thep แถลง…

    Update: file GNOME #583718 แล้วครับ

     
  • 31 พฤษภาคม 2552 เวลา 22:55 , Blogger Unknown แถลง…

    สวัสดีครับ คุณเทพพิทักษ์ ผมจักรนันท์ครับ
    เนื่องจากผมไม่มี email ของคุณและอย่างไรก็ไม่อาจถือวิสาสะติดต่อโดยตรงเป็นส่วนตัว จึงมา Post comment ไว้ใน blog ของคุณครับ
    1 ปีที่ผ่านมา ผมได้ออกแบบพัฒนา Mobile ด้วย ARM CPU ขณะนี้ Hardware สมบูรณ์เป็นที่เรียบร้อยแล้วตั้งแต่สิ้นปีที่ผ่านมา เริ่มทำ OS โดยเอา Kernel 2.6.20 ผสมกับ Busybox มาทำ เสร็จไปเมื่อมีนาคมที่ผ่านมา ตอนนี้ทำ Firmware และ Develope Kit เพิ่งเสร็จ ด้าน GUI ผมใช้ Xynth ครับ
    Mobile ไปชมได้ที่ http://www.triskan.com
    Xynth ที่ http://en.wikipedia.org/wiki/Xynth
    ทีนี้ Xynth ยังไม่รองรับภาษาไทยเลย ในขณะที่ผมเห็นคุณเทพพิทักษ์มีความเชี่ยวชาญและประสบการณ์ในเรื่อง นี้มาก จึงอยากเชิญชวนให้มาร่วมพัฒนากับ Xynth บ้าง สำหรับผมเรื่องนี้เท่ากับผมต้องนับ 1 ใหม่ สำหรับคุณเทพพิทักษ์ ผมมั่นใจว่าง่ายและเร็วกว่ามาก จะสามารถคัดลอก Code เดิมมาทำได้ตรงจุดอย่างรวดเร็ว เพราะทราบดีอยู่แล้ว ในขณะที่ผมยังต้องไปหาคนที่จะมาช่วยพัฒนาเพื่อการรองรับภาษาลาวใน Xynth ด้วย
    เรื่อง Keyboard และการ Render ไม่มีปัญหาครับ สืบทอดจาก xorg อีกที (มีปัญหาบ้างก็ไม่มาก) แต่เรื่องจัดสระ วรรณยุกต์ทั้งหลาย อันนี้มีปัญหาเต็มที่ครับ
    หากคุณเทพพิทักษ์มีความสนใจ ก็ขอเชิญ
    ผมมีความตั้งใจที่จะนำ TS8 ตัวนี้ เข้าตลาดเพื่อไม่ให้ Windows Mobile ครองโลกแต่เพียงผู้เดียวอยู่อย่างนี้ ด้วย TS8 ตัวนี้ ผู้ใช้จะได้ใช้ Mobile ในราคาที่ต่ำกว่า Windows Mobile ถึง 50% โดยไม่มีปัญหา Virus จุกจิกกวนใจ และได้การควบคุม ACL ที่ดีกว่า
    ที่สำคัญ ที่มาเรียนเชิญในครั้งนี้ หากคุณเทพพิทักษ์สนใจ นอกจากจะทำให้มี Windows Manager ขนาดเล็กอีก 1 ตัวรองรับภาษาไทยได้เป็นอย่างดีขึ้นบนโลกแล้ว เมื่อผมนำ Xynth ใหม่เข้า Upload ใน TS8 ก็จะทำให้ TS8 เป็น Mobile ตัวแรกในโลก ที่รองรับภาษาไทยอย่างสมบูรณ์ครับ
    ปัจจุบัน ไม่มี Windows Mobile ตัวไหน รองรับภาษาไทยได้อย่างสมบูรณ์เลย ซึ่งเป็นปัญหาของผู้ใช้ Mobile แถวนี้เป็นอย่างมาก (ที่จริง ภาษาอื่นๆ อีก เพราะผมมีภาระที่ต้องรองรับใน South East Asia ทั้งหมดครับ)
    อย่างไรก็ หาก Post นี้ สร้างความรบกวน ต้องขออภัยเป็นอย่างสูงไว้ในที่นี้ดวยครับ

    จักรนันท์

     
  • 1 มิถุนายน 2552 เวลา 18:16 , Blogger Thep แถลง…

    ขอบคุณคุณจักรนันท์ที่มาชวนครับ ผมยังไม่เข้าใจระบบดีนัก เท่าที่ฟังดู ก็ดูเหมือนถ้าใช้ GTK+ บน Xynth อีกที ก็น่าจะ render ภาษาไทยและลาวได้เลยหรือเปล่าครับ? (แอบเห็น screenshot ของ GIMP แว้บ ๆ)

     
  • 2 มิถุนายน 2552 เวลา 19:18 , Blogger Unknown แถลง…

    Screenshot ของ Xynth ที่เห็นนั่นบน x86 machine น่ะครับ ดังนั้นถ้าใช้ The GIMP ก็แน่นอน เพราะ GIMP ใช้ GTK+ Engine แต่กรณี Embeded นี้นั้น ผมยัด GTK+ ลงไปไม่ได้น่ะครับ มันใหญ่เกินไป
    ใน TS8 ตอนนี้ (วันนี้เลย) ประกอบด้วย

    Kernel 2.6.26
    busybox 1.13.2
    dosfstools 3.0.1 - สำหรับ Access microSD
    expat 2.0.1
    freetype 2.3.8 - เพื่อ Render ttf
    libpng 2.6.26
    ppp 2.4.4 - สำหรับ GPRS
    sam-ba cdc 2.8 - สำหรับ ATMEL Microcontroller
    RT3070 2.0.1.0 และ wireless tools 2.9 - สำหรับ wifi
    zlib 1.2.3
    xynth และ libspatha

    ในลำดับต่อไปผมกำลังนำเอา libmysqlclient ของ version 5.0 มา patch เพื่อ ARM CPU

    จากที่เห็นรายชื่อ Engine ทั้งหมด คุณเทพพิทักษ์จะเห็นว่า เรื่องจัดสระ มีปัญหาแน่นอน เรื่องตัดคำ อันนี้ไม่สำคัญ เนื่องจากเป็นอุปรณ์เฉพาะ การตัดคำควรปล่อยขึ้นไปสู่ผู้พัฒนาระดับ Application ทำเอง แต่เรื่องจัดสระ ผมเห็นว่า น่าจะอยู่ในระดับ Xynth มากกว่า และแน่นอนว่า คุณเทพพิทักษ์มีความสามารถด้านนี้อย่างที่ผมเทียบไม่ติดแน่นอน จึงได้ชักชวนครับ

    การจัดสระภาษาไทยของ Embeded device ส่วนใหญ่จะไม่ดีถึงขั้นแย่มากๆ ทั้งนั้น หากได้อย่างคุณเทพพิทักษ์สนใจ Xynth ก็จะเป็นสัญญาณที่ดีที่แสดงว่า Embeded device จะแสดงผลภาษาไทยได้ดีในไม่ช้านี้ครับ เพราะ Window Manager อื่นๆ ยังใหญ่เกินไปที่จะใส่ในอุปกรณ์เหล่านี้ บางตัวก็เล็กมากไปจน API เรื่องอื่นๆ ต่ำและแย่มาก (พบได้ในเครื่องเล่น DVD/VCD/MP3 จีนทั่วไป) อย่าว่า Windows Mobile เลย ไม่อาจเทียบชั้นกับ Windows CE ได้ด้วยซ้ำไป

    สำหรับ Xynth มีขนาดกำลังเหมาะ Coding ดี เทียบชั้นกับ Windows Mobile ได้ เพียงแค่จัดสระได้เท่านั้น การเทียบชั้นจะได้เปรียบทันทีครับ ในการพัฒนา Application ของผู้ใช้ ก็จะได้เปรียบตามไปด้วย

    สำหรับผมในขั้นสุดท้าย คือทำ IDE แบบ Visual ให้พัฒนา Application ได้ง่ายๆ บน PC ออกมา อันหลังนี้ คงอีก 2 ปีเสร็จครับ

    น่าเสียดายนะครับ :)

     

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

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

hacker emblem