static AUTOMATA_HISTORY_INFO g_AH_Stack[MAX_AUTOMATA_HISTORY_LENGTH]; // Automata History Stack
static AUTOMATA_HISTORY_INFO g_AH_Stack_backup[MAX_AUTOMATA_HISTORY_LENGTH]; // Automata History Stack
-static int g_AH_Stack_ptr=0;
-static int g_AH_Stack_ptr_backup=0;
+static int g_AH_Stack_ptr = 0;
+static int g_AH_Stack_ptr_backup = 0;
#ifndef TRUE
#define TRUE 1
p_LastSIPKey = SIPKEY_ERROR;
}
- if(p_SIPKey == (short)SIPKEY_ERROR) {
+ if (p_SIPKey == (short)SIPKEY_ERROR) {
return ACTION_ERROR_KEY(p_SIPKey, p_madecode);
}
- if(p_SIPKey == (short)SIPKEY_BACKSPACE) {
+ if (p_SIPKey == (short)SIPKEY_BACKSPACE) {
return ACTION_BACKSPACE_KEY(p_SIPKey, p_madecode);
}
pushEnvToAutomataHistoryStack(current_state, g_makecode); //현재 오토마타 환경을 Stack에 저장하고 Next State로 이동한다.
switch (current_state) {
-
case EMPTY_STATE : //current_State 가 EMPTY_STATE 일 경우
if (p_isJAEUM == TRUE) { //입력문자가 자음이면
current_state = CHO_STATE; //NEXT_STATE로 CHO_STATE를 Setting
void ACTION_CHO_2_CHO_JUNG(short p_SIPKey, MADECODE *p_madecode)
{
-
#ifdef CJI_DEBUG
/* Pre Condition */
ASSERT(p_SIPKey >= 0 && p_SIPKey < 3); //천지인만 허용
void ACTION_CHO_JUNG_2_CHO_JUNG(short p_SIPKey, short p_jung_idx, MADECODE *p_madecode)
{
-
#ifdef CJI_DEBUG
/* Pre Condition */
ASSERT(p_jung_idx >= 0 && p_jung_idx < JUNG_TABLE_SIZE);
void ACTION_CHO_JUNG_2_CHO(short p_SIPKey, MADECODE *p_madecode)
{
-
#ifdef CJI_DEBUG
/* Pre Condition */
ASSERT(p_SIPKey >= 0 && p_SIPKey < CHO_TABLE_SIZE);
bool ACTION_ERROR_KEY(short p_SIPKey, MADECODE *p_madecode)
{
bool ret = FALSE;
- if(current_state != EMPTY_STATE) {
+ if (current_state != EMPTY_STATE) {
ret = TRUE;
}
+
p_madecode->size = g_makecode.size;
p_madecode->ucode[0] = g_makecode.ucode[0];
p_madecode->ucode[1] = g_makecode.ucode[1];
bool ACTION_BACKSPACE_KEY(short p_SIPKey, MADECODE *p_madecode)
{
- switch(current_state) {
+ switch (current_state) {
case EMPTY_STATE:
{
return FALSE;
case CHO_JUNG_STATE:
case NOCHO_JUNG_ERROR_STATE:
{
- if(BS_MOEUMInfo_Automata[g_makecode.jung_idx] != EMPTY_CODE) {
+ if (BS_MOEUMInfo_Automata[g_makecode.jung_idx] != EMPTY_CODE) {
g_makecode.jung_idx = BS_MOEUMInfo_Automata[g_makecode.jung_idx];
g_makecode.size = 1; //조합중인 코드 사이즈 1
- if(current_state == CHO_JUNG_STATE) {
+ if (current_state == CHO_JUNG_STATE) {
g_makecode.ucode[0] = getUnicodeWithCHO_JUNG(g_makecode.cho_idx, g_makecode.jung_idx); //조합중인 글자의 유니코드
} else { /* NOCHO_JUNG_ERROR_STATE */
g_makecode.ucode[0] = JUNGUnicodeTable[g_makecode.jung_idx] + COMPENSATE_VALUE_FOR_JUNGUCODE; //조합중인 글자의 유니코드
void ACTION_CHO_JUNG_CHO_2_CHO(short p_SIPKey, MADECODE *p_madecode)
{
-
#ifdef CJI_DEBUG
/* Pre Condition */
ASSERT(p_SIPKey >= 0 && p_SIPKey < CHO_TABLE_SIZE);
/* Post Condition */
ASSERT(g_makecode.cho_idx >= 0 && g_makecode.cho_idx < CHO_TABLE_SIZE);
#endif // CJI_DEBUG
-
}
/**
void ACTION_CHO_JUNG_CHO_2_CHO_JUNG(short p_SIPKey, MADECODE *p_madecode)
{
-
#ifdef CJI_DEBUG
/* Pre Condition */
ASSERT(p_SIPKey >= 0 && p_SIPKey < CHO_TABLE_SIZE);
/* Post Condition */
ASSERT(g_makecode.cho_idx >= 0 && g_makecode.cho_idx < CHO_TABLE_SIZE);
#endif // CJI_DEBUG
-
}
-
/**
* ACTION_CHO_JUNG_SINGLEJONG_2_CHO_JUNG_SINGLEJONG_CHO : CHO_JUNG_SINGLEJONG_STATE에서 CHO_JUNG_SINGLEJONG_CHO_STATE로 갈때 처리 - 초성 입력이지만 조합 완료시키지 않음
* - 입력
void ACTION_CHO_JUNG_SINGLEJONG_CHO_2_CHO(short p_SIPKey, MADECODE *p_madecode)
{
-
#ifdef CJI_DEBUG
/* Pre Condition */
ASSERT(p_SIPKey >= 0 && p_SIPKey < CHO_TABLE_SIZE);
/* Post Condition */
ASSERT(g_makecode.cho_idx >= 0 && g_makecode.cho_idx < CHO_TABLE_SIZE);
#endif // CJI_DEBUG
-
}
/**
void ACTION_CHO_JUNG_SINGLEJONG_CHO_2_CHO_JUNG(short p_SIPKey, MADECODE *p_madecode)
{
-
#ifdef CJI_DEBUG
/* Pre Condition */
ASSERT(p_SIPKey >= 0 && p_SIPKey < CHO_TABLE_SIZE);
void ACTION_CHO_JUNG_SINGLEJONG_2_CHO_JUNG(short p_SIPKey, MADECODE *p_madecode)
{
-
#ifdef CJI_DEBUG
/* Pre Condition */
ASSERT(p_SIPKey >= 0 && p_SIPKey < 3); //천지인
void ACTION_CHO_JUNG_SINGLEJONG_2_CHO(short p_SIPKey, MADECODE *p_madecode)
{
-
-
#ifdef CJI_DEBUG
/* Pre Condition */
ASSERT(p_SIPKey >= 0 && p_SIPKey < CHO_TABLE_SIZE);
#endif // CJI_DEBUG
return (((p_cho_idx * 21) + p_jung_idx - 2) * 28) + 0xAC00;
-
}
/**
#endif // CJI_DEBUG
return (((p_cho_idx * 21) + p_jung_idx - 2) * 28) + (p_jong_idx + 1) + 0xAC00;
-
}
-
/**
* 종성과 입력된 키가 결합한 이중 자음의 인덱스를 가져온다.
* 종성과 입력된 SIPKey가 결합되어 이중자음을 생성할 때 사용 : Sparse Matrix 이나 프로그램으로 해결
#endif // CJI_DEBUG
// 조합완료 문자만들기
- if(g_makecode.jung_idx == CHUN_MOEUM_AUTOMATA_INDEX || g_makecode.jung_idx == CHUN_CHUN_MOEUM_AUTOMATA_INDEX) { // "." 이거나 ".." 인 경우 처리
+ if (g_makecode.jung_idx == CHUN_MOEUM_AUTOMATA_INDEX || g_makecode.jung_idx == CHUN_CHUN_MOEUM_AUTOMATA_INDEX) { // "." 이거나 ".." 인 경우 처리
p_madecode->size = 2; //조합 완료된 글자의 코드 사이즈 2
p_madecode->ucode[0] = HCJAMOUnicodeTable[CHO2HCJAMOTable[g_makecode.cho_idx]]; //조합 완료된 글자의 유니코드
p_madecode->ucode[1] = JUNGUnicodeTable[g_makecode.jung_idx]; //조합 완료된 글자의 유니코드
g_makecode.cho_idx = EMPTY_CODE; //초성은 비어있음
g_makecode.jong_idx = EMPTY_CODE; //종성은 비어있음
g_makecode.size = 1; //조합중인 코드 사이즈 1
- if(g_makecode.jung_idx == CHUN_MOEUM_AUTOMATA_INDEX || g_makecode.jung_idx == CHUN_CHUN_MOEUM_AUTOMATA_INDEX) { // "." 이거나 ".." 인 경우 처리
+ if (g_makecode.jung_idx == CHUN_MOEUM_AUTOMATA_INDEX || g_makecode.jung_idx == CHUN_CHUN_MOEUM_AUTOMATA_INDEX) { // "." 이거나 ".." 인 경우 처리
g_makecode.size = 1; //조합중인 글자의 코드 사이즈 2
g_makecode.ucode[0] = JUNGUnicodeTable[g_makecode.jung_idx]; //조합중인 글자의 유니코드
} else {
*/
void pushEnvToAutomataHistoryStack(int p_state, MAKECODE p_tmp_makecode)
{
-
#ifdef CJI_DEBUG
/* Pre Condition */
ASSERT(p_state > EMPTY_STATE);
#endif // CJI_DEBUG
return;
-
}
/**
0x1173, /* 20 ㅡ */
0x1174, /* 21 ㅢ */
0x1175, /* 22 ㅣ */
-
};
-
/**
* 모음 오토마타
* - 현재 모음과 입력된 모음(천지인)이 결합하여 생성되는 모음의 index를 표시
/* 20 ㅡ */ {15, COMBINATION_FAIL, 21, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, 21, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL},
/* 21 ㅢ */ {COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL},
/* 22 ㅣ */ {2, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL, COMBINATION_FAIL},
-/* 23 EMPTY */ {0, 20, 22, 2, 4, 6, 8, 10, 14, 15, 19, 20, 22, 3, 7, 5, 9,},
+/* 23 EMPTY */ {0, 20, 22, 2, 4, 6, 8, 10, 14, 15, 19, 20, 22, 3, 7, 5, 9, },
};
-
/**
* 종성의 Unicode 값 정의
*/
{INVALID, INVALID}, /* 24 ㅌ */
{INVALID, INVALID}, /* 25 ㅍ */
{INVALID, INVALID}, /* 26 ㅎ */
-
};
-
/**
* HCJAMO(Hangul Compatibility Jamo) Unicode Table
* - 초성이나 중성, 종성등이 조합되지 않고 단독으로 쓰일 때는 Unicode Hangul Compatibility Jamo 를 사용해야 한다.
0x314C, /* 27 ㅌ */
0x314D, /* 28 ㅍ */
0x314E, /* 29 ㅎ */
-
};
/**