หน้า: [1]
ทำยังไงให้ mark2 ไม่เกาะต่อจาก mark1
0 สมาชิก และ 1 ขาจร กำลังดูหัวข้อนี้
ทำยังไงให้ mark2 ไม่เกาะต่อจาก mark1
03 ม.ค. 2026, 01:02 น.
สวัสดีครับ

ขอถามเป็นแนวคอนเซปต์นะครับ
ว่าเราพอจะเขียนโค้ดหรือกำหนดค่าการ mark ระดับที่ 2 ให้มันไม่ไปทับ mark ตัวอื่นไหมครับ

อะนี่คือปัญหาที่เจอและต้องการแก้ไขครับ





ผมจัด mark ไว้แบบนี้ครับ

= top (ใช้กับสระบน), mai2 (ใช้กับไม้โท …ที่จริงมี mai1-mai8 เลย แต่ขอไม่พูดถึงเดี๋ยวเยอะไป),​ bottom (ใช้กับสระล่าง)
สระอี = _top (สมอปักสระบน) , mai2 (ใช้กับไม้โท)
สระอู = _bottom (สมอปักสระล่าง)
ไม้โท = _mai2


ถ้าพิมพ์คำว่า บี้ หรือ บ้า
มันแสดงผลได้ตามปกติถูกต้องตามตำแหน่งที่ปักสมอไว้

แต่ถ้าพิมพ์คำว่า บู้ ทีนี้ ไม้โทมันจมลงมา เหมือนเราไม้โทเอาไปวางปักสมอบนสระอูครับ



ถ้าเปิด mkmk preview จะเจอปัญหานี้
แต่ถ้าปิด มันจะแสดงผลได้สวยงามอย่างที่อยากให้เป็น (ซะงั้น) (แต่พวก mark สระวรรณยุกต์คู่อื่นๆ พังนะ)





ผมทดลองทำกับฟอนต์กระต่าย ได้พี่เจปีศาจฟอนต์มาช่วยดูให้
ทางแก้ตอนนั้นคือให้ใส่ _top ที่ไม้โท เพื่อเอาไว้เสียบสมอเหนือ
แบบนั้นก็ถือว่าพอได้อยู่ครับ

แต่ทีนี้ใจจริง ไอ้เจ้า anchor ชื่อ top เนี่ย ผมตั้งใจให้มันเป็นแก๊งสระบน (มีหลายตัว เช่น อิ อี อั อ็ อํ) ครับ
ในขณะที่ mai ต่างๆ ผมเอาไว้ให้สำหรับวรรณยุกต์ (ซึ่งมีทั้งแบบตำแหน่งสูง และตำแหน่ง .low ที่แยกเป็นอีก glyph นึง)


และคำถามคือ

ทำไงให้ พยัญชนะ + mark1 + mark2
แล้ว mark2 มันไปเกาะกับพยัญชนะ แทนที่จะเกาะ mark1 ครับ

หรือมี solution อะไรที่เป็นวิธีแก้ไขกรณีนี้ได้บ้างครับ

อันนี้ไฟล์ ttf / otf และ fontlab source ครับ
https://drive.google.com/open?id=1DTqcXv26nX-KvUBUiWWdKJNyT96edbgH&usp=drive_fs

 ไหว้ ไหว้ ไหว้
แก้ไขครั้งสุดท้าย: 03 ม.ค. 2026, 01:12 น. โดย iannnnn
ตอบ: ทำยังไงให้ mark2 ไม่เกาะต่อจาก mark1
03 ม.ค. 2026, 09:13 น.
ดีที่ส่ง 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


แก้ไขครั้งสุดท้าย: 03 ม.ค. 2026, 10:09 น. โดย uvSOV
ตอบ: ทำยังไงให้ mark2 ไม่เกาะต่อจาก mark1
03 ม.ค. 2026, 16:38 น.
ขอบคุณครับ  กรี๊ดดดดด กรี๊ดดดดด กรี๊ดดดดด กรี๊ดดดดด

เข้าใจแล้วววววว



คอนเซปต์คือพวกวรรณยุกต์(บน)ล่างที่ซ้อนเนี่ย ผมก็ตัดทิ้งไปเลย ไม่ต้องทำรูเสียบรอไว้
เพราะไม่งั้นมันจะดึงใครๆ ที่อยากมาเสียบให้พ่วงลงมาข้างล่างครับ


พอมาดูการจัดกลุ่มสระวรรณยุกต์ ก็จะเป็น
- top = สระวรรณยุกต์ชั้นปกติ // และ mai678 = (นิคหิต ไม้หันอากาศ ไม้ไต่คู้)
- mai12345 = วรรณยุกต์ (ไม้เอกโทตรีจัตวาทัณฑฆาต)
- bottom = สระล่าง


ดังนั้นตอนนี้ ชื่อ anchor marks ของผมก็จะมี
- พยัญชนะ = bottom, top, mai12345678
- สระบน (เลเวลธรรมดา) = mai12345678, _top
- วรรณยุกต์ = _mai12345678
- สระล่างผมก็เลยเหลือแค่ _bottom


ตอนนี้ลองละ ใช้ได้ครับ ขอบคุณมากๆ เลย  กรี๊ดดดดด กรี๊ดดดดด กรี๊ดดดดด กรี๊ดดดดด

ที่จริงพวกวรรณยุกต์ .low นี่เป็น lagacy code ที่ผมไม่ได้ไปแตะมัน กลัวพังครับ ฮือๆ~
พอเห็นคำแนะนำดังนี้ก็เลยลองว่า งั้นเอาออกเลยก็ได้นี่หว่า… ถ้าจะใช้ตัวไหนค่อยเขียนเอา

ดังนั้นพวกชุดนี้ก็จะลบออกครับ

โค้ด:
feature ccmp {
# GSUB feature: Glyph Composition / Decomposition
# Lookups: 1

  sub bobaimai-thai [maiek-thai maitho-thai maitri-thai maichattawa-thai thanthakhat-thai]' by [maiek-thai.low maitho-thai.low maitri-thai.low maichattawa-thai.low thanthakhat-thai.low];

} ccmp;


แก้ไขครั้งสุดท้าย: 03 ม.ค. 2026, 16:44 น. โดย iannnnn
ตอบ: ทำยังไงให้ mark2 ไม่เกาะต่อจาก mark1
03 ม.ค. 2026, 16:47 น.
เอ๊ะมาคิดดูอีกที เดี๋ยวลองเก็บวรรณยุกต์ทั้ง low ทั้งไม่ low ไว้ดีกว่า ฮ่าๆ ฮือๆ เผื่อได้ใช้ในฟอนต์หน้าๆ ครับ
งั้นก็จะเป็น solution แรกที่พี่บอกครับ


ส่วนการเขียนโค้ด ผมโยนไปถาม Gemini ให้น้องบ้วนออกมาให้ครับ กรี๊ดดดดด กรี๊ดดดดด กรี๊ดดดดด
และนี่คือเหล่า ccmp ครับ

แอบอ้าง
  lookup ccmp_4 {
  # GSUB lookup 8, type 16 (Chaining Context)
    sub @ccmp2 saraam-thai' lookup ccmp_5;
    sub @ccmp2 [maiek-thai maitho-thai maitri-thai maichattawa-thai thanthakhat-thai]' lookup ccmp_7 saraam-thai' lookup ccmp_6;
   
    # กรณี: พยัญชนะ + วรรณยุกต์ (เปลี่ยนเป็นตัวต่ำทันที)
    sub @ccmp2 [maiek-thai maitho-thai maitri-thai maichattawa-thai thanthakhat-thai]' by [maiek-thai.low maitho-thai.low maitri-thai.low maichattawa-thai.low thanthakhat-thai.low];
   
    # กรณี: พยัญชนะ + สระล่าง/พินทุ + วรรณยุกต์ (เปลี่ยนเป็นตัวต่ำ)
    sub @ccmp2 [sarau-thai sarauu-thai phinthu-thai] [maiek-thai maitho-thai maitri-thai maichattawa-thai thanthakhat-thai]' by [maiek-thai.low maitho-thai.low maitri-thai.low maichattawa-thai.low thanthakhat-thai.low];
  } ccmp_4;
แก้ไขครั้งสุดท้าย: 03 ม.ค. 2026, 17:20 น. โดย iannnnn
ตอบ: ทำยังไงให้ mark2 ไม่เกาะต่อจาก mark1
03 ม.ค. 2026, 17:42 น.
สมบูรณ์แบบแล้วครับ  หื่น หื่น หื่น หื่น



- ใส่ low แบบนี้ก็สนุกดี กร๊าก
- ให้ Gemini ตรวจความเรียบร้อยและเก็บตกนี่เวิร์กมากครับ

ขอบคุณครับบบบบบบ
ตอบ: ทำยังไงให้ mark2 ไม่เกาะต่อจาก mark1
03 ม.ค. 2026, 19:16 น.
 เจ๋ง เจ๋งเลย  (แจ๋ว แจ๋ว) ยินดีด้วยที่บรรลุ ระบบ mark และ mark on makr แล้ว

วันหลัง สอนเรื่องการขอคำแนะนำจาก AI ในการทำฟอนต์ ให้ด้วยสิครับ น่าสนใจดี (ผมอ่านแล้ว ก็ยังนึกไม่ออกว่าคุยกันยังไง มันช่วยยังไง)
ตอบ: ทำยังไงให้ mark2 ไม่เกาะต่อจาก mark1
03 ม.ค. 2026, 22:39 น.
ได้เลยครับ

เวลาผมอ่านโค้ดแล้วตาลายไปหมดเลย ก็จะโยนไปถาม Gemini ครับ
บอกไปแบบเหมือนเราคุยกับเพื่อนนี่แหละ ว่า "ช่วยวิจารณ์โค้ดให้หน่อยดิ"
แล้วก็โยนโค้ดลงไปให้มันเป็นหลายร้อยบรรทัดเลยครับ

มันดูออกประมาณ 95% ครับ โดยเฉพาะถ้าเราตั้งชื่อหรือฟีเจอร์ให้มันอยู่ในมาตรฐาน
(แต่ถ้าฟอนต์ SOV ouj เอไอน่าจะระเบิด 5555555)
มันรู้หมดเลยว่าเราใช้ตัวนี้เพื่อทำ ญ หญิงไม่มีเชิง หรืออะไรแบบนี้ ละเอียดมากครับ
คือเอาจริงมันรู้จักการโค้ดฟอนต์ รวมถึงภาษาไทย ก็น่าทึ่งว่ามันมีข้อมูลของภาษาเราด้วย

และวิจารณ์การเขียนได้ว่าตรงไหนซ้ำซ้อน ตรงไหนควรตัด
ซึ่งเราเป็น user ก็ต้องพิจารณาแล้วตัดสินใจเอาเองจากคำแนะนำนั้นครับ

อ้อ ส่วนอันนี้ที่อยู่ในเม้นบน

โค้ด:
   # กรณี: พยัญชนะ + สระล่าง/พินทุ + วรรณยุกต์ (เปลี่ยนเป็นตัวต่ำ)
    sub @ccmp2 [sarau-thai sarauu-thai phinthu-thai] [maiek-thai maitho-thai maitri-thai maichattawa-thai thanthakhat-thai]' by [maiek-thai.low maitho-thai.low maitri-thai.low maichattawa-thai.low thanthakhat-thai.low];
  } ccmp_4;

หลังจากให้โค้ดเดิมไปศึกษา
ผมบอกมันไปเลยว่า

แอบอ้าง
จากโค้ดตรงนี้ :
บรรทัด sub @ccmp2 [maiek...]' by [...low]; สั่งให้เปลี่ยนวรรณยุกต์เป็นตัวต่ำ (.low) ทันทีที่วางหลังพยัญชนะ

ผมอยากให้เพิ่มความสามารถโดยให้พยัญชนะ ตามด้วย สระล่าง (สระอุ สระอู และพินทุ) และตามด้วยวรรณยุกต์ต่ำ (ที่มี .low ต่อท้าย) ต้องเพิ่มโค้ดอะไร

น้องก็ทำมาให้ ไม่ดื้อ ไม่ซน คนไม่เก่งโค้ดอย่างผมก็ตาไม่ลายครับ  หื่น
ตอบ: ทำยังไงให้ mark2 ไม่เกาะต่อจาก mark1
04 ม.ค. 2026, 08:28 น.
 โห ว๊าว.. เห็นเป็น clip เลย (น้อน เไ นี่เก่งจริงๆ เก่งจริงๆ เก่งจริงๆ)

หน้า: [1]
Powered by SMF 1.1.21 | SMF © 2006-2007, Simple Machines | Thai language by ThaiSMF