+void
+modest_text_utils_get_addresses_indexes (const gchar *addresses, GSList **start_indexes, GSList **end_indexes)
+{
+ gchar *current, *start, *last_blank;
+ gint start_offset = 0, current_offset = 0;
+
+ g_return_if_fail (start_indexes != NULL);
+ g_return_if_fail (end_indexes != NULL);
+
+ start = (gchar *) addresses;
+ current = start;
+ last_blank = start;
+
+ while (*current != '\0') {
+ if ((start == current)&&((*current == ' ')||(*current == ',')||(*current == ';'))) {
+ start = g_utf8_next_char (start);
+ start_offset++;
+ last_blank = current;
+ } else if ((*current == ',')||(*current == ';')) {
+ gint *start_index, *end_index;
+ start_index = g_new0(gint, 1);
+ end_index = g_new0(gint, 1);
+ *start_index = start_offset;
+ *end_index = current_offset;
+ *start_indexes = g_slist_prepend (*start_indexes, start_index);
+ *end_indexes = g_slist_prepend (*end_indexes, end_index);
+ start = g_utf8_next_char (current);
+ start_offset = current_offset + 1;
+ last_blank = start;
+ } else if (*current == '"') {
+ current = g_utf8_next_char (current);
+ current_offset ++;
+ while ((*current != '"')&&(*current != '\0')) {
+ current = g_utf8_next_char (current);
+ current_offset ++;
+ }
+ }
+
+ current = g_utf8_next_char (current);
+ current_offset ++;
+ }
+
+ if (start != current) {
+ gint *start_index, *end_index;
+ start_index = g_new0(gint, 1);
+ end_index = g_new0(gint, 1);
+ *start_index = start_offset;
+ *end_index = current_offset;
+ *start_indexes = g_slist_prepend (*start_indexes, start_index);
+ *end_indexes = g_slist_prepend (*end_indexes, end_index);
+ }
+
+ *start_indexes = g_slist_reverse (*start_indexes);
+ *end_indexes = g_slist_reverse (*end_indexes);
+
+ return;
+}