* gxlib를 사용하려는데 폰트가 bdf 타입이라 좀 꺼림직해서 (크기가 3메가다 되기 때문에) 시작.
* 조합형 한글의 경우 16비트 (2바이트)를 사용하여 한 글자를 나타내며
제일 상위 첫 비트는 한/영 구분, 그 뒤로 5개 비트씩 나누어 초/중/종성으로 사용됨
(상위 비트가 초성, 하위비트가 종성)
와 같이 구별할 수 있다.
-------------------------------------------------------------------------------------
* FILL CODE는 '가' 와 같이 종성이 없는 문자를 나타낼 때 마지막 5 bit를 채우기 위해
사용된다.
-------------------------------------------------------------------------------------
각 위치로부터 순차적인 32개(16x16 픽셀의 경우) 가 초/중/종성을 나타내는 폰트의 비트열이다.
* 조합형 한글의 경우 16비트 (2바이트)를 사용하여 한 글자를 나타내며
제일 상위 첫 비트는 한/영 구분, 그 뒤로 5개 비트씩 나누어 초/중/종성으로 사용됨
(상위 비트가 초성, 하위비트가 종성)
초성 (19개)
- ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
중성 (21개)
- ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ
종성 (27개)
- ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ와 같이 구별할 수 있다.
-------------------------------------------------------------------------------------
* FILL CODE는 '가' 와 같이 종성이 없는 문자를 나타낼 때 마지막 5 bit를 채우기 위해
사용된다.
-------------------------------------------------------------------------------------
* 종성 무
초 :
0 벌 - ㅏ, ㅐ, ㅑ, ㅒ, ㅓ, ㅔ, ㅕ, ㅖ, ㅣ
1 벌 - ㅗ , ㅛ, ㅡ
2 벌 - ㅜ , ㅠ
3 벌 - ㅘ, ㅙ, ㅚ, ㅢ
4 벌 - ㅝ, ㅞ, ㅟ
중 :
0 벌 - ㄱ,ㅋ
1 벌 - ㄱ ㅋ 이외의 자음
* 종성 유
초:
5 벌 - ㅏ, ㅐ, ㅑ, ㅒ, ㅓ, ㅔ, ㅕ, ㅖ, ㅣ
6 벌 - ㅗ, ㅛ, ㅡ ㅜ, ㅠ
7 벌 ㅘ, ㅙ, ㅚ, ㅢ, ㅝ, ㅞ, ㅟ
중:
2 벌 - ㄱ,ㅋ
3 벌 - ㅋ,ㅋ 이외의 자음
종 :
0 벌 - ㅏ, ㅑ, ㅘ
1 벌 - ㅓ, ㅕ, ㅚ, ㅝ, ㅟ, ㅢ, ㅣ
2 벌 - ㅐ, ㅒ, ㅔ, ㅖ, ㅙ, ㅞ
3 벌 - ㅗ, ㅛ, ㅜ, ㅠ, ㅡ
초성
0~7 벌 : 각 자음과 결합시 사용됨
종성의 유, 무 그리고 자음의 종류로 어떠한 벌이 사용될지 결정됨
중성
0, 1 벌 : ㄱ, ㅋ 과 결합시 사용됨
2, 3 벌 : ㄱ, ㅋ 이외의 자음과 결합시 사용됨
초성이 무엇이냐로 결정됨
종성
0~4 벌 : 각 자음과 결합시 사용됨
각 자음의 종류로 결정됨
종성이 없는 '가' 의 경우
중성의 번호가 'ㄱ' 이므로 초성은 0벌 사용, 중성은 초성이 'ㄱ' 이므로 0벌 사용
종성이 있는 '각' 의 경우
중성의 번호가 'ㄱ' 이므로 초성은 5벌 사용, 중성은 초성이 'ㄱ' 이므로 2벌 사용, 종성은 중성이 'ㅏ' 이므로 0벌 사용
-------------------------------------------------------------------------------------
조합형 폰트 한벌은 아래와 같이 구성됨
(초성 8벌과 중성 4벌, 종성 4벌)
X ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
X ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
X ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
X ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
X ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
X ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
X ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
X ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
X ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ
ㅢ ㅣ X ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ
ㅠ ㅡ ㅢ ㅣ X ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ
ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ X ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ
ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ X ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ
ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ X ㄱ ㄲ ㄳ
ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ
ㅋ ㅌ ㅍ ㅎ X ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ
ㅁ ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ X ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ
ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ
X는 없는 폰트
가로 20 세로 18 도합 360
16x16 픽셀의 경우 문자 하나당 32 바이트가 필요하고
이를 계산해보면 32 * 360 = 11520 바이트이다.
각 음소(?)에 해당하는 폰트의 위치 계산법
초성위치 :
(음소의 인덱스 + (초성 갯수 * 초성 벌 번호)) * 32
중성중성 :
(음소의 인덱스 + (중성 갯수 * 중성 벌 번호) + (초성 벌수 * 초성 갯수)) * 32
종성종성 :
(음소의 인덱스 + (종성 갯수 * 종성 벌 번호) + (초성 벌수 * 초성 갯수) + (중성 벌수 * 중성 벌 크기)) * 32
각 위치로부터 순차적인 32개(16x16 픽셀의 경우) 가 초/중/종성을 나타내는 폰트의 비트열이다.
음소 인덱스는 0 부터시작하며 초/중/종 성 모두 0번은 사용되지 않고 1번부터 사용된다.
그래서 초성 20개, 중성 22개, 종성 28개의 음소 인덱스를 가진다.
/*
각 음절의 순서를 부여하기 위해서 필요함
사용 인덱스 : CHO_SUNG / JOONG_SUNG / JONG_SUNG
*/
static const unsigned char hangul_index_table[3][32] = {
/* 초성 */ { 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 },
/* 중성 */ { 0, 0, 0, 1, 2, 3, 4, 5, 0, 0, 6, 7, 8, 9, 10, 11, 0, 0, 12, 13, 14, 15, 16, 17, 0, 0, 18, 19, 20, 21 },
/* 종성 */ { 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 }
};
/*
폰트의 벌 수를 알아내기 위해 사용
사용 인덱스 : CHO_WITHOUT_JONG / CHO_WITH_JONG / JONG
*/
static const unsigned char bul_index_table[3][22] = {
/*
초성 0벌 : ㅏ ㅐ ㅑ ㅒ ㅓ ㅕ ㅔ ㅖ ㅣ
초성 1벌 : ㅗ ㅛ ㅡ
초성 2벌 : ㅜ ㅠ
초성 3벌 : ㅘ ㅙ ㅚ ㅢ
초성 4벌 : ㅝ ㅞ ㅟ
ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ */
/* WITHOUT_JONG */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 1, 2, 4, 4, 4, 2, 1, 3, 0 },
/*
초성 5벌 : ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅣ
초성 6벌 : ㅗ ㅛ ㅡ ㅜ ㅠ
초성 7벌 : ㅘ ㅙ ㅚ ㅢ ㅝ ㅞ ㅢ
ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ */
/* WITH_JONG */ { 0, 6, 6, 6, 6, 6, 6, 6, 6, 7, 8, 8, 8, 7, 7, 8, 8, 8, 7, 7, 8, 6 },
/*
종성 0벌 : ㅏ ㅑ ㅘ 와 결합
종성 1벌 : ㅓ ㅕ ㅚ ㅝ ㅟ ㅢ ㅣ 와 결합
종성 2벌 : ㅐ ㅒ ㅔ ㅖ ㅙ ㅞ
종성 3벌 : ㅗ ㅛ ㅜ ㅠ ㅡ
ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ */
/* JONG */ { 0, 0, 2, 0, 2, 1, 2, 1, 2, 3, 0, 2, 1, 3, 3, 1, 2, 1, 3, 3, 1, 1 }
};
/*
각 음절의 순서를 부여하기 위해서 필요함
사용 인덱스 : CHO_SUNG / JOONG_SUNG / JONG_SUNG
*/
static const unsigned char hangul_index_table[3][32] = {
/* 초성 */ { 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 },
/* 중성 */ { 0, 0, 0, 1, 2, 3, 4, 5, 0, 0, 6, 7, 8, 9, 10, 11, 0, 0, 12, 13, 14, 15, 16, 17, 0, 0, 18, 19, 20, 21 },
/* 종성 */ { 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 }
};
/*
폰트의 벌 수를 알아내기 위해 사용
사용 인덱스 : CHO_WITHOUT_JONG / CHO_WITH_JONG / JONG
*/
static const unsigned char bul_index_table[3][22] = {
/*
초성 0벌 : ㅏ ㅐ ㅑ ㅒ ㅓ ㅕ ㅔ ㅖ ㅣ
초성 1벌 : ㅗ ㅛ ㅡ
초성 2벌 : ㅜ ㅠ
초성 3벌 : ㅘ ㅙ ㅚ ㅢ
초성 4벌 : ㅝ ㅞ ㅟ
ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ */
/* WITHOUT_JONG */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 1, 2, 4, 4, 4, 2, 1, 3, 0 },
/*
초성 5벌 : ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅣ
초성 6벌 : ㅗ ㅛ ㅡ ㅜ ㅠ
초성 7벌 : ㅘ ㅙ ㅚ ㅢ ㅝ ㅞ ㅢ
ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ */
/* WITH_JONG */ { 0, 6, 6, 6, 6, 6, 6, 6, 6, 7, 8, 8, 8, 7, 7, 8, 8, 8, 7, 7, 8, 6 },
/*
종성 0벌 : ㅏ ㅑ ㅘ 와 결합
종성 1벌 : ㅓ ㅕ ㅚ ㅝ ㅟ ㅢ ㅣ 와 결합
종성 2벌 : ㅐ ㅒ ㅔ ㅖ ㅙ ㅞ
종성 3벌 : ㅗ ㅛ ㅜ ㅠ ㅡ
ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ */
/* JONG */ { 0, 0, 2, 0, 2, 1, 2, 1, 2, 3, 0, 2, 1, 3, 3, 1, 2, 1, 3, 3, 1, 1 }
};
'프로그래밍 > 폰트_문자열_인코딩' 카테고리의 다른 글
일단 한글 표준 코드에 관한 읽을만한 글 (0) | 2014.01.21 |
---|---|
헷갈리는 한글판단 in utf-8, unicode, euc-kr (0) | 2014.01.21 |
유니코드 처리 (0) | 2011.04.13 |
unicode, encoding, utf-8, euck-kr, charmap, charset (0) | 2011.04.13 |
CString을 string으로 바꾸면서 해준 내용들... (0) | 2008.02.14 |