ajwillia-ms pushed a commit to branch master. http://git.enlightenment.org/tools/examples.git/commit/?id=a688d5a1af19b7b60c071ff83535be89a0277f95
commit a688d5a1af19b7b60c071ff83535be89a0277f95 Author: Andy Williams <[email protected]> Date: Thu Nov 16 12:39:52 2017 +0000 eina: Add str/strbuf/stringshare reference examples --- reference/c/eina/src/eina_string.c | 221 +++++++++++++++++++++++++++++++++++++ reference/c/eina/src/meson.build | 7 ++ 2 files changed, 228 insertions(+) diff --git a/reference/c/eina/src/eina_string.c b/reference/c/eina/src/eina_string.c new file mode 100644 index 0000000..f4c306a --- /dev/null +++ b/reference/c/eina/src/eina_string.c @@ -0,0 +1,221 @@ +#define EFL_EO_API_SUPPORT 1 +#define EFL_BETA_API_SUPPORT 1 + +#include <stdio.h> + +#include <Eina.h> +#include <Efl_Core.h> + +static void +_string_splitjoin() +{ + const char *names = "Calvin;Leoben;D'anna;Simon;Doral;Six;Daniel;Sharon"; + char **arr; + char *joined; + int i; + + printf("Name list split\n"); + arr = eina_str_split(names, ";", 0); + for (i = 0; arr[i]; i++) + printf(" %s\n", arr[i]); + + joined = malloc(sizeof(char) * 11); + eina_str_join_len(joined, 11, '&', arr[0], strlen(arr[0]), + arr[1], strlen(arr[1])); + printf("Joined limit %s\n", joined); + + free(joined); + // To free this array we only need to free the first item and the array + free(arr[0]); + free(arr); +} + +static void +_string_case() +{ + char *str; + + str = strdup("Welcome"); + printf("String: %s\n", str); + + eina_str_toupper(&str); + printf(" Upper: %s\n", str); + eina_str_tolower(&str); + printf(" Lower: %s\n", str); + + free(str); +} + +static void +_string_startend() +{ + const char *file = "libefl.so"; + char *start; + + printf("File named %s:\n", file); + printf(" starts with \"lib\"? %d\n", eina_str_has_prefix(file, "lib")); + printf(" ends with \"efl.SO\"? %d\n", eina_str_has_suffix(file, "efl.SO")); + printf(" has extension \".SO\"? %d\n", eina_str_has_extension(file, ".SO")); + + start = malloc(sizeof(char) * 7); + eina_strlcpy(start, file, 7); + printf(" first 6 chars \"%s\"\n", start); + free(start); +} + +static void +_string_escape() +{ + const char *str; + char *tmp; + + str = "Here's some \"example\" text."; + tmp = eina_str_escape(str); + printf("String: %s\n", str); + printf("Escaped: %s\n", tmp); + free(tmp); +} + +static void +_string_time() +{ + char *time_arr; + time_t curr_time; + struct tm *info; + + curr_time = time(NULL); + info = localtime(&curr_time); + time_arr = eina_strftime("%d/%m/%Y", info); + printf("Today's Date: %s\n", time_arr); + free(time_arr); +} + +static void +_string_share() +{ + const char *str; + const char *line1 = "The Cylons were created by man. They rebelled. They " + "evolved."; + const char *line2 = "%d Cylon models. %d are known. %d live in secret. " + "%s will be revealed."; + const char *line3 = "There are many copies. And they have a plan."; + + printf("Line1: %s\n", line1); + str = eina_stringshare_add_length(line1, 31); + printf(" limited to %d: %s\n", eina_stringshare_strlen(str), str); + eina_stringshare_del(str); + + str = eina_stringshare_printf(line2, 12, 3, 4, "four"); + printf("Line2: %s\n", str); + eina_stringshare_del(str); + str = eina_stringshare_nprintf(48, line2, 12, 7, 5); + printf(" format limit (len %d): %s...\n", eina_stringshare_strlen(str), str); + eina_stringshare_del(str); + + printf("Line3: %s\n", line3); + str = eina_stringshare_add(line3); + printf(" shared: %s\n", str); + eina_stringshare_replace(&str, line1); + printf(" replaced: %s\n", str); + eina_stringshare_del(str); +} + +static void +_string_buf() +{ + Eina_Strbuf *buf, *substr; + + buf = eina_strbuf_new(); + + eina_strbuf_append_length(buf, "BUFFE", 5); + eina_strbuf_append_char(buf, 'R'); + printf("buffer: %s\n", eina_strbuf_string_get(buf)); + + eina_strbuf_tolower(buf); + printf("lower: %s\n", eina_strbuf_string_get(buf)); + + substr = eina_strbuf_substr_get(buf, 3, 2); + printf("substr: %s\n", eina_strbuf_string_get(substr)); + eina_strbuf_free(substr); + + eina_strbuf_insert_escaped(buf, "my ", 0); + printf("escaped: %s\n", eina_strbuf_string_get(buf)); + eina_strbuf_reset(buf); + printf("\n"); + + eina_strbuf_append_printf(buf, "%s%c", "buffe", 'r'); + eina_strbuf_insert_printf(buf, " %s: %d", 6, "length", (int)eina_strbuf_length_get(buf)); + printf("printf: %s\n", eina_strbuf_string_get(buf)); + + eina_strbuf_remove(buf, 7, 15); + printf("removed: %s\n", eina_strbuf_string_get(buf)); + + eina_strbuf_replace_all(buf, "buffer", "size"); + printf("replaced: %s\n", eina_strbuf_string_get(buf)); + eina_strbuf_free(buf); + printf("\n"); + + // Let's manage a new buffer with a readonly string (i.e. not malloc'd) + buf = eina_strbuf_manage_read_only_new_length("Example string", 14); + printf("manage: %s\n", eina_strbuf_string_get(buf)); + // We can still mutate as internals deal with readonly -> write + eina_strbuf_append_char(buf, '.'); + printf("append: %s\n", eina_strbuf_string_get(buf)); + + eina_strbuf_free(buf); +} + +static void +_string_buf_time() +{ + Eina_Strbuf *buf; + time_t curr_time; + struct tm *info; + + curr_time = time(NULL); + info = localtime(&curr_time); + + buf = eina_strbuf_new(); + eina_strbuf_append_strftime(buf, "%I:%M%p", info); + printf("current time: %s\n", eina_strbuf_string_get(buf)); + eina_strbuf_reset(buf); + + eina_strbuf_append(buf, "Hours, Minutes"); + // Add hours at the beginning + eina_strbuf_prepend_strftime(buf, "%I ", info); + // Insert minutes at the right position + eina_strbuf_insert_strftime(buf, "%M ", info, 10); + printf("%s\n", eina_strbuf_string_get(buf)); + + eina_strbuf_free(buf); +} + +EAPI_MAIN void +efl_main(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED) +{ + _string_splitjoin(); + printf("\n"); + + _string_case(); + printf("\n"); + + _string_startend(); + printf("\n"); + + _string_escape(); + printf("\n"); + + _string_time(); + printf("\n"); + + _string_share(); + printf("\n"); + + _string_buf(); + printf("\n"); + _string_buf_time(); + + efl_exit(0); +} +EFL_MAIN() + diff --git a/reference/c/eina/src/meson.build b/reference/c/eina/src/meson.build index 29a640a..74e0156 100644 --- a/reference/c/eina/src/meson.build +++ b/reference/c/eina/src/meson.build @@ -28,6 +28,13 @@ executable('efl_reference_eina_hash', install : true ) +executable('efl_reference_eina_string', + files(['eina_string.c']), + dependencies : deps, + include_directories : inc, + install : true +) + executable('efl_reference_eina_value', files(['eina_value.c']), dependencies : deps, --
