# HG changeset patch # User Andreas Monitzer # Date 1184208690 0 # Node ID 42939d215988d2b7d45276d89d1e6bb77a2f184a # Parent b70664a62de81ac6c714fb4ee22d2689d83a9b49# Parent ddaedccb25b0b6369df24e1432faa65363c36df7 merge of '34c6d2f9e1c14630370e582d136064c340ef8e88' and '4539cc7ee5b462dcae69d1993ee6f10c2c819964' diff -r b70664a62de8 -r 42939d215988 libpurple/util.c --- a/libpurple/util.c Thu Jul 12 02:20:55 2007 +0000 +++ b/libpurple/util.c Thu Jul 12 02:51:30 2007 +0000 @@ -1416,6 +1416,7 @@ ALLOW_TAG("q"); ALLOW_TAG("span"); ALLOW_TAG("strong"); + ALLOW_TAG("ul"); /* we skip
because it's not legal in XHTML-IM. However, @@ -1434,40 +1435,6 @@ plain = g_string_append_c(plain, '\n'); continue; } - if(!g_ascii_strncasecmp(c, "' || *(c+4) == ' ')) { - const char *p = c; - GString *src = NULL; - struct purple_parse_tag *pt; - while(*p && *p != '>') { - if(!g_ascii_strncasecmp(p, "src=", strlen("src="))) { - const char *q = p + strlen("src="); - src = g_string_new(""); - if(*q == '\'' || *q == '\"') - q++; - while(*q && *q != '\"' && *q != '\'' && *q != ' ') { - src = g_string_append_c(src, *q); - q++; - } - p = q; - } - p++; - } - if ((c = strchr(c, '>')) != NULL) - c++; - else - c = p; - pt = g_new0(struct purple_parse_tag, 1); - pt->src_tag = "img"; - pt->dest_tag = "img"; - tags = g_list_prepend(tags, pt); - if(xhtml && src && src->len) - g_string_append_printf(xhtml, "", g_strstrip(src->str)); - else - pt->ignore = TRUE; - if (src) - g_string_free(src, TRUE); - continue; - } if(!g_ascii_strncasecmp(c, "", 3) || !g_ascii_strncasecmp(c, "", strlen(""))) { struct purple_parse_tag *pt = g_new0(struct purple_parse_tag, 1); pt->src_tag = *(c+2) == '>' ? "b" : "bold"; @@ -1518,6 +1485,50 @@ xhtml = g_string_append(xhtml, ""); continue; } + if(!g_ascii_strncasecmp(c, "' || *(c+4) == ' ')) { + const char *p = c; + GString *src = NULL, *alt = NULL; + while(*p && *p != '>') { + if(!g_ascii_strncasecmp(p, "src=", strlen("src="))) { + const char *q = p + strlen("src="); + src = g_string_new(""); + if(*q == '\'' || *q == '\"') + q++; + while(*q && *q != '\"' && *q != '\'' && *q != ' ') { + src = g_string_append_c(src, *q); + q++; + } + p = q; + } else if(!g_ascii_strncasecmp(p, "alt=", strlen("alt="))) { + const char *q = p + strlen("alt="); + alt = g_string_new(""); + if(*q == '\'' || *q == '\"') + q++; + while(*q && *q != '\"' && *q != '\'' && *q != ' ') { + alt = g_string_append_c(alt, *q); + q++; + } + p = q; + } + p++; + } + if ((c = strchr(c, '>')) != NULL) + c++; + else + c = p; + /* src and alt are required! */ + if(src && xhtml) + g_string_append_printf(xhtml, "%s", g_strstrip(src->str), alt?alt->str:""); + if(alt) { + if(plain) + plain = g_string_append(plain, alt->str); + if(!src && xhtml) + xhtml = g_string_append(xhtml, alt->str); + } + g_string_free(alt, TRUE); + g_string_free(src, TRUE); + continue; + } if(!g_ascii_strncasecmp(c, "' || *(c+2) == ' ')) { const char *p = c; struct purple_parse_tag *pt; @@ -1721,7 +1732,7 @@ struct purple_parse_tag *pt = tag->data; if(!pt->ignore) g_string_append_printf(xhtml, "", pt->dest_tag); - } + g_list_free(tags); } *xhtml_out = g_strdup(xhtml->str); if(xhtml_out)