syntax_color - apply an additional color to strings

This commit is contained in:
ChunEon Park 2014-05-20 20:09:14 +09:00
parent 7e27aeead1
commit a9aa904b63
2 changed files with 44 additions and 6 deletions

View File

@ -1,4 +1,5 @@
group "syntax_color_group" struct { group "syntax_color_group" struct {
value "string" string: "999999";
value "comment" string: "00B000"; value "comment" string: "00B000";
value "define" string: "D42A2A"; value "define" string: "D42A2A";
group "colors" array { group "colors" array {
@ -43,6 +44,7 @@ group "syntax_color_group" struct {
value "key" string: "styles"; value "key" string: "styles";
value "key" string: "size "; value "key" string: "size ";
value "key" string: "text "; value "key" string: "text ";
value "key" string: "text.";
} }
} }
group "color" struct { group "color" struct {
@ -95,7 +97,8 @@ group "syntax_color_group" struct {
value "key" string: "size"; value "key" string: "size";
value "key" string: "tag"; value "key" string: "tag";
value "key" string: "target"; value "key" string: "target";
value "key" string: "text"; value "key" string: "text:";
value "key" string: "text_class";
value "key" string: "to_x"; value "key" string: "to_x";
value "key" string: "to_y"; value "key" string: "to_y";
value "key" string: "to"; value "key" string: "to";

View File

@ -19,6 +19,7 @@ typedef struct syntax_color_group
{ {
char *comment; char *comment;
char *define; char *define;
char *string;
color colors[COL_NUM]; color colors[COL_NUM];
} syntax_color_group; } syntax_color_group;
@ -27,6 +28,7 @@ struct syntax_color_s
Eina_Strbuf *strbuf; Eina_Strbuf *strbuf;
Eina_Strbuf *cachebuf; Eina_Strbuf *cachebuf;
Eina_Hash *color_hash; Eina_Hash *color_hash;
Eina_Stringshare *col_string;
Eina_Stringshare *col_comment; Eina_Stringshare *col_comment;
Eina_Stringshare *col_define; Eina_Stringshare *col_define;
Eina_Stringshare *cols[COL_NUM]; Eina_Stringshare *cols[COL_NUM];
@ -62,6 +64,8 @@ eddc_init()
sizeof(color)); sizeof(color));
edd_color = eet_data_descriptor_stream_new(&eddc); edd_color = eet_data_descriptor_stream_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_BASIC(edd_scg, syntax_color_group, "string",
string, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(edd_scg, syntax_color_group, "comment", EET_DATA_DESCRIPTOR_ADD_BASIC(edd_scg, syntax_color_group, "comment",
comment, EET_T_STRING); comment, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(edd_scg, syntax_color_group, "define", EET_DATA_DESCRIPTOR_ADD_BASIC(edd_scg, syntax_color_group, "define",
@ -110,6 +114,8 @@ color_table_init(color_data *cd)
if (!scg) return; if (!scg) return;
cd->col_string = eina_stringshare_add(scg->string);
//free(scg->define);
cd->col_comment = eina_stringshare_add(scg->comment); cd->col_comment = eina_stringshare_add(scg->comment);
//free(scg->comment); //free(scg->comment);
cd->col_define = eina_stringshare_add(scg->define); cd->col_define = eina_stringshare_add(scg->define);
@ -180,6 +186,7 @@ color_term(color_data *cd)
eina_hash_free(cd->color_hash); eina_hash_free(cd->color_hash);
eina_strbuf_free(cd->cachebuf); eina_strbuf_free(cd->cachebuf);
eina_stringshare_del(cd->col_string);
eina_stringshare_del(cd->col_comment); eina_stringshare_del(cd->col_comment);
eina_stringshare_del(cd->col_define); eina_stringshare_del(cd->col_define);
@ -376,6 +383,36 @@ comment2_apply(Eina_Strbuf *strbuf, const char **src, int length, char **cur,
return -1; return -1;
} }
static int
string_apply(Eina_Strbuf *strbuf, char **cur, char **prev,
const Eina_Stringshare *color, Eina_Bool inside_string)
{
//escape string: " ~ "
if ((*cur)[0] != QUOT_C) return 0;
char buf[128];
if (!inside_string)
{
snprintf(buf, sizeof(buf), "<color=#%s>", color);
eina_strbuf_append(strbuf, buf);
}
eina_strbuf_append_length(strbuf, *prev, *cur - *prev);
eina_strbuf_append_char(strbuf, QUOT_C);
if (inside_string)
{
snprintf(buf, sizeof(buf), "</color>");
eina_strbuf_append(strbuf, buf);
}
(*cur)++;
*prev = *cur;
return 1;
}
static int static int
sharp_apply(Eina_Strbuf *strbuf, const char **src, int length, char **cur, sharp_apply(Eina_Strbuf *strbuf, const char **src, int length, char **cur,
char **prev, const Eina_Stringshare *color) char **prev, const Eina_Stringshare *color)
@ -543,15 +580,13 @@ color_apply(color_data *cd, const char *src, int length)
else if (ret == -1) goto finished; else if (ret == -1) goto finished;
//escape string: " ~ " //escape string: " ~ "
if (cur[0] == QUOT_C) ret = string_apply(strbuf, &cur, &prev, cd->col_string, inside_string);
if (ret == 1)
{ {
eina_strbuf_append_length(strbuf, prev, cur - prev);
eina_strbuf_append_char(strbuf, QUOT_C);
cur++;
prev = cur;
inside_string = !inside_string; inside_string = !inside_string;
continue; continue;
} }
if (inside_string || inside_comment) if (inside_string || inside_comment)
{ {
cur++; cur++;