2P by jamiekim | ★ favorite | 댓글과 토론

얼마 전 여기 올라왔던 Jetendard(JetBrains Mono Nerd Font + Pretendard)를 재미있게 봤습니다. 보통 이런 합성 폰트는 지금까지 만든 분이 고른 조합을 받아 쓰는 형태였습니다. 그런데 영문은 A 폰트, 한글은 B 폰트로 나만의 조합을 만들고 싶은 사람도 있을 것 같습니다. 그래서 누구나 GUI로 직접 만들 수 있는 툴을 만들었습니다.

폰트 두 개를 CLI로 합치는 것 자체는 어렵지 않습니다. fontTools로 돌리면 금방 됩니다. 귀찮음은 그다음입니다. 옵션 바꾸고, 다시 합치고, 설치해서 확인하고. 이 한 바퀴에 몇 분씩 걸리고, IDE에 폰트를 지정 해야 하니 상당히 귀찮습니다. font-moeum(모음)은 이 루프를 몇 초로 줄이는 데 집중한 데스크톱 앱입니다. 영문 폰트와 한글 폰트 딱 두 개(TTF/OTF)를 받아 하나의 TTF로 합칩니다.

병합이 끝나면 결과를 바로 로드해 설치 없이 미리보기 영역에서 직접 타이핑해 볼 수 있습니다. 크기·줄높이는 재병합 없이 CSS로 실시간 조정됩니다. 옵션을 바꾸면 자동으로 다시 합칩니다. 라틴·숫자·문장부호처럼 양쪽에 다 있는 글리프는 어느 폰트에서 가져올지 A/B 스왑으로 클릭 한 번에 뒤집어 비교합니다.

모드는 둘입니다.

일반 모드는 fontTools Merger로 전체 병합하고 한글이 원본 비율 그대로라 문서·UI용에 맞습니다.

코딩 폰트 모드는 전용 엔진이 고정폭 A를 베이스로 B의 한글 글리프를 라틴 폭의 정수배 셀(기본 2:1)에 맞춰 스케일·중앙정렬해 복사합니다. 그러면 터미널과 에디터에서 라틴 두 칸과 한글 한 글자가 정확히 맞아떨어집니다. 한글 스케일, 폭 배수, 세로 오프셋, 한자 포함 여부, 자모 조합(ccmp) 같은 건 고급 패널에서 만질 수 있습니다. A가 고정폭이 아니면 병합을 거부합니다.

구현은 Tauri v2 + React입니다. 병합 엔진은 Python fontTools를 PyInstaller 단일 실행파일로 묶어 사이드카로 내장했습니다. 병합은 fontTools를 그대로 씁니다. 결과를 즉시 띄우는 데는 웹뷰의 FontFace API가 편해서 이런 구조가 됐습니다. OTF(CFF)는 로드 시 cu2qu로 TTF 변환 후 합칩니다. 곡선 근사와 CFF 힌팅 소실이 있어 슬롯에 "OTF→TTF" 배지로 표시하고 CFF2 가변 OTF는 거부합니다. 출력은 항상 TTF입니다.

Windows(설치판·무설치 zip)·macOS(Apple Silicon)·Linux(AppImage/deb) 빌드를 올려두었습니다. 코드 서명이 없어 Windows에선 SmartScreen 경고가 뜨고 macOS는 공증이 없어 xattr -cr을 한 번 쳐야 합니다. 앱에 폰트는 들어 있지 않습니다.

병합할 폰트의 라이선스 준수는 사용자 책임입니다(OFL의 Reserved Font Name은 출력 이름에 재사용할 수 없습니다).

MIT 라이선스입니다. 예시 조합으로는 D2Coding + JetBrains Mono(OFL)를 쓰고 있습니다. 안 합쳐지는 폰트나 어색해지는 조합을 만나면 이슈로 알려주시면 고맙겠습니다.

댓글과 토론