2 คะแนน โดย jamiekim 16 시간 전 | ยังไม่มีความคิดเห็น | แชร์ทาง WhatsApp

เมื่อไม่นานมานี้ผมได้เห็น Jetendard (JetBrains Mono Nerd Font + Pretendard) ที่ถูกโพสต์ไว้ที่นี่แล้วรู้สึกว่าน่าสนุกดี โดยทั่วไปฟอนต์แบบผสมเช่นนี้มักเป็นการนำชุดผสมที่ผู้สร้างเลือกไว้แล้วมาใช้ แต่ก็น่าจะมีคนที่อยากสร้างชุดผสมของตัวเอง เช่น ใช้ฟอนต์ A สำหรับภาษาอังกฤษ และฟอนต์ B สำหรับภาษาเกาหลี ผมจึงทำเครื่องมือที่ใคร ๆ ก็สร้างเองได้ผ่าน GUI

การรวมฟอนต์สองตัวด้วย CLI นั้นไม่ได้ยากอะไร ใช้ fontTools ก็ทำได้อย่างรวดเร็ว ส่วนที่น่ารำคาญคือต่อจากนั้น: เปลี่ยนตัวเลือก รวมใหม่ ติดตั้งแล้วตรวจสอบ วนหนึ่งรอบใช้เวลาหลายนาที และยังต้องไปตั้งค่าฟอนต์ใน IDE อีก จึงค่อนข้างยุ่งยาก font-moeum คือแอปเดสก์ท็อปที่เน้นลดลูปนี้ให้เหลือไม่กี่วินาที โดยรับฟอนต์ภาษาอังกฤษและฟอนต์ภาษาเกาหลีอย่างละหนึ่งไฟล์ (TTF/OTF) แล้วรวมเป็น TTF ไฟล์เดียว

เมื่อรวมเสร็จแล้ว ผลลัพธ์จะถูกโหลดทันที ทำให้พิมพ์ทดสอบได้โดยตรงในพื้นที่พรีวิวโดยไม่ต้องติดตั้ง ขนาดและ line-height ปรับแบบเรียลไทม์ด้วย CSS ได้โดยไม่ต้องรวมใหม่ หากเปลี่ยนตัวเลือก ระบบจะรวมใหม่ให้อัตโนมัติ สำหรับ glyph ที่มีอยู่ทั้งสองฝั่ง เช่น ละติน ตัวเลข และเครื่องหมายวรรคตอน สามารถสลับ A/B เพื่อเปรียบเทียบว่าเอามาจากฟอนต์ไหนได้ด้วยคลิกเดียว

มีสองโหมด

โหมดทั่วไปใช้ fontTools Merger รวมทั้งหมด และคงสัดส่วนเดิมของภาษาเกาหลีไว้ จึงเหมาะสำหรับเอกสารและ UI

โหมดฟอนต์สำหรับเขียนโค้ดใช้เอนจินเฉพาะ โดยใช้ A แบบ monospace เป็นฐาน แล้วคัดลอก glyph ภาษาเกาหลีของ B มาโดยสเกลและจัดกึ่งกลางให้พอดีกับเซลล์ที่เป็นจำนวนเต็มเท่าของความกว้างละติน (ค่าเริ่มต้น 2:1) ทำให้ในเทอร์มินัลและเอดิเตอร์ ช่องละตินสองช่องกับอักษรเกาหลีหนึ่งตัวตรงกันพอดี ค่าต่าง ๆ เช่น สเกลภาษาเกาหลี ตัวคูณความกว้าง ออฟเซ็ตแนวตั้ง การรวมอักษรจีน และการประกอบ jamo (ccmp) ปรับได้จากแผงขั้นสูง หาก A ไม่ใช่ monospace จะปฏิเสธการรวม

การพัฒนาใช้ Tauri v2 + React เอนจินรวมฟอนต์ใช้ Python fontTools ที่แพ็กเป็นไฟล์รันเดี่ยวด้วย PyInstaller แล้วฝังเป็น sidecar การรวมใช้ fontTools ตามเดิม ส่วนการแสดงผลทันทีใช้ FontFace API ของ webview ซึ่งสะดวก จึงได้โครงสร้างแบบนี้ OTF (CFF) จะถูกแปลงเป็น TTF ด้วย cu2qu ตอนโหลดก่อนนำไปรวม เนื่องจากมีการประมาณเส้นโค้งและการสูญเสีย CFF hinting จึงแสดงแบจ "OTF→TTF" ในช่อง และปฏิเสธ CFF2 variable OTF ผลลัพธ์จะเป็น TTF เสมอ

มีบิลด์สำหรับ Windows (ตัวติดตั้งและ zip แบบไม่ต้องติดตั้ง), macOS (Apple Silicon) และ Linux (AppImage/deb) เนื่องจากไม่มี code signing บน Windows จะมีคำเตือน SmartScreen และบน macOS ไม่มี notarization จึงต้องรัน xattr -cr หนึ่งครั้ง แอปไม่ได้มีฟอนต์รวมมาให้

ผู้ใช้ต้องรับผิดชอบการปฏิบัติตามไลเซนส์ของฟอนต์ที่จะนำมารวมเอง (Reserved Font Name ของ OFL ไม่สามารถนำมาใช้ซ้ำเป็นชื่อเอาต์พุตได้)

ใช้ไลเซนส์ MIT ตัวอย่างชุดผสมที่ใช้คือ D2Coding + JetBrains Mono (OFL) หากเจอฟอนต์ที่รวมไม่ได้หรือชุดผสมที่ดูแปลก ๆ ช่วยแจ้งเป็น issue จะขอบคุณมากครับ

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น