]> git.0d.be Git - empathy.git/commitdiff
Abstract WebKit string parsers into empathy-webkit-utils
authorDanielle Madeley <danielle.madeley@collabora.co.uk>
Mon, 1 Aug 2011 03:04:15 +0000 (13:04 +1000)
committerDanielle Madeley <danielle.madeley@collabora.co.uk>
Mon, 1 Aug 2011 03:04:15 +0000 (13:04 +1000)
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
libempathy-gtk/empathy-theme-adium.c
libempathy-gtk/empathy-webkit-utils.c [new file with mode: 0644]
libempathy-gtk/empathy-webkit-utils.h [new file with mode: 0644]

index 7023ecfe53e004f5f61dc50bb4c978648b206369..f12230deff550d9d5771192adb62f5b7e2570481 100644 (file)
@@ -279,16 +279,23 @@ endif
 if HAVE_WEBKIT
 libempathy_gtk_handwritten_source +=           \
        empathy-plist.c                         \
 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                         \
 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                   \
 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 =                           \
 endif
 
 CLEANFILES =                           \
index 14e149e18e35ad38871eba4d09412bd1172f723d..874f5592f32af3d13d10e2ca7795fee058084ccc 100644 (file)
@@ -39,8 +39,8 @@
 #include "empathy-smiley-manager.h"
 #include "empathy-ui-utils.h"
 #include "empathy-plist.h"
 #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-images.h"
+#include "empathy-webkit-utils.h"
 
 #define DEBUG_FLAG EMPATHY_DEBUG_CHAT
 #include <libempathy/empathy-debug.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);
 }
 
        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,
 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 */
        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
 
        /* 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 (file)
index 0000000..e5d163a
--- /dev/null
@@ -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 (file)
index 0000000..38cbfed
--- /dev/null
@@ -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