´Ù. ºÒÇÊ¿äÇÑ °ø¹é Á¤¸®

¹®¼­¸¦ ÀÛ¼ºÇÏ´Ù º¸¸é ÁÙ ³¡¿¡ ºÒÇÊ¿äÇÑ °ø¹éÀÌ »ý±æ ¼ö ÀÖ´Ù. °ø¹éÀ¸·Î¸¸ ä¿öÁø ÁÙÀ̶óµç°¡ ¸¶Áö¸· ¹®ÀÚ ÀÌÈÄ¿¡ °ø¹é¸¸ À̾îÁö´Ù°¡ °³ÇàµÇ´Â °æ¿ì´Â ºÐ¸íÈ÷ ÇÊ¿äÄ¡ ¾ÊÀº °ø¹éÀÌ µé¾î°¡ ÆÄÀÏ ¿ë·®¸¸ Â÷ÁöÇÏ°Ô µÈ´Ù. ¹°·Ð ÀÌ °ø¹éµéÀÌ Á¤¸»·Î ºÒÇÊ¿äÇÑ °ÍÀÎÁö ¾Æ´Ï¸é ´çÀåÀº ¾Èº¸ÀÌÁö¸¸ ÀǹÌÀÖ´Â °ø¹éÀÎÁö´Â ¹®¼­¸¦ ÀÛ¼ºÇÏ´Â »ç¶÷¸¸ ¾Ë ¼ö ÀÖ´Ù. ´ÙÀ½ ¹®¼­¸¦ º¸ÀÚ. ÀÌ ¹®¼­¿¡¼­ -´Â °ø¹éÀÌ´Ù.

 

#include-<losedows.h>

\t\t

if-(Bill==Babo)-{---

\t

}

 

ÀÌ ¹®¼­¿¡¼­ µÎ ¹ø° ÁÙÀÇ ÅÇ°ú ¼¼ ¹ø° ÁÙ ³¡¿¡ °ø¹éÀº º¸ÀÌÁö ¾Ê´Â ºÒÇÊ¿äÇÑ ¹®ÀÚÀÌ´Ù. ³× ¹ø° ÁÙÀÇ Åǵµ ´çÀåÀº ºÒÇÊ¿ä ÇÏÁö¸¸ ´ÙÀ½¿¡ ÀÌ ºí·Ï¿¡ ¾î¶² Äڵ带 ÀÛ¼ºÇÑ´Ù¸é ÇÊ¿äÇØÁö´Â ÅÇÀÌ´Ù. °ø¹é Á¤¸® ±â´ÉÀº ÀÌ·± ½ÄÀ¸·Î ´çÀå º¸ÀÌÁö ¾Ê´Â °ø¹éÀ» Á¦°ÅÇÏ¿© ¹®¼­¸¦ ³¯¾ÀÇÏ°Ô ¸¸µå´Â ±â´ÉÀÌ´Ù. ƯÈ÷ Åë½Å¸Á¿¡¼­ ´Ù¿î¹ÞÀº ¹®¼­µéÀº ºó ÁÙÀÌ »ðÀԵǾî ÀÖ°í ºó ÁÙÀÌ °ø¹éÀ¸·Î °¡µæÂ÷ ÀÖ¾î ¹®¼­ ¿ë·®ÀÌ ½ÇÁ¦ ¿ë·®º¸´Ù µÎ ¹è³ª µÇ´Â °æ¿ìµµ Àִµ¥ ÀÌ·² ¶§ °ø¹éÀ» Á¤¸®ÇÏ¸é ¿ë·®»óÀÇ ¸¹Àº À̵æÀ» º¼ ¼ö ÀÖ´Ù.

ºÒÇÊ¿äÇÑ °ø¹éÀ» Á¤¸®ÇÏ´Â ¸â¹öÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇϵµ·Ï ÇÏÀÚ. ÀÌ ±â´ÉÀº ÀÏ´ÜÀº ¼±Åÿµ¿ª¿¡ ´ëÇØ °ø¹éÀ» Á¤¸®Ç쵂 ¼±Åÿµ¿ªÀÌ ¾ø´Ù¸é ¹®¼­ Àüü¸¦ ´ë»óÀ¸·Î ÇÑ´Ù.

 

void CApiEdit::RemoveExtraSpace()

{

     int SelFirst, SelSecond;

     TCHAR *src,*dest;

     TCHAR *s,*d;

     int len;

     int nDiff;

 

     if (SelStart==SelEnd) {

          SelFirst=0;

          SelSecond=doclen;

     } else {

          SelFirst=min(SelStart,SelEnd);

          SelSecond=max(SelStart,SelEnd);

     }

     len=SelSecond-SelFirst;

 

     src=(TCHAR *)malloc(len+1);

     dest=(TCHAR *)malloc(len+1);

     lstrcpyn(src,buf+SelFirst,len+1);

 

     s=src+len;

     d=dest+len;

     nDiff=0;

     for (;;) {

          *d=*s;

          if (s==src)

              break;

          d--;

          s--;

 

          if (*(s+1)==¡®\r¡¯) {

              while (AeIsWhiteSpace(*s) && s!=src) {

                   s--;

                   nDiff--;

              }

          }

     }

 

     if (nDiff) {

          StartUndoGroup();

          Delete(SelFirst,len);

          Insert(SelFirst,d);

          EndUndoGroup();

 

          SelSecond += nDiff;

 

          if (SelStart==SelEnd) {

              off=SelStart=SelEnd=0;

          } else if (SelStart < SelEnd) {

              off=SelEnd=SelSecond;

          } else {

              SelStart=SelSecond;

          }

 

          Invalidate(SelFirst);

          SetCaret();

     }

 

     free(src);

     free(dest);

}

 

º¯È¯ ÈÄ¿¡ ¹®¼­ÀÇ ±æÀÌ°¡ ´Þ¶óÁú ¼ö ÀÖÀ¸¹Ç·Î ¹öÆÛ´Â src, dest µÎ °³°¡ ÇÊ¿äÇÏ´Ù. ÇÏÁö¸¸ »èÁ¦¸¦ À§ÇÑ µ¿ÀÛÀ» ÇϹǷΠ¿øº»º¸´Ù ´õ Å« °á°ú ¹®ÀÚ¿­ÀÌ ¸¸µé¾îÁú ¼ö´Â ¾øÀ¸¸ç ¹öÆÛ´Â µÑ ´Ù ¶È°°Àº Å©±â·Î ÇÒ´çÇÏ¸é µÈ´Ù. destÀÇ Á¤È®ÇÑ ÇÊ¿ä·®Àº srcÀÇ ±æÀÌ-Áö¿öÁú °ø¹é¼ö·Î °è»êÇÒ ¼ö ÀÖ°ÚÁö¸¸ ³²´Â °ÍÀº ¹®Á¦°¡ µÇÁö ¾ÊÀ¸¹Ç·Î ÀÌ °è»êÀ» ±»ÀÌ ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. src¿¡ ¼±Åÿµ¿ªÀÇ ¹®ÀÚ¿­À» º¹»çÇسõ°í ÀÌ ¹®ÀÚ¿­¿¡¼­ ºÒÇÊ¿äÇÑ °ø¹éÀ» ã¾Æ dest·Î Àü¼ÛÇÏ¸é µÈ´Ù.

ÀÌ ÇÔ¼ö°¡ ¾Õ¿¡¼­ ÀÛ¼ºÇÑ µÎ ÇÔ¼ö¿Í ´Ù¸¥ Á¡ÀÌ ÀÖ´Ù¸é ¿øº» ¹®ÀÚ¿­ÀÇ ³¡¿¡¼­ºÎÅÍ ¾ÕÂÊÀ¸·Î °Ë»öÀ» ÇØ ³ª°£´Ù´Â Á¡ÀÌ´Ù. ºÒÇÊ¿äÇÑ °ø¹éÀº °³ÇàÄÚµå ÀÌÀü¿¡ ÀÖ´Â °ø¹éÀ¸·Î Á¤ÀǵǴµ¥ °ø¹éÀ» ¸ÕÀú ã°í °³ÇàÄڵ尡 µÚ¿¡ ÀÖ´ÂÁö º¸´Â °Íº¸´Ù´Â °³ÇàÄڵ带 ¸ÕÀú ã°í À̾îÁö´Â °ø¹éÀ» ã´Â °ÍÀÌ ÈξÀ ´õ ½±±â ¶§¹®ÀÌ´Ù. ´ÙÀ½ ±×¸²À» º¸ÀÚ.

¼ø¹æÇâÀ¸·Î °Ë»öÀ» ÇÏ´Ù°¡ °ø¹éÀ» ¸¸³­ °æ¿ì ÀÌ °ø¹éÀÌ ºÒÇÊ¿äÇÑ °ø¹éÀÎÁö ¾Æ´ÑÁö ÆÇ´ÜÇÏ·Á¸é °ø¹é ÀÌÈÄ¿¡ ºñ°ø¹é ¹®ÀÚ°¡ ÀÖ´ÂÁö ´ÙÀ½ ¹®ÀÚ¿­À» ´õ ÀÐ¾î ºÁ¾ß ÇÑ´Ù. ¸¸¾à °ø¹é ÀÌÈÄ °³ÇàÄÚµå ÀÌÀü¿¡ ´Ù¸¥ ¹®ÀÚ°¡ ÀÖ´Ù¸é ÀÌ °ø¹éÀº ºÒÇÊ¿äÇÑ °ø¹éÀÌ ¾Æ´Ï´Ù. ¡®³ª´Â¡¯ ´ÙÀ½¿¡ ÀÖ´Â °ø¹éÀÇ µÚÂÊÀ¸·Î ¡®¹®¡¯ÀÚ°¡ Àֱ⠶§¹®¿¡ ÀÌ °ø¹éÀº Àǹ̰¡ ÀÖ´Ù. ¡®¹®ÀÚ¿­¡¯ ´ÙÀ½ÀÇ °ø¹é ¼ÂÀº ºÐ¸íÈ÷ ºÒÇÊ¿äÇÑ °ø¹éÀε¥ ÀÌ °ø¹éµé µÚ·Î °ø¹é°ú °³ÇàÄڵ常 Àֱ⠶§¹®ÀÌ´Ù. ¼ø¹æÇâ °Ë»öÀº °ø¹éÀ» ¸¸³µÀ» ¶§ µÚÂÊÀ» ´õ ÀÐ¾î ºÁ¾ß ÀÌ °ø¹éÀÇ Æ÷ÇÔ¿©ºÎ¸¦ °áÁ¤ÇÒ ¼ö ÀÖ°í °ø¹éÀ» ¸¸³¯ ¶§¸¶´Ù ÀÌ ÆÇ´ÜÀ» ¹Ýº¹ÇØ¾ß ÇÑ´Ù.

¿ª¹æÇâ °Ë»öÀº ¹®ÀÚ¸¦ Àд Á·Á· ºÒÇÊ¿äÇÑÁö ¾Æ´ÑÁö ¹Ù·Î ¾Ë ¼ö ÀÖ´Ù. °³ÇàÄÚµå \rÀ» ¸¸³­ ÀÌÈĺÎÅÍ ³ªÅ¸³ª´Â °ø¹éÀº ¹«Á¶°Ç ºÒÇÊ¿äÇϹǷΠ¾ÕµÚÀÇ ´Ù¸¥ ¹®ÀÚ¸¦ º¼ ÇÊ¿äµµ ¾ø´Ù. srcÀÇ ³¡¿¡¼­ºÎÅÍ Çѹ®ÀÚ¾¿ dest·Î º¹»ç¸¦ ÇØ¿À´Ù°¡ °³ÇàÄڵ带 ¸¸³ª¸é, ÀÌÈÄÀÇ °ø¹é¸¸ °Ç³Ê¶Ù¸é ¾ÆÁÖ °£´ÜÇÏ°Ô ºÒÇÊ¿äÇÑ °ø¹éÀ» °È¾î³¾ ¼ö ÀÖ´Ù. °Ë»öÀÇ ¹æÇâ¿¡ µû¶ó ¾Ë°í¸®ÁòÀÇ º¹Àâµµ¿¡ ¾öû³­ Â÷ÀÌ°¡ ¹ß»ýÇÔÀ» ¾Ë ¼ö Àִµ¥ ¸¸¾à ¼ø¹æÇâÀ¸·Î °Ë»öÇϵµ·Ï ¼³°è¸¦ Çß´Ù¸é ÄÚµå´Â µÎ ¹è ÀÌ»ó º¹ÀâÇØÁú °ÍÀÌ°í ¼Óµµµµ ´ç¿¬È÷ ´À·ÁÁø´Ù.

ºÒÇÊ¿äÇÑ °ø¹éÀ» Á¤¸®ÇÑ ÈÄ src¸¦ »èÁ¦ÇÏ°í dest¸¦ »ðÀÔÇÏ´Â °ÍÀº ¾ÕÀÇ µÎ ÇÔ¼ö¿¡¼­¿Í µ¿ÀÏÇÏ´Ù. ´Ü, ÀÌ °æ¿ì nDiff°¡ 0À̸é Áï, ¾î¶°ÇÑ ¹®ÀÚµµ »èÁ¦µÇÁö ¾Ê¾Ò´Ù¸é ¾Æ¹« °Íµµ ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ÀÌ °æ¿ì src¿Í dest´Â µ¿ÀÏÇÑ ³»¿ëÀ» °¡Áö¸ç ´ëü¸¦ Çصµ º° »ó°üÀº ¾øÁö¸¸ ±¦È÷ ºÒÇÊ¿äÇÏ°Ô Ãë¼Ò ·¹Äڵ带 µÎ °³³ª ´õ ¾´´Ù´Â Á¡ÀÌ º°·Î ¸¶À½¿¡ µéÁö ¾Ê´Â´Ù. º¯È¯ °á°ú ¼±Åÿµ¿ªÀ» Á¶Á¤ÇÏ´Â ¹æ¹ýÀº ConvertSpaceTab ÇÔ¼ö¿Í µ¿ÀÏÇÏ´Ù.

ÀÌ ÇÔ¼ö´Â ºñ±³Àû ¿Ïº®ÇÏÁö¸¸ »ç½Ç ÇÑ °¡Áö ³í¸®ÀûÀÎ ¹®Á¦Á¡À» °¡Áö°í Àִµ¥ ¼±Åÿµ¿ªÀÇ ³¡ÀÌ °ø¹éÀÎ °æ¿ì, ÀÌ °ø¹éÀÇ À¯È¿¼ºÀ» ¾Ë ¼ö ¾ø´Ù´Â Á¡ÀÌ´Ù. ¿Ö³ÄÇÏ¸é ¼±ÅÃµÈ ¹®ÀÚ¿­ÀÎ src¿¡¼­´Â ÀÌ °ø¹é ´ÙÀ½¿¡ ´Ù¸¥ ¹®ÀÚ°¡ ÀÖ´ÂÁö¸¦ ÆÇ´ÜÇÒ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. ¹öÆÛÀÇ ³¡¿¡¼­ °³Ç๮ÀÚ¸¦ ¸¸³ªÁö ¸øÇßÀ¸¹Ç·Î ÀÌ °ø¹éÀº ½ÇÁ¦·Î ºÒÇÊ¿äÇÏ´õ¶óµµ Á¦°ÅµÇÁö ¾Ê´Â´Ù. ÀÌ ¹®Á¦´Â ¹®´Ü °ü¸® ÇÔ¼ö°¡ ÀÛ¼ºµÇ¸é ÇØ°áÇÒ ¼ö ÀÖ´Ù.

ÀÌ»óÀ¸·Î ¼¼ °³ÀÇ ¹®¼­ º¯È¯ ÇÔ¼öµéÀ» ÀÛ¼ºÇߴµ¥ È£½ºÆ®ÀÇ OnCommand¿¡¼­ ÆíÁý ¸Þ´ºÀÇ Ç׸ñÀÌ ¼±ÅÃµÉ ¶§ ÅÇ º¯È¯ ÇÔ¼ö¿Í °ø¹é Á¤¸® ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ÇÔ¼ö¸¸ È£ÃâÇÏ¸é ¸ðµç ÆíÁý µ¿ÀÛÀº ApiEdit°¡ ¾Ë¾Æ¼­ ÇÒ °ÍÀÌ´Ù.

 

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

{

     ....

     case IDM_EDIT_TOTAB:

          pSi->Ae.ConvertSpaceTab(FALSE);

          break;

     case IDM_EDIT_TOSPACE:

          pSi->Ae.ConvertSpaceTab(TRUE);

          break;

     case IDM_EDIT_REMOVESPACE:

          pSi->Ae.RemoveExtraSpace();

          break;

 

Áö±Ý±îÁö ÀÛ¼ºÇÑ ÆíÁý ¸í·É Áß ÀϺδ ¼±Åÿµ¿ªÀÌ ÀÖ¾î¾ß¸¸ »ç¿ëÇÒ ¼ö Àִµ¥ ÀÌ·± ¸í·ÉµéÀº OnInitMenu¿¡¼­ ¸Þ´ºÇ׸ñµéÀ» °ü¸®ÇØ¾ß ÇÑ´Ù.

 

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

{

          ....

          pSi->Ae.GetSelect(s,e);

          if (s == e) {

              EnableMenuItem(hMenu, IDM_EDIT_CUT, MF_BYCOMMAND | MF_GRAYED);

              EnableMenuItem(hMenu, IDM_EDIT_COPY, MF_BYCOMMAND | MF_GRAYED);

           EnableMenuItem(hMenu, IDM_EDIT_UPPERSENT, MF_BYCOMMAND | MF_GRAYED);

           EnableMenuItem(hMenu, IDM_EDIT_TOTAB, MF_BYCOMMAND | MF_GRAYED);

           EnableMenuItem(hMenu, IDM_EDIT_TOSPACE, MF_BYCOMMAND | MF_GRAYED);

          } else {

              EnableMenuItem(hMenu, IDM_EDIT_CUT, MF_BYCOMMAND | MF_ENABLED);

              EnableMenuItem(hMenu, IDM_EDIT_COPY, MF_BYCOMMAND | MF_ENABLED);

           EnableMenuItem(hMenu, IDM_EDIT_UPPERSENT, MF_BYCOMMAND | MF_ENABLED);

           EnableMenuItem(hMenu, IDM_EDIT_TOTAB, MF_BYCOMMAND | MF_ENABLED);

           EnableMenuItem(hMenu, IDM_EDIT_TOSPACE, MF_BYCOMMAND | MF_ENABLED);

          }

 

ÅÇ, °ø¹é°£ÀÇ º¯È¯ ¸í·É°ú ¹®Àå óÀ½¸¸ ´ë¹®ÀÚ º¯È¯ ¸í·ÉÀº ¼±Åÿµ¿ªÀÌ ÀÖÀ» ¶§¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ ¸í·ÉÀÇ »óÅ´ º¹»ç, À߶󳻱â¿Í µ¿ÀÏÇÏ°Ô °ü¸®µÇ¹Ç·Î °°Àº ºí·Ï¿¡ Äڵ带 ÀÛ¼ºÇÏ¿´´Ù.