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
}
+/***********************************************************************
+***********************************************************************/
+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 ----------------------------------- */
/*----------------------------------------------------------------------
-FindString
-FindNext
-BackFindString
-BackFindNext
-----------------------------------------------------------------------*/
-
-
-/*----------------------------------------------------------------------
----------------------------------------------------------------------*/
int
LibEditText_CursorFind_SetRegexString(
----------------------------------------------------------------------*/
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 )
{
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 );
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;
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;
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;
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 );
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;
}