±¸¹® ºÐ¼®À» ÇÏ´Â ÁÖü´Â ºÐ¼®±âÀ̸ç Ŭ·¡½º·Î ±¸ÇöÇÒ °ÍÀÌ´Ù. ¹®¼ Æ÷¸Ëº°·Î ±¸¹® ºÐ¼®ÀÇ ¹æ¹ýÀÌ ÁúÀûÀ¸·Î ´Þ¶óÁö¹Ç·Î Æ÷¸Ë´ç ÇϳªÀÇ ºÐ¼®±â¸¦ ¸¸µé¸ç ApiEdit´Â Àû¿ëÇÒ ¹®¹ý¿¡ µû¶ó ºÐ¼®±â °´Ã¼¸¦ ½ÇÇàÁß¿¡ ¹Ù²ã °¡¸ç »ç¿ëÇÑ´Ù. ÀÌ·¸°Ô µÇ·Á¸é ¸ðµç ºÐ¼®±â¸¦ ´ëÇ¥ÇÏ´Â ºÎ¸ð Ŭ·¡½º°¡ ÀÖ¾î¾ß ÇÑ´Ù. ApiEdit´Â ºÎ¸ð Ŭ·¡½ºÀÇ Æ÷ÀÎÅÍ Çϳª¸¸ °¡Áö°í ÀÖÀ¸¸é ¸ðµç ºÐ¼®±â¸¦ Á¦¾îÇÒ ¼ö ÀÖ´Ù. ¾Ë´Ù½ÃÇÇ ºÎ¸ð Ŭ·¡½ºÇüÀÇ Æ÷ÀÎÅÍ´Â ¸ðµç ÆÄ»ý Ŭ·¡½ºÀÇ °´Ã¼¸¦ °¡¸®Å³ ¼ö Àֱ⠶§¹®ÀÌ´Ù.
¹®¼ÀÇ Æ÷¸Ë¿¡ µû¶ó ±¸¹® ºÐ¼®À» ÇÏ´Â ¹æ¹ýÀÌ ¾Æ¹«¸® ÁúÀûÀ¸·Î ´Ù¸£´Ù Çصµ °øÅëÀûÀ¸·Î °øÀ¯ÇÒ ¼ö ÀÖ´Â Äڵ尡 ¸¹ÀÌ ÀÖ´Ù. ºÐ¼® Á¤º¸¸¦ °ü¸®ÇÏ´Â ¹æ¹ýÀ̳ª ApiEdit¿Í Åë½ÅÇÏ´Â ¹æ¹ý µîÀº ¹®¹ý°ú »ó°ü¾øÀÌ ¸ðµç ºÐ¼®±â¿¡ Àû¿ëµÈ´Ù. ±×·¡¼ ÀÌ·± °øÅëµÇ´Â ÄÚµå´Â ºÎ¸ð Ŭ·¡½º¿¡ ÇÑ ¹ø¸¸ ÀÛ¼ºÇسõ°í ÆÄ»ý Ŭ·¡½ºµéÀº ÀÌ Äڵ带 »ó¼Ó¹Þ¾Æ¼ »ç¿ëÇÑ´Ù. °øÅë ÄÚµåÀ̹ǷΠ°¢ ºÐ¼®±â¸¶´Ù µû·Î ÀÛ¼ºÇÒ ÇÊ¿ä°¡ ¾ø´Ù.
°øÅë ÄÚµå¿Í ApiEditÀÇ ºÐ¼®±â Á¦¾î ÆíÀǸ¦ À§ÇØ ºÐ¼® ±â¹Ý Ŭ·¡½º¸¦ ÀÛ¼ºÇϱâ·Î ÇÑ´Ù. Parse.h¿¡ ´ÙÀ½°ú °°ÀÌ CParse Ŭ·¡½º¸¦ ÀÛ¼ºÇϵµ·Ï ÇÏÀÚ.
class CApiEdit;
class CParse
{
protected:
int ParseSize;
SParseStyle arStyle[32];
public:
ParseInfo *pInfo;
CParse();
~CParse();
void InitInfo(BOOL bAlloc);
void DeleteParseInfo(int nLine);
void MakeParseInfo(int nLine, int &nUnit, int pos, int style);
BOOL IsStringExist(TCHAR *list,TCHAR *str,int len,BOOL bCase);
BOOL IsNumber(CApiEdit &ae,int s, int e);
void ParseLines(CApiEdit &ae,int nLine);
void GetStyleColor(int style, COLORREF &fore, COLORREF &back);
void SetStyleColor(int style, COLORREF fore, COLORREF back);
void GetStyleName(int style, TCHAR *szName);
virtual void ParseLine(CApiEdit &ae,int nLine)=0;
virtual TCHAR *GetInfo(int iIndex)=0;
};
ºÐ¼®±â´Â ¹®¼ ³»¿ëÀ» Àоî¾ß ÇÏ¸ç µû¶ó¼ ApiEditÀÇ buf, off µîÀÇ ÇÙ½É ¸â¹öº¯¼ö¿¡ ¾×¼¼½ºÇØ¾ß ÇÑ´Ù. ±×·¡¼ CParseÀÇ ¸â¹öÇÔ¼ö´Â ºÐ¼® ´ë»óÀÌ µÇ´Â CApiEdit °´Ã¼ÀÇ ·¹ÆÛ·±½º¸¦ Àμö·Î ÃëÇϴµ¥ ÀÌ ¿øÇüÀ» ¼±¾ðÇÏ·Á¸é CParse¸¦ ¼±¾ðÇϱâ Àü¿¡ CApiEdit°¡ Ŭ·¡½ºÇüÀ̶ó´Â °ÍÀ» ¹Ì¸® ¾Ë·ÁÁà¾ß ÇÑ´Ù. ù ÁÙÀÇ class CApiEdit; Àü¹æ ¼±¾ð¹®ÀÌ ¹Ù·Î ÀÌ·± ÀÏÀ» ÇÑ´Ù. CApiEdit Ŭ·¡½º´Â CParse °´Ã¼¸¦ ¸â¹ö·Î °¡Áö°í CParse Ŭ·¡½º´Â CApiEdit °´Ã¼¸¦ Àμö·Î ÃëÇϹǷΠ»óÈ£ ÂüÁ¶¸¦ ÇÏ°í ÀÖ´Â ¼ÀÀÌ´Ù. ÀÌ·² ¶§´Â Çì´õ ÆÄÀÏÀÇ ¼ø¼¸¦ Á¤ÇÒ ¼ö ¾øÀ¸¹Ç·Î ¸ÕÀú ÀÎŬ·çµåµÇ´Â ÂÊÀÌ ¹Ý´ëÂÊ Å¬·¡½º¿¡ ´ëÇÑ Àü¹æ ¼±¾ðÀ» °¡Á®¾ß ÇÑ´Ù.
¸â¹öº¯¼ö´Â ¼¼ °³ ¼±¾ðµÇ¾î Àִµ¥ pInfo°¡ ¹Ù·Î ºÐ¼® Á¤º¸ÀÌ´Ù. ÇÑ ÁÙÀÌ ¸î °³ÀÇ À¯´ÖÀ¸·Î ±¸¼ºµÉ °ÍÀÎÁö »óÇѼ±ÀÌ ¾ø´Â °Í°ú ¸¶Âù°¡Áö·Î ÇϳªÀÇ ¹®¼°¡ ¸î °³ÀÇ ÁÙ·Î ±¸¼ºµÉ °ÍÀΰ¡µµ »óÇѼ±ÀÌ ¾ø´Ù. ±×·¡¼ ÁÙ ºÐ¼® Á¤º¸ ¹è¿µµ µ¿ÀûÀ¸·Î °ü¸®µÇ¾î¾ß ÇÑ´Ù. pInfo´Â ºÐ¼® Á¤º¸ ¹è¿ÀÌ¸ç ¹®¼ÀÇ ÁÙ ¼ö¸¸Å µ¿ÀûÀ¸·Î ÇÒ´çµÈ´Ù. ºÐ¼®±â ¿ÜºÎ¿¡¼ ÀÌ Á¤º¸¸¦ ¼ö½Ã·Î ÂüÁ¶ÇØ¾ß ÇϹǷΠpInfo´Â public ¾×¼¼½º ÁöÁ¤À» °¡Áø´Ù.
ParseSize´Â ºÐ¼® Á¤º¸ ¹è¿ÀÇ ÇÒ´çµÈ Å©±â°ªÀ̸ç pInfo ¹è¿ °ü¸®¿¡ »ç¿ëµÈ´Ù. ParseSize´Â ¿ÜºÎ¿¡¼ Á÷Á¢ ¾×¼¼½ºÇÏÁö ¾ÊÀ¸¹Ç·Î protected ¾×¼¼½º ¼Ó¼ºÀ¸·Î ¼±¾ðµÇ¾ú´Ù. arStyle ¹è¿Àº ÀÌ ºÐ¼®±â°¡ Á¤ÀÇÇÏ´Â ½ºÅ¸ÀÏ Á¤º¸ÀÌ¸ç »ý¼ºÀÚ¿¡¼ ÃʱâȵȴÙ. ¹è¿ÀÇ Å©±â°¡ 32ÀÌ¸ç ¸¶Áö¸· ¿ä¼Ò´Â ³¡ Ç¥½Ã¿¡ »ç¿ëµÇ¹Ç·Î ºÐ¼®±â´ç ÃÖ´ë 31°³ÀÇ ½ºÅ¸ÀÏÀ» Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.
¸â¹öÇÔ¼ö´Â »ý¼ºÀÚ¿Í Æı«ÀÚ¸¦ Æ÷ÇÔÇÏ¿© ¸ðµÎ 13°³°¡ ¼±¾ðµÇ¾î Àִµ¥ °¢ ÇÔ¼ö¿¡ ´ëÇÑ °£·«ÇÑ ¼³¸íÀº ´ÙÀ½°ú °°´Ù.
ÇÔ¼ö |
¼³¸í |
»ý¼ºÀÚ |
ºÐ¼® Á¤º¸ ¹è¿À» Ãʱâ ÇÒ´çÇÑ´Ù. |
Æı«ÀÚ |
ºÐ¼® Á¤º¸ ¹è¿À» ÇØÁ¦ÇÑ´Ù. |
InitInfo |
ºÐ¼® Á¤º¸ ¹è¿À» ÇØÁ¦ÇÏ°í ÀçÇÒ´çÇÏ¿© ÃʱâÈÇÑ´Ù. |
DeleteParseInfo |
nLine ÀÌÇÏ ¸ðµç ÁÙÀÇ ºÐ¼® Á¤º¸¸¦ »èÁ¦ÇÏ¿© ¹«È¿ÈÇÑ´Ù. |
MakeParseInfo |
ºÐ¼® Á¤º¸¸¦ ÀÛ¼ºÇÑ´Ù. |
GetInfo |
ID°ªÀ» Á¶»çÇØÁØ´Ù. ÀζóÀÎÀ¸·Î ÀÛ¼ºµÇ¾î ÀÖ´Ù. |
ParseLines |
nLineÁÙ±îÁö ºÐ¼®ÇÏ¿© ºÐ¼® Á¤º¸ ¹è¿¿¡ °á°ú¸¦ ÀúÀåÇÑ´Ù. |
ParseLine |
nLineÁÙÀ» ºÐ¼®ÇÏ¿© ºÐ¼® Á¤º¸¸¦ ÀÛ¼ºÇÑ´Ù. |
GetStyleColor |
½ºÅ¸ÀÏ¿¡ µû¸¥ »ö»ó°ªÀ» Á¶»çÇÑ´Ù. |
SetStyleColor |
½ºÅ¸ÀÏ¿¡ µû¸¥ »ö»ó°ªÀ» ÃʱâÈÇÑ´Ù. |
GetStyleName |
½ºÅ¸ÀÏÀÇ À̸§À» ±¸ÇÑ´Ù. |
IsStringExist |
¹®ÀÚ¿ÀÌ Á¸ÀçÇÏ´ÂÁö °Ë»çÇÑ´Ù. |
IsNumber |
¼ýÀÚÀÎÁö °Ë»çÇÑ´Ù. |
ÀÌ ÇÔ¼öµéÀº CParse Ŭ·¡½º°¡ Á¤ÀÇÇÏ°í ÆÄ»ý Ŭ·¡½º´Â ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇϱ⸸ ÇÏ¸ç ¸ðµç ºÐ¼®±â°¡ °øÀ¯ÇÏ´Â ÄÚµåÀÌ´Ù. ºÐ¼® Á¤º¸ ¹è¿À» ÃʱâÈÇϰųª »ý¼º, »èÁ¦ÇÏ´Â µ¿ÀÛÀº ¹®¹ý°ú´Â ¹«°üÇϱ⠶§¹®¿¡ ºÎ¸ð Ŭ·¡½º¿¡ ÇÑ ¹ø¸¸ ÀÛ¼ºÇسõÀ¸¸é µÈ´Ù. ¹®¹ýÀÌ ´Þ¶óÁø´Ù°í Çؼ ¹è¿À» ÀÛ¼ºÇÏ´Â ¹æ¹ý ÀÚü°¡ ´Þ¶óÁöÁö´Â ¾ÊÀ¸¸ç ´Ù¸¸ ÀÛ¼ºµÇ´Â ³»¿ëÀÌ ´Þ¶óÁú »ÓÀÌ´Ù.
GetInfo ÇÔ¼ö¿Í ParseLine ÇÔ¼ö´Â ºÐ¼®±âº°·Î °íÀ¯ÇÏ´Ù. ParseLine ÇÔ¼ö´Â ½ÇÁ¦·Î ±¸¹®À» ºÐ¼®ÇÏ´Â ÇÔ¼öÀε¥ ÀÌ ÇÔ¼ö°¡ ¾î¶² ½ÄÀ¸·Î ¹®¼¸¦ Çؼ®Çϴ°¡¿¡ µû¶ó ºÐ¼®°á°ú°¡ ´Þ¶óÁö°Ô µÈ´Ù. GetInfo ÇÔ¼ö´Â ºÐ¼®±âÀÇ ID³ª ±¸ºÐÀÚ, ÁÖ¼® µî¿¡ ´ëÇÑ Á¤º¸¸¦ Á¦°øÇÑ´Ù. ÀÌ µÎ ÇÔ¼ö´Â ºÎ¸ð Ŭ·¡½º°¡ ±¸ÇöÇÏÁö ¾ÊÀ¸¹Ç·Î ¼ø¼ö °¡»óÇÔ¼ö·Î ¼±¾ðµÇ¾î ÀÖÀ¸¸ç µû¶ó¼ ÆÄ»ý Ŭ·¡½º´Â ÀÌ ÇÔ¼öµéÀ» ¹Ýµå½Ã ÀçÁ¤ÀÇÇØ¾ß ÇÑ´Ù.
CParse Ŭ·¡½º´Â ¼ø¼ö °¡»óÇÔ¼ö¸¦ °¡Áö°í ÀÖÀ¸¹Ç·Î °´Ã¼¸¦ ¸¸µé ¼ö ¾ø´Â Ãß»ó Ŭ·¡½º·Î ¼±¾ðµÇ¾î ÀÖ´Ù. ÀÌ Å¬·¡½ºÀÇ ±¸Çö ÄÚµå´Â Parse.cpp¿¡ ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÑ´Ù.
CParse::CParse()
{
pInfo=NULL;
InitInfo(TRUE);
}
CParse::~CParse()
{
InitInfo(FALSE);
}
void CParse::InitInfo(BOOL bAlloc)
{
int i;
if (pInfo) {
for (i=0;i<ParseSize;i++) {
if (pInfo[i].pUnit) {
free(pInfo[i].pUnit);
}
}
free(pInfo);
}
if (bAlloc) {
ParseSize=100;
pInfo=(ParseInfo *)malloc(sizeof(ParseInfo)*ParseSize);
for (i=0;i<ParseSize;i++) {
pInfo[i].UnitSize=5;
pInfo[i].pUnit=(ParseUnit *)malloc(sizeof(ParseUnit)*pInfo[i].UnitSize);
memset(pInfo[i].pUnit,-1,sizeof(ParseUnit)*pInfo[i].UnitSize);
pInfo[i].Context=0;
}
}
}
void CParse::MakeParseInfo(int nLine, int &nUnit, int pos, int style)
{
if (nUnit > 0) {
if (pInfo[nLine].pUnit[nUnit-1].pos == pos) {
nUnit--;
} else
if (pInfo[nLine].pUnit[nUnit-1].style == style) {
return;
}
}
if (pInfo[nLine].UnitSize == nUnit) {
pInfo[nLine].UnitSize++;
pInfo[nLine].pUnit=(ParseUnit *)realloc(pInfo[nLine].pUnit,
sizeof(ParseUnit)*pInfo[nLine].UnitSize);
}
pInfo[nLine].pUnit[nUnit].pos=pos;
pInfo[nLine].pUnit[nUnit].style=style;
nUnit++;
}
void CParse::DeleteParseInfo(int nLine)
{
int l;
for (l=nLine;;l++) {
if (l>=ParseSize || pInfo[l].pUnit[0].pos == -1)
break;
memset(pInfo[l].pUnit,-1,sizeof(ParseUnit)*pInfo[l].UnitSize);
}
}
void CParse::ParseLines(CApiEdit &ae,int nLine)
{
int l,i;
int OldSize;
if (nLine >= ParseSize) {
OldSize=ParseSize;
ParseSize=nLine+100;
pInfo=(ParseInfo *)realloc(pInfo,sizeof(ParseInfo)*ParseSize);
for (i=OldSize;i<ParseSize;i++) {
pInfo[i].UnitSize=5;
pInfo[i].pUnit=(ParseUnit *)malloc(sizeof(ParseUnit)*pInfo[i].UnitSize);
memset(pInfo[i].pUnit,-1,sizeof(ParseUnit)*pInfo[i].UnitSize);
pInfo[i].Context=0;
}
}
if (pInfo[nLine].pUnit[0].pos != -1)
return;
for (l=nLine;l>=0;l--) {
if (pInfo[l].pUnit[0].pos != -1)
break;
}
l++;
for (i=l;i<=nLine;i++) {
ParseLine(ae,i);
}
}
BOOL CParse::IsStringExist(TCHAR *list,TCHAR *str,int len,BOOL bCase)
{
TCHAR *tbuf;
BOOL ret;
tbuf=(TCHAR *)malloc(len+3);
tbuf[0]=¡® ¡®;
lstrcpyn(tbuf+1,str,len+1);
tbuf[len+1]=¡® ¡®;
tbuf[len+2]=0;
if (bCase==FALSE) {
CharLower(tbuf);
}
ret=(strstr(list,tbuf)!=NULL);
free(tbuf);
return ret;
}
BOOL CParse::IsNumber(CApiEdit &ae,int s, int e)
{
int i;
TCHAR ch;
if (ae.buf[s]==¡®0¡¯ && (ae.buf[s+1]==¡®x¡¯ || ae.buf[s+1]==¡®X¡¯)) {
for (i=s+2;i<=e;i++) {
ch=ae.buf[i];
if (!((ch >= ¡®0¡¯ && ch <= ¡®9¡¯) ||
(ch >= ¡®a¡¯ && ch <= ¡®f¡¯) ||
(ch >= ¡®A¡¯ && ch <= ¡®F¡¯)))
return FALSE;
}
} else {
for (i=s;i<=e;i++) {
ch=ae.buf[i];
if (!(ch >= ¡®0¡¯ && ch <= ¡®9¡¯))
return FALSE;
}
}
return TRUE;
}
void CParse::GetStyleColor(int style, COLORREF &fore, COLORREF &back)
{
fore=arStyle[style].fore;
back=arStyle[style].back;
}
void CParse::SetStyleColor(int style, COLORREF fore, COLORREF back)
{
arStyle[style].fore=fore;
arStyle[style].back=back;
}
void CParse::GetStyleName(int style, TCHAR *szName)
{
lstrcpy(szName,arStyle[style].name);
}
¼ø¼ö °¡»óÇÔ¼ö¿Í ÀζóÀÎ ÇÔ¼ö¸¦ Á¦¿ÜÇÑ ¿©¼¸ °³ÀÇ ÇÔ¼ö Äڵ尡 ÀÛ¼ºµÇ¾î ÀÖ´Ù. ÀÌ ÇÔ¼öµéÀº ¸ðµç ºÐ¼®±âµéÀÌ °øÅëÀûÀ¸·Î »ç¿ëÇÏ´Â °ø¿ë ÇÔ¼öµéÀÌ´Ù. Äڵ带 ºÐ¼®Çغ¸ÀÚ.
ºÐ¼®±â´Â ºÐ¼® Á¤º¸ ¹è¿ÀÇ Æ÷ÀÎÅÍÀÎ pInfo¸¸ °¡Áö°í ÀÖÀ¸¹Ç·Î ºÐ¼®°á°ú¸¦ ÀúÀåÇϱâ À§ÇØ ÀÌ ¹è¿À» ¸ÕÀú ÇÒ´çÇÏ°í ÃʱâÈÇØ¾ß ÇÑ´Ù. ÀÌ ÀÛ¾÷Àº InitInfo ¸â¹öÇÔ¼ö°¡ ÁÖ·Î ÇÏ°Ô µÇ¸ç »ý¼ºÀÚ¿Í Æı«ÀÚ ±×¸®°í ApiEditÀÇ InitDoc¿¡¼ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. Äڵ带 º¸°í ºÐ¼®Çغ¸ÀÚ.
¹è¿À» ÇÒ´çÇϱâ Àü¿¡ ¸ÕÀú ÀÌ¹Ì ÇÒ´çµÇ¾î ÀÖ´Â »óÅÂÀ̸é ÇÒ´çµÈ ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇØ¾ß ÇÑ´Ù. ¹®¼°¡ ¹Ù²ð ¶§ ÀÌÀü ¹®¼ÀÇ ºÐ¼® Á¤º¸¸¦ Áö¿ö¾ß Çϱ⠶§¹®ÀÌ´Ù. pInfo°¡ NULLÀÌ ¾Æ´Ï¸é Áï ÇÒ´çµÇ¾î ÀÖ´Â »óÅÂÀ̸é pInfo´Â ¹°·ÐÀÌ°í pInfoÀÇ ¸â¹öÀÎ pUnitµµ °°ÀÌ »èÁ¦ÇÑ´Ù.
pInfo¸¦ ±ú²ýÇÏ°Ô ºñ¿î ÈÄ »õ·Î ÇÒ´çÇ쵂 ´Ü bAllocÀμö°¡ TRUEÀÏ ¶§¸¸ ÇÒ´çÇÑ´Ù. ÀÌ Àμö°¡ FALSEÀÌ¸é ±×³É pInfo¸¦ »èÁ¦Çϱ⸸ ÇÑ´Ù. ºÐ¼®±â¸¦ ¿ÏÀüÈ÷ Á¦°ÅÇÏ°íÀÚ ÇÒ ¶§ bAllocÀº FALSE°¡ µÈ´Ù. Ãʱâ ÇÒ´ç·®Àº ÃÑ 100ÁÙÀÇ ºÐ¼® Á¤º¸¸¦ ÀúÀåÇÒ ¼ö ÀÖµµ·Ï ÇÏ°í °¢ ÁÙ´ç 5°³ÀÇ À¯´ÖÀ» ÀúÀåÇÒ ¼ö ÀÖµµ·Ï ÇÏ¿´´Ù. Áï pInfo ¹è¿Àº Å©±â 100À¸·Î, pUnit ¹è¿Àº Å©±â 5·Î ÃʱâȵȴÙ.
µÎ ¹è¿ÀÇ Ãʱâ ÇÒ´ç·®Àº ¾îµð±îÁö³ª ÃʱⰪ¿¡ ºÒ°úÇÏ´Ù. ÁÙ ¼ö³ª À¯´Ö¼ö´Â ½ÇÇàÁß¿¡ ÇÊ¿äÇÑ ¸¸Å ÀçÇÒ´çµÇ¹Ç·Î óÀ½ºÎÅÍ Å©°Ô ÇÒ´çÇÒ ÇÊ¿ä°¡ ¾øÀ¸¸ç Àû´çÇÑ Å©±â¸¸Å¸¸ ÇÒ´çÇÏ¸é µÈ´Ù. ÁÙ ¼ö¸¦ 100À¸·Î ÀâÀº °ÍÀº Ưº°ÇÑ Àǹ̴ ¾øÀ¸¸ç ±×³É ´Ü¼øÇÑ ÀÓÀÇÀÇ °ªÀÌ´Ù. À¯´ÖÀÇ Ãʱâ Å©±â 5´Â »ó´çÈ÷ ½É»ç¼÷°í ³¡¿¡ °áÁ¤ÇÑ °ÍÀε¥ ÀÌ °ªÀÌ ³Ê¹« Å©¸é ¸Þ¸ð¸®°¡ ³¶ºñµÉ ¼ö ÀÖÀ¸¸ç ³Ê¹« ÀÛÀ¸¸é ÀçÇÒ´çÀÌ ºó¹øÇØÁ®¼ ´À·ÁÁú ¼ö ÀÖ´Ù. ´ëºÎºÐÀÇ ¹®¼¿¡¼ ½ºÅ¸ÀÏÀÌ 5¹ø ¹Ù²ð Á¤µµ¸é ºñ±³Àû ÃæºÐÇÑ °Í °°¾Æ 5·Î °áÁ¤Çß´Ù. ¸¸¾à ¸Þ¸ð¸®¸¦ Á» ´õ ¾²´õ¶óµµ ¼Óµµ¸¦ ³ôÀÌ°í ½Í´Ù¸é ÀÌ °ªÀ» Á» ´õ Å©°Ô Àâ¾Æ ÁÖ¸é µÈ´Ù.
¸Þ¸ð¸® ÇÒ´ç ÈÄ À¯´ÖÀÇ pos, style ¸â¹ö´Â ¸ðµÎ -1·Î ÃʱâÈÇÏ¿´´Ù. À§Ä¡°ªÀÎ pos°¡ -1À» °¡Áö´Â °ÍÀº ¾ÆÁ÷ ºÐ¼®µÇÁö ¾ÊÀº Á¤º¸¶ó´Â ¶æÀ¸·Î Á¤ÀÇÇÑ´Ù. Context ¸â¹ö´Â ¸ðµÎ 0À¸·Î ÃʱâÈÇÏ¿© Ưº°ÇÑ ÄÁÅؽºÆ®¸¦ °¡ÁöÁö ¾Êµµ·Ï ÇÏ¿´´Ù. InitInfo ÇÔ¼ö¿¡ ÀÇÇØ pInfo ¹è¿Àº ´ÙÀ½ ±×¸²Ã³·³ ÃʱâȵȴÙ.
°³³äÀûÀ¸·Î´Â 2Â÷¿ø ¹è¿°ú °ÅÀÇ ºñ½ÁÇÑ ¸ð¾çÀÌ´Ù. ¼öÁ÷À¸·Î 100ÁÙÀÇ ±æÀ̸¦ °¡Áö¸ç ÇÑ ÁÙ¿¡ ´Ù¼¸ °³ÀÇ ½ºÅ¸ÀÏÀ» ÀúÀåÇÒ ¼ö ÀÖ´Â ¿ë·®ÀÌ´Ù. ¹®¼ÀÇ ¹®¹ýÀÌ º¹ÀâÇØÁö¸é ÀÌ ¹è¿ÀÌ ¼öÆòÀ¸·Î È®ÀåµÉ °ÍÀÌ¸ç ¹®¼ÀÇ ±æÀÌ°¡ ±æ¾îÁö¸é ¼öÁ÷À¸·Î È®ÀåµÉ °ÍÀÌ´Ù.
InitInfo ÇÔ¼ö´Â »ý¼ºÀÚ¿Í Æı«ÀÚ¿¡¼ °¢°¢ È£ÃâµÇ´Âµ¥ ±× Àǹ̴ ´Ù¸£´Ù. »ý¼ºÀÚ´Â pInfo¸¦ NULL·Î ÃʱâÈÇÑ ÈÄ InitInfo(TRUE)¸¦ È£ÃâÇϹǷΠ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇÏÁö´Â ¾Ê°í Ãʱâ ÇҴ縸 ÇÑ´Ù. ¹Ý¸é Æı«ÀÚ´Â InitInfo(FALSE)¸¦ È£ÃâÇϹǷΠ¸Þ¸ð¸®¸¦ ÇØÁ¦Çϱ⸸ ÇÏ°í ÀçÇÒ´çÀº ÇÏÁö ¾Ê´Â´Ù. Áï InitInfo ÇÔ¼ö´Â bAlloc ÀμöÀÇ °ª¿¡ µû¶ó ÇØÁ¦¿Í Ãʱâȸ¦ µ¿½Ã¿¡ ¼öÇàÇÏ´Â ÇÔ¼öÀÌ´Ù.
ÇÔ¼öÀ̸§À» º¸¸é ¾Ë°ÚÁö¸¸ ºÐ¼® Á¤º¸¸¦ ÀÛ¼ºÇÏ´Â ÀÏÀº MakeParseInfo ÇÔ¼ö°¡ ÇÑ´Ù. ÀÌ ÇÔ¼ö´Â 4°³ÀÇ Àμö¸¦ Àü´Þ¹Þ´Âµ¥ nLineÀÌ ÁÙ¹øÈ£ÀÌ°í nUnitÀº À¯´ÖÀÇ ¹øÈ£ÀÌ´Ù. pInfo¸¦ 2Â÷¿ø ¹è¿À̶ó°í ÇÒ ¶§ nLineÀº ¹è¿ÀÇ y ÁÂÇ¥°ªÀÌ°í nUnitÀº ¹è¿ÀÇ x ÁÂÇ¥¿¡ ÇØ´çÇÑ´Ù. ºÐ¼® Á¤º¸¸¦ ÀÛ¼ºÇÑ ÈÄ¿¡ À¯´Ö ¹øÈ£´Â ÇÑ Ä µÚ·Î À̵¿ÇØ¾ß ÇϹǷΠnUnitÀº ·¹ÆÛ·±½º·Î Àü´Þ¹Þ´Â´Ù.
³ª¸ÓÁö µÎ °³ÀÇ Àμö pos, styleÀº ½ÇÁ¦ ºÐ¼® Á¤º¸¿¡ ÇØ´çÇÏ´Â ¿ÀÇÁ¼Â, ½ºÅ¸ÀÏ°ªÀÌ´Ù. MakeParseInfo ÇÔ¼ö°¡ ÇÏ´Â °¡Àå Áß¿äÇÑ ÀÏÀº ÀÌ µÎ °ªÀ» pInfo.pUnit¿¡ ±â·ÏÇÏ´Â °ÍÀÌ¸ç ´ÙÀ½ µÎ ÁÙÀÌ ÇÙ½É ÄÚµåÀÌ´Ù.
void CParse::MakeParseInfo(int nLine, int &nUnit, int pos, int style)
{
....
pInfo[nLine].pUnit[nUnit].pos=pos;
pInfo[nLine].pUnit[nUnit].style=style;
}
Àμö·Î Àü´ÞµÈ °ªÀ» pUnit ¹è¿¿¡ ±â·ÏÇÑ´Ù. ÀÌ µÎ ÁÙÀÇ ¾Õ¿¡ ÀÖ´Â ³ª¸ÓÁö ÄÚµå´Â ¸Þ¸ð¸®°ü¸®¿Í Áߺ¹ Á¤º¸ ¹æÁö ÄÚµåÀÌ´Ù. pInfo ¹è¿Àº µ¿ÀûÀ¸·Î ÇÒ´çµÇ±â ¶§¹®¿¡ nLine ÁÙ°ú nUnit À¯´ÖÀÌ Ç×»ó Á¸ÀçÇÑ´Ù´Â º¸ÀåÀÌ ¾ø´Ù. nLine ÁÙÀÌ ¾øÀ¸¸é ÀçÇÒ´çÇØ¾ß Çϴµ¥ ÀÌ ÀÛ¾÷Àº MakeParseInfo ÇÔ¼ö¸¦ È£ÃâÇϴ ȣÃâÃø¿¡¼ ÇϹǷΠnLineÀº Ç×»ó À¯È¿ÇÏ´Ù.
±×·¯³ª nUnitÀº ÀÖÀ» ¼öµµ ÀÖ°í ¾øÀ» ¼öµµ ÀÖ´Ù. pUnitÀº ÃÖÃÊ 5ÀÇ Å©±â·Î ÇÒ´çµÇ¹Ç·Î pUnit ¹è¿Àº pUnit[4]±îÁö¸¸ À¯È¿ÇÏ´Ù. ÀÌ »óÅ¿¡¼ nUnitÀÌ 5°¡ µÇ¸é pUnit ¹è¿À» ÀçÇÒ´çÇÏ¿© ´Ã·Á¾ß ÇÑ´Ù. MakeParseInfo ÇÔ¼ö´Â ºÐ¼® Á¤º¸¸¦ pInfo¿¡ ±â·ÏÇϱâ Àü¿¡ nUintÀ» ±â·ÏÇÒ °ø°£ÀÌ ÀÖ´ÂÁö ¸ÕÀú Á¶»çÇÏ°í ¾øÀ¸¸é pUnitÀÇ Å©±â¸¦ Çϳª ´õ ´Ã·Á ÀçÇÒ´çÇÑ´Ù. ¹è¿ÀÇ Å©±â°¡ À۱⠶§¹®¿¡ ¿©À¯ºÐÀº ÁÖÁö ¾Ê¾Ò´Ù.
ÇÔ¼öÀÇ ¼±µÎ¿¡ ÀÖ´Â ´ÙÀ½ ÄÚµå´Â ¾à°£ÀÇ ¼³¸íÀÌ ÇÊ¿äÇÏ´Ù. ÀÌ ÄÚµå´Â Áߺ¹µÈ Á¤º¸¸¦ ÀÛ¼ºÇÏÁö ¾Êµµ·Ï ÇÏ´Â µÎ °¡Áö Á¶°Ç Á¡°ËÀ» ÇÏ°í ÀÖ´Ù.
if (nUnit > 0) {
if (pInfo[nLine].pUnit[nUnit-1].pos == pos) {
nUnit--;
} else
if (pInfo[nLine].pUnit[nUnit-1].style == style) {
return;
}
}
ù ¹ø° Á¶°ÇÀº ÇöÀç ÀÛ¼ºÇÏ´Â À¯´Ö°ú ÀÌÀü À¯´ÖÀÇ À§Ä¡°¡ °°À¸¸é ÀÌÀü À¯´ÖÀ» »èÁ¦ÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. n¹ø° À¯´Ö°ú n-1¹ø° À¯´ÖÀÇ À§Ä¡°¡ °°´Ù´Â ¸»À» n-1¹ø° À¯´ÖÀÇ ±æÀÌ°¡ 0À̶ó´Â ¶æÀ̸ç ÀÌ À¯´ÖÀº Á¸ÀçÇÒ ÇÊ¿ä°¡ ¾øÀ¸¹Ç·Î »èÁ¦µÇ¾î¾ß ÇÑ´Ù. ºÐ¼®±â´Â ÁÙÀÇ ºÐ¼®À» ½ÃÀÛÇϱâ Àü¿¡ Ç×»ó º¸Åë ¹®ÀÚ¿ À¯´ÖÀ» pUnit[0]¿¡ ¹èÄ¡ÇÏ¿© ºÐ¼® Á¤º¸¸¦ ÃʱâÈÇÑ ÈÄ Å°¿öµå³ª ÁÖ¼® µîÀ» ã´Â´Ù. ±×·¯´Ù º¸´Ï ´ÙÀ½°ú °°Àº ºÐ¼® Á¤º¸°¡ ¸¸µé¾îÁú ¼ö ÀÖ´Ù.
pUnit[0] : ¿ÀÇÁ¼Â 0ºÎÅÍ º¸Åë ¹®ÀÚ¿
pUnit[1] : ¿ÀÇÁ¼Â 0ºÎÅÍ Å°¿öµå
pUnit[2] : ¿ÀÇÁ¼Â 5ºÎÅÍ º¸Åë ¹®ÀÚ¿
pUnit[3] : ¿ÀÇÁ¼Â 5ºÎÅÍ ÁÖ¼®
º¸´Ù½ÃÇÇ pUnit[0]¿Í pUnit[2]´Â ±æÀÌ°¡ 0À̹ǷΠºÒÇÊ¿äÇÏ°Ô °ø°£¸¸ ³¶ºñÇÏ°í ÀÖ´Â °ÍÀÌ´Ù. ¹°·Ð À־ °á±¹ ȸéÃâ·ÂÀº µÇÁö ¾Ê±â ¶§¹®¿¡ ¹«ÇØÇÏÁö¸¸ Ãâ·Â¼Óµµ¿¡µµ ºÒ¸®ÇÏ°í ¸Þ¸ð¸®¸¦ Á»¸Ô´Â ÀÌ·± À¯´ÖÀ» ±×´ë·Î ³»¹ö·Á µÑ ÇÊ¿ä°¡ ¾ø´Ù. À̶§ nUnitÀ» 1°¨¼Ò½ÃÄÑ »õ·Î ÀÛ¼ºµÇ´Â À¯´ÖÀÌ ÀÌÀü À¯´ÖÀ» µ¤¾î¾²µµ·Ï ÇÏ¿´´Ù.
µÎ ¹ø° Á¶°ÇÀº ÇöÀç ÀÛ¼ºÇÏ´Â À¯´Ö°ú ÀÌÀü À¯´ÖÀÌ °°Àº ½ºÅ¸ÀÏÀÌ¸é µÎ À¯´ÖÀ» ÅëÇÕÇÑ´Ù. ´ÙÀ½°ú °°Àº °æ¿ìÀÌ´Ù.
pUnit[0] : ¿ÀÇÁ¼Â 0ºÎÅÍ º¸Åë ¹®ÀÚ¿
pUnit[1] : ¿ÀÇÁ¼Â 1ºÎÅÍ Å°¿öµå
pUnit[2] : ¿ÀÇÁ¼Â 5ºÎÅÍ Å°¿öµå
pUnit[3] : ¿ÀÇÁ¼Â 30ºÎÅÍ ÁÖ¼®
pUnit[1]°ú pUnit[2]´Â ½ºÅ¸ÀÏÀÌ °°À¸¹Ç·Î ÅëÇÕÇÒ ¼ö ÀÖÀ¸¸ç »ç½Ç»ó pUnit[2]´Â ÀüÇô ºÒÇÊ¿äÇÑ Á¸ÀçÀÌ´Ù. ±×·¡¼ ÀÌ·± °æ¿ì´Â ¾Æ¿¹ ºÐ¼® Á¤º¸¸¦ ÀÛ¼ºÇÏÁö ¾Ê´Â´Ù. pUnit[1]¸¸ À־ ¿ÀÇÁ¼Â1ºÎÅÍ ´ÙÀ½ À¯´ÖÀÇ À§Ä¡ÀÎ ¿ÀÇÁ¼Â 30±îÁö°¡ Å°¿öµå¶ó´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ¹°·Ð pUnit[2]¸¦ ±×³É ³»¹ö·Á µÎ¾îµµ µÎ ¹ø ³ª´©¾î Ãâ·ÂµÉ »ÓÀÌÁö ÀÌ»óÇÏ°Ô µ¿ÀÛÇÏ´Â °ÍÀº ¾Æ´Ï´Ù.
µÎ Á¶°Ç ¸ðµÎ ÃÖ¼ÒÇÑ ÇϳªÀÇ À¯´ÖÀº ÀÛ¼ºµÇ¾î ÀÖ´Â »óÅ¿¡¼¸¸ Á¡°ËÇÒ ¼ö ÀÖÀ¸¹Ç·Î if (nUnit > 0) Á¶°Ç ºí·Ï¿¡ ½Î¿© ÀÖ´Ù. ÀÌ ÇÔ¼ö¿¡¼ Áߺ¹ Á¤º¸¸¦ ¹æÁöÇÏ´Â ¼ºñ½º¸¦ ÇÏ°í Àֱ⠶§¹®¿¡ ºÐ¼®±â´Â ¹«¾ùÀΰ¡ ¹ß°ßµÇ´Â Á·Á· ÀÌ ÇÔ¼ö¸¦ ºÒ·¯ Áֱ⸸ ÇÏ¸é µÈ´Ù. ÀÌ µÎ Á¶°Ç Á¡°ËÀº ´©±º°¡°¡ ¹Ýµå½Ã ÇØ¾ß Çϴµ¥ CParse ºÎ¸ð Ŭ·¡½º°¡ Ã¥ÀÓÁö°í ÇϹǷΠÆÄ»ý ºÐ¼®±âÀÇ ºÐ¼® Äڵ尡 °£´ÜÇØÁø´Ù.
ºÐ¼® Á¤º¸¸¦ »èÁ¦ÇÑ´Ù´Â °ÍÀº ºÐ¼®µÈ °á°ú¸¦ ¹«È¿ÈÇÑ´Ù´Â ¶æÀÌ´Ù. ¹®¼°¡ Á¶±ÝÀÌ¶óµµ ÆíÁýµÇ¸é ÆíÁýµÈ À§Ä¡ ÀÌÈÄÀÇ ³»¿ë¿¡ ´ëÇؼ´Â ´Ù½Ã ±¸¹® ºÐ¼®À» ÇØ¾ß ÇÑ´Ù. ±×·¸´Ù°í Çؼ ÆíÁýµÈ Áï½Ã ±¸¹® ºÐ¼®À» ´Ù½Ã ÇÒ ÇÊ¿ä´Â ¾øÀ¸¸ç ºÐ¼® Á¤º¸¸¦ ¹«È¿È½ÃÄÑ ³õ±â¸¸ ÇÏ¸é µÈ´Ù. ApiEdit´Â ȸ鿡 Ãâ·ÂÇϱâ Àü¿¡ ¹«È¿ÇÑ ºÐ¼® Á¤º¸¸¦ À¯È¿ÇÏ°Ô ¸¸µç ÈÄ, Áï ÀçºÐ¼®ÇÑ ÈÄ Ãâ·ÂÇϵµ·Ï µÇ¾î ÀÖ´Ù. ºÐ¼® Á¤º¸¸¦ »èÁ¦ÇÏ´Â °ÍÀº °ð ¡®ÀÌÈÄÀÇ ³»¿ë¿¡ ´ëÇؼ´Â ±¸¹® ºÐ¼®À» ´Ù½Ã Ç϶󡯴 ¸í·ÉÀ» pInfo¿¡ ³²°Ü ³õ´Â °ÍÀÌ´Ù.
ºÐ¼® Á¤º¸ »èÁ¦´Â DeleteParseInfo ÇÔ¼ö¿¡¼ ÇÑ´Ù. nLine Àμö·Î ÁÙ¹øÈ£¸¦ ¹Þ´Âµ¥ ÀÌ ÁÙ ÀÌÈÄÀÇ ¸ðµç ºÐ¼® Á¤º¸¸¦ »èÁ¦ÇÏ¿© ¹«È¿ÈÇÑ´Ù. Åë»ó ÆíÁýÀÌ ÀÏ¾î³ ÁÙ¹øÈ£°¡ nLineÀ¸·Î Àü´ÞµÇ¸ç ±× ÁÙ ÀÌÈĸ¦ ´Ù½Ã ºÐ¼®Çϵµ·Ï ÇÑ´Ù.
ºÐ¼® Á¤º¸¸¦ »èÁ¦ÇÏ´Â °ÍÀº ¾ÆÁÖ °£´ÜÇÏ´Ù. nLineºÎÅÍ ½ÃÀÛÇؼ pInfoÀÇ ³¡±îÁö ¶Ç´Â ºÐ¼® Á¤º¸°¡ ÀÌ¹Ì »èÁ¦µÇ¾î ÀÖ´Â ÁÙ±îÁö ·çÇÁ¸¦ µ¹¸ç pUnitÀÇ pos¸¦ ¸ðµÎ -1·Î ¹Ù²ã ³õÀ¸¸é µÈ´Ù. pos°¡ -1°ªÀ» °¡Áö´Â °ÍÀº ¾ÆÁ÷ ºÐ¼®µÇÁö ¾Ê¾Ò´Ù´Â ¶æÀ» °¡Áöµµ·Ï Á¤ÀǵǾî ÀÖ´Ù. pos¸¸ -1·Î ¹Ù²Ù¸ç ÇÒ´çµÇ¾î ÀÖ´Â ¸Þ¸ð¸®±îÁö ÇØÁ¦ÇÒ ÇÊ¿ä´Â ¾ø´Ù. ¿Ö³ÄÇÏ¸é ¹«È¿ÈµÈ ÁÙÀ» ÀçºÐ¼®ÇÏ¸é °á±¹ ±× ¸Þ¸ð¸®°¡ ¶Ç ÇÊ¿äÇϱ⠶§¹®ÀÌ´Ù.
ParseLines ÇÔ¼ö´Â ¿ÜºÎ¿¡¼ º¼ ¶§ ¹®¼¸¦ ºÐ¼®ÇÏ´Â ÁÖüÀ̸ç Àμö·Î Àü´ÞµÈ nLine ÁÙ±îÁö ºÐ¼®À» ÇÑ´Ù. ±×·¯³ª Á÷Á¢ ¹®¼ ºÐ¼®À» ÇÏ´Â °ÍÀº ¾Æ´Ï¸ç ºÐ¼®À» À§ÇÑ Áغñ¸¸ ÇÏ°í °¢ ÁÙº°·Î ºÐ¼® ÇÔ¼ö¸¦ È£ÃâÇÒ »ÓÀÌ´Ù. ÇÏÁö¸¸ ÀÌ ÇÔ¼ö¿¡ ÀÇÇØ ºÐ¼® Á¤º¸°¡ ÀÛ¼ºµÇ¹Ç·Î ApiEdit´Â ¹®¼ ºÐ¼®ÀÌ ÇÊ¿äÇÒ ¶§ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇϱ⸸ Çϸé nLine±îÁö ¿ÏÀüÈ÷ ºÐ¼®µÈ »óÅ°¡ µÈ´Ù. Áï ÀÌ ÇÔ¼ö´Â ¹®¼ ºÐ¼®ÀÇ ½ÃÀÛÁ¡ÀÌ¸é¼ ¿ÜºÎ¿Í Åë½ÅÇÏ´Â °¡Àå Áß¿äÇÑ ÀÎÅÍÆäÀ̽º ÇÔ¼öÀÌ´Ù.
ParseLines ÇÔ¼ö°¡ ÇÏ´Â °¡Àå Áß¿äÇÑ ÀÏÀº ºÐ¼® Á¤º¸ ¹è¿À» °ü¸®ÇÏ´Â °ÍÀÌ´Ù. pInfo ¹è¿ÀÇ Ãʱâ Å©±â 100Àº ´ëºÎºÐÀÇ ¹®¼¿¡¼ ºÎÁ·ÇÑ Å©±âÀÌ´Ù. ±×·¯³ª ÇÊ¿äÇÒ ¶§ ¹è¿Å©±â¸¦ ´Ã¸± ¼ö Àֱ⠶§¹®¿¡ Å©±â°¡ ÀÛ´Ù°í Çؼ ¹®Á¦°¡ µÇÁö´Â ¾Ê´Â´Ù. ºÐ¼®±â´Â ¹®¼¸¦ ºÐ¼®ÇÏ¸é¼ Ç×»ó ÇöÀç ÇÒ´çµÈ ¹è¿Å©±âÀÎ ParseSize°¡ ÀÛÁö ¾ÊÀºÁö Á¡°ËÇÏ°í ÀÛÀ¸¸é ÇÊ¿äÇÑ ¸¸Å Å©±â¸¦ ´Ã¸°´Ù. ¿¹¸¦ µé¾î pInfo°¡ 100ÁÙ±îÁö ÇÒ´çµÇ¾î ÀÖ´Â »óÅ¿¡¼ 105¹ø° ÁÙÀÇ ºÐ¼® Á¤º¸¸¦ ÀÛ¼ºÇÑ´Ù¸é ÀÌ Å©±â¸¦ 105³ª 120Á¤µµÀÇ ÃæºÐÇÑ Å©±â·Î ´Ã¸± ¼ö ÀÖ´Ù.
¹è¿ÀÇ °ø°£ÀÌ ¾ðÁ¦ ºÎÁ·ÇÒÁö ¾Ë ¼ö ¾øÀ¸¹Ç·Î ÀÌ ÀÛ¾÷Àº ºÐ¼® Á¤º¸¸¦ ÀÛ¼ºÇÒ ¶§¸¶´Ù ¸Å¹ø ÇØ¾ß Çϴµ¥ ¸ðµç ºÐ¼® ·çƾ¿¡¼ ÀÌ ÀÛ¾÷À» Çϱâ´Â ¹«Ã´ ¹ø°Å·Ó´Ù. ¾Æ¸¶ Á¤º¸¸¦ ÀÛ¼ºÇÏ´Â Äڵ庸´Ù ¸Þ¸ð¸®¸¦ °ü¸®ÇÏ´Â Äڵ尡 ´õ ¸¹¾ÆÁú °ÍÀÌ´Ù. ±×·¡¼ ºÐ¼®À» ½ÃÀÛÇÏ´Â ½ÃÁ¡ÀÎ ÀÌ ÇÔ¼öÀÇ ¼±µÎ¿¡¼¸¸ ¹è¿À» °ü¸®ÇÑ´Ù. ¸ðµç ºÐ¼® °ü·Ã ÇÔ¼ö°¡ È£ÃâµÇ±â Àü¿¡ ÀÌ ÇÔ¼ö°¡ ¸ÕÀú È£ÃâµÇ¹Ç·Î ¿©±â¼ ¹è¿À» ÃæºÐÇÏ°Ô ÇÒ´çÇسõ±â¸¸ ÇÏ¸é ³ª¸ÓÁö ÄÚµå´Â ¾È½ÉÇÏ°í pInfo ¹è¿À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
¸¸¾à ParseSize°¡ nLineº¸´Ù À۰ųª °°´Ù¸é pInfo ¹è¿Àº nLineÀÌ»óÀÇ Å©±â¸¦ °¡Áöµµ·Ï ÀçÇÒ´çÇÑ´Ù. ÀÛÀ» ¶§»Ó¸¸ ¾Æ´Ï¶ó °°À» ¶§µµ ÀçÇÒ´çÀ» ÇØ¾ß ÇÔÀ» À¯ÀÇÇϵµ·Ï ÇÏÀÚ. ¿Ö³ÄÇϸé nLineÀº Zero BaseÀÇ ¹è¿ ÷ÀÚÀε¥ ºñÇØ ParseSize´Â One BaseÀÇ ¹è¿Å©±âÀ̱⠶§¹®ÀÌ´Ù. nLineÀÌ 100ÀÏ ¶§ Áï 100¹ø ÁÙÀÇ ºÐ¼® Á¤º¸¸¦ ±â·ÏÇÏ°í ÀÖ´Ù°í Çغ¸ÀÚ. À̶§ ParseSize°¡ 100À̶ó¸é pInfo´Â 99±îÁö¸¸ ÇÒ´çµÇ¾î ÀÖ´Â »óÅÂÀ̹ǷΠÀ̶§µµ ¹è¿À» ÀçÇÒ´çÇÏ¿© pInfo[100]ÀÌ Á¸ÀçÇϵµ·Ï ÇØ¾ß ÇÑ´Ù.
¹è¿ Å©±â¸¦ ´Ã¸± ¶§ nLine¸¸Å Á¤È®ÇÏ°Ô Å©±â¸¦ ´Ã¸®´Â °ÍÀÌ ¾Æ´Ï¶ó ¹Ì¸® 100ÁÙ¸¸ÅÀÇ ¿©À¯ºÐÀ» ÁÖ¾î ÃæºÐÇÑ Å©±â·Î ´Ã·Á ÁÖµµ·Ï ÇÏ¿© ÀçÇÒ´ç Ƚ¼ö¸¦ ÃÖ¼ÒÈÇϵµ·Ï ÇÏ¿´´Ù. ÀÌ·± ±â¹ýÀº ¾Õ¿¡¼µµ ¸¹ÀÌ ¼±º¸ÀÎ ÀûÀÌ ÀÖÀ¸¹Ç·Î ÀÌÁ¦ ¾ÆÁÖ Àͼ÷ÇÒ °ÍÀÌ´Ù. ParseSize¸¦ nLine+100À¸·Î º¯°æÇÏ°í ÀÌ Å©±â¸¸Å pInfo ¹è¿À» ÀçÇÒ´çÇÏ¿´À¸¸ç »õ·Î Ãß°¡µÈ ÁÙ¿¡ ´ëÇØ pUnitµµ »õ·Î ÇÒ´çÇÏ¿´´Ù. ParseLines ÇÔ¼ö´Â ºÐ¼® ·çƾ¿¡¼ ÇÊ¿ä·Î ÇÏ´Â nLine ÁÙÀÌ ¹Ýµå½Ã pInfo ¹è¿¿¡ Á¸ÀçÇϵµ·Ï º¸ÀåÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù.
ºÐ¼®À» ½ÃÀÛÇϱâ Àü¿¡ ÀÌ¹Ì ºÐ¼®µÇ¾î ÀÖ´Â ÁÙÀÎÁö¸¦ ¸ÕÀú Á¡°ËÇغ¸°í ºÐ¼®µÇ¾î ÀÖÀ¸¸é ±×³É ¸®ÅÏÇÑ´Ù. nLine ÁÙÀÇ Ã¹ ¹ø° À¯´ÖÀÇ pos°¡ -1ÀÌ ¾Æ´Ï¶ó¸é ÀÌ ÁÙ±îÁö ºÐ¼®ÀÌ µÇ¾î ÀÖ´Â °ÍÀ¸·Î ÆÇ´ÜÇÒ ¼ö ÀÖ´Ù. È£½ºÆ®´Â ¹«Á¶°Ç ÀÌ ÇÔ¼ö¸¦ È£ÃâÇϵµ·Ï µÇ¾î ÀÖÀ¸¹Ç·Î ¹Ýµå½Ã ºÐ¼® ¿Ï·á ¿©ºÎ¸¦ Á¡°ËÇغ¸¾Æ¾ß ÇÑ´Ù. º¯È°¡ ¾ø´Â ¹®¼¸¦ ´Ù½Ã ±×¸®±â¸¸ ÇÑ´Ù¸é ºÐ¼® Á¤º¸´Â À¯È¿ÇϹǷΠÀçºÐ¼®ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.
¹è¿ °ü¸®¿Í ºÐ¼® ¿Ï·á Á¡°Ë ÈÄ ºÐ¼® ´ë»ó ÁÙÀ» °è»êÇϴµ¥ ºÐ¼®ÇÒ ³¡ ÁÙÀº Àμö·Î Àü´ÞµÈ nLineÀÌ¸ç ºÐ¼®ÀÇ ½ÃÀÛÁÙÀº µû·Î ã¾Æ¾ß ÇÑ´Ù. nLine¿¡¼ ½ÃÀÛÇÏ¿© À§·Î ¿Ã¶ó°¡¸é¼ ºÐ¼®µÇÁö ¾ÊÀº ù ÁÙÀ» ã´Â´Ù. ÀÌ ÁÙÀº ¹®¼°¡ º¯°æµÈ ¿ÀÇÁ¼ÂÀÇ ½ÃÀÛ ¹®´ÜÁÙÀε¥ ȸé»óÀÇ Ã¹ ÁÙÀÏ ¼öµµ ÀÖ°í ȸé»óÀÇ Áß°£ÂëÀÏ ¼öµµ ÀÖ°í ¹®¼ÀÇ Ã³À½ÀÎ 0¹ø° ÁÙÀÏ ¼öµµ ÀÖ´Ù. ±¸¹® ºÐ¼®Àº Ç×»ó ÀÌÀü ÁÙÀÇ ÄÁÅؽºÆ®¸¦ ÂüÁ¶ÇØ¾ß ÇϹǷΠnLineº¸´Ù ¾Õ¿¡ ÀÖ´Â ÁÙÀº ¸ðµÎ °°ÀÌ ºÐ¼®µÇ¾î¾ß ÇÑ´Ù.
±×·¡¼ ¼³»ç ºÐ¼® ½ÃÀÛÁÙÀÌ È¸é»ó¿¡ º¸ÀÌÁö ¾Ê´Â´Ù ÇÏ´õ¶óµµ ±× ÁÙºÎÅÍ ºÐ¼®À» ÇØ ¿Í¾ß ÇÑ´Ù. for ·çÇÁ¿¡¼ nLineºÎÅÍ ½ÃÀÛÇÏ¿© ù ¹ø° À¯´ÖÀÌ -1ÀÌ ¾Æ´Ñ ù ÁÙÀ» ã°í ±× ´ÙÀ½ ÁÙÀ» ÃëÇϸé ÀÌ ÁÙÀÌ ¹Ù·Î ºÐ¼®µÇÁö ¾ÊÀº ù ¹ø° ÁÙÀÌ´Ù. ºÐ¼®ÇÒ Ã¹ ¹ø° ÁÙ lÀÌ °áÁ¤µÇ¸é l~nLine±îÁö ·çÇÁ¸¦ µ¹¸ç ParseLine ÇÔ¼ö¸¦ È£ÃâÇÏ¿© °¢ ÁÙÀ» °³º°ÀûÀ¸·Î ºÐ¼®ÇÑ´Ù. ÀÌ ÇÔ¼ö°¡ ÁøÂ¥ ºÐ¼®À» ÇÏ´Â ÁÖüÀÌ¸ç ·çÇÁ¸¦ ¸ðµÎ µ¹¾ÒÀ» ¶§´Â nLine±îÁö ºÐ¼®ÀÌ ¿Ï·áµÇ¾î ÀÖÀ» °ÍÀÌ´Ù.
IsStringExist ÇÔ¼ö´Â ºÐ¼®±âÀÇ ±¸¹® ºÐ¼®À» º¸Á¶ÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. °¢ ¹®¹ýµéÀº Å°¿öµå, ÇÔ¼ö, ű×, ¿¬»êÀÚ µîÀÇ °íÀ¯ÇÑ ±¸¼º ¿ä¼ÒµéÀ» °¡Áö´Âµ¥ ÀÌ ¿ä¼ÒµéÀº ¹®¹ý¿¡ ¹Ì¸® Á¤ÀÇµÈ ¹®ÀÚ¿ Áß Çϳª¿©¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î HTML ű״ table, body, img µîÀÌ Àִµ¥ Áö±Ý ºÐ¼®ÇÏ°í ÀÖ´Â ºÎºÐÀÌ ÀÌ Áß ÇϳªÀÎÁö Á¶»çÇØ¾ß ÇÑ´Ù. ¾î¶² ¹®ÀÚ¿ÀÌ ¹®ÀÚ¿ ¸ñ·Ï Áß Çϳª¿¡ ¼ÓÇÏ´ÂÁö ¾Æ´ÑÁö¸¦ Á¡°ËÇÏ´Â °ÍÀÌ ÀÌ ÇÔ¼öÀÇ ÁÖµÈ ¸ñÀûÀÌ´Ù.
list´Â ¹®ÀÚ¿ ¸ñ·ÏÀ» °¡Áö´Âµ¥ °¢ ¹®ÀÚ¿Àº °ø¹éÀ¸·Î ºÐ¸®µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. strÀº °Ë»çÇÒ ¹®ÀÚ¿À̸ç lenÀº ¹®ÀÚ¿ÀÇ ±æÀÌÀÌ´Ù. bCase´Â ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇؼ °Ë»çÇÒ °ÍÀΰ¡ ¾Æ´Ñ°¡¸¦ ÁöÁ¤ÇÑ´Ù. C ¾ð¾î´Â ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇϸç HTMLÀ̳ª º£ÀÌÁ÷ °°Àº ¹®¹ýÀº ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇÏÁö ¾Ê´Â´Ù. ºÐ¼®±â´Â °Ë»çÇÏ°íÀÚ ÇÏ´Â ¹®ÀÚ¿ ¸ñ·ÏÀ» ÇϳªÀÇ ¹è¿¿¡ ÀÛ¼ºÇسõ°í Áö±Ý ºÐ¼®ÇÏ°í ÀÖ´Â À§Ä¡ÀÇ ¹®ÀÚ¿ÀÌ ÀÌ ¸ñ·Ï¿¡ ÀÖ´ÂÁö °Ë»çÇϱâ À§ÇØ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ¿¹¸¦ µé¾î °úÀÏÀÇ À̸§À» ¸ñ·ÏÀ¸·Î Á¤ÀÇÇÑ´Ù°í ÇÏÀÚ.
TCHAR *list=" apple orange banana strawberry grape ";
ºÐ¼®ÇÏ°í ÀÖ´Â ¹®ÀÚ¿ÀÌ ÀÌ Áß ÇϳªÀÎÁö Á¶»çÇÏ·Á¸é IsStringExist(list, str, 6, FALSE)¶ó°í È£ÃâÇÏ¸é µÈ´Ù. strÀÌ ¡®orange¡¯¶ó°í ÇßÀ» ¶§ ÀÌ ÇÔ¼ö°¡ ¾î¶»°Ô ¹®ÀÚ¿À» ã´ÂÁö º¸ÀÚ. Àü´ÞµÈ °Ë»ö ¹®ÀÚ¿ÀÇ ±æÀ̺¸´Ù 3¹ÙÀÌÆ® ´õ ±ä ¹öÆÛ¸¦ ÇÒ´çÇÏ°í ¹®ÀÚ¿ÀÇ ¾çÂÊ¿¡ °ø¹é, ±×¸®°í ³¡¿¡ ³Î Á¾·á¹®ÀÚ¿À» ¹èÄ¡ÇÑ´Ù. °Ë»ö ´ë»ó ¹®ÀÚ¿Àº ´ÙÀ½°ú °°¾ÆÁø´Ù.
¾çÂÊ¿¡ °ø¹éÀ» µÎ´Â ÀÌÀ¯´Â ´Ù¸¥ ´Ü¾îÀÇ ÀϺθ¦ ãÁö ¾Êµµ·Ï Çϱâ À§ÇؼÀÌ´Ù. ¸¸¾à ÀÌ·¸°Ô ÇÏÁö ¾ÊÀ¸¸é berry´Â ¸ñ·Ï¿¡ ¾øÁö¸¸ strawberryÀÇ ÀϺο¡ ¼ÓÇØ ÀÖÀ¸¹Ç·Î ÀÌ ´Ü¾î°¡ ¸ñ·Ï¿¡ ÀÖ´Ù°í ¿ÀÆÇÀ» ÇÏ°Ô µÉ °ÍÀÌ´Ù. ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇÏÁö ¾Ê´Â´Ù¸é °Ë»ö ¹®ÀÚ¿À» ¸ðµÎ ¼Ò¹®ÀÚ·Î ¹Ù²Û ÈÄ ºñ±³ÇÑ´Ù.
ÀÌ·¸°Ô Áغñ¸¦ ÇÑ ÈÄ ¸ñ·Ï¿¡¼ strstr ÇÔ¼ö·Î °Ë»ö ´ë»ó ¹®ÀÚ¿ÀÌ ÀÖ´ÂÁö ¾ø´ÂÁö¸¸ Á¶»çÇغ¸¸é µÈ´Ù. ÀÌ ÇÔ¼ö°¡ ÀÌ·± ½ÄÀ¸·Î ¹®ÀÚ¿ Á¡°ËÀ» Çϱ⠶§¹®¿¡ ºÐ¼®±âµéÀº ¸ðµç ¹®ÀÚ¿µéÀ» ¹Ýµå½Ã °ø¹éÀ¸·Î ºÐ¸®ÇØ¾ß ÇÑ´Ù. ½ÉÁö¾î ù ¹ø° ´Ü¾î¿Í ¸¶Áö¸· ´Ü¾îµµ ¾Õ µÚ·Î °ø¹éÀ» °¢°¢ ³Ö¾î¾ß ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¸¸¾à ¡® apple ~¡¯ÀÇ Ã¹ °ø¹éÀ» ¾ø¾Ö°í ¡®apple~¡¯·Î ±â·ÏÇسõÀ¸¸é appleÀº ÀÌ ¸ñ·Ï¿¡ ¾ø´Â °ÍÀ¸·Î Ãë±ÞµÇ¾î ¹ö¸°´Ù.
ÀÌ ÇÔ¼ö´Â °á±¹ strstr ÇÔ¼ö·Î ¸ñ·Ï³»ÀÇ ¹®ÀÚ¿ Á¸Àç ¿©ºÎ¸¦ Á¶»çÇϸç ÀÌ ÇÔ¼ö°¡ Á¦´ë·Î ¸ñ·ÏÀ» °Ë»öÇÒ ¼ö ÀÖµµ·Ï Çϱâ À§ÇØ ÇÊ¿äÇÑ Ã¶ÀúÇÑ Áغñ¸¦ ÇÏ°í ÀÖ´Ù. ÀÌ ¹æ¹ý ¿Ü¿¡ ¸ðµç ¹®ÀÚ¿À» ¾ËÆĺª¼øÀ¸·Î Á¤·ÄÇÑ »óÅ·Π¹®ÀÚ¿ ¹è¿À» ¸¸µç ÈÄ À̺Р°Ë»öÀ» ÇÏ´Â ¹æ¹ýµµ Àִµ¥ ¸ñ·ÏÀÌ Ä¿Áú¼ö·Ï À̺Р°Ë»öÀÇ ¼Óµµ°³¼± È¿°ú°¡ ¶Ñ·ÇÇÏ°Ô ³ªÅ¸³¯ °ÍÀÌ´Ù. ÇÏÁö¸¸ strstr ÇÔ¼ö´Â °íµµ·Î ÃÖÀûȵǾî ÀÖÀ¸¸ç ±â°è¾î ¼öÁØ¿¡¼ ¹®ÀÚ¿ °Ë»öÀ» Çϱ⠶§¹®¿¡ Àû´çÇÑ ±æÀÌÀÇ ¸ñ·Ï¿¡¼´Â ¿ÀÈ÷·Á À̺Р°Ë»öº¸´Ù ÈξÀ ´õ ºü¸£°í ±»ÀÌ ¸ñ·ÏÀ» Á¤·ÄÇÒ ÇÊ¿ä°¡ ¾ø´Ù´Â ÀåÁ¡ÀÌ ÀÖ¾î ÀÌ ¹æ¹ýÀ» äÅÃÇÏ¿´´Ù.
IsNumber ÇÔ¼ö´Â ¿ÀÇÁ¼Â s¿Í e»çÀÌÀÇ ¹®ÀÚ¿ÀÌ ¼ýÀÚÀÎÁö ¾Æ´ÑÁö¸¦ Á¶»çÇÑ´Ù. ¹®ÀÚ¿À» ±¸¼ºÇÏ´Â ¸ðµç ¹®ÀÚ°¡ 0~9»çÀÌ¿¡ ÀÖ´Ù¸é ÀÌ ¹®ÀÚ¿Àº ¼ýÀÚÀÌ´Ù. ´Ü, ¾Æ¶óºñ¾Æ ¼ýÀÚ»Ó¸¸ ¾Æ´Ï¶ó 16Áø¼ö Çü½ÄÀÇ ¹®ÀÚ¿µµ Àֱ⠶§¹®¿¡ ½ÃÀÛ ºÎºÐÀÌ 0x³ª 0XÀÌ¸é ¾ËÆĺª a~f, A~Fµµ ¼ýÀÚÀÇ ÀϺκÐÀ¸·Î ÀÎÁ¤ÇÏ°í ÀÖ´Ù. ½Ç¼öÀÎ °æ¿ì¿Í ºÎÈ£°¡ ÀÖ´Â ¼ýÀÚÀÇ °æ¿ì - ±âÈ£¿Í ¼Ò¼öÁ¡Àº ±¸µÎÁ¡À̱⠶§¹®¿¡ ¼ýÀÚ ºÎºÐ°ú ±âÈ£ ºÎºÐÀÌ °¢°¢ µû·Î °Ë»çµÈ´Ù.
¾î¶² ¹®ÀÚµéÀÌ ¼ýÀÚ¸¦ ±¸¼ºÇϴ°¡´Â ¹®¹ý¿¡ µû¶ó ´Þ¶óÁø´Ù. C ¾ð¾î´Â 16Áø¼ö¸¦ 0x·Î Ç¥ÇöÇÏÁö¸¸ º£ÀÌÁ÷Àº &H·Î Ç¥ÇöÇϸç 16Áø Ç¥ÇöÀ» ¾²Áö ¸øÇÏ´Â ¹®¹ýµµ ¸¹ÀÌ ÀÖ´Ù. ±×·¡¼ ÀÌ ÇÔ¼ö´Â ¿©·¯ ¹®¹ý¿¡ °øÅëµÇ±â´Â ÇÏÁö¸¸ ¸ðµç ¹®¹ý¿¡ Àý´ëÀûÀ¸·Î Àû¿ëµÇÁö´Â ¾Ê´Â´Ù. ÀÌ ÇÔ¼öÀÇ ºÐ¼®°á°ú¿Í ¸ÂÁö ¾Ê´Â ºÐ¼®±âµéÀº ÀÌ ÇÔ¼ö¸¦ ÀçÁ¤ÀÇÇÏ¿© »ç¿ëÇÑ´Ù.
½ºÅ¸ÀÏÀÇ »ö»ó Á¤º¸¸¦ °¡Áö´Â arStyle ¹è¿Àº °¢ ºÐ¼®±âÀÇ »ý¼ºÀÚ¿¡¼ ÃʱâÈÇÑ´Ù. CParseÀÇ GetStyleColor ÇÔ¼ö´Â ÀÌ ¹è¿ÀÇ style ÷ÀÚ¿¡¼ ±ÛÀÚ»ö°ú ¹è°æ»öÀ» Á¶»çÇØ ¸®ÅÏÇϱ⸸ ÇÑ´Ù. ºÐ¼®±â´Â pInfo¿¡ ºÐ¼® Á¤º¸¸¦ ÀÛ¼ºÇÏ°í ApiEdit´Â ÀÌ ºÐ¼® Á¤º¸¿¡¼ ½ºÅ¸ÀÏ°ªÀ» ±¸ÇÑ ÈÄ GetStyleColor·ÎºÎÅÍ ½ºÅ¸ÀÏÀÇ »ö»ó°ªÀ» Á¶»çÇØ ±× »ö»ó´ë·Î Ãâ·ÂÇÔÀ¸·Î½á ±¸¹® ºÐ¼®°á°ú°¡ ºñ·Î¼Ò »ç¿ëÀÚÀÇ ´«¿¡ º¸ÀÌ°Ô µÈ´Ù.
SetStyleColor´Â ½ºÅ¸ÀÏÀÇ »ö»óÀ» Àμö·Î Àü´ÞµÈ fore, backÀ¸·Î º¯°æÇÑ´Ù. ºÐ¼®±â ½º½º·Î ½ºÅ¸ÀÏ »ö»óÀ» Á¤ÀÇÇÏ°í ÀÖÁö¸¸ ¿ÜºÎ¿¡¼ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÔÀ¸·Î½á »ö»óÀ» ¹Ù²Ü ¼ö ÀÖ´Ù. È£½ºÆ®ÀÇ ¼³Á¤ º¯°æ(Customizing)À» Áö¿øÇϱâ À§ÇÑ ÇÔ¼öÀÌ´Ù. GetStyleName ÇÔ¼öµµ ¸¶Âù°¡Áö ¸ñÀûÀ¸·Î Á¦°øµÇ¸ç ÀÌ µÎ ÇÔ¼ö´Â ºÐ¼®±â°¡ Á÷Á¢ »ç¿ëÇÏÁö´Â ¾Ê´Â´Ù.
ÀÌ»óÀ¸·Î CParseÀÇ ÇÙ½É ¸â¹öÇÔ¼öµéÀ» ºÐ¼®Çغ¸¾Ò´Ù. ÀÌ ÇÔ¼öµéÀÇ ÁÖµÈ ÀÛ¾÷°Å¸®´Â pInfo ¹è¿À» °ü¸®ÇÏ´Â °ÍÀÌ´Ù. CParseÀÇ ÆÄ»ý Ŭ·¡½ºÀÎ ½ÇÁ¦ ºÐ¼®±âµéÀº ÀÌ ÇÔ¼öµéÀ» È£ÃâÇÏ¿© °íÀ¯ÇÑ ¹æ¹ýÀ¸·Î ¹®¼¸¦ ºÐ¼®ÇÏ¸ç ±× °á°ú¸¦ pInfo¿¡ ÀÛ¼ºÇÒ °ÍÀÌ°í ApiEdit´Â ȸéÃâ·Â½Ã pInfoÀÇ ºÐ¼®°á°ú¸¦ ÂüÁ¶ÇÑ´Ù.