°¡. ÀÚµ¿ µé¿©¾²±â

ÀÚµ¿ µé¿©¾²±â ±â´ÉÀº <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¸¦ »ç¿ëÀÚ¿¡°Ô ÀÌÇؽÃÅ°±â ¾î·ÆµíÀÌ ¸»ÀÌ´Ù. ÀÌ·± ¿É¼ÇÀº ¸¸µé¾î ºÁ¾ß »ç¿ëÀÚ¿¡°Ô ¼±ÅÃÀ» ÀÚÀ¯¸¦ ºÎ¿©ÇÑ´Ù´Â ±àÁ¤ÀûÀÎ Ãø¸éº¸´Ù ±¦È÷ ÇÁ·Î±×·¥À» ¾î·Æ°Ô º¸À̵µ·Ï ÇÏ´Â ºÎÁ¤ÀûÀÎ È¿°ú°¡ ´õ Å©±â ¶§¹®¿¡ Â÷¶ó¸® ¾È ¸¸µå´Â °ÍÀÌ ´õ ³´´Ù.