[empathy: 3/28] Abstract WebKit string parsers into empathy-webkit-utils



commit e3d0a1862508fad3d16585b0210a2a9328453c2f
Author: Danielle Madeley <danielle madeley collabora co uk>
Date:   Mon Aug 1 13:04:15 2011 +1000

    Abstract WebKit string parsers into empathy-webkit-utils
    
    This file is currently optionally built, but if the logviewer is going to
    depend on WebKit, maybe that's a bad idea? Maybe we should just make WebKit
    required (this will probably happen when we require Adium themes in the future).

 libempathy-gtk/Makefile.am            |   13 ++++-
 libempathy-gtk/empathy-theme-adium.c  |   69 ++-----------------------
 libempathy-gtk/empathy-webkit-utils.c |   91 +++++++++++++++++++++++++++++++++
 libempathy-gtk/empathy-webkit-utils.h |   32 ++++++++++++
 4 files changed, 137 insertions(+), 68 deletions(-)
---
diff --git a/libempathy-gtk/Makefile.am b/libempathy-gtk/Makefile.am
index 7023ecf..f12230d 100644
--- a/libempathy-gtk/Makefile.am
+++ b/libempathy-gtk/Makefile.am
@@ -279,16 +279,23 @@ endif
 if HAVE_WEBKIT
 libempathy_gtk_handwritten_source +=		\
 	empathy-plist.c				\
-	empathy-theme-adium.c
+	empathy-theme-adium.c			\
+	empathy-webkit-utils.c			\
+	$(NULL)
 libempathy_gtk_headers +=			\
 	empathy-plist.h				\
-	empathy-theme-adium.h
+	empathy-theme-adium.h			\
+	empathy-webkit-utils.h			\
+	$(NULL)
 else
 EXTRA_DIST +=					\
 	empathy-plist.c				\
 	empathy-plist.h				\
 	empathy-theme-adium.c			\
-	empathy-theme-adium.h
+	empathy-theme-adium.h			\
+	empathy-webkit-utils.c			\
+	empathy-webkit-utils.h			\
+	$(NULL)
 endif
 
 CLEANFILES =				\
diff --git a/libempathy-gtk/empathy-theme-adium.c b/libempathy-gtk/empathy-theme-adium.c
index 14e149e..874f559 100644
--- a/libempathy-gtk/empathy-theme-adium.c
+++ b/libempathy-gtk/empathy-theme-adium.c
@@ -39,8 +39,8 @@
 #include "empathy-smiley-manager.h"
 #include "empathy-ui-utils.h"
 #include "empathy-plist.h"
-#include "empathy-string-parser.h"
 #include "empathy-images.h"
+#include "empathy-webkit-utils.h"
 
 #define DEBUG_FLAG EMPATHY_DEBUG_CHAT
 #include <libempathy/empathy-debug.h>
@@ -293,65 +293,6 @@ theme_adium_load_template (EmpathyThemeAdium *theme)
 	g_free (template);
 }
 
-static void
-theme_adium_match_newline (const gchar *text,
-			   gssize len,
-			   EmpathyStringReplace replace_func,
-			   EmpathyStringParser *sub_parsers,
-			   gpointer user_data)
-{
-	GString *string = user_data;
-	gint i;
-	gint prev = 0;
-
-	if (len < 0) {
-		len = G_MAXSSIZE;
-	}
-
-	/* Replace \n by <br/> */
-	for (i = 0; i < len && text[i] != '\0'; i++) {
-		if (text[i] == '\n') {
-			empathy_string_parser_substr (text + prev,
-						      i - prev, sub_parsers,
-						      user_data);
-			g_string_append (string, "<br/>");
-			prev = i + 1;
-		}
-	}
-	empathy_string_parser_substr (text + prev, i - prev,
-				      sub_parsers, user_data);
-}
-
-static void
-theme_adium_replace_smiley (const gchar *text,
-			    gssize len,
-			    gpointer match_data,
-			    gpointer user_data)
-{
-	EmpathySmileyHit *hit = match_data;
-	GString *string = user_data;
-
-	/* Replace smiley by a <img/> tag */
-	g_string_append_printf (string,
-				"<img src=\"%s\" alt=\"%.*s\" title=\"%.*s\"/>",
-				hit->path, (int)len, text, (int)len, text);
-}
-
-static EmpathyStringParser string_parsers[] = {
-	{empathy_string_match_link, empathy_string_replace_link},
-	{theme_adium_match_newline, NULL},
-	{empathy_string_match_all, empathy_string_replace_escaped},
-	{NULL, NULL}
-};
-
-static EmpathyStringParser string_parsers_with_smiley[] = {
-	{empathy_string_match_link, empathy_string_replace_link},
-	{empathy_string_match_smiley, theme_adium_replace_smiley},
-	{theme_adium_match_newline, NULL},
-	{empathy_string_match_all, empathy_string_replace_escaped},
-	{NULL, NULL}
-};
-
 static gchar *
 theme_adium_parse_body (EmpathyThemeAdium *self,
 	const gchar *text,
@@ -362,11 +303,9 @@ theme_adium_parse_body (EmpathyThemeAdium *self,
 	GString *string;
 
 	/* Check if we have to parse smileys */
-	if (g_settings_get_boolean (priv->gsettings_chat,
-	  EMPATHY_PREFS_CHAT_SHOW_SMILEYS))
-		parsers = string_parsers_with_smiley;
-	else
-		parsers = string_parsers;
+	parsers = empathy_webkit_get_string_parser (
+		g_settings_get_boolean (priv->gsettings_chat,
+			EMPATHY_PREFS_CHAT_SHOW_SMILEYS));
 
 	/* Parse text and construct string with links and smileys replaced
 	 * by html tags. Also escape text to make sure html code is
diff --git a/libempathy-gtk/empathy-webkit-utils.c b/libempathy-gtk/empathy-webkit-utils.c
new file mode 100644
index 0000000..e5d163a
--- /dev/null
+++ b/libempathy-gtk/empathy-webkit-utils.c
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2008-2009 Collabora Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Authors: Xavier Claessens <xclaesse gmail com>
+ */
+
+#include "empathy-webkit-utils.h"
+#include "empathy-smiley-manager.h"
+
+static void
+empathy_webkit_match_newline (const gchar *text,
+    gssize len,
+    EmpathyStringReplace replace_func,
+    EmpathyStringParser *sub_parsers,
+    gpointer user_data)
+{
+  GString *string = user_data;
+  gint i;
+  gint prev = 0;
+
+  if (len < 0)
+    len = G_MAXSSIZE;
+
+  /* Replace \n by <br/> */
+  for (i = 0; i < len && text[i] != '\0'; i++)
+    {
+      if (text[i] == '\n')
+        {
+          empathy_string_parser_substr (text + prev, i - prev,
+              sub_parsers, user_data);
+          g_string_append (string, "<br/>");
+          prev = i + 1;
+        }
+    }
+
+  empathy_string_parser_substr (text + prev, i - prev,
+              sub_parsers, user_data);
+}
+
+static void
+empathy_webkit_replace_smiley (const gchar *text,
+    gssize len,
+    gpointer match_data,
+    gpointer user_data)
+{
+  EmpathySmileyHit *hit = match_data;
+  GString *string = user_data;
+
+  /* Replace smiley by a <img/> tag */
+  g_string_append_printf (string,
+      "<img src=\"%s\" alt=\"%.*s\" title=\"%.*s\"/>",
+      hit->path, (int)len, text, (int)len, text);
+}
+
+static EmpathyStringParser string_parsers[] = {
+  { empathy_string_match_link, empathy_string_replace_link },
+  { empathy_webkit_match_newline, NULL },
+  { empathy_string_match_all, empathy_string_replace_escaped },
+  { NULL, NULL}
+};
+
+static EmpathyStringParser string_parsers_with_smiley[] = {
+  { empathy_string_match_link, empathy_string_replace_link },
+  { empathy_string_match_smiley, empathy_webkit_replace_smiley },
+  { empathy_webkit_match_newline, NULL },
+  { empathy_string_match_all, empathy_string_replace_escaped },
+  { NULL, NULL }
+};
+
+EmpathyStringParser *
+empathy_webkit_get_string_parser (gboolean smileys)
+{
+  if (smileys)
+    return string_parsers_with_smiley;
+  else
+    return string_parsers;
+}
diff --git a/libempathy-gtk/empathy-webkit-utils.h b/libempathy-gtk/empathy-webkit-utils.h
new file mode 100644
index 0000000..38cbfed
--- /dev/null
+++ b/libempathy-gtk/empathy-webkit-utils.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2008-2009 Collabora Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Authors: Xavier Claessens <xclaesse gmail com>
+ */
+
+#ifndef _EMPATHY_WEBKIT_UTILS__H_
+#define _EMPATHY_WEBKIT_UTILS__H_
+
+#include "empathy-string-parser.h"
+
+G_BEGIN_DECLS
+
+EmpathyStringParser *empathy_webkit_get_string_parser (gboolean smileys);
+
+G_END_DECLS
+
+#endif



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]