Mercurial > ~mikael > mcabber > hg
diff mcabber/mcabber/nohtml.c @ 2251:f3bd1564fa70
Stop html-escaping otr messages and do only strip known tags.
We'd like to remove that for good, but pidgin-otr and Adium are still
sending html tags.
author | franky |
---|---|
date | Fri, 19 Feb 2016 22:14:15 +0100 |
parents | e6d355e50d7a |
children | f5402d705f67 |
line wrap: on
line diff
--- a/mcabber/mcabber/nohtml.c Sat Feb 13 13:48:43 2016 +0100 +++ b/mcabber/mcabber/nohtml.c Fri Feb 19 22:14:15 2016 +0100 @@ -38,17 +38,15 @@ */ char *html_strip(const char *htmlbuf) { - int i, j=0; + int i, j=0, html_len; char *nohtml; if (!htmlbuf) return(NULL); nohtml = g_strdup(htmlbuf); - if (!strchr(htmlbuf, '&') && !strchr(htmlbuf, '<')) - return(nohtml); - - for (i = 0; i < (int)strlen(htmlbuf); i++) { + html_len = (int)strlen(htmlbuf); + for (i = 0; i < html_len; i++) { if (htmlbuf[i] == '&') { if (!strncmp(&htmlbuf[i],"&",5)) { nohtml[j] = '&'; @@ -65,15 +63,26 @@ } else if (!strncmp(&htmlbuf[i],">", 4)) { nohtml[j] = '>'; i += 3; + } else { + nohtml[j] = htmlbuf[i]; } - } else if (!strncmp(&htmlbuf[i],"<br>", 4) || - !strncmp(&htmlbuf[i],"<br/>", 5)) { - nohtml[j] = '\n'; - i += (htmlbuf[i+3] == '/' ? 4 : 3); } else if (htmlbuf[i] == '<') { - /* Let's strip all unknown tags */ - j--; - while (htmlbuf[++i] != '>'); + if (!strncmp(&htmlbuf[i],"<br>", 4)) { + nohtml[j] = '\n'; + i += 3; + } else if (!strncmp(&htmlbuf[i],"<br/>", 5)) { + nohtml[j] = '\n'; + i += 4; + } else if (!strncmp(&htmlbuf[i],"<FONT>", 6)) { + /* Let's strip <FONT> from Adium */ + i += 5; + j--; + } else if (!strncmp(&htmlbuf[i],"</FONT>", 7)) { + i += 6; + j--; + } else { + nohtml[j] = htmlbuf[i]; + } } else nohtml[j] = htmlbuf[i]; j++;