기술을 얘기한다 2008.12.22 01:44
Doxygen을 설치하고 아무런 한글 관련 패치를 하지 않은 상태에서 한글로 된 코멘트를 RTF 파일로 생성하면 한글이 몽땅 깨져서 나온다. 그 이유는 두 가지. 첫째, 파일의 폰트 정보에 한글 코드 페이지, 한글 폰트 정보가 들어있지 않다는 것. 둘째, 한글이 UTF-8 인코딩으로 되어 있는데 이는 한글과 같은 코드를 RTF에서 표현하는 방법과 맞지 않다는 것.

둘째 문제를 먼저 풀어보자. 우선 UTF-8 인코딩을 EUC-KR 인코딩으로 바꾼다음 이를 RTF 의 표현 방식으로 바꿔주면 된다. RTF 표현 방식으로 바꿔주는 것은 간단한 프로그램으로 구현할 수 있는데 예를 들면 다음과 같다. (비몽사몽간에 짠 코드라 허접...)
$ cat babo.c
#include <stdio.h>

void main(int argc, char * argv[])
{
        int ch;
 
        while((ch = getchar()) != EOF) {
                if(ch & 0x80) {
                    printf("\\'%x%x", ch >> 4, ch & 0x0F);
                } else {
                    printf("%c",ch);
                }
        }
}
그렇다면 리눅스에 기본으로 깔리는 툴인 코드 변환 툴 iconv와 결합해서 간단히 변환을 할 수 있다. 이렇게 말이다.
$ iconv -f utf8 -t euc-kr refman.rtf | babo > refman-euc-kr2.rtf
이렇게 하면 한글이 깨지는 refman.rtf 파일이 제대로된 RTF 용 한글 코딩으로 된 파일로 바뀐다. 이제는 한글 폰트를 파일에 심어줄 차례다. 이것도 역시 간단하다. 파일의 맨 앞에 있는 폰트 정보를 갈아끼우면 된다. Doxygen에서 생성한 RTF 문서의 맨 앞부분은 이런 식이다.
$ head refman.rtf
{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033
{\comment Begining font list}
{\fonttbl {\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}
{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}
}
{\comment begin colors}
{\colortbl;
여기서 colortbl 어쩌고 하는 앞 부분 (코멘트 포함) 까지가 폰트 정보이다. 이 부분을 한글 폰트 정보로 엎어 쓴다. 제대로 된 한글 RTF 파일의 앞 부분은 이렇게 생겼다.
$ head refman-euc-kr2.rtf
{\rtf1\ansi\kis94\deff1\deflang1042\ansicpg949
{\fonttbl
{\f0\fnil\fcharset0\fprq0 \'b9\'d9\'c5\'c1;}
{\f1\fnil\fcharset129\fprq2 \'b9\'d9\'c5\'c1;}}
{\comment begin colors}
{\colortbl;
적당한 편집기로 원래 파일의 앞부분을 지우고 아래의 내용으로 넣어주면 한글을 제대로 볼 수 있다.

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
posted by 신묘군

티스토리 툴바