4.ÀÚµ¿ »ó¿ë±¸

°¡.»ó¿ë±¸ °Ë»ö

»ó¿ë±¸¸¦ »ðÀÔÇÏ·Á¸é »ó¿ë±¸ â¿¡¼­ ¿øÇÏ´Â »ó¿ë±¸¸¦ °ñ¶ó ´õºíŬ¸¯ÇØ¾ß ÇÑ´Ù. Áï, »ó¿ë±¸¸¦ ¾²°í ½ÍÀ¸¸é ŸÀÌÇÁÁß¿¡ ¸¶¿ì½º·Î ¼ÕÀÌ °¡¾ß ÇÑ´Ù´Â ¾ê±âÀε¥ ÀÌ´Â ¿ÀÈ÷·Á ŸÀÌÇÎ ¼Óµµ¸¦ ¶³¾î¶ß¸®°í Á¤½ÅÀ» »ê¸¸ÇÏ°Ô ¸¸µé¾î ¾È ¾²´À´Ï¸¸µµ ¸øÇÑ °á°ú¸¦ ÃÊ·¡Çϱ⵵ ÇÑ´Ù. ÀÚµ¿ »ó¿ë±¸ ±â´ÉÀº ¹Ì¸® µî·ÏµÈ ¹®ÀÚ¿­À» ÀÔ·ÂÇϱ⸸ ÇÏ¸é »ó¿ë±¸·Î ´ëÃ¼ÇØ ÁÖ´Â ±â´ÉÀÌ´Ù. Űº¸µå·Î »ó¿ë±¸¸¦ ¹Ù·Î ÀÔ·ÂÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÀÛ¾÷ ¼Óµµ°¡ ÈξÀ ´õ ºü¸£´Ù.

ÀÚµ¿ »ó¿ë±¸¸¦ »ðÀÔÇÒ ½ÃÁ¡Àº ÄÁÆ®·ÑÀÌ ¹®ÀåÀ» ¹Ì¸® ¾à¼ÓµÈ ¹®ÀÚ¿­À» ÀԷ¹޾ÒÀ» ¶§ÀÌ°í »ó¿ë±¸ ¹­À½Àº È£½ºÆ®°¡ °ü¸®ÇϹǷΠÀÌ ±â´ÉÀ» ±¸ÇöÇÏ·Á¸é ÄÁÆ®·Ñ°ú È£½ºÆ®°¡ »óÈ£ ±ä¹ÐÈ÷ ÇùÁ¶ÇØ¾ß ÇÑ´Ù. ÄÁÆ®·ÑÀº ÀÔ·ÂµÈ ¹®ÀÚ¿­ÀÌ ÀÚµ¿ »ó¿ë±¸ »ðÀÔ¸íÀ̸é È£½ºÆ®¿¡¼¼ »ðÀÔ¸íÀ» °¡Áö´Â »ó¿ë±¸°¡ ÀÖ´ÂÁö ¹°¾îº¸¾Æ¾ß Çϰí È£½ºÆ®´Â »ó¿ë±¸ÀÇ ³»¿ëÀ» ÄÁÆ®·Ñ¿¡°Ô Àü´ÞÇØ¾ß ÇÑ´Ù. ÀÌ ±â´ÉÀ» ±¸ÇöÇÏ·Á¸é È£½ºÆ®¿¡ ÇöÀç ¿­·ÁÁø »ó¿ë±¸ ¹­À½¿¡¼­ »ðÀÔ¸íÀ¸·Î »ó¿ë±¸¸¦ °Ë»öÇÏ´Â ±â´ÉÀÌ ÇÊ¿äÇÏ´Ù. Clip.cpp¿¡ ´ÙÀ½ µÎ ÇÔ¼ö¸¦ Ãß°¡ÇÑ´Ù.

 

// ¿­·ÁÁø »ó¿ë±¸¿¡¼­ »ó¿ë±¸¸¦ °Ë»öÇÑ´Ù.

CClipRecord *FindClipRecord(TCHAR *Name,BOOL bAutoName)

{

     HTREEITEM hRoot;

     CClipRecord *cr;

 

     hRoot=TreeView_GetRoot(hClipTree);

     while (hRoot) {

          cr=FindClipRecordSub(hRoot,Name,bAutoName);

          if (cr) {

              return cr;

          }

          hRoot=TreeView_GetNextSibling(hClipTree,hRoot);

     }

     return NULL;

}

 

// hRoot Æ®¸®¿¡¼­ »ó¿ë±¸¸¦ °Ë»öÇÑ´Ù.

CClipRecord *FindClipRecordSub(HTREEITEM hRoot,TCHAR *Name,BOOL bAutoName)

{

     HTREEITEM hChild;

     TVITEM TV;

     CClipRecord *cr;

 

     hChild=TreeView_GetChild(hClipTree,hRoot);

     while (hChild) {

          TV.mask=TVIF_PARAM | TVIF_IMAGE;

          TV.hItem=hChild;

          TreeView_GetItem(hClipTree,&TV);

          // Æú´õÀ̸é Àç±ÍÈ£ÃâÇÑ´Ù.

          if (TV.iImage==DGI_CLIPFOLDER) {

              cr=FindClipRecordSub(hChild,Name,bAutoName);

              if (cr) {

                   return cr;

              }

          } else {

              // ÀÚµ¿ »ðÀÔ¸í ¶Ç´Â À̸§À¸·Î °Ë»öÇÑ´Ù.

              cr=(CClipRecord *)TV.lParam;

              if (bAutoName) {

                   if (lstrcmpi(cr->AutoName,Name) == 0) {

                        return cr;

                   }

              } else {

                   if (lstrcmpi(cr->Name,Name) == 0) {

                        return cr;

                   }

              }

          }

          hChild=TreeView_GetNextSibling(hClipTree,hChild);

     }

     return NULL;

}

 

»ó¿ë±¸ Æ®¸®ÀÇ ¸ðµç ³ëµå¸¦ ´Ù ¼øÈ¸Çϸ鼭 À̸§, ÀÚµ¿»ðÀÔ¸íÀ¸·Î °Ë»öÇØ¾ß ÇϹǷΠÀç±Í È£ÃâÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. ´ÙÇàÈ÷ ¸Þ¸ð¸®³»¿¡¼­ÀÇ °Ë»öÀ̶ó ºü¸£±â´Â ÇÏÁö¸¸ ¸ðµç ³ëµå¸¦ °Ë»öÇØ¾ß ÇϹǷΠ»ó¿ë±¸ ¹­À½ÀÌ Å©´Ù¸é ½Ã°£ÀÌ Á¶±Ý °É¸± ¼öµµ ÀÖ´Ù. ¶ÇÇÑ ½ºÆäÀ̽º³ª ÅÇÀ» ÀÔ·ÂÇÒ ¶§¸¶´Ù ¹Ýº¹µÇ±â ¶§¹®¿¡ ÀüüÀûÀÎ ¼º´ÉÀ» ÀúÇϽÃŰ´Â ¿äÀÎÀÌ µÉ ¼öµµ ÀÖ´Ù. ÀÌ µ¿ÀÛÀ» Á» ´õ ºü¸£°Ô ÇÏ°í ½Í´Ù¸é º°µµÀÇ À妽º¸¦ À¯ÁöÇϰųª ij½Ã ±â¹ýÀ» µµÀÔÇÏ´Â °ÍÀÌ ÁÁ´Ù.

»ðÀÔ¸í °Ë»ö¿¡ ´ë¼Ò¹®ÀÚ ±¸ºÐÀº ÇÏÁö ¾Ê¾Ò´Âµ¥ »ó¿ë±¸³¢¸® ´ë¼Ò¹®ÀÚ°¡ ´Ù¸¥ »ðÀÔ¸íÀ» ÁöÁ¤ÇÏ´Â °æ¿ì´Â °ÅÀÇ ¾øÀ» °ÍÀ̹ǷΠ±¸ºÐÇÏÁö ¾Ê´Â °ÍÀÌ ´õ ¹Ù¶÷Á÷ÇÏ´Ù. ÇÊ¿äÇÏ´Ù¸é ´ë¼Ò¹®ÀÚ ±¸ºÐ ¿©ºÎ¸¦ ¿É¼ÇÀ¸·Î ¸¸µé ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. °Ë»öµÇ¾úÀ¸¸é »ó¿ë±¸ ·¹ÄÚµåÀÇ Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù. ÀÌ Æ÷ÀÎÅÍ´Â Æ®¸®ÀÇ °¢ ³ëµå¿¡ ÇÒ´çµÇ¾î ÀÖÀ¸¹Ç·Î Ç×»ó ½Å¼ÓÇÏ°Ô ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù.

³ª.ÀÚµ¿ »ó¿ë±¸ »ðÀÔ

ApiEdit ¿¡ ÀÚµ¿ »ó¿ë±¸ 󸮸¦ À§ÇÑ ¿É¼Ç º¯¼öµéÀ» Ãß°¡ÇÑ´Ù. ÀÚµ¿ »ó¿ë±¸ ±â´ÉÀ» »ç¿ëÇÒ °ÍÀΰ¡¿Í ÅÇŰ·Î ÀÚµ¿ »ó¿ë±¸¸¦ »ðÀÔÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù.

 

class CApiEdit : public CWindow

{

private:

     ....

     BOOL bUseAutoClip;

     BOOL bAutoClipByTab;

 

public:

     ....

     BOOL GetUseAutoClip() { return bUseAutoClip; }

     void SetUseAutoClip(BOOL aValue) { bUseAutoClip=aValue; }

     BOOL GetAutoClipByTab() { return bAutoClipByTab; }

     void SetAutoClipByTab(BOOL aValue) { bAutoClipByTab=aValue; }

};

 

ÀÌ ¿É¼Ç°ªÀº ½Ç½Ã°£À¸·Î Á¡°ËµÇ¸ç ¿É¼ÇÀÌ º¯°æµÉ ¶§ Ưº°ÇÑ ºÎ°¡ 󸮰¡ ÇÊ¿ä¾øÀ¸¹Ç·Î Set ÇÔ¼öµµ ÀζóÀÎÀ¸·Î ÀÛ¼ºÇß´Ù. Å×½ºÆ®¸¦ À§ÇØ »ý¼ºÀÚ¿¡¼­ µÑ ´Ù TRUE ·Î ÃʱâÈ­ÇÑ´Ù.

 

CApiEdit::CApiEdit()

{

     ....

     bUseAutoClip=TRUE;

     bAutoClipByTab=TRUE;

}

 

Á¡°ËÇÒ ÁÖü´Â ¹®ÀÚ¿­ ÀÔ·ÂÀ» ¹Þ´Â ºä, Áï ÅØ½ºÆ® ºä¿¡¸¸ ±¹ÇѵȴÙ. Çí»çºä¿¡¼­´Â ¹®ÀÚ¸¦ ÀÔ·ÂÇÏ´Â °ÍÀÌ ¾Æ´Ï¹Ç·Î Àǹ̾ø´Ù. ÅØ½ºÆ® ºä¿¡ ´ÙÀ½ ¼¼ ÇÔ¼ö¸¦ Ãß°¡ÇÑ´Ù.

 

class CApiEditText : public CWindow

{

     ....

     virtual void TestAutoClip(int ch);

     virtual int GetAutoClipName();

     virtual void ReplaceClipText(TCHAR *Text);

};

 

Çí»ç ºä´Â ÀÌ ÇÔ¼ö¸¦ ¾²Áö ¾ÊÁö¸¸ Â÷ÈÄ¿¡ ´Ù¸¥ ºä´Â ÀÌ ÇÔ¼ö¸¦ ¾µ ¼öµµ ÀÖÀ¸¹Ç·Î °¡»ó ÇÔ¼ö·Î ¼±¾ðÇØ¾ß ÇÑ´Ù. ´ÙÀ½ µÎ ÇÔ¼ö´Â ÀÚµ¿ »ó¿ë±¸ ÀÔ·ÂÀ» °Ë»çÇÑ´Ù.

 

void CApiEditText::TestAutoClip(int ch)

{

     TCHAR *pWord;

     int toff,len;

 

     // ÃÖ¼ÒÇÑ 2±ÛÀÚ´Â ÀԷµǾî ÀÖ¾î¾ß °Ë»öÀÇ Àǹ̰¡ ÀÖ´Ù.

     if (pFrame->bUseAutoClip && off >= 2) {

          if ((pFrame->bAutoClipByTab && ch=='\t') ||

              (pFrame->bAutoClipByTab==FALSE && ch==' ')) {

              toff=GetAutoClipName();

              len=off-1-toff;

              // lenÀÌ 0ÀÎ °æ¿ì : °è¼Ó °ø¹é¸¸ À̾îÁö´Â °æ¿ì. ¾ÕÂÊ ´Ü¾î°¡ ¾øÀ½

              if (len) {

                   pWord=(TCHAR *)calloc(len+1,1);

                   memcpy(pWord,pFrame->buf+toff,len);

                   if (SendMessage(GetParent(pFrame->hWnd),pFrame->UserBase+3,0,(LPARAM)pWord)) {

                        Invalidate(pFrame->FindParaStart(toff));

                   }

                   free(pWord);

              }

          }

     }

}

 

int CApiEditText::GetAutoClipName()

{

     int toff;

    

     // ¾ÕÂÊÀÇ °ø¹é ¾Æ´Ñ ¹®ÀÚ¸¦ ãÀ½. ±¸ºÐÀÚ °³³äÀÌ ¾øÀ¸¹Ç·Î GetPrevWord µîÀ» ¾µ ¼ö ¾øÀ½

     for (toff=off-2;;toff--) {

          if (AeIsWhiteSpace(pFrame->buf[toff]) || pFrame->buf[toff] == '\n') {

              toff++;

              break;

          }

          if (toff==0) {

              break;

          }

     }

     return toff;

}

 

ÀÚµ¿ »ó¿ë±¸ ¿É¼ÇÀÌ ÄÑÁ® ÀÖ¾î¾ß Çϰí ÃÖ¼ÒÇÑ 2 ±ÛÀÚ´Â ÀԷµǾî ÀÖ¾î¾ß ÇÑ´Ù. ¿Ö ÃÖ¼ÒÇÑ µÎ ±ÛÀÚÀΰ¡ Çϸé ÀÚµ¿»ðÀÔ¸í 1ÀÚ, ½ºÆäÀ̽º³ª ÅÇ 1ÀÚ ±îÁö´Â ÀԷµǾî ÀÖ¾î¾ß Çϱ⠶§¹®ÀÌ´Ù. ÀÌ Á¶°ÇÀÌ ¸ÂÀ» ¶§ ÀÚµ¿ »ó¿ë±¸ »ðÀÔ¸íÀÌ ÀԷµǾú´ÂÁö º»´Ù. GetAutoClipName ÇÔ¼ö´Â ÇöÀç À§Ä¡¿¡¼­ µÎ Ä­ ¾ÕÂÊÀÇ ´Ü¾î¸¦ ±¸ÇÑ´Ù. »ðÀÔ¸í ÃßÃâ¿¡ °ø¹é(ÅÇ Æ÷ÇÔ)À̳ª °³Çà Äڵ常 ±¸ºÐÀÚ°¡ µÇ¸ç µû¶ó¼­ GetPrevWord µûÀ§ÀÇ ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù. ÀÌ ÇÔ¼ö°¡ Á¶»çÇÑ ¿ÀÇÁ¼Â¿¡¼­ ÇöÀç À§Ä¡-1±îÁö, Áï °ø¹éÀ̳ª ÅÇÀº Á¦¿ÜÇÑ ´Ü¾î¸¦ ÃëÇϸé ÀÌ ´Ü¾î°¡ »ðÀÔ¸íÀÌ´Ù.

Àӽà ¹öÆÛ¸¦ ÇÒ´çÇÑ ÈÄ ÇÁ·¹ÀÓÀÇ ºÎ¸ð À©µµ¿ì, ±×·¯´Ï±î ApiEdit ÄÁÆ®·ÑÀÇ ºÎ¸ð À©µµ¿ì¿¡°Ô UserBase+3 ¸Þ½ÃÁö¸¦ º¸³» ÀÚµ¿ »ó¿ë±¸ Á¡°ËÀ» ¿äûÇÑ´Ù. »ç¿ëÀÚ Á¤ÀÇ ¸Þ½ÃÁö¸¦ »ç¿ëÇÏ´Â ÀÌÀ¯¿¡ ´ëÇØ¼­´Â ¾Õ¼­ ¸î ¹ø ¼³¸íÇÑ ¹Ù ÀÖ´Ù. À̶§ lParamÀ¸·Î ÃßÃâµÈ ¾ÕÂÊ ´Ü¾î¸¦ Àü´ÞÇÑ´Ù. ApiEditÀÇ ºÎ¸ð À©µµ¿ì´Â UserBase+3À» ¹Þ¾ÒÀ» ¶§ »ó¿ë±¸ ¹­À½¿¡¼­ »ðÀÔ¸í °Ë»öÀ» ÇÑ ÈÄ ÀÚµ¿ »ó¿ë±¸À̸é ReplaceClipText ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.

 

LRESULT CALLBACK DGChildProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     ....

    CClipRecord *cr;

 

     pSi=(SInfo *)GetWindowLongPtr(hWnd,0);

     if (pSi && iMessage > WM_USER) {

          ....

        if (iMessage == pSi->Ae.GetUserBase()+3) {

           cr=FindClipRecord((TCHAR *)lParam,TRUE);

           if (cr) {

               hActive=(HWND)SendMessage(g_hMDIClient, WM_MDIGETACTIVE,0,NULL);

               pSi=(SInfo *)GetWindowLong(hActive,0);

               pSi->Ae.GetActiveView()->ReplaceClipText(cr->Content);

               return 1;

           }

           return 0;

        }

     }

 

lParamÀ¸·Î Àü´ÞµÈ ´Ü¾î¸¦ °Ë»öÇØ º¸°í ÀÖÀ¸¸é ÀÚµ¿ »ó¿ë±¸·Î ´ëüÇÑ´Ù. ´ÙÀ½ ÇÔ¼ö°¡ ÀÚµ¿»ó¿ë±¸ ´ëü¸¦ ÇÑ´Ù.

 

// Á÷ÀüÀÇ ´Ü¾î¸¦ Text »ó¿ë±¸·Î ´ëüÇÑ´Ù.

void CApiEditText::ReplaceClipText(TCHAR *Text)

{

     int toff;

 

     toff=GetAutoClipName();

     pFrame->StartUndoGroup(23);

     Delete(toff,off-toff);

     off=toff;

     InsertClipText(Text);

     pFrame->EndUndoGroup();

}

 

InsertClipText ÇÔ¼ö¿Í À¯»çÇ쵂 ÀÚµ¿»ðÀÔ¸íÀ» ã¾Æ¼­ ´ëüÇÑ´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. À̶§ ÀÚµ¿ »ó¿ë±¸ °Ë»çŰÀÎ ÅÇÀ̳ª °ø¹é±îÁö °°ÀÌ ´ëÃ¼ÇØ¾ß ÇÑ´Ù. ÇѰ¡Áö ¾Æ½¬¿î Á¡Àº ÀÚµ¿ µé¿©¾²±â±îÁö Á¶Á¤ÇÏÁö´Â ¸øÇÑ´Ù´Â Á¡Àε¥ ¿¹¸¦ µé¾î for¹®À» »ðÀÔÇϸé ÇöÀç »ðÀԵǴ ºí·ÏÀÇ µé¿©¾²±â »óÅ¿¡ µû¶ó µé¿©¾²±â°¡ Á¶Á¤µÇ´Â °ÍÀÌ ÁÁ´Ù. ÀÌ ±â´ÉÀº ÄÄÆÄÀÏ·¯ ¼öÁØÀÇ ±¸¹® ºÐ¼® ´É·ÂÀ» ¿ä±¸ÇϹǷΠÀÏ´ÜÀº ÀÖ´Â ±×´ë·Î »ðÀÔÇϱâ·Î ÇÏ°í ´ÙÀ½¿¡ °³¼±ÇØ º¼ »ý°¢ÀÌ´Ù. TestAutoClip ÇÔ¼ö´Â ´ÙÀ½ µÎ ÇÔ¼ö¿¡¼­ È£ÃâÇÑ´Ù.

 

void CApiEditText::OnChar(HWND hWnd, TCHAR ch, int cRepeat)

{

     ....

     SetCaret();

     TestAutoClip(ch);

}

 

LRESULT CApiEditText::OnImeChar(HWND hWnd, WPARAM wParam, LPARAM lParam)

{

     SetCaret();

     TestAutoClip(wParam);

     return 0;

}

 

¹®ÀÚ ÀԷ¿¡ ´ëÇÑ ¸ðµç 󸮰¡ ³¡³­ ÈÄ ÀÚµ¿ »ó¿ë±¸¸¦ Á¡°Ë ÇÑ´Ù. ÇÑ±Û ´ÙÀ½¿¡ À̾îÁö´Â °ø¹éÀ̳ª ÅÇÀº OnImeChar ÇÔ¼ö·Î Àü´ÞµÇ¹Ç·Î ÀÌ ÇÔ¼ö¿¡¼­µµ ÀÚµ¿»ó¿ë±¸ Á¡°ËÀ» ÇØ¾ß ÇÑ´Ù. ÀÚµ¿ »ó¿ë±¸ »ðÀÔ ¹®ÀÚ·Î °ø¹éÀ̳ª ÅÇÀ» ¼±ÅÃÇÒ ¼ö Àִµ¥ °ø¹éÀº ³Ê¹« ÀÚÁÖ ÀÔ·ÂµÇ°í ¿ì¿¬È÷¶óµµ »ðÀÔ¸í°ú °°Àº ¹®ÀÚ¿­ÀÌ ÀÔ·ÂµÉ ¼öµµ ÀÖÀ¸¹Ç·Î °¡±ÞÀûÀ̸é ÅÇÀ» »ç¿ëÇÏ´Â °ÍÀÌ È¿À²»ó À¯¸®ÇÏ´Ù.

´Ù.»ó¿ë±¸ »ðÀÔ ¸í·É

¿©±â±îÁö ÀÛ¾÷ÇÏ¸é »ó¿ë±¸¿¡ ´ëÇÑ ¸ðµç 󸮴 ¿Ï·áµÇ¾ú´Ù. ¸¶Áö¸·À¸·Î ¸ÅÅ©·Î ¸í·ÉÁß¿¡ »ó¿ë±¸¸¦ »ðÀÔÇÏ´Â clipÀ̶ó´Â ¸í·ÉÀ» ó¸®ÇÑ´Ù.

 

int DoCommand(const TCHAR *szCom)

{

     ....

     switch (Verb) {

     case DGC_CALL:

          ....

     case DGC_CLIP:

          CClipRecord *cr;

          GetComString(p,str);

          count=GetComNumber(p,1);

          if (str) {

              cr=FindClipRecord(str,FALSE);

              if (cr) {

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

                        pSi->Ae.GetActiveView()->InsertClipText(cr->Content);

                   }

              }

              free(str);

          } else {

              Result=-3;

              goto End;

          }

          break;

          ....

 

À̸§À¸·Î °Ë»öÇØ¼­ ¹ß°ßµÇ¸é »ó¿ë±¸¸¦ »ðÀÔÇÑ´Ù. µû¶ó¼­ ÀÌ ¸í·ÉÀº ¾î¶² »ó¿ë±¸ ¹­À½ÀÌ ¿­·Á Àִ°¡¿¡ µû¶ó ¼º°ø ¿©ºÎ°¡ ´Þ¶óÁö±âµµ ÇÑ´Ù. Macro1¿¡ clip "test"¶ó´Â ¸í·ÉÀÌ µé¾î ÀÖ°í ÀÌ ¸ÅÅ©·Î¿¡ F12 ´ÜÃà۰¡ ÁöÁ¤µÇ¾î ÀÖÀ» ¶§ F12¸¦ ´©¸£¸é ´ÙÀ½ °úÁ¤À» °ÅÃÄ »ó¿ë±¸°¡ »ðÀԵȴÙ.

¸®Å쵃 ¶§´Â ÀÌ ¼ø¼­ÀÇ ¿ª¼øÀ¸·Î ¸®Å쵃 °ÍÀ̸ç ÀÌ °úÁ¤¿¡¼­ ¸ÅÅ©·Î ±¸¹®ÀÇ ¿À·ù¸¦ ó¸®Çϰųª Á¸ÀçÇÏÁö ¾Ê´Â »ó¿ë±¸¸¦ ¹«½ÃÇÑ´Ù. ¾îÁö°£È÷µµ º¹ÀâÇѵ¥ ±×¸¸Å­ ´ç±Ù°ú ApiEditÀÇ ±â´ÉÀÌ ¸¹ÀÌ È®ÀåµÇ¾ú´Ù´Â ¶æÀÌ´Ù. ¸¸¾à Áßø ¸ÅÅ©·Î¿¡¼­ »ó¿ë±¸¸¦ »ðÀÔÇϸé À̺¸´Ù È£Ãâ ±¸Á¶´Â ÈξÀ ´õ º¹ÀâÇØÁú °ÍÀÌ´Ù.