From: Danielle Madeley Date: Mon, 1 Aug 2011 03:04:15 +0000 (+1000) Subject: Abstract WebKit string parsers into empathy-webkit-utils X-Git-Url: https://git.0d.be/?p=empathy.git;a=commitdiff_plain;h=e3d0a1862508fad3d16585b0210a2a9328453c2f 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). --- diff --git a/libempathy-gtk/Makefile.am b/libempathy-gtk/Makefile.am index 7023ecfe..f12230de 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 14e149e1..874f5592 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 @@ -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
*/ - 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, "
"); - 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 tag */ - g_string_append_printf (string, - "\"%.*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 00000000..e5d163ae --- /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 + */ + +#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
*/ + 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, "
"); + 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 tag */ + g_string_append_printf (string, + "\"%.*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 00000000..38cbfedc --- /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 + */ + +#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