ปัญหา
- เวลาสร้างเว็บไซต์ที่เขียนโค้ด HTML และ CSS ด้วยมือ การทำ syntax highlighting ทำได้ยาก
- อยากเน้นส่วนต่างๆ ด้วยสีเพื่อให้อ่านและเข้าใจโค้ดสั้นๆ ได้ง่าย
- โดยทั่วไปต้องใช้ไลบรารี syntax highlighting ที่ซับซ้อนอย่าง Prism หรือ highlight.js
- แต่อยากเขียนแบบแฮนด์โค้ดโดยไม่ใช้สคริปต์ภายนอก
ใส่ฟีเจอร์เน้นไวยากรณ์ไว้ในตัวฟอนต์ด้วยความสามารถของ OpenType
- ปรับแต่งฟอนต์โอเพนซอร์สชื่อ Monaspace Krypton ให้มีเวอร์ชันสีของอักขระแต่ละตัวรวมอยู่ด้วย
- ใช้ตาราง COLR ของ OpenType และฟีเจอร์ context substitution เพื่อค้นหาและแทนที่สตริงเฉพาะ
- ผลลัพธ์คือได้ตัวเน้นไวยากรณ์แบบเรียบง่ายที่ฝังอยู่ในตัวฟอนต์เอง
ข้อดีและข้อเสีย
ข้อดี
- ติดตั้งง่าย: แค่นำเข้าฟอนต์แล้วเปิดใช้ฟีเจอร์ OpenType COLR (สี) และ CALT (contextual alternates)
- ไม่ต้องใช้ JavaScript
- ไม่ต้องมีธีม CSS
- เร็วพอๆ กับข้อความธรรมดา
- สามารถใส่โค้ดสั้นๆ ในแท็ก
<pre> และ <code> ได้
- ซอร์สโค้ด HTML สะอาด
- ใช้งานได้ทุกที่ที่รองรับฟีเจอร์ OpenType เช่น InDesign
- ไม่ต้องคอยบำรุงรักษาหรืออัปเดต
- ใช้งานได้ใน
<textarea> และ <input> ด้วย
ข้อเสีย
- หากต้องการปรับเปลี่ยน เช่น เปลี่ยนชุดสีหรือเพิ่มการรองรับภาษา ต้องแก้ไขไฟล์ฟอนต์
- ใช้งานได้เฉพาะในที่ที่รองรับ OpenType
- การค้นหาแพตเทิร์นด้วย OpenType context substitution ยังเป็นแบบพื้นฐาน เทียบกับสคริปต์ที่ใช้ regular expression ไม่ได้
วิธีการทำงานจริง
- ใช้ตาราง COLR ของ OpenType และฟีเจอร์ context substitution
- ตาราง COLR ทำให้สร้างฟอนต์หลายสีได้
- context substitution จะรับรู้อักขระข้างเคียงแล้วทำการแทนที่
- ตัวอย่าง: ค้นหาคีย์เวิร์ด JavaScript
if แล้วแทนที่ด้วยรูปแบบสี
สรุปโดย GN⁺
- บทความนี้นำเสนอวิธีใหม่ในการทำ syntax highlighting สำหรับคนที่เขียนเว็บไซต์ด้วยมือ
- โดยใช้ความสามารถของ OpenType เพื่อฝังการเน้นไวยากรณ์ไว้ในตัวฟอนต์ ทำให้ไม่ต้องพึ่ง JavaScript หรือธีม CSS ก็ทำ syntax highlighting ได้
- วิธีนี้เหมาะกับการเน้นไวยากรณ์แบบเรียบง่าย แต่ก็ยังมีข้อจำกัดเมื่อเทียบกับไลบรารี syntax highlighting ที่ซับซ้อนกว่า
- โปรเจ็กต์ที่ให้ความสามารถคล้ายกันมี เช่น Prism และ highlight.js
1 ความคิดเห็น
ความเห็นบน Hacker News
เป็นการแฮ็กที่น่าสนใจ
font-feature-settings: "colr", "calt";ไม่มีความหมายcolrไม่มีอยู่ในตารางเลย์เอาต์ของ OpenTypecaltถูกเปิดใช้งานโดยค่าเริ่มต้นอยู่แล้วข้อความต้นฉบับยังคงอยู่เหมือนเดิม
ผมไม่ใช่ผู้เชี่ยวชาญด้าน OpenType จึงอาจปรับปรุงตรรกะการแทนที่ได้อีก
การแฮ็กนี้ทั้งน่ากลัวและน่าทึ่ง
เป็นการแฮ็กที่ยอดเยี่ยม
มีข้อความดี ๆ อยู่ที่ด้านล่างของหน้า
ดูเหมือนว่าน่าจะทำให้เป็นอัตโนมัติด้วยโค้ดได้
มีบั๊กในเบราว์เซอร์ที่ใช้ Chromium
color: blueจะมีแค่rที่ถูกไฮไลต์เป็นฟีเจอร์ที่เจ๋งจริง ๆ
น่าจะต้องมีสิ่งที่ทำงานคล้าย parser generator
เป็นฟีเจอร์ที่น่าทึ่งจริง ๆ