www.pudn.com > mir112347628.rar > NPCTxtAnalysis.cpp
// NPCTxtAnalysis.cpp: implementation of the CNPCTxtAnalysis class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#define LINE_DIVIDER 0x01 // Line Divider
#define DEFAULT_TEXT_HEIGHT 16 // Default Text Height(as Pixel)
#define DEFAULT_TEXT_WIDTH 16 // Default Text Width(as Pixel)
#define DEFAULT_TXT_COLOR RGB(255,255,255) // WHITE COLOR
#define DEFAULT_BTN_COLOR RGB(255,255,0) // YELLOW COLOR
#define DEFAULT_BTN_CLICK_COLOR RGB(255,0,0) // RED COLOR
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CNPCTxtAnalysis::CNPCTxtAnalysis()
{
m_pxBtn = NULL;
m_pxpTxt = NULL;
m_pSourceText = NULL;
m_bReady = FALSE;
m_bInited = FALSE;
m_pxGWND = NULL;
}
CNPCTxtAnalysis::~CNPCTxtAnalysis()
{
FreeAllMsg();
}
BOOL CNPCTxtAnalysis::InitAnalysis(CTextButton *xpBtn,CPDLList* pxpTxt,CWHDXGraphicWindow* pxGWND)
{
m_pxBtn = xpBtn; // Link to Text Button Class
m_pxpTxt = pxpTxt;
ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
m_pxGWND=pxGWND;
m_bInited = TRUE;
return TRUE;
}
BOOL CNPCTxtAnalysis::FreeAllMsg(VOID)
{
if(m_bInited)
{
m_pxpTxt->ClearAllNodes(); // ºÐ¼®µÈ ±Û ¸ðµÎ ³¯¸®±â
m_pxBtn->ReleaseButtons(); // »ý¼ºµÈ ´ÜÅõ ¸ðµÎ ³¯¸®±â
}
if(m_pSourceText!=NULL)
{
delete[] m_pSourceText; // ¹ÞÀº ¼Ò½ºµµ ¸ðµÎ ³¯¸®±â
m_pSourceText = NULL;
}
m_bReady = FALSE;
return TRUE;
}
// Divider ´Â °¢ CHARº°·Î ¸ðµÎ °ËÃâÇÑ´Ù.
// °á°ú´Â ¹Þ´Â Áï½Ã Memcpy¸¦ ÇÒ°Í.. ¾Æ´Ï¸é ¾²·¹±â °ªÀ¸ µÊ...
CHAR* CNPCTxtAnalysis::GetValidStr(CHAR* szSource,CHAR* szDest,CHAR* Divider)
{
CHAR* szBuffer;
int nSrcLen;
int nBuf_Count,nCount;
int nArrCount;
szBuffer = new CHAR[MAX_BUFFER_SIZE];
nSrcLen = strlen(szSource);
nBuf_Count = 0;
nCount = 0;
if (nSrcLen >= MAX_BUFFER_SIZE - 1 ) // ÃÖ´ë ±æÀ̺¸´Ù ±æ¸é ½ÇÇàÀ» Ãë¼Ò ÇÑ´Ù.
{
ZeroMemory(szDest,sizeof(szDest));
delete[] szBuffer;
return NULL;
}
if (strlen(szSource)==0) // ¼Ò½º Text°¡ ¾øÀ¸¸é ½ÇÇàÀ» Ãë¼Ò ÇÑ´Ù.
{
ZeroMemory(szDest,sizeof(szDest));
delete[] szBuffer;
return szDest;
}
nArrCount = strlen(Divider)/sizeof(char); // DividerÀÇ ±æÀ̸¦ ±¸ÇÑ´Ù.
while(true)
{
char Ch;
if( nCount <= nSrcLen )
{
Ch=szSource[nCount];
for(int i = 0; i<= nArrCount-1;i++)
{
if(Ch == Divider[i]) // Divider °ËÃâ
{
goto CATCH_DIV;
}
}
}
if(nCount > nSrcLen)
{
CATCH_DIV:
if(nBuf_Count >0)
{
if(nBuf_Count < MAX_BUFFER_SIZE -1)
{
szBuffer[nBuf_Count] = '\0'; // End String (sz)
strcpy(szDest,szBuffer);
strncpy(m_InnerResult,szSource + nCount+1,nSrcLen-nCount);
}
break;
}
else
{
if(nCount>nSrcLen)
{
ZeroMemory(szDest,sizeof(szDest));
strncpy(m_InnerResult,szSource +nCount+2,nSrcLen-1);
break;
}
}
}
else
{
if(nBuf_Count< MAX_BUFFER_SIZE -1)
{
szBuffer[nBuf_Count] = Ch;
nBuf_Count++;
}
}
nCount++;
}
delete[] szBuffer;
return m_InnerResult;
}
CHAR* CNPCTxtAnalysis::GetValidStr(CHAR* szSource,CHAR* szDest,CHAR Divider)
{
CHAR* szBuffer;
int nSrcLen;
int nBuf_Count,nCount;
szBuffer = new CHAR[MAX_BUFFER_SIZE];
nSrcLen = strlen(szSource);
nBuf_Count = 0;
nCount = 0;
if (nSrcLen >= MAX_BUFFER_SIZE - 1 ) // ÃÖ´ë ±æÀ̺¸´Ù ±æ¸é ½ÇÇàÀ» Ãë¼Ò ÇÑ´Ù.
{
ZeroMemory(szDest,sizeof(szDest));
delete[] szBuffer;
return NULL;
}
if (strlen(szSource)==0) // ¼Ò½º Text°¡ ¾øÀ¸¸é ½ÇÇàÀ» Ãë¼Ò ÇÑ´Ù.
{
ZeroMemory(szDest,sizeof(szDest));
delete[] szBuffer;
return szDest;
}
while(true)
{
char Ch;
if( nCount <= nSrcLen )
{
Ch=szSource[nCount];
if(Ch == Divider) // Divider °ËÃâ
{
goto CATCH_DIV;
}
}
if(nCount > nSrcLen)
{
CATCH_DIV:
if(nBuf_Count >0)
{
if(nBuf_Count < MAX_BUFFER_SIZE -1)
{
szBuffer[nBuf_Count] = '\0'; // End String (sz)
strcpy(szDest,szBuffer);
ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
if(nSrcLen-nCount>0)
strncpy(m_InnerResult,szSource + nCount+1,nSrcLen-nCount);
}
break;
}
else
{
if(nCount>nSrcLen)
{
ZeroMemory(szDest,sizeof(szDest));
ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
if(nSrcLen-1>0) strncpy(m_InnerResult,szSource +nCount+2,nSrcLen-1);
break;
}
}
}
else
{
if(nBuf_Count< MAX_BUFFER_SIZE -1)
{
szBuffer[nBuf_Count] = Ch;
nBuf_Count++;
}
}
nCount++;
}
if(szBuffer!=NULL)
{
delete[] szBuffer;
szBuffer = NULL;
}
return m_InnerResult;
}
CHAR* CNPCTxtAnalysis::GetValidStr(CHAR* szSource,INT nSrcLen,CHAR* szDest,INT nDestLen,CHAR Divider)
{
CHAR* szBuffer;
int nBuf_Count,nCount;
szBuffer = new CHAR[MAX_BUFFER_SIZE];
nBuf_Count = 0;
nCount = 0;
if (nSrcLen >= MAX_BUFFER_SIZE - 1 ) // ÃÖ´ë ±æÀ̺¸´Ù ±æ¸é ½ÇÇàÀ» Ãë¼Ò ÇÑ´Ù.
{
ZeroMemory(szDest,nDestLen);
delete[] szBuffer;
return NULL;
}
if (strlen(szSource)==0) // ¼Ò½º Text°¡ ¾øÀ¸¸é ½ÇÇàÀ» Ãë¼Ò ÇÑ´Ù.
{
ZeroMemory(szDest,nDestLen);
delete[] szBuffer;
return szDest;
}
while(true)
{
char Ch;
if( nCount <= nSrcLen )
{
Ch=szSource[nCount];
if(Ch == Divider) // Divider °ËÃâ
{
goto CATCH_DIV;
}
}
if(nCount > nSrcLen)
{
CATCH_DIV:
if(nBuf_Count >0)
{
if(nBuf_Count < MAX_BUFFER_SIZE -1)
{
szBuffer[nBuf_Count] = '\0'; // End String (sz)
memcpy(szDest,szBuffer,nBuf_Count);
ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
if(nSrcLen-nCount>0)
strncpy(m_InnerResult,szSource + nCount+1,nSrcLen-nCount);
}
break;
}
else
{
if(nCount>nSrcLen)
{
ZeroMemory(szDest,nDestLen);
ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
if(nSrcLen-1>0) strncpy(m_InnerResult,szSource +nCount+2,nSrcLen-1);
break;
}
}
}
else
{
if(nBuf_Count< MAX_BUFFER_SIZE -1)
{
szBuffer[nBuf_Count] = Ch;
nBuf_Count++;
}
}
nCount++;
}
if(szBuffer!=NULL)
{
delete[] szBuffer;
szBuffer = NULL;
}
return m_InnerResult;
}
CHAR* CNPCTxtAnalysis::ArrestString(CHAR* szSource,CHAR SearchAfter,CHAR AssertBefore,CHAR* AssertStr)
{
int Src_Len;
bool Right_Data,Fin;
ZeroMemory(AssertStr,strlen(AssertStr));
ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
if(strlen(szSource)==0)
{
ZeroMemory(AssertStr,sizeof(AssertStr));
return m_InnerResult;
}
int n;
Src_Len = strlen(szSource);
Right_Data = false;
if(Src_Len >=2)
{
if(szSource[0] == SearchAfter)
{
strncpy(szSource,szSource+1,Src_Len-1);
szSource[Src_Len-1]=NULL;
Src_Len = strlen(szSource);
Right_Data = true;
}
else
{
n= FindChr(szSource,SearchAfter);
if(n>=0)
{
strncpy(szSource,szSource+n,Src_Len - (n));
Src_Len = strlen(szSource);
Right_Data = true;
}
}
Fin = false;
if(Right_Data)
{
n = FindChr(szSource,AssertBefore);
if(n>=0)
{
strncpy(AssertStr,szSource,n);
strncpy(m_InnerResult,szSource+n,Src_Len - n);
}
else
{
strncat(m_InnerResult,&SearchAfter,1);
strcat(m_InnerResult,szSource);
}
}
else
{
for(int i = 0; i< Src_Len;i++)
{
if(szSource[i] == SearchAfter)
{
strncpy(m_InnerResult,szSource+i,Src_Len-i+2);
break;
}
}
}
}
return m_InnerResult;
}
CHAR* CNPCTxtAnalysis::UpperCase(CHAR* szStr)
{
int Len;
ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
Len = strlen(szStr);
for(int i = 0;i'a' && szStr[i]<'z')
{
m_InnerResult[i] = szStr[i]-32;
}
else
{
m_InnerResult[i] = szStr[i];
}
}
return m_InnerResult;
}
CHAR CNPCTxtAnalysis::UpperCase(CHAR chr)
{
char szResult;
szResult=0x00;
szResult = (chr>'a' && chr<'z') ? chr-32:chr;
return szResult;
}
int CNPCTxtAnalysis::FindChr(CHAR* szstr,CHAR ch)
{
int Count = 0;
bool Conditions=true;
while(Conditions && Count<((int)strlen(szstr)))
{
if(szstr[Count]==ch)
Conditions = false;
Count++;
}
if(!Conditions) return Count;
else return -1;
}
int CNPCTxtAnalysis::FindChr(CHAR* szStr,CHAR* ch)
{
int Count = 0;
int nLenObject;
bool Conditions=true;
nLenObject = strlen(ch);
while(Conditions && Count <((int)strlen(szStr)))
{
if(szStr[Count]==ch[0])
{
int nChk=0;
for(int i = 0 ; (i * pxpTxt,INT nLineMax)
{
BOOL DrawCenter = FALSE;
CHAR* szTemp;
CHAR* CmdStr;
CHAR* CmdParamStr;
CHAR* szStr;
INT nPosX = 20;;
INT nLineCount = 0;
COLORREF cColor = RGB(1,1,1);
SIZE tSize;
if(m_bInited)
{
// Init Buffers
CmdParamStr = new CHAR[MAX_BUFFER_SIZE];
CmdStr = new CHAR[MAX_BUFFER_SIZE];
szStr = new CHAR[MAX_BUFFER_SIZE];
ZeroMemory(CmdStr,MAX_BUFFER_SIZE);
ZeroMemory(szStr,MAX_BUFFER_SIZE);
pxpTxt->MoveCurrentToTop();
while(true)
{
if(nLineMax<=nLineCount)
break;
strcpy(szStr,*pxpTxt->GetCurrentData()); // Line Divide
if(strlen(szStr)!=0)
{
while((FindChr(szStr,'<')>0)&&(FindChr(szStr,'>')>0) && (strlen(szStr)!=0))
{
CHAR* Fdata;
Fdata = new CHAR[MAX_BUFFER_SIZE];
ZeroMemory(Fdata,MAX_BUFFER_SIZE);
// <>Tag ºÐ¸® Text Button »ý¼º
if((szStr[0])!='<')
{
szTemp = GetValidStr(szStr,Fdata,'<');
strcpy(szStr,"<");
strcat(szStr,szTemp);
} // endif
// <>¾È¿¡ ÀÖ´Â ³»¿ë CmdStr·Î
szTemp = ArrestString(szStr,'<','>',CmdStr);
strcpy(szStr,szTemp);
szTemp = NULL;
if(strlen(CmdStr)!=0)
{
switch(UpperCase(CmdStr[0]))
{
case '0': // <0> Àϰæ¿ì ±ÛÀÚ»ö BLACK
{
cColor = RGB(0,0,0);
}
break;
case '1': // <1> Àϰæ¿ì ±ÛÀÚ»ö RED
{
cColor = RGB(255,0,0);
}
break;
case '2': // <2> Àϰæ¿ì ±ÛÀÚ»ö GREEN
{
cColor = RGB(0,128,0);
}
break;
case '3': // <3> Àϰæ¿ì ±ÛÀÚ»ö Olive
{
cColor = RGB(128,128,0);
}
break;
case '4': // <4> Àϰæ¿ì ±ÛÀÚ»ö GRAY
{
cColor = RGB(128,128,128);
}
break;
case '5': // <5> Àϰæ¿ì ±ÛÀÚ»ö Maroon
{
cColor = RGB(128,0,0);
}
break;
case '6': // <6> Àϰæ¿ì ±ÛÀÚ»ö Teal
{
cColor = RGB(0,128,128);
}
break;
case '7': // <7> Àϰæ¿ì ±ÛÀÚ»ö Navy
{
cColor = RGB(0,0,128);
}
break;
case '8': // <8> Àϰæ¿ì ±ÛÀÚ»ö Silver
{
cColor = RGB(192,192,192);
}
break;
case '9': // <9> Àϰæ¿ì ±ÛÀÚ»ö Purple
{
cColor = RGB(128,0,128);
}
break;
case 'A': // Àϰæ¿ì ±ÛÀÚ»ö Lime
{
cColor = RGB(0,255,0);
}
break;
case 'B': // Àϰæ¿ì ±ÛÀÚ»ö Blue
{
cColor = RGB(0,0,255);
}
break;
case 'C': // Àϰæ¿ì ±ÛÀÚ»ö White
{
cColor = RGB(255,255,255);
}
break;
case 'D': // Àϰæ¿ì ±ÛÀÚ»ö Fuchsia
{
cColor = RGB(255,0,255);
}
break;
case 'E': // Àϰæ¿ì ±ÛÀÚ»ö Aqua
{
cColor = RGB(0,255,255);
}
break;
case 'F': // Àϰæ¿ì ±ÛÀÚ»ö Yellow
{
cColor = RGB(255,255,0);
}
break;
case 'X': // Àϰæ¿ì ±ÛÀÚ»ö Default
{
cColor = RGB(1,1,1);
}
break;
} // endswitch
szTemp = NULL;
szTemp = GetValidStr(CmdStr,CmdStr,'/');
ZeroMemory(CmdParamStr,MAX_BUFFER_SIZE);
if(szTemp[0]!=NULL)
strncpy(CmdParamStr,szTemp,strlen(szTemp)-1);
szTemp = NULL;
} // endif
else
{
// Á¾°á <> °¡ ÀÖÀ¸¸é Á¾·á
} // endifelse
if(strlen(Fdata)!=0) // '<' Àü¿¡ ÀÖ´Â Text¸¦ ÀÏ¹Ý Text¿¡ Ãß°¡
{ // ÀÏ¹Ý Text Ãß°¡
CMText* pxTmpTxt;
pxTmpTxt = new CMText;
pxTmpTxt->pText = new CHAR[strlen(Fdata)+1];
// Text ¼³Á¤
pxTmpTxt->bDrawCenter = DrawCenter;
pxTmpTxt->fColor = cColor!=RGB(1,1,1) ? cColor : DEFAULT_TXT_COLOR; // »öÀº Tag¿¡ ÀÇÇØ °áÁ¤ÇØ ÁÖ¾î¾ßÇÔ.
pxTmpTxt->nLine = nLineCount;
pxTmpTxt->nPosx = nPosX;
strcpy(pxTmpTxt->pText,Fdata);
m_pxpTxt->AddNode(pxTmpTxt);
tSize = m_pxGWND->GetStrLength(NULL,NULL,"%s",Fdata);
nPosX=nPosX+tSize.cx;
delete[] Fdata;
Fdata = NULL;
cColor = RGB(1,1,1);
} // endif
if(strlen(CmdParamStr)!=0)//CmdStr)!=0)
{
RECT tRect;
tRect.top =0;
tRect.left = nPosX;
tSize = m_pxGWND->GetStrLength(NULL,NULL,"%s",CmdStr);
tRect.right = tSize.cx;
tRect.bottom = tSize.cy;
// Text ¹öư »ý¼º
m_pxBtn->AddButton(CmdStr,tRect,nLineCount,CmdParamStr,(cColor!=RGB(1,1,1) ? cColor : DEFAULT_BTN_COLOR),DEFAULT_BTN_CLICK_COLOR);
nPosX=nPosX+tSize.cx;
} // Text Button // endif
if(Fdata!=NULL)
{
delete[] Fdata;
Fdata = NULL;
}
} // end while
// '>'µÞºÎºÐ ȤÀº '<','>' ¾ø´Â ±â³É TextÀÏ °æ¿ì
if(strlen(szStr)!=0)
{
do
{
// Line À» ³ª´©°í ±× °á°ú¸¦ Text List ¿¡ ³Ö´Â´Ù.
CHAR *szTemp1=NULL,*szTemp2=NULL;
szTemp1 = new CHAR[MAX_BUFFER_SIZE];
ZeroMemory(szTemp1,MAX_BUFFER_SIZE);
// Line Divider
szTemp2 = GetValidStr(szStr,szTemp1,LINE_DIVIDER);
strcpy(szStr,szTemp2);
// Text »ý¼º
CMText* pxTmpTxt;
pxTmpTxt = new CMText;
pxTmpTxt->pText = new CHAR[strlen(szTemp1)+1];
// Text ¼³Á¤
pxTmpTxt->bDrawCenter = DrawCenter;
pxTmpTxt->fColor = cColor!=RGB(1,1,1) ? cColor : DEFAULT_TXT_COLOR; // Àӽà Tag¿¡ ÀÇÇÏ¿© »öº¯È¯
pxTmpTxt->nLine = nLineCount;
pxTmpTxt->nPosx = nPosX;
strcpy(pxTmpTxt->pText,szTemp1);
m_pxpTxt->AddNode(pxTmpTxt);
tSize = m_pxGWND->GetStrLength(NULL,NULL,"%s",szTemp1);
nPosX=nPosX+tSize.cx;
delete[] szTemp1;
}while(strlen(szStr)!=0);
// Draw Normal Text
} // endif
} // endif
// Line Feed
nLineCount ++;
nPosX = 20; //½ÃÀÛÀº 20 pixel ºÎÅÍ
pxpTxt->MoveNextNode();
} // end while
delete[] CmdParamStr;
delete[] CmdStr;
delete[] szStr;
m_bReady = TRUE;
} // endif
else
{
m_bReady = FALSE;
} // end ifelse
}
void CNPCTxtAnalysis::AnalySisText(CHAR* Msg)
{
BOOL DrawCenter = FALSE;
CHAR* szTemp;
CHAR* CmdStr;
CHAR* CmdParamStr;
CHAR* szStr;
INT nPosX =0;
INT nLineCount = 0;
COLORREF cColor = 0;
SIZE tSize;
if(m_bInited)
{
// Init Buffers
CmdParamStr = new CHAR[MAX_BUFFER_SIZE];
CmdStr = new CHAR[MAX_BUFFER_SIZE];
szStr = new CHAR[MAX_BUFFER_SIZE];
ZeroMemory(CmdParamStr,MAX_BUFFER_SIZE);
ZeroMemory(CmdStr,MAX_BUFFER_SIZE);
ZeroMemory(szStr,MAX_BUFFER_SIZE);
while(true)
{
if(strlen(Msg)==0) break;
szTemp = GetValidStr(Msg,szStr,LINE_DIVIDER); // Line Divider
strcpy(Msg,szTemp);
if(strlen(szStr)!=0)
{
while((FindChr(szStr,'<')>0)&&(FindChr(szStr,'>')>0) && (strlen(szStr)!=0))
{
CHAR* Fdata;
Fdata = new CHAR[MAX_BUFFER_SIZE];
ZeroMemory(Fdata,MAX_BUFFER_SIZE);
// <>Tag ºÐ¸® Text Button »ý¼º
if((szStr[0])!='<')
{
szTemp = GetValidStr(szStr,Fdata,'<');
strcpy(szStr,"<");
strcat(szStr,szTemp);
}
// <>¾È¿¡ ÀÖ´Â ³»¿ë CmdStr·Î
szTemp = ArrestString(szStr,'<','>',CmdStr);
strcpy(szStr,szTemp);
szTemp = NULL;
if(strlen(CmdStr)!=0)
{
switch(UpperCase(CmdStr[0]))
{
case '0': // <0> Àϰæ¿ì ±ÛÀÚ»ö BLACK
{
cColor = RGB(0,0,0);
continue;
}
break;
case '1': // <1> Àϰæ¿ì ±ÛÀÚ»ö RED
{
cColor = RGB(255,0,0);
continue;
}
break;
case '2': // <2> Àϰæ¿ì ±ÛÀÚ»ö GREEN
{
cColor = RGB(0,128,0);
continue;
}
break;
case '3': // <3> Àϰæ¿ì ±ÛÀÚ»ö Olive
{
cColor = RGB(128,128,0);
continue;
}
break;
case '4': // <4> Àϰæ¿ì ±ÛÀÚ»ö GRAY
{
cColor = RGB(128,128,128);
continue;
}
break;
case '5': // <5> Àϰæ¿ì ±ÛÀÚ»ö Maroon
{
cColor = RGB(128,0,0);
continue;
}
break;
case '6': // <6> Àϰæ¿ì ±ÛÀÚ»ö Teal
{
cColor = RGB(0,128,128);
continue;
}
break;
case '7': // <7> Àϰæ¿ì ±ÛÀÚ»ö Navy
{
cColor = RGB(0,0,128);
continue;
}
break;
case '8': // <8> Àϰæ¿ì ±ÛÀÚ»ö Silver
{
cColor = RGB(192,192,192);
continue;
}
break;
case '9': // <9> Àϰæ¿ì ±ÛÀÚ»ö Purple
{
cColor = RGB(128,0,128);
continue;
}
break;
case 'A': // Àϰæ¿ì ±ÛÀÚ»ö Lime
{
cColor = RGB(0,255,0);
continue;
}
break;
case 'B': // Àϰæ¿ì ±ÛÀÚ»ö Blue
{
cColor = RGB(0,0,255);
continue;
}
break;
case 'C': // Àϰæ¿ì ±ÛÀÚ»ö White
{
cColor = RGB(255,255,255);
continue;
}
break;
case 'D': // Àϰæ¿ì ±ÛÀÚ»ö Fuchsia
{
cColor = RGB(255,0,255);
continue;
}
break;
case 'E': // Àϰæ¿ì ±ÛÀÚ»ö Aqua
{
cColor = RGB(0,255,255);
continue;
}
break;
case 'F': // Àϰæ¿ì ±ÛÀÚ»ö Yellow
{
cColor = RGB(255,255,0);
continue;
}
break;
case 'X': // Àϰæ¿ì ±ÛÀÚ»ö Default
{
cColor = RGB(1,1,1);
continue;
}
break;
}
/* szTemp = new CHAR[2];
strncpy(szTemp,CmdStr,2);
szTemp = UpperCase(szTemp);
if(strncmp(szTemp,"/C",2)==0) // ÀÏ °æ¿ì °¡¿îµ¥ Âï±â ³¡
{
DrawCenter = FALSE;
delete[] szTemp;
szTemp = NULL;
continue;
}
delete[] szTemp;
*/ szTemp = NULL;
szTemp = GetValidStr(CmdStr,CmdStr,'/');
strcpy(CmdParamStr,szTemp);
szTemp = NULL;
}
else
{
// Á¾°á <> °¡ ÀÖÀ¸¸é Á¾·á
}
if(strlen(Fdata)!=0) // '<' Àü¿¡ ÀÖ´Â Text¸¦ ÀÏ¹Ý Text¿¡ Ãß°¡
{ // ÀÏ¹Ý Text Ãß°¡
CMText* pxTmpTxt;
pxTmpTxt = new CMText;
pxTmpTxt->pText = new CHAR[strlen(Fdata)+1];
// Text ¼³Á¤
pxTmpTxt->bDrawCenter = DrawCenter;
pxTmpTxt->fColor = cColor!=RGB(1,1,1) ? cColor : DEFAULT_TXT_COLOR; // »öÀº Tag¿¡ ÀÇÇØ °áÁ¤ÇØ ÁÖ¾î¾ßÇÔ.
pxTmpTxt->nLine = nLineCount;
pxTmpTxt->nPosx = nPosX;
strcpy(pxTmpTxt->pText,Fdata);
m_pxpTxt->AddNode(pxTmpTxt);
tSize = m_pxGWND->GetStrLength(NULL,NULL,"%s",Fdata);
nPosX=nPosX+tSize.cx;
}
if(strlen(CmdStr)!=0)
{
RECT tRect;
tRect.top =0;
tRect.left = nPosX;
tSize = m_pxGWND->GetStrLength(NULL,NULL,"%s",CmdStr);
tRect.right = tSize.cx;
tRect.bottom = tSize.cy;
// Text ¹öư »ý¼º
m_pxBtn->AddButton(CmdStr,tRect,nLineCount,CmdParamStr,(cColor!=RGB(1,1,1) ? cColor : DEFAULT_BTN_COLOR),DEFAULT_BTN_CLICK_COLOR);
nPosX=nPosX+tSize.cx;
} // Text Button
}
// '>'µÞºÎºÐ ȤÀº '<','>' ¾ø´Â ±â³É TextÀÏ °æ¿ì
if(strlen(szStr)!=0)
{
do
{
// Line À» ³ª´©°í ±× °á°ú¸¦ Text List ¿¡ ³Ö´Â´Ù.
CHAR *szTemp1=NULL,*szTemp2=NULL;
szTemp1 = new CHAR[MAX_BUFFER_SIZE];
ZeroMemory(szTemp1,MAX_BUFFER_SIZE);
// Line Divider
szTemp2 = GetValidStr(szStr,szTemp1,LINE_DIVIDER);
strcpy(szStr,szTemp2);
// Text »ý¼º
CMText* pxTmpTxt;
pxTmpTxt = new CMText;
pxTmpTxt->pText = new CHAR[strlen(szTemp1)+1];
// Text ¼³Á¤
pxTmpTxt->bDrawCenter = DrawCenter;
pxTmpTxt->fColor = cColor!=RGB(1,1,1) ? cColor : DEFAULT_TXT_COLOR; // Àӽà Tag¿¡ ÀÇÇÏ¿© »öº¯È¯
pxTmpTxt->nLine = nLineCount;
pxTmpTxt->nPosx = nPosX;
strcpy(pxTmpTxt->pText,szTemp1);
m_pxpTxt->AddNode(pxTmpTxt);
tSize = m_pxGWND->GetStrLength(NULL,NULL,"%s",szTemp1);
nPosX=nPosX+tSize.cx;
delete[] szTemp1;
nPosX = 20; // ½ÃÀÛÀº 20 pixel ºÎÅÍ
nLineCount ++; // Line Feed
}while(strlen(szStr)!=0);
// Draw Normal Text
}
}
// Line Feed
nLineCount ++;
nPosX = 20; //½ÃÀÛÀº 20 pixel ºÎÅÍ
}
delete CmdParamStr;
delete CmdStr;
delete szStr;
m_bReady = TRUE;
}
else
{
m_bReady = FALSE;
}
}
BOOL CNPCTxtAnalysis::IsReadyToDisplay(VOID)
{
return m_bReady;
}
BOOL CNPCTxtAnalysis::IsInitialized(VOID)
{
return m_bInited;
}
// ¿ë±â
BOOL CNPCTxtAnalysis::StringDivide(INT nDivideWidth, INT& nDividedLine, CHAR* szSrc,CDLList* m_pxpStr)
{
CHAR szTmpCheck[MAX_PATH];
CHAR szResult[MAX_PATH];
nDividedLine = 1;
INT nStartLen = 0;
INT nEndLen = 0;
INT nResultLen = 0;
INT nWordCheck = 0;
if ( szSrc[0] != NULL )
{
ZeroMemory(szResult,MAX_PATH);
for ( INT nCnt = 0; nCnt < (INT)strlen(szSrc); nCnt++)
{
ZeroMemory(szTmpCheck, MAX_PATH);
nEndLen = nCnt+1;
// ÇöÀçºÎºÐ±îÁöÀÇ ¹®ÀÚ¿À» Àд´Ù.
memcpy(&szTmpCheck, &szSrc[nStartLen], nEndLen-nStartLen);
SIZE sizeLen;
sizeLen = m_pxGWND->GetStrLength(NULL,NULL, szTmpCheck);
// ÇöÀç±îÁö Àоî¿Â ºÎºÐÀÌ Çã¿ë³ÐÀ̸¦ ³Ñ¾î¼¹À»¶§.
if ( sizeLen.cx > nDivideWidth )
{
// ÇöÀç 2¹ÙÀÌÆ® ¹®ÀÚ¶ó¸é.
if ( szSrc[nEndLen-1] < 0 )
{
// ÇöÀç ¾Õ¿¡¹®ÀÚ°¡ 2¹ÙÀÌÆ® ¹®ÀÚ°¡ ¾Æ´Ï¶ó¸é
if ( !(nWordCheck%2) )
{
nStartLen += strlen(szTmpCheck)-1;
nCnt--;
CHAR* pszNewLine;
pszNewLine = new CHAR[nResultLen+1];
memcpy(pszNewLine,szResult,nResultLen);
pszNewLine[nResultLen]=NULL;
m_pxpStr->AddNode(pszNewLine);
nResultLen = 0;
nDividedLine++;
}
else
{
nStartLen += strlen(szTmpCheck)-2;
nCnt -= 2;
CHAR* pszNewLine;
pszNewLine = new CHAR[nResultLen];
memcpy(pszNewLine,szResult,nResultLen-1);
pszNewLine[nResultLen-1]=NULL;
m_pxpStr->AddNode(pszNewLine);
nResultLen = 0;
nDividedLine++;
nWordCheck--;
}
}
// 1¹ÙÀÌÆ® ¹®ÀÚ.
// ÇöÀ纸´Ù ÇѹÙÀÌÆ®¾ÕºÎºÐ±îÁö¸¸ °í·ÁÇØÁÖ¸é µÈ´Ù.
else
{
nStartLen += strlen(szTmpCheck)-1;
nCnt--;
CHAR* pszNewLine;
pszNewLine = new CHAR[nResultLen+1];
memcpy(pszNewLine,szResult,nResultLen);
pszNewLine[nResultLen]=NULL;
m_pxpStr->AddNode(pszNewLine);
nResultLen=0;
nDividedLine++;
}
}
else if(szSrc[nEndLen-1]=='\n') // °Á¦°³Çà \nÀ¸·ÎÇϸé Error ????
{
nStartLen += strlen(szTmpCheck)-1;
CHAR* pszNewLine;
pszNewLine = new CHAR[nResultLen+1];
memcpy(pszNewLine,szResult,nResultLen);
pszNewLine[nResultLen]=NULL;
m_pxpStr->AddNode(pszNewLine);
nResultLen=0;
nDividedLine++;
}
else
{
if ( szSrc[nEndLen-1] < 0 )
nWordCheck++;
szResult[nResultLen] = szSrc[nEndLen-1];
nResultLen++;
}
}
if(nResultLen!=0)
{
CHAR* pszNewLine;
pszNewLine = new CHAR[nResultLen+1];
memcpy(pszNewLine,szResult,nResultLen);
pszNewLine[nResultLen]=NULL;
m_pxpStr->AddNode(pszNewLine);
nDividedLine++;
nResultLen=0;
}
return TRUE;
}
return FALSE;
}