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) { --
