Added functions, fixed functions for utf-8

This commit is contained in:
Jesse van den Kieboom 2005-11-15 11:59:11 +00:00
parent 0869686c76
commit ed6373ac1a
2 changed files with 100 additions and 36 deletions

View file

@ -188,16 +188,97 @@ gm_string_trim(const gchar *str) {
}
}
void
gm_string_remove_char(char *str, char rem) {
int i, j = 0;
for (i = 0; str[i] != '\0'; i++) {
if (str[i] != rem) {
str[j] = str[i];
j++;
}
}
str[j] = '\0';
gchar *
gm_string_remove_char(gchar *str, gchar rem) {
gchar *ptr = str;
gboolean changed = FALSE;
gunichar c;
while (*str != '\0') {
c = g_utf8_get_char(str);
if (c != (gunichar)rem) {
if (changed) {
ptr += g_unichar_to_utf8(c, ptr);
++ptr;
} else {
ptr = g_utf8_next_char(ptr);
}
} else {
changed = TRUE;
}
str = g_utf8_next_char(str);
}
*ptr = '\0';
return str;
}
void
gm_string_skip_space(gchar const **ptr) {
while (**ptr != '\0' && g_unichar_isspace(g_utf8_get_char(*ptr))) {
*ptr = g_utf8_next_char(*ptr);
}
}
void
gm_string_skip_nonspace(gchar const **ptr) {
while (**ptr != '\0' && !g_unichar_isspace(g_utf8_get_char(*ptr))) {
*ptr = g_utf8_next_char(*ptr);
}
}
void
gm_string_skip_till(gchar const **ptr, gchar const *find) {
gchar const *fptr;
gunichar check;
while (**ptr != '\0') {
check = g_utf8_get_char(*ptr);
for (fptr = find; *fptr; ++fptr) {
// CHECK: find should also be treated as utf8!
if (check == (gunichar)(*fptr)) {
return;
}
}
*ptr = g_utf8_next_char(*ptr);
}
}
gchar *
gm_string_escape(gchar const *line) {
GString *new_line;
gchar *ptr;
gunichar c;
if (*line == '\0') {
return g_strdup("");
}
if (g_utf8_strchr(line, '"', -1) || g_utf8_strchr(line, '\\', -1)) {
// We need at least strlen(line)
new_line = g_string_sized_new(strlen(line));
while (*line != '\0') {
c = g_utf8_get_char(line);
if (c == '"' || c == '\\') {
g_string_append_c(new_line, '\\');
}
g_string_append_unichar(new_line, c);
line = g_utf8_next_char(line);
}
ptr = new_line->str;
g_string_free(new_line, FALSE);
return ptr;
} else {
return g_strdup(line);
}
}

View file

@ -4,33 +4,16 @@
#include <string.h>
#include <stdlib.h>
/*typedef struct _stringlist_item stringlist_item;
struct _stringlist_item {
char *data;
stringlist_item *next;
stringlist_item *prev;
};
typedef struct _stringlist stringlist;
struct _stringlist {
stringlist_item *firstItem;
stringlist_item *lastItem;
unsigned int count;
};
void stringlist_add(stringlist * strl, char *data);
void stringlist_remove(stringlist * strl, stringlist_item * removed);
stringlist *stringlist_create(char *argstr, char *delim);
void stringlist_destroy(stringlist * strl);
char *stringlist_glue_it(stringlist * strl, char *glue);
*/
int gm_string_to_int(const gchar *str, int *result);
char *gm_string_catn(char *str, char *add, unsigned int n);
char *gm_string_cat(char *str, char *add);
char *gm_string_trim(const gchar *str);
void gm_string_remove_char(char *str, char rem);
gchar *gm_string_remove_char(gchar *str, gchar rem);
void gm_string_skip_space(gchar const **ptr);
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);
#endif