Theppitak's blog

My personal blog.

12 กุมภาพันธ์ 2555

Thai and Lao script history

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

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

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

แนวคิดเช่นนี้เป็นพื้นฐานของทฤษฎีว่าอักษรลาวเกิดขึ้นที่ลาวก่อน ไม่ใช่รับมาจากสุโขทัย โดยได้อ้างหลักฐาน ศิลาจารึกวัดวิชุน หลวงพระบาง ซึ่งระบุศักราช จ.ศ. ๕๓๒ ซึ่งตรงกับ พ.ศ. ๑๗๑๓ ก่อนศิลาจารึกพ่อขุนรามถึง ๑๑๓ ปี และยังมีหลักฐานศิลาจารึกที่ระเบียงคต พระธาตุหลวงนครเวียงจันทน์ ที่กำลังอยู่ระหว่างตรวจสอบว่าอาจจะสร้างใน จ.ศ. ๓๔๑ (พ.ศ. ๑๕๒๒) ซึ่งถ้าถูกต้องก็จะมีอายุถึงกว่า ๑ พันปี!


จารึกวัดวิชุน

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

นอกจากนี้ ยังมีการเปิดประเด็นมาก่อนหน้านี้โดย จิตร ภูมิศักดิ์ ในบทความ อักษรไทยก่อนสมัยพ่อขุนรามคำแหง ที่ได้รวบรวมไว้ใน ศัพท์สันนิษฐานและอักษรวินิจฉัย ว่ามีจารึกในอุโมงค์วัดศรีชุมเป็นอย่างน้อยที่น่าจะสลักอักษรไทยไว้ก่อนสมัยพ่อขุนรามคำแหง โดยอักขรวิธีเป็นแบบเดียวกับสมัยพญาลิไทย คือมีการเขียนสระไว้ข้างบน-ข้างล่างพยัญชนะ โดยพ่อขุนรามคำแหงอาจจะพยายามปฏิรูปการเขียนให้สระเข้ามาอยู่ในบรรทัด แล้วปรากฏว่าไม่ฮิต พอสิ้นท่านแล้วจึงกลับไปใช้อักขรวิธีแบบเดิม (คล้าย ๆ กับที่ในหลวง ร.๔ เคยทรงประดิษฐ์ อักษรอริยกะ, ในหลวง ร.๖ เคยทรงเสนอ อักขรวิธีแบบใหม่ หรือจะเป็นตัวสะกดสมัยจอมพล ป. ก็ตาม ล้วนไม่เป็นที่นิยมทั้งสิ้น)

เมื่อเปรียบเทียบตัวเขียนในจารึกวัดศรีชุมกับจารึกวันวิชุนแล้ว ดูคล้ายกันมาก ถ้าเชื่อตามจิตรแล้วตัดลายสือไทยพ่อขุนรามฯ ที่เป็นสิ่งชั่วคราวออก ประวัติศาสตร์อักษรไทย-ลาวก็จะดูคลี่คลายลงมากในเรื่องลำดับปีและวิวัฒนาการ

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

หากจะสรุปประเด็นที่ยังเปิดอยู่เกี่ยวกับจารึกวัดวิชุน ก็คงแยกเป็นสองเรื่องหลัก:

  1. อายุที่แท้จริงของจารึกวัดวิชุนเอง ยังต้องอธิบายให้แน่นหนายิ่งขึ้น ปีที่กล่าวถึงในจารึก เป็น จ.ศ. จริงหรือ? และถ้าจริง จำเป็นไหมว่าต้องเป็นปีที่จารึก ไม่ใช่การเขียนบันทึกเรื่องเก่า?
  2. ถึงแม้จารึกวัดวิชุนจะเก่ากว่าจารึกพ่อขุนรามฯ ก็ยังไม่ใช่ข้อสรุปว่าอักษรลาวเกิดก่อนอยู่ดี เพราะอักษรไทยก็มีใช้มาก่อนสมัยพ่อขุนรามฯ นานแล้วเหมือนกัน

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

ป้ายกำกับ: ,

04 กุมภาพันธ์ 2555

Thanks (2012-02-04)

ขอขอบคุณ พี่โดม (โดม เจริญยศ), คุณ Donga (ถนอมทรัพย์ นพบูรณ์), คุณ เริงฤทธิ์ (Rerngrit Rakkanittakorn), และคุณ kenggg (ปฏิพัทธ์ สุสำเภา) ที่ได้หย่อนสตางค์สนับสนุนการทำงานซอฟต์แวร์เสรีของผม

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

ขอขอบคุณเป็นพิเศษสำหรับพี่โดมที่ได้เชิญชวนใน Facebook ให้ร่วมกัน donate ให้ผมครับ

ป้ายกำกับ:

03 กุมภาพันธ์ 2555

A Butterfly in ThaiLaTeX

๏ มาจะกล่าวบทไป
บั๊กหนึ่งใน ThaiLaTeX เล็กนักหนา
เพียงวูบวับขยับปีกกรีดกรายมา
เกิดลมพาถาโถมโพยมบน ฯ

จากที่ได้เขียนถึง ปัญหาอัญประกาศ ใน ThaiLaTeX ไปเมื่อปลายธันวา นับจากวันนั้นถึงวันนี้ เวลาว่างของผมก็หมดไปกับการแก้ ThaiLaTeX และสิ่งที่เกี่ยวข้อง โดยบั๊กนี้ได้กลายเป็นผีเสื้อกระพือปีกที่ทำให้เกิดผลพวงเป็นพายุใหญ่ได้ทีเดียว

เริ่มจาก:

  • พบว่าลำดับ `` และ '' ในเอกสาร ThaiLaTeX ไม่ได้มีการแปลงเป็นอัญประกาศคู่ แต่ยังคงรูปเป็นอัญประกาศเดี่ยวสองตัวเหมือนเดิม ซึ่งพบว่าปัญหาอยู่ที่ฟอนต์
  • ระหว่างตรวจสอบปัญหาในกฎ ligkern ของ virtual font ก็พบว่ามีลำดับอื่นที่ยังไม่มีการแปลงเช่นกัน เช่น ?` (¿), !` (¡), \dag (†), \ddag (‡) ฯลฯ ดังที่กล่าวไปแล้วใน blog ก่อน
  • ขณะทดสอบผลการแก้กฎ ligkern ก็พบว่า swath ไปแทรกรหัสแบ่งคำตรงกลางระหว่างลำดับ `` กลายเป็น `{\wbr}` ในบางกรณี
  • ก่อนจะลงมือแก้ swath ก็ชักทนปวดหัวกับซอร์สที่อ่าน (โคตร) ยากของ swath ไม่ไหว จึงจัดระเบียบซอร์สเสียใหม่ ตั้งแต่ใช้เครื่องมือจัดสไตล์ของซอร์สอัตโนมัติแล้วมาปรับแต่งด้วยมือทีหลัง ปรับเปลี่ยนโครงสร้าง ตัดตัวแปรหรือ member ที่ไม่จำเป็น ซึ่งกลายเป็น commit ชุดใหญ่ คือประมาณ 40 commit ใน 4 วัน ส่งท้ายปีเก่า หลังจากนั้นจึงได้แกะและแก้บั๊กที่ต้องการ และปรับโค้ดต่ออีกนิดหน่อย
  • กลับมาที่ ThaiLaTeX เอง เพื่อจะทดสอบฟอนต์ต่าง ๆ จึงมีการปรับเปลี่ยนเอกสารทดสอบ (teststd.tex) ให้รวมลำดับอักษรพิเศษด้วย แต่เพื่อความสะดวกในการปรับแก้ จึงจัดโครงสร้างเอกสารใหม่เสียก่อนโดยใช้แมโคร แล้วจึงแก้เพิ่ม
  • กลับมาแก้ฟอนต์ที่เหลือต่อ โดยหลังจากที่ทดสอบกับฟอนต์ Norasi ที่มี glyph ค่อนข้างครบแล้ว ก็จำเป็นต้องไล่เพิ่ม glyph พิเศษทั้งหมดที่ lthenc.def ตัวใหม่รองรับในฟอนต์ที่เหลืออีก 11 family ในชุด tlwg ซึ่ง glyph ที่ขาดก็มากบ้างน้อยบ้างแล้วแต่ฟอนต์
  • หลังจากเพิ่ม glyph ที่จำเป็นสำหรับ LaTeX แล้ว ก็จำเป็นต้องเพิ่ม glyph ละตินที่เหลือด้วย มิฉะนั้นการแสดงผลบนเดสก์ท็อปก็จะแหว่งไป ซึ่งปริมาณ glyph ที่เพิ่มนั้นเยอะกว่าชุด LaTeX หลายเท่า
  • การเพิ่ม glyph ละติน มีบางฟอนต์ที่ต้องวาดเพิ่มเอง ไม่สามารถหยิบยืมจากฟอนต์อื่นได้ ก็จำเป็นต้องดูขนาดของเส้นจากอักษรอังกฤษที่มี ซึ่งทำให้พบว่ามีบางฟอนต์ที่เส้นอักษรอังกฤษยังไม่สม่ำเสมอ จึงต้องนั่งปรับเส้น glyph อังกฤษเสียก่อน ได้แก่ฟอนต์ Loma ซึ่งมีการหยิบยืมไปใช้ในฟอนต์ Umpush ด้วย การแก้ครั้งนี้จึงทำให้ฟอนต์ทั้งสองได้เส้นที่สม่ำเสมอยิ่งขึ้นด้วย
  • ระหว่างทดสอบ พบบั๊กในฟอนต์ Loma และ Umpush เมื่อใช้กับเอกสาร LaTeX คือสระบนและวรรณยุกต์จะเยื้องกัน ทำให้คำว่า "ที่" จะวาดไม้เอกและสระอีไม่ตรงแนวกัน ก็แก้บั๊กนี้ในฟอนต์ทั้งสองด้วย

บั๊กตัวแรกที่พบจึงไม่ใช่แมลงธรรมดา แต่เป็นผีเสื้อกระพือปีกด้วยประการฉะนี้

ยังเหลือฟอนต์ชุด Arundina ต้องทำต่ออีกครับ แล้วค่อยออกทั้งชุดพร้อมกันทีเดียว

ป้ายกำกับ: , ,

02 กุมภาพันธ์ 2555

Unicode 6.1 and Thai-Lao Scripts

Blognone ออกข่าว Unicode 6.1 ออกแล้ว โดยมีการกล่าวถึงการแก้ปัญหา Grapheme Cluster Boundaries ซึ่งเป็นปัญหาภาษาไทยใน UAX #29 ผมได้พูดถึงเรื่องนี้ประปรายใน blog เก่า (เช่น เมื่อ 16 มี.ค. 2552 และ 6 ต.ค. 2553) แต่ไม่เคยเขียนถึงเป็นเรื่องเป็นราวโดยตรง

ปัญหาของ UAX #29 ในส่วนของ grapheme cluster boundary นี้ก็คือ มันได้กำหนด cluster ซึ่งเป็นหน่วยที่เล็กที่สุดของการตัดบรรทัดและเลื่อนเคอร์เซอร์ โดยให้สระหน้าและสระหลังของอักษรไทยและลาวถูกนับรวมไปใน cluster เดียวกับพยัญชนะที่มันเกาะ แทนที่จะแยกเป็น cluster อิสระ เช่น:

|เป็|น|เรื่|อ|ง|เป็|น|รา|ว|

แทนที่จะเป็น:

|เ|ป็|น|เ|รื่|อ|ง|เ|ป็|น|ร|า|ว|

การแบ่ง cluster แบบนี้มีผลดีคือเวลาตัดบรรทัดจะไม่ตัดในจุดที่รู้แน่ว่าไม่ควรตัด เช่น หลังสระเอ หน้าสระอา (ซึ่งความจริงก็ไม่ได้มีประโยชน์มาก ถ้าเรามี engine สำหรับตัดคำอยู่แล้ว) แต่ผลข้างเคียงก็คือ มันทำให้การเลื่อนเคอร์เซอร์ของภาษาไทย-ลาวในโปรแกรมต่าง ๆ ผิดเพี้ยนไปจากที่ผู้ใช้คาดหวัง ดังจะเห็นได้จากบั๊กที่ file ไว้ในที่ต่าง ๆ เช่น:

เรื่องนี้เกิดจากข้อกำหนดเรื่อง extended grapheme cluster ซึ่งใน UAX #29 ฉบับเดิมกำหนดให้สระหน้าของไทย-ลาว (เอ, แอ, โอ, ใอ, ไอ, ເອ, ແອ, ໂອ, ໃອ, ໄອ) มีคุณสมบัติ Grapheme_Cluster_Break เป็นแบบ Prepend และสระหลังของไทย-ลาว (อะ, อา, อำ, ອະ, ອາ, ອຳ) มีคุณสมบัติเป็นแบบ Extend ซึ่งอักษรที่มีคุณสมบัติเหล่านี้จะไม่สามารถยืนเป็น cluster เดี่ยว ๆ ได้ ต้องเกาะไปกับพยัญชนะ โดยแบบ Prepend ต้องเกาะไปกับพยัญชนะที่ตามมา และแบบ Extend ต้องเกาะไปกับพยัญชนะที่มาก่อนหน้า ซึ่งตรงนี้เป็นพฤติกรรมปกติในอักษรตระกูล Indic ซึ่งรวมถึงอักษรพม่าและเขมรด้วย แต่เผอิญเขาอาจจะลืมว่าอักษรไทย-ลาวเป็นอักษร Indic ที่แหกคอก

ความจริงแล้ว UAX #29 ฉบับเดิมได้กำหนดว่า นี่เป็นเพียงพฤติกรรม ปริยาย เท่านั้น ระบบต่าง ๆ สามารถ ดัดแปลง (tailor) ไปตามที่เห็นสมควรได้ แต่นั่นก็ไม่น่าสนใจเพียงพอให้นักพัฒนาระบบต่าง ๆ ดัดแปลง ตามที่ผู้ใช้คาดหวังโดยพร้อมเพรียงได้

ผมจึงได้หารือกับคุณ Martin Hosken เพื่อขอแก้ข้อกำหนดนี้ คุณ Martin เห็นด้วยว่าควรแก้ที่ข้อกำหนดโดยตรง เพราะถึงอย่างไร พฤติกรรมที่ ดัดแปลง นี้ จะเป็นสิ่งที่ทุกระบบจะต้องทำโดยปริยายอยู่แล้ว แล้วทำไมจะไม่ทำให้มันเป็นพฤติกรรมปริยายไปเลยล่ะ?

การทำให้คณะกรรมการยูนิโค้ดเชื่อไม่ใช่เรื่องง่าย ในเมื่อข้อกำหนดเดิมได้เปิดช่องให้ดัดแปลงได้อยู่แล้ว เขาจึงไม่เห็นความจำเป็นต้องแก้ร่างเดิม เราต้องหาหลักฐานที่หนักแน่นพอที่จะทำให้เขาเชื่อว่าไม่มีใครต้องการพฤติกรรมปริยายของเขาเลย การดัดแปลงเป็นสิ่งจำเป็น ไม่ใช่ตัวเลือก นั่นแหละเขาถึงจะยอมแก้

ความจริงก็ได้ยินมาว่ามีตัวแทนจาก Apple ที่อเมริกาเสนอแก้เรื่องนี้ไปรอบหนึ่งแล้วเหมือนกัน แต่ก็ตกไป นั่นยิ่งทำให้เราต้องหาหลักฐานที่หนักแน่นยิ่งขึ้น รายงานบั๊กต่าง ๆ ในโลกโอเพนซอร์สช่วยยืนยันได้ในระดับหนึ่ง แต่หลักฐานในเอกสารจริงว่าไม่มีใครแบ่ง cluster แบบนั้นเลยจะช่วยตีประเด็นได้ผลกว่า ผมได้ขอร้องให้เพื่อน ๆ ช่วยหาตัวอย่างป้ายข้อความแนวดิ่งที่แสดงตัวอักษรทีละช่องโดยเห็นสระหน้า-หลังแยกจากพยัญชนะ ก็ปรากฎว่าหายากเหลือเกิน ส่วนมากป้ายแนวดิ่งจะเขียนทีละพยางค์มากกว่า ในเวลาเดียวกันก็พยายามหาหลักฐานแนวอื่น จนกระทั่งไปเจอ การทำ drop cap ในวารสารที่แสดงให้เห็นการแบ่ง cluster ในเอกสารจริง

ด้วยการประสานงานของคุณ Martin การแก้ข้อกำหนดในครั้งแรก เขาแก้เป็น clustering สองแบบ คือแบบ extended กับแบบ legacy โดยแนะนำให้ใช้แบบ extended ยกเว้นภาษาไทย-ลาวที่อาจจะใช้แบบ legacy แทนได้ ฟังดูเหมือนเริ่มโอนอ่อนลงบ้าง แต่ก็ยังไม่กระตุ้นนักพัฒนามากพออยู่ดี จนกระทั่งคุณ Martin ได้ยื่นหลักฐานภาพ drop cap ของผมเข้าไป ผมเองก็คิดว่าคงได้แค่นั้นแหละ จนกระทั่งมาได้ข่าวจาก Blognone จึงตรวจสอบดู ก็ปรากฏว่าเขาแก้โดยตัดเรื่อง Prepend และ Extend ในส่วนภาษาไทย-ลาวออกไปหมดแล้ว ยกเว้นสระอำ โดยย้ายมาอยู่ในหมวด SpacingMark ซึ่งผลคือจะยังคงให้สระอำเกาะไปกับพยัญชนะนำหน้าต่อไป โดยจะอยู่ในโหมด extended grapheme cluster เท่านั้น ถ้าเป็นโหมด legacy ก็จะให้เคอร์เซอร์ตกหน้าสระอำได้ ส่วนสระหน้า-หลังอื่น ๆ จะแยกเป็น cluster ได้อย่างอิสระตามความคาดหวังของผู้ใช้

งานนี้ต้องให้เครดิตคุณ Martin Hosken เต็ม ๆ ครับ ที่ช่วยประสานงานและชี้แนะแนวทางต่าง ๆ ให้

ขั้นต่อไปคือขอแก้ GNOME #576156 ตามข้อกำหนดใหม่นี้ หรือไม่ก็รอนักพัฒนา Pango ปรับโค้ดใหม่ตามข้อกำหนดใหม่ก็อาจจะเพียงพอ ส่วนในที่อื่น ๆ เช่น ICU และ Chromium เข้าใจว่าเขาแก้ไปนานแล้ว

ป้ายกำกับ: , , ,

01 กุมภาพันธ์ 2555

Thanks

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

萬事如意,身體健康,出入平安,財喜登門。
[แต้จิ๋ว: บ่วงสื่อยู่อี่ ซิงที่เกี่ยงคัง ชุกยิบเผ่งอัง ไฉ่ฮี่เต็งมึ้ง]
หมื่นกิจสมหวัง สุขภาพแข็งแรง กิจการราบรื่น ทรัพย์สุขมาเยือน

และขอขอบคุณที่ให้การสนับสนุนด้วยดีตลอดมา ขอให้ happy hacking ครับ!

ป้ายกำกับ:

hacker emblem