ไฟล์สำหรับดาวน์โหลด์ มี 2 แบบ คลิกที่ชื่อฟอนต์เพื่อโหลดได้เลย (ลิงก์จะอัปเดตให้เป็นรุ่นล่าสุด)
- JS-Jindara (fix) [v.1.3] คือฟอนต์ JS-Jindara ที่แก้ไขเรื่องตัวหนา/เอน และวรรณยุกต์เท่านั้น
- Jindara [v.2.3] คือฟอนต์ที่ปรับขนาดให้ตัวใหญ่ตามมาตรฐานฟอนต์สมัยปัจจุบันและแก้ไขบางจุด
* * * * * * * * * *
หลังจากเขียนบล็อกการแก้ไขฟอนต์ JS Jindara (จินตหรา) ตอนที่ 1 และ ตอนที่ 2 ไปแล้ว บล็อกนี้เป็นตอนที่ 3 เป็นการเขียนบันทึกแนวคิดและวิธีการทำงานเพื่อเก็บไว้ทบทวนความจำ
ฟอนต์ JS Jindara (ที่ปล่อยให้ดาวน์โหลดทั่วไป) นั้นมีปัญหาคือไม่มีการตั้งค่ารูปแบบฟอนต์ ทำให้เมื่อติดตั้งไฟล์ฟอนต์ทั้ง 4 รูปแบบลงระบบ (ธรรมดา, เอน, หนา, หนาเอน) เมื่อเราสั่งแสดงตัวอักษรเป็นตัวหนา, เอน, หนาเอน มันจะแสดงผลไม่ถูกต้อง
ซึ่งปัญหาจุดนี้แก้ไขได้ง่ายๆ โดยไปตั้งค่า style map ของฟอนต์ให้ถูกต้อง เท่านี้ก็จะสามารถแสดงรูปแบบอักษรได้อย่างถูกต้องแล้ว
ฟอนต์ที่ผมใช้เป็นหลักในหลายปีให้หลัง จะเป็นฟอนต์ที่มีการปรับใช้มาตรฐานใหม่ที่มีขนาดสอดคล้องกับภาษาต่างประเทศ ซึ่งตัวอักษรจะใหญ่ขึ้นกว่าเดิม ขนาดเดิม 14pt เทียบกับขนาดใหม่คือ 10pt
ดังนั้นผมเลยคิดจะปรับฟอนต์ JS Jindara ให้เป็นไปตามมาตรฐานใหม่ด้วย แต่ก็อยากจะคงฟอนต์ JS Jindara ของเดิมไว้ด้วย เพราะคนส่วนใหญ่ที่จะใช้ฟอนต์นี้ น่าจะชินกับการใช้ขนาดอักษรตามมาตรฐานเดิมมากกว่า คิดไปคิดมาเลยใช้วิธีตั้งชื่อฟอนต์ตามกูเกิล คือตัดเอาชื่อตระกูล JS ออก เหลือแค่ชื่อ Jindara (จินตหรา)
ขนาดฟอนต์กูเกิลนั้น แต่ละฟอนต์ไม่ได้เท่ากันเป๊ะทุกฟอนต์ ผมเลือกฟอนต์ Chakra Petch (จักรเพชร) เป็นขนาดสำหรับอ้างอิง ซึ่งเมื่อออกแบบด้วยขนาด 1000 em ตัวฟอนต์กูเกิลจะมีขนาด 750pt ดังนั้นจากฟอนต์เดิมผมจึงสั่งขยายขนาดขึ้นไป 146.5%
หลังจากปรับแก้ไขเรียบร้อย ฟอนต์ก็สามารถใช้งานได้ตามที่ควรจะเป็น ตอนแรกคิดว่าจะปล่อยให้ดาวน์โหลดเลย แต่หลังจากลองเอาไปทดสอบใช้กับโปรแกรม MS Word บน Windows ปรากฏว่าพบปัญหาวรรณยุกต์ลอย (ซึ่งเมื่อทดสอบใช้กับโปรแกรม LibreOffice Writer บน Windows กลับไม่มีปัญหานี้)
ผมใช้ระบบปฏิบัติการ Linux ตอนที่ใช้งานบนโปรแกรม LibreOffice Writer (เทียบได้กับ MS Word) และโปรแกรมอื่นๆ มันสามารถแสดงผลวรรณยุกต์ได้ถูกต้องสมบูรณ์
การทำฟอนต์ไทยตั้งแต่ยุคแรกๆ (Windows 3.1) เป็นต้นมา ตารางอักขระไทยนั้นจะมีการกำหนดตำแหน่งของอักขระแต่ละตัวไว้ ซึ่งภาษาไทยนั้นจะมีชุดอักขระสำหรับแสดงผลเพิ่มเติม นั่นคือมีสระบน (ไม้ไต่คู้ ไม้หันอากาศ นิคหิต อิ อี อึ อือ) 2 ชุด ชุดหนึ่งสำหรับพยัญชนะทั่วไป กับอีกหนึ่งชุดสำหรับหลบหาง ป ฝ ฟ
สระล่าง (อุ อู พินทุ) ก็มี 2 ชุด เป็นชุดปกติ กับชุดที่เอาไว้ใช้กับ ฎ ฏ (กระฎุมพี) ซึ่งจะอยู่ในตำแหน่งต่ำกว่าปกติ
วรรณยุกต์ (เอก โท ตรี จัตวา ทัณตฆาต ยามักการ) ก็มี 4 ชุด คือ 1. ชุดปกติที่อยู่บนพยัญชนะ (ก่อน บ้าน) 2. ชุดหลบหาง ป ฝ ฟ (ป่อง ฟ้า) 3. ชุดปกติที่ซ้อนด้านบนสระ (กี่ นั้น) 4. ชุดซ้อนสระบนหลบหาง (ปั่น เฟี้ยว)
ซึ่งวรรณยุกต์ชุดที่เก็บเป็นข้อมูล คือชุดที่เป็นชุดที่ 3 ดังนั้นเมื่อไม่มีชุดคำสั่งสำหรับจัดการตำแหน่งของสระ/วรรณยุกต์ จึงเกิดอาการวรรณยุกต์ลอยเท้งเต้งนั่นเอง
Windows และ MS Word เวอร์ชันก่อนๆ จะเลือกเองว่าจะนำสระ/วรรณยุกต์ชุดใดมาแสดงผลให้สวยงาม ซึ่งนี่เป็นความรู้ตั้งแต่ตอนที่ผมเคยทำฟอนต์ในสมัยนั้น หลังจากนั้นก็ไม่ได้ไปเกี่ยวข้องกับการสร้างฟอนต์อีกเลย ความรู้ผมเลยหยุดอยู่แค่ตรงนี้
หลังจากพยายามค้นหาวิธีแก้ปัญหาเรื่องวรรณยุกต์ลอยบน Word / Windows อยู่พักใหญ่ จึงพบว่า Windows / MS Word ยุคหลังๆ ไม่ได้จัดการชุดสระวรรณยุกต์ให้อัตโนมัติอีกแล้ว ต้องไปเขียนคำสั่งควบคุมเพิ่มเข้าไปในฟีเจอร์ OpenType ของฟอนต์เอาเอง
ดังนั้นเพื่อที่จะทำให้ฟอนต์ Jindara ใช้งานกับ MS Word ได้ ก็ต้องมาเขียนชุดคำสั่งควบคุมเอาเอง ตอนแรกก็คิดว่าจะยอมถอดใจปล่อยไปแล้ว แต่สุดท้ายก็เลือกศึกษาเพิ่มเกี่ยวกับการเขียนโค้ดควบคุม
ด้วยความที่การจัดการพวกสระ/วรรณยุกต์ของภาษาไทยนั้น ไม่มีการกำหนดมาตรฐานไว้ตายตัว สามารถทำได้หลายวิธี ตรงนี้สังเกตได้ง่ายๆ คือคัดลอกตัวอักษรไทยจากไฟล์ pdf มาแปะบน Word (หรือโปรแกรมอื่น) บางฟอนต์จะกลายเป็นตัวต่างดาว บางฟอนต์แสดงไทยได้แต่สระ/วรรณยุกต์ไม่ถูกต้อง
หลังจากศึกษาและทดลองแนวคิดหลายๆ อย่าง สุดท้ายได้โค้ดออกมาดังนี้ (thai-feature.fea) โค้ดชุดนี้เป็นคำสั่งที่สามารถนำมาใส่ในฟอนต์เก่า ที่ไม่มีโค้ดควบคุมสระ/วรรณยุกต์ ได้ทันที
เท่านี้ฟอนต์ก็สามารถแสดงสระ/วรรณยุกต์อย่างถูกต้องบน MS Word ได้แล้ว
แนวคิดเริ่มแรกของการแสดงตำแหน่งสระ/วรรณยุกต์ของฟอนต์ไทย จะใช้รูปแบบตามที่อธิบายไว้ข้างต้น แต่ในหลายปีให้หลังมานี้ แนวคิดนี้เปลี่ยนไป เพราะความซับซ้อนของภาษาต่างๆ ดังนั้นฟีเจอร์ OpenType จึงเพิ่มคุณสมบัติขึ้นมาอีก นั่นคือ mark / marktomark (เขียนย่อเป็น mkmk)
ฟอนต์ที่ใช้วิธีจัดการสระ/วรรณยุกต์แบบเดิม หากเราพิมพ์สระวรรณยุกต์ซ้อนกันไปเรื่อยๆ มันจะทับซ้อนตำแหน่งเดิม แต่ในปัจจุบันเราอาจเคยเห็นบางฟอนต์ที่พิมพ์สระ/วรรณยุกต์ติดๆ กัน มันจะซ้อนเยื้องกันไปเรื่อยๆ (จนกลายเป็นมีมในทวิตเตอร์) นั่นก็คือใช้ mark / mkmk มาจัดการตำแหน่งสระ/วรรณยุกต์
วิธีนี้ทำให้เราไม่ต้องสร้างชุดสระ/วรรณยุกต์หลายชุดอีกต่อไป ยกเว้นว่าเราต้องการสระ/วรรณยุกต์ที่อยู่คนละตำแหน่งแล้วมีหน้าตาต่างกัน เช่นวรรณยุกต์ซ้อนสระมีขนาดเล็กกว่าวรรณยุกต์ที่อยู่บนพยัญชนะ นอกจากนั้นก็ยังทำให้จัดตำแหน่งสระ/วรรณยุกต์ของฟอนต์ลายมือมีความอิสระมากขึ้นด้วย
ข้อดีที่สำคัญอีกเรื่องของการใช้ mark / mkmk เมื่อใช้กับ MS Word ก็คือเมื่อจัดหน้าภาษาไทยด้วย ‘กระจายแบบไทย’ ก็คือบรรทัดที่มีการขยายช่องว่างระหว่างตัวอักษร ที่มีการขยายเยอะๆ นั้น หากใช้วิธีเดิม ตัวสระ/วรรณยุกต์จะเยื้องไปด้านข้าง ไม่ได้อยู่บนตัวพยัญชนะตามที่ควรจะเป็น แต่ถ้าใช้ mark / mkmk ปัญหานี้จะหมดไป
นอกจากโปรแกรม MS Word แล้ว พวกโปรแกรมกราฟิก ตรงข้อความที่เราต้องการขยายช่องว่างระหว่างตัวอักษรก็ได้อานิสงส์จาก mark / mkmk เช่นกัน
ผมต้องการคงสภาพฟอนต์ Jindara แบบดั้งเดิมที่มีชุดสระ/วรรณยุกต์แยกกันเอาไว้ ดังนั้นผมจึงเลือกใช้ mark / mkmk ที่ตำแหน่ง glyph width, 0 (set-mark.py) ตอนสร้างฟอนต์ขึ้นมาทดสอบ มันสามารถแสดงสระ/วรรณยุกต์ที่เกาะอยู่บนพยัญชนะได้อย่างถูกต้อง แต่เมื่อเอาโค้ดไปใส่ในฟอนต์ Jindara ที่ใช้จริง มันกลับไม่ทำงาน พยายามไล่หาสาเหตุแล้วยังไม่เจอ ตอนนี้คิดเอาเองว่าคงต้องใช้วิธีสร้างไฟล์ฟอนต์ขึ้นใหม่แล้วคัดลอกตัวอักขระ (glyph) ของเดิมมาใส่
ตอนทำฟอนต์ทดสอบ คิดว่าจะเพิ่มเว้นวรรคเล็กๆ หน้าไม้ยมกไว้ด้วย และถ้าพิมพ์เว้นวรรคก่อนไม้ยมกก็จะเอาวรรคเล็กนี้ออก แต่หลังจากดูความเห็นของหลายๆ คนพบว่ามีคนที่ไม่ชอบวรรคหน้าไม้ยมก เลยคิดว่าเอาไว้แยกทำเป็นฟอนต์อีกชุดแยกออกมาต่างหากละกัน
MS Word ใช้เอนจินสำหรับจัดการอักขระเป็นของตัวเอง ซึ่งทำให้หลายๆ อย่างไม่เป็นไปตามมาตรฐาน (ทั้งๆ ที่ไมโครซอฟท์เองก็เป็นหนึ่งในบริษัทที่ร่วมร่างเอกสารมาตรฐาน) ดังนั้นการเขียนโค้ดเพื่อให้ทำงานซับซ้อนกว่าพื้นฐานจึงไม่ได้ผลอย่างที่ต้องการ แต่กลับสามารถใช้งานบน Linux, Android, web browser ฯลฯ ได้อย่างถูกต้อง นึกถึงอารมณ์แบบเดียวกับ Internet Explorer ในสมัยก่อน
[ Keywords ]
Font, FontForge, ฟอนต์, ฟอนท์, JS Jindara, จินตหรา, สระลอย, วรรณยุกต์ลอย, แก้ปัญหา




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