irpg Community
สคริปต์แก้สระลอย + แก้ตัวอักษรแหว่ง - 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: สคริปต์แก้สระลอย + แก้ตัวอักษรแหว่ง (/thread-1066.html)



สคริปต์แก้สระลอย + แก้ตัวอักษรแหว่ง - admannon - 03-10-2013

Message Thai Vovel and Outline Fix

สคริปต์เขียนโดย : Admannon (เขียนเองนะครับ)


รายละเอียด :
เป็นสคริปต์แก้สระลอยในภาษาไทย และแก้ตัวอักษรแหว่งได้ด้วย (ถ้าไม่แก้ จะไม่เห็นไม้เอกเลยล่ะ)

สกรีนช๊อต :
ก่อนใช้
[Image: 119untitled.jpg]

หลังใช้
[Image: 18untitled2.jpg]

ลองแบบผสมดูบ้าง
[Image: 120untitled.jpg]

เห็นความแตกต่างหรือยัง /cereal1

วิธีการใช้งาน :
ในสคริปต์นี้ใส่ล่าง Materials ก่อน Main

Code:
#==============================================================================
# ** Message Thai Vovel and Outline Fix
#------------------------------------------------------------------------------
#  By : Admannon
#==============================================================================

#==============================================================================
# ** Window Base
#==============================================================================
class Window_Base < Window
  @@thai_vovel = "ัิีึื่้๊๋็์ุูํฺ"
  #--------------------------------------------------------------------------
  # * Preconvert Control Characters
  #--------------------------------------------------------------------------
  alias thai_fix_convert_escape_characters convert_escape_characters unless $@
  def convert_escape_characters(text)
    result = thai_fix_convert_escape_characters(text).clone
    result.gsub!(/ำ/) { "ํา" }
    result
  end
  #--------------------------------------------------------------------------
  # * Normal Character Processing
  #--------------------------------------------------------------------------
  def process_normal_character(c, pos)
    text_width = text_size(c).width
    draw_text(pos[:x], pos[:y], text_width * 2, pos[:height], c)
    pos[:x] += text_width unless @@thai_vovel.include?(c)
  end
end

#==============================================================================
# ** Bitmap
#==============================================================================
class Bitmap
  alias outline_fix_draw_text draw_text unless $@
  def draw_text(*args)
    s = text_size("  ").width
    a = args.size - (args[args.size - 1].is_a?(String) ? 1 : 2)
    args[a] = "  " + args[a].to_s
    if args[0].is_a?(Rect)
      args[0].x -= s
      args[0].width += s
    else
      args[0] -= s
      args[2] += s
    end
    outline_fix_draw_text(*args)
  end
end


ข้อตกลงการนำไปใช้งาน :
สคริปต์นี้ยังมีบัคอยู่บ้าง แนะนำกันได้นะครับ
และที่สำคัญ
/puke/puke/puke/puke/puke/puke/puke/puke/puke/puke/puke

ใครเครดิตถึงผมด้วยนะครับ ผมขอล่ะ

/puke/puke/puke/puke/puke/puke/puke/puke/puke/puke/puke





RE: สคริปต์แก้สระลอย + แก้ตัวอักษรแหว่ง - hengmana - 03-10-2013

;w; ลองพิมพ์ประโยดผสมไทยคำอังกฤษคำหรือยังนะ


RE: สคริปต์แก้สระลอย + แก้ตัวอักษรแหว่ง - admannon - 03-11-2013

#hengmana
ลองแล้วนะครับ ขอบคุณที่แนะนำครับผม


RE: สคริปต์แก้สระลอย + แก้ตัวอักษรแหว่ง - Mysticphoenix - 08-12-2013

tips สำหรับคนที่ใช้สคริปไม่ได้ เป็นเพราะวงเล็บ+c มันกลายเป็นสัญลักษณ์ copyright

ฉะนั้นให้หาสัญลักษณ์ © แล้วแก้เป็นเป็น
Code:
(c)
แทนซะ ทุกจุดเลย


RE: สคริปต์แก้สระลอย + แก้ตัวอักษรแหว่ง - TheMoo2000 - 03-07-2014

ขอเสริมเกี่ยวกับเรื่องการจัด Font ให้โอเคนะครับ
ต้องอธิบายก่อนว่า ฟอนต์แต่ละตัวจะมีการเขียนโปรแกรมไว้ภายในฟอนต์ (ในสมัยนี้นะครับ) เพื่อทำการ เปลี่ยนตัวอักษรหนึ่ง เป็นอีกอักษรหนึ่งเมื่อตรงตามเงื่อนไขที่ตั้งไว้ อย่างเช่นของต่างประเทศก็จะมีตัว fi fl ffi ffl ของเขาหรืออื่นๆ ครับ เรียกว่า Ligature
[Image: 149px-Ligature_drawing.svg.png]
ที่ต้องทำแบบนี้เพื่อความอ่านง่ายและดูถูกต้องตามหลักภาษาครับ ส่วนภาษาไทยก็จะมีใช้ในส่วนของสระด้านบนและด้านล่างครับ
[Image: font%20ligature.png]
จากประโยค "พี่ฎูนู๋เป่าปี่" นะครับ ด้านซ้ายคือปิด Ligature ด้านขวาคือเปิด จะพบลักษณะการขยับอยู่ดังนี้
คำว่า "พี่" ต้องขยับไม่เอกขึ้นทางด้านบน
คำว่า "ฎู" ต้องขยับสระอูลงอีกเพื่อไม่ให้ซ้อนไปกับตัว ฎ
คำว่า "นู๋" เป็นการจัดแบบปกติ
คำว่า "เป่า" ต้องขยับไม้เอกหลบซ้ายมา
คำว่า "ปี่" ก็ขยับมาทั้งสระอีและไม้เอกครับ
ทีนี้ การขยับของแต่ละฟอนต์มันก็ไม่เท่ากันหรือไม่เหมือนกัน แต่ถ้าจะให้ไปลงลึกถึงรหัสของแต่ละฟอนต์ก็คงเป็นไปไม่ได้เพราะแต่ละฟอนต์ไม่ได้ใช้มาตรฐานในการกำหนดรหัสอักขระเดียวกัน และนี่คือทางแก้เบื้อต้นที่พอจะทำในทางโปรแกรมมิ่งได้ครับ
1. การขยับวรรณยุกต์ขึ้น คำนวณจากความสูงของสระอิอีอึอื แล้วบวกให้เลื่อนขึ้นไปด้านบน
2. การขยับสระต่ำลง คำนวณจาก ความสูงปกติของตัวอักษรอื่น เทียบกับความสูงของ ฎ ฏ และบวกให้เลื่อนลงด้านล่าง
3. การขยับไปด้านซ้าย อันนี้ต้องขึ้นอยู่กับดวง คือโดยปกติแล้วขนาดของ ง ป ญ ทั้งสามตัวนี้จะมีขนาดไม่เท่ากัน ให้เทียบขนาดจาก ง ให้วางสระเสมือนวางอยู่บนตัว ง แล้วมันจะขยับซ้ายมาเอง (แต่ก็ขึ้นอยู่กับดวง เพราะบางฟอนต์เขากันหน้า กันหลังตัวอักษรไม่เท่ากัน)
4. ในกรณี ญ ฐ ตามหลักต้องตัดเชิง(ขีดข้างใต้)ออก แต่ในกรณีนี้ไม่สามารถทำได้ อนุโลมให้ขยับลงแบบ ฎ ฏ ได้
5. แนะนำให้เขียนดักฟอนต์แบบเก่า และแบบใหม่ไว้นะครับ เพราะฟอนต์แบบเก่าเขาจะเรียงสระมาลอย ส่วนสระแบบใหม่เขาจะวางไว้เสมอกันครับ (เลยมีทั้งสระลอย และ สระจมนั่นเอง)
แต่ในตอนนี้เองเจ้าไมโครซอฟก็ออกฝีเจอร์ในการทำของพวกนี้มามากมายซึ่งจะได้รับพัฒนาในอนาคตแน่นอน ซึ่งก็ไม่แน่นอนว่า RM รุ่นต่อๆ ไปจะรองรับฟีเจอร์ Ligature อยู่ไหม แต่อย่างไรก็อยากให้พัฒนาไว้กันเผื่อภาษาไทยไว้ฮะ
ถ้ามีโอกาสทำลองเอาตัวอย่างผมและวิธีแก้ที่ผมยกมาให้ดูนี่พัฒนาต่อนะครับ


RE: สคริปต์แก้สระลอย + แก้ตัวอักษรแหว่ง - admannon - 04-13-2017

หลังจากที่ลองแก้ใน RMMV ตามกระทู้ นี้ แล้ว เลยลองแก้ใน RPGVXAce ดู ตามนี้

https://gist.github.com/admannon/07eb77c1d59a1a3df6264d192b0f1dc6


RE: สคริปต์แก้สระลอย + แก้ตัวอักษรแหว่ง - Mysticphoenix - 04-19-2017

ขอบคุณคับ มีทางเลือกใหม่แล้วเรา