Skip to content

Commit

Permalink
syntax: avoid goto usage (especially into the block)
Browse files Browse the repository at this point in the history
  • Loading branch information
dimmus committed Mar 18, 2023
1 parent 65d7869 commit d557d5e
Showing 1 changed file with 125 additions and 17 deletions.
142 changes: 125 additions & 17 deletions src/bin/external/syntax_color.c
Original file line number Diff line number Diff line change
Expand Up @@ -664,11 +664,11 @@ color_markup_insert(Eina_Strbuf *strbuf, const char **src, int length, char **cu
return 0;
}

char *
color_apply(color_data *cd, const char *src, int length, char *from, char *to)
char *color_apply(color_data *cd, const char *src, int length, char *from, char *to)
{
Eina_Bool inside_string = EINA_FALSE;
Eina_Bool inside_comment = EINA_FALSE;
int finished = 0;

if (!src || (length < 1)) return NULL;

Expand Down Expand Up @@ -701,15 +701,21 @@ color_apply(color_data *cd, const char *src, int length, char *from, char *to)
ret = comment_apply(strbuf, &src, length, &cur, &prev, cd->col_comment,
&inside_comment);
if (ret == 1) continue;
else if (ret == -1) goto finished;
else if (ret == -1) {
finished = 1;
break;
}

//handle comment: //
if (!from || (cur >= from))
{
ret = comment2_apply(strbuf, &src, length, &cur, &prev,
cd->col_comment, &inside_comment);
if (ret == 1) continue;
else if (ret == -1) goto finished;
else if (ret == -1) {
finished = 1;
break;
}
}

//escape string: " ~ "
Expand All @@ -735,30 +741,132 @@ color_apply(color_data *cd, const char *src, int length, char *from, char *to)
{
ret = color_markup_insert(strbuf, &src, length, &cur, &prev, cd);
if (ret == 1) continue;
else if (ret == -1) goto finished;
else if (ret == -1) {
finished = 1;
break;
}
}

cur++;
if (to && (cur > to)) goto finished;
if (to && (cur > to)) {
finished = 1;
break;
}
}

//Same with origin source.
if (prev == src)
str = src;
//Some color syntax is applied.
else
{
finished:
//append leftovers.
if (prev < cur) eina_strbuf_append(strbuf, prev);
str = eina_strbuf_string_get(strbuf);
}
if (!finished) {
//Same with origin source.
if (prev == src)
str = src;
//Some color syntax is applied.
else
{
//append leftovers.
if (prev < cur) eina_strbuf_append_length(strbuf, prev, cur - prev);
str = eina_strbuf_string_get(strbuf);
}
}

macro_keys_free(cd);

return (str == NULL) ? NULL : strdup(str);
}

// char *
// color_apply_OLD(color_data *cd, const char *src, int length, char *from, char *to)
// {
// Eina_Bool inside_string = EINA_FALSE;
// Eina_Bool inside_comment = EINA_FALSE;

// if (!src || (length < 1)) return NULL;

// Eina_Strbuf *strbuf = cd->cachebuf;
// eina_strbuf_reset(strbuf);

// const char *str = NULL;
// char *prev = (char *) src;
// char *cur = (char *) src;
// int ret;

// while (cur && (cur <= (src + length)))
// {
// //escape empty string
// if (!from || (cur >= from))
// {
// if (cur[0] == ' ')
// {
// if (cur > prev)
// eina_strbuf_append_length(strbuf, prev, (cur - prev) + 1);
// else
// eina_strbuf_append_char(strbuf, ' ');
// ++cur;
// prev = cur;
// continue;
// }
// }

// //handle comment: /* ~ */
// ret = comment_apply(strbuf, &src, length, &cur, &prev, cd->col_comment,
// &inside_comment);
// if (ret == 1) continue;
// else if (ret == -1) goto finished;

// //handle comment: //
// if (!from || (cur >= from))
// {
// ret = comment2_apply(strbuf, &src, length, &cur, &prev,
// cd->col_comment, &inside_comment);
// if (ret == 1) continue;
// else if (ret == -1) goto finished;
// }

// //escape string: " ~ "
// ret = string_apply(strbuf, &cur, &prev, cd->col_string, inside_string);
// if (ret == 1)
// {
// inside_string = !inside_string;
// continue;
// }

// if (inside_string || inside_comment)
// {
// cur++;
// continue;
// }

// //handle comment: preprocessors, #
// ret = macro_apply(strbuf, &src, length, &cur, &prev, cd->col_macro, cd);
// if (ret == 1) continue;

// //apply color markup
// if (!from || (cur >= from))
// {
// ret = color_markup_insert(strbuf, &src, length, &cur, &prev, cd);
// if (ret == 1) continue;
// else if (ret == -1) goto finished;
// }

// cur++;
// if (to && (cur > to)) goto finished;
// }

// //Same with origin source.
// if (prev == src)
// str = src;
// //Some color syntax is applied.
// else
// {
// finished:
// //append leftovers.
// if (prev < cur) eina_strbuf_append(strbuf, prev);
// str = eina_strbuf_string_get(strbuf);
// }

// macro_keys_free(cd);

// return (str == NULL) ? NULL : strdup(str);
// }

Eina_Bool
color_ready(color_data *cd)
{
Expand Down

0 comments on commit d557d5e

Please sign in to comment.