ajwillia-ms pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=92eacde6e7e1a4a53185691fd97b549029724320

commit 92eacde6e7e1a4a53185691fd97b549029724320
Author: Andy Williams <a...@andywilliams.me>
Date:   Sat Dec 3 15:59:40 2016 +0000

    elm_code: refactoring of the elm_code_line_indent to work with lines
---
 src/lib/elementary/elm_code_indent.c        | 15 ++++-
 src/lib/elementary/elm_code_indent.h        |  2 +-
 src/lib/elementary/elm_code_widget.c        |  6 +-
 src/tests/elementary/elm_code_test_indent.c | 87 +++++++++++++++++++----------
 4 files changed, 72 insertions(+), 38 deletions(-)

diff --git a/src/lib/elementary/elm_code_indent.c 
b/src/lib/elementary/elm_code_indent.c
index b1b13d3..70b66cd 100644
--- a/src/lib/elementary/elm_code_indent.c
+++ b/src/lib/elementary/elm_code_indent.c
@@ -7,12 +7,21 @@
 #include "elm_code_private.h"
 
 EAPI char *
-elm_code_line_indent_get(const char *prevtext, unsigned int prevlength)
+elm_code_line_indent_get(Elm_Code_Line *line)
 {
-   unsigned int count = 0;
-   char *buf, *ptr = (char *)prevtext;
+   Elm_Code_Line *prevline;
+   const char *prevtext;
+   unsigned int prevlength, count = 0;
+   char *buf, *ptr;
    char next, last;
 
+   if (line->number <= 1)
+     return strdup("");
+
+   prevline = elm_code_file_line_get(line->file, line->number - 1);
+   prevtext = elm_code_line_text_get(prevline, &prevlength);
+
+   ptr = (char *)prevtext;
    buf = malloc((prevlength + 3) * sizeof(char));
    while (count < prevlength)
      {
diff --git a/src/lib/elementary/elm_code_indent.h 
b/src/lib/elementary/elm_code_indent.h
index 1cf8891..41eaccd 100644
--- a/src/lib/elementary/elm_code_indent.h
+++ b/src/lib/elementary/elm_code_indent.h
@@ -20,7 +20,7 @@ extern "C" {
  *
  */
 
-EAPI char *elm_code_line_indent_get(const char *prevtext, unsigned int 
prevlength);
+EAPI char *elm_code_line_indent_get(Elm_Code_Line *line);
 
 EAPI char *elm_code_line_indent_matching_braces_get(Elm_Code_Line *line);
 
diff --git a/src/lib/elementary/elm_code_widget.c 
b/src/lib/elementary/elm_code_widget.c
index a05cf32..f0b54fe 100644
--- a/src/lib/elementary/elm_code_widget.c
+++ b/src/lib/elementary/elm_code_widget.c
@@ -1237,8 +1237,8 @@ _elm_code_widget_text_at_cursor_insert_do(Elm_Code_Widget 
*widget, const char *t
         count = 0;
         while (count < curlen)
           {
-             if (!_elm_code_text_char_is_whitespace(*curtext))
-             break;
+             if (*curtext != ' ' && *curtext != '\t')
+               break;
 
              count++;
              curtext++;
@@ -1338,7 +1338,7 @@ _elm_code_widget_newline(Elm_Code_Widget *widget)
    width = elm_code_widget_line_text_column_width_get(widget, line);
 
    line = elm_code_file_line_get(code->file, row + 1);
-   leading = elm_code_line_indent_get(oldtext, oldlen);
+   leading = elm_code_line_indent_get(line);
    elm_code_line_text_leading_whitespace_strip(line);
    elm_code_line_text_insert(line, 0, leading, strlen(leading));
    free(oldtext);
diff --git a/src/tests/elementary/elm_code_test_indent.c 
b/src/tests/elementary/elm_code_test_indent.c
index 70ecc9e..f4887d5 100644
--- a/src/tests/elementary/elm_code_test_indent.c
+++ b/src/tests/elementary/elm_code_test_indent.c
@@ -8,55 +8,80 @@
 #include "Elementary.h"
 #include "elm_code_indent.h"
 
+static void
+_indent_check(Elm_Code_File *file, const char *prev, const char *expected)
+{
+   Elm_Code_Line *line;
+   char *str;
+
+   elm_code_file_clear(file);
+
+   elm_code_file_line_append(file, prev, strlen(prev), NULL);
+   elm_code_file_line_append(file, "", 0, NULL);
+   line = elm_code_file_line_get(file, 2);
+
+   str = elm_code_line_indent_get(line);
+   ck_assert_str_eq(expected, str);
+
+   free(str);
+}
+
 START_TEST (elm_code_indent_whitespace_test)
 {
-   const char *str;
+   Elm_Code *code;
+   Elm_Code_File *file;
 
-   str = elm_code_line_indent_get("", 0);
-   ck_assert_str_eq("", str);
-   str = elm_code_line_indent_get("  ", 2);
-   ck_assert_str_eq("  ", str);
-   str = elm_code_line_indent_get("\t", 1);
-   ck_assert_str_eq("\t", str);
-   str = elm_code_line_indent_get("\t  ", 3);
-   ck_assert_str_eq("\t  ", str);
+   elm_init(1, NULL);
+   code = elm_code_create();
+   file = elm_code_file_new(code);
+
+   _indent_check(file, "", "");
+   _indent_check(file, "  ", "  ");
+   _indent_check(file, "\t", "\t");
+   _indent_check(file, "\t  ", "\t  ");
+
+   elm_shutdown();
 }
 END_TEST
 
 START_TEST (elm_code_indent_comments_test)
 {
-   const char *str;
+   Elm_Code *code;
+   Elm_Code_File *file;
+
+   elm_init(1, NULL);
+   code = elm_code_create();
+   file = elm_code_file_new(code);
 
-   str = elm_code_line_indent_get(" /**", 4);
-   ck_assert_str_eq("  * ", str);
-   str = elm_code_line_indent_get("  * ", 4);
-   ck_assert_str_eq("  * ", str);
-   str = elm_code_line_indent_get("  */", 4);
-   ck_assert_str_eq(" ", str);
-   str = elm_code_line_indent_get("\t//", 3);
-   ck_assert_str_eq("\t//", str);
+   _indent_check(file, " /**", "  * ");
+   _indent_check(file, "  * ", "  * ");
+   _indent_check(file, "  */", " ");
+   _indent_check(file, "\t//", "\t//");
 
    // test these are not comments
-   str = elm_code_line_indent_get(" / ", 3);
-   ck_assert_str_eq(" ", str);
-   str = elm_code_line_indent_get(" hi//", 5);
-   ck_assert_str_eq(" ", str);
+   _indent_check(file, " / ", " ");
+   _indent_check(file, " hi//", " ");
+
+   elm_shutdown();
 }
 END_TEST
 
 START_TEST (elm_code_indent_simple_braces)
 {
-   const char *str;
+   Elm_Code *code;
+   Elm_Code_File *file;
 
-   str = elm_code_line_indent_get("if() {", 6);
-   ck_assert_str_eq("   ", str);
-   str = elm_code_line_indent_get("}", 1);
-   ck_assert_str_eq("", str);
+   elm_init(1, NULL);
+   code = elm_code_create();
+   file = elm_code_file_new(code);
 
-   str = elm_code_line_indent_get("  {", 3);
-   ck_assert_str_eq("     ", str);
-   str = elm_code_line_indent_get("  }", 3);
-   ck_assert_str_eq("", str);
+   _indent_check(file, "if() {", "   ");
+   _indent_check(file, "}", "");
+
+   _indent_check(file, "  {", "     ");
+   _indent_check(file, "  }", "");
+
+   elm_shutdown();
 }
 END_TEST
 

-- 


Reply via email to