Vor einiger Zeit wurde hier Jetendard (JetBrains Mono Nerd Font + Pretendard) vorgestellt, was ich sehr interessant fand. Solche kombinierten Fonts waren bislang meist etwas, das man einfach in der von der Erstellerin oder dem Ersteller gewählten Kombination verwendet hat. Aber es gibt sicher auch Leute, die ihre eigene Kombination möchten, etwa mit Font A für Lateinisch und Font B für Koreanisch. Deshalb habe ich ein Tool gebaut, mit dem das jede Person direkt per GUI machen kann.
Zwei Fonts per CLI zusammenzuführen, ist an sich nicht schwierig. Mit fontTools geht das schnell. Der lästige Teil kommt danach: Optionen ändern, erneut zusammenführen, installieren und prüfen. Für diese eine Runde gehen jedes Mal einige Minuten drauf, und weil man den Font auch noch im IDE einstellen muss, ist das ziemlich umständlich. font-moeum ist eine Desktop-App, die genau darauf ausgelegt ist, diesen Loop auf wenige Sekunden zu verkürzen. Sie nimmt genau zwei Fonts für Lateinisch und Koreanisch (TTF/OTF) und kombiniert sie zu einer einzigen TTF-Datei.
Nach dem Merge wird das Ergebnis sofort geladen, sodass man ohne Installation direkt im Vorschau-Bereich tippen und testen kann. Größe und Zeilenhöhe lassen sich ohne erneuten Merge in Echtzeit per CSS anpassen. Wenn man Optionen ändert, wird automatisch neu zusammengeführt. Bei Glyphen, die in beiden Fonts vorhanden sind, etwa Latein, Ziffern oder Satzzeichen, kann man per A/B-Swap mit einem Klick umschalten und vergleichen, aus welchem Font sie übernommen werden sollen.
Es gibt zwei Modi.
Im normalen Modus wird per fontTools Merger vollständig zusammengeführt; die koreanischen Zeichen behalten dabei ihre ursprünglichen Proportionen, was sich gut für Dokumente und UIs eignet.
Im Coding-Font-Modus nimmt eine eigene Engine ein monospaced A als Basis und kopiert die koreanischen Glyphen aus B, skaliert und zentriert sie dabei in Zellen mit einem ganzzahligen Vielfachen der lateinischen Breite (standardmäßig 2:1). So passen im Terminal und Editor exakt zwei lateinische Zeichen und ein koreanisches Zeichen zusammen. Dinge wie koreanische Skalierung, Breitenfaktor, vertikaler Offset, Einbeziehung von Hanja oder Jamo-Komposition (ccmp) lassen sich im erweiterten Panel anpassen. Wenn A nicht monospaced ist, wird der Merge abgelehnt.
Die Implementierung basiert auf Tauri v2 + React. Die Merge-Engine mit Python fontTools ist als per PyInstaller gebündelte Einzeldatei als Sidecar eingebettet. Für den Merge selbst wird fontTools unverändert verwendet. Um das Ergebnis sofort anzuzeigen, war die FontFace API des Webviews praktisch, daher diese Struktur. OTF (CFF) wird beim Laden per cu2qu nach TTF konvertiert und dann zusammengeführt. Wegen Kurvenapproximation und dem Verlust von CFF-Hinting wird der Slot mit einem „OTF→TTF“-Badge markiert; variable CFF2-OTFs werden abgelehnt. Die Ausgabe ist immer TTF.
Es gibt Builds für Windows (Installer und portable zip), macOS (Apple Silicon) und Linux (AppImage/deb). Da keine Code-Signatur vorhanden ist, erscheint unter Windows eine SmartScreen-Warnung, und unter macOS ist wegen fehlender Notarisierung einmal xattr -cr nötig. Fonts sind nicht in der App enthalten.
Die Einhaltung der Lizenzen der zusammenzuführenden Fonts liegt in der Verantwortung der Nutzenden (den Reserved Font Name aus der OFL darf man nicht für den Ausgabenamen wiederverwenden).
Die App steht unter der MIT-Lizenz. Als Beispielkombination wird D2Coding + JetBrains Mono (OFL) verwendet. Wenn ihr auf Fonts stoßt, die sich nicht zusammenführen lassen, oder auf Kombinationen, die unnatürlich wirken, freue ich mich über ein Issue.
Noch keine Kommentare.