OSDN Git Service

* Implemented: LibEditText_BackFindBeforeString() API and surround functions.
authorKoine Yuusuke(koinec) <koinec@users.sourceforge.jp>
Mon, 10 Aug 2015 03:49:52 +0000 (12:49 +0900)
committerKoine Yuusuke(koinec) <koinec@users.sourceforge.jp>
Mon, 10 Aug 2015 03:49:52 +0000 (12:49 +0900)
include/libedittext.h
libedittext/drd64_libedittext_cursorapi_find.c
libedittext/drd64_libedittext_cursorfind.c
libedittext/drd64_libedittext_cursorfind.h
libedittext/test_libedittext_cursorfind.c

index db26e16..d1f062e 100644 (file)
@@ -190,7 +190,8 @@ LIBEDITTEXT_API_CURSORAPI_FIND
 LIBEDITTEXT_API_CURSORAPI_FIND
        int LibEditText_BackFindString(
                        int i_tinfoid, int i_curid, char *pstr_regex, DWord dw_regexlen, DWord *pdw_len );
-
+LIBEDITTEXT_API_CURSORAPI_FIND
+       int LibEditText_BackFindBeforeString( int i_tinfoid, int i_curid, DWord *pdw_len );
 
 #ifdef DRD64_SRC_LIBEDITTEXT_UNDOEDIT
        #define LIBEDITTEXT_API_UNDOEDIT
index 0ec1511..5ca37f9 100644 (file)
@@ -156,4 +156,39 @@ int
 }
 
 
+/***********************************************************************
+***********************************************************************/
+LIBEDITTEXT_API_CURSORAPI_FIND
+int
+       LibEditText_BackFindBeforeString(
+                       int             i_tinfoid,
+                       int             i_curid,
+                       DWord   *pdw_len )
+{
+       int             i_result;
+       LibEditText_TextInfo    *p_tinfo;
+       LibEditText_Cursor              *p_cursor;
+
+       p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
+       if( NULL == p_tinfo )   {
+               return -0x01;
+       }
+
+       p_cursor        = LibEditText_CursorInfo_GetCursor( p_tinfo, i_curid );
+       if( NULL == p_cursor )  {
+               return -0x02;
+       }
+
+       i_result        = LibEditText_CursorFind_BackFindBeforeString( p_tinfo, p_cursor );
+       if( 0x00 > i_result )   {
+               return i_result;
+       }
+
+       if(( LIBEDITTEXT_RET_FINDNOMATCH != i_result ) && ( NULL != pdw_len ))
+               { *pdw_len      = p_cursor->dw_find_prevpos_len; }
+
+       return  i_result;
+}
+
+
 /* EOF of drd64_.c ----------------------------------- */
index 11d8815..8855cf4 100644 (file)
@@ -43,14 +43,6 @@ Comment:
 
 
 /*----------------------------------------------------------------------
-FindString
-FindNext
-BackFindString
-BackFindNext
-----------------------------------------------------------------------*/
-
-
-/*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
 int
        LibEditText_CursorFind_SetRegexString(
@@ -548,6 +540,61 @@ int
 ----------------------------------------------------------------------*/
 LIBEDITTEXT_CURSORFIND_EXTERN
 int
+       LibEditText_CursorFind_BackFindBeforeString(
+               LibEditText_TextInfo    *p_tinfo, 
+               LibEditText_Cursor              *p_cursor )
+{
+       int             i_retfind;
+       int             i_result;
+       DWord   dw_pstart;
+       DWord   dw_len;
+       DWord   dw_line;
+       DWord   dw_findlid;
+       LibEditText_LineInfo    *p_line;
+
+       assert( NULL != p_tinfo );
+       assert( NULL != p_cursor );
+
+       // Check PrevFind Data ---
+       if(( '\0' == p_cursor->str_regstr[0] ) || ( 0 == p_cursor->dw_find_prevpos_len ))
+               { return -0x01; }
+
+       // Exec Find ---
+       dw_pstart       = (( 0 < p_cursor->dw_pos ) ? (p_cursor->dw_pos - 1) : 0 );
+       i_retfind       = LibEditText_CursorFind_ExecBackFindString(
+                                                       p_tinfo, p_cursor, &dw_findlid, &dw_line, &dw_pstart, &dw_len );
+       if( 0x00 > i_retfind )  {
+               return i_retfind;
+       }
+       if( LIBEDITTEXT_RET_FINDNOMATCH == i_retfind )  { return i_retfind; }
+
+       p_line  = LINFO(p_tinfo, dw_findlid);
+       assert( NULL != p_line );
+
+       i_result        = LibEditText_CursorInfo_LocateCursor( p_tinfo, p_cursor, p_line, dw_line );
+       if( 0x00 != i_result )  {
+               LibEditText_CursorFind_FreeFindData( p_cursor );
+               return -0x20;
+       }
+
+       i_result        = LibEditText_CursorMove_SetPosition( p_tinfo, p_cursor, dw_pstart );
+       if( 0x00 != i_result )  {
+               LibEditText_CursorFind_FreeFindData( p_cursor );
+               return -0x21;
+       }
+       
+       p_cursor->dw_find_prevpos_start = dw_pstart;
+       p_cursor->dw_find_prevpos_len   = dw_len;
+       p_cursor->dw_find_prevlineid    = dw_findlid;
+
+       return i_retfind;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBEDITTEXT_CURSORFIND_EXTERN
+int
        LibEditText_CursorFind_FreeFindData(
                LibEditText_Cursor              *p_cursor )
 {
index 02510f1..a3e997a 100644 (file)
@@ -60,6 +60,9 @@ LIBEDITTEXT_CURSORFIND_EXTERN
                                LibEditText_TextInfo *p_tinfo, LibEditText_Cursor *p_cursor,
                                char *pstr_regex, DWord dw_regexlen, Byte b_flagfind );
 LIBEDITTEXT_CURSORFIND_EXTERN
+       int LibEditText_CursorFind_BackFindBeforeString(
+                               LibEditText_TextInfo *p_tinfo, LibEditText_Cursor *p_cursor );
+LIBEDITTEXT_CURSORFIND_EXTERN
        int LibEditText_CursorFind_FreeFindData( LibEditText_Cursor *p_cursor );
 
 
index ba05a9a..3e4ec5c 100644 (file)
@@ -46,7 +46,7 @@ void Test_LibEditText_API_CursorAPI_FindString_test00_001(void)
        int             i_result;
        int             i_tinfoid;
        int             i_curid;
-       char    *pstr_value;
+       const char      *pstr_value;
        DWord   dw_line;
        DWord   dw_pos;
        DWord   dw_len;
@@ -126,7 +126,7 @@ void Test_LibEditText_API_CursorAPI_FindNextString_test00_001(void)
        int             i_retfind;
        int             i_tinfoid;
        int             i_curid;
-       char    *pstr_value;
+       const char      *pstr_value;
        DWord   dw_line;
        DWord   dw_pos;
        DWord   dw_len;
@@ -185,7 +185,7 @@ void Test_LibEditText_API_CursorAPI_BackFindString_test00_001(void)
        int             i_retfind;
        int             i_tinfoid;
        int             i_curid;
-       char    *pstr_value;
+       const char      *pstr_value;
        DWord   dw_line;
        DWord   dw_pos;
        DWord   dw_len;
@@ -244,17 +244,63 @@ void Test_LibEditText_API_CursorAPI_BackFindString_test00_001(void)
        CU_ASSERT( 0x00 == i_result );
        pstr_value      = LibEditText_GetCursorLineString( i_tinfoid, i_curid, NULL );
        printf("  Find 05: [%u:%u(%u)] %s", dw_line, dw_pos, dw_len, pstr_value );
-/*     
+
+       i_result        = LibEditText_FreeCursor( i_tinfoid, i_curid );
+       CU_ASSERT( 0x00 == i_result );
+
+       i_result        = LibEditText_CloseFile( i_tinfoid );
+       CU_ASSERT( 0x00 == i_result );
+
+       i_result        = LibEditText_Term();
+       CU_ASSERT( 0x00 == i_result );
+       
+       return;
+}
+
+
+/* LibEditText_BackFindBeforeString ***********************************/
+/*--------------------------------------------------------------------*/
+void Test_LibEditText_API_CursorAPI_BackFindBeforeString_test00_001(void)
+{
+       int             i_result;
+       int             i_retfind;
+       int             i_tinfoid;
+       int             i_curid;
+       const char      *pstr_value;
+       DWord   dw_line;
+       DWord   dw_pos;
+       DWord   dw_len;
+
+       i_result        = LibEditText_Init();
+       CU_ASSERT( 0x00 == i_result );
+       
+       i_tinfoid       = LibEditText_OpenTextFile("./testdata", "drcc_testfile.c");
+       CU_ASSERT( 0x00 <= i_tinfoid );
+
+       i_curid         = LibEditText_AllocCursor( i_tinfoid, 13 );
+       CU_ASSERT( 0x00 <= i_curid );
+
+       i_result        = LibEditText_Debug_DebugTextInfo(
+                                               i_tinfoid, 0x01, "API BackFindString test00_001" );
+       CU_ASSERT( 0x00 == i_result );
+
+       puts("[A] Find Result ---2----+----3----+----4----+----5----+----6----+----7----+----8");
+
+       // Find 01 ---
+       i_retfind       = LibEditText_BackFindString( i_tinfoid, i_curid, "CT", 2, &dw_len );
+       CU_ASSERT( LIBEDITTEXT_RET_FINDMATCH_ROUND == i_retfind );
+       i_retfind       = LIBEDITTEXT_RET_FINDMATCH;
+
        while( LIBEDITTEXT_RET_FINDMATCH == i_retfind ) {
                i_result        = LibEditText_GetCursorPosition( i_tinfoid, i_curid, &dw_line, &dw_pos );
                CU_ASSERT( 0x00 == i_result );
                pstr_value      = LibEditText_GetCursorLineString( i_tinfoid, i_curid, NULL );
-               printf("  FindNext: [%u:%u(%u)] %s", dw_line, dw_pos, dw_len, pstr_value );
+               printf("  BackFindBefore: [%u:%u(%u)] %s", dw_line, dw_pos, dw_len, pstr_value );
 
-               i_retfind       = LibEditText_FindNextString( i_tinfoid, i_curid, &dw_len );
+               i_retfind       = LibEditText_BackFindBeforeString( i_tinfoid, i_curid, &dw_len );
                CU_ASSERT( 0x00 <= i_retfind );
        }
-*/
+
        i_result        = LibEditText_FreeCursor( i_tinfoid, i_curid );
        CU_ASSERT( 0x00 == i_result );
 
@@ -286,6 +332,8 @@ int
 
        CU_add_test( pt_edittext, "EditText_CursorAPI_BackFindString_test00_001",
                                                                 Test_LibEditText_API_CursorAPI_BackFindString_test00_001 );
+       CU_add_test( pt_edittext, "EditText_CursorAPI_BackFindBeforeString_test00_001",
+                                                                Test_LibEditText_API_CursorAPI_BackFindBeforeString_test00_001 );
 
        return 0x00;
 }