internal strbuf -> eina_strbuf
authorenglebass <englebass>
Sat, 6 Feb 2010 21:43:12 +0000 (21:43 +0000)
committerenglebass <englebass@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sat, 6 Feb 2010 21:43:12 +0000 (21:43 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/edje@45951 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/edje_textblock_styles.c

index 948f177..e89c928 100644 (file)
@@ -13,30 +13,6 @@ _edje_font_is_embedded(Edje_File *edf, char *font __UNUSED__)
    return 1;
 }
 
-/* Put a \ before and Space( ), \ or ' in a string.
- * A newly allocated string is returned.
- */
-static char *
-_edje_str_escape(const char *str)
-{
-   char *s2, *d;
-   const char *s;
-
-   s2 = malloc((strlen(str) * 2) + 1);
-   if (!s2) return NULL;
-   for (s = str, d = s2; *s != 0; s++, d++)
-     {
-       if ((*s == ' ') || (*s == '\\') || (*s == '\''))
-         {
-            *d = '\\';
-            d++;
-         }
-       *d = *s;
-     }
-   *d = 0;
-   return s2;
-}
-
 static void
 _edje_format_param_parse(char *item, char **key, char **val)
 {
@@ -106,51 +82,13 @@ _edje_format_is_param(char *item)
 }
 
 static char *
-_edje_strbuf_append2(char *s, const char *s2, int *len, int *alloc)
-{
-   int l2, tlen;
-
-   if (!s2) return s;
-   l2 = strlen(s2);
-   tlen = *len + l2;
-   if (tlen > *alloc)
-     {
-       char *ts;
-       int talloc;
-
-       talloc = ((tlen + 31) >> 5) << 5;
-       ts = realloc(s, talloc + 1);
-       if (!ts) return s;
-       s = ts;
-       *alloc = talloc;
-     }
-   strcpy(s + *len, s2);
-   *len = tlen;
-   return s;
-}
-
-static char *
-_edje_strbuf_append2_escaped(char *s, const char *unescaped_s, int *len, int *alloc)
-{
-   char *tmp;
-
-   tmp = _edje_str_escape(unescaped_s);
-   if (!tmp) return s;
-
-   s = _edje_strbuf_append2(s, tmp, len, alloc);
-   free(tmp);
-
-   return s;
-}
-
-static char *
 _edje_format_reparse(Edje_File *edf, const char *str, Edje_Style_Tag **tag_ret)
 {
-   char *s2, *item;
-   char *newstr = NULL;
+   Eina_Strbuf *txt;
+   char *s2, *item, *ret;
    const char *s;
-   int newlen = 0, newalloc = 0;
 
+   txt = eina_strbuf_new();
    s = str;
    while ((item = _edje_format_parse(&s)))
      {
@@ -179,15 +117,13 @@ _edje_format_reparse(Edje_File *edf, const char *str, Edje_Style_Tag **tag_ret)
                    {
                       if (_edje_font_is_embedded(edf, val))
                         {
-                           char *tmpstr = NULL;
-                           int tmplen = 0, tmpalloc = 0;
-
-                           tmpstr = _edje_strbuf_append2(tmpstr, "fonts/", 
-                                                         &tmplen, &tmpalloc);
-                           tmpstr = _edje_strbuf_append2(tmpstr, val, 
-                                                         &tmplen, &tmpalloc);
-                           (*tag_ret)->font = eina_stringshare_add(tmpstr);
-                           free(tmpstr);
+                           Eina_Strbuf *tmp;
+
+                           tmp = eina_strbuf_new();
+                           eina_strbuf_append(tmp, "fonts/");
+                           eina_strbuf_append(tmp, val);
+                           (*tag_ret)->font = eina_stringshare_add(eina_strbuf_string_get(tmp));
+                           eina_strbuf_free(tmp);
                         }
                       else
                         {
@@ -197,11 +133,11 @@ _edje_format_reparse(Edje_File *edf, const char *str, Edje_Style_Tag **tag_ret)
               }
             else /* Otherwise add to tag buffer */
               {
-                 s2 = _edje_str_escape(item);
+                 s2 = eina_str_escape(item);
                  if (s2)
                    {
-                      if (newstr) newstr = _edje_strbuf_append2(newstr, " ", &newlen, &newalloc);
-                      newstr = _edje_strbuf_append2(newstr, s2, &newlen, &newalloc);
+                      if (eina_strbuf_length_get(txt)) eina_strbuf_append(txt, " ");
+                      eina_strbuf_append(txt, s2);
                       free(s2);
                    }
               }
@@ -210,12 +146,14 @@ _edje_format_reparse(Edje_File *edf, const char *str, Edje_Style_Tag **tag_ret)
          }
        else
          {
-            if (newstr) newstr = _edje_strbuf_append2(newstr, " ", &newlen, &newalloc);
-            newstr = _edje_strbuf_append2(newstr, item, &newlen, &newalloc);
+            if (eina_strbuf_length_get(txt)) eina_strbuf_append(txt, " ");
+            eina_strbuf_append(txt, item);
          }
        free(item);
      }
-   return newstr;
+   ret = eina_strbuf_string_remove(txt);
+   eina_strbuf_free(txt);
+   return ret;
 }
 
 /* Update all evas_styles which are in an edje
@@ -234,8 +172,9 @@ _edje_textblock_style_all_update(Edje *ed)
      {
        Edje_Style_Tag *tag;
        Edje_Text_Class *tc;
-       int bufalloc = 0, buflen = 0, found = 0;
-       char *buf = NULL, *fontset = NULL, *fontsource = NULL;
+       Eina_Strbuf *txt;
+       int found = 0;
+       char *fontset = NULL, *fontsource = NULL;
 
        /* Make sure the style is already defined */
        if (!stl->style) break;
@@ -247,10 +186,11 @@ _edje_textblock_style_all_update(Edje *ed)
        /* No text classes , goto next style */
        if (!found) continue;
        found = 0;
+       txt = eina_strbuf_new();
 
        if (_edje_fontset_append)
-         fontset = _edje_str_escape(_edje_fontset_append);
-       fontsource = _edje_str_escape(ed->file->path);
+         fontset = eina_str_escape(_edje_fontset_append);
+       fontsource = eina_str_escape(ed->file->path);
 
        /* Build the style from each tag */
        EINA_LIST_FOREACH(stl->tags, ll, tag)
@@ -258,8 +198,8 @@ _edje_textblock_style_all_update(Edje *ed)
             if (!tag->key) continue;
 
             /* Add Tag Key */
-            buf = _edje_strbuf_append2(buf, tag->key, &buflen, &bufalloc);
-            buf = _edje_strbuf_append2(buf, "='", &buflen, &bufalloc);
+            eina_strbuf_append(txt, tag->key);
+            eina_strbuf_append(txt, "='");
 
             /* Configure fonts from text class if it exists */
             if ((tc = _edje_text_class_find(ed, tag->text_class)))
@@ -269,19 +209,19 @@ _edje_textblock_style_all_update(Edje *ed)
               }
 
             /* Add and Ha`ndle tag parsed data */
-            buf = _edje_strbuf_append2(buf, tag->value, &buflen, &bufalloc);
+            eina_strbuf_append(txt, tag->value);
 
             if (!strcmp(tag->key, "DEFAULT"))
               {
                  if (fontset)
                    {
-                      buf = _edje_strbuf_append2(buf, " ", &buflen, &bufalloc);
-                      buf = _edje_strbuf_append2(buf, "font_fallbacks=", &buflen, &bufalloc);
-                      buf = _edje_strbuf_append2(buf, fontset, &buflen, &bufalloc);
+                      eina_strbuf_append(txt, " ");
+                      eina_strbuf_append(txt, "font_fallbacks=");
+                      eina_strbuf_append(txt, fontset);
                    }
-                 buf = _edje_strbuf_append2(buf, " ", &buflen, &bufalloc);
-                 buf = _edje_strbuf_append2(buf, "font_source=", &buflen, &bufalloc);
-                 buf = _edje_strbuf_append2(buf, fontsource, &buflen, &bufalloc);
+                 eina_strbuf_append(txt, " ");
+                 eina_strbuf_append(txt, "font_source=");
+                 eina_strbuf_append(txt, fontsource);
               }
             if (tag->font_size != 0)
               {
@@ -292,31 +232,31 @@ _edje_textblock_style_all_update(Edje *ed)
                  else
                    snprintf(font_size, sizeof(font_size), "%f", tag->font_size);
 
-                 buf = _edje_strbuf_append2(buf, " ", &buflen, &bufalloc);
-                 buf = _edje_strbuf_append2(buf, "font_size=", &buflen, &bufalloc);
-                 buf = _edje_strbuf_append2(buf, font_size, &buflen, &bufalloc);
+                 eina_strbuf_append(txt, " ");
+                 eina_strbuf_append(txt, "font_size=");
+                 eina_strbuf_append(txt, font_size);
               }
             /* Add font name last to save evas from multiple loads */
             if (tag->font)
               {
                  const char *f;
 
-                 buf = _edje_strbuf_append2(buf, " ", &buflen, &bufalloc);
-                 buf = _edje_strbuf_append2(buf, "font=", &buflen, &bufalloc);
+                 eina_strbuf_append(txt, " ");
+                 eina_strbuf_append(txt, "font=");
 
                  f = (found) ? tc->font : tag->font;
-                 buf = _edje_strbuf_append2_escaped(buf, f, &buflen, &bufalloc);
+                 eina_strbuf_append_escaped(txt, f);
               }
             found = 0;
 
-            buf = _edje_strbuf_append2(buf, "'", &buflen, &bufalloc);
+            eina_strbuf_append(txt, "'");
          }
        if (fontset) free(fontset);
        if (fontsource) free(fontsource);
 
        /* Configure the style */
-       evas_textblock_style_set(stl->style, buf);
-       free(buf);
+       evas_textblock_style_set(stl->style, eina_strbuf_string_get(txt));
+       eina_strbuf_free(txt);
      }
 }
 
@@ -377,19 +317,19 @@ _edje_textblock_style_parse_and_fix(Edje_File *edf)
    EINA_LIST_FOREACH(edf->styles, l, stl)
      {
        Edje_Style_Tag *tag;
-       char *buf = NULL;
-       int bufalloc = 0;
-       int buflen = 0;
+       Eina_Strbuf *txt;
        char *fontset = NULL, *fontsource = NULL, *ts;
 
        if (stl->style) break;
 
+       txt = eina_strbuf_new();
+
        stl->style = evas_textblock_style_new();
-       evas_textblock_style_set(stl->style, buf);
+       evas_textblock_style_set(stl->style, NULL);
 
        if (_edje_fontset_append)
-         fontset = _edje_str_escape(_edje_fontset_append);
-       fontsource = _edje_str_escape(edf->path);
+         fontset = eina_str_escape(_edje_fontset_append);
+       fontsource = eina_str_escape(edf->path);
 
        /* Build the style from each tag */
        EINA_LIST_FOREACH(stl->tags, ll, tag)
@@ -397,8 +337,8 @@ _edje_textblock_style_parse_and_fix(Edje_File *edf)
             if (!tag->key) continue;
 
             /* Add Tag Key */
-            buf = _edje_strbuf_append2(buf, tag->key, &buflen, &bufalloc);
-            buf = _edje_strbuf_append2(buf, "='", &buflen, &bufalloc);
+            eina_strbuf_append(txt, tag->key);
+            eina_strbuf_append(txt, "='");
 
             ts = _edje_format_reparse(edf, tag->value, &(tag));
 
@@ -408,7 +348,7 @@ _edje_textblock_style_parse_and_fix(Edje_File *edf)
                  if (eet_dictionary_string_check(eet_dictionary_get(edf->ef), tag->value) == 0)
                    eina_stringshare_del(tag->value);
                  tag->value = eina_stringshare_add(ts);
-                 buf = _edje_strbuf_append2(buf, tag->value, &buflen, &bufalloc);
+                 eina_strbuf_append(txt, tag->value);
                  free(ts);
               }
 
@@ -416,38 +356,38 @@ _edje_textblock_style_parse_and_fix(Edje_File *edf)
               {
                  if (fontset)
                    {
-                      buf = _edje_strbuf_append2(buf, " ", &buflen, &bufalloc);
-                      buf = _edje_strbuf_append2(buf, "font_fallbacks=", &buflen, &bufalloc);
-                      buf = _edje_strbuf_append2(buf, fontset, &buflen, &bufalloc);
+                      eina_strbuf_append(txt, " ");
+                      eina_strbuf_append(txt, "font_fallbacks=");
+                      eina_strbuf_append(txt, fontset);
                    }
-                 buf = _edje_strbuf_append2(buf, " ", &buflen, &bufalloc);
-                 buf = _edje_strbuf_append2(buf, "font_source=", &buflen, &bufalloc);
-                 buf = _edje_strbuf_append2(buf, fontsource, &buflen, &bufalloc);
+                 eina_strbuf_append(txt, " ");
+                 eina_strbuf_append(txt, "font_source=");
+                 eina_strbuf_append(txt, fontsource);
               }
             if (tag->font_size > 0)
               {
                  char font_size[32];
 
                  snprintf(font_size, sizeof(font_size), "%f", tag->font_size);
-                 buf = _edje_strbuf_append2(buf, " ", &buflen, &bufalloc);
-                 buf = _edje_strbuf_append2(buf, "font_size=", &buflen, &bufalloc);
-                 buf = _edje_strbuf_append2(buf, font_size, &buflen, &bufalloc);
+                 eina_strbuf_append(txt, " ");
+                 eina_strbuf_append(txt, "font_size=");
+                 eina_strbuf_append(txt, font_size);
               }
             /* Add font name last to save evas from multiple loads */
             if (tag->font)
               {
-                 buf = _edje_strbuf_append2(buf, " ", &buflen, &bufalloc);
-                 buf = _edje_strbuf_append2(buf, "font=", &buflen, &bufalloc);
-                 buf = _edje_strbuf_append2_escaped(buf, tag->font, &buflen, &bufalloc);
+                 eina_strbuf_append(txt, " ");
+                 eina_strbuf_append(txt, "font=");
+                 eina_strbuf_append_escaped(txt, tag->font);
               }
-            buf = _edje_strbuf_append2(buf, "'", &buflen, &bufalloc);
+            eina_strbuf_append(txt, "'");
          }
        if (fontset) free(fontset);
        if (fontsource) free(fontsource);
 
        /* Configure the style */
-       evas_textblock_style_set(stl->style, buf);
-       free(buf);
+       evas_textblock_style_set(stl->style, eina_strbuf_string_get(txt));
+       eina_strbuf_free(txt);
      }
 }