ajwillia-ms pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=18b676531ec6a27e5fafe27b46082e93fb18a92b

commit 18b676531ec6a27e5fafe27b46082e93fb18a92b
Author: Andy Williams <a...@andywilliams.me>
Date:   Mon Feb 6 23:39:15 2017 +0000

    elm_code: syntax fix for preprocessor over multiple lines
---
 src/lib/elementary/elm_code_syntax.c        | 16 ++++++++++++++-
 src/tests/elementary/elm_code_test_syntax.c | 30 +++++++++++++++++------------
 2 files changed, 33 insertions(+), 13 deletions(-)

diff --git a/src/lib/elementary/elm_code_syntax.c 
b/src/lib/elementary/elm_code_syntax.c
index 4f2ed6a..cabcd86 100644
--- a/src/lib/elementary/elm_code_syntax.c
+++ b/src/lib/elementary/elm_code_syntax.c
@@ -163,7 +163,16 @@ elm_code_syntax_parse_line(Elm_Code_Syntax *syntax, 
Elm_Code_Line *line)
              return;
           }
         i = i2 + 1;
-        // TODO reset all below of here
+     }
+   else if (previous_type == ELM_CODE_TOKEN_TYPE_PREPROCESSOR)
+     {
+        elm_code_line_token_add(line, 0, length, 1, 
ELM_CODE_TOKEN_TYPE_PREPROCESSOR);
+        if (content[length-1] == '\\')
+          {
+             Elm_Code_Token *token = eina_list_last_data_get(line->tokens);
+             token->continues = EINA_TRUE;
+          }
+        return;
      }
 
    ptr = content;
@@ -183,6 +192,11 @@ elm_code_syntax_parse_line(Elm_Code_Syntax *syntax, 
Elm_Code_Line *line)
         if (syntax->preprocessor && _content_starts_with(content+i, 
syntax->preprocessor, strlen(syntax->preprocessor)))
           {
              elm_code_line_token_add(line, i, length - 1, 1, 
ELM_CODE_TOKEN_TYPE_PREPROCESSOR);
+             if (content[length-1] == '\\')
+               {
+                  Elm_Code_Token *token = 
eina_list_last_data_get(line->tokens);
+                  token->continues = EINA_TRUE;
+               }
              return;
           }
         else if (_starts_single_comment(syntax, content + i, length - i))
diff --git a/src/tests/elementary/elm_code_test_syntax.c 
b/src/tests/elementary/elm_code_test_syntax.c
index 959034a..f3f5c3a 100644
--- a/src/tests/elementary/elm_code_test_syntax.c
+++ b/src/tests/elementary/elm_code_test_syntax.c
@@ -67,6 +67,9 @@ START_TEST (elm_code_syntax_c)
    elm_code_widget_syntax_enabled_set(widget, EINA_TRUE);
 
    _append_line(file, "#include <stdio.h>");
+   _append_line(file, "#define MULTILINE \"Some text covering \"\\");
+   _append_line(file, "   \"multiple lines\"");
+   _append_line(file, "");
    _append_line(file, "/**");
    _append_line(file, " * The main method.");
    _append_line(file, " */");
@@ -82,28 +85,31 @@ START_TEST (elm_code_syntax_c)
    _append_line(file, "}");
 
    _assert_line_token_types(file, 1, 1, 
(Elm_Code_Token_Type[1]){ELM_CODE_TOKEN_TYPE_PREPROCESSOR});
-   _assert_line_token_types(file, 2, 1, 
(Elm_Code_Token_Type[1]){ELM_CODE_TOKEN_TYPE_COMMENT});
-   _assert_line_token_types(file, 3, 1, 
(Elm_Code_Token_Type[1]){ELM_CODE_TOKEN_TYPE_COMMENT});
-   _assert_line_token_types(file, 4, 1, 
(Elm_Code_Token_Type[1]){ELM_CODE_TOKEN_TYPE_COMMENT});
-   _assert_line_token_types(file, 5, 8, 
(Elm_Code_Token_Type[8]){ELM_CODE_TOKEN_TYPE_KEYWORD, ELM_CODE_TOKEN_TYPE_BRACE,
+   _assert_line_token_types(file, 2, 1, 
(Elm_Code_Token_Type[1]){ELM_CODE_TOKEN_TYPE_PREPROCESSOR});
+   _assert_line_token_types(file, 3, 1, 
(Elm_Code_Token_Type[1]){ELM_CODE_TOKEN_TYPE_PREPROCESSOR});
+
+   _assert_line_token_types(file, 5, 1, 
(Elm_Code_Token_Type[1]){ELM_CODE_TOKEN_TYPE_COMMENT});
+   _assert_line_token_types(file, 6, 1, 
(Elm_Code_Token_Type[1]){ELM_CODE_TOKEN_TYPE_COMMENT});
+   _assert_line_token_types(file, 7, 1, 
(Elm_Code_Token_Type[1]){ELM_CODE_TOKEN_TYPE_COMMENT});
+   _assert_line_token_types(file, 8, 8, 
(Elm_Code_Token_Type[8]){ELM_CODE_TOKEN_TYPE_KEYWORD, ELM_CODE_TOKEN_TYPE_BRACE,
       ELM_CODE_TOKEN_TYPE_KEYWORD, ELM_CODE_TOKEN_TYPE_BRACE, 
ELM_CODE_TOKEN_TYPE_KEYWORD, ELM_CODE_TOKEN_TYPE_BRACE,
       ELM_CODE_TOKEN_TYPE_BRACE, ELM_CODE_TOKEN_TYPE_BRACE});
-   _assert_line_token_types(file, 6, 1, 
(Elm_Code_Token_Type[1]){ELM_CODE_TOKEN_TYPE_BRACE});
-   _assert_line_token_types(file, 7, 1, 
(Elm_Code_Token_Type[1]){ELM_CODE_TOKEN_TYPE_COMMENT});
-   _assert_line_token_types(file, 8, 5, 
(Elm_Code_Token_Type[5]){ELM_CODE_TOKEN_TYPE_KEYWORD, ELM_CODE_TOKEN_TYPE_BRACE,
+   _assert_line_token_types(file, 9, 1, 
(Elm_Code_Token_Type[1]){ELM_CODE_TOKEN_TYPE_BRACE});
    _assert_line_token_types(file, 10, 4, 
(Elm_Code_Token_Type[4]){ELM_CODE_TOKEN_TYPE_KEYWORD, ELM_CODE_TOKEN_TYPE_BRACE,
       ELM_CODE_TOKEN_TYPE_STRING, ELM_CODE_TOKEN_TYPE_BRACE});
 
+   _assert_line_token_types(file, 11, 1, 
(Elm_Code_Token_Type[1]){ELM_CODE_TOKEN_TYPE_COMMENT});
+   _assert_line_token_types(file, 12, 5, 
(Elm_Code_Token_Type[5]){ELM_CODE_TOKEN_TYPE_KEYWORD, ELM_CODE_TOKEN_TYPE_BRACE,
       ELM_CODE_TOKEN_TYPE_BRACE, ELM_CODE_TOKEN_TYPE_NUMBER, 
ELM_CODE_TOKEN_TYPE_BRACE});
-   _assert_line_token_types(file, 9, 8, 
(Elm_Code_Token_Type[8]){ELM_CODE_TOKEN_TYPE_BRACE, ELM_CODE_TOKEN_TYPE_STRING,
+   _assert_line_token_types(file, 13, 8, 
(Elm_Code_Token_Type[8]){ELM_CODE_TOKEN_TYPE_BRACE, ELM_CODE_TOKEN_TYPE_STRING,
       ELM_CODE_TOKEN_TYPE_BRACE, ELM_CODE_TOKEN_TYPE_BRACE, 
ELM_CODE_TOKEN_TYPE_NUMBER, ELM_CODE_TOKEN_TYPE_BRACE,
       ELM_CODE_TOKEN_TYPE_BRACE, ELM_CODE_TOKEN_TYPE_BRACE});
-   _assert_line_token_types(file, 10, 1, 
(Elm_Code_Token_Type[1]){ELM_CODE_TOKEN_TYPE_KEYWORD});
-   _assert_line_token_types(file, 11, 4, 
(Elm_Code_Token_Type[4]){ELM_CODE_TOKEN_TYPE_BRACE, ELM_CODE_TOKEN_TYPE_STRING,
+   _assert_line_token_types(file, 14, 1, 
(Elm_Code_Token_Type[1]){ELM_CODE_TOKEN_TYPE_KEYWORD});
+   _assert_line_token_types(file, 15, 4, 
(Elm_Code_Token_Type[4]){ELM_CODE_TOKEN_TYPE_BRACE, ELM_CODE_TOKEN_TYPE_STRING,
       ELM_CODE_TOKEN_TYPE_BRACE, ELM_CODE_TOKEN_TYPE_BRACE});
-   _assert_line_token_types(file, 12, 3, 
(Elm_Code_Token_Type[3]){ELM_CODE_TOKEN_TYPE_KEYWORD,
+   _assert_line_token_types(file, 16, 3, 
(Elm_Code_Token_Type[3]){ELM_CODE_TOKEN_TYPE_KEYWORD,
       ELM_CODE_TOKEN_TYPE_NUMBER, ELM_CODE_TOKEN_TYPE_BRACE});
-   _assert_line_token_types(file, 13, 1, 
(Elm_Code_Token_Type[1]){ELM_CODE_TOKEN_TYPE_BRACE});
+   _assert_line_token_types(file, 17, 1, 
(Elm_Code_Token_Type[1]){ELM_CODE_TOKEN_TYPE_BRACE});
 
    elm_code_free(code);
    elm_shutdown();

-- 


Reply via email to