diff --git a/gnoemoe/gm-string.c b/gnoemoe/gm-string.c index 7aadb4f..e6e2ef1 100644 --- a/gnoemoe/gm-string.c +++ b/gnoemoe/gm-string.c @@ -1,11 +1,9 @@ #include #include -#include #include "gm-string.h" #include "gm-debug.h" - gboolean gm_string_to_int(const gchar *str, int *result) { *result = 0; @@ -183,3 +181,44 @@ gm_string_escape(gchar const *line) { return g_strdup(line); } } + +GList * +gm_string_split_add_line(gchar *line, GList *lines, GList **lastptr) { + if (!lines) { + lines = g_list_append(NULL, line); + *lastptr = lines; + } else { + g_list_append(*lastptr, line); + *lastptr = (*lastptr)->next; + } + + return lines; +} + +GList * +gm_string_split(gchar const *text) { + gchar *fptr, *line; + GList *lastptr; + GList *lines = NULL; + + if (!text) { + return NULL; + } + + while ((fptr = g_utf8_strchr(text, -1, '\n'))) { + line = g_strndup(text, fptr - text); + gm_string_remove_char(line, '\r'); + + lines = gm_string_split_add_line(line, lines, &lastptr); + text = g_utf8_next_char(fptr); + } + + if (*text != '\0') { + line = g_strdup(text); + gm_string_remove_char(line, '\r'); + + lines = gm_string_split_add_line(line, lines, &lastptr); + } + + return lines; +} diff --git a/gnoemoe/gm-string.h b/gnoemoe/gm-string.h index ab0b876..51742b8 100644 --- a/gnoemoe/gm-string.h +++ b/gnoemoe/gm-string.h @@ -3,6 +3,7 @@ #include #include +#include int gm_string_to_int(const gchar *str, int *result); char *gm_string_catn(char *str, char *add, unsigned int n); @@ -15,5 +16,6 @@ void gm_string_skip_nonspace(gchar const **ptr); void gm_string_skip_till(gchar const **ptr, gchar const *find); gchar *gm_string_escape(gchar const *line); +GList *gm_string_split(gchar const *text); #endif