कुछ समय पहले यहाँ पोस्ट हुआ Jetendard(JetBrains Mono Nerd Font + Pretendard) मुझे काफ़ी दिलचस्प लगा। आमतौर पर ऐसे composite fonts अब तक उसी रूप में इस्तेमाल किए जाते थे जैसा संयोजन बनाने वाले ने चुना हो। लेकिन शायद कुछ लोग English के लिए A font और Korean के लिए B font के साथ अपना खुद का संयोजन बनाना चाहते हों। इसलिए मैंने ऐसा टूल बनाया जिसे कोई भी GUI के जरिए सीधे बना सके.

दो fonts को CLI से merge करना अपने-आप में मुश्किल नहीं है। fontTools से चलाएँ तो जल्दी हो जाता है। असली झंझट उसके बाद है: options बदलो, फिर merge करो, install करके जाँचो। इस एक चक्र में हर बार कुछ मिनट लग जाते हैं, और IDE में font सेट करना भी पड़ता है, इसलिए यह काफ़ी झंझट वाला है। font-moeum(मोउम) एक desktop app है जो इस loop को कुछ सेकंड तक घटाने पर केंद्रित है। यह सिर्फ़ दो fonts (TTF/OTF) — एक English font और एक Korean font — लेकर उन्हें एक TTF में merge करता है.

merge पूरा होने पर आप result को तुरंत load कर सकते हैं और बिना install किए preview area में सीधे टाइप करके देख सकते हैं। size और line-height को दोबारा merge किए बिना CSS से real time में adjust किया जा सकता है। option बदलते ही यह अपने-आप फिर merge करता है। Latin, numbers और punctuation जैसे glyphs जो दोनों तरफ़ मौजूद होते हैं, उन्हें किस font से लेना है यह A/B swap से एक क्लिक में पलटकर compare किया जा सकता है।

मोड दो हैं।

सामान्य मोड fontTools Merger से पूरा merge करता है, और Korean मूल अनुपात में ही रहता है, इसलिए यह documents और UI के लिए उपयुक्त है।

coding font mode में एक dedicated engine fixed-width A को base बनाकर B के Korean glyphs को Latin width के integer multiple cells (default 2:1) में फ़िट होने लायक scale और center-align करके copy करता है। इससे terminal और editor में Latin के दो cells और एक Korean अक्षर बिल्कुल सटीक बैठते हैं। Korean scale, width multiple, vertical offset, Hanja को शामिल करना है या नहीं, और jamo composition (ccmp) जैसी चीज़ों को advanced panel में बदला जा सकता है। अगर A fixed-width नहीं है, तो merge अस्वीकार कर दिया जाता है।

implementation Tauri v2 + React में है। merge engine के लिए Python fontTools को PyInstaller single executable में बाँधकर sidecar के रूप में embed किया गया है। merge के लिए fontTools को जैसा है वैसा ही इस्तेमाल किया जाता है। result को तुरंत दिखाने के लिए webview का FontFace API सुविधाजनक था, इसलिए यह structure बना। OTF(CFF) को load करते समय cu2qu से TTF में बदलने के बाद merge किया जाता है। curve approximation और CFF hinting loss होने के कारण slot में "OTF→TTF" badge दिखाया जाता है, और CFF2 variable OTF को अस्वीकार किया जाता है। output हमेशा TTF होता है।

Windows (installer·portable zip) · macOS (Apple Silicon) · Linux (AppImage/deb) builds उपलब्ध हैं। code signing न होने के कारण Windows में SmartScreen warning दिखती है, और macOS में notarization न होने से xattr -cr एक बार चलाना पड़ता है। app में fonts शामिल नहीं हैं।

merge किए जाने वाले fonts के license का पालन करना उपयोगकर्ता की ज़िम्मेदारी है (OFL का Reserved Font Name output name में दोबारा इस्तेमाल नहीं किया जा सकता)।

यह MIT license के तहत है। उदाहरण संयोजन के रूप में D2Coding + JetBrains Mono(OFL) इस्तेमाल किया गया है। अगर कोई ऐसा font मिले जो merge नहीं होता, या कोई संयोजन अटपटा लगे, तो issue के ज़रिए बताने पर आभारी रहूँगा।

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.