°¡ .ºÐ¼®±â °ü¸®

ºÐ¼®±â °´Ã¼´Â ÀÌ¹Ì ´Ù ¸¸µé¾ú°í ´ÙÀ½Àº ApiEdit¿Í ºÐ¼®±â °´Ã¼¸¦ ¿¬°á½ÃÄÑ¾ß ÇÑ´Ù. ±¸¹® ºÐ¼®Àº ºÐ¼®±â°¡ ÇÏ°í ApiEdit´Â ±× °á°ú¸¦ »ç¿ëÇÏ¿© È­¸é¿¡ Ãâ·ÂÇÒ °ÍÀÌ´Ù. ApiEdit.h¿¡ ´ÙÀ½°ú °°ÀÌ ºÐ¼®±â °´Ã¼ÀÇ Æ÷ÀÎÅ͸¦ ¼±¾ðÇÑ´Ù.

 

class CApiEdit

{

     friend class CParse;

     friend class CParseCpp;

     friend class CParseNull;

     friend class CParseHtml;

     friend class CParseSql;

private:

     ....

     CParse *Parser;

public:

     ....

     CParse* GetParser() { return Parser; }

     void SetParser(int ParseType);

 

CParseÇüÀÇ Æ÷ÀÎÅÍ º¯¼ö Parser¸¦ ¸â¹ö·Î Æ÷ÇÔ½ÃŲ´Ù. ½ÇÇàÁß¿¡ ºÐ¼®±â¸¦ ¼ö½Ã·Î ±³Ã¼ÇÒ ¼ö ÀÖ¾î¾ß ÇϹǷΠºÐ¼®±â °´Ã¼ ÀÚü¸¦ ¸â¹ö·Î °¡Áú ¼ö ¾øÀ¸¸ç ¹Ýµå½Ã Æ÷ÀÎÅÍÇü º¯¼ö¸¦ °¡Á®¾ß ÇÑ´Ù. Parser ¸â¹ö´Â ºÐ¼®±â ·çÆ® Ŭ·¡½ºÀÎ CParseÇüÀÇ Æ÷ÀÎÅÍÀ̹ǷΠCParseNullÀ» °¡¸®Å³ ¼öµµ ÀÖ°í CParseCpp¸¦ °¡¸®Å³ ¼öµµ ÀÖÀ¸¸ç ÀÌÈÄ ¸¸µé¾îÁö´Â CParseÀÇ ¸ðµç ÆÄ»ý Ŭ·¡½º¸¦ Æ÷ÀÎÆ®ÇÒ ¼ö ÀÖ´Ù. ÃʱⰪÀº NULLÀ̾î¾ß ÇϹǷΠ»ý¼ºÀÚ¿¡¼­ Parser¸¦ NULL·Î ÃʱâÈ­ÇÑ´Ù.

 

CApiEdit::CApiEdit()

{

     ....

     Parser=NULL;

}

 

ºÐ¼®±â´Â ±¸¹® ºÐ¼®À» À§ÇØ ApiEditÀÇ buf, off, pLine µîÀÇ ÇÙ½É ¸â¹ö¸¦ ÀÚÀ¯·Ó°Ô ¾×¼¼½ºÇØ¾ß ÇÑ´Ù. ÀÌ ¸â¹ö¸¦ publicÀ¸·Î °ø°³Çϰųª ÀÐÀ» ¼ö ÀÖ´Â ¸â¹öÇÔ¼ö¸¦ Ãß°¡ÇÒ ¼öµµ ÀÖÁö¸¸ ÀÌ·¸°Ô µÇ¸é ¿ÜºÎ¿¡¼­µµ ¸¶À½´ë·Î ¾×¼¼½º°¡ °¡´ÉÇØÁö¹Ç·Î ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù. ºÐ¼®±â °´Ã¼¸¸ ApiEdit¸¦ ¾×¼¼½ºÇÒ ¼ö ÀÖµµ·Ï Çϱâ À§ÇØ CParse, CParseCpp, CParseNull Ŭ·¡½º¸¦ ÇÁ·»µå·Î ¼±¾ðÇÏ¿´´Ù. ÀÌ·¸°Ô µÇ¸é ºÐ¼®±âÀÇ ¸â¹öÇÔ¼ö´Â ApiEditÀÇ ¸ðµç ¸â¹ö¿¡ ´ëÇØ ÀÚÀ¯·Ó°Ô ¾×¼¼½ºÇÒ ¼ö ÀÖ´Ù. Àá½Ã ÈÄ¿¡ ¸¸µé±â µÉ HTML ºÐ¼®±âÀÎ CParseHtml°ú SQL ºÐ¼®±âÀÎ CParseSqlµµ ¹Ì¸® ÇÁ·»µå·Î ¼±¾ðÇصξú´Ù.

GetParser ÇÔ¼ö´Â ÇöÀç ¼±ÅÃµÈ ºÐ¼®±âÀÇ Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù. È£½ºÆ®°¡ ºÐ¼®±â¿Í Á÷Á¢ Åë½ÅÇϱâ À§Çؼ­´Â ºÐ¼®±â °´Ã¼ÀÇ Æ÷ÀÎÅ͸¦ ¾òÀ» ¼ö ÀÖ¾î¾ß ÇÑ´Ù. SetParser ÇÔ¼ö´Â ºÐ¼®±âÀÇ ID°ªÀ» Àμö·Î Àü´ÞÇϸé ÇØ´ç IDÀÇ ºÐ¼®±â¸¦ ¼±ÅÃÇÑ´Ù. ºÐ¼®±â´Â ¸ðµÎ Ŭ·¡½º·Î Á¤ÀǵǾî ÀÖÀ¸¹Ç·Î new, delete ¿¬»êÀÚ·Î Æí¸®ÇÏ°Ô »èÁ¦, »ý¼ºÇÒ ¼ö ÀÖ´Ù.

 

void CApiEdit::SetParser(int ParseType)

{

     if (Parser != NULL) {

          delete Parser;

     }

 

     switch(ParseType) {

     case -1:

          break;

     case 0:

          Parser=new CParseNull;

          break;

     case 1:

          Parser=new CParseCpp;

          break;

     case 2:

          Parser=new CParseHtml;

          break;

     case 3:

          Parser=new CParseSql;

          break;

     }

 

     Invalidate(-1);

}

 

ÀÌÀü¿¡ »ç¿ëÇÏ´ø ºÐ¼®±â°¡ ÀÖ´Ù¸é delete ¿¬»êÀÚ·Î »èÁ¦Çϴµ¥ À̶§ ºÐ¼®±âÀÇ Æı«ÀÚ°¡ È£ÃâµÇ¸ç »ç¿ëÇÏ´ø ¸ðµç ¸Þ¸ð¸®¸¦ ¹Ý³³ÇÒ °ÍÀÌ´Ù. ÀÌÀü ºÐ¼®±â¸¦ Á¦°ÅÇÑ ÈÄ Àμö·Î Àü´ÞµÈ ParseType¿¡ µû¶ó »õ ºÐ¼®±â¸¦ new ¿¬»êÀÚ·Î »ý¼ºÇÑ´Ù. 0¹øÀÌ ±âº» ºÐ¼®±â, 1¹øÀÌ C ¾ð¾î ºÐ¼®±â·Î Á¤ÀǵǾî ÀÖÀ¸¸ç ÀÌÈÄ Ãß°¡µÇ´Â ºÐ¼®±â´Â °è¼Ó Çؼ­ 2¹ø, 3¹øÀÇ ID¸¦ ÇÒ´çÇÏ¸é µÈ´Ù. Ưº°ÇÑ °æ¿ì·Î -1Àº ºÐ¼®±â°¡ ¾ø´Â »óŸ¦ ¸¸µå´Âµ¥ ½ÇÇàÁß¿¡´Â ÀÌ·± »óÅ°¡ µÉ ¼ö ¾øÀ¸¸ç Á¾·áÇϱâ Á÷Àü¿¡ ºÐ¼®±â Á¦°Å¸¦ À§ÇØ »ç¿ëµÈ´Ù.

ºÐ¼®±â°¡ ±³Ã¼µÇ¸é »õ ¹®¹ý¿¡ µû¶ó ±¸¹® ºÐ¼®À» ´Ù½Ã ÇÏ°Ô µÉ °ÍÀÌ°í È­¸éµµ ´Ù½Ã Ãâ·ÂµÇ¾î¾ß ÇϹǷΠÀüü È­¸éÀ» ¹«È¿È­ÇÏ¿© ´Ù½Ã ±×¸®µµ·Ï ÇÑ´Ù. ±×¸®´Â °úÁ¤¿¡¼­ »õ ºÐ¼®±â°¡ µ¿ÀÛÇϵµ·Ï µÇ¾î ÀÖÀ¸¹Ç·Î º¯°æµÈ ºÐ¼®±âÀÇ ºÐ¼®°á°ú°¡ Áï½Ã È­¸é¿¡ ³ªÅ¸³­´Ù. ºÐ¼®±â ¿¬°áÀ» À§ÇØ ApiEdit¿¡ Ãß°¡µÇ¾î¾ß ÇÏ´Â ÄÚµå´Â ÀÌ Á¤µµ»ÓÀÌ´Ù. ´ëºÎºÐÀÇ ºÐ¼® °ü·Ã Äڵ尡 ºÐ¼®±â Ŭ·¡½º¿¡ ÀÛ¼ºµÇ¾î Àֱ⠶§¹®ÀÌ´Ù. ApiEditÀÇ ³ª¸ÓÁö °ü·Ã ÄÚµå´Â Á¶±Ý¾¿ ¼öÁ¤Çϱ⸸ ÇÏ¸é µÈ´Ù.

¸ÕÀú SetDefaultSetting¿¡¼­ Ãʱ⠻ç¿ëÇÒ ºÐ¼®±â¸¦ ¼±ÅÃÇÑ´Ù. ¿øÄ¢´ë·Î¶ó¸é ¾Æ¹«·± ºÐ¼®µµ ÇÏÁö ¾Ê´Â ±âº» ºÐ¼®±â¸¦ ¼±ÅÃÇÏ´Â °ÍÀÌ ¿Ç°ÚÁö¸¸ Áö±ÝÀº °³¹ßÁßÀ̹ǷΠÁ¦´ë·Î µ¿ÀÛÇÏ´ÂÁö »ìÆ캸±â À§ÇØ C ¾ð¾î ºÐ¼®±â¸¦ ¼±ÅÃÇϵµ·Ï Çß´Ù. ÇöÀç µ¿ÀÛÇÏ´Â ºÐ¼®±â°¡ C ¾ð¾î ºÐ¼®±â¹Û¿¡ ¾øÀ¸´Ï 1¹ø ºÐ¼®±â·Î¸¸ Å×½ºÆ®¸¦ ÇØ º¼ ¼ö Àֱ⠶§¹®ÀÌ´Ù.

 

void CApiEdit::SetDefaultSetting()

{

     ....

    SetParser(1);

}

 

SetParser¿¡¼­ CParseCpp °´Ã¼¸¦ »ý¼ºÇÒ °ÍÀ̸ç ÀÌ °´Ã¼ÀÇ »ý¼ºÀÚ¿Í InitInfo¿¡¼­ ºÐ¼® Á¤º¸ ÀúÀåÀ» À§ÇÑ pInfo ¹è¿­À» ÇÒ´çÇÒ °ÍÀÌ´Ù. ¹®¼­°¡ º¯°æµÉ ¶§¸¶´Ù ºÐ¼® Á¤º¸´Â ´Ù½Ã ÀÛ¼ºµÇ¾î¾ß ÇϹǷΠInitDoc¿¡¼­µµ ºÐ¼®±âÀÇ InitInfo¸¦ È£ÃâÇØ¾ß ÇÑ´Ù.

 

void CApiEdit::InitDoc()

{

     int i;

 

    Parser->InitInfo(TRUE);

     if (pUR) {

     ....

 

UpdateLineInfo ÇÔ¼ö¿¡¼­ ÀçºÐ¼®À» À§ÇØ ºÐ¼®±âÀÇ ¸â¹öÇÔ¼ö¸¦ È£ÃâÇϹǷΠ°¡±ÞÀûÀ̸é InitDocÀÇ ¼±µÎ¿¡ ÀÌ Äڵ带 ÀÛ¼ºÇØ¾ß ÇÑ´Ù. ÀÌ È£Ãâ¿¡ ÀÇÇØ ¸ðµç ºÐ¼® Á¤º¸´Â »èÁ¦µÇ°í pInfo´Â ´Ù½Ã ÇÒ´çµÉ °ÍÀÌ´Ù. OnDestroy ¿¡¼­´Â ºÐ¼®±â¸¦ Á¦°ÅÇÑ´Ù.

 

void CApiEdit::OnDestroy(HWND hWnd)

{

     ....

 

    SetParser(-1);

}

 

ºÐ¼®±â°¡ Ãß°¡µÊÀ¸·Î½á ApiEdit´Â ±¸ºÐÀÚ¸¦ Á÷Á¢ Á¤ÀÇÇÒ ÇÊ¿ä°¡ ¾ø¾îÁ³´Ù. ¹®¹ý°­Á¶ ±â´ÉÀÌ ¾øÀ» ¶§´Â ¸ðµç ¹®¼­°¡ µ¿ÀÏÇÑ ¹®¹ýÀÇ Àû¿ëÀ» ¹ÞÀ¸¹Ç·Î ApiEdit°¡ ±¸ºÐÀÚ¸¦ Á¤ÀÇÇßÁö¸¸ ÀÌÁ¦ ¹®¼­ÀÇ ¹®¹ý¿¡ µû¶ó ±¸ºÐÀÚ°¡ ´Þ¶óÁö¹Ç·Î ±¸ºÐÀÚÀÇ ¸ñ·ÏÀ» ºÐ¼®±â·ÎºÎÅÍ Á¦°ø¹Þ¾Æ¾ß ÇÑ´Ù. ºÐ¼®±âÀÇ ±¸ºÐÀÚ ¸ñ·ÏÀº GetInfo(1) ÇÔ¼ö È£Ãâ·Î Á¶»çÇÒ ¼ö ÀÖ´Ù. IsDelimiter ÇÔ¼öÀÇ ±¸ºÐÀÚ ¸ñ·ÏÀº Á¦°ÅÇÏ°í ºÐ¼®±â·ÎºÎÅÍ ±¸ºÐÀÚ ¸ñ·ÏÀ» Àü´Þ¹Þµµ·Ï ¼öÁ¤ÇÑ´Ù.

 

BOOL CApiEdit::IsDelimiter(int nPos)

{

     return (strchr(Parser->GetInfo(1),buf[nPos]) || buf[nPos]==0);

}

 

nPos À§Ä¡ÀÇ ¹®ÀÚ°¡ Parser°¡ Á¤ÀÇÇÏ´Â ±¸ºÐÀÚ ¸ñ·Ï¿¡ ÀÖ´Â ¹®ÀÚÀÎÁö Á¶»çÇÑ´Ù. ºÐ¼®±â°¡ ¹Ù²î¸é ±¸ºÐÀÚÀÇ ¸ñ·Ïµµ ¹Ù²î°Ô µÇ¹Ç·Î ´Ü¾î ´ÜÀ§ À̵¿À̳ª ´Ü¾î ¼±Åà ±â´ÉµéÀÌ ÀÚ¿¬½º·´°Ô »ç¿ë ¹®¹ýÀÇ Àû¿ëÀ» ¹Þ°Ô µÈ´Ù. Ư¼öÇÑ °æ¿ì·Î ¹®¼­ÀÇ ³¡ÀÎ °æ¿ì´Â ¹®¹ý¿¡ »ó°ü¾øÀÌ ¹«Á¶°Ç ±¸ºÐÀÚ·Î ÀÎÁ¤ÇÑ´Ù.