조합형 글꼴의 기술 분석

한글 인코딩에 관한 조합형 완성형 논쟁은 유니코드에서 완성형과 조합형 모두를 수용하는 방식으로 종결되었지만, 한글 글꼴 구현에는 조합형 완성형 논쟁의 잔재가 아직까지도 남아 있고 글꼴을 갖다 써야 하는 곳에 따라서 과거의 조합형 글꼴을 아직도 써야 하는 경우가 생길 수도 있다. 당장 일부 한글 글꼴이 완성형 2350자 이외의 글자에 대한 글리프가 없어서 해당 글자를 입력하면 깨지는 것도 이 시기의 잔재이다. 디스플레이 화소 수가 적고 메모리 공간이 KB 대에서 노는 임베디드 환경이라면 조합형 글꼴(조합형 인코딩이 아님!)로 한글을 표시하는 게 유리할 수 있다. 한글 낱자가 들어오면 그것들을 나눗셈과 나머지 연산으로 자소 단위로 분해하고 수백개의 글리프 중 최대 3개를 OR 조합해서 표시하는 게 2350/11172자 모두의 글리프를 들고 있다가 표시하는 것보다 데이터 양은 더 적게 필요하다. 그 동안 도스 시절의 한글 바이오스나 컴퓨터 역사 초기의 한글 구현을 분석하면서 알게 되었던 각종 조합형 글꼴 구성을 이 글에서 정리하고자 한다.

8x4x4 조합형 글꼴

상당히 많은 곳에서 쓰이고 있는 조합형 글꼴 구성 방식이다. 원리는 지금도 잘 알려져 있고 명세를 구하는 것도 어렵지 않다(링크). 초성 8벌, 중성 4벌, 종성 4벌에 해당하는 글리프를 미리 만들어 두고 자모의 종류에 따라서 서로 다른 글리프를 사용한다. 8x4x4 조합형의 구현체는 많은 곳에서 찾을 수 있기 때문에 해당 조합 방식의 글꼴을 사용하는 곳과 추출하는 방법만을 여기에서 소개한다.

  • 글꼴 통합 변환기(링크): 8x4x4 조합형 글꼴을 BDF나 TTF 형식으로 변환할 수 있다.
  • 한글을 자유롭게 1.54(링크): 실행 파일 한 개로 구성된 한글 바이오스이다. 실행 파일 자체는 DIET 패커로 압축되어 있기 때문에 일단 압축을 풀어 주어야 비트맵을 추출할 수 있다. 글꼴은 한 종류만 들어가 있다.
  • 한글 1.2, 1.5: 이 시기의 한글은 HFT 글꼴을 사용하지 않았고 프린터용 PFT와 화면용 SFT 글꼴을 사용했다. SFT 파일 형식은 헤더 32바이트만 잘라내면 나머지는 바이너리 비트맵이다.
  • 태백한글 1.01, 1.5, 2.0, 3.0, 3.5: 글꼴은 전 버전 모두 FNT 확장자를 사용하며, 바이너리 비트맵이기 때문에 글꼴 통합 변환기에서 처리가 가능하다. 단 태백한글 3.0 이후의 24×24 등 16×16 초과 글꼴은 글꼴 통합 변환기로는 처리가 불가능하다.
  • 미니 한글 라이브러리: 소스 코드의 FONT.C 파일에 8x4x4 비트맵이 하드코딩되어 있다.
  • HT: 실행 파일은 LZEXE로 압축되어 있다. 파일의 압축을 풀면 8x4x4 비트맵이 내장되어 있다.
  • 도깨비 1.2, 1.?: FNT 파일은 8x4x4 조합을 사용하고 있다.

10x4x4 조합형 글꼴

8x4x4 조합형에서 초성 글리프가 두 벌 더 들어간 형태이다. 중성과 종성 조합 규칙은 8x4x4와 동일하나 초성 조합 규칙은 살짝 다르다. 글꼴 통합 변환기의 hanlib/Table8x4x4.c 파일과 hanlib/Table10x4x4.c 파일을 비교하면서 보면 이해할 수 있다. 아래에 있는 두 종류의 10x4x4 조합형 글꼴은 높이 문제 때문에 그대로 통합 변환기에 전달할 수는 없으며 적절하게 높이를 조정해 줘야 한다.

  • GSVIP(금성 한글 BIOS) 3.52: 글꼴은 GSF 확장자를 사용한다. 용량을 줄이기 위해서인지 16×16 글꼴임에도 불구하고 초성, 중성, 종성의 세로 높이는 각각 벌마다 일정하지 않다. 아래 그림은 의도적으로 16×16 사각형에 모든 벌을 출력하도록 설정했으나, 초성과 종성은 세로 출력 위치를 조정해 주어야 제대로 된 글자를 볼 수 있다.
  • HECON(대우통신 한글 BIOS) 4.00.20: HECON.EXE 파일에 내장된 글꼴도 이 쪽에 속하지만 역시 높이가 일정하지 않다. HE24.SYS 파일의 24×24 한글 글꼴은 12x2x4 조합을 사용한다.
GSVIP 한글 글꼴 예제
GSVIP 한글 글꼴 예제

14x6x4 조합형 글꼴

아직까지 이 조합형을 사용하는 곳은 삼보컴퓨터 계열밖에 보지 못했다. 초성 벌 수가 상당히 많이 들어가 있다는 것이 특징이며, 중성은 x6이라고 쓰기는 했으나 일부 중성만 6벌이 들어가 있고 대부분 중성은 3벌만 들어가 있다. 아직까지 정확한 조합 방법을 찾지는 못했다. 특이하게 아래아가 중성 조합 중에 들어가 있다.

  • TGHP 1.20: HAN16.FNT와 HAN24.FNT에 각각 16×16, 24×24 글꼴이 들어가 있다. 24×24 글꼴은 초성 조합 벌 수가 13이나 12벌인 경우가 있다.
  • GHCON 1.0: GHCON.DAT 파일 내에 모든 것이 다 들어가 있다.
GHCON 한글 글꼴 예제

기타 조합형 글꼴

  • 도깨비 한글 5.1: DKB16.FNT 파일을 열어 보면 일부 자모는 완성되어 있고 일부 자모는 거기에 추가로 조합된다. 저작권 공지: “한글도깨비 폰트카드를 한글도깨비4 이외의 용도로 사용할 경우 반드시 저작권자의 사전 동의를 받아야 합니다.”
  • 한메 한글 1.01, 3.1: HANME.FNT 파일은 5x2x3 조합을 사용하지만 BE/HAN.FNT 파일은 8x4x4 조합을 사용한다.
  • 한라프로 3.0: 다양한 조합형 글꼴을 구현하고 있는 한글 라이브러리이다. 각각 글꼴 처리법은 소스 코드에서 참조가 가능할 듯.
    • HAN10MD1.FNT: 10x4x4
    • HAN121GD.FNT: 1x2x1
    • HAN113GD.FNT: 1x1x3
    • HAN212GD.FNT: 2x1x2
    • HAN213GD.FNT: 2x1x3
    • HAN412GS.FNT: 4x1x2
    • HAN5GD1.F24: 5x2x2, 24×24
    • HAN7GD1.F24: 7x2x2, 24×24
    • HAN8GD1.FNT: 8x4x4
  • 한맥한글 3.0: 글꼴마다 조합 규칙이 살짝살짝 다르다.
  • 우리글 2.1 데모: HANPAN3.HSF 파일에서 10x2x2 조합을 사용한다.

분석 유틸리티

  • Crystaltile2(https://www.romhacking.net/utilities/818/): 바이너리 파일에 있는 데이터를 임의의 크기 비트맵으로 간주하여 볼 수 있는 유틸리티이다. 압축되지 않은 한글 비트맵 글꼴을 분석할 때 간편하게 사용할 수 있다.