edje_edit: add API for get source code of global block data

This API is annex for edje_edit_object_source_generate. Together this
API's provide a mechanism for generate source for custom groups from
a edj file or more.
This commit is contained in:
Vyacheslav Reutskiy 2016-10-11 15:50:10 +03:00
parent 49689708a6
commit 8d7ec4181e
2 changed files with 61 additions and 0 deletions

View File

@ -8163,6 +8163,17 @@ EAPI const char * edje_edit_object_source_generate(Evas_Object *obj);
EAPI char *edje_edit_full_source_generate(Evas_Object *obj);
/**
* Return source code of global block data.
*
* Remember to free the string with edje_edit_string_free()
*
* @param obj The object being edited
*
* @return Source code of global block data.
*/
EAPI const char * edje_edit_data_source_generate(Evas_Object *obj);
//@}
/******************************************************************************/
/************************** ERROR API ***********************************/

View File

@ -12791,6 +12791,56 @@ edje_edit_object_source_generate(Evas_Object *obj)
return _edje_edit_source_generate(obj, EINA_TRUE);
}
EAPI const char *
edje_edit_data_source_generate(Evas_Object *obj)
{
Eina_Strbuf *buf = NULL;
Eina_Bool ret = EINA_TRUE;
Eina_Stringshare *str = NULL;
const char *entry;
GET_ED_OR_RETURN(NULL);
if (!ed->file) return NULL;
buf = eina_strbuf_new();
/* If data items exist, print them */
if (ed->file->data)
{
Edje_String *es;
size_t data_len = 0;
char *escaped_entry = NULL;
char *escaped_string = NULL;
BUF_APPEND(I0 "data {\n");
Eina_Iterator *it = eina_hash_iterator_key_new(ed->file->data);
EINA_ITERATOR_FOREACH(it, entry)
{
es = eina_hash_find(ed->file->data, entry);
str = edje_string_get(es);
if (!str) break;
data_len = strlen(str);
/* In case when data ends with '\n' character, this item recognize
* as data.file. This data will not generated into the source code
* of group. */
if (str[data_len - 1] == '\n') continue;
escaped_entry = eina_str_escape(entry);
escaped_string = eina_str_escape(str);
BUF_APPENDF(I1 "item: \"%s\" \"%s\";\n", escaped_entry, escaped_string);
free(escaped_entry);
free(escaped_string);
}
eina_iterator_free(it);
BUF_APPEND(I0 "}\n\n");
}
/* return resulted source code of the group */
if (ret)
str = eina_stringshare_add(eina_strbuf_string_get(buf));
eina_strbuf_free(buf);
return str;
}
#undef COLLECT_RESOURCE
static Eina_Bool