°¡. ½ºÅ¸ÀÏ Á¤º¸

ºÐ¼®±âÀÇ ½ºÅ¸ÀϺ° »ö»óÀº »ý¼ºÀÚ¿¡¼­ ÃʱâÈ­Çϴµ¥ ÀÌ »ö»óÀº º¯°æ °¡´ÉÇÑ ¼³Á¤ ´ë»óÀÌ´Ù. »ç¶÷¸¶´Ù ÁÁ¾ÆÇÏ´Â »ö»óÀÌ ´Ù¸£¹Ç·Î ´ç¿¬È÷ º¯°æÇÒ ¼ö ÀÖµµ·Ï ÇØ¾ß ÇÑ´Ù. ¶ÇÇÑ ºÐ¼®±â¿Í È®ÀåÀÚÀÇ ¿¬°á »óÅ´ SOption::Init¿¡¼­ ÃʱâÈ­Çϴµ¥ ÀÌ »óŵµ º¯°æÇÒ ¼ö ÀÖ´Ù. ¾î¶² ÆÄÀÏÀ» ¾î¶² ºÐ¼®±â¿Í ¿¬°áÇÒ °ÍÀΰ¡µµ »ç¿ëÀÚÀÇ ÃëÇâÀ» ¹Ý¿µÇØ¾ß ÇÑ´Ù.

ÇÏÁö¸¸ ±¸¹® ºÐ¼® ¹æ½ÄÀº Çϵå ÄÚµùµÇ¾î Àֱ⠶§¹®¿¡ »ç¿ëÀÚ°¡ º¯°æÇÒ ¼ö ¾ø´Ù. ¿¹¸¦ µé¾î C++ Å°¿öµå ¸ñ·ÏÀ» ÆíÁýÇѴٰųª ½ºÅ¸ÀÏÀ» Çϳª ´õ Ãß°¡ÇÏ´Â °ÍÀº ºÒ°¡´ÉÇÏ´Ù. ÀÌ·± ¼³Á¤±îÁö °¡´ÉÇÏ°Ô ¸¸µé·Á¸é IsKeyword µîÀÇ ÇÔ¼ö¿¡ Áö¿ªÀûÀ¸·Î ¼±¾ðµÇ¾î ÀÖ´Â Å°¿öµå ¸ñ·ÏÀ» ¿ÜºÎ ÆÄÀÏ¿¡ µÎ°í ½ÇÇàÁß¿¡ Àоî¿Í¾ß Çϴµ¥ ÇöÀç ±¸Á¶´Â ±×·± ¹æ½ÄÀ» Áö¿øÇϱ⠾î·Æ´Ù. ÄÁÅؽºÆ®°£ÀÇ º¯È¯ È帧À̳ª ±¸ºÐÀÚ ¸ñ·Ï µîµµ »ç¿ëÀÚ°¡ º¯°æÇÒ ¼ö ¾øÀ¸¸ç ¿À·ÎÁö »ö»ó°ú È®ÀåÀÚ¸¸ º¯°æÇÒ ¼ö ÀÖµµ·Ï ÇÒ °ÍÀÌ´Ù.

»ç¿ëÀÚ°¡ º¯°æÇÒ ¼ö ÀÖ´Â ¿É¼Çµé Áß °¡Àå ½Ç¿ëÀûÀÎ °ÍÀº ¿ª½Ã ½ºÅ¸ÀÏÀÇ »ö»óÀÌ´Ù. ÀÌ °ªÀ» »ç¿ëÀÚ°¡ ¼±ÅÃÇϵµ·Ï ÇÏ·Á¸é ºÐ¼®±âÀÇ »ý¼ºÀÚ¿¡¼­ ÃʱâÈ­ÇÑ »ö»ó ´ë½Å SOption¿¡ ±â¾ïµÈ »ö»ó°ªÀ» »ç¿ëÇϵµ·Ï ÇØ¾ß ÇÑ´Ù. SOption¿¡ ½ºÅ¸ÀÏ »ö»ó ±â¾ïÀ» À§ÇÑ ¸â¹ö¸¦ Ãß°¡Çϵµ·Ï ÇÏÀÚ.

 

struct SOption

{

    void GetStyleColor();

    void SetStyleColor(CParse *Parser);

     ....

     TCHAR arExt[4][250];

    SParseStyle arStyle[4][32];

};

 

arStyleÀº °¢ ºÐ¼®±âÀÇ ½ºÅ¸ÀÏÀ» ÁöÁ¤ÇÏ´Â 2Â÷¿ø ±¸Á¶Ã¼ ¹è¿­Àε¥ ù ¹ø° ÷ÀÚ´Â ºÐ¼®±âÀÇ IDÀÌ¸ç µÎ ¹ø° ÷ÀÚ´Â ½ºÅ¸ÀÏ ¹øÈ£ÀÌ´Ù. ¿¹¸¦ µé¾î arStyle[1][2]´Â 1¹ø ºÐ¼®±âÀÇ 2¹ø ½ºÅ¸ÀÏ¿¡ ´ëÇÑ À̸§°ú »ö»ó°ª Á¤º¸¸¦ °¡Áø´Ù. ±âº» ºÐ¼®±âÀÇ ½ºÅ¸ÀÏÀº Init¿¡¼­ µû·Î ÃʱâÈ­ÇÑ´Ù.

 

void SOption::Init()

{

     ....

     arStyle[0][0].fore=-1;

}

 

SParseStyle±¸Á¶Ã¼ÀÇ »ý¼ºÀÚ´Â ¸ðµç Àü°æ»öÀ» ³¡ Ç¥½ÃÀÎ -2·Î ÃʱâÈ­Çϴµ¥ ±âº» ºÐ¼®±â´Â ½ºÅ¸ÀÏÀÌ Çϳª¹Û¿¡ ¾øÀ¸¹Ç·Î 0¹ø ½ºÅ¸ÀÏÀ» ±âº»»öÀ¸·Î¸¸ ¹Ù²Ù¸é µÈ´Ù. ¹è°æ»öÀº ÀÌ¹Ì »ý¼ºÀÚ¿¡¼­ -1·Î ÃʱâÈ­µÇ¾î ÀÖ´Ù. ±âº» ºÐ¼®±â¸¦ Á¦¿ÜÇÑ ³ª¸ÓÁö ºÐ¼®±âÀÇ ½ºÅ¸ÀÏ »ö»óÀº GetStyleColor ÇÔ¼ö°¡ ÃʱâÈ­ÇÑ´Ù.

 

void SOption::GetStyleColor()

{

     CParse *Parser;

     int id,i;

 

     for (id=1;id<=3;id++) {

          switch(id) {

          case 1:

              Parser=new CParseCpp;

              break;

          case 2:

              Parser=new CParseHtml;

              break;

          case 3:

              Parser=new CParseSql;

              break;

          }

          for (i=0;i<32;i++) {

              Parser->GetStyleName(i,arStyle[id][i].name);

              Parser->GetStyleColor(i,arStyle[id][i].fore,arStyle[id][i].back);

              if (arStyle[id][i].fore==-2)

                   break;

          }

 

          delete Parser;

     }

}

 

1¹øºÎÅÍ 3¹ø±îÁö ÇöÀç ApiEdit°¡ Áö¿øÇÏ´Â ºÐ¼®±â¸¦ ¼ø¼­´ë·Î »ý¼ºÇÏ¿© ºÐ¼®±âÀÇ »ý¼ºÀÚ°¡ ÃʱâÈ­ÇÑ ½ºÅ¸ÀÏ »ö»ó°ú À̸§À» Àоî arStyle ¹è¿­¿¡ ä¿î´Ù. ÀÌ ÇÔ¼ö¿¡ ÀÇÇØ arStyleÀº ºÐ¼®±âÀÇ µðÆúÆ® ½ºÅ¸ÀÏ »ö»óÀ» °¡Áö°Ô µÉ °ÍÀÌ´Ù. 0¹ø ±âº» ºÐ¼®±â´Â ½ºÅ¸ÀÏ »ö»óÀ» °¡ÁöÁö ¾ÊÀ¸¹Ç·Î ÀÌ ÇÔ¼ö¿¡¼­ Á¶»çÇÒ ÇÊ¿ä°¡ ¾øÀ¸¸ç Init¿¡¼­ »ó¼ö ÃʱâÈ­ÇÏ¿´´Ù. ´ÙÀ½ ÇÔ¼ö´Â ½ºÅ¸ÀÏÀÇ »ö»óÀ» º¯°æÇÑ´Ù.

 

 

void SOption::SetStyleColor(CParse *Parser)

{

     int i;

     int id;

 

     id=int(Parser->GetInfo(0));

 

     for (i=0;i<32;i++) {

          Parser->SetStyleColor(i,arStyle[id][i].fore,arStyle[id][i].back);

          if (arStyle[id][i].fore==-2)

              break;

     }

}

 

Parser ºÐ¼®±â °´Ã¼ÀÇ Æ÷ÀÎÅ͸¦ Àμö·Î Àü´ÞÇϸé arStyle¿¡ ÀúÀåµÈ ½ºÅ¸ÀÏ »ö»ó Àüü¸¦ ºÐ¼®±â¿¡°Ô ´ëÀÔÇÑ´Ù. CParser´Â È£½ºÆ®·ÎºÎÅÍ ½ºÅ¸ÀÏ »ö»óÀ» ´ëÀÔ¹Þ±â À§ÇØ SetStyleColor ¸â¹öÇÔ¼ö¸¦ °¡Áö°í ÀÖ´Ù. ¹®¹ýÀÇ »ö»óÀ» º¯°æÇÏ°í ½Í´Ù¸é arStyleÀÇ »ö»óÇ¥¸¦ ÆíÁýÇÑ ÈÄ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¸é µÈ´Ù. GetStyleColor ÇÔ¼ö´Â È£½ºÆ®ÀÇ OnCreate¿¡¼­ ÃÖÃÊ ½ÇÇà½Ã¿¡ µü ÇÑ ¹ø¸¸ È£ÃâµÈ´Ù.

 

int OnCreate(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     ....

     Option.StartAction=SHRegReadInt(SHCU,KEY"Setting","StartAction",1000);

     if (Option.StartAction == 1000) {

        Option.GetStyleColor();

     } else {

     ....

 

StartAction ·¹Áö½ºÆ®¸® Å°°¡ ¾øÀ» ¶§, Áï ¾ÆÁ÷ ·¹Áö½ºÆ®¸®¿¡ ¾Æ¹« Á¤º¸µµ ÀÛ¼ºµÇ¾î ÀÖÁö ¾ÊÀ» ¶§¸¸ ÀÌ ÇÔ¼ö°¡ È£ÃâµÇ¾î ApiEditÀÇ µðÆúÆ® ½ºÅ¸ÀÏ »ö»óÀ» Á¶»çÇÑ´Ù. µÎ ¹ø° ½ÇÇàµÉ ¶§ºÎÅÍ´Â ÀÌ ÇÔ¼ö°¡ È£ÃâµÇÁö ¾Ê´Â´Ù. ±ÇÀå¿É¼ÇÀ¸·Î µ¹¾Æ°¥ ¶§µµ óÀ½ ½ÇÇàµÉ ¶§¿Í ¸¶Âù°¡Áö Á¶°ÇÀ̹ǷΠÀÌ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.

 

BOOL CALLBACK GeneralDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     ....

          case IDC_BTNDEFAULT:

              if (MessageBox(hDlg,"¸ðµç ¼³Á¤ »óŸ¦ óÀ½ ¼³Ä¡ »óÅ·ΠÃʱâÈ­ÇϽðڽÀ´Ï±î?",

                   "¾Ë¸²",MB_YESNO)==IDYES) {

                   NewOption.Init();

               NewOption.GetStyleColor();

                   PropSheet_Changed(GetParent(hDlg),hDlg);

                   goto label_reload;

              }

              return TRUE;

 

SOption±¸Á¶Ã¼ÀÇ ¸â¹öÀÓ¿¡µµ »ý¼ºÀÚ³ª Init¿¡¼­ arStyleÀ» ÃʱâÈ­ÇÏÁö ¾Ê´Â ÀÌÀ¯´Â »çº»À» ¸¸µé ¶§ GetStyleColor ÇÔ¼ö°¡ È£ÃâµÇÁö ¾Êµµ·Ï Çϱâ À§Çؼ­ÀÌ´Ù. GetStyleColor ÇÔ¼ö´Â ºÐ¼®±â °´Ã¼¸¦ µ¿ÀûÀ¸·Î ÀüºÎ »ý¼ºÇغ¸°í ÀÏÀÏÀÌ »ö»óÀ» ¹°¾î º¸±â ¶§¹®¿¡ ¹«Ã´À̳ª ´À¸®´Ù. Áö±ÝÀº ºÐ¼®±â°¡ 4°³¹Û¿¡ ¾øÀ¸¹Ç·Î ±¦ÂúÁö¸¸ ¸¸¾à 20°³ Á¤µµ·Î ´Ã¾î³ª¸é ¹®Á¦°¡ ½É°¢ÇØÁú °ÍÀÌ´Ù.

¼³Á¤ ´ëÈ­»óÀÚ¸¦ ¶ç¿ï ¶§ NewOptionÀ̶ó´Â À̸§À¸·Î »çº»À» ¸¸µå´Âµ¥ ±×¶§¸¶´Ù ¸ðµç ºÐ¼®±â°¡ »ý¼ºµÇ¾ú´Ù°¡ Æı«µÈ´Ù¸é ¾î¶»°Ô µÇ°Ú´Â°¡? NewOptionÀº OptionÀ» º¹»ç¹ÞÀ¸¹Ç·Î »ö»ó Á¶»ç¸¦ À§ÇØ ºÐ¼®±â¸¦ ±»ÀÌ ¸¸µé¾î º¼ ÇÊ¿äµµ ¾ø´Ù. ¶ÇÇÑ »õ À©µµ¿ì°¡ ¸¸µé¾îÁú ¶§¸¶´Ù SetSetting ÇÔ¼ö¿¡¼­ ¿ø·¡ ¿É¼ÇÀ» Á¶»çÇϱâ À§ÇØ SOption ±¸Á¶Ã¼¸¦ Çϳª ¸¸µå´Âµ¥ À̶§µµ ¸¶Âù°¡Áö´Ù. GetStyleColor ÇÔ¼ö È£ÃâÀ» ÃÖ¼ÒÇÑÀ¸·Î ÀÚÀçÇÏ¸é ´ëÈ­»óÀÚ°¡ ¶ß´Â ¼Óµµ, »õ À©µµ¿ì¸¦ ¸¸µå´Â ¼Óµµ°¡ »¡¶óÁø´Ù. Áï ÇÁ·Î±×·¥ÀÇ ¹ÝÀÀ¼ºÀÌ ³ô¾ÆÁø´Ù.

GetStyleColor ÇÔ¼ö¿¡ ÀÇÇØ Á¶»çµÈ ½ºÅ¸ÀÏ »ö»óÀº SOption::Save ÇÔ¼ö¿¡ ÀÇÇØ ·¹Áö½ºÆ®¸®¿¡ ÀúÀåµÈ´Ù. È®ÀåÀÚ ¿¬°á »óŵµ °°ÀÌ ÀúÀåÇϵµ·Ï ÇÏ¿´´Ù.

 

void SOption::Save(TCHAR *Key)

{

     TCHAR szSub[MAX_PATH];

     int i,j;

 

     ....

     lstrcpy(szKey,Key);

     lstrcat(szKey,"Style");

     for (i=1;i<=3;i++) {

          wsprintf(szSub,"%d-Ext",i);

          SHRegWriteString(SHCU,szKey,szSub,arExt[i]);

          for (j=0;j<32;j++) {

              if (arStyle[i][j].fore == -2) {

                   break;

              }

              wsprintf(szSub,"%d-%d-name",i,j);

              SHRegWriteString(SHCU,szKey,szSub,arStyle[i][j].name);

              wsprintf(szSub,"%d-%d-fore",i,j);

              SHRegWriteInt(SHCU,szKey,szSub,arStyle[i][j].fore);

              wsprintf(szSub,"%d-%d-back",i,j);

              SHRegWriteInt(SHCU,szKey,szSub,arStyle[i][j].back);

          }

     }

}

 

1¹øºÎÅÍ 3¹ø ºÐ¼®±â±îÁö ·çÇÁ¸¦ µ¹¸é¼­ 0¹ø ½ºÅ¸ÀÏ¿¡¼­ 31¹ø ½ºÅ¸ÀϱîÁö »ö»ó°ú À̸§À» Á¶»çÇÏ¿© ·¹Áö½ºÆ®¸®¿¡ ±â·ÏÇÏ¿´´Ù. ºÐ¼®±âÀÇ Ã·ÀÚ°¡ 1ºÎÅÍ ½ÃÀÛÇÔÀ» À¯ÀÇÇÏÀÚ. ±âº» ºÐ¼®±âÀÇ ½ºÅ¸ÀÏ »ö»óÀº Ç×»ó °íÁ¤µÇ¾î Àֱ⠶§¹®¿¡ »ç¿ëÀÚ°¡ º¯°æÇÒ ¼ö ÀÖ´Â ¿É¼ÇÀÌ ¾Æ´Ï¸ç µû¶ó¼­ ÀúÀå ´ë»óµµ ¾Æ´Ï´Ù. Init¿¡¼­ Àü°æ»ö¸¸ -1·Î ¹Ù²Ù¸é ±âº» ºÐ¼®±â¿¡ ´ëÇÑ Ã³¸®´Â ´õ ÀÌ»ó ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ÀÌ·¸°Ô ÀúÀåµÈ ½ºÅ¸ÀÏ »ö»óÀº SOption::Load¿¡¼­ ´Ù½Ã ÀоîµéÀδÙ.

 

 

 

void SOption::Load(TCHAR *Key)

{

     TCHAR szSub[MAX_PATH];

     int i,j;

 

     ....

     lstrcpy(szKey,Key);

     lstrcat(szKey,"Style");

     for (i=1;i<=3;i++) {

          wsprintf(szSub,"%d-Ext",i);

          SHRegReadString(SHCU,szKey,szSub,"",arExt[i],256);

          for (j=0;j<32;j++) {

              wsprintf(szSub,"%d-%d-fore",i,j);

              arStyle[i][j].fore=SHRegReadInt(SHCU,szKey,szSub,-2);

              if (arStyle[i][j].fore == -2) {

                   break;

              }

              wsprintf(szSub,"%d-%d-name",i,j);

              SHRegReadString(SHCU,szKey,szSub,"",arStyle[i][j].name,32);

              wsprintf(szSub,"%d-%d-back",i,j);

              arStyle[i][j].back=SHRegReadInt(SHCU,szKey,szSub,0);

          }

     }

}

 

ÀÌÁ¦ SOption::arStyle ¹è¿­Àº ½ÇÁ¦·Î È­¸éÃâ·Â¿¡ »ç¿ëµÉ ½ºÅ¸ÀÏ »ö»óÀ» ¿µ±¸È÷ °¡Áö°Ô µÉ °ÍÀÌ´Ù. ÀÌ Á¤º¸´Â ºÐ¼®±â°¡ ¼±ÅÃµÉ ¶§¸¶´Ù SetStyleColor ÇÔ¼ö¿¡ ÀÇÇØ ºÐ¼®±â·Î ´Ù½Ã Àü´ÞµÈ´Ù. OnCommand¿¡¼­ ºÐ¼®±â¸¦ º¯°æÇÒ ¶§¸¶´Ù ÀÌ ÇÔ¼ö¸¦ È£ÃâÇϵµ·Ï ÇÏÀÚ.

 

void OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     ....

     case IDM_SYN_NONE:

          pSi->Ae.SetParser(0);

          break;

     case IDM_SYN_CPP:

          pSi->Ae.SetParser(1);

        Option.SetStyleColor(pSi->Ae.GetParser());

          break;

     case IDM_SYN_HTML:

          pSi->Ae.SetParser(2);

        Option.SetStyleColor(pSi->Ae.GetParser());

          break;

     case IDM_SYN_SQL:

          pSi->Ae.SetParser(3);

        Option.SetStyleColor(pSi->Ae.GetParser());

          break;

 

´Ü ±âº» ºÐ¼®±â´Â º°µµ·Î ½ºÅ¸ÀÏ »ö»óÀ» ÁÙ ÇÊ¿ä°¡ ¾ø´Ù. ÁøÂ¥ ºÐ¼®±â°¡ ¾Æ´Ï¶ó ÀÚ¸®¸¦ ä¿ì±â À§ÇÑ °¡Â¥ ºÐ¼®±âÀ̹ǷΠ¿©·¯ ¸ð·Î Â÷º°´ë¿ì¸¦ Á» ¹Þ°í ÀÖ´Ù. SelectParser¿¡¼­ È®ÀåÀÚ¿¡ µû¸¥ ºÐ¼®±â¸¦ ÀÚµ¿ ¼±ÅÃÇÒ ¶§µµ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.

 

void SelectParser(CApiEdit &Ae,TCHAR *path)

{

     ....

     Ae.SetParser(ID);

    Option.SetStyleColor(Ae.GetParser());

}

 

¿©±â±îÁö ÀÛ¼ºÇÏ¸é ´ç±ÙÀº ÀÌÁ¦ ºÐ¼®±âÀÇ »ý¼ºÀÚ°¡ ÃʱâÈ­ÇÏ´Â »ö»óº¸´Ù ·¹Áö½ºÆ®¸®¿¡ ÀúÀåµÈ »ö»ó´ë·Î ¹®¼­¸¦ Ãâ·ÂÇÏ°Ô µÉ °ÍÀÌ´Ù. ·¹Áö½ºÆ®¸®ÀÇ »ö»óÀ» ÃʱâÈ­ÇÏ·Á¸é ·¹Áö½ºÆ®¸® ÆíÁý±â¸¦ ¿­¾î¼­ ´ç±ÙÀÇ ·çƮ۸¦ ¿ÏÀüÈ÷ »èÁ¦ÇÑ ÈÄ Å×½ºÆ®ÇØ¾ß ÇÑ´Ù. ¶Ç´Â µµ±¸/¼³Ä¡ Á¤º¸ »èÁ¦ ¸í·ÉÀ¸·Îµµ ÃʱâÈ­ÇÒ ¼ö ÀÖ´Ù. OnCreate¿¡¼­ StartActionÅ°°¡ ¾ø¾î¾ß¸¸ GetStyleColor ÇÔ¼ö¸¦ È£ÃâÇϱ⠶§¹®¿¡ ·¹Áö½ºÆ®¸®¸¦ ÇÑ ¹ø ºñ¿ö¾ß ÇÑ´Ù. ¾ÆÁ÷ »ö»óÀ» º¯°æÇÒ ¼ö´Â ¾øÁö¸¸ º¯°æÇÒ Áغñ´Â ¿Ï·áµÇ¾úÀ¸¸ç ÀÌÀü°ú ¶È°°ÀÌ µ¿ÀÛÇÒ °ÍÀÌ´Ù.