]> git.0d.be Git - empathy.git/commitdiff
Move empathy_string_parser API to its own file
authorXavier Claessens <xclaesse@gmail.com>
Wed, 3 Mar 2010 14:31:45 +0000 (15:31 +0100)
committerXavier Claessens <xclaesse@gmail.com>
Wed, 3 Mar 2010 15:18:45 +0000 (16:18 +0100)
libempathy-gtk/Makefile.am
libempathy-gtk/empathy-chat-text-view.c
libempathy-gtk/empathy-string-parser.c [new file with mode: 0644]
libempathy-gtk/empathy-string-parser.h [new file with mode: 0644]
libempathy-gtk/empathy-theme-adium.c
libempathy-gtk/empathy-ui-utils.c
libempathy-gtk/empathy-ui-utils.h

index c9736ac43e99c40a2c81993383ddd16c49eb6110..6ec319e1ca5469009d14a6f19ee81330ade72dc3 100644 (file)
@@ -65,6 +65,7 @@ libempathy_gtk_handwritten_source =                   \
        empathy-sound.c                         \
        empathy-spell.c                         \
        empathy-status-preset-dialog.c          \
+       empathy-string-parser.c                 \
        empathy-theme-boxes.c                   \
        empathy-theme-irc.c                     \
        empathy-theme-manager.c                 \
@@ -111,6 +112,7 @@ libempathy_gtk_headers =                    \
        empathy-sound.h                         \
        empathy-spell.h                         \
        empathy-status-preset-dialog.h          \
+       empathy-string-parser.h                 \
        empathy-theme-boxes.h                   \
        empathy-theme-irc.h                     \
        empathy-theme-manager.h                 \
index 07f8f6cb94cdfde4a04960d017419479ee555b3b..7f16ab9a325a9f4e5693d9e96bf4a0daf5ca0fd0 100644 (file)
@@ -42,6 +42,7 @@
 #include "empathy-conf.h"
 #include "empathy-ui-utils.h"
 #include "empathy-smiley-manager.h"
+#include "empathy-string-parser.h"
 
 #define DEBUG_FLAG EMPATHY_DEBUG_CHAT
 #include <libempathy/empathy-debug.h>
diff --git a/libempathy-gtk/empathy-string-parser.c b/libempathy-gtk/empathy-string-parser.c
new file mode 100644 (file)
index 0000000..9d0163e
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2010 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 <config.h>
+
+#include <string.h>
+
+#include "empathy-string-parser.h"
+#include "empathy-smiley-manager.h"
+
+void
+empathy_string_parser_substr (const gchar *text,
+                             gssize len,
+                             EmpathyStringParser *parsers,
+                             gpointer user_data)
+{
+       if (parsers != NULL && parsers[0].match_func != NULL) {
+               parsers[0].match_func (text, len,
+                                      parsers[0].replace_func, parsers + 1,
+                                      user_data);
+       }
+}
+
+void
+empathy_string_match_link (const gchar *text,
+                          gssize len,
+                          EmpathyStringReplace replace_func,
+                          EmpathyStringParser *sub_parsers,
+                          gpointer user_data)
+{
+       GRegex     *uri_regex;
+       GMatchInfo *match_info;
+       gboolean    match;
+       gint        last = 0;
+
+       uri_regex = empathy_uri_regex_dup_singleton ();
+       match = g_regex_match_full (uri_regex, text, len, 0, 0, &match_info, NULL);
+       if (match) {
+               gint s = 0, e = 0;
+
+               do {
+                       g_match_info_fetch_pos (match_info, 0, &s, &e);
+
+                       if (s > last) {
+                               /* Append the text between last link (or the
+                                * start of the message) and this link */
+                               empathy_string_parser_substr (text + last,
+                                                             s - last,
+                                                             sub_parsers,
+                                                             user_data);
+                       }
+
+                       replace_func (text + s, e - s, NULL, user_data);
+
+                       last = e;
+               } while (g_match_info_next (match_info, NULL));
+       }
+
+       empathy_string_parser_substr (text + last, len - last,
+                                     sub_parsers, user_data);
+
+       g_match_info_free (match_info);
+       g_regex_unref (uri_regex);
+}
+
+void
+empathy_string_match_smiley (const gchar *text,
+                            gssize len,
+                            EmpathyStringReplace replace_func,
+                            EmpathyStringParser *sub_parsers,
+                            gpointer user_data)
+{
+       guint last = 0;
+       EmpathySmileyManager *smiley_manager;
+       GSList *hits, *l;
+
+       smiley_manager = empathy_smiley_manager_dup_singleton ();
+       hits = empathy_smiley_manager_parse_len (smiley_manager, text, len);
+
+       for (l = hits; l; l = l->next) {
+               EmpathySmileyHit *hit = l->data;
+
+               if (hit->start > last) {
+                       /* Append the text between last smiley (or the
+                        * start of the message) and this smiley */
+                       empathy_string_parser_substr (text + last,
+                                                     hit->start - last,
+                                                     sub_parsers, user_data);
+               }
+
+               replace_func (text + hit->start, hit->end - hit->start,
+                             hit, user_data);
+
+               last = hit->end;
+
+               empathy_smiley_hit_free (hit);
+       }
+       g_slist_free (hits);
+       g_object_unref (smiley_manager);
+
+       empathy_string_parser_substr (text + last, len - last,
+                                     sub_parsers, user_data);
+}
+
+void
+empathy_string_match_all (const gchar *text,
+                         gssize len,
+                         EmpathyStringReplace replace_func,
+                         EmpathyStringParser *sub_parsers,
+                         gpointer user_data)
+{
+       replace_func (text, len, NULL, user_data);
+}
+
diff --git a/libempathy-gtk/empathy-string-parser.h b/libempathy-gtk/empathy-string-parser.h
new file mode 100644 (file)
index 0000000..696545b
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2010 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_STRING_PARSER_H__
+#define __EMPATHY_STRING_PARSER_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+typedef struct _EmpathyStringParser EmpathyStringParser;
+
+typedef void (*EmpathyStringReplace) (const gchar *text,
+                                     gssize len,
+                                     gpointer match_data,
+                                     gpointer user_data);
+typedef void (*EmpathyStringMatch) (const gchar *text,
+                                   gssize len,
+                                   EmpathyStringReplace replace_func,
+                                   EmpathyStringParser *sub_parsers,
+                                   gpointer user_data);
+
+struct _EmpathyStringParser {
+       EmpathyStringMatch match_func;
+       EmpathyStringReplace replace_func;
+};
+
+void
+empathy_string_parser_substr (const gchar *text,
+                             gssize len,
+                             EmpathyStringParser *parsers,
+                             gpointer user_data);
+
+void
+empathy_string_match_link (const gchar *text,
+                          gssize len,
+                          EmpathyStringReplace replace_func,
+                          EmpathyStringParser *sub_parsers,
+                          gpointer user_data);
+
+void
+empathy_string_match_smiley (const gchar *text,
+                            gssize len,
+                            EmpathyStringReplace replace_func,
+                            EmpathyStringParser *sub_parsers,
+                            gpointer user_data);
+
+void
+empathy_string_match_all (const gchar *text,
+                         gssize len,
+                         EmpathyStringReplace replace_func,
+                         EmpathyStringParser *sub_parsers,
+                         gpointer user_data);
+
+G_END_DECLS
+
+#endif /*  __EMPATHY_STRING_PARSER_H__ */
index 5c67af8571a89ad4c8f76a40dbf7eaf0ee037e31..ef7d3a73e5e42167ddeb52b6575eb9eb94ab6289 100644 (file)
@@ -40,6 +40,7 @@
 #include "empathy-conf.h"
 #include "empathy-ui-utils.h"
 #include "empathy-plist.h"
+#include "empathy-string-parser.h"
 
 #define DEBUG_FLAG EMPATHY_DEBUG_CHAT
 #include <libempathy/empathy-debug.h>
index dcba5fe236527931d91cbdfaa0932b09131eeef3..a2865bc55d7b883c74759dc2c0f766f167500556 100644 (file)
@@ -1726,107 +1726,3 @@ empathy_receive_file_with_file_chooser (EmpathyFTHandler *handler)
        gtk_widget_show (widget);
 }
 
-void
-empathy_string_parser_substr (const gchar *text,
-                             gssize len,
-                             EmpathyStringParser *parsers,
-                             gpointer user_data)
-{
-       if (parsers != NULL && parsers[0].match_func != NULL) {
-               parsers[0].match_func (text, len,
-                                      parsers[0].replace_func, parsers + 1,
-                                      user_data);
-       }
-}
-
-void
-empathy_string_match_link (const gchar *text,
-                          gssize len,
-                          EmpathyStringReplace replace_func,
-                          EmpathyStringParser *sub_parsers,
-                          gpointer user_data)
-{
-       GRegex     *uri_regex;
-       GMatchInfo *match_info;
-       gboolean    match;
-       gint        last = 0;
-
-       uri_regex = empathy_uri_regex_dup_singleton ();
-       match = g_regex_match_full (uri_regex, text, len, 0, 0, &match_info, NULL);
-       if (match) {
-               gint s = 0, e = 0;
-
-               do {
-                       g_match_info_fetch_pos (match_info, 0, &s, &e);
-
-                       if (s > last) {
-                               /* Append the text between last link (or the
-                                * start of the message) and this link */
-                               empathy_string_parser_substr (text + last,
-                                                             s - last,
-                                                             sub_parsers,
-                                                             user_data);
-                       }
-
-                       replace_func (text + s, e - s, NULL, user_data);
-
-                       last = e;
-               } while (g_match_info_next (match_info, NULL));
-       }
-
-       empathy_string_parser_substr (text + last, len - last,
-                                     sub_parsers, user_data);
-
-       g_match_info_free (match_info);
-       g_regex_unref (uri_regex);
-}
-
-void
-empathy_string_match_smiley (const gchar *text,
-                            gssize len,
-                            EmpathyStringReplace replace_func,
-                            EmpathyStringParser *sub_parsers,
-                            gpointer user_data)
-{
-       guint last = 0;
-       EmpathySmileyManager *smiley_manager;
-       GSList *hits, *l;
-
-       smiley_manager = empathy_smiley_manager_dup_singleton ();
-       hits = empathy_smiley_manager_parse_len (smiley_manager, text, len);
-
-       for (l = hits; l; l = l->next) {
-               EmpathySmileyHit *hit = l->data;
-
-               if (hit->start > last) {
-                       /* Append the text between last smiley (or the
-                        * start of the message) and this smiley */
-                       empathy_string_parser_substr (text + last,
-                                                     hit->start - last,
-                                                     sub_parsers, user_data);
-               }
-
-               replace_func (text + hit->start, hit->end - hit->start,
-                             hit, user_data);
-
-               last = hit->end;
-
-               empathy_smiley_hit_free (hit);
-       }
-       g_slist_free (hits);
-       g_object_unref (smiley_manager);
-
-       empathy_string_parser_substr (text + last, len - last,
-                                     sub_parsers, user_data);
-}
-
-void
-empathy_string_match_all (const gchar *text,
-                         gssize len,
-                         EmpathyStringReplace replace_func,
-                         EmpathyStringParser *sub_parsers,
-                         gpointer user_data)
-{
-       replace_func (text, len, NULL, user_data);
-}
-
index 925ecc5cb00c5db4fca2887a751bf1a56b6afe3b..e03ec66f8bb98ad4e054289112ff2b445f271a94 100644 (file)
@@ -130,51 +130,6 @@ gchar *     empathy_make_absolute_url                   (const gchar *url);
 gchar *     empathy_make_absolute_url_len               (const gchar *url,
                                                         guint len);
 
-/* String parser */
-typedef struct _EmpathyStringParser EmpathyStringParser;
-
-typedef void (*EmpathyStringReplace) (const gchar *text,
-                                     gssize len,
-                                     gpointer match_data,
-                                     gpointer user_data);
-typedef void (*EmpathyStringMatch) (const gchar *text,
-                                   gssize len,
-                                   EmpathyStringReplace replace_func,
-                                   EmpathyStringParser *sub_parsers,
-                                   gpointer user_data);
-
-struct _EmpathyStringParser {
-       EmpathyStringMatch match_func;
-       EmpathyStringReplace replace_func;
-};
-
-void
-empathy_string_parser_substr (const gchar *text,
-                             gssize len,
-                             EmpathyStringParser *parsers,
-                             gpointer user_data);
-
-void
-empathy_string_match_link (const gchar *text,
-                          gssize len,
-                          EmpathyStringReplace replace_func,
-                          EmpathyStringParser *sub_parsers,
-                          gpointer user_data);
-
-void
-empathy_string_match_smiley (const gchar *text,
-                            gssize len,
-                            EmpathyStringReplace replace_func,
-                            EmpathyStringParser *sub_parsers,
-                            gpointer user_data);
-
-void
-empathy_string_match_all (const gchar *text,
-                         gssize len,
-                         EmpathyStringReplace replace_func,
-                         EmpathyStringParser *sub_parsers,
-                         gpointer user_data);
-
 G_END_DECLS
 
 #endif /*  __EMPATHY_UI_UTILS_H__ */