본문 바로가기

프로그래밍/폰트_문자열_인코딩

조합형 폰트 출력

* gxlib를 사용하려는데 폰트가 bdf 타입이라 좀 꺼림직해서 (크기가 3메가다 되기 때문에) 시작.

* 조합형 한글의 경우 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 }
};







Calendar
«   2024/05   »
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 28 29 30 31
Archives
Visits
Today
Yesterday