ดีที่ส่ง file ตัวอย่างมาให้ และทำคำว่า low ไว้ด้วย ..ไม่งั้น ดูรูปให้ตายก็เดาไม่ออก
สรุปคือ..ไม่ได้ผิดที่ mark แต่อย่างใด ผิดที่วงสีแดง --> ทำไม บ้ ใช้ ไม้โท low แล้วที่วงสีเขียว บุ้ ไม่ใช้ไม้โท low ด้วยล่ะ???

solution 1
ไม้โท low ให้ทำเหมือนสระ คือใช้ mark (คู่กับ mark base ของพยัญชนะ) แต่ไม่ต้องใช้ mark on mark (ในวงกลมสีแดง มีแค่ mark ตัวเดียวพอ สีเหลืองยังไม่ต้องสนใจ เดี๋ยวเล่าให้ฟัง)

ดังนั้น แค่ไปเพิ่ม function ที่ระบุว่า บ (พยัชญะ) ตามด้วย ุ (ุสระล่าง) ให้เปลี่ยน ไม้โท (วรรณยุกต์) เป็น ไม้โท low และ ลบ mark on mark ใน ไม้โท low ทิ้งไป ก็หายแล้วครับ
solution 2
จริงๆแล้ว ถ้าแอนไม่ได้จะทำ วรรณยุกต์ชั้น 3 ให้เล็กลง ก็ไม้ต้องเขียนโปรแกรม เป็น ไม้โท เป็นไม้โท low ก็ได้ครับ แค่ กำหนด ให้ไม้โทมีทั้ง mark และ mark on mark (ในวงกลมสีแดง จริงๆอยู่ตำแหน่งเดียวกัน แต่กลัวอ่านไม่ออก แล้วขยับให้มองเห็นว่ามี 2 ระบบ) แค่นี้ ก็เสร็จแล้วเช่นกัน

แถม.. ส่วนสีวงสีเหลือง คือส่วนที่ แอน อยากทำ วรรณยุกต์ ซ้อนกัน .. ให้ใช้ระบบ mark on mark โดยกำหนดให้ตัวเอง เป็นทั้ง mark และ base (mark อยู่ล่าง base อยู่บน มันจะซ้อนขึ้นไปเรื่อยๆ -- แต่ถ้าเป็นอักษรธรรม ไต ขอม มอญ พม่า ก็กลับกัน mark อยู่บน base อยู่ล่าง)
สรุป concept ของ mark และ mark on mark สำหรับอักษรไทยสำหรับภาษาไทย ตามที่ผมเข้าใจนะครับ
1. mark ใช้ จัดการ สระล่าง(ุ ุ ู ฺ ) สระบน( ิ ี ื ึ ั ํ ็–๎) รวมทั้งวรรณยุกต์ชั้น 2 ( ่ ้ ๊ ๋ ์)
1.1 mark base คือตำแหน่งอ้างอิง จะอยู่ที่พยัญชนะ
1.2 mark ตำแหน่งของ สระ วรรณยุกต์ จะอยู่ที่ตัวมันเอง
2. mark on mark (mkmk) ใช้ วรรณยุกต์ชั้น 3 ( ่ ้ ๊ ๋ ์) บนสระบน( ิ ี ื ึ ั ํ)
2.1 mkmk base คือตำแหน่งอ้างอิง จะอยู่ที่ สระบน( ิ ี ื ึ ั ํ)
2.2 mkmk ตำแหน่งของวรรณยุกต์ชั้น 3 จะอยู่ที่ตัวมันเอง
** ดังนั้น เราไม่ใช้ mark on mark บน พยัญชนะ นะครับ
** เราไม่มองว่า ( ่ ้ ๊ ๋ ์) ที่พิมพ์หลัง (ุ ุ ู ฺ ) เป็นวรรณยุกต์ชั้น 3 นะครับ --> ต้องนับตามที่ตาเห็น ไม่ใช้ code ใน computer จ้า
3. กรณี อักษรภาษาไทยสำหรับภาษาบาลี มีตัวพิเศษคือ กิํ (อ่านว่ากิง) ก สระอิ นิคหิต ไม่ใช้ ก สระอึ ..นอกนั้นใช้ปรกติ เช่น สํ (อ่านว่า สัง)
อันนี้ ให้มอง สระอำ(นิคหิต) ให้เป็นทั้ง สระบน และ วรรณยุกต์ชั้น 3
3.1 มี mark แบบ 1.2
3.2 มี mkmk base แบบ 2.1
3.3 มี mkmk แบบ 2.2