°¡. Àü¹æ Á¤·Ä »ý·«

ApiEdit´Â ¹®¼­¿¡ Á¶±ÝÀÌ¶óµµ º¯È­°¡ ÀÖÀ¸¸é ¹öÆÛÀÇ Ã³À½ºÎÅÍ ³¡±îÁö ÀçÁ¤·ÄÇÑ´Ù. ¹°·Ð Á¤·Ä¹æ½ÄÀº ÀÌÀü ÁÙÀÇ Á¤·Ä °á°ú¸¦ Âü°íÇÏ´Â ±â¹ýÀ¸·Î ¾î´À Á¤µµ ÃÖÀûÈ­°¡ µÇ¾î ÀÖ±â´Â ÇÏÁö¸¸ ù ÁÙºÎÅÍ ³¡±îÁö ´Ù½Ã Á¤·ÄÇÏ´Â °ÍÀº ¾ÆÁÖ ±Ø´ÜÀûÀ¸·Î ¹«½ÄÇÑ ¹æ¹ýÀ̸ç ApiEdit¸¦ ´À¸®°Ô ¸¸µå´Â ÀÏµî °ø½ÅÀÌ´Ù. UpdateLineInfo ÇÔ¼ö´Â ¾ÆÁÖ Áß¿äÇÑ ÀÏÀ» ÇÏÁö¸¸ ÃÖÀûÈ­°¡ µÇÁö ¾ÊÀº »óÅ¿¡¼­´Â ¾ÆÁÖ ¿ªÀû °°Àº Á¸ÀçÀÎ °ÍÀÌ´Ù.

½ÇÁ¦·Î ¹®¼­¸¦ ÆíÁýÇÒ ¶§ Á¤·ÄÀÌ º¯°æµÇ´Â ºÎºÐÀº Áö±ØÈ÷ ÀϺιۿ¡ ¾ø´Ù. ¿¹¸¦ µé¾î ÃÑ ¸¸ ÁÙÂ¥¸® ¹®¼­¿¡¼­ 9900ÁÙÀ» ÆíÁýÁß¿¡ ÀÖ´Ù°í ÇÏÀÚ. ±×·¯¸é ÇöÀç ÁÙÀÌ ¼ÓÇÑ ¹®´ÜÀÇ Á¤·Ä »óÅ´ º¯ÇÏ°ÚÁö¸¸ ±× ÀÌÀü ¹®´ÜÀº Á¤·Ä »óÅ°¡ º¯ÇÒ ¸® ¸¸¹«ÇÏ´Ù. Áï, ÆíÁýÁßÀÎ ¹®´ÜÀÇ Àü¹æÀ¸·Î´Â Á¤·ÄÀ» »ý·«Çصµ µÈ´Ù´Â ¾ê±â¸ç ¸¸ ÁÙ Á¤·ÄÇÒ °ÍÀ» ¹é ÁÙ¸¸ Á¤·ÄÇÏ¸é µÇ¹Ç·Î ¾ó¸¶³ª ¼Óµµ°¡ »¡¶óÁö°Ú´Â°¡?

UpdateLineInfo ÇÔ¼ö¸¦ ÃÖÀûÈ­ÇÏ´Â ¹æ½ÄÀº ¹Ù·Î ÀÌ·± ½ÄÀÌ´Ù. ²À ÇÊ¿äÇÏ´Ù°í ÆǴܵǴ ºÎºÐ¸¸ ÀçÁ¤·ÄÇÏ´Â °ÍÀÌ´Ù. ±×·±µ¥ ¹®Á¦°¡ ÀÖ´Ù. ÀÌ ÇÔ¼ö´Â ¾î¶°ÇÑ Àμöµµ ¹Þ¾ÆµéÀÌÁö ¾ÊÀ¸¸ç ¹®¼­ÀÇ ¾îµðÂëÀÌ ¾ó¸¶¸¸Å­ º¯°æµÇ¾ú´ÂÁö ÀüÇô ¾ËÁö ¸øÇϱ⠶§¹®¿¡ Á¤·ÄÇØ¾ß ÇÒ À§Ä¡¸¦ Á¦´ë·Î ÆÇ´ÜÇÒ ¼ö°¡ ¾ø´Ù´Â Á¡ÀÌ´Ù. Áï, ÀÌ ÇÔ¼ö°¡ Á» ´õ ¶È¶ÈÇØÁö±â À§ÇÑ Ãß°¡ÀûÀÎ Á¤º¸°¡ ¾ø´Â °ÍÀÌ´Ù. ±×·¡¼­ ¿ÜºÎ¿¡¼­ ÀÌ ÇÔ¼ö¿¡°Ô Á¤·ÄÀ» À§ÇÑ ÈùÆ®¸¦ Á¦°øÇØ¾ß Çϸç ÀÌ ÇÔ¼ö´Â ÈùÆ®¸¦ ¹Þ¾Æ Á» ´õ Áö´ÉÀûÀ¸·Î Á¤·ÄÀ» Çϵµ·Ï µ¿ÀÛÀ» ¼öÁ¤ÇØ¾ß ÇÑ´Ù. ÇÔ¼öÀÇ ¿øÇüÀº ´ÙÀ½°ú °°ÀÌ ¼öÁ¤µÈ´Ù.

 

void UpdateLineInfo(int nPos=-1, int nCount=-1);

 

µÎ °³ÀÇ ÈùÆ® Á¤º¸¸¦ Àμö·Î ¹Þ¾Æ µéÀ̴µ¥ nPos´Â ÆíÁýÀÌ ÀϾ ¿ÀÇÁ¼Â À§Ä¡À̸ç ÀÌ À§Ä¡ ÀÌÈĺÎÅÍ Á¤·ÄÇÏ¸é µÈ´Ù. nCount´Â ÆíÁýµÈ ¹ÙÀÌÆ® ¼öÀε¥ »ðÀÔµÈ °æ¿ì´Â ¾ç¼ö°ªÀ» °¡Áö¸ç »èÁ¦µÈ °æ¿ì´Â À½¼ö°ªÀ» °¡Áø´Ù. µÎ ÀμöÀÇ µðÆúÆ®°ªÀº -1·Î µÇ¾î ÀÖÀ¸¸ç -1À̸é ÈùÆ®°¡ ¾øÀ¸¹Ç·Î Àüü Á¤·ÄÀ» Ç϶ó´Â ¶æÀ¸·Î Çؼ®ÇÑ´Ù. ÈùÆ®¸¦ Á¦°øÇÏ´Â ÁÖü´Â Insert, Delete ÇÔ¼öÀ̸ç ÀÌ ÇÔ¼ö¿¡¼­ UpdateLineInfo¸¦ È£ÃâÇÒ ¶§ °¡Áö°í ÀÖ´Â Á¤º¸¸¦ °°ÀÌ ³Ñ°Ü ÁÖµµ·Ï ¼öÁ¤ÇÑ´Ù.

 

void Insert(int nPos, TCHAR *str)

{

     ....

     UpdateLineInfo(nPos,lstrlen(str));

 

void Delete(int nPos, int nCount)

{

     ....

     UpdateLineInfo(nPos,-nCount);

 

ÀÌ·¸°Ô ÈùÆ®¸¦ Á¦°øÇϸé UpdateLineInfo ÇÔ¼ö´Â ÆíÁýµÈ ºÎºÐ¸¸ Á¤·ÄÇϵµ·Ï ÃÖÀûÈ­¸¦ ÇÒ ¼ö ÀÖ´Ù. Insert, Delete ¿Ü¿¡ Á¤·ÄÇÔ¼ö¸¦ È£ÃâÇÏ´Â °÷À¸·Î´Â OnSize, SetWrap ÇÔ¼ö°¡ Àִµ¥ ÀÌ µÎ ÇÔ¼ö¿¡¼­´Â Á¤·Ä »óÅ°¡ ¿Õâ ¹Ù²î¹Ç·Î ÀϺΠÁ¤·ÄÀÌ ºÒ°¡´ÉÇÏ´Ù. ±×·¡¼­ µðÆúÆ® ÀμöÀÎ -1,-1À» ±×´ë·Î Àü´ÞÇϵµ·Ï ³»¹ö·Á µÎ¸é Àüü Á¤·ÄÀ» ÇÏ°Ô µÈ´Ù.

Á¤·Ä ÃÖÀûÈ­¸¦ À§ÇÑ ÈùÆ® Á¤º¸¸¦ Àü´Þ¹Þ¾ÒÀ¸¹Ç·Î ÀÌ Á¤º¸¸¦ ÃÖ´ëÇÑ È°¿ëÇÏ¿© Á¤·Ä·çƾÀ» ÃÖÀûÈ­Çغ¸ÀÚ. ¸ÕÀú nPos °ªÀ¸·ÎºÎÅÍ Á¤·ÄÀ» ½ÃÀÛÇÒ ÁÙÀ» ã°í ±× ÀÌÈÄ ÁÙ¸¸ Á¤·ÄÇϵµ·Ï Çغ¸ÀÚ. Áï, ÆíÁýÀÌ ÀϾ À§Ä¡ÀÇ Àü¹æÀ¸·Î´Â Á¤·ÄÀ» »ý·«ÇÏ°í ÈĹæÀ¸·Î¸¸ Á¤·ÄÀ» ´Ù½Ã ÇÏ´Â °ÍÀÌ´Ù. ¿Ï¼ºµÈ ÄÚµå´Â ´ÙÀ½°ú °°´Ù.

 

void UpdateLineInfo(int nPos/*=-1*/, int nCount/*=-1*/)

{

     int l,s,e;

     int nPara, nLine=0;

     int i;

    int ParaStart;

 

    if (nPos==-1) {

        l=0;

        nPara=0;

    } else {

        ParaStart=FindParaStart(nPos);

        if (ParaStart == 0) {

           l=0;

           nPara=0;

        } else {

           GetRCFromOff(ParaStart-2,l,e);

           nPara=pLine[l].nPara+1;

           l++;

        }

    }

 

    for (;;l++) {

          if (l >= Linelen) {

          ....

 

ÀÌÀü Äڵ忡¼­´Â 0¹ø° ÁÙ, 0¹ø° ¹®´ÜºÎÅÍ Á¤·ÄÀ» ½ÃÀÛÇß¾úÀ¸³ª ÀÌÁ¦ ¹«Á¶°Ç óÀ½ºÎÅÍ Á¤·ÄÇÏÁö ¾Ê´Â´Ù. nPos°¡ Àü´ÞµÇ¾úÀ¸¸é ÀÌ ¿ÀÇÁ¼ÂÀÌ ¼ÓÇÑ ¹®´ÜÀÇ Ã¹ ÁÙºÎÅÍ Á¤·ÄÇÏ¸é µÈ´Ù. Á¤·Ä °á°ú °°Àº ¹®´Ü¿¡ ¼ÓÇÑ ¾Õ ÁÙÀÌ ¿µÇâÀ» ¹ÞÀ» ¼öµµ ÀÖÀ¸¹Ç·Î nPos À§Ä¡ÀÇ ÁÙºÎÅÍ Á¤·ÄÀ» ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ±× ÁÙÀÌ ¼ÓÇÑ ¹®´ÜÀÇ Ã¹ ÁÙºÎÅÍ Á¤·ÄÇØ¾ß ÇÑ´Ù.

ÀÌ Äڵ忡¼­ °¡Àå Å« ¹®Á¦´Â ÆíÁýÀÌ ÀϾ À§Ä¡ nPos·ÎºÎÅÍ ÀÌ ¹®´ÜÀÇ Ã¹ ÁÙ¹øÈ£¸¦ ±¸ÇÏ´Â °ÍÀÌ´Ù. ¹®´ÜÀÇ ½ÃÀÛ ¿ÀÇÁ¼ÂÀº FindParaStart ÇÔ¼ö·Î ½±°Ô ±¸ÇÒ ¼ö ÀÖÀ¸¹Ç·Î ¹®´ÜÀÇ ½ÃÀÛ ¿ÀÇÁ¼Â ParaStart·ÎºÎÅÍ ÀÌ ÁÙÀÇ ¹øÈ£¸¦ ±¸ÇÏ´Â °ÍÀÌ ¹®Á¦´Ù. ÀÏ´Ü ´ÙÀ½ Äڵ带 »ý°¢ÇÒ ¼ö ÀÖ´Ù.

 

ParaStart=FindParaStart(nPos);

GetRCFromOff(ParaStart,l,e);

 

ParaStart¿ÀÇÁ¼ÂÀ¸·Î GetRCFromOff ÇÔ¼ö¸¦ È£ÃâÇϸé ÁÙ¹øÈ£¸¦ ½±°Ô ±¸ÇÒ ¼ö ÀÖ´Ù. ¿­¹øÈ£´Â ÇÊ¿ä¾øÀ¸¹Ç·Î ´õ¹Ì Àμö e¸¦ ±×³É ´øÁ® Áֱ⸸ Çß´Ù. Áö±Ý±îÁöÀÇ ¾Ë°í¸®Áò´ë·Î¶ó¸é ÀÌ ¹æ¹ýÀº Á¤»óÀûÀ̸ç Áö±ØÈ÷ Àß µ¿ÀÛÇÒ °ÍÀÌ´Ù. ±×·¯³ª ¿©±â¿¡ ¾ÆÁÖ ½É°¢ÇÑ ¹®Á¦°¡ ÀÖÀ¸¸ç ÀÌ ¹®Á¦´Â ÃÖÀûÈ­ÀÇ Å« °É¸²µ¹ÀÌ µÈ´Ù.

UpdateLineInfo ÇÔ¼ö´Â pLine ¹è¿­¿¡ Á¤·Ä °á°ú¸¦ ¸¸µå´Âµ¥ ºÒÇÊ¿äÇÑ Á¤·ÄÀ» ÇÏÁö ¾Ê±â À§ÇØ nPos·ÎºÎÅÍ Á¤·ÄÀ» ½ÃÀÛÇÒ ÁÙÀ» ãÀ¸¸ç À̶§ GetRCFromOff ÇÔ¼ö¸¦ È£ÃâÇß´Ù. ±×·±µ¥ GetRCFromOff ÇÔ¼ö´Â ÁÙ¹øÈ£¸¦ ã±â À§ÇØ pLine ¹è¿­À» ÂüÁ¶ÇÑ´Ù. Áï, pLineÀ» ¸¸µé°í ÀÖ´Â Áß¿¡ pLineÀ» ÂüÁ¶ÇÏ·Á°í ÇÏ´Â ¾ÆÁÖ Æ¯¼öÇÑ »óȲÀÌ µÈ °ÍÀÌ´Ù. GetRCFromOff ÇÔ¼ö°¡ ÂüÁ¶ÇÏ´Â pLineÀº ¹«È¿ÀÌ¸ç °á·ÐÀûÀ¸·Î À§ ÄÚµå´Â Á¦´ë·Î µ¿ÀÛÇÏÁö ¾ÊÀ» »Ó´õ·¯ ¾û¶×ÇÑ ¸Þ¸ð¸®¸¦ °Çµå¸± ¼ö ÀÖ´Â ¾ÆÁÖ À§ÇèÇÑ Äڵ尡 µÇ¾î ¹ö·È´Ù.

±×·¡¼­ UpdateLineInfo ÇÔ¼ö´Â ¹®´Ü óÀ½ÀÇ ÁÙ¹øÈ£¸¦ Á÷Á¢ ±¸ÇÏ´Â ´ë½Å ±× ÀÌÀü ¹®´ÜÀÇ ¸¶Áö¸· ÁÙ¹øÈ£¸¦ ±¸ÇÏ°í ÀÌ ÁÙ¹øÈ£¿¡ 1À» ´õÇØ ¸ñÇ¥·Î ÇÏ´Â Á¤·Ä ½ÃÀÛÁÙÀ» ã¾Ò´Ù. ¹®´Ü óÀ½ ¿ÀÇÁ¼Â¿¡¼­ 2¸¦ »©¸é ÀÌÀü ¹®´ÜÀÇ °³ÇàÄڵ忡 °É¸°´Ù. ÀÌ ¹®´ÜÀº ÆíÁýµÇÁö ¾ÊÀº »óÅ·ΠÀÖÀ¸¹Ç·Î GetRCFromOff¸¦ ¾ÈÀüÇÏ°Ô È£ÃâÇÒ ¼ö ÀÖÀ¸¸ç À̶§ ±¸ÇØÁø ÁÙ¹øÈ£¿¡ 1À» ´õÇÏ¸é ¿øÇÏ´Â ÁÙ¹øÈ£¸¦ ¾ò°Ô µÈ´Ù.

ÀÌÈÄÀÇ Á¤·Ä·çƾÀº Àü¹æ Á¤·ÄÀº »ý·«ÇÏ°í ÀÌ Äڵ忡¼­ ãÀº ½ÃÀÛÁÙ lºÎÅÍ Á¤·ÄÀ» ÇÏ°Ô µÇ¹Ç·Î Á¤·Ä ¼Óµµ°¡ »¡¶óÁø´Ù. ƯÈ÷ ¹®¼­ÀÇ µÞºÎºÐ¿¡ ÀÖÀ»¼ö·Ï ¼Óµµ°³¼± È¿°ú°¡ ±Ø´ëÈ­µÇ´Âµ¥ ÀÌÁ¦ 5MBÀÇ Å« ÆÄÀÏÀ» ¿­¾î ³õÀº »óÅ¿¡¼­µµ ¹®¼­ µÞºÎºÐ¿¡¼­´Â º°´Ù¸¥ ¼Óµµ ÀúÇϾøÀÌ ¹®¼­¸¦ ÆíÁýÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×·¯³ª ¾ÆÁ÷ ¹®¼­ óÀ½¿¡¼­´Â ¿©ÀüÈ÷ ´À¸®´Ù.

ÀÌ·± ½ÄÀ¸·Î Àº±Ù½½Â½ À§ÇèÇÑ Äڵ带 ºñÄÑ ³ª°¬´Âµ¥ º¸´Ù½ÃÇÇ ´ëÃæ º¸±â¿¡´Â ¸Â¾Æ º¸ÀÌÁö¸¸ ±²ÀåÈ÷ ºÒ¾ÈÇÑ ¸ð½ÀÀ» ÇÏ°í ÀÖ´Ù. Äڵ带 º¸¸é ¿ØÁö Çã¾àÇغ¸°í ¹º°¡ ³í¸®»óÀÇ ÇãÁ¡ÀÌ ÀÖÀ» °Í °°´Ù´Â ¿¹°¨ÀÌ µé°Ô ¸¶·ÃÀÌ´Ù. ÀÌ·± Äڵ带 ÀÛ¼ºÇÒ ¶§´Â ÀÌ Äڵ尡 ¾î¶² °æ¿ì¶óµµ ¹®Á¦°¡ ¾ø´Ù´Â Áõ¸íÀ» ÇÏ°í ³Ñ¾î °¡¾ß ÇÏ¸ç ¹®Á¦°¡ ÀÖ´Ù¸é ±× ¹®Á¦¿¡ ´ëÇØ Á¤È®ÇÏ°Ô ´ëóÇϵµ·Ï ¸¸µé¾î¾ß ÇÑ´Ù. ÀÌ Äڵ忡¼­ ±×·± ÈçÀûÀ» ¸î ±ºµ¥ ¹ß°ßÇÒ ¼ö ÀÖ´Ù.

 

¨ç nPos°¡ -1À̸é Àüü Á¤·ÄÀ̹ǷΠÁ¤·Ä ½ÃÀÛÁÙÀº 0ÀÌ°í ¹®´Ü ½ÃÀÛµµ 0ÀÌ´Ù. -1Àº ¿ÀÇÁ¼ÂÀÌ ¾Æ´Ï¶ó ÀÏÁ¾ÀÇ ½ÅÈ£À̹ǷΠ¿¹¿Ü ó¸®ÇØ¾ß ÇÑ´Ù.

¨è ParaStart°¡ 0À̸é Áï, ÀÌ ¹®´ÜÀÌ ¹®¼­ÀÇ Ã¹ ¹®´ÜÀ̸é ÀÌÀü ¹®´ÜÀÌ ¾ø´Ù. À̶§ ParaStart-2ÀÇ ÁÙ¹øÈ£¸¦ Á¶»çÇÏ·Á°í Çß´Ù°¡´Â Å«Àϳ¯ °ÍÀÌ´Ù. ù ¹®´ÜÀ̶ó¸é ´õ °è»êÇÒ ÇÊ¿ä¾øÀÌ Ã³À½ºÎÅÍ Á¤·ÄÇÏ¸é µÈ´Ù.

¨é ParaStart-2°¡ °ú¿¬ ÀÌÀü ¹®´ÜÀÇ ¸¶Áö¸· °³ÇàÄڵ尡 ¸Â´Â°¡¸¦ È®½ÇÈ÷ ÇÏÀÚ. FindParaStart°¡ ¹®´Ü ù ¿ÀÇÁ¼ÂÀ» ã¾Æ ÁÖ¾ú°í ÀÌ ¹®´ÜÀÌ Ã¹ ¹®´ÜÀÌ ¾Æ´Ï¹Ç·Î ParaStart-2´Â ¹Ýµå½Ã Á¸ÀçÇϸç ÀÌÀü ¹®´ÜÀÇ ¸¶Áö¸·ÀÌ ºÐ¸íÇÏ´Ù. ¸¸¾à ÀÌ ºÎºÐ¿¡ ¹®Á¦°¡ ÀÖ´Ù¸é FindParaStart°¡ À߸øµÈ °ÍÀ̹ǷΠÀÌ ÇÔ¼ö¸¦ ¼öÁ¤ÇØ¾ß ÇÑ´Ù.

¨ê ÀÌÀü ¹®´ÜÀÇ Á¤·ÄÁ¤º¸´Â È®½ÇÈ÷ ¹ÏÀ» ¼ö Àִ°¡? ÆíÁýµÇÁö ¾ÊÀº ¹®´ÜÀ̹ǷΠȮ½ÇÈ÷ ¹ÏÀ» ¼ö ÀÖ´Ù.

 

¼³»ç ÀÌ ³í¸®¿¡ ´ëÇØ ¹®Á¦°¡ ¾øÀ½À» È®½ÅÇÑ´Ù ÇÏ´õ¶óµµ ÃÖÀûÈ­ Àüº¸´Ù´Â Äڵ尡 ÈξÀ ´õ º¹ÀâÇØÁ³°í ÀÌÈÄÀÇ È®ÀåÀ̳ª À¯Áö¿¡ ¾î·Á¿òÀÌ ÀÖ°Ô µÈ´Ù. ÀÌ°ÍÀÌ ¹Ù·Î ÃÖÀûÈ­¿¡ ÀÇÇÑ ºÒÀÌÀÍÀÌ¸ç °¡±ÞÀûÀ̸é ÃÖÀûÈ­¸¦ ´Ê°Ô ÇØ¾ß ÇÏ´Â ÀÌÀ¯ÀÌ´Ù.