Added functions, fixed functions for utf-8
This commit is contained in:
parent
0869686c76
commit
ed6373ac1a
2 changed files with 100 additions and 36 deletions
|
@ -188,16 +188,97 @@ gm_string_trim(const gchar *str) {
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
gm_string_remove_char(char *str, char rem) {
|
||||
int i, j = 0;
|
||||
gchar *
|
||||
gm_string_remove_char(gchar *str, gchar rem) {
|
||||
gchar *ptr = str;
|
||||
gboolean changed = FALSE;
|
||||
gunichar c;
|
||||
|
||||
for (i = 0; str[i] != '\0'; i++) {
|
||||
if (str[i] != rem) {
|
||||
str[j] = str[i];
|
||||
j++;
|
||||
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[j] = '\0';
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Reference in a new issue