Theppitak's blog

My personal blog.

10 กรกฎาคม 2555

Thai Ayudhaya Tones

จากที่ได้เขียน blog เรื่อง วิทยาศาสตร์ของไตรยางศ์ ว่าด้วยสำเนียงบางกอกไปแล้ว ก็อยากจะเขียนถึงไตรยางศ์อีกแบบที่อ่านพบในหนังสือ จินดามณี อันเป็นตำราภาษาไทยสมัยอยุธยา ผมพยายามแกะคำอธิบายวิธีผันวรรณยุกต์ซึ่งดูจะต่างจากสำเนียงบางกอก โดยในจินดามณีเล่ม ๑ ของพระโหราธิบดี สมัยสมเด็จพระนารายณ์มหาราช ได้อธิบายไว้ดังนี้ (รูปประกอบผมวาดเสียใหม่ตามเค้าเดิมในหนังสือ และขอคงตัวสะกดแบบโบราณตามต้นฉบับไว้)

อักษรเสียงสูง ๑๑ แม่นั้น คำต้นให้อ่านสูงแล้วลดลงไปตามที่ไม้เอกไม้โทนั้น

การผันอักษรเสียงสูง

อักษรกลาง ๙ แม่นั้นคือ ก จ ฎ ฏ ด ต บ ป อ นี้ คำต้นให้อ่านเป็นคำกลางแล้วจึงอ่านขึ้นไปตามไม้เอก แล้วลงไปตามไม้โท ด่งงรูปจั่วนั้น

การผันอักษรกลาง

อักษรเสียงกลางก้องต่ำ ๒๔ ตัวนั้น คำต้นให้อ่านเป็นกลางแล้วอ่านทุ้มลงแล้วอ่านสูงขึ้นไปตามไม้เอกไม้โท

การผันอักษรกลางก้องต่ำ

คำอธิบายนี้ไม่ได้เอ่ยถึงไม้ตรีไม้จัตวา แต่จะเห็นวิธีผันที่ต่างจากสำเนียงบางกอก

ยังมีจินดามณีครั้งแผ่นดินพระเจ้าบรมโกศอีกฉบับหนึ่ง ซึ่งอธิบายวิธีผันเสียงคล้ายคลึงกัน แต่ฉบับนี้อธิบายไม้ตรีไม้จัตวาด้วย

ก่อนอื่น มีวิธีผันเสียงคำเป็นกับคำตายเป็นอารัมภบท:

อักษร ๔๔ ตววนี้ให้อ่านแตสองเสียงก่อน แลอักษร ๑๑ ตวว คือ ขฃฉฐถผฝศสษห นั้นให้อ่านเสียงสูงเสมอกันไปเหมือน ศษส นั้น อักษร ๓๓ ตววเหลือให้อ่านเสียงกลางเสมอกันไปยดงง จญ นั้น ๒๔ อักษรอ่านลงคอนั้น ๕ อักษร คือ ฆฌฑธ นั้นอ่านลงคอแตในแม ก ข กับเขียนหนังสือไทยเปนสวตนนต์ จึงอ่านลงคออย่างหนังสือฃอม เมื่อแจกตามแม่ทงงปวงไปก็ดี เปนเนื้อความตามภาษาโลกยก็ดี อย่าอ่านลงคอเลย ผู้จ่เขียนนั้นครั้นบาฬี ฃอมเปนธนิดก็เขียนอักษรไทยเปนธนิด ครั้นบาฬี ฃอมเปนสะถินล เขียนอักษรไทยเปนสถินลดวยเทิศ อักษรเสียงกลาง ๙ ตววนั้นคือ กจฎฏดตบปอ นี้ตววเบามิก้อง เมื่อแจกให้อ่านเบาแผวไปยที ๔ ตัวนี้คือ กิกึกุกะ นี้เปนต้น อิอึอุอะ ฯลฯ อักษรเสียงสูง ๑๑ ตววนั้นตววหนักบมีก้อง เมื่อแจกให้อ่านสูงแหลมไปที ๔ ตววคึอ ขิขึขุขะ นี้เปน หิหึหุหะ นั้นเปนปลายจำไว้มั่น ฯ ฯ อักษรเสียงต่ำ ๒๔ ตววอันเหลือนั้น ตววก้องเมื่อแจกไปให้อ่านเบาพาวไปในที่ ๔ ตัว คือ คิคึคุคะ เปนต้นนี้ อิอึอุอะ นั้นเปนปลายจำไว้จงมั่น ฯ

ก็ดูเหมือนจะคล้ายสำเนียงบางกอกอยู่ ยกเว้นอักษรสูงคำตาย จะผันแหลมสูง (คล้ายสำเนียงอีสาน?)

จากนั้นก็ได้พาแจกแจงอักษรสูง-ต่ำ ๙ คู่ บวกกับอักษร ห นำต่ำเดี่ยวอีก ๑๐ คู่ ว่าเป็นเสียงคู่กันอย่างไร แล้วก็มาถึงคำอธิบายวิธีผันเสียงอักษรกลางทั้ง ๕ เสียง โดยเขียนเทียบคำกับเสียงอ่าน ตำราเขียนแยกบรรทัดแล้วให้โยงหากัน ผมขอเรียงไว้ในบรรทัดเดียวกันโดยใส่วงเล็บไว้ตามตำแหน่ง เพื่อความง่ายในการพิมพ์:

(ก)กไผ่ป่า (ก่)กอีดส้างวัด ลาวว่าสังก้(ก้) อ่านแต่เสียงต่ำย่างธอ(ก๊) เสียงสูงอย่างสอ(ก๋)

เนื่องจากไม่รู้วิธีออกเสียง จึงได้ข้อสังเกตเพียงว่า เสียงจัตวานั้นคงเหมือนจัตวาบางกอก แต่รูปตรีนั้นเป็นเสียงเดียวกับอักษรต่ำ

แล้วก็มาถึงแผนภูมิที่น่าสนใจ ว่าด้วยการเขียนเสียงขึ้นเสียงลง ดังนี้:

การผันอักษรสามหมู่

แต่งให้มีไม้เอก ไม้โท ไม้ตรี ไม้จัตวา แต่อักษรเสียงไม้เอก กลางตววเบามีก้อง ๙ ตววเหล่าเดียวนั้น เขียนเรียบกันตามบรรทัดหย่างหนึ่ง เขียนตามเสียงขึ้นเสียงลงตามที่นั้น หย่างหนึ่ง รูปดงงนี้มีคนสงไสมาก ด้วยว่าเดิมนั้นอักษรทงง ๓ เหล่ามีแต่ไม้เอกโทเปนเหล่าแล ๓ คำ

การผันอักษรกลางตัวเบา

๓ คำอักแลอักษรเสียงกลางตัวเบามีก้อง ๙ ตววเหล่านี้เปน ๕ คำเหนแปลกอยู่ จึงเขียน อักษรสูง อักษรต่ำเหล่านี้ไว้ให้แจ้ง ด้วยเปนรูปจัวเหมือนกันเปน ๕ คำได้เหมือนกันแล เขียนเรียบตามบันทัดหย่างหนึ่ง เขียนตามเสียงขึ้นเสียงลง ตามทีนันหย่างหนึ่ง รูปดงงนี้แล

การผันอักษรสูงอักษรต่ำ

แกไม้ตรีไม้จัตวา แลอักษรคู่จบแตเท่านี้แล ฯ

จากนั้น ตำราก็ได้สาธยายต่อไป เกี่ยวกับการที่อักษรกลางสามารถผันได้ครบทุกเสียงเหมือนคู่อักษรสูง-ต่ำ เมื่อมีไม้ตรีไม้จัตวาช่วย โดยเปรียบเหมือนบุรุษสองกลุ่มวิวาทกัน อักษรกลางโดนรุมแต่ฉลาดกว่า เลยสู้กันได้ จากนั้นก็ได้อธิบายวิธีผันเสียงวรรณยุกต์ ซึ่งเนื้อหาก็คล้ายกับจินดามณีสมัยสมเด็จพระนารายณ์นั่นเอง

คงพอเห็นภาพกระมังครับ ว่าสำเนียงชาววังอยุธยาสมัยนั้นต่างจากสำเนียงเหน่อ ๆ ของบางกอก และไตรยางศ์ก็บัญญัติขึ้นในสมัยอยุธยาโดยอ้างอิงสำเนียงอยุธยา จนกระทั่งศูนย์กลางอำนาจย้ายมาที่บางกอก สำเนียงถิ่นบางกอกจึงกลายเป็นสำเนียงมาตรฐานแทนที่ โดยที่ยังคงใช้ไตรยางศ์อยุธยาอธิบายอยู่เช่นเดิม

สุดท้ายแล้ว ผมก็ยังไม่รู้อยู่ดีว่าสำเนียงไทยสมัยอยุธยาผันอย่างไร แต่หากสังเกตแผนภูมิของจินดามณีฉบับสมัยสมเด็จพระเจ้าบรมโกศแล้ว จะเห็นว่าอักษรสูงและอักษรต่ำผันรูปสามัญ-เอก-โทไล่ตามลำดับจากสูงมาต่ำ ไม่ใช่ขึ้น ๆ ลง ๆ แบบสำเนียงบางกอก และคนที่รู้สำเนียงถิ่นอีสาน อาจประหลาดใจที่แผนภูมินี้คล้ายกับการผันวรรณยุกต์ของอีสานมากทีเดียว ไว้มีโอกาสจะเขียนถึงไตรยางศ์อีสานต่อไปครับ

ป้ายกำกับ:

08 กรกฎาคม 2555

Thanks

ขอขอบคุณ ผู้ให้การสนับสนุนงานพัฒนาของผมด้วยการ หย่อนสตางค์ลงหมวก ในเดือนมิถุนายนที่ผ่านมาครับ

ขอบคุณบุคคลนิรนามท่านเดิม, คุณ kenggg และ คุณวิทยา สำหรับการสนับสนุนที่ต่อเนื่องครับ ขออนุโมทนาในความตั้งใจที่จะสนับสนุนสังคมโอเพนซอร์สไทย ด้วยการสร้างธรรมเนียมการ donate ให้เกิดขึ้นอย่างเป็นรูปธรรม

May the Source be with you!

ป้ายกำกับ:

06 กรกฎาคม 2555

swath revamp

หลังจากที่ได้ออก swath 0.4.3 ไปพร้อมกับชุด thailatex 0.5.0 แล้ว ก็ได้เวลากลับมาสะสางบั๊กเก่าที่ได้รับรายงานตั้งแต่ 5 เดือนก่อน พร้อมกับบั๊กที่เจอเองด้วย

  • บั๊กแรกที่ได้รับรายงานทางเมลส่วนตัว คือมีผู้ใช้นำ swath ไปใช้ประมวลผลเอกสารในแบบ pipeline โดยเปิดเป็น daemon ไว้แล้วส่งเอกสารไปแบ่งคำทีละบรรทัด แต่ปัญหาคือ ข้อความที่ส่งนั้นเป็น UTF-8 แล้ว swath จะรอข้อมูลจนจบแฟ้มก่อนจึงจะเริ่มทำงาน แทนที่จะให้ผลลัพธ์แบบบรรทัดต่อบรรทัด
  • บั๊กที่สอง เป็นบั๊กที่เจอเองระหว่างทดลองใช้ swath ตัดคำแฟ้ม utf-example.tex ของ thailatex เอง ซึ่งเป็นเอกสารที่มีอักขระมากกว่าสองภาษา โดยมีอักษรกรีก ซีริลลิกด้วย ปรากฏว่า swath จะกรองอักขระที่ไม่ใช่อังกฤษ-ไทย (ตามที่มีใน TIS-620) ทิ้งหมด โดยแทนเป็นอักขระ unknown

สองบั๊กนี้ มีความเกี่ยวพันกันอยู่ คือเกิดจากสาเหตุที่ swath ใช้รหัส TIS-620 ในการทำงาน บั๊กแรกนั้น เกิดจากวิธีจัดการข้อมูลที่เป็น UTF-8 โดยจะแปลงรหัสจาก UTF-8 เป็น TIS-620 ผ่าน แฟ้มชั่วคราว โดยจะแปลงข้อมูล ทั้งแฟ้ม ลงในแฟ้มชั่วคราวก่อน แล้วจึงเปิดแฟ้มชั่วคราวที่แปลงเป็น TIS-620 แล้วมาทำงานตามปกติ จึงทำให้ต้องรอข้อมูลจนจบแฟ้มเสียก่อนจึงเริ่มทำงาน

ส่วนบั๊กที่สองก็เข้าใจไม่ยากว่าเกิดจากการแปลงรหัสยูนิโค้ดเป็น TIS-620 ก่อนนั่นเอง ดังนั้น อักขระใดที่ไม่อยู่ใน TIS-620 ก็จำต้องกรองทิ้งหมด

เนื่องจากโค้ด swath ไม่ใช่โค้ดที่แกะง่ายนัก ผมจึงทำทีละเรื่อง โดยปรับโครงสร้างเรื่องการแปลงรหัสเพื่อแก้บั๊กแรกก่อน กลไกภายในยังคงเป็น TIS-620 เช่นเดิม

แต่ปัญหาคือ swath รองรับเอกสารทั้ง plain text, LaTeX, HTML และ RTF ด้วย จึงต้องไล่แก้และทดสอบทุกฟอร์แมต ซึ่งสามอันแรกนั้นไม่ยากเท่าไร จะติดก็แต่เอกสาร RTF ซึ่งแทบหาผู้ใช้ไม่ได้แล้วในปัจจุบัน จึงได้ โพสต์เสนอว่าจะตัดออก แต่เมื่อสนทนาไป กลับได้รับความช่วยเหลือจาก คุณวิทยา คอยให้ข้อมูลและเตรียมเอกสารทดสอบให้ จนในที่สุดก็ได้การรองรับ RTF ที่ใช้งานได้จริงเสร็จสมบูรณ์ โดยที่โค้ดเดิมก่อนแก้นั้นก็ทำงานไม่ผ่านกับเอกสารทดสอบอยู่แล้ว จึงกลายเป็นการแก้บั๊กและเพิ่มความสามารถไปในตัว

แก้โค้ดส่วนการรองรับ RTF ครั้งนี้ ผมยกเครื่องเขียนใหม่หมดเลย

เมื่อเสร็จแล้ว ก็กลับมาทำเรื่องที่สองต่อ โดยในครั้งนี้ได้ตัดสินใจว่าจะเปลี่ยนการทำงานภายใน จาก TIS-620 เป็น UCS-4 (รหัสยูนิโค้ด 32 บิต) โดยใช้ wide char (wchar_t) แทน char ธรรมดา (มีบันทึกการพูดคุยกับ อ.พฤษภ์ ไว้ที่ Google+)

การแก้รอบหลังนี้ เป็นการยกเครื่องแบบถอนรากถอนโคนกว่ารอบแรก และได้ปรับแก้ระบบแปลงรหัสที่ทำไปรอบแรก ซึ่งดูไม่สวยงาม เป็นลูกผีลูกคน ให้ดูลงตัว สมเหตุสมผลยิ่งขึ้น มีการเรียกใช้โค้ดส่วนแปลงรหัสในระดับที่ลึกกว่าเดิม เพื่อประสิทธิภาพและความสมเหตุสมผล

และแน่นอนว่าต้องไล่ทำทีละฟอร์แมตเหมือนรอบก่อน และได้ปรับปรุงโค้ดส่วน RTF ให้รัดกุมกว่าเดิมด้วย

เดิมทีก็ไม่คิดว่าจะทัน Wheezy freeze อยู่แล้ว แต่ก็พยายามทำเท่าที่กรอบเวลามี เผื่อว่าจะทัน แต่สุดท้ายก็ไม่ทันอยู่ดี ความจริงก็แก้เสร็จ พร้อมแก้บั๊กร้ายแรงเสร็จในวันที่จะเริ่ม freeze นั่นแหละ แต่สำหรับการแก้ไขขนานใหญ่ขนาดนี้ ตัวโปรแกรมคงต้องผ่านการทดสอบปรับปรุงมากกว่านี้จึงจะออกรุ่นได้ ดังนั้น จึงยังไม่เร่งร้อนให้ทัน Debian รุ่นนี้ และยังคงทดสอบต่อไปด้วยจังหวะปกติ ไว้พร้อมเมื่อไรค่อยออก

ป้ายกำกับ:

hacker emblem