irpg Community
มาแก้ปัญหาภาษาไทยใน RPG Maker MV กันเถอะ (วรรณยุกต์ซ้อน, ปัญหาสระอำ, ญ/ฐ+สระอู) - Printable Version

+- irpg Community (https://irpg.in.th)
+-- Forum: irpg Fabella RPG Maker Academia (https://irpg.in.th/forum-4.html)
+--- Forum: RGSS and JS Showcase (https://irpg.in.th/forum-26.html)
+--- Thread: มาแก้ปัญหาภาษาไทยใน RPG Maker MV กันเถอะ (วรรณยุกต์ซ้อน, ปัญหาสระอำ, ญ/ฐ+สระอู) (/thread-2978.html)

Pages: 1 2 3


RE: มาแก้ปัญหาภาษาไทยใน RPG Maker MV กันเถอะ (วรรณยุกต์ซ้อน, ปัญหาสระอำ, ญ/ฐ+สระอู) - XthemeCore - 05-19-2020

ข้อมูลเสริม
วิธีการแทนที่ตัวอักษรเป็นการพึ่งพาระบบ fallback ของวรรณยุกต์สูงต่ำและอักษรพิเศษ ซึ่งจะมีใน Truetype และ Opentype (ไม่ใช่ทุกตัว) โดยคาดหวังว่ามันจะอยู่ในตำแหน่ง Unicode ที่นิยมกัน
แต่ในความเป็นจริงไม่ใช่ว่าฟอนต์ไทยทุกฟอนต์จะมีอักษร fallback และบางฟอนต์ก็เอาอักษร fallback ไปไว้ที่ตำแหน่งอื่น (อย่างฟอนต์ สารบัญ รุ่นแรกๆ มีการเอาอักษรไปใส่ทับที่อักษรละตินเฉยเลย)

ดังนั้นวิธีที่ดีสุดคืออ่านค่าจากตาราง gsub และ gpos ของฟอนต์ เพื่อดูว่าตำแหน่งของวรรณยุกต์ควรอยู่ที่ไหน โดยดูจากค่า mark to base (mark) และ mark to mark (mkmk) และค่าอื่นๆเช่น kerning
ข้อมูลเพิ่มเติม => https://docs.microsoft.com/en-us/typography/script-development/thai

สาเหตุที่อักษรไทยในจุดอื่นๆ สามารถแสดงผลได้ถูกต้องเป็นเพราะ RMMV ใช้ webkit ซึ่งเขาได้ทำระบบมารองรับการอ่านค่าจากฟอนต์มาอยู่แล้ว แต่ Window Message เป็นกรณีพิเศษ เพราะต้องพิมพ์ตัวอักษรแบบ letter by letter เลยทำระบบของตัวเองออกมา

สรุปถ้าจะให้แสดงผลได้ถูกต้องจริงๆจึงควรเขียน script ที่อ่านข้อมูลจากฟอนต์ออกมาจริงๆ เช่น Harfbuzz (ปกติในเกมเอนจิ้นจะใช้ตัวนี้) มีแบบ javascript ด้วยนะ https://github.com/prezi/harfbuzz-js
ในการประมวลผลเพื่อให้ได้ Unicode ที่ถูกต้องจริงๆในฟอนต์นั้น รวมถึงการวางตำแหน่งวรรณยุกต์ว่ามีระดับความสูงเท่าไหร่

โดยปกติฟอนต์ทั่วๆไป (Truetype หรือ Opentype) จะมี fallback รองรับอยู่แล้ว ในตำแหน่งมาตรฐาน เลยลักไก่ด้วยการแทนที่ตัวอักษรแบบนั้นได้ แต่ไม่ใช่ทุกฟอนต์จะทำตามมาตรฐานนี้ เพราะมาตรฐานจริงๆก็คือให้อ่านค่าตามในฟอนต์ (โดยเฉพาะพวก Opentype)