jaehyun pushed a commit to branch master.

http://git.enlightenment.org/tools/enventor.git/commit/?id=e5aa15a1df0a863ae6f63f4feea00566f441067f

commit e5aa15a1df0a863ae6f63f4feea00566f441067f
Author: Jaehyun Cho <jae_hyun....@samsung.com>
Date:   Wed Feb 17 19:13:44 2016 +0900

    indent: Fix to insert a new line after comment line
    
    <Test Case>
    1. Copy the following in basic.edc.
    "/* TODO: Please replace embedded image files to your application image 
files. */
    images {"
    2. Paste
    
    <Test Result>
    Previously, the new line between line comment and code disappears.
    Now, the new line between line comment and code is preserved.
---
 src/lib/indent.c | 123 +++++++++++++++++++++++++++++++++++++++----------------
 1 file changed, 87 insertions(+), 36 deletions(-)

diff --git a/src/lib/indent.c b/src/lib/indent.c
index 0c6b370..7b1d125 100644
--- a/src/lib/indent.c
+++ b/src/lib/indent.c
@@ -257,9 +257,15 @@ indent_text_auto_format(indent_data *id EINA_UNUSED,
    Eina_Strbuf *buf = eina_strbuf_new();
 
    Eina_Bool keep_lexem_start_pos = EINA_FALSE;
+   Eina_Bool single_comment_found = EINA_FALSE;
+   Eina_Bool multi_comment_found = EINA_FALSE;
 
    int tb_cur_pos = 0;
-
+   /* Create a list of code line strings from inserted string.
+      Each code line string is generated based on lexeme.
+      Here, lexeme starts with nonspace character and ends with the followings.
+      '{', '}', ';', "//", "*\/"
+    */
    while (utf8_ptr < utf8_end)
      {
         if (*utf8_ptr != ' ' && *utf8_ptr != '\t' &&  *utf8_ptr != '\n' )
@@ -267,57 +273,99 @@ indent_text_auto_format(indent_data *id EINA_UNUSED,
              //Renew the start position of lexeme.
              if (!keep_lexem_start_pos) utf8_lexem = utf8_ptr;
 
+             //Check line comment.
+             if (*utf8_ptr == '/' && utf8_ptr + 1 < utf8_end)
+               {
+                  //Start of single line comment.
+                  if (*(utf8_ptr + 1) == '/')
+                    single_comment_found = EINA_TRUE;
+                  //Start of multi line comment.
+                  else if (*(utf8_ptr + 1) == '*')
+                    multi_comment_found = EINA_TRUE;
+
+                  if (single_comment_found || multi_comment_found)
+                    utf8_ptr += 2;
+               }
+
              while (utf8_ptr < utf8_end)
                {
                   if (*utf8_ptr == '\n')
                     {
+                       //End of single line comment.
+                       if (single_comment_found)
+                         single_comment_found = EINA_FALSE;
+
                        code_lines = eina_list_append(code_lines,
                                        eina_stringshare_add_length(utf8_lexem,
                                        utf8_ptr - utf8_lexem));
                        utf8_append_ptr = utf8_ptr;
                        break;
                     }
-                  else if (*utf8_ptr == '{' || *utf8_ptr == '}' ||
-                           *utf8_ptr == ';')
+                  else if (multi_comment_found)
                     {
-                       if (*utf8_ptr == '{')
+                       //End of multi line comment.
+                       if (*utf8_ptr == '/' && utf8_ptr - 1 >= utf8 &&
+                           *(utf8_ptr - 1) == '*')
                          {
-                            char *bracket_right_ptr = utf8_ptr + 1;
-                            while (bracket_right_ptr < utf8_end)
-                              {
-                                 if (*bracket_right_ptr != ' ' &&
-                                     *bracket_right_ptr != '\t')
-                                   break;
-                                 bracket_right_ptr++;
-                              }
-                            if (bracket_right_ptr < utf8_end)
+                            if (utf8_ptr + 1 == utf8_end)
+                              code_lines = eina_list_append(code_lines,
+                                              
eina_stringshare_add(utf8_lexem));
+                            else
+                              code_lines =
+                                 eina_list_append(code_lines,
+                                    eina_stringshare_add_length(utf8_lexem,
+                                    utf8_ptr - utf8_lexem + 1));
+                            utf8_append_ptr = utf8_ptr;
+                            multi_comment_found = EINA_FALSE;
+                            break;
+                         }
+                    }
+                  //No line comment.
+                  else if (!single_comment_found)
+                    {
+                       if (*utf8_ptr == '{' || *utf8_ptr == '}' ||
+                           *utf8_ptr == ';')
+                         {
+                            if (*utf8_ptr == '{')
                               {
-                                 /* To preserve code line until block name,
-                                    keep start position of lexeme and append
-                                    code line until ';'. */
-                                 if (*bracket_right_ptr == '\"' ||
-                                     (bracket_right_ptr + 4 < utf8_end &&
-                                      !strncmp(bracket_right_ptr, "name:", 5)))
+                                 char *bracket_right_ptr = utf8_ptr + 1;
+                                 while (bracket_right_ptr < utf8_end)
                                    {
-                                      keep_lexem_start_pos = EINA_TRUE;
-                                      break;
+                                      if (*bracket_right_ptr != ' ' &&
+                                          *bracket_right_ptr != '\t')
+                                        break;
+                                      bracket_right_ptr++;
+                                   }
+                                 if (bracket_right_ptr < utf8_end)
+                                   {
+                                      /* To preserve code line until block 
name,
+                                         keep start position of lexeme and
+                                         append code line until ';'. */
+                                      if (*bracket_right_ptr == '\"' ||
+                                          (bracket_right_ptr + 4 < utf8_end &&
+                                           !strncmp(bracket_right_ptr, 
"name:", 5)))
+                                        {
+                                           keep_lexem_start_pos = EINA_TRUE;
+                                           break;
+                                        }
                                    }
                               }
+                            else if (*utf8_ptr == ';')
+                              keep_lexem_start_pos = EINA_FALSE;
+
+                            if (utf8_ptr + 1 == utf8_end)
+                              code_lines = eina_list_append(code_lines,
+                                              
eina_stringshare_add(utf8_lexem));
+                            else
+                              code_lines =
+                                 eina_list_append(code_lines,
+                                    eina_stringshare_add_length(utf8_lexem,
+                                    utf8_ptr - utf8_lexem + 1));
+                            utf8_append_ptr = utf8_ptr;
+                            break;
                          }
-                       else if (*utf8_ptr == ';')
-                         keep_lexem_start_pos = EINA_FALSE;
-
-                       if (utf8_ptr + 1 == utf8_end)
-                         code_lines = eina_list_append(code_lines,
-                                         eina_stringshare_add(utf8_lexem));
-                       else
-                         code_lines = eina_list_append(code_lines,
-                                         
eina_stringshare_add_length(utf8_lexem,
-                                         utf8_ptr - utf8_lexem + 1));
-                       utf8_append_ptr = utf8_ptr;
-                       break;
                     }
-                 utf8_ptr++;
+                  utf8_ptr++;
                }
           }
         utf8_ptr++;
@@ -363,7 +411,7 @@ indent_text_auto_format(indent_data *id EINA_UNUSED,
 
    EINA_LIST_FOREACH(code_lines, l, line)
     {
-       if (strstr(line, "}") && (space > 0))
+       if ((line[0] == '}') && (space > 0))
          space -= TAB_SPACE;
        char *p = alloca(space + 1);
        memset(p, ' ', space);
@@ -373,7 +421,10 @@ indent_text_auto_format(indent_data *id EINA_UNUSED,
        else
          eina_strbuf_append_length(buf, "<br/>", 5);
        memset(p, 0x0, space);
-       if (strstr(line, "{")) space += TAB_SPACE;
+       /* Based on the code line generation logic, "{" and "}" can exist
+          together in a code line within line comment.
+          In other case, "{" and "}" cannot exist together in a code line. */
+       if (strstr(line, "{") && !strstr(line, "}")) space += TAB_SPACE;
        eina_stringshare_del(line);
        line_cnt++;
     }

-- 


Reply via email to