diff options
author | Danielle Madeley <danielle.madeley@collabora.co.uk> | 2011-08-01 11:04:15 +0800 |
---|---|---|
committer | Danielle Madeley <danielle.madeley@collabora.co.uk> | 2011-08-01 11:04:15 +0800 |
commit | e3d0a1862508fad3d16585b0210a2a9328453c2f (patch) | |
tree | 6b2e374f716488ff84e0ef5cf425dd784f0c42ea | |
parent | d890a28335477c0e18cd68264467e7be45496388 (diff) | |
download | gsoc2013-empathy-e3d0a1862508fad3d16585b0210a2a9328453c2f.tar gsoc2013-empathy-e3d0a1862508fad3d16585b0210a2a9328453c2f.tar.gz gsoc2013-empathy-e3d0a1862508fad3d16585b0210a2a9328453c2f.tar.bz2 gsoc2013-empathy-e3d0a1862508fad3d16585b0210a2a9328453c2f.tar.lz gsoc2013-empathy-e3d0a1862508fad3d16585b0210a2a9328453c2f.tar.xz gsoc2013-empathy-e3d0a1862508fad3d16585b0210a2a9328453c2f.tar.zst gsoc2013-empathy-e3d0a1862508fad3d16585b0210a2a9328453c2f.zip |
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).
-rw-r--r-- | libempathy-gtk/Makefile.am | 13 | ||||
-rw-r--r-- | libempathy-gtk/empathy-theme-adium.c | 69 | ||||
-rw-r--r-- | libempathy-gtk/empathy-webkit-utils.c | 91 | ||||
-rw-r--r-- | 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 7023ecfe5..f12230def 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 14e149e18..874f5592f 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 000000000..e5d163ae2 --- /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 000000000..38cbfedcb --- /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 |