วันศุกร์ที่ 11 กันยายน พ.ศ. 2569

[Font] บันทึกแก้ไขฟอนต์ JS Jindara (ตอนที่สอง)

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

  • JS-Jindara (fix) [v.1.3] คือฟอนต์ JS-Jindara ที่แก้ไขเรื่องตัวหนา/เอน และวรรณยุกต์ลอย (สระลอย) เท่านั้น
  • Jindara [v.2.3] คือฟอนต์ที่ปรับขนาดให้ตัวใหญ่ตามมาตรฐานฟอนต์สมัยปัจจุบันและแก้ไขบางจุด

▶️ ตอนที่ 1 / ตอนที่ 3

* * * * * * * * * *

จากตอนที่ 1 แก้ไขไฟล์ฟอนต์ JS Jindara (จินตหรา) แล้วเอามาลองใช้เองบนโปรแกรมต่างๆ ก็ผ่านฉลุย ใช้งานได้ปกติดี แต่พอเอาไปทดสอบบน Windows ด้วย MS Word แล้วพบปัญหาวรรณยุกต์ลอยซะงั้น

พยายามค้นข้อมูลเพื่อหาวิธีแก้ไขแล้วแต่ไม่สำเร็จ จนสุดท้ายต้องมาเขียนโปรแกรมควบคุมเพิ่มเอง (เป็น Opentype feature ของฟอนต์รุ่นใหม่)

ผมใช้งาน Linux เป็นหลัก เครื่องคอมพิวเตอร์ที่ใช้ ไม่มี Windows เลย เวลาจะทดสอบแต่ละทีก็ต้องไปขอหยิบยืมทดสอบบนเครื่องคอมฯ คนอื่น ^^'a

พอเอามาใช้บน Word แล้วก็เจอปัญหาว่าหลายๆ จุดที่เขียนโปรแกรมจัดการไป (เป็นฟีเจอร์เพิ่มเติมพิเศษ) มันไม่ทำงาน พยายามแก้นู่นแก้นี่ สุดท้ายพยายามคงสภาพความเป็น JS Jindara ให้มากที่สุดเอาไว้ก่อน ทีหลังถ้ามีไฟมากพอก็อาจจะทำเป็นเวอร์ชันที่เอาเฉพาะโครงสร้างตัวอักขระมาใช้

ฟอนต์ทำออกมาเป็น 2 รุ่นคือ

  • JS Jindara เป็นแบบดั้งเดิมที่แก้เรื่องตัวหนาตัวเอน
  • Jindara ขยายขนาดฟอนต์ให้สอดคล้องกับมาตรฐานฟอนต์ไทยในปัจจุบัน + เพิ่ม ฬ หางสั้น ใช้คู่กับสระบน/วรรณยุกต์ + เพิ่มอักขระ ฤๅ ฦๅ + ขยายขนาดตัวเลขขึ้นมาเล็กน้อย

 

ขนาดตัวอักษรของฟอนต์ Jindara จินตหรา (ตัดชื่อตระกูล JS ออกตามขนบกูเกิลฟอนต์) เมื่อนำมาเทียบกับฟอนต์ Cordia New ซึ่งเป็นมาตรฐานเก่า จะได้ประมาณนี้ (ผมใช้ขนาดฟอนต์กูเกิล Chakra Petch เป็นตัวอ้างอิง)

Cordia New : 14 / 16 / 17 / 18 / 20 / 22 / 24 / 25

Jindara : 10 / 11 / 12 / 13 / 14 / 16 / 17 / 18


จากภาพ ซ้าย Cordia New | ขวา Jindara


แล้วก็ทำฟีเจอร์อักขระพิเศษดังนี้

พิมพ์ :00: จะได้ ๏ (0e4f)

พิมพ์ :0-: จะได้ ๛ (0e5b)

พิมพ์ ฯฯ จะได้ ๚ (0e5a)

แต่ถ้ากดรหัส unicode เองได้ จะดีกว่า (รหัส unicode ผมวงเล็บต่อท้ายเอาไว้) เพราะการใช้พิมพ์ตามข้างบน แม้จะแสดงเป็นสัญลักษณ์ก็จริง แต่ข้อมูลที่ถูกจัดเก็บจะยังคงเป็นตัวอักขระที่เราพิมพ์ลงไปอยู่ดี หากเปลี่ยนไปใช้ฟอนต์อื่น มันจะแสดงเป็นอักขระที่พิมพ์ลงไป ไม่ได้แสดงสัญลักษณ์ที่ผมทำไว้

ผมไม่รู้ว่าบน Windows หรือ MS Word ต้องพิมพ์อักขระพวกนี้ยังไง ถ้าเป็น Linux เวลาพิมพ์รหัส unicode ให้กดปุ่ม Ctrl + Shift + u แล้วก็พิมพ์รหัสที่เราต้องการ (มองไม่เห็นบนหน้าจอ) จากนั้นกด enter

เช่น Ctrl + Shift + u ตามด้วย 0e4f แล้วกด enter จะได้ตัวฟองมัน ๏

ส่วนของผมนั้น ผมใช้ผังแป้นพิมพ์ที่ทำเอง มันสามารถพิมพ์สัญลักษณ์พวกนี้ได้โดยตรงอยู่แล้ว

 

ตอนแรกสุด คิดว่าจะทำแค่แก้เรื่องตัวหนา/เอน/หนาเอนให้ถูกต้อง และเขียนโปรแกรมควบคุมตำแหน่งของวรรณยุกต์/สระบน ให้แสดงผลได้อย่างที่ควรจะเป็น คือมีวรรณยุกต์ 4 ตำแหน่ง ล่าง / ล่างหลบหาง / ซ้อนสระบน / ซ้อนสระบนหลบหาง กับสระบนสองตำแหน่งคือปกติกับหลบหาง เท่านี้พอ

แต่พอทำๆ ไปเรื่อยๆ ก็รู้สึกอยากใช้เทคนิค mark / mkmk เพื่อกำหนดตำแหน่งเกาะของสระบนและวรรณยุกต์ เพื่อทำให้ตำแหน่งวรรณยุกต์+สระ ที่อยู่กับ น ณ ฉ อยู่ในตำแหน่งที่ควรจะเป็นคือเส้นตั้งสุดท้าย กับทำให้เวลาขยายตำแหน่งตัวอักษรแล้วสระ/วรรณยุกต์ยังคงเกาะติดกับพยัญชนะ ไม่ได้เยื้องออกห่าง

สถานการณ์ที่เจอกับกรณีนี้คือตั้งค่าย่อหน้าเป็น ‘กระจายแบบไทย’ แล้วมีการบังคับขึ้นบรรทัดใหม่ ทำให้ตัวอักขระในบรรทัดนั้นถูกดึงให้ยืดเต็มบรรทัด

ตอนทำกับฟอนต์ทดสอบ มันก็ได้ตามนี้แหละ แต่พอเอามาใส่ในฟอนต์ JS Jindara / Jindara มันกลับไม่ทำงานซะงั้น ยังหาไม่เจอว่าสาเหตุเกิดจากอะไร อนาคตถ้าแก้ไขได้ จะมาอัปเดตไฟล์ดาวน์โหลดอีกที

จากภาพ บรรทัดบนคือไฟล์ Jindara ของจริง ส่วนบรรทัดล่างคือไฟล์ฟอนต์ที่ทำเพื่อทดสอบก่อนจะเอาโค้ดไปใส่ในฟอนต์ใช้จริง

ซึ่งเมื่อใช้งานบน LibreOffice Writer (แม้จะใช้งานบน Windows ก็เถอะ) กลับไม่เกิดปัญหาสระวรรณยุกต์ไม่เกาะกับพยัญชนะซะงั้น (รวมถึงปัญหาอื่นๆ อีกหลายอย่าง)


[ Keywords ]

Font, FontForge, ฟอนต์, ฟอนท์, JS Jindara, จินตหรา, สระลอย, วรรณยุกต์ลอย, แก้ปัญหา

ไม่มีความคิดเห็น:

แสดงความคิดเห็น