hermet pushed a commit to branch master.

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

commit aeb4bcda163fa9c8c6d5decafafd6d7a60d21096
Author: Jaehyun Cho <[email protected]>
Date:   Mon Jan 5 13:26:58 2015 +0900

    syntax_color: Add enventor_object_syntax_color_set()/get().
    
    Summary: Add enventor_object_syntax_color_set()/get() to support changing 
text color.
    
    @feature
    
    Reviewers: Hermet
    
    Reviewed By: Hermet
    
    Differential Revision: https://phab.enlightenment.org/D1833
---
 src/lib/Enventor_Legacy.h  |  12 ++++
 src/lib/edc_editor.c       |  13 +++++
 src/lib/enventor_object.eo |  23 ++++++++
 src/lib/enventor_private.h |   4 ++
 src/lib/enventor_smart.c   |  17 ++++++
 src/lib/syntax_color.c     | 138 +++++++++++++++++++++++++++++++++++++++++++++
 6 files changed, 207 insertions(+)

diff --git a/src/lib/Enventor_Legacy.h b/src/lib/Enventor_Legacy.h
index 53dba3b..ed8400b 100644
--- a/src/lib/Enventor_Legacy.h
+++ b/src/lib/Enventor_Legacy.h
@@ -42,6 +42,18 @@ typedef enum {
    ENVENTOR_TEMPLATE_INSERT_LIVE_EDIT
 } Enventor_Template_Insert_Type;
 
+typedef enum {
+   ENVENTOR_SYNTAX_COLOR_STRING,
+   ENVENTOR_SYNTAX_COLOR_COMMENT,
+   ENVENTOR_SYNTAX_COLOR_MACRO,
+   ENVENTOR_SYNTAX_COLOR_SYMBOL,
+   ENVENTOR_SYNTAX_COLOR_MAIN_KEYWORD,
+   ENVENTOR_SYNTAX_COLOR_SUB_KEYWORD,
+   ENVENTOR_SYNTAX_COLOR_CONSTANT,
+   ENVENTOR_SYNTAX_COLOR_SCRIPT_FUNC,
+   ENVENTOR_SYNTAX_COLOR_SCRIPT_KEYWORD
+} Enventor_Syntax_Color_Type;
+
 EAPI int enventor_init(int argc, char **argv);
 EAPI int enventor_shutdown(void);
 EAPI Evas_Object *enventor_object_add(Evas_Object *parent);
diff --git a/src/lib/edc_editor.c b/src/lib/edc_editor.c
index 764915f..48c3f5d 100644
--- a/src/lib/edc_editor.c
+++ b/src/lib/edc_editor.c
@@ -884,6 +884,19 @@ edit_save(edit_data *ed, const char *file)
 }
 
 void
+edit_syntax_color_set(edit_data *ed, Enventor_Syntax_Color_Type color_type,
+                      const char *val)
+{
+   color_set(syntax_color_data_get(ed->sh), color_type, val);
+}
+
+const char *
+edit_syntax_color_get(edit_data *ed, Enventor_Syntax_Color_Type color_type)
+{
+   return color_get(syntax_color_data_get(ed->sh), color_type);
+}
+
+void
 edit_syntax_color_full_apply(edit_data *ed, Eina_Bool force)
 {
    int lock;
diff --git a/src/lib/enventor_object.eo b/src/lib/enventor_object.eo
index dc8805d..1f34569 100644
--- a/src/lib/enventor_object.eo
+++ b/src/lib/enventor_object.eo
@@ -329,6 +329,29 @@ class Enventor.Object (Elm_Widget, Efl.File) {
             @in int line; /*@ ... */
          }
       }
+      syntax_color_set {
+         /*@
+         @brief
+         @warning
+         @see
+         @ingroup Enventor */
+         params {
+            @in Enventor_Syntax_Color_Type color_type; /*@ ... */
+            @in const(char) *val; /*@ ... */
+         }
+      }
+      syntax_color_get {
+         /*@
+         @brief
+         @return
+         @warning
+         @see
+         @ingroup Enventor */
+         return: const(char) *;
+         params {
+            @in Enventor_Syntax_Color_Type color_type; /*@ ... */
+         }
+      }
       syntax_color_full_apply {
          /*@
          @brief
diff --git a/src/lib/enventor_private.h b/src/lib/enventor_private.h
index a45f9e1..d89e04f 100644
--- a/src/lib/enventor_private.h
+++ b/src/lib/enventor_private.h
@@ -76,6 +76,8 @@ Eina_Bool autocomp_event_dispatch(const char *key);
 /* syntax color */
 color_data *color_init(Eina_Strbuf *strbuf);
 void color_term(color_data *cd);
+void color_set(color_data *cd, Enventor_Syntax_Color_Type color_type, const 
char *val);
+const char *color_get(color_data *cd, Enventor_Syntax_Color_Type color_type);
 const char *color_cancel(color_data *cd, const char *str, int length, int 
from_pos, int to_pos, char **from, char **to);
 const char *color_apply(color_data *cd, const char *str, int length, char 
*from, char *to);
 Eina_Bool color_ready(color_data *cd);
@@ -214,6 +216,8 @@ Eina_Stringshare *edit_cur_part_name_get(edit_data *ed);
 Eina_Stringshare *edit_cur_paragh_get(edit_data *ed);
 int edit_max_line_get(edit_data *ed);
 void edit_goto(edit_data *ed, int line);
+void edit_syntax_color_set(edit_data *ed, Enventor_Syntax_Color_Type 
color_type, const char *val);
+const char *edit_syntax_color_get(edit_data *ed, Enventor_Syntax_Color_Type 
color_type);
 void edit_syntax_color_full_apply(edit_data *ed, Eina_Bool force);
 void edit_syntax_color_partial_apply(edit_data *ed, double interval);
 Evas_Object *edit_entry_get(edit_data *ed);
diff --git a/src/lib/enventor_smart.c b/src/lib/enventor_smart.c
index 21d3912..0a363d6 100644
--- a/src/lib/enventor_smart.c
+++ b/src/lib/enventor_smart.c
@@ -475,6 +475,23 @@ _enventor_object_line_goto(Eo *obj EINA_UNUSED, 
Enventor_Object_Data *pd,
 }
 
 EOLIAN static void
+_enventor_object_syntax_color_set(Eo *obj EINA_UNUSED,
+                                  Enventor_Object_Data *pd,
+                                  Enventor_Syntax_Color_Type color_type,
+                                  const char *val)
+{
+   edit_syntax_color_set(pd->ed, color_type, val);
+}
+
+EOLIAN static const char *
+_enventor_object_syntax_color_get(Eo *obj EINA_UNUSED,
+                                  Enventor_Object_Data *pd,
+                                  Enventor_Syntax_Color_Type color_type)
+{
+   return edit_syntax_color_get(pd->ed, color_type);
+}
+
+EOLIAN static void
 _enventor_object_syntax_color_full_apply(Eo *obj EINA_UNUSED,
                                          Enventor_Object_Data *pd,
                                          Eina_Bool force)
diff --git a/src/lib/syntax_color.c b/src/lib/syntax_color.c
index 167ce59..95b5602 100644
--- a/src/lib/syntax_color.c
+++ b/src/lib/syntax_color.c
@@ -44,6 +44,12 @@ struct syntax_color_s
    Eina_Bool ready: 1;
 };
 
+typedef struct color_hash_foreach_data
+{
+   Eina_Stringshare *cur_col;
+   Eina_Stringshare *new_col;
+} color_hash_foreach_data;
+
 static Eet_Data_Descriptor *edd_scg = NULL;
 static Eet_Data_Descriptor *edd_color = NULL;
 static syntax_color_group *scg = NULL;
@@ -693,6 +699,138 @@ color_term(color_data *cd)
    free(cd);
 }
 
+static Eina_Bool
+color_hash_foreach_cb(const Eina_Hash *hash, const void *key, void *data, void 
*fdata)
+{
+   Eina_Inarray *inarray = data;
+   color_hash_foreach_data *fd = fdata;
+   color_tuple *tuple;
+
+   EINA_INARRAY_FOREACH(inarray, tuple)
+     {
+        if (tuple->col == fd->cur_col)
+          tuple->col = fd->new_col;
+     }
+   return EINA_TRUE;
+}
+
+void
+color_set(color_data *cd, Enventor_Syntax_Color_Type color_type, const char 
*val)
+{
+   Eina_Stringshare *col;
+   color_hash_foreach_data fd;
+
+   switch (color_type)
+     {
+        case ENVENTOR_SYNTAX_COLOR_STRING:
+          {
+             eina_stringshare_del(cd->col_string);
+             cd->col_string = eina_stringshare_add(val);
+             break;
+          }
+        case ENVENTOR_SYNTAX_COLOR_COMMENT:
+          {
+             eina_stringshare_del(cd->col_comment);
+             cd->col_comment = eina_stringshare_add(val);
+             break;
+          }
+        case ENVENTOR_SYNTAX_COLOR_MACRO:
+          {
+             eina_stringshare_del(cd->col_macro);
+             cd->col_macro = eina_stringshare_add(val);
+             break;
+          }
+        case ENVENTOR_SYNTAX_COLOR_SYMBOL:
+          {
+             col = eina_stringshare_add(val);
+             fd.cur_col = cd->cols[0];
+             fd.new_col = col;
+             eina_hash_foreach(cd->color_hash, color_hash_foreach_cb, &fd);
+             eina_stringshare_del(cd->cols[0]);
+             cd->cols[0] = col;
+             break;
+          }
+        case ENVENTOR_SYNTAX_COLOR_MAIN_KEYWORD:
+          {
+             col = eina_stringshare_add(val);
+             fd.cur_col = cd->cols[1];
+             fd.new_col = col;
+             eina_hash_foreach(cd->color_hash, color_hash_foreach_cb, &fd);
+             eina_stringshare_del(cd->cols[1]);
+             cd->cols[1] = col;
+             break;
+          }
+        case ENVENTOR_SYNTAX_COLOR_SUB_KEYWORD:
+          {
+             col = eina_stringshare_add(val);
+             fd.cur_col = cd->cols[2];
+             fd.new_col = col;
+             eina_hash_foreach(cd->color_hash, color_hash_foreach_cb, &fd);
+             eina_stringshare_del(cd->cols[2]);
+             cd->cols[2] = col;
+             break;
+          }
+        case ENVENTOR_SYNTAX_COLOR_CONSTANT:
+          {
+             col = eina_stringshare_add(val);
+             fd.cur_col = cd->cols[3];
+             fd.new_col = col;
+             eina_hash_foreach(cd->color_hash, color_hash_foreach_cb, &fd);
+             eina_stringshare_del(cd->cols[3]);
+             cd->cols[3] = col;
+             break;
+          }
+        case ENVENTOR_SYNTAX_COLOR_SCRIPT_FUNC:
+          {
+             col = eina_stringshare_add(val);
+             fd.cur_col = cd->cols[4];
+             fd.new_col = col;
+             eina_hash_foreach(cd->color_hash, color_hash_foreach_cb, &fd);
+             eina_stringshare_del(cd->cols[4]);
+             cd->cols[4] = col;
+             break;
+          }
+        case ENVENTOR_SYNTAX_COLOR_SCRIPT_KEYWORD:
+          {
+             col = eina_stringshare_add(val);
+             fd.cur_col = cd->cols[5];
+             fd.new_col = col;
+             eina_hash_foreach(cd->color_hash, color_hash_foreach_cb, &fd);
+             eina_stringshare_del(cd->cols[5]);
+             cd->cols[5] = col;
+             break;
+          }
+     }
+}
+
+const char *
+color_get(color_data *cd, Enventor_Syntax_Color_Type color_type)
+{
+   switch (color_type)
+     {
+        case ENVENTOR_SYNTAX_COLOR_STRING:
+          return (const char *) cd->col_string;
+        case ENVENTOR_SYNTAX_COLOR_COMMENT:
+          return (const char *) cd->col_comment;
+        case ENVENTOR_SYNTAX_COLOR_MACRO:
+          return (const char *) cd->col_macro;
+        case ENVENTOR_SYNTAX_COLOR_SYMBOL:
+          return (const char *) cd->cols[0];
+        case ENVENTOR_SYNTAX_COLOR_MAIN_KEYWORD:
+          return (const char *) cd->cols[1];
+        case ENVENTOR_SYNTAX_COLOR_SUB_KEYWORD:
+          return (const char *) cd->cols[2];
+        case ENVENTOR_SYNTAX_COLOR_CONSTANT:
+          return (const char *) cd->cols[3];
+        case ENVENTOR_SYNTAX_COLOR_SCRIPT_FUNC:
+          return (const char *) cd->cols[4];
+        case ENVENTOR_SYNTAX_COLOR_SCRIPT_KEYWORD:
+          return (const char *) cd->cols[5];
+        default:
+          return NULL;
+     }
+}
+
 const char *
 color_apply(color_data *cd, const char *src, int length, char *from, char *to)
 {

-- 


Reply via email to