OSDN Git Service

* Implement: API LibEditText_JoinLine_toLine (None Tested)
authorKoine Yuusuke(koinec) <koinec@users.sourceforge.jp>
Thu, 21 May 2015 19:18:04 +0000 (04:18 +0900)
committerKoine Yuusuke(koinec) <koinec@users.sourceforge.jp>
Thu, 21 May 2015 19:18:04 +0000 (04:18 +0900)
include/libedittext.h
libedittext/drd64_libedittext_linectrl.c
libedittext/drd64_libedittext_lineedit.c
libedittext/drd64_libedittext_lineedit.h

index 1694d39..4c32be7 100644 (file)
@@ -70,7 +70,12 @@ LIBEDITTEXT_API_FILE
        #define LIBEDITTEXT_API_LINECTRL        extern
 #endif
 LIBEDITTEXT_API_LINECTRL
-       int LibEditText_InsertLine_toLine( int i_tinfoid, DWord dw_line, char *pstr_text, DWord dw_length );
+       int LibEditText_DeleteLine_toLine( int i_tinfoid, DWord dw_line );
+LIBEDITTEXT_API_LINECTRL
+       int LibEditText_JoinLine_toLine( int i_tinfoid, DWord dw_line );
+LIBEDITTEXT_API_LINECTRL
+       int LibEditText_InsertLine_toLine(
+                       int i_tinfoid, DWord dw_line, char *pstr_text, DWord dw_length );
 LIBEDITTEXT_API_LINECTRL
        int LibEditText_AppendLine( int i_tinfoid, char *pstr_text, DWord dw_length );
 
@@ -79,9 +84,6 @@ LIBEDITTEXT_API_LINECTRL
 #else
        #define LIBEDITTEXT_API_LINEEDIT        extern
 #endif
-LIBEDITTEXT_API_LINECTRL
-       int LibEditText_DeleteLine_toLine(
-                       int i_tinfoid, DWord dw_line );
 LIBEDITTEXT_API_LINEEDIT
        int LibEditText_InsertChar_toLine(
                        int i_tinfoid, DWord dw_line, DWord dw_pos, Byte b_char );
index 8d413f6..a2f63cc 100644 (file)
@@ -124,6 +124,83 @@ int
 ----------------------------------------------------------------------*/
 LIBEDITTEXT_LINECTRL_EXTERN
 int
+       LibEditText_LineCtrl_JoinLine(
+               LibEditText_TextInfo    *p_tinfo,
+               LibEditText_LineInfo    *p_ldest,
+               DWord   dw_line )
+{
+       int             i_result;
+       Byte    *pb_dest;
+       Byte    *pb_src;
+       DWord   dw_linelen;
+       LibEditText_LineInfo    *p_lsrc;
+
+       // Check 
+       assert( NULL != p_tinfo );
+       assert( NULL != p_ldest );
+
+       if( p_tinfo->dw_line_end == p_ldest->dw_id )
+               { return 0x01; }
+
+       p_lsrc  = LINFO(p_tinfo, p_ldest->dw_next);
+       assert( NULL != p_lsrc );
+
+       // Merge Memory data
+       if((p_ldest->dw_strlen + p_lsrc->dw_strlen + 5) > p_ldest->dw_linelen )         {
+               dw_linelen      = p_ldest->dw_strlen + p_lsrc->dw_strlen
+                                               + DRD64_LIBEDITTEXT_DEFAULT_RESERVEBUF_INLINE;
+               i_result        = LibEditText_LineInfo_ExpandLineBuffer(
+                                                               p_tinfo, p_ldest, dw_linelen );
+               if( 0x00 != i_result )  { return -0x02; }
+       }
+
+       pb_dest = p_tinfo->pb_text + p_ldest->dw_start + p_ldest->dw_strlen - 1;
+       pb_src  = p_tinfo->pb_text + p_lsrc->dw_start;
+
+       assert( '\n' == *pb_dest );
+
+       memcpy( pb_dest, pb_src, p_lsrc->dw_strlen );
+       *(pb_dest + p_lsrc->dw_strlen) = '\0';
+
+       p_ldest->dw_strlen      = p_ldest->dw_strlen - 1 + p_lsrc->dw_strlen;
+
+       // delete line
+       i_result        = LibEditText_LineCtrl_DeleteLine( p_tinfo, p_lsrc, dw_line + 1 );
+       if( 0x00 != i_result )  { return -0x02; }
+       
+       return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBEDITTEXT_API_LINECTRL
+int
+       LibEditText_JoinLine_toLine(
+               int             i_tinfoid,
+               DWord   dw_line )
+{
+       int                                             i_result;
+       LibEditText_TextInfo    *p_tinfo;
+       LibEditText_LineInfo    *p_line;
+       
+       if( 0 > i_tinfoid )             { return -0x01; }
+       p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
+       if( NULL == p_tinfo )   { return -0x02; }
+
+       p_line  = LibEditText_Section_SearchLine( p_tinfo, dw_line );
+       assert( NULL != p_line );
+       
+       i_result        = LibEditText_LineCtrl_JoinLine( p_tinfo, p_line, dw_line );
+
+       return i_result;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBEDITTEXT_LINECTRL_EXTERN
+int
        LibEditText_LineCtrl_InsertLine(
                LibEditText_TextInfo    *p_tinfo,
                DWord   dw_line,
index 95195fa..e1f9dfd 100644 (file)
@@ -51,6 +51,7 @@ int
        LibEditText_LineEdit_DeleteString(
                LibEditText_TextInfo    *p_tinfo,
                LibEditText_LineInfo    *p_line,
+               DWord   dw_line,
                DWord   dw_pos,
                DWord   dw_len )
 {
@@ -70,7 +71,7 @@ int
 
        if( 0 == p_line->dw_strlen )    {
                // Delete Line ---
-
+               i_result        = LibEditText_LineCtrl_DeleteLine( p_tinfo, p_line, dw_line );
                goto    goto_LibEditText_LineEdit_DeleteString_post;
        }
 
@@ -80,7 +81,7 @@ int
                { goto  goto_LibEditText_LineEdit_DeleteString_post; }
 
        // Merge line --- 
-
+       i_result        = LibEditText_LineCtrl_JoinLine( p_tinfo, p_line, dw_line );
 
 goto_LibEditText_LineEdit_DeleteString_post:
        return i_result;
@@ -115,7 +116,7 @@ int
        if( p_line->dw_strlen < dw_pos + dw_len )       { return -0x04; }
 
        i_result        = LibEditText_LineEdit_DeleteString(
-                                               p_tinfo, p_line, dw_pos, dw_len );
+                                               p_tinfo, p_line, dw_line, dw_pos, dw_len );
 
        return i_result;
 }
index 3d4bc34..f293856 100644 (file)
@@ -50,6 +50,10 @@ Comment:
 #endif
 
 LIBEDITTEXT_LINEEDIT_EXTERN
+       int LibEditText_LineEdit_DeleteString(
+               LibEditText_TextInfo *p_tinfo, LibEditText_LineInfo *p_line,
+               DWord dw_line, DWord dw_pos, DWord dw_len );
+LIBEDITTEXT_LINEEDIT_EXTERN
        int LibEditText_LineEdit_InsertString(
                LibEditText_TextInfo *p_tinfo,
                LibEditText_LineInfo *p_line,