Mercurial > pidgin
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; |