ขอบคุณที่แบ่งปันนะคร้าบ ^^
อันนี้เป็นเคสที่เคยสงสัยเหมือนกัน ว่าทำไมมีปัญหาเฉพาะข้อความพูดคุย
บาง font มีปัญหาสระ + วรรณยุกต์ซ้อนแบบที่ท่านว่ามาเลยครับ ซึ่งจากเหตุผลที่ท่านว่ามาก็ถึงกับบางอ้อทันที
แต่นอกจากบางฟอนต์อาจเกิดปัญหาสระซ้อนแล้ว ยังมีบางฟอนต์มีปัญหาอีกประเภทหนึ่งครับ
นั่นคือแสดงผลได้ สระไม่ซ้อน แต่กลับกลายเป็นว่าวรรณยุกต์ลอยแทน ตามนี้ครับ
เช่น คำว่า ถ้า รู้ ข้างล่าง จะเกิดปัญหาวรรณยุกต์ลอยสูง (เพื่อรองรับสระกลาง)
แต่คำว่า พี่ นั่ง จะไม่มีปัญหาเพราะมีสระคั่นอยู่แล้ว
ซึ่งเคสนี้ตัวสคริปต์ของท่านยังแก้ปัญหาไม่ได้ครับ แต่คิดว่าน่าจะแก้ไม่ยาก สลับเงื่อนไขการตรวจสอบให้กลับตาลปัตรกัน
เช่น text = text.replace(/([ก-ฮ])/, "$1่");
ก็คือถ้าตัวอักษรใดๆ ตามด้วยวรรณยุกต์สูง ให้เปลี่ยนเป็นวรรณยุกต์ต้่ำ (จริงๆ มีเคสสระด้วย เช่น รู้ แต่ยกตัวอย่างเป็นแนวคิดเฉยๆ ครับ)
สาเหตุผมคิดว่าตัวไฟล์แต่ละฟ้อนต์อาจมีการกำหนดรูปแบบหรือ metadata ต่างกัน
เช่น ฟอนต์แบบนึงอาจกำหนดว่า default ให้เป็นวรรณยุกต์ต่ำ พอมีสระค่อยเปลี่ยนเป็นวรรณยุกต์สูง ซึ่งจะไปเข้าเคสปัญหาของท่าน
แต่ฟอนต์อีกแบบอาจกำหนดว่า default ให้เป็นวรรณยุกต์สูงไปเลย พอไม่มีสระค่อยเปลี่ยนเป็นวรรณยุกต์ต่ำ น่าจะเข้าเคสที่ผมยกตัวอย่าง
อย่างไรก็ตาม ผมก็เดาเอา ไม่มีความรู้เรื่องฟอนต์หรอก ฮา
---
มันจะมีประเด็นอีกอันคือ ฟ้อนแต่ละชนิด อาจมีตัว charcode อยู่คนละตำแหน่งกันด้วยครับ ทำให้แจกโค้ดสากลค่อนข้างยาก เช่น ผมลองใช้โค้ดชุดเดียวแล้วลองเปลี่ยนฟ้อนอื่น อาจมีโอกาสได้ผลลัพธ์ที่เพี้ยนได้ เพราะฟอนต์บางทีรหัสของวรรณยุกต์ไม่เหมือนกัน อาจต้องนำโค้ดสากลไปปรับใช้เพิ่มเติมในบางเคส *0*
---
อ้อ นอกจากเคสสระซ้อนแล้ว มันมีอีกเคสนึงนะครับคือ
เคสสระ / วรรณยุกต์ไม่เลื่อนซ้ายกรณีเป็นพยัญชนะตัวยาว เช่น
คำว่า ปุ่ม ในข้อความเกมกับข้อความพูดคุยจะแสดงผลต่างกันอยู่ครับ
แบบข้อความในเกม
แบบข้อความพูดคุย
สังเกตคำว่าปุ่ม แบบข้อความพูดคุย ตัวอักษรยาวจะไม่มีการเลื่อนวรรณยุกต์หรือสระไปทางซ้ายให้ครับ (อ่านเป็นบุ่ม เบิด บิด เฉยเบย *0*)
ซึ่งตอนนี้กำลังเขียนโค้ดแก้อยู่เหมือนกัน T_T คิดว่าลักษณะการแก้คือ replace string เช่นเดิมครับ เป็นอักขระแบบเลื่อนซ้ายแทน
แต่ถ้าเป็นเคสหนักสุด แบบทั้งวรรณยุกต์ลอยทั้งเลื่อนซ้าย เช่น ปิ่น โค้ดคงสับสนชีวิตน่าดู 555+
---
และก็คิดได้อีกเคส คือ ฎู กับ ฎู จะใช้อักขระสระล่าง ที่ต่ำกว่าเดิมครับ แต่คิดว่าแก้ไม่แก้ก็ได้ คงไม่มีใครใช้กัน
.