Il y a quelque temps, j’ai trouvé intéressant Jetendard (JetBrains Mono Nerd Font + Pretendard), présenté ici. Jusqu’à présent, ce genre de police composite se résumait généralement à utiliser une combinaison choisie par la personne qui l’avait créée. Mais certaines personnes peuvent vouloir créer leur propre combinaison, par exemple la police A pour l’anglais et la police B pour le coréen. J’ai donc créé un outil permettant à n’importe qui de le faire directement via une interface graphique.
Fusionner deux polices en CLI n’est pas difficile en soi. Avec fontTools, c’est vite fait. La partie pénible vient ensuite : changer les options, refusionner, installer pour vérifier. Chaque cycle prend plusieurs minutes, et comme il faut aussi définir la police dans l’IDE, c’est assez fastidieux. font-moeum est une application desktop qui se concentre sur la réduction de cette boucle à quelques secondes. Elle prend exactement deux polices, une anglaise et une coréenne (TTF/OTF), et les fusionne en un seul TTF.
Une fois la fusion terminée, le résultat est chargé immédiatement et peut être testé en tapant directement dans la zone d’aperçu, sans installation. La taille et la hauteur de ligne se règlent en temps réel via CSS, sans refusion. Si vous modifiez une option, la fusion est relancée automatiquement. Pour les glyphes présents dans les deux polices, comme le latin, les chiffres ou la ponctuation, un swap A/B permet de comparer en un clic la police d’où ils seront pris.
Il existe deux modes.
Le mode normal effectue une fusion complète avec fontTools Merger et conserve les proportions originales du coréen, ce qui convient aux documents et aux interfaces utilisateur.
Le mode police de codage utilise un moteur dédié : il prend une police A à chasse fixe comme base, puis copie les glyphes coréens de B en les redimensionnant et en les centrant dans des cellules dont la largeur est un multiple entier de la largeur latine (2:1 par défaut). Ainsi, dans les terminaux et éditeurs, deux caractères latins et un caractère coréen s’alignent exactement. L’échelle du coréen, le multiple de largeur, le décalage vertical, l’inclusion des hanja et la composition des jamos (ccmp) peuvent être réglés dans le panneau avancé. Si A n’est pas à chasse fixe, la fusion est refusée.
L’implémentation repose sur Tauri v2 + React. Le moteur de fusion intègre Python fontTools empaqueté en exécutable unique avec PyInstaller, embarqué comme sidecar. La fusion utilise fontTools tel quel. Pour afficher immédiatement le résultat, l’API FontFace de la webview était pratique, d’où cette architecture. Les OTF (CFF) sont converties en TTF avec cu2qu au chargement avant fusion. Comme cela entraîne une approximation des courbes et la perte du hinting CFF, un badge « OTF→TTF » est affiché sur l’emplacement, et les OTF variables CFF2 sont refusées. La sortie est toujours en TTF.
Des builds Windows (installeur et zip portable), macOS (Apple Silicon) et Linux (AppImage/deb) sont disponibles. En l’absence de signature de code, Windows affiche un avertissement SmartScreen, et comme macOS n’a pas de notarisation, il faut exécuter une fois xattr -cr. L’application n’inclut aucune police.
Le respect des licences des polices à fusionner relève de la responsabilité de l’utilisateur (le Reserved Font Name de l’OFL ne peut pas être réutilisé dans le nom de sortie).
Le projet est sous licence MIT. Comme combinaison d’exemple, il utilise D2Coding + JetBrains Mono (OFL). Si vous rencontrez des polices qui ne fusionnent pas ou des combinaisons au rendu étrange, merci de le signaler via une issue.
Aucun commentaire pour le moment.