BeginPrint ÇÔ¼ö´Â Àμâ¿ë GetLine ÇÔ¼ö·Î ¹®¼ Àüü¸¦ Á¤·ÄÇÑ ÈÄ ±× °á°ú¸¦ pi->pLine¿¡ ÀúÀåÇÑ´Ù. ±×·¡¼ ¹®¹ý ºÐ¼®±âµéµµ ȸé»óÀÇ Á¤·Ä °á°úÀÎ pLineÀ» ±âÁØÀ¸·Î ¹®¼¸¦ ºÐ¼®ÇÏÁö ¸»°í pi->pLineÀ» ±âÁØÀ¸·Î Á¤·ÄÇØ¾ß ÇÑ´Ù. À̸¦ À§ÇØ Àμâ¿ë ¹®¹ý ºÐ¼®±â¸¦ µû·Î ¸¸µé ÇÊ¿ä±îÁö´Â ¾ø°í ±âÁ¸ÀÇ ºÐ¼®±â ÇÔ¼ö¿¡ Àμö¸¦ Çϳª ´õ Ãß°¡ÇÏ¿© »óȲ¿¡ µû¶ó ȸé¿ë, Àμâ¿ë ºÐ¼®À» Çϵµ·Ï ¼öÁ¤ÇÏ¸é µÈ´Ù.
struct Ae_PrintInfo;
class CParse
{
....
void ParseLines(CApiEdit &ae,int nLine,Ae_PrintInfo *pi=NULL);
virtual void ParseLine(CApiEdit &ae,int nLine,Ae_PrintInfo *pi)=0;
};
class CParseNull : public CParse
{
....
void ParseLine(CApiEdit &ae,int nLine,Ae_PrintInfo *pi);
};
class CParseCpp : public CParse
{
....
void ParseLine(CApiEdit &ae,int nLine,Ae_PrintInfo *pi);
};
class CParseHtml : public CParse
{
....
void ParseLine(CApiEdit &ae,int nLine,Ae_PrintInfo *pi);
};
class CParseSql : public CParse
{
....
void ParseLine(CApiEdit &ae,int nLine,Ae_PrintInfo *pi);
};
ºÐ¼®±â °´Ã¼¿¡¼ pLineÀ» ÂüÁ¶ÇÏ´Â ÇÔ¼ö´Â ÇÑ ÁÙÀ» ºÐ¼®ÇÏ´Â ParseLineÀÌ´Ù. ±×·¯³ª ÀÌ ÇÔ¼ö´Â ApiEdit¿¡ ÀÇÇØ Á÷Á¢ È£ÃâµÇÁö ¾Ê°í ParseLines ÇÔ¼ö¸¦ ÅëÇØ °£Á¢ÀûÀ¸·Î È£ÃâµÇ±â ¶§¹®¿¡ ParseLines ÇÔ¼öºÎÅÍ ¼öÁ¤ÇØ¾ß ÇÑ´Ù.
ParseLines ÇÔ¼ö¿¡ Ae_PrintInfo ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ pi¸¦ Ãß°¡Çß´Ù. ÀÌ ÀμöÀÇ µðÆúÆ®°ªÀ» NULL·Î ¼³Á¤ÇßÀ¸¸ç ÀÌ °æ¿ì ȸé¿ë Á¤·Ä °á°úÀÎ pLineÀ» Âü°íÇϵµ·Ï ÇÔÀ¸·Î½á ApiEditÀÇ ÆíÁýÄÚµåµéÀº ¼öÁ¤ÇÏÁö ¾Ê¾Æµµ µÇµµ·Ï ÇÏ¿´´Ù. Ae_PrintInfo´Â ApiEdit.h¿¡ ÀÛ¼ºµÇ¾î ÀÖÀ¸¹Ç·Î CParse°¡ ÀÌ ±¸Á¶Ã¼¸¦ ÀνÄÇϱâ À§Çؼ Àü¹æ ¼±¾ðÀÌ ÇÊ¿äÇÏ´Ù. ParseLine ÇÔ¼öµµ pi¸¦ Àü´Þ¹Þµµ·Ï Ç쵂 µðÆúÆ® Àμö´Â Á¤ÀÇÇÏÁö ¾Ê¾Æµµ µÈ´Ù. ParseLines´Â Àü´Þ¹ÞÀº pi¸¦ °¢ ºÐ¼®±âÀÇ ParseLine ÇÔ¼ö·Î Àü´ÞÇϵµ·Ï ¼öÁ¤ÇÑ´Ù.
void CParse::ParseLines(CApiEdit &ae,int nLine,Ae_PrintInfo *pi)
{
....
for (i=l;i<=nLine;i++) {
ParseLine(ae,i,pi);
}
}
ºÐ¼®±âÀÇ ParseLine ÇÔ¼ö´Â pi°ª¿¡ µû¶ó Âü°íÇÒ Á¤·ÄÁ¤º¸¸¦ ¹Ù²Û´Ù. ´ëÇ¥ÀûÀ¸·Î C/C++ ºÐ¼®±âÀÇ ParseLine ÇÔ¼ö¸¦ ¼öÁ¤Çغ¸ÀÚ.
void CParseCpp::ParseLine(CApiEdit &ae,int nLine,Ae_PrintInfo *pi)
{
....
tagLine *tLine;
if (pi) {
tLine=pi->pLine;
} else {
tLine=ae.pLine;
}
....
s=tLine[nLine].Start;
e=tLine[nLine].End;
idpos=s;
switch(Context) {
case CPP_CON_LINECOMMENT:
if (tLine[nLine].nLine != 0) {
MakeParseInfo(nLine,nUnit,s,CPP_STYLE_COMMENT);
goto EndParse;
} else {
MakeParseInfo(nLine,nUnit,s,CPP_STYLE_NORMAL);
Context=CPP_CON_NORMAL;
break;
}
}
ÂüÁ¶ÇØ¾ß ÇÒ pLineÀÌ pi¿¡ µû¶ó ´Þ¶óÁö¹Ç·Î tagLineÇüÀÇ Æ÷ÀÎÅÍ tLineÀ» ¼±¾ðÇÏ¿´´Ù. pi°¡ NULLÀ̸é Áö±Ý±îÁö ÇØ ¿À´ø ¹æ½Ä´ë·Î tLine¿¡ ae.pLineÀ» ´ëÀÔÇÏ¿© ȸé¿ë Á¤·Ä °á°ú¸¦ ÂüÁ¶Çϸç pi°¡ Àü´ÞµÇ¾úÀ¸¸é ÀμâÁßÀ¸·Î ÆÇ´ÜÇÏ°í tLine¿¡ pi->pLineÀ» ´ëÀÔÇÏ¿© Àμâ¿ë Á¤·Ä °á°ú¸¦ ÂüÁ¶Çϵµ·Ï ÇÑ´Ù. ¹«Á¶°Ç ae.pLine¸¸ ÂüÁ¶ÇßÀ¸³ª piÀÇ °ª¿¡ µû¶ó ȸé¿ë ¶Ç´Â Àμâ¿ëÀ» ¼±ÅÃÀûÀ¸·Î ÂüÁ¶ÇÒ ¼ö ÀÖµµ·Ï ¼öÁ¤Çß´Ù. ¼Ò½ºÀÇ ae.pLineÀº ¸ðµÎ tLineÀ¸·Î ¹Ù²Ù¾î ÁØ´Ù.
³ª¸ÓÁö ºÐ¼®±âµéµµ µ¿ÀÏÇÑ ¹æ¹ýÀ¸·Î ParseLine ÇÔ¼ö¸¦ ¼öÁ¤ÇÏ¸é µÈ´Ù. ÂüÁ¶ÇÒ ¹è¿ÀÇ Æ÷ÀÎÅ͸¸ ¹Ù²Ù´Â °ÍÀ̹ǷΠ¼öÁ¤ »çÇ×ÀÌ ±×¸® ¸¹Áöµµ ¾Ê´Ù.
void CParseNull::ParseLine(CApiEdit &ae,int nLine,Ae_PrintInfo *pi)
{
int nUnit=0;
tagLine *tLine;
if (pi) {
tLine=pi->pLine;
} else {
tLine=ae.pLine;
}
MakeParseInfo(nLine,nUnit,tLine[nLine].Start,0);
}
void CParseHtml::ParseLine(CApiEdit &ae,int nLine,Ae_PrintInfo *pi)
{
....
tagLine *tLine;
if (pi) {
tLine=pi->pLine;
} else {
tLine=ae.pLine;
}
....
s=tLine[nLine].Start;
e=tLine[nLine].End;
idpos=s;
switch(Context) {
....
case HTML_CON_PHPLINECOM:
if (tLine[nLine].nLine != 0) {
MakeParseInfo(nLine,nUnit,s,HTML_STYLE_PHPCOMMENT);
goto EndParse;
} else {
MakeParseInfo(nLine,nUnit,s,HTML_STYLE_PHP);
Context=HTML_CON_PHP;
break;
}
break;
case HTML_CON_ASPLINECOM:
if (tLine[nLine].nLine != 0) {
....
void CParseSql::ParseLine(CApiEdit &ae,int nLine,Ae_PrintInfo *pi)
{
....
tagLine *tLine;
if (pi) {
tLine=pi->pLine;
} else {
tLine=ae.pLine;
}
....
s=tLine[nLine].Start;
e=tLine[nLine].End;
idpos=s;
switch(Context) {
....
case SQL_CON_LINECOMMENT:
if (tLine[nLine].nLine != 0) {
MakeParseInfo(nLine,nUnit,s,SQL_STYLE_COMMENT);
goto EndParse;
} else {
MakeParseInfo(nLine,nUnit,s,SQL_STYLE_NORMAL);
Context=SQL_CON_NORMAL;
break;
}
}
ÀÌ·¸°Ô¸¸ ÇØµÎ¸é ºÐ¼®±â´Â ÁÖ¾îÁø Á¤·Ä °á°ú¸¦ ÂüÁ¶ÇÏ¿© ¹®¼¸¦ ºÐ¼®ÇÒ °ÍÀÌ´Ù. Àμ⠷çƾ¿¡¼´Â Àμâ¿ë ºÐ¼®±âÀÇ pInfo´ë·Î Ãâ·ÂÇÏ¸é µÈ´Ù.