comparison libpurple/util.c @ 17897:ca20c706ee50

Allowing img tags in XHTML messages (for MSN-style custom emoticons and other features).
author Andreas Monitzer <pidgin@monitzer.com>
date Tue, 10 Jul 2007 12:06:41 +0000
parents 1b74553c5c08
children 7cffeebc301c ba48f21e0795
comparison
equal deleted inserted replaced
17896:a8420fd18545 17897:ca20c706ee50
1424 pt->src_tag = "sup"; 1424 pt->src_tag = "sup";
1425 pt->dest_tag = "span"; 1425 pt->dest_tag = "span";
1426 tags = g_list_prepend(tags, pt); 1426 tags = g_list_prepend(tags, pt);
1427 c = strchr(c, '>') + 1; 1427 c = strchr(c, '>') + 1;
1428 xhtml = g_string_append(xhtml, "<span style='vertical-align:super;'>"); 1428 xhtml = g_string_append(xhtml, "<span style='vertical-align:super;'>");
1429 continue;
1430 }
1431 if(!g_ascii_strncasecmp(c, "<img", 4) && (*(c+4) == '>' || *(c+4) == ' ')) {
1432 const char *p = c;
1433 GString *src = NULL, *alt = NULL;
1434 while(*p && *p != '>') {
1435 if(!g_ascii_strncasecmp(p, "src=", strlen("src="))) {
1436 const char *q = p + strlen("src=");
1437 src = g_string_new("");
1438 if(*q == '\'' || *q == '\"')
1439 q++;
1440 while(*q && *q != '\"' && *q != '\'' && *q != ' ') {
1441 src = g_string_append_c(src, *q);
1442 q++;
1443 }
1444 p = q;
1445 } else if(!g_ascii_strncasecmp(p, "alt=", strlen("alt="))) {
1446 const char *q = p + strlen("alt=");
1447 alt = g_string_new("");
1448 if(*q == '\'' || *q == '\"')
1449 q++;
1450 while(*q && *q != '\"' && *q != '\'' && *q != ' ') {
1451 alt = g_string_append_c(alt, *q);
1452 q++;
1453 }
1454 p = q;
1455 }
1456 p++;
1457 }
1458 if ((c = strchr(c, '>')) != NULL)
1459 c++;
1460 else
1461 c = p;
1462 /* src and alt are required! */
1463 if(src && alt)
1464 g_string_append_printf(xhtml, "<img src='%s' alt='%s' />", g_strstrip(src->str), alt->str);
1465 if(alt) {
1466 plain = g_string_append(plain, alt->str);
1467 if(!src)
1468 xhtml = g_string_append(xhtml, alt->str);
1469 }
1429 continue; 1470 continue;
1430 } 1471 }
1431 if(!g_ascii_strncasecmp(c, "<a", 2) && (*(c+2) == '>' || *(c+2) == ' ')) { 1472 if(!g_ascii_strncasecmp(c, "<a", 2) && (*(c+2) == '>' || *(c+2) == ' ')) {
1432 const char *p = c; 1473 const char *p = c;
1433 struct purple_parse_tag *pt; 1474 struct purple_parse_tag *pt;