Mercurial > pidgin
changeset 5104:a20a644e0da4
[gaim-migrate @ 5467]
getting better...
gaim will ignore the <span> tags for now, until we can really make use of them
committer: Tailor Script <tailor@pidgin.im>
author | Nathan Walp <nwalp@pidgin.im> |
---|---|
date | Fri, 11 Apr 2003 00:52:02 +0000 |
parents | bfcf72c5a930 |
children | 4cfc49e31c2e |
files | src/gtkimhtml.c src/html.c |
diffstat | 2 files changed, 67 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/src/gtkimhtml.c Thu Apr 10 22:53:57 2003 +0000 +++ b/src/gtkimhtml.c Fri Apr 11 00:52:02 2003 +0000 @@ -723,6 +723,9 @@ VALID_TAG ("STRONG"); VALID_TAG ("/STRONG"); + VALID_OPT_TAG ("SPAN"); + VALID_TAG ("/SPAN"); + if (!g_ascii_strncasecmp(string, "!--", strlen ("!--"))) { gchar *e = strstr (string + strlen("!--"), "-->"); if (e) { @@ -1188,8 +1191,10 @@ case 49: /* HTML (opt) */ case 50: /* CITE */ case 51: /* /CITE */ + case 56: /* SPAN */ + case 57: /* /SPAN */ break; - case 56: /* comment */ + case 58: /* comment */ NEW_BIT (NEW_TEXT_BIT); if (imhtml->show_comments) wpos = g_snprintf (ws, len, "%s", tag);
--- a/src/html.c Thu Apr 10 22:53:57 2003 +0000 +++ b/src/html.c Fri Apr 11 00:52:02 2003 +0000 @@ -323,12 +323,21 @@ } } +struct gaim_parse_tag { + char *src_tag; + char *dest_tag; +}; + #define ALLOW_TAG_ALT(x, y) if(!g_ascii_strncasecmp(c, "<" x " ", strlen("<" x " "))) { \ char *o = strchr(c+1, '<'); \ char *p = strchr(c+1, '>'); \ if(p && (!o || p < o)) { \ - if(*(p-1) != '/') \ - tags = g_list_prepend(tags, y); \ + if(*(p-1) != '/') { \ + struct gaim_parse_tag *pt = g_new0(struct gaim_parse_tag, 1); \ + pt->src_tag = x; \ + pt->dest_tag = y; \ + tags = g_list_prepend(tags, pt); \ + } \ xhtml = g_string_append(xhtml, "<" y); \ c += strlen("<" x ); \ xhtml = g_string_append_len(xhtml, c, (p - c) + 1); \ @@ -343,8 +352,12 @@ !g_ascii_strncasecmp(c+strlen("<" x), "/>", 2))) { \ xhtml = g_string_append(xhtml, "<" y); \ c += strlen("<" x); \ - if(*c != '/') \ - tags = g_list_prepend(tags, y); \ + if(*c != '/') { \ + struct gaim_parse_tag *pt = g_new0(struct gaim_parse_tag, 1); \ + pt->src_tag = x; \ + pt->dest_tag = y; \ + tags = g_list_prepend(tags, pt); \ + } \ continue; \ } #define ALLOW_TAG(x) ALLOW_TAG_ALT(x, x) @@ -372,19 +385,23 @@ if(*(c+1) == '/') { /* closing tag */ tag = tags; while(tag) { - if(!g_ascii_strncasecmp((c+2), tag->data, strlen(tag->data)) && *(c+strlen(tag->data)+2) == '>') { - c += strlen(tag->data) + 3; + struct gaim_parse_tag *pt = tag->data; + if(!g_ascii_strncasecmp((c+2), pt->src_tag, strlen(pt->src_tag)) && *(c+strlen(pt->src_tag)+2) == '>') { + c += strlen(pt->src_tag) + 3; break; } tag = tag->next; } if(tag) { while(tags) { - g_string_append_printf(xhtml, "</%s>", (char *)tags->data); + struct gaim_parse_tag *pt = tags->data; + g_string_append_printf(xhtml, "</%s>", pt->dest_tag); if(tags == tag) break; - tags = g_list_remove(tags, tags->data); + tags = g_list_remove(tags, pt); + g_free(pt); } + g_free(tag->data); tags = g_list_remove(tags, tag->data); } else { /* we tried to close a tag we never opened! escape it @@ -418,16 +435,46 @@ ALLOW_TAG("p"); ALLOW_TAG("pre"); ALLOW_TAG("q"); - ALLOW_TAG_ALT("s", "strike"); /* FIXME: see strike */ ALLOW_TAG("span"); - ALLOW_TAG("strike"); /* FIXME: not valid, need to convert */ ALLOW_TAG("strong"); - ALLOW_TAG("sub"); /* FIXME: not valid, need to convert */ - ALLOW_TAG("sup"); /* FIXME: not valid, need to convert */ - ALLOW_TAG("u"); /* FIXME: need to convert */ - ALLOW_TAG_ALT("underline","u"); /* FIXME: need to convert */ ALLOW_TAG("ul"); + if(!g_ascii_strncasecmp(c, "<u>", 2) || !g_ascii_strncasecmp(c, "<underline>", strlen("<underline>"))) { + struct gaim_parse_tag *pt = g_new0(struct gaim_parse_tag, 1); + pt->src_tag = *(c+2) == '>' ? "u" : "underline"; + pt->dest_tag = "span"; + tags = g_list_prepend(tags, pt); + c = strchr(c, '>') + 1; + xhtml = g_string_append(xhtml, "<span style='text-decoration: underline;'>"); + continue; + } + if(!g_ascii_strncasecmp(c, "<s>", 2) || !g_ascii_strncasecmp(c, "<strike>", strlen("<strike>"))) { + struct gaim_parse_tag *pt = g_new0(struct gaim_parse_tag, 1); + pt->src_tag = *(c+2) == '>' ? "s" : "strike"; + pt->dest_tag = "span"; + tags = g_list_prepend(tags, pt); + c = strchr(c, '>') + 1; + xhtml = g_string_append(xhtml, "<span style='text-decoration: line-through;'>"); + continue; + } + if(!g_ascii_strncasecmp(c, "<sub>", 5)) { + struct gaim_parse_tag *pt = g_new0(struct gaim_parse_tag, 1); + pt->src_tag = "sub"; + pt->dest_tag = "span"; + tags = g_list_prepend(tags, pt); + c = strchr(c, '>') + 1; + xhtml = g_string_append(xhtml, "<span style='vertical-align:sub;'>"); + continue; + } + if(!g_ascii_strncasecmp(c, "<sup>", 5)) { + struct gaim_parse_tag *pt = g_new0(struct gaim_parse_tag, 1); + pt->src_tag = "sup"; + pt->dest_tag = "span"; + tags = g_list_prepend(tags, pt); + c = strchr(c, '>') + 1; + xhtml = g_string_append(xhtml, "<span style='vertical-align:super;'>"); + continue; + } if(!g_ascii_strncasecmp(c, "<!--", strlen("<!--"))) { char *p = strstr(c + strlen("<!--"), "-->"); if(p) {