[empathy: 1/10] Move empathy_string_parser API to its own file



commit f48b89ce4d61d16843361636ad9f155451fde98d
Author: Xavier Claessens <xclaesse gmail com>
Date:   Wed Mar 3 15:31:45 2010 +0100

    Move empathy_string_parser API to its own file

 libempathy-gtk/Makefile.am              |    2 +
 libempathy-gtk/empathy-chat-text-view.c |    1 +
 libempathy-gtk/empathy-string-parser.c  |  131 +++++++++++++++++++++++++++++++
 libempathy-gtk/empathy-string-parser.h  |   74 +++++++++++++++++
 libempathy-gtk/empathy-theme-adium.c    |    1 +
 libempathy-gtk/empathy-ui-utils.c       |  104 ------------------------
 libempathy-gtk/empathy-ui-utils.h       |   45 -----------
 7 files changed, 209 insertions(+), 149 deletions(-)
---
diff --git a/libempathy-gtk/Makefile.am b/libempathy-gtk/Makefile.am
index c9736ac..6ec319e 100644
--- a/libempathy-gtk/Makefile.am
+++ b/libempathy-gtk/Makefile.am
@@ -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			\
diff --git a/libempathy-gtk/empathy-chat-text-view.c b/libempathy-gtk/empathy-chat-text-view.c
index 07f8f6c..7f16ab9 100644
--- a/libempathy-gtk/empathy-chat-text-view.c
+++ b/libempathy-gtk/empathy-chat-text-view.c
@@ -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
index 0000000..9d0163e
--- /dev/null
+++ b/libempathy-gtk/empathy-string-parser.c
@@ -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
index 0000000..696545b
--- /dev/null
+++ b/libempathy-gtk/empathy-string-parser.h
@@ -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__ */
diff --git a/libempathy-gtk/empathy-theme-adium.c b/libempathy-gtk/empathy-theme-adium.c
index 5c67af8..ef7d3a7 100644
--- a/libempathy-gtk/empathy-theme-adium.c
+++ b/libempathy-gtk/empathy-theme-adium.c
@@ -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>
diff --git a/libempathy-gtk/empathy-ui-utils.c b/libempathy-gtk/empathy-ui-utils.c
index dcba5fe..a2865bc 100644
--- a/libempathy-gtk/empathy-ui-utils.c
+++ b/libempathy-gtk/empathy-ui-utils.c
@@ -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);
-}
-
diff --git a/libempathy-gtk/empathy-ui-utils.h b/libempathy-gtk/empathy-ui-utils.h
index 925ecc5..e03ec66 100644
--- a/libempathy-gtk/empathy-ui-utils.h
+++ b/libempathy-gtk/empathy-ui-utils.h
@@ -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__ */



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