Mercurial > pidgin.yaz
diff src/util.c @ 7107:9220c7490cd1
[gaim-migrate @ 7672]
This is a big one: normalize() -> gaim_normalize, linkify_text() ->
gaim_markup_linkify(), gaim_get_size_string() -> gaim_str_size_to_units(),
and moved clean_pid() to main.c.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Wed, 01 Oct 2003 06:17:28 +0000 |
parents | db6bd3e794d8 |
children | 6faeeecab0dc |
line wrap: on
line diff
--- a/src/util.c Wed Oct 01 05:56:58 2003 +0000 +++ b/src/util.c Wed Oct 01 06:17:28 2003 +0000 @@ -138,214 +138,6 @@ return ret; } -char *linkify_text(const char *text) -{ - const char *c, *t, *q = NULL; - char *tmp; - char url_buf[BUF_LEN * 4]; - GString *ret = g_string_new(""); - /* Assumes you have a buffer able to cary at least BUF_LEN * 2 bytes */ - - c = text; - while (*c) { - if(!q && (*c == '\"' || *c == '\'')) { - q = c; - } else if(q) { - if(*c == *q) - q = NULL; - } else if (!g_ascii_strncasecmp(c, "<A", 2)) { - while (1) { - if (!g_ascii_strncasecmp(c, "/A>", 3)) { - break; - } - ret = g_string_append_c(ret, *c); - c++; - if (!(*c)) - break; - } - } else if ((*c=='h') && (!g_ascii_strncasecmp(c, "http://", 7) || - (!g_ascii_strncasecmp(c, "https://", 8)))) { - t = c; - while (1) { - if (badchar(*t)) { - - if (*(t) == ',' && (*(t + 1) != ' ')) { - t++; - continue; - } - - if (*(t - 1) == '.') - t--; - strncpy(url_buf, c, t - c); - url_buf[t - c] = 0; - g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", - url_buf, url_buf); - c = t; - break; - } - if (!t) - break; - t++; - - } - } else if (!g_ascii_strncasecmp(c, "www.", 4)) { - if (c[4] != '.') { - t = c; - while (1) { - if (badchar(*t)) { - if (t - c == 4) { - break; - } - - if (*(t) == ',' && (*(t + 1) != ' ')) { - t++; - continue; - } - - if (*(t - 1) == '.') - t--; - strncpy(url_buf, c, t - c); - url_buf[t - c] = 0; - g_string_append_printf(ret, - "<A HREF=\"http://%s\">%s</A>", url_buf, - url_buf); - c = t; - break; - } - if (!t) - break; - t++; - } - } - } else if (!g_ascii_strncasecmp(c, "ftp://", 6)) { - t = c; - while (1) { - if (badchar(*t)) { - if (*(t - 1) == '.') - t--; - strncpy(url_buf, c, t - c); - url_buf[t - c] = 0; - g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", - url_buf, url_buf); - c = t; - break; - } - if (!t) - break; - t++; - - } - } else if (!g_ascii_strncasecmp(c, "ftp.", 4)) { - if (c[4] != '.') { - t = c; - while (1) { - if (badchar(*t)) { - if (t - c == 4) { - break; - } - if (*(t - 1) == '.') - t--; - strncpy(url_buf, c, t - c); - url_buf[t - c] = 0; - g_string_append_printf(ret, - "<A HREF=\"ftp://%s\">%s</A>", url_buf, - url_buf); - c = t; - break; - } - if (!t) - break; - t++; - } - } - } else if (!g_ascii_strncasecmp(c, "mailto:", 7)) { - t = c; - while (1) { - if (badchar(*t)) { - if (*(t - 1) == '.') - t--; - strncpy(url_buf, c, t - c); - url_buf[t - c] = 0; - g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", - url_buf, url_buf); - c = t; - break; - } - if (!t) - break; - t++; - - } - } else if (c != text && (*c == '@')) { - char *tmp; - int flag; - int len = 0; - const char illegal_chars[] = "!@#$%^&*()[]{}/|\\<>\":;\r\n \0"; - url_buf[0] = 0; - - if (strchr(illegal_chars,*(c - 1)) || strchr(illegal_chars, *(c + 1))) - flag = 0; - else - flag = 1; - - t = c; - while (flag) { - if (badchar(*t)) { - ret = g_string_truncate(ret, ret->len - (len - 1)); - break; - } else { - len++; - tmp = g_malloc(len + 1); - tmp[len] = 0; - tmp[0] = *t; - strncpy(tmp + 1, url_buf, len - 1); - strcpy(url_buf, tmp); - url_buf[len] = 0; - g_free(tmp); - t--; - if (t < text) { - ret = g_string_assign(ret, ""); - break; - } - } - } - - t = c + 1; - - while (flag) { - if (badchar(*t)) { - char *d; - - for (d = url_buf + strlen(url_buf) - 1; *d == '.'; d--, t--) - *d = '\0'; - - g_string_append_printf(ret, "<A HREF=\"mailto:%s\">%s</A>", - url_buf, url_buf); - c = t; - - break; - } else { - strncat(url_buf, t, 1); - len++; - url_buf[len] = 0; - } - - t++; - } - } - - if (*c == 0) - break; - - ret = g_string_append_c(ret, *c); - c++; - - } - tmp = ret->str; - g_string_free(ret, FALSE); - return tmp; -} - static const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" @@ -502,7 +294,7 @@ return len/2; } -char *normalize(const char *s) +char *gaim_normalize(const char *s) { static char buf[BUF_LEN]; char *tmp; @@ -537,24 +329,6 @@ return date; } -void clean_pid(void) -{ -#ifndef _WIN32 - int status; - pid_t pid; - - do { - pid = waitpid(-1, &status, WNOHANG); - } while (pid != 0 && pid != (pid_t)-1); - if(pid == (pid_t)-1 && errno != ECHILD) { - char errmsg[BUFSIZ]; - snprintf(errmsg, BUFSIZ, "Warning: waitpid() returned %d", pid); - perror(errmsg); - } -#endif -} - - /* Look for %n, %d, or %t in msg, and replace with the sender's name, date, or time */ char *away_subs(const char *msg, const char *name) @@ -1004,7 +778,8 @@ return ret; } -char *gaim_get_size_string(size_t size) +char * +gaim_str_size_to_units(size_t size) { static const char *size_str[4] = { "bytes", "KB", "MB", "GB" }; float size_mag; @@ -1611,6 +1386,215 @@ return str2; } +char * +gaim_markup_linkify(const char *text) +{ + const char *c, *t, *q = NULL; + char *tmp; + char url_buf[BUF_LEN * 4]; + GString *ret = g_string_new(""); + /* Assumes you have a buffer able to cary at least BUF_LEN * 2 bytes */ + + c = text; + while (*c) { + if(!q && (*c == '\"' || *c == '\'')) { + q = c; + } else if(q) { + if(*c == *q) + q = NULL; + } else if (!g_ascii_strncasecmp(c, "<A", 2)) { + while (1) { + if (!g_ascii_strncasecmp(c, "/A>", 3)) { + break; + } + ret = g_string_append_c(ret, *c); + c++; + if (!(*c)) + break; + } + } else if ((*c=='h') && (!g_ascii_strncasecmp(c, "http://", 7) || + (!g_ascii_strncasecmp(c, "https://", 8)))) { + t = c; + while (1) { + if (badchar(*t)) { + + if (*(t) == ',' && (*(t + 1) != ' ')) { + t++; + continue; + } + + if (*(t - 1) == '.') + t--; + strncpy(url_buf, c, t - c); + url_buf[t - c] = 0; + g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", + url_buf, url_buf); + c = t; + break; + } + if (!t) + break; + t++; + + } + } else if (!g_ascii_strncasecmp(c, "www.", 4)) { + if (c[4] != '.') { + t = c; + while (1) { + if (badchar(*t)) { + if (t - c == 4) { + break; + } + + if (*(t) == ',' && (*(t + 1) != ' ')) { + t++; + continue; + } + + if (*(t - 1) == '.') + t--; + strncpy(url_buf, c, t - c); + url_buf[t - c] = 0; + g_string_append_printf(ret, + "<A HREF=\"http://%s\">%s</A>", url_buf, + url_buf); + c = t; + break; + } + if (!t) + break; + t++; + } + } + } else if (!g_ascii_strncasecmp(c, "ftp://", 6)) { + t = c; + while (1) { + if (badchar(*t)) { + if (*(t - 1) == '.') + t--; + strncpy(url_buf, c, t - c); + url_buf[t - c] = 0; + g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", + url_buf, url_buf); + c = t; + break; + } + if (!t) + break; + t++; + + } + } else if (!g_ascii_strncasecmp(c, "ftp.", 4)) { + if (c[4] != '.') { + t = c; + while (1) { + if (badchar(*t)) { + if (t - c == 4) { + break; + } + if (*(t - 1) == '.') + t--; + strncpy(url_buf, c, t - c); + url_buf[t - c] = 0; + g_string_append_printf(ret, + "<A HREF=\"ftp://%s\">%s</A>", url_buf, + url_buf); + c = t; + break; + } + if (!t) + break; + t++; + } + } + } else if (!g_ascii_strncasecmp(c, "mailto:", 7)) { + t = c; + while (1) { + if (badchar(*t)) { + if (*(t - 1) == '.') + t--; + strncpy(url_buf, c, t - c); + url_buf[t - c] = 0; + g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", + url_buf, url_buf); + c = t; + break; + } + if (!t) + break; + t++; + + } + } else if (c != text && (*c == '@')) { + char *tmp; + int flag; + int len = 0; + const char illegal_chars[] = "!@#$%^&*()[]{}/|\\<>\":;\r\n \0"; + url_buf[0] = 0; + + if (strchr(illegal_chars,*(c - 1)) || strchr(illegal_chars, *(c + 1))) + flag = 0; + else + flag = 1; + + t = c; + while (flag) { + if (badchar(*t)) { + ret = g_string_truncate(ret, ret->len - (len - 1)); + break; + } else { + len++; + tmp = g_malloc(len + 1); + tmp[len] = 0; + tmp[0] = *t; + strncpy(tmp + 1, url_buf, len - 1); + strcpy(url_buf, tmp); + url_buf[len] = 0; + g_free(tmp); + t--; + if (t < text) { + ret = g_string_assign(ret, ""); + break; + } + } + } + + t = c + 1; + + while (flag) { + if (badchar(*t)) { + char *d; + + for (d = url_buf + strlen(url_buf) - 1; *d == '.'; d--, t--) + *d = '\0'; + + g_string_append_printf(ret, "<A HREF=\"mailto:%s\">%s</A>", + url_buf, url_buf); + c = t; + + break; + } else { + strncat(url_buf, t, 1); + len++; + url_buf[len] = 0; + } + + t++; + } + } + + if (*c == 0) + break; + + ret = g_string_append_c(ret, *c); + c++; + + } + tmp = ret->str; + g_string_free(ret, FALSE); + return tmp; +} + gboolean gaim_url_parse(const char *url, char **ret_host, int *ret_port, char **ret_path)