한글 8x4x4 비트맵 폰트에서 벌수에 대한 문의 드립니다.
8x4x4 비트맵 폰트를 건드리고 있는 중입니다.
참고하던 아래 자료에서 이상한 점을 발견해서요.
탁 막혀 버렸네요. 도움 부탁드립니다.
중성에 해당하는 4개의 벌수에서
중성 1벌 : 받침없는 'ㄱㅋ' 와 결합
중성 2벌 : 받침없는 'ㄱㅋ' 이외의 자음
중성 3벌 : 받침있는 'ㄱㅋ' 와 결합
중성 4벌 : 받침있는 'ㄱㅋ' 이외의 자음
로 찾았는데 여기에서 ㄱ 과 ㅋ 은 초성을 이야기 하는 것 아닌지요.
아래 소스 코드에 보면
if(last==0) { /* 먼저 종성이 있는 지 없는 지를 조사 */ bul1=cho[middle]; /* 초성 */ if(first==1||first==24) bul2=1; /* 종성 */ else bul2=2; ... /* 이부분에서 합성하고 출력하도록하죠. */ } else { bul1=cho2[middle]; /* 초성 */ if(first==1||first==24) bul2=3; /* 종성 */ else bul2=4; bul3=jong[middle]; ... }
이라고 나오는데요. first == 1 | first == 24 부분이 오타인지 아니면
제대로 한것인지 잘 모르겠네요. 조합형 코드 순서에서 초성의 경우
ㄱ은 1, ㅋ은 16이고 종성의 경우 ㄱ은 1, ㅋ은 24 입니다만...
소스를 코딩하신 분이 실수하신것인지 아니면 저렇게 체크하는것이
맞는지 잘 모르겠네요.
여기서부터는 제가 참고한 자료 일부입니다.
김성익 님의 한글 폰트 출력과 벌수와 관련한 자료 였습니다.
여기선 8x4x4에 대해 알아보죠.8x4x4벌이란 초성 8벌,중성 4벌,종성 4벌을 나타냄니다.각 벌의 구
성을 알아보죠.그럼 아마 벌이란 무엇인지 아실검니다.초성
초성 1벌 : 받침없는 'ㅏㅐㅑㅒㅓㅔㅕㅖㅣ' 와 결합
초성 2벌 : 받침없는 'ㅗㅛㅡ'
초성 3벌 : 받침없는 'ㅜㅠ'
초성 4벌 : 받침없는 'ㅘㅙㅚㅢ'
초성 5벌 : 받침없는 'ㅝㅞㅟ'
초성 6벌 : 받침있는 'ㅏㅐㅑㅒㅓㅔㅕㅖㅣ' 와 결합
초성 7벌 : 받침있는 'ㅗㅛㅜㅠㅡ'
초성 8벌 : 받침있는 'ㅘㅙㅚㅢㅝㅞㅟ'중성
중성 1벌 : 받침없는 'ㄱㅋ' 와 결합
중성 2벌 : 받침없는 'ㄱㅋ' 이외의 자음
중성 3벌 : 받침있는 'ㄱㅋ' 와 결합
중성 4벌 : 받침있는 'ㄱㅋ' 이외의 자음종성
종성 1벌 : 중성 'ㅏㅑㅘ' 와 결합
종성 2벌 : 중성 'ㅓㅕㅚㅝㅟㅢㅣ'
종성 3벌 : 중성 'ㅐㅒㅔㅖㅙㅞ'
종성 4벌 : 중성 'ㅗㅛㅜㅠㅡ'대충 감을 잡으셨겠죠? 폰트가 다음과 같이 구성되어 있습니다. 폰
트에디터같은 걸로 보시면 초성문자 8묶음,중성 4묶음,종성 4묶음 씩
되어 있을 텐데... 각 묶음은 위와 같은 조건으로 그림거지요. 그럼
출력루틴을 만들어 보지요.4. 벌수 분석
이제 한글 출력을 위한 모든 자료는 모였다고 볼수있습니다. 이제
출력을 위해 글자를 합성하기만 하면 되죠.앞에서 각 구성 코드로 나
누는 부분을 짜 보았고 이제 각 초성,중성,종성을 분석해서 벌수를
알아 내는 루틴을 만들어 보죠.역시 테이블처리를 하면 간단합니다.
unsigned char cho[]={ 0, 0,0,0,0,0,0,0,0,1,3,3,3,1,2,4,4,4,2,1,3,0 }; unsigned char cho2[]={ 0, 6,6,6,6,6,6,6,6,7,8,8,8,7,7,8,8,8,7,7,8,6 }; unsigned char jong[]={ 0, 0,2,0,2,1,2,1,2,3,0,2,1,3,3,1,2,1,3,3,1,1 }; void puthan(unsigned code) { char bul1,bul2,bul3; /* 초성,중성,종성 벌 저장변수 */ ... if(last==0) { /* 먼저 종성이 있는 지 없는 지를 조사 */ bul1=cho[middle]; /* 초성 */ if(first==1||first==24) bul2=1; /* 종성 */ else bul2=2; ... /* 이부분에서 합성하고 출력하도록하죠. */ } else { bul1=cho2[middle]; /* 초성 */ if(first==1||first==24) bul2=3; /* 종성 */ else bul2=4; bul3=jong[middle]; ... } }
바로 이렇게 bul1,bul2,bul3 형태로 나누는 검니다. 초성의 경우
중성문자에 따라 벌수를 정하고 중성은 'ㄱㅋ'인지를 조사해서 벌
수를 정하고 종성은 중성에 따라 역시 정하면 되지요.이렇게 벌수를 나누었는 데... 실제로 벌수는 어떻게 쓰일 까요?
바로 폰트를 읽어들인 버퍼에서 해당 글자의 위치를 벌수에 맞추어
이동시켜주면 됨니다.
초성이랑 비교하는게 맞는 것 같은데요.
변수 이름도 first로 되어 초성을 뜻하는 것 같고.
last == 0 안으로 들어가면 종성도 없는데 종성코드로 비교하면 이상하겠죠.
그렇다면 if문을 바꾸어야 하나요?
그렇다면 if 문 내의 비교값을 바꾸어야 하는건가요?
원래 코드
first == 1 | first == 24
아래와 같이 바꾸어야 하는지요?
first == 1 | first == 16
----
use perl;
Keedi Kim
댓글 달기