มาแก้ปัญหาภาษาไทยใน 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) |
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) |