¶ó. ºÐ¼®±â ¼öÁ¤

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´ë·Î Ãâ·ÂÇÏ¸é µÈ´Ù.