- แบบอักษรเสรีที่มี glyph (รูปทรงตัวอักษร) สำหรับอักขระ Unicode ทั่วโลก และเป็นแบบอักษรสาธารณะที่ดูแลในฐานะส่วนหนึ่งของ โครงการ GNU
- ตั้งแต่เวอร์ชัน 15.1.01 เป็นต้นมา มีการนำ encoding แบบประกอบใหม่ (วิธี 6/3/1) มาใช้จากผลงานของ Minseo Lee และ Ho-Seok Ee เพื่อปรับใช้ระบบ glyph ภาษาเกาหลีที่ดีขึ้น
- ในเวอร์ชันล่าสุด 17.0.03 ได้มีการแก้ไขและเพิ่ม glyph จำนวนมากสำหรับอักษรจีน/ญี่ปุ่นแบบฮัน, อาหรับ, สัญลักษณ์ดนตรี และอื่น ๆ
- รองรับ BMP (Basic Multilingual Plane) ทั้งหมด 65,536 code point และกำลังขยายไปยังพื้นที่ SMP (Supplementary Multilingual Plane) และ CSUR (ConScript Unicode Registry) อย่างต่อเนื่อง
- เผยแพร่ภายใต้ dual license คือ GNU GPLv2+ พร้อมข้อยกเว้นการฝังฟอนต์ และ SIL Open Font License 1.1 จึงสามารถใช้งานในซอฟต์แวร์เชิงพาณิชย์ได้อย่างเสรี
- เป็นโครงการฟอนต์ Unicode โอเพนซอร์สตัวแทนที่มีเป้าหมาย ครอบคลุมระบบอักษรทั่วโลกอย่างสมบูรณ์
ภาพรวมของ GNU Unifont
- GNU Unifont เป็นแบบอักษรที่มี glyph สำหรับ ทุก code point ของ Unicode ที่พิมพ์ได้ และได้รับการดูแลในฐานะส่วนหนึ่งของโครงการ GNU
- รองรับ Basic Multilingual Plane (BMP, U+0000~U+FFFF) อย่างสมบูรณ์
- และยังขยายครอบคลุม Supplementary Multilingual Plane (SMP, U+010000~U+01FFFF) รวมถึงพื้นที่ CSUR/Under-CSUR อย่างต่อเนื่อง
- สามารถใช้งานในซอฟต์แวร์เชิงพาณิชย์ได้ แต่ฟอนต์ดัดแปลงต้องเผยแพร่ภายใต้สัญญาอนุญาตเดียวกัน
- สัญญาอนุญาตคือ GNU GPLv2+ (พร้อมข้อยกเว้นการฝังฟอนต์) และ SIL Open Font License 1.1
- การเปิดเผยฟอนต์ดัดแปลงช่วยรับประกันประโยชน์สาธารณะ
ลิขสิทธิ์และสัญญาอนุญาต
- glyph หลายพันรายการเป็น ผลงานสร้างสรรค์ของผู้มีส่วนร่วมแต่ละราย และได้รับความคุ้มครองตามกฎหมายลิขสิทธิ์ของแต่ละประเทศ
- บางส่วนเป็นรูปแบบตัวอักษรเดิม ขณะที่บางส่วนเป็น การออกแบบไอคอนและสัญลักษณ์ ซึ่งได้รับการคุ้มครองในระดับสากลที่สูงกว่า
- มีการเผยแพร่บันทึกทางกฎหมายที่เกี่ยวข้องกับกฎหมายลิขสิทธิ์ของเยอรมนี
- ตั้งแต่ Unifont 13.0.04 เป็นต้นมา มีการเผยแพร่ภายใต้ GPL 2+ / SIL OFL 1.1 แบบ dual license
- การฝังแบบอักษร (embed) ลงในเอกสารไม่ถือเป็นการละเมิด GPL
ดาวน์โหลดและรูปแบบของฟอนต์
- มีทั้งชุด build มาตรฐานและ เวอร์ชันที่รวม glyph ของ CSUR/Under-CSUR PUA
- รองรับหลายรูปแบบ เช่น OpenType(.otf) , PCF, BDF, PSF, HEX
- ติดตั้งได้บน Windows และ macOS โดยบน macOS Terminal ต้องเปิดตัวเลือก Antialias เพื่อให้อ่านได้ชัดเจน
- เอนจินเรนเดอร์บางตัวอาจมองข้ามข้อมูลระยะห่างระหว่าง glyph ทำให้ เอนจินที่รองรับเฉพาะ monospace อาจแสดงผลผิดพลาดได้
ข้อจำกัดของ Unifont
- เก็บ เพียงหนึ่ง glyph ต่อหนึ่ง code point ที่พิมพ์ได้
- อักษรตระกูลอินเดีย (เช่น เทวนาครี เบงกาลี ทมิฬ) หรือ อักษรที่รูปทรงเปลี่ยนตามตำแหน่ง (เช่น อาหรับ) จึงอาจไม่ถูกเรนเดอร์ได้อย่างแม่นยำ
- สำหรับสคริปต์ที่ซับซ้อน แนะนำให้ใช้ ฟอนต์ OpenType เฉพาะทาง
การร่วมสร้าง glyph ใหม่
- หากต้องการเพิ่ม glyph ใหม่ ต้อง ติดต่อทางอีเมลล่วงหน้า
- เพื่อหลีกเลี่ยงงานซ้ำซ้อน จึงควรหารือก่อนเข้าร่วม
- glyph ฮันจาขนาด 15×16 พิกเซล (Plane 2, 3) ที่รัฐบาลจีนถือครองลิขสิทธิ์ ไม่สามารถรวมไว้ในฟอนต์เสรีได้
รุ่นล่าสุด — Unifont 17.0
- เวอร์ชัน 17.0.03 วันที่ 1 พฤศจิกายน 2025
- แก้ไขอักษรฮั่นมากกว่า 100 รายการ รวมถึงอักษรที่มีราก ‘馬(ม้า)’ และ ‘鳥(นก)’
- สะท้อน รายการมาตรฐานอักษรจีนตัวย่อ ระหว่างปี 1935~2013
- รวม มาตรฐานรากอักษรสำหรับการใช้งานสมัยใหม่ ที่ประกาศในปี 2009
- เวอร์ชัน 17.0.02 วันที่ 18 ตุลาคม 2025
- มีผู้ร่วมพัฒนาหลายรายใน Plane 0~3 เช่น Paul Hardy, David Corbett, Xiaoxiao Akatsuki, Boris Zhang
- แก้ไขจำนวนมากในอาหรับ สัญลักษณ์หมากรุก CJK extensions และอื่น ๆ
- เวอร์ชัน 17.0.01 วันที่ 9 กันยายน 2025
- เพิ่ม Arabic Extended-B, สัญลักษณ์สกุลเงิน, อักษร Telugu และ Kannada เป็นต้น
- เพิ่มสคริปต์จำนวนมากใน Plane 1~3 เช่น Arabic Extended-C, Sidetic, Tolong Siki, Beria Erfe, Adlam
เวอร์ชันสำคัญก่อนหน้า
- Unifont 16.0 (ครึ่งแรกของปี 2025)
- แก้ไขจำนวนมากในอาหรับ กรีก เกาหลี สัญลักษณ์ดนตรี และอื่น ๆ
- เพิ่มสคริปต์ CSUR เช่น Sitelen Pona และ Zbalermorna
- Unifont 15.1 (ปี 2024)
- นำ Johab encoding แบบฮันกึล 6/3/1 ของ Ho-seok Ee มาใช้
- เปลี่ยน build หลักจาก TrueType เป็น OpenType
- ปรับปรุงครั้งใหญ่สำหรับ ฮันกึล, CJK extensions และ glyph ของ Wen Quan Yi
ความครอบคลุมของ glyph
- รองรับ Unicode plane อย่างกว้างขวางตั้งแต่ Plane 0~3, Plane 14 และ Plane 15
- Plane 0: Basic Multilingual Plane (ครอบคลุมอักษรหลักทั้งหมดอย่างสมบูรณ์)
- Plane 1: Supplementary Multilingual Plane (สัญลักษณ์ดนตรี อักษรภาพ อักษรโบราณ ฯลฯ)
- Plane 2~3: อักษร CJK extension
- Plane 14: tag และ variation selector
- Plane 15: พื้นที่ส่วนตัว CSUR/Under-CSUR
สคริปต์ CSUR และ UCSUR
- เช่น Tengwar, Cirth, Aurebesh, Klingon, Sitelen Pona, Sadalian
- รวมอักษรประดิษฐ์ (conlang script) หลากหลายประเภท
- บางส่วนยังถูกระบุว่าไม่สมบูรณ์
รูปแบบญี่ปุ่นและจีน
- มีเวอร์ชัน unifont_jp ที่รองรับมาตรฐาน JIS X 0213 อย่างสมบูรณ์
- ช่วงแรกใช้ Jiskan16 ก่อนจะเปลี่ยนเป็น glyph สาธารณะของ Izumi16
- เวอร์ชันภาษาจีนครอบคลุม ตารางอักษรมาตรฐานทั่วไป อย่างครบถ้วน
- อ้างอิงจาก glyph สาธารณะของโครงการ Wen Quan Yi(文泉驛)
รายละเอียดทางเทคนิค
- การแปลงเป็น TrueType อ้างอิงจากสคริปต์ของ Luis Alejandro González Miranda
- ทำกระบวนการแปลง
.hex → .sfd → .ttf แบบอัตโนมัติ
- ใช้ กริด 16×16 พิกเซล เป็นพื้นฐาน และมีแผนรองรับ glyph ขนาด 32×32 พิกเซล ในอนาคต
แผนในอนาคต
- glyph ขนาด 16×16 พิกเซลใน SMP ทั้งหมดเสร็จสมบูรณ์แล้ว
- สคริปต์ที่ซับซ้อน เช่น Tangut จะถูกสร้างในขนาด 32×32 พิกเซลในอนาคต
- ยังดำเนินการ เพิ่มสคริปต์ CSUR อย่างต่อเนื่อง
- ผลงานใหม่ทั้งหมดต้องเผยแพร่ภายใต้เงื่อนไข GPL 2+ / SIL OFL 1.1
ความสำคัญของโครงการ
- GNU Unifont เป็นฟอนต์เสรีสำคัญที่มีเป้าหมาย ทำให้ระบบอักษรทั่วโลกเข้าถึงได้ในรูปแบบดิจิทัล
- มีบทบาทเป็นโครงสร้างพื้นฐานหลักในด้าน ระบบนิเวศโอเพนซอร์ส, internationalization (i18n), และวิศวกรรมฟอนต์
- เป็นโครงการที่ยกระดับ ความสมบูรณ์ด้านภาพของมาตรฐาน Unicode ผ่านการมีส่วนร่วมของชุมชนอย่างต่อเนื่อง
ที่มาและโครงสร้างของฮันกึล
- ฮันกึลถูกประดิษฐ์ขึ้นโดย พระเจ้าเซจงมหาราช ระหว่างปี 1443~1446 และประกาศใช้อย่างเป็นทางการในปี 1446 ผ่าน Hunminjeongeum Haerye
- จุดประสงค์ของการประดิษฐ์ถูกระบุว่า “เพื่อให้ประชาชนเรียนรู้ได้ง่ายและใช้ได้สะดวกทุกวัน”
- Haerye เป็นคำอธิบายหลักการสร้างอักษร และฉบับที่ค้นพบระหว่าง สงครามโลกครั้งที่สอง ซึ่งเป็นฉบับเดียวที่เหลืออยู่ยังคงได้รับการเก็บรักษาไว้
- ฮันกึลมี โครงสร้างบล็อกพยางค์ ที่ประกอบด้วยสามองค์ประกอบคือ พยัญชนะต้น, สระ, และพยัญชนะท้าย
- ตัวอย่าง: “ฮันกึล” ประกอบจากการรวม ‘h + a + n’ และ ‘g + eu + l’
- สระและกึ่งสระ (y, w) จะถูกวางไว้ทางขวาหรือด้านล่างของพยัญชนะต้น
หลักการสร้างพยัญชนะ
- พยัญชนะเริ่มต้นจาก พยัญชนะพื้นฐานห้าตัว (g, n, m, s, ng) ที่เลียนรูปอวัยวะออกเสียง
- จากนั้นจึงเพิ่มเส้นขีดจนเกิดเป็นพยัญชนะดั้งเดิม 17 ตัว
- พยัญชนะบางตัวใช้ รูปพยัญชนะซ้อน เพื่อแสดงการเน้นเสียง
- Compatibility Jamo แบบประกอบก็รวมอยู่ใน Unicode เช่นกัน และ jamo โบราณบางตัวไม่ได้ใช้งานแล้วในปัจจุบัน
หลักการสร้างสระ
- สระมีที่มาจากแนวคิดไตรภาคของ ฟ้า(หยาง), มนุษย์(กลาง), ดิน(หยิน)
- องค์ประกอบพื้นฐานคือ จุด(arae-a), เส้นแนวนอน(eu), เส้นแนวตั้ง(i)
- เดิมมีสระ 11 ตัว โดย arae-a หายไปจากภาษาเกาหลีมาตรฐานสมัยใหม่แล้ว แต่ยังคงอยู่ใน สำเนียงเชจู
- การรวมสระทำให้เกิด สระประสม (diphthong) และบางรูปไม่ถูกใช้ในฮันกึลสมัยใหม่
- ชุด jamo ของ Unifont Hangul รองรับสระและสระประสมทั้งหมดทั้งแบบโบราณและสมัยใหม่
พื้นที่ฮันกึลใน Unicode
- ฮันกึลรวมอยู่ใน ช่วง Unicode ต่อไปนี้
- U+1100–U+11FF: Hangul Jamo
- U+3130–U+318F: Hangul Compatibility Jamo
- U+A960–U+A97F: Hangul Jamo Extended–A
- U+AC00–U+D7A3: Hangul Syllables
- U+D7B0–U+D7FF: Hangul Jamo Extended–B
- U+FFA0–U+FFDF: Half-width Compatibility Jamo
- การปรับตำแหน่งการผสมของพยัญชนะต้น สระ และพยัญชนะท้าย คือหัวใจของการออกแบบฟอนต์ และ แม้แต่ฟอนต์บิตแมปก็สามารถแสดงพยางค์แบบประกอบได้
ฟอนต์ Johab บน X11 และ Unifont
- ฟอนต์ที่เข้ารหัสแบบ Johab สร้าง glyph พยางค์จากการรวมพยัญชนะต้น สระ และพยัญชนะท้าย
- ใช้ในเทอร์มินัล Hanterm บนสภาพแวดล้อม Unix X11
- เนื่องจาก ฟอนต์ฟรีสำหรับ Hanterm ไม่เข้ากันกับ GPL ทำให้ Unifont ต้อง สร้าง glyph พยางค์ฮันกึลใหม่ขึ้นเองโดยตรง
- กระบวนการแปลง: Perl script johab2ucs2.pl →
.hex → .bdf
- ฟอนต์เดิม (เช่น iyagi16, johabg16) ถูกจำกัดด้วย สัญญาอนุญาตสำหรับ Hanterm เท่านั้น
- หลังจากนั้นได้สร้าง ชุด Hangul Syllables ใหม่ ต่อเนื่องหลายปีและรวมเข้าใน Unifont
ผลงานล่าสุดและการปรับปรุง encoding
- Minseo Lee : ในปี 2023 ได้มอบ glyph สมัยใหม่ตามลำดับของ Hanterm และชุดแก้ไข glyph โบราณ
- ปรับปรุง Perl script และแก้ไขความสอดคล้องของ jamo ภายในช่วง Unicode
- Ho-Seok Ee : เสนอ Johab 6/3/1 encoding
- ใช้โครงสร้างการประกอบแบบ พยัญชนะต้น 6, สระ 3, พยัญชนะท้าย 1 ทำให้ การสร้าง glyph ง่ายขึ้นกว่าระบบเดิม
- เสนอให้ย้าย code point ไปยัง Private Use Area(U+E000–U+E8FF)
- เริ่มใช้วิธี encoding นี้ตั้งแต่ Unifont 15.1.01
บล็อกพยางค์ฮันกึลใน Unicode (U+AC00–U+D7A3)
- ประกอบด้วย glyph พยางค์ทั้งหมด 11,172 รายการ
- พยัญชนะต้น 19 ตัว (หรือ filler 1 ตัว), สระ 21 ตัว, พยัญชนะท้าย 27 ตัว (หรือไม่มี)
- สูตรการประกอบ: (19×21)×28 = 11,172
- คำที่ขึ้นต้นด้วยสระจะใช้ พยัญชนะต้น ‘ng (ieung)’ เป็น filler
- ตั้งแต่ Unifont 5.1 เป็นต้นมา กระบวนการสร้างบล็อกพยางค์ใหม่ถูกอธิบายอย่างละเอียดในเอกสาร Generating Hangul Syllables
2 ความคิดเห็น
นี่แหละตัวจริงของฟอนต์เกาหลีหน้าตาไม่สวยใน Minecraft...
ความคิดเห็นจาก Hacker News
มันมีประโยชน์มากเพราะฝังมากับไฟล์ executable โดยตรง ผู้ใช้บางคนใส่อักขระ CJK ลงในแบบออกแบบด้วย และมันก็ใช้งานได้เลยบนทุกแพลตฟอร์ม
ตอนกำลังดูคำอธิบายรูเจาะใน CAD ก็แปลกใจที่พบว่าสัญลักษณ์ counter-bore และ counter-sink มีอยู่ใน Unifont แล้ว
เวอร์ชันเว็บสำหรับทดลองดูได้ที่นี่
ถ้า geometry ไม่ซับซ้อน ประสบการณ์ใช้งานจะลื่นไหลมาก
สักวันหนึ่งฉันอยากเข้าไปดูโค้ดแล้วแทนที่กล่องโต้ตอบโมดัลที่บอกว่า “ไม่สามารถสร้าง constraint ได้”
มันมี glyph แบบคงที่สำหรับทุก code point ใน BMP และยังรวม code point ของบาง plane อื่นด้วย
จึงมีประโยชน์สำหรับ editor ที่ต้องแก้ไขข้อความ Unicode โดยไม่ต้องมีความรู้เรื่องการเรนเดอร์ตามภาษา
แต่เมื่อใช้สคริปต์ซับซ้อนอย่าง Devanagari ก็จะไม่มี shaping จึงไม่แสดงผลเหมือนข้อความจริง
คือเอาไว้แสดงอักขระเมื่อฟอนต์อื่นหา glyph ไม่เจอ
สุดท้ายเลยใช้ Jigmo ฟอนต์ ซึ่งมี glyph CJK ครบที่สุด
The Mostly Complete Unicode Spiral
ทั้งหมดดูเหมือนกาแล็กซีมาก และการที่อีโมจิเรียงอยู่ขอบนอกก็น่าประทับใจ สนุกดีที่ได้ลองหาอีโมจิโลก
ดังนั้น สคริปต์ซับซ้อน เช่น Indic หรือ Arabic จึงเรนเดอร์ได้ไม่ถูกต้อง
ในกรณีแบบนี้ต้องใช้ฟอนต์ OpenType และ Unifont ก็เหมาะเป็นเพียง ฟอนต์ fallback เท่านั้น
ปิดการดาวน์โหลดเว็บฟอนต์ด้วย และฉันก็มีตัวอักษรที่สร้างเองอยู่ใน CSUR (ConScript Unicode Registry)
ใน Qt การตั้งค่า DPI ค่อนข้างจุกจิก แต่แก้ได้ด้วย
QT_FONT_DPI=128แล้วก็อยากให้เกมอย่าง RimWorld ใช้แต่ Unifont เหมือนกันเพราะระบบ font fallback ดันเลือก Unifont ก่อนอย่างแปลก ๆ
ไม่อย่างนั้นจะเดาไม่ได้เลยว่าสุดท้ายมันจะเลือกฟอนต์ไหน
เคยมีอาการคล้ายกันกับ Noto Color Emoji เหมือนกัน โลกของฟอนต์นี่ละเอียดอ่อนจริง ๆ
https://github.com/remysucre/cuniform