changeset 7096:d88d79507276

[gaim-migrate @ 7661] And nuke html.[ch]. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Wed, 01 Oct 2003 03:44:00 +0000
parents c8bf2da398e3
children 2c331b10161e
files src/html.c src/html.h
diffstat 2 files changed, 0 insertions(+), 458 deletions(-) [+]
line wrap: on
line diff
--- a/src/html.c	Wed Oct 01 03:43:18 2003 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,427 +0,0 @@
-/*
- * gaim
- *
- * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net>
- *               2003, Nathan Walp <faceprint@faceprint.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-#include "internal.h"
-
-#include "debug.h"
-#include "html.h"
-#include "proxy.h"
-
-#include "gaim.h"
-
-gchar *strip_html(const gchar *text)
-{
-	int i, j, k;
-	int visible = 1;
-	gchar *text2 = g_strdup(text);
-
-	if(!text)
-		return NULL;
-
-	for (i = 0, j = 0; text2[i]; i++) {
-		if (text2[i] == '<') {
-			k = i + 1;
-			if(g_ascii_isspace(text2[k])) {
-				visible = 1;
-			} else {
-				while (text2[k]) {
-					if (text2[k] == '<') {
-						visible = 1;
-						break;
-					}
-					if (text2[k] == '>') {
-						visible = 0;
-						break;
-					}
-					k++;
-				}
-			}
-		} else if (text2[i] == '>' && !visible) {
-			visible = 1;
-			continue;
-		}
-		if (text2[i] == '&' && strncasecmp(text2+i,"&quot;",6) == 0) {
-		    text2[j++] = '\"';
-		    i = i+5;
-		    continue;
-		}
-		if (visible) {
-			text2[j++] = text2[i];
-		}
-	}
-	text2[j] = '\0';
-	return text2;
-}
-
-struct gaim_parse_tag {
-	char *src_tag;
-	char *dest_tag;
-};
-
-#define ALLOW_TAG_ALT(x, y) if(!g_ascii_strncasecmp(c, "<" x " ", strlen("<" x " "))) { \
-						const char *o = c + strlen("<" x); \
-						const char *p = NULL, *q = NULL, *r = NULL; \
-						GString *innards = g_string_new(""); \
-						while(o && *o) { \
-							if(!q && (*o == '\"' || *o == '\'') ) { \
-								q = o; \
-							} else if(q) { \
-								if(*o == *q) { \
-									char *unescaped = g_strndup(q+1, o-q-1); \
-									char *escaped = g_markup_escape_text(unescaped, -1); \
-									g_string_append_printf(innards, "%c%s%c", *q, escaped, *q); \
-									g_free(unescaped); \
-									g_free(escaped); \
-									q = NULL; \
-								} else if(*c == '\\') { \
-									o++; \
-								} \
-							} else if(*o == '<') { \
-								r = o; \
-							} else if(*o == '>') { \
-								p = o; \
-								break; \
-							} else { \
-								innards = g_string_append_c(innards, *o); \
-							} \
-							o++; \
-						} \
-						if(p && !r) { \
-							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(xhtml, innards->str); \
-							xhtml = g_string_append_c(xhtml, '>'); \
-							c = p + 1; \
-						} else { \
-							xhtml = g_string_append(xhtml, "&lt;"); \
-							plain = g_string_append_c(plain, '<'); \
-							c++; \
-						} \
-						g_string_free(innards, TRUE); \
-						continue; \
-					} \
-						if(!g_ascii_strncasecmp(c, "<" x, strlen("<" x)) && \
-								(*(c+strlen("<" x)) == '>' || \
-								 !g_ascii_strncasecmp(c+strlen("<" x), "/>", 2))) { \
-							xhtml = g_string_append(xhtml, "<" y); \
-							c += strlen("<" x); \
-							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); \
-								xhtml = g_string_append_c(xhtml, '>'); \
-							} else { \
-								xhtml = g_string_append(xhtml, "/>");\
-							} \
-							c = strchr(c, '>') + 1; \
-							continue; \
-						}
-#define ALLOW_TAG(x) ALLOW_TAG_ALT(x, x)
-
-void html_to_xhtml(const char *html, char **xhtml_out, char **plain_out) {
-	GString *xhtml = g_string_new("");
-	GString *plain = g_string_new("");
-	GList *tags = NULL, *tag;
-	const char *c = html;
-
-	while(c && *c) {
-		if(*c == '<') {
-			if(*(c+1) == '/') { /* closing tag */
-				tag = tags;
-				while(tag) {
-					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) {
-						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, 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
-					 * and move on */
-					xhtml = g_string_append(xhtml, "&lt;");
-					plain = g_string_append_c(plain, '<');
-					c++;
-				}
-			} else { /* opening tag */
-				ALLOW_TAG("a");
-				ALLOW_TAG_ALT("b", "strong");
-				ALLOW_TAG("blockquote");
-				ALLOW_TAG_ALT("bold", "strong");
-				ALLOW_TAG("cite");
-				ALLOW_TAG("div");
-				ALLOW_TAG("em");
-				ALLOW_TAG("h1");
-				ALLOW_TAG("h2");
-				ALLOW_TAG("h3");
-				ALLOW_TAG("h4");
-				ALLOW_TAG("h5");
-				ALLOW_TAG("h6");
-				/* we only allow html to start the message */
-				if(c == html)
-					ALLOW_TAG("html");
-				ALLOW_TAG_ALT("i", "em");
-				ALLOW_TAG_ALT("italic", "em");
-				ALLOW_TAG("li");
-				ALLOW_TAG("ol");
-				ALLOW_TAG("p");
-				ALLOW_TAG("pre");
-				ALLOW_TAG("q");
-				ALLOW_TAG("span");
-				ALLOW_TAG("strong");
-				ALLOW_TAG("ul");
-
-				/* we skip <HR> because it's not legal in XHTML-IM.  However,
-				 * we still want to send something sensible, so we put a
-				 * linebreak in its place. <BR> also needs special handling
-				 * because putting a </BR> to close it would just be dumb. */
-				if((!g_ascii_strncasecmp(c, "<br", 3)
-							|| !g_ascii_strncasecmp(c, "<hr", 3))
-						&& (*(c+3) == '>' ||
-							!g_ascii_strncasecmp(c+3, "/>", 2) ||
-							!g_ascii_strncasecmp(c+3, " />", 3))) {
-					c = strchr(c, '>') + 1;
-					xhtml = g_string_append(xhtml, "<br/>");
-					if(*c != '\n')
-						plain = g_string_append_c(plain, '\n');
-					continue;
-				}
-				if(!g_ascii_strncasecmp(c, "<u>", 3) || !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>", 3) || !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, "<font", 5) && (*(c+5) == '>' || *(c+5) == ' ')) {
-					const char *p = c;
-					GString *style = g_string_new("");
-					struct gaim_parse_tag *pt;
-					while(*p && *p != '>') {
-						if(!g_ascii_strncasecmp(p, "color=", strlen("color="))) {
-							const char *q = p + strlen("color=");
-							GString *color = g_string_new("");
-							if(*q == '\'' || *q == '\"')
-								q++;
-							while(*q && *q != '\"' && *q != '\'' && *q != ' ') {
-								color = g_string_append_c(color, *q);
-								q++;
-							}
-							g_string_append_printf(style, "color: %s; ", color->str);
-							g_string_free(color, TRUE);
-							p = q;
-						} else if(!g_ascii_strncasecmp(p, "face=", strlen("face="))) {
-							const char *q = p + strlen("face=");
-							gboolean space_allowed = FALSE;
-							GString *face = g_string_new("");
-							if(*q == '\'' || *q == '\"') {
-								space_allowed = TRUE;
-								q++;
-							}
-							while(*q && *q != '\"' && *q != '\'' && (space_allowed || *q != ' ')) {
-								face = g_string_append_c(face, *q);
-								q++;
-							}
-							g_string_append_printf(style, "font-family: %s; ", face->str);
-							g_string_free(face, TRUE);
-							p = q;
-						} else if(!g_ascii_strncasecmp(p, "size=", strlen("size="))) {
-							const char *q = p + strlen("size=");
-							int sz;
-							const char *size = "medium";
-							if(*q == '\'' || *q == '\"')
-								q++;
-							sz = atoi(q);
-							if(sz < 3)
-								size = "smaller";
-							else if(sz > 3)
-								size = "larger";
-							g_string_append_printf(style, "font-size: %s; ", size);
-							p = q;
-						}
-						p++;
-					}
-					c = strchr(c, '>') + 1;
-					pt = g_new0(struct gaim_parse_tag, 1);
-					pt->src_tag = "font";
-					pt->dest_tag = "span";
-					tags = g_list_prepend(tags, pt);
-					xhtml = g_string_append(xhtml, "<span");
-					if(style->len)
-						g_string_append_printf(xhtml, " style='%s'", style->str);
-					xhtml = g_string_append_c(xhtml, '>');
-					g_string_free(style, TRUE);
-					continue;
-				}
-				if(!g_ascii_strncasecmp(c, "<body ", 6)) {
-					const char *p = c;
-					gboolean did_something = FALSE;
-					while(*p && *p != '>') {
-						if(!g_ascii_strncasecmp(p, "bgcolor=", strlen("bgcolor="))) {
-							const char *q = p + strlen("bgcolor=");
-							struct gaim_parse_tag *pt = g_new0(struct gaim_parse_tag, 1);
-							GString *color = g_string_new("");
-							if(*q == '\'' || *q == '\"')
-								q++;
-							while(*q && *q != '\"' && *q != '\'' && *q != ' ') {
-								color = g_string_append_c(color, *q);
-								q++;
-							}
-							g_string_append_printf(xhtml, "<span style='background: %s;'>", color->str);
-							g_string_free(color, TRUE);
-							c = strchr(c, '>') + 1;
-							pt->src_tag = "body";
-							pt->dest_tag = "span";
-							tags = g_list_prepend(tags, pt);
-							did_something = TRUE;
-							break;
-						}
-						p++;
-					}
-					if(did_something) continue;
-				}
-				/* this has to come after the special case for bgcolor */
-				ALLOW_TAG("body");
-				if(!g_ascii_strncasecmp(c, "<!--", strlen("<!--"))) {
-					char *p = strstr(c + strlen("<!--"), "-->");
-					if(p) {
-						xhtml = g_string_append(xhtml, "<!--");
-						c += strlen("<!--");
-						continue;
-					}
-				}
-
-				xhtml = g_string_append(xhtml, "&lt;");
-				plain = g_string_append_c(plain, '<');
-				c++;
-			}
-		} else {
-			xhtml = g_string_append_c(xhtml, *c);
-			plain = g_string_append_c(plain, *c);
-			c++;
-		}
-	}
-	tag = tags;
-	while(tag) {
-		g_string_append_printf(xhtml, "</%s>", (char *)tag->data);
-		tag = tag->next;
-	}
-	g_list_free(tags);
-	if(xhtml_out)
-		*xhtml_out = g_strdup(xhtml->str);
-	if(plain_out)
-		*plain_out = g_strdup(plain->str);
-	g_string_free(xhtml, TRUE);
-	g_string_free(plain, TRUE);
-}
-
-int info_extract_field(const char *original, char *add_to, char *start_tok,
-		int skip, char *end_tok, char check_value, char *no_value_tok,
-		char *display_name, int islink, char *link_prefix)
-{
-	char *p, *q;
-	char buf[1024];
-	if (!original || !add_to || !start_tok ||
-			!end_tok || !display_name)
-		return 0;
-	p = strstr(original, start_tok);
-	if (p) {
-		p += strlen(start_tok) + skip;
-		if (!check_value || (*p != check_value)) {
-			q = strstr(p, end_tok);
-			if (q && (!no_value_tok ||
-						(no_value_tok && strncmp(p, no_value_tok, strlen(no_value_tok))))) {
-				strcat(add_to, "<b>");
-				strcat(add_to, display_name);
-				strcat(add_to, ":</b> ");
-				if (islink) {
-					strcat(add_to, "<br><a href=\"");
-					memcpy(buf, p, q-p);
-					buf[q-p] = '\0';
-					if (link_prefix)
-						strcat(add_to, link_prefix);
-					strcat(add_to, buf);
-					strcat(add_to, "\">");
-					if (link_prefix)
-						strcat(add_to, link_prefix);
-					strcat(add_to, buf);
-					strcat(add_to, "</a>");
-				} else {
-					memcpy(buf, p, q-p);
-					buf[q-p] = '\0';
-					strcat(add_to, buf);
-				}
-				strcat(add_to, "<br>\n");
-				return 1;
-			} else
-				return 0;
-		} else
-			return 0;
-	} else
-		return 0;
-}
--- a/src/html.h	Wed Oct 01 03:43:18 2003 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-/**
- * @file html.h HTML Utility API
- * @ingroup core
- *
- * gaim
- *
- * Copyright (C) 2003 Christian Hammond <chipx86@gnupdate.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-#ifndef _GAIM_HTML_H_
-#define _GAIM_HTML_H_
-
-gchar *strip_html(const gchar *text);
-void html_to_xhtml(const char *html, char **xhtml_out, char **plain_out);
-int info_extract_field(const char *, char *, char *, int,
-				char *, char, char *, char *, int, char *);
-
-#endif /* _GAIM_HTML_H_ */