ÀÚµ¿ µé¿©¾²±â ±â´ÉÀº <Enter>Å°¸¦ ´·¯ °³ÇàÀ» ÇÒ ¶§ ¾Õ ÁÙÀÇ µé¿©¾²±â Á¤µµ¿Í ¶È°°Àº µé¿©¾²±â¸¦ »õ ÁÙ¿¡ ¹Ì¸® ÀÛ¼ºÇÏ´Â ±â´ÉÀÌ´Ù. ÇÁ·Î±×·¡¹Ö ¼Ò½ºµéÀº {, } °ýÈ£³ª begin, end ¿¹¾à¾î¿¡ ÀÇÇØ ÄÚµåÀÇ ºí·ÏÀÌ ±¸¼ºµÇ¸ç ºí·ÏÀ» ½±°Ô ±¸ºÐÇϱâ À§ÇØ µé¿©¾²±â¸¦ Çϴµ¥ ¿¬¼ÓµÇ´Â ÁÙµéÀº º¸Åë °°Àº ºí·Ï¿¡ ¼ÓÇÏ´Â °æ¿ì°¡ ¸¹±â ¶§¹®¿¡ µé¿©¾²±â Á¤µµ°¡ °°´Ù. ±×·¡¼ °³ÇàÀ» ÇÒ ¶§ ÇÁ·Î±×·¥ÀÌ ¾Ë¾Æ¼ µé¿©¾²±â¸¦ ÇÏ¸é »õ ÁÙÀ» ÀÛ¼ºÇÒ ¶§ ÀÏÀÏÀÌ ÅÇÀ» ´©¸£Áö ¾Ê¾Æµµ µÈ´Ù.
ÀÚµ¿ µé¿©¾²±â´Â ÇÁ·Î±×·¡¹Ö ¼Ò½º¸¦ ÆíÁýÇÒ ¶§´Â °ÅÀÇ ÇʼöÀûÀÎ ±â´ÉÀÌÁö¸¸ ÀÏ¹Ý ÅؽºÆ®¸¦ ÆíÁýÇÒ ¶§´Â ¿ÀÈ÷·Á ±ÍÂúÀº ±â´ÉÀÌ µÉ ¼öµµ ÀÖ´Ù. ±×·¡¼ »ç¿ëÀÚ°¡ ÀÌ ±â´ÉÀÇ µ¿ÀÛ ¿©ºÎ¸¦ ¼±ÅÃÇÒ ¼ö ÀÖµµ·Ï ¼³Á¤ ¿É¼ÇÀ» Á¦°øÇÏ°í ¿øÇÒ ¶§¸¸ ÀÚµ¿ µé¿©¾²±â¸¦ ÇÏ´Â °ÍÀÌ ÁÁ´Ù. ÀÌ·± ¸ñÀûÀ¸·Î bAutoIndent ¿É¼ÇÀ» ¸¸µå´Âµ¥ ¿É¼Ç º¯¼ö´Â ÀÌ¹Ì ¾Õ¿¡¼ ÅÇ°ú °ø¹é º¯È¯À» ÇÒ ¶§ °°ÀÌ ¼±¾ðÇصξúÀ¸¸ç TRUE·Î ÃʱâÈÇÏ¿´´Ù.
ÀÚµ¿ µé¿©¾²±â´Â ½ÇÁ¦·Î °³ÇàµÉ ¶§, Áï <Enter>Å°°¡ ÀÔ·ÂµÉ ¶§ 󸮵ǹǷΠOnChar¿¡¼ ó¸®ÇØ¾ß ÇÑ´Ù. ÇÑ ÇÔ¼ö¿¡¼ ¸ðµç °ÍÀ» ´Ù ó¸®Çϱ⿡´Â ³Ê¹« Å« ±â´ÉÀ̹ǷΠÀÚµ¿ µé¿©¾²±â¸¦ ó¸®ÇÏ´Â º°µµÀÇ ÇÔ¼ö¸¦ ¸¸µé°í OnChar¿¡¼´Â ÀÌ ÇÔ¼ö¸¦ È£ÃâÇϵµ·Ï ÇÏÀÚ. bAutoIndent ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖÁö ¾Ê´Ù¸é ÀÌ ÇÔ¼ö´Â È£ÃâÇÒ ÇÊ¿ä°¡ ¾ø´Ù. OnChar ÇÔ¼ö¿¡ ´ÙÀ½ Äڵ带 ÀÛ¼ºÇÑ´Ù.
void CApiEdit::OnChar(HWND hWnd, TCHAR ch, int cRepeat)
{
....
bComp=FALSE;
Invalidate(FindParaStart(off-lstrlen(szChar)));
if (bAutoIndent) {
ProcessIndent(ch);
}
SetCaret();
}
ÀÔ·ÂµÈ ¹®ÀÚ¸¦ ÀÏ´Ü Ã³¸®ÇÑ ÈÄ¿¡ ProcessIndent ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ÀÚµ¿ µé¿©¾²±â¸¦ ó¸®Çϵµ·Ï ÇÏ¿´´Ù. OnChar´Â ÀÔ·ÂµÈ ¹®ÀÚ°¡ ¿£Å͵ç ÅÇÀÌµç ¶Ç´Â { }ÀÌµç »ó°üÇÏÁö ¾Ê°í ¹«Á¶°Ç »ðÀÔÇÑ ÈÄ ³ª¸ÓÁö 󸮸¦ ProcessIndent ÇÔ¼ö¿¡°Ô ÀÏÀÓÇÑ´Ù. ÀÌ·± ±¸Á¶¶ó¸é ÀÏ´Ü ¹®ÀÚ°¡ »ðÀԵǰí ÀÚµ¿ µé¿©¾²±â¿¡ ÀÇÇØ ÅÇÀ̳ª °ø¹éÀÌ Ãß°¡·Î »ðÀ﵃ °ÍÀÌ´Ù. ÀÌ·¸°Ô ÇÏÁö ¸»°í OnChar°¡ ¸ÕÀú ÀÔ·ÂµÈ ¹®ÀÚ¸¦ º¸°í ÀÌ ¹®ÀÚ°¡ µé¿©¾²±â¿Í °ü·ÃµÈ ¹®ÀÚÀÌ¸é µé¿©¾²±â¸¦ Á¶Á¤ÇÑ ÈÄ ÇÑ ¹ø¿¡ »ðÀÔÇÏ´Â °ÍÀÌ ÈξÀ ´õ ÁÁÀ» °Í °°´Ù.
½ÇÁ¦ ÀÔ·ÂµÈ ¹®ÀÚ¿Í µé¿©¾²±â¿¡ ÀÇÇØ »ðÀԵǴ ¿©¹éÀ» µû·Î ÀÔ·ÂÇÏÁö ¾Ê°í ÇѲ¨¹ø¿¡ ÀÔ·ÂÇϸé Ãë¼Ò ·¹Äڵ嵵 Çϳª¹Û¿¡ ¾²Áö ¾Ê°Ô µÇ°í »ðÀÔ ¼Óµµµµ »¡¶óÁö°í ¿©·¯ ¸ð·Î ±ò²ûÇØÁú °ÍÀÌ´Ù. ±×·¯³ª ÀÌ·¸°Ô Çϸé ÁÁ´Ù´Â °ÍÀº ºÐ¸íÇÏÁö¸¸ ±¸ÇöÇϱâ´Â Çö½ÇÀûÀ¸·Î ¹«Ã´ ¾î·Æ´Ù. µé¿©¾²±â ±â´ÉÀ̶õ ÀԷµǾî ÀÖ´Â ¹®´ÜÀÇ ¸ð¾çÀ» º¸°í ÆÇ´ÜÀ» ÇØ¾ß Çϴµ¥ ¹®ÀÚ°¡ ½ÇÁ¦·Î ÀԷµǾî¾ß¸¸ Á¤È®ÇÑ ÆÇ´ÜÀÌ °¡´ÉÇÏ´Ù. ¹®ÀÚ°¡ ¾ÆÁ÷ ÀԷµÇÁö ¾ÊÀº »óȲ¿¡¼´Â Á¤·Ä ¹öÆÛ¿¡ ¾ø´Â À¯·É ÁÙÀ» ÀÖ´Ù°í °¡Á¤ÇÏ°í ºÐ¼®ÇØ¾ß ÇϹǷΠÁ¶°Ç ÆÇ´ÜÀÌ ¾ÆÁÖ ±î´Ù·Î¿öÁø´Ù.
±×·¡¼ OnChar ÇÔ¼ö´Â ¾Æ¹« »ý°¢¾øÀÌ ÀÔ·ÂµÈ ¹®ÀÚ¸¦ ¹®¼¿¡ »ðÀÔÇÏ°í ProcessIndent ÇÔ¼ö°¡ µé¿©¾²±â Á¶Á¤À» µû·Î ÇÑ ¹ø ´õ ÇÑ´Ù. ÀÌ·¸°Ô ÇÏ´õ¶óµµ ȸéÀº ÇÑ ¹ø¸¸ ¹«È¿ÈµÇ±â ¶§¹®¿¡ »ç¿ëÀÚ´Â º° Â÷À̸¦ ´À³¥ ¼ö ¾ø´Ù. ÇÏÁö¸¸ ÇÑ ¹ø¿¡ ÇÒ ¼ö ÀÖ´Â ÀÛ¾÷À» µÎ ¹ø¿¡ ³ª´©¾î ÇßÀ¸¹Ç·Î Ãë¼Ò ·¹Äڵ尡 ³¶ºñµÇ´Â ¹®Á¦°¡ ÀÖ´Ù. µé¿©¾²±â´Â »ðÀÔ º´ÇÕ¿¡ ÀÇÇØ µÎ °³ÀÇ »ðÀÔ µ¿ÀÛÀÌ Çϳª·Î ÇÕÃÄÁöÁö¸¸ ³»¾î¾²±â´Â »ðÀÔ ·¹ÄÚµå¿Í »èÁ¦ ·¹Äڵ尡 µû·Î »ý±ä´Ù. ·¹ÄÚµåÀÇ ³¶ºñº¸´Ù´Â ÇÑ ¹ø¿¡ Ãë¼ÒÇÒ ¼ö ¾ø´Ù´Â Á¡ÀÌ ¹®Á¦°¡ µÇÁö¸¸ ¸·»ó »ç¿ëÇغ¸¸é º°·Î ¾î»öÇÏÁö´Â ¾Ê´Ù.
ProcessIndent ÇÔ¼ö´Â ÀÔ·ÂµÈ ¹®ÀÚÀÎ ch¸¸ Àμö·Î ¹Þ¾ÆµéÀ̸ç ÀÌ °ª°ú ÇöÀç bufÀÇ »óȲÀ» Á¾ÇÕÀûÀ¸·Î ÆÇ´ÜÇÏ¿© ÀÚµ¿ µé¿©¾²±â¸¦ ÇÑ´Ù. µé¿©¾²±â¸¦ ÇÏ°Ç, ³»¾î¾²±â¸¦ ÇÏ°Ç ¾î¶² ¹æ½ÄÀ» »ç¿ëÇÏµç ¸ðµç °ÍÀº ÀÌ ÇÔ¼ö ³»ºÎ¿¡¼ 󸮵ǹǷΠ¸®ÅÏ°ªÀº ÇÊ¿ä ¾ø´Ù. OnChar ÇÔ¼ö´Â Å°ÀÔ·ÂÀÌ ÀÖÀ» ¶§¸¶´Ù ÀÌ ÇÔ¼ö¸¦ È£ÃâÇϱ⸸ ÇÏ¸é µÈ´Ù. µé¿©¾²±â°¡ Á¶Á¤µÈ´Ù ÇÏ´õ¶óµµ ±× ¹®´Ü ³»¿¡¼¸¸ Á¶Á¤µÇ¹Ç·Î ¹«È¿¿µ¿ªÀÌ º¯ÇÏ´Â °ÍÀº ¾Æ´Ï´Ù.
¹®¼ÀÇ ÇöÀç »óȲÀ» º¸°í µé¿©¾²±â¿Í ³»¾î¾²±â¸¦ Á¦´ë·Î ó¸®ÇÏ´Â °ÍÀº ¾ÆÁÖ º¹ÀâÇÑ °è»êÀ» ÇÊ¿ä·Î ÇÑ´Ù. ProcessIndent ÇÔ¼ö°¡ ¾ó¸¶³ª ¸¹Àº ÀÏÀ» ÇØ¾ß ÇÒ °ÍÀÎÁö ÁüÀÛÀÌ °¥ °ÍÀÌ´Ù. ÀÌ·± º¹ÀâÇÑ ÀÏÀ» È¥ÀÚ¼ ´Ù Ç϶ó°í Çϱ⿡´Â ³Ê¹« ÀÜÀÎÇϹǷΠ¸î °¡Áö º¸Á¶ ÇÔ¼ö¸¦ ÀÛ¼ºÇϵµ·Ï ÇÏÀÚ. ´ÙÀ½ ÇÔ¼öµéÀ» CApiEdit Ŭ·¡½ºÀÇ ¸â¹ö·Î Æ÷ÇÔ½ÃŲ´Ù.
class CApiEdit
{
....
void ProcessIndent(TCHAR ch);
BOOL IsParaEmpty(TCHAR *p);
int GetPrevPara(int nPos);
int GetIndentLevel(TCHAR *p);
void GetIndentString(int nPara,TCHAR *szIndent,int len);
void MakeIndentString(int nTab, TCHAR *str, int len);
BOOL IsPrevParaBlockOpen(int nPos);
µé¿©¾²±â¸¦ ó¸®Çϴµ¥ Àú·¸°Ô ¸¹Àº ÇÔ¼öµéÀÌ ÇÊ¿äÇÏ´Ù´Ï Á» ³î¶øÁö ¾ÊÀº°¡? »ç½Ç ÀÌ ÇÔ¼öµé»Ó¸¸ ¾Æ´Ï¶ó ¾Õ Àý¿¡¼ ÀÛ¼ºÇÑ ¹®´Ü °ü¸® ÇÔ¼öµéµµ µé¿©¾²±â¸¦ Áö¿øÇϱâ À§ÇØ ÀÛ¼ºµÈ °ÍÀε¥ ÀÌ·± °ÍµéÀ» º¸¸é µé¿©¾²±â°¡ °ú¿¬ ÀÛÀº ±â´ÉÀÌ ¾Æ´Ï¶ó´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. »ç¶÷À» ´ë½ÅÇؼ ¹«¾ùÀΰ¡¸¦ ÆÇ´ÜÇØ¾ß ÇÑ´Ù´Â °Í ÀÚü°¡ ½±Áö ¾ÊÀº °ÍÀÌ´Ù. ´ÙÇàÈ÷ ÀÌ ÇÔ¼öµéÀÇ ÄÚµå´Â ±×¸® ±æÁö ¾ÊÀ¸¸ç Äڵ嵵 ½±´Ù.
BOOL CApiEdit::IsParaEmpty(TCHAR *p)
{
for (;;p++) {
if (AeIsLineEnd(*p))
return TRUE;
if (!AeIsWhiteSpace(*p))
return FALSE;
}
}
int CApiEdit::GetPrevPara(int nPos)
{
int pr,pc;
GetParaFromOff(nPos,pr,pc);
if (pr > 0) pr--;
while (IsParaEmpty(buf+GetOffFromPara(pr,0)) && pr!=0) pr--;
return pr;
}
int CApiEdit::GetIndentLevel(TCHAR *p)
{
int level;
for (level=0;;p++) {
if (*p==¡®\t¡¯) {
level+=TabWidth;
} else if (*p==¡® ¡®){
level++;
} else {
break;
}
}
return level;
}
void CApiEdit::GetIndentString(int nPara,TCHAR *szIndent,int len)
{
TCHAR *p1,*p2;
p1=buf+GetOffFromPara(nPara,0);
p2=szIndent;
while (AeIsWhiteSpace(*p1)) {
*p2++=*p1++;
if (p2-szIndent == len-1)
break;
}
*p2=0;
}
void CApiEdit::MakeIndentString(int nTab, TCHAR *str, int len)
{
int i;
if (bSpaceForTab) {
for (i=0;i<nTab*TabWidth && i < len-1;i++) {
str[i]=¡® ¡®;
}
} else {
for (i=0;i<nTab && i < len-1;i++) {
str[i]=¡®\t¡¯;
}
}
str[i]=0;
}
BOOL CApiEdit::IsPrevParaBlockOpen(int nPos)
{
int tlen;
int r;
int toff;
tlen=lstrlen(Parser->GetInfo(5));
if (tlen==0) {
return FALSE;
}
r=GetParaLastLine(GetPrevPara(nPos));
toff=pLine[r].End;
if (toff)
toff--;
while (AeIsWhiteSpace(buf[toff]) && toff > 0)
toff--;
if (toff >= tlen-1) {
toff=toff-tlen+1;
if (_strnicmp(buf+toff,Parser->GetInfo(5),tlen)==0) {
return TRUE;
}
}
return FALSE;
}
µé¿©¾²±â ±â´ÉÀº Ç×»ó ¾Õ ¹®´ÜÀÇ »óŸ¦ ÂüÁ¶ÇÏ¿© »õ ¹®´ÜÀ» ÀÛ¼ºÇÑ´Ù. ¾Õ ¹®´ÜÀÌ ÅÇ µÎ °³·Î µÎ Ä µé¿©¾²±â µÇ¾î ÀÖ´Ù¸é ´ÙÀ½ ¹®´Üµµ µÎ Ä µé¿©¾²°í ¾Õ ¹®´Ü¿¡ °ø¹éÀÌ ¿©¼¸ °³ ÀÖ´Ù¸é ´ÙÀ½ ¹®´Üµµ °ø¹é ¿©¼¸ °³·Î µé¿©¾²±â¸¦ ÇÑ´Ù. ±×·¸´Ù¸é ÇöÀç ¹®´ÜÀÌ nParaÀÏ ¶§ nPara-1¹®´ÜÀÇ µé¿©¾²±â¸¦ ÂüÁ¶ÇÏ¸é µÉ±î? ´ÙÀ½ ±×¸²À» º¸ÀÚ.
¿ÞÂÊ ±×¸²Àº ù ¹ø° ÁÙ¿¡ µÎ Ä µé¿©¾²±â µÇ¾î ÀÖ°í µÎ ¹ø° ÁÙ ³¡¿¡¼ <Enter>¸¦ Ä£ °æ¿ìÀÌ´Ù. À̶§ ¼¼ ¹ø° ÁÙÀº 2Ä µé¿©¾²±â¸¦ ÇÏ´Â °ÍÀÌ ¸ÂÀ»±î 4Ä µé¿©¾²±â¸¦ ÇÏ´Â °ÍÀÌ ¸ÂÀ»±î? ¹Ù·Î À§ ¹®´ÜÀ» ÂüÁ¶ÇÑ´Ù¸é 4ÄÀ» µé¿©½á¾ß°ÚÁö¸¸ ¹®¼ ¸ð¾çÀ¸·Î º¼ ¶§ 2ÄÀ» µé¿©¾²´Â °ÍÀÌ ¿Ç´Ù. ¿À¸¥ÂÊ ±×¸²Àº µÎ ¹ø° ÁÙ¿¡ ÀüÇô µé¿©¾²±â°¡ µÇ¾î ÀÖÁö ¾ÊÀº »óÅÂÀÌ´Ù. ÀÌ »óÅ¿¡¼ <Enter>¸¦ Ä¡¸é ¼¼ ¹ø° ÁÙÀº µé¿©¾²±â¸¦ ÇÏÁö ¸»¾Æ¾ß ÇÒ±î ¾Æ´Ï¸é ù ¹ø° ÁÙó·³ 2ÄÀ» µé¿©¾²¾ß ÇÒ±î?
»ó½ÄÀûÀ¸·Î »ý°¢ÇØ º¼ ¶§ °ø¹éÀ¸·Î¸¸ µÇ¾î ÀÖ´Â ºó ÁÙÀÇ µé¿©¾²±â »óŸ¦ ÂüÁ¶ÇÏ´Â °ÍÀº ÇÕ´çÇÏÁö ¾Ê´Ù. ºó ÁÙÀÌ ¾Æ´Ñ ¾Õ ÁÙ, Áï ±ÛÀÚ¸¦ Çϳª¶óµµ °¡Áö°í ÀÖ´Â ÁÙÀ» À¯È¿ ¾Õ ¹®´ÜÀ̶ó°í ÇÏ¸ç µé¿©¾²±â´Â ÀÌ À¯È¿ ¾Õ ¹®´ÜÀÇ »óŸ¦ ÂüÁ¶ÇØ¾ß ÇÑ´Ù. GetPrevPara ÇÔ¼ö´Â nPos À§Ä¡¿¡¼ À¯È¿ ¾Õ ¹®´ÜÀÇ ¹øÈ£¸¦ ã¾ÆÁØ´Ù. ÇöÀç ¹®´Ü¿¡¼ À§ÂÊÀ¸·Î À̵¿ÇÏ¸é¼ ºñ¾îÀÖÁö ¾ÊÀº ÃÖÃÊÀÇ ¹®´ÜÀ» ã¾ÆÁÖ¸é µÇ´Âµ¥ ´Ü, ù ¹®´ÜÀº Ç×»ó À¯È¿ÇÑ °ÍÀ¸·Î °¡Á¤ÇÑ´Ù. ¸¸¾à ù ¹®´ÜÀÌ °ø¹éÀ¸·Î¸¸ µÇ¾î ÀÖ´Ù°í Çؼ ¹«È¿ÇÑ °ÍÀ¸·Î Ãë±ÞÇعö¸®¸é ÂüÁ¶ÇÒ ¹®´ÜÀÌ ¾ø°Ô µÇ¹Ç·Î ÀÚµ¿ µé¿©¾²±â¸¦ ÇÒ ¼ö°¡ ¾ø°Ô µÈ´Ù.
IsParaEmpty ÇÔ¼ö´Â p¹øÁö ÀÌÈÄ °³ÇàÄڵ带 ¸¸³¯ ¶§±îÁö ºñ¾î ÀÖ´ÂÁö ¾Æ´ÑÁö¸¦ ÆÇ´ÜÇÑ´Ù. °³ÇàÄڵ带 ¸¸³¯ ¶§±îÁö °ø¹éÀ¸·Î¸¸ µÇ¾î ÀÖÀ¸¸é ºñ¾î ÀÖ´Â ÁÙÀÌ°í ±ÛÀÚ°¡ Çϳª¶óµµ ¹ß°ßµÇ¸é ºñ¾î ÀÖÁö ¾ÊÀº ÁÙÀÌ´Ù. ÅÇ°ú °ø¹éÀº ¾Æ¹«¸® ¸¹¾Æµµ ±ÛÀÚ·Î ÀÎÁ¤µÇÁö ¾Ê´Â´Ù.
À¯È¿ ¾Õ ¹®´ÜÀ» ±¸ÇßÀ¸¸é ÀÌ ¹®´ÜÀÇ µé¿©¾²±â Á¤µµ¸¸Å ´ÙÀ½ ¹®´Ü ¼±µÎ¿¡ µé¿©¾²±â¸¦ ÀÛ¼ºÇØ¾ß ÇÑ´Ù. GetIndentString ÇÔ¼ö´Â nPara ¹®´ÜÀÇ ¼±µÎ¿¡ ÀÖ´Â ÅÇ°ú °ø¹é ¹®ÀÚ¿À» szIndent ¹öÆÛ¿¡ º¹»çÇÑ´Ù. À¯È¿ ¾Õ ¹®´ÜÀÇ µé¿©¾²±â ¹®ÀÚ¿À» ±×´ë·Î ´ÙÀ½ ¹®´ÜÀÇ ¼±µÎ¿¡ º¹»çÇϸé ÀÚµ¿ µé¿©¾²±â°¡ µÈ´Ù.
ÀÌ ÇÔ¼öÀÇ Æ¯Â¡Àº ÅÇ°ú °ø¹éÀÇ Á¶ÇÕÀ» ±×´ë·Î À¯ÁöÇÏ¸é¼ szIndent·Î º¹»çÇÑ´Ù´Â Á¡ÀÌ´Ù. ¹®´Ü ¼±µÎ¿¡ \t---- ¹®ÀÚ¿ÀÌ ÀÖÀ¸¸é ÀÌ ¹®ÀÚ¿À» ±×´ë·Î º¹»çÇÒ »Ó \t\t·Î ¹Ù²ÙÁö ¾Ê´Â´Ù. °ø¹é 4ÄÀÌ Åǹ®ÀÚ Çϳª¿Í °°´õ¶óµµ ÅÇ°ú °ø¹éÀ» ÇԺηΠÀüȯÇÏÁö ¾Ê°í ÀÖ´Â ±×´ë·Î º¹»çÇÔÀ¸·Î½á »ç¿ëÀÚ°¡ µé¿©¾²±â ÇسõÀº ¹æ½ÄÀ» ±×´ë·Î Á¸ÁßÇÏ´Â °ÍÀÌ´Ù. ¼³»ç --\t----\t--¿Í °°ÀÌ º¹ÀâÇÑ µé¿©¾²±â¸¦ Çß´õ¶óµµ ¸»ÀÌ´Ù.
³ª¸ÓÁö ¼¼ ÇÔ¼ö´Â ÀÚµ¿ µé¿©¾²±â¿¡¼´Â »ç¿ëµÇÁö ¾ÊÀ¸¸ç ¹®¹ý µé¿©¾²±â¿¡¼¸¸ »ç¿ëµÇ¹Ç·Î ´ÙÀ½ Ç׿¡¼ ºÐ¼®Çغ¸µµ·Ï ÇÏÀÚ. ÀÚµ¿ µé¿©¾²±â¸¦ ó¸®ÇÏ´Â ProcessIndent ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºµÈ´Ù. ÀÌ ÇÔ¼ö´Â ¿£ÅÍÄڵ尡 ÀԷµǾúÀ» ¶§¸¸ ÀÚµ¿ µé¿©¾²±â¸¦ ÇÏ¸ç ±× ¿ÜÀÇ ¹®ÀÚ´Â ¹«½ÃÇÑ´Ù. OnChar ÇÔ¼ö¿¡¼ ÀÔ·ÂµÈ ¿£ÅÍÄڵ带 ÀÌ¹Ì ¹®¼¿¡ »ðÀÔÇÑ »óÅ·ΠÀÌ ÇÔ¼ö°¡ È£ÃâµÈ´Ù.
void CApiEdit::ProcessIndent(TCHAR ch)
{
TCHAR szIndent[4096];
int toff;
if (ch == ¡®\r¡¯) {
GetIndentString(GetPrevPara(off),szIndent, 4096);
StartUndoGroup();
toff=off;
while (AeIsWhiteSpace(buf[toff]) && !AeIsLineEnd(buf[toff])) toff++;
if (toff != off) {
Delete(off,toff-off);
}
if (lstrlen(szIndent)) {
Insert(off,szIndent);
off+=lstrlen(szIndent);
}
EndUndoGroup();
}
}
º¸Á¶ ÇÔ¼öµéÀÌ ¸¹Àº ÀÏÀ» Çϱ⠶§¹®¿¡ ¸·»ó ÀÌ ÇÔ¼ö´Â º°·Î º¹ÀâÇÏÁö ¾Ê´Ù. À¯È¿ ¾Õ ¹®´ÜÀÇ µé¿©¾²±â ¹®ÀÚ¿À» szIndent ¹öÆÛ¿¡ Á¶»çÇÏ°í ÀÌ ¹®ÀÚ¿À» »õ ¹®´Ü¿¡ ±×´ë·Î º¹»çÇß´Ù. <Enter>¿¡ ÀÇÇØ °³ÇàµÈ ÁÙ¿¡ ÀÚµ¿À¸·Î µé¿©¾²±â°¡ µÈ´Ù.
º¸´Ù½ÃÇÇ ÀÚµ¿ µé¿©¾²±â¶õ ¾ÆÁÖ °£´ÜÇÏ´Ù. ±×·±µ¥ ProcessIndent ÇÔ¼öÀÇ Äڵ尡 ÀÌ º¸´Ù ´õ º¹ÀâÇÑ °É·Î ºÁ¼´Â ´Ù¸¥ ¹Î°¨ÇÑ ¹®Á¦°¡ ÀÖ´Â ¸ð¾çÀÌ´Ù. ¸¸¾à ¹®´ÜÀÇ ³¡¿¡¼ <Enter>¸¦ ´©¸£Áö ¾Ê°í °ø¹éÀÌ ÀÖ´Â Áß°£¿¡¼ <Enter>¸¦ ´©¸£¸é ´ÙÀ½ ¹®´ÜÀÇ ¼±µÎ¿¡ ÀÌ¹Ì °ø¹éÀÌ ÀÖ´Â »óÅ°¡ µÈ´Ù. À̶§´Â ´ÙÀ½ ¹®´ÜÀÇ ¼±µÎ±îÁö ³»·Á°£ °ø¹éÀ» ¾î¶»°Ô ó¸®ÇÒ °ÍÀΰ¡°¡ ¹®Á¦°¡ µÈ´Ù. ´ÙÀ½ ±×¸²À» º¸ÀÚ.
<Enter>Å°¿Í ÇÔ²² ´ÙÀ½ ÁÙ·Î ³»·Á¿Â ¹®ÀÚ¿ ¼±µÎ¿¡ °ø¹éÀÌ ÀÌ¹Ì ÀÖ´Ù¸é ÀÌ °ø¹éÀ» À¯ÁöÇÑ Ã¤·Î ÀÚµ¿ µé¿©¾²±â¸¦ ÇÒ °ÍÀΰ¡ ¾Æ´Ï¸é Á¦°ÅÇÑ ÈÄ ÀÚµ¿ µé¿©¾²±â¸¦ ÇÒ °ÍÀΰ¡¿¡ µû¶ó °á°ú°¡ ´Þ¶óÁø´Ù. ¿ø·¡ ÀÖ´ø °ø¹éÀ» À¯ÁöÇÑ Ã¤·Î µé¿©¾²±â¸¦ ÇÏ¸é ¾Æ·¡À§ ¹®´ÜÀÇ µé¿©¾²±â°¡ ÀÏÄ¡ÇÏÁö ¾Ê°Ô µÇ°í µé¿©¾²±â¸¦ °Á¦·Î ¸ÂÃß·Á¸é ÀÌ¹Ì ÀԷµǾî ÀÖ´Â °ø¹éÀ» Á¦°ÅÇØ¾ß ÇÑ´Ù. ÀÌ µÎ ¹æ½Ä Áß ¾î¶² ¹æ½ÄÀÌ ¿ÇÀº°¡¿¡ ´ëÇؼ´Â ³íÀïÀÇ ¿©Áö°¡ Àִµ¥ ´ç±ÙÀº °ø¹éÀ» Á¦°ÅÇÑ ÈÄ µé¿©¾²±â¸¦ ¸ÂÃß´Â ¹æ½ÄÀ» ¼±ÅÃÇß´Ù.
µÎ ¹æ½Ä ´Ù Ʋ¸° °Íµµ ¾Æ´Ï°í ¶ÇÇÑ µÎ ¹æ½Ä Áß ¾î´À Çϳª°¡ ¸Â´Â °Íµµ ¾Æ´Ï´Ù. ÀÌ·± ¾Ö¸ÅÇÑ µ¿ÀÛ¿¡ ´ëÇؼ´Â µÎ ¹æ½Ä ¸ðµÎ¸¦ ´Ù ä¿ëÇÏ°í »ç¿ëÀÚ°¡ ¼³Á¤ ¿É¼ÇÀ¸·Î ¹æ½ÄÀ» ¼±ÅÃÇϵµ·Ï ÇÏ´Â Á¤Ã¥ÀÌ ÁÁÀ¸¸ç Áö±Ý±îÁö ±×·± ½ÄÀ¸·Î ¼³Á¤ ¿É¼ÇÀ» ¸¸µé¾î ¿Ô´Ù. ÇÏÁö¸¸ ÀÌ·± µ¿ÀÛ¹æ½ÄÀ» ¼³Á¤ ¿É¼ÇÀ¸·Î ¸¸µé±â¿¡´Â ¾ÆÁÖ °ï¶õÇÑ ¹®Á¦°¡ Çϳª ÀÖ´Ù. ¼³Á¤ ¿É¼Ç¿¡ µû¶ó °ø¹éÀ» ó¸®Çϵµ·Ï Äڵ带 ÀÛ¼ºÇÏ´Â °Í Á¤µµ¾ß ½ÄÀº Á× ¸Ô±âÁö¸¸ ±× ¼³Á¤ÀÇ À̸§À» ¹«¾ùÀ¸·Î ÇÒ °ÍÀΰ¡°¡ ¹®Á¦´Ù.
¡®¹®´Ü Áß°£ÀÇ °ø¹é ¾Õ¿¡¼ °³Çà½Ã °ø¹é À¯ÁöÇÏ¸é¼ µé¿©¾²±â¡¯ ÀÌ·± À̸§À» ºÙ¿© ³õÀ¸¸é 100¸íÁß 99¸íÀº ¡®Àú°Ô µµ´ëü ¹«½¼ ¸»ÀÌÁö?¡¯¶ó°í ÇÒ °ÍÀÌ´Ù. ¿É¼ÇÀ» ¹Ù²ã °¡¸ç <Enter>Å°¸¦ ´·¯ ºÁµµ ¹¹°¡ ´Ù¸¥Áö ¾ó¸¥ ÆľÇÇϱ⵵ Èûµé´Ù. Áö±Ý Äڵ带 ÀÛ¼ºÇÏ°í ÀÖ´Â ¿©·¯ºÐµé°ú °³¹ßÀÚ ÀÚ½ÅÀº ÀÌ ¿É¼ÇÀÇ Àǹ̿¡ ´ëÇؼ Àß ¾Ë°í ÀÖÁö¸¸ ÀÌ°ÍÀ» ªÀº ¸»·Î ¼³¸íÇϱâ´Â Á¤¸» ¾î·Æ´Ù. ´ç±ÙÀÇ ¿É¼Ç Áß bUseLineEnd¸¦ »ç¿ëÀÚ¿¡°Ô ÀÌÇؽÃÅ°±â ¾î·ÆµíÀÌ ¸»ÀÌ´Ù. ÀÌ·± ¿É¼ÇÀº ¸¸µé¾î ºÁ¾ß »ç¿ëÀÚ¿¡°Ô ¼±ÅÃÀ» ÀÚÀ¯¸¦ ºÎ¿©ÇÑ´Ù´Â ±àÁ¤ÀûÀÎ Ãø¸éº¸´Ù ±¦È÷ ÇÁ·Î±×·¥À» ¾î·Æ°Ô º¸À̵µ·Ï ÇÏ´Â ºÎÁ¤ÀûÀÎ È¿°ú°¡ ´õ Å©±â ¶§¹®¿¡ Â÷¶ó¸® ¾È ¸¸µå´Â °ÍÀÌ ´õ ³´´Ù.