ºÐ¼®±âÀÇ ½ºÅ¸ÀϺ° »ö»óÀº »ý¼ºÀÚ¿¡¼ ÃʱâÈÇϴµ¥ ÀÌ »ö»óÀº º¯°æ °¡´ÉÇÑ ¼³Á¤ ´ë»óÀÌ´Ù. »ç¶÷¸¶´Ù ÁÁ¾ÆÇÏ´Â »ö»óÀÌ ´Ù¸£¹Ç·Î ´ç¿¬È÷ º¯°æÇÒ ¼ö ÀÖµµ·Ï ÇØ¾ß ÇÑ´Ù. ¶ÇÇÑ ºÐ¼®±â¿Í È®ÀåÀÚÀÇ ¿¬°á »óÅ´ 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 ÇÔ¼ö¸¦ È£ÃâÇϱ⠶§¹®¿¡ ·¹Áö½ºÆ®¸®¸¦ ÇÑ ¹ø ºñ¿ö¾ß ÇÑ´Ù. ¾ÆÁ÷ »ö»óÀ» º¯°æÇÒ ¼ö´Â ¾øÁö¸¸ º¯°æÇÒ Áغñ´Â ¿Ï·áµÇ¾úÀ¸¸ç ÀÌÀü°ú ¶È°°ÀÌ µ¿ÀÛÇÒ °ÍÀÌ´Ù.