OSDN Git Service

* BugFix: LibEditText_CursorMove_MoveLeft() ( CursorUp when cursor is position 0 )
authorKoine Yuusuke(koinec) <koinec@users.sourceforge.jp>
Sun, 28 Jun 2015 09:59:03 +0000 (18:59 +0900)
committerKoine Yuusuke(koinec) <koinec@users.sourceforge.jp>
Sun, 28 Jun 2015 09:59:03 +0000 (18:59 +0900)
* BugFix: LibEditText_CursorMove_MoveRight() ( CursorDown when cursor is position limit-right )
* Implementing: Debug-Print Cursor Info

libedittext/Makefile
libedittext/drd64_libedittext_cursormove.c
libedittext/drd64_libedittext_debug.c
libedittext/test_libedittext.c
libedittext/test_libedittext.h
libedittext/test_libedittext_cursorinfo.c
libedittext/test_libedittext_linectrl.c

index b9e3034..a22b8b0 100644 (file)
@@ -89,6 +89,7 @@ TEST_OBJS = \
                test_libedittext_linectrl.o \
                test_libedittext_lineedit.o \
                test_libedittext_cursorinfo.o \
+               test_libedittext_cursorapi.o \
                test_libedittext_system.o
 TEST_HEADER = \
                test_libedittext.h
@@ -168,6 +169,10 @@ test_libedittext_cursorinfo.o: test_libedittext_cursorinfo.c $(HEADER) $(TEST_HE
        $(CC) -c -o test_libedittext_cursorinfo.o \
                                $(FLAGS_DEBUG) $(FLAGS_COMPILE) $(TEST_FLAGS_COMPILE) \
                                test_libedittext_cursorinfo.c
+test_libedittext_cursorapi.o: test_libedittext_cursorapi.c $(HEADER) $(TEST_HEADER)
+       $(CC) -c -o test_libedittext_cursorapi.o \
+                               $(FLAGS_DEBUG) $(FLAGS_COMPILE) $(TEST_FLAGS_COMPILE) \
+                               test_libedittext_cursorapi.c
 
 $(TEST_TARGET): $(TEST_OBJS) $(OBJS) $(TARGET) $(LIBRARY)
        $(CC) -o $(TEST_TARGET) $(FLAGS_DEBUG) $(OBJS) $(TEST_OBJS) $(TARGET) \
index bd8abad..b66b9a8 100644 (file)
@@ -88,8 +88,9 @@ int
        LibEditText_CursorMove_MoveRight(
                        LibEditText_TextInfo    *p_tinfo, 
                        LibEditText_Cursor              *p_cursor,
-                       DWord                                   dw_len )
+                       DWord                                   dw_size )
 {
+       DWord                                   dw_len;
        LibEditText_LineInfo    *p_line;
 
        assert( NULL != p_tinfo );
@@ -98,9 +99,25 @@ int
        p_line  = LINFO(p_tinfo, p_cursor->dw_lineid);
        assert( NULL != p_line );
 
-       p_cursor->dw_pos
-                       = ((p_cursor->dw_pos + dw_len + 1 < p_line->dw_strlen)
-                                               ? (p_cursor->dw_pos + dw_len) : (p_line->dw_strlen - 1));
+       while( 0 < dw_size )    {
+               dw_len  = p_line->dw_strlen - p_cursor->dw_pos;
+               if( dw_len <= dw_size )         {
+                       if( p_cursor->dw_line + 1 == p_tinfo->dw_maxline )      {
+                               p_cursor->dw_pos        = ((0 < p_line->dw_strlen) ? (p_line->dw_strlen - 1) : 0 );
+                               break;
+                       }
+                       else    {
+                               LibEditText_CursorMove_MoveDown( p_tinfo, p_cursor, 1 );
+                               p_cursor->dw_pos        = 0;
+                               dw_size -= dw_len;
+                               p_line  = LINFO(p_tinfo, p_cursor->dw_lineid);
+                       }
+               }
+               else    {
+                       p_cursor->dw_pos        += dw_size;
+                       dw_size                         = 0;
+               } 
+       }
 
        return 0x00;
 }
@@ -113,13 +130,35 @@ int
        LibEditText_CursorMove_MoveLeft(
                        LibEditText_TextInfo    *p_tinfo, 
                        LibEditText_Cursor              *p_cursor,
-                       DWord                                   dw_len )
+                       DWord                                   dw_size )
 {
+       DWord   dw_len;
+       LibEditText_LineInfo    *p_line;
+
        assert( NULL != p_tinfo );
        assert( NULL != p_cursor );
+
+       while( 0 < dw_size )    {
+               dw_len  = p_cursor->dw_pos;
        
-       p_cursor->dw_pos
-                       = ((p_cursor->dw_pos >= dw_len) ? (p_cursor->dw_pos - dw_len) : 0);
+               if( dw_len < dw_size )  {
+                       if( 0 == p_cursor->dw_line )    {
+                               p_cursor->dw_pos        = 0;
+                               break;
+                       }
+
+                       LibEditText_CursorMove_MoveUp( p_tinfo, p_cursor, 1 );
+                       dw_size         -= (dw_len + 1);
+                       p_line  = LINFO(p_tinfo, p_cursor->dw_lineid);
+                       assert( NULL != p_line );
+                       assert( 0 < p_line->dw_strlen );
+                       p_cursor->dw_pos        = p_line->dw_strlen - 1;
+               }
+               else    {
+                       p_cursor->dw_pos        -= dw_size;
+                       dw_size                         = 0;
+               }
+       }
 
        return 0x00;
 }
index 21955bd..866b81b 100644 (file)
@@ -40,6 +40,56 @@ Comment:
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
 int
+       LibEditText_Debug_Cursor(
+               LibEditText_TextInfo            *p_tinfo,
+               Byte b_putflag )
+{
+       DWord   dw_cnt;
+       LibEditText_Cursor      *p_cursor;
+       
+       if( 0x00 != b_putflag )         {
+               puts("[5] Cursor Info ---2----+----3----+----4----+----5----+----6----+----7----+----8");
+       }
+
+       for( dw_cnt = 0; dw_cnt < DRD64_LIBEDITTEXT_DEFAULT_MAX_CURSORS; dw_cnt++ )     {
+               p_cursor        = &(p_tinfo->t_cursor[ dw_cnt ]);
+
+               if( 0 == p_cursor->dw_rangelines )      {
+                       if( 0x00 != b_putflag )
+                               { printf( "  Cursor %u: Not Alloced.\n", dw_cnt ); }
+                       continue;
+               }
+
+               if( 0x00 != b_putflag )         {
+                       printf( "  Cursor %u: (RangeLines: %u, Updates: %s) \n",
+                                               dw_cnt, p_cursor->dw_rangelines,
+                                               ((0x00 != p_cursor->b_update) ? "YES" : "NO") );
+
+                       if( 1 < p_cursor->dw_rangelines )       {
+                               printf("    Start : [%5u] (ID:%u)\n",
+                                               p_cursor->dw_start_line, p_cursor->dw_start_lineid );
+                       }
+
+                       printf("    Center: [%5u:%3u] (ID:%u)\n",
+                                               p_cursor->dw_line, p_cursor->dw_pos, p_cursor->dw_lineid );
+
+                       if( 1 < p_cursor->dw_rangelines )       {
+                               printf("    End   : [%5u] (ID:%u)\n",
+                                               p_cursor->dw_end_line, p_cursor->dw_end_lineid );
+                       }
+               }
+
+               
+               
+       }
+
+       return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+int
        LibEditText_Debug_EmptyChain(
                LibEditText_TextInfo            *p_tinfo,
                Byte b_putflag )
@@ -176,7 +226,7 @@ int
 
        if( 0x02 > b_putlevel )         { return 0x00; }
        
-       puts("[5] Text Data *********** ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8");
+       puts("[6] Text Data *********** ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8");
 
        p_before        = NULL;
        p_line          = LINFO(p_tinfo, p_tinfo->dw_line_start);
@@ -247,17 +297,20 @@ int
        }
 
        i_result        = LibEditText_Debug_SortChain( p_tinfo, b_putflag );
-       if( 0x00 != i_result )          { return -0x03; }
+       if( 0x00 != i_result )          { return -0x3000 + i_result; }
 
        i_result        = LibEditText_Debug_EmptyChain( p_tinfo, b_putflag );
-       if( 0x00 != i_result )          { return -0x04; }
+       if( 0x00 != i_result )          { return -0x4000 + i_result; }
 
        i_result        = LibEditText_Debug_DebugSection( p_tinfo, b_putflag );
        if( 0x00 != i_result )          { return -0x5000 + i_result; }
 
-       i_result        = LibEditText_Debug_DumpTextData( p_tinfo, b_putflag );
+       i_result        = LibEditText_Debug_Cursor( p_tinfo, b_putflag );
        if( 0x00 != i_result )          { return -0x6000 + i_result; }
 
+       i_result        = LibEditText_Debug_DumpTextData( p_tinfo, b_putflag );
+       if( 0x00 != i_result )          { return -0x7000 + i_result; }
+
 
        return 0x00;
 }
index 56c439c..4c11430 100644 (file)
@@ -54,6 +54,7 @@ int
        Test_LibEditText_LineCtrl();
        Test_LibEditText_LineEdit();
        Test_LibEditText_CursorInfo();
+       Test_LibEditText_CursorAPI();
 
        CU_basic_run_tests();
        CU_cleanup_registry();
index 1764a14..675102b 100644 (file)
@@ -89,6 +89,14 @@ DRD64_TEST_LIBEDITTEXT_FILE_EXTERN int Test_LibEditText_File( void );
 #endif
 DRD64_TEST_LIBEDITTEXT_CURSORINFO_EXTERN int Test_LibEditText_CursorInfo( void );
 
+/*---------------------------------------------------------------------*/
+#ifdef DRD64_SRC_TEST_LIBEDITTEXT_CURSORAPI
+       #define DRD64_TEST_LIBEDITTEXT_CURSORAPI_EXTERN
+#else
+       #define DRD64_TEST_LIBEDITTEXT_CURSORAPI_EXTERN extern
+#endif
+DRD64_TEST_LIBEDITTEXT_CURSORAPI_EXTERN int Test_LibEditText_CursorAPI( void );
+
 
 #endif /* DRD64_HEADER_XXX */
 
index 7a36bae..642f75b 100644 (file)
@@ -56,9 +56,15 @@ void Test_LibEditText_API_InitFreeCursor_test00_001(void)
        i_curid = LibEditText_AllocCursor( i_tinfoid, 1 );
        CU_ASSERT( 0x00 <= i_curid );
 
+       i_result        = LibEditText_Debug_DebugTextInfo( i_tinfoid, 0x01, "InitFreeCursor (Init) - test 00-001");
+       CU_ASSERT( 0x00 == i_result );
+
        i_result        = LibEditText_FreeCursor( i_tinfoid, i_curid );
        CU_ASSERT( 0x00 == i_result );
 
+       i_result        = LibEditText_Debug_DebugTextInfo( i_tinfoid, 0x01, "InitFreeCursor (Free)- test 00-001");
+       CU_ASSERT( 0x00 == i_result );
+
        i_result        = LibEditText_Term();
        CU_ASSERT( 0x00 == i_result );
 
@@ -91,6 +97,10 @@ void Test_LibEditText_API_InitFreeCursor_test00_002(void)
        i_curid[4]      = LibEditText_AllocCursor( i_tinfoid, 5 );
        CU_ASSERT( 0x00 > i_curid[4] );
 
+       i_result        = LibEditText_Debug_DebugTextInfo( i_tinfoid, 0x01, "InitFreeCursor (Init) - test 00-002");
+       CU_ASSERT( 0x00 == i_result );
+
+
        i_result        = LibEditText_FreeCursor( i_tinfoid, i_curid[3] );
        CU_ASSERT( 0x00 == i_result );
        i_result        = LibEditText_FreeCursor( i_tinfoid, i_curid[2] );
@@ -100,6 +110,9 @@ void Test_LibEditText_API_InitFreeCursor_test00_002(void)
        i_result        = LibEditText_FreeCursor( i_tinfoid, i_curid[0] );
        CU_ASSERT( 0x00 == i_result );
 
+       i_result        = LibEditText_Debug_DebugTextInfo( i_tinfoid, 0x01, "InitFreeCursor (Free)- test 00-002");
+       CU_ASSERT( 0x00 == i_result );
+
        i_result        = LibEditText_Term();
        CU_ASSERT( 0x00 == i_result );
 
index ba273be..f1878d0 100644 (file)
@@ -144,7 +144,7 @@ void Test_LibEditText_LineCtrl_PushLine_test00_001(void)
        CU_ASSERT( INVALID_LINE != dw_line );
 
        i_result        = LibEditText_Debug_DebugTextInfo(
-                                               i_tinfoid, DEBUG_TEXTINFO_OUTPUT, "LineCtrl_PushLine 00-001" );
+                                               i_tinfoid, /* DEBUG_TEXTINFO_OUTPUT */ 0x01, "LineCtrl_PushLine 00-001" );
        CU_ASSERT( 0x00 == i_result );
 
        i_result        = LibEditText_Term();
@@ -197,7 +197,7 @@ void Test_LibEditText_LineCtrl_AddLine_test00_001(void)
        CU_ASSERT( INVALID_LINE != dw_line );
 
        i_result        = LibEditText_Debug_DebugTextInfo(
-                                               i_tinfoid, DEBUG_TEXTINFO_OUTPUT, "LineCtrl_AddLine 00-001" );
+                                               i_tinfoid, /* DEBUG_TEXTINFO_OUTPUT */ 0x01, "LineCtrl_AddLine 00-001" );
        CU_ASSERT( 0x00 == i_result );
 
        i_result        = LibEditText_Term();