OSDN Git Service

* Implement: Adjust Section when Search-lines Proc.
authorKoine Yuusuke(koinec) <koinec@users.sourceforge.jp>
Sat, 9 May 2015 02:39:28 +0000 (11:39 +0900)
committerKoine Yuusuke(koinec) <koinec@users.sourceforge.jp>
Sat, 9 May 2015 02:39:28 +0000 (11:39 +0900)
libedittext/drd64_libedittext_section.c

index b738f06..0593f48 100644 (file)
@@ -123,25 +123,37 @@ DWord
 void
        LibEditText_Section_ReviewSection(
                        LibEditText_TextInfo    *p_tinfo,
-                       DWord   dw_sec_low,
-                       DWord   dw_sec_high )
+                       DWord   dw_secid_min,
+                       DWord   dw_secid_high )
 {
        DWord   dw_cnt;
-       DWord   dw_propsecid_now;
-       DWord   dw_propsecid_next;
        LibEditText_LineSection *p_sec_now;
-       LibEditText_LineSection *p_sec_next;
+       LibEditText_LineSection *p_sec_min;
+       LibEditText_LineSection *p_sec_high;
 
-       for( dw_cnt = 0; dw_cnt < p_tinfo->dw_sections - 1; dw_cnt++ )  {
-               p_sec_now       = SECINFO(p_tinfo, dw_cnt);
-               p_sec_next      = SECINFO(p_tinfo, dw_cnt + 1);
+       p_sec_min       = SECINFO(p_tinfo, dw_secid_min);
+       p_sec_high      = SECINFO(p_tinfo, dw_secid_high);
 
-               if( p_sec_now->dw_line > p_sec_next->dw_line )  {
-                       dw_propsecid_now        = CALC_SECTION2LINE(p_tinfo, dw_cnt);
-                       dw_propsecid_next       = CALC_SECTION2LINE(p_tinfo, dw_cnt+1);
+       for( dw_cnt = 0; dw_cnt < p_tinfo->dw_sections - 1; dw_cnt++ )  {
+               if( dw_cnt < dw_secid_min )     {
+                       p_sec_now       = SECINFO(p_tinfo, dw_cnt);
 
-                       
+                       if( p_sec_min->dw_line < p_sec_now->dw_line )   {
+                               p_sec_now->dw_line              = p_sec_min->dw_line;
+                               p_sec_now->dw_linfoid   = p_sec_min->dw_linfoid;
+                       }
+               }
+               else if( dw_cnt > dw_secid_high )       {
+                       p_sec_now       = SECINFO(p_tinfo, dw_cnt);
+
+                       if( p_sec_high->dw_line > p_sec_now->dw_line )  {
+                               p_sec_now->dw_line              = p_sec_high->dw_line;
+                               p_sec_now->dw_linfoid   = p_sec_high->dw_linfoid;
+                       }
+                       else
+                               { return; }
                }
+
        }
 
        return;
@@ -159,6 +171,7 @@ LibEditText_LineInfo        *
        int             i_move  = 0;
        DWord   dw_secid;
        DWord   dw_tmpsecid;
+       DWord   dw_minsecid;
        DWord   dw_line;
        DWord   dw_secline;
        DWord   dw_adjustline;
@@ -189,6 +202,7 @@ LibEditText_LineInfo        *
        p_line          = LINFO(p_tinfo, p_sec->dw_linfoid);
        dw_secline      = CALC_SECTION2LINE(p_tinfo, dw_secid);
        dw_adjustline   = dw_line + (p_tinfo->dw_sect_steps - (dw_line % p_tinfo->dw_sect_steps));
+       dw_minsecid     = dw_secid;
 
        while( NULL != p_line ) {
                /* Adjust Section-Line to Proper-Line */
@@ -203,6 +217,7 @@ LibEditText_LineInfo        *
                        p_tmpsec->dw_line               = dw_line;
                        p_tmpsec->dw_linfoid    = p_line->dw_id;
                        dw_adjustline                   += p_tinfo->dw_sect_steps;
+                       if( dw_tmpsecid < dw_minsecid ) { dw_minsecid   = dw_tmpsecid; }
                }
 
                if( dw_targline == dw_line )    { break; }
@@ -218,6 +233,8 @@ LibEditText_LineInfo        *
                p_sec->dw_linfoid       = p_line->dw_id;
        }
 
+       LibEditText_Section_ReviewSection( p_tinfo, dw_minsecid, dw_secid );
+
 goto_LibEditText_Section_SearchLine_post:
        return p_line;
 }