SF.net SVN: geany-plugins:[2071] trunk/geany-plugins/devhelp/src

codebrainz at users.sourceforge.net codebrainz at xxxxx
Mon May 23 00:20:27 UTC 2011


Revision: 2071
          http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=2071&view=rev
Author:   codebrainz
Date:     2011-05-23 00:20:26 +0000 (Mon, 23 May 2011)

Log Message:
-----------
Add support for search Google Code.

Modified Paths:
--------------
    trunk/geany-plugins/devhelp/src/Makefile.am
    trunk/geany-plugins/devhelp/src/devhelpplugin.c
    trunk/geany-plugins/devhelp/src/devhelpplugin.h

Added Paths:
-----------
    trunk/geany-plugins/devhelp/src/codesearch.c
    trunk/geany-plugins/devhelp/src/codesearch.h

Modified: trunk/geany-plugins/devhelp/src/Makefile.am
===================================================================
--- trunk/geany-plugins/devhelp/src/Makefile.am	2011-05-22 22:28:24 UTC (rev 2070)
+++ trunk/geany-plugins/devhelp/src/Makefile.am	2011-05-23 00:20:26 UTC (rev 2071)
@@ -13,7 +13,8 @@
 	main-notebook.c \
 	devhelpplugin.c \
 	plugin.c \
-	manpages.c
+	manpages.c \
+	codesearch.c
 
 noinst_HEADERS = \
 	plugin.h \

Added: trunk/geany-plugins/devhelp/src/codesearch.c
===================================================================
--- trunk/geany-plugins/devhelp/src/codesearch.c	                        (rev 0)
+++ trunk/geany-plugins/devhelp/src/codesearch.c	2011-05-23 00:20:26 UTC (rev 2071)
@@ -0,0 +1,97 @@
+#include <glib.h>
+#include <webkit/webkitwebview.h>
+
+#include "devhelpplugin.h"
+#include "codesearch.h"
+
+
+struct LangMapEnt
+{
+	const gchar *geany_name;
+	const gchar *google_name;
+};
+
+
+#define GOOGLE_CODE_SEARCH_URI "http://www.google.com/codesearch"
+
+#define LANG_MAP_MAX 33 /* update this with lang_map[] size below */
+
+/* maps Geany language names to Google Code language names */
+static const struct LangMapEnt lang_map[LANG_MAP_MAX] = {
+	{ "ActionScript", "actionscript" },
+	{ "Ada", "ada" },
+	{ "ASM", "assembly" },
+	{ "FreeBasic", "basic" },
+	{ "C", "c" },
+	{ "C++", "c++" },
+	{ "C#", "c#" },
+	{ "COBOL", "cobol" },
+	{ "CSS", "css" },
+	{ "D", "d" },
+	{ "Erlang", "erlang" },
+	{ "Fortran", "fortran" },
+	{ "Haskell", "haskell" },
+	{ "Java", "java" },
+	{ "Javascript", "javascript" },
+	{ "Lisp", "lisp" },
+	{ "Lua", "lua" },
+	{ "Make", "makefile" },
+	{ "Matlab/Octave", "matlab" },
+	{ "CAML", "ocaml" },
+	{ "Pascal", "pascal" },
+	{ "Perl", "perl" },
+	{ "PHP", "php" },
+	{ "Python", "python" },
+	{ "R", "r" },
+	{ "Ruby", "ruby" },
+	{ "Sh", "shell" },
+	{ "SQL", "sql" },
+	{ "Tcl", "tcl" },
+	{ "LaTeX", "tex" },
+	{ "Verilog", "verilog" },
+	{ "VHDL", "vhdl" },
+	{ "None", NULL }
+};
+
+
+void devhelp_plugin_search_code(DevhelpPlugin *self, const gchar *term, const gchar *lang)
+{
+	gint i;
+	gchar *uri, *term_enc, *lang_enc;
+	const gchar *google_lang = NULL;
+
+	g_return_if_fail(self != NULL);
+	g_return_if_fail(term != NULL);
+
+	if (lang != NULL)
+	{
+		for (i = 0; i < LANG_MAP_MAX; i++)
+		{
+			if (g_strcmp0(lang, lang_map[i].geany_name) == 0)
+			{
+				google_lang = lang_map[i].google_name;
+				break;
+			}
+		}
+	}
+
+	if (google_lang != NULL)
+	{
+		lang_enc = g_uri_escape_string(google_lang, NULL, TRUE);
+		term_enc = g_uri_escape_string(term, NULL, TRUE);
+		uri = g_strdup_printf("%s?as_q=%s&as_lang=%s", GOOGLE_CODE_SEARCH_URI, term_enc, lang_enc);
+		g_free(lang_enc);
+		g_free(term_enc);
+	}
+	else
+	{
+		term_enc = g_uri_escape_string(term, NULL, TRUE);
+		uri = g_strdup_printf("%s?as_q=%s", GOOGLE_CODE_SEARCH_URI, term_enc);
+		g_free(term_enc);
+	}
+
+	webkit_web_view_open(devhelp_plugin_get_webview(self), uri);
+	g_free(uri);
+
+	devhelp_plugin_activate_webview_tab(self);
+}

Added: trunk/geany-plugins/devhelp/src/codesearch.h
===================================================================
--- trunk/geany-plugins/devhelp/src/codesearch.h	                        (rev 0)
+++ trunk/geany-plugins/devhelp/src/codesearch.h	2011-05-23 00:20:26 UTC (rev 2071)
@@ -0,0 +1,39 @@
+/*
+ * codesearch.h
+ *
+ * Copyright 2011 Matthew Brush <mbrush at desktop>
+ *
+ * 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 Street, Fifth Floor, Boston, MA
+ * 02110-1301  USA.
+ *
+ */
+
+#ifndef CODESEARCH_H
+#define CODESEARCH_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <glib.h>
+#include "devhelpplugin.h"
+
+
+void devhelp_plugin_search_code(DevhelpPlugin *self, const gchar *term, const gchar *lang);
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+#endif /* CODESEARCH_H */

Modified: trunk/geany-plugins/devhelp/src/devhelpplugin.c
===================================================================
--- trunk/geany-plugins/devhelp/src/devhelpplugin.c	2011-05-22 22:28:24 UTC (rev 2070)
+++ trunk/geany-plugins/devhelp/src/devhelpplugin.c	2011-05-23 00:20:26 UTC (rev 2071)
@@ -37,6 +37,7 @@
 #include "devhelpplugin.h"
 #include "plugin.h"
 #include "manpages.h"
+#include "codesearch.h"
 
 
 struct _DevhelpPluginPrivate
@@ -52,7 +53,6 @@
 										 *   and webkit view */
     GtkWidget*		doc_notebook;    	/* Geany's document notebook   */
     GtkWidget*		editor_menu_item;	/* Item in the editor's context menu */
-    GtkWidget*		editor_man_menu_item; /* Manpage search menu item in the editor's context menu */
     GtkWidget*		editor_menu_sep;	/* Separator item above menu item */
     gboolean		webview_active;		/* Tracks whether webview stuff is shown */
     gboolean		last_main_tab_id;	/* These track the last id of the tabs */
@@ -83,6 +83,7 @@
 /* Internal callbacks */
 static void on_search_help_activate(GtkMenuItem * menuitem, DevhelpPlugin *self);
 static void on_search_help_man_activate(GtkMenuItem * menuitem, DevhelpPlugin *self);
+static void on_search_help_code_activate(GtkMenuItem *menuitem, DevhelpPlugin *self);
 static void on_editor_menu_popup(GtkWidget * widget, DevhelpPlugin *self);
 static void on_link_clicked(GObject * ignored, DhLink * dhlink, DevhelpPlugin *self);
 static void on_back_button_clicked(GtkToolButton * btn, DevhelpPlugin *self);
@@ -118,7 +119,6 @@
 	}
 	gtk_widget_destroy(self->priv->editor_menu_sep);
 	gtk_widget_destroy(self->priv->editor_menu_item);
-	gtk_widget_destroy(self->priv->editor_man_menu_item);
 
 	gtk_notebook_set_tab_pos(GTK_NOTEBOOK(geany->main_widgets->sidebar_notebook),
 		self->priv->orig_sb_tab_pos);
@@ -180,6 +180,7 @@
 /* Initialize the stuff in the editor's context menu */
 static void devhelp_plugin_init_edit_menu(DevhelpPlugin *self)
 {
+	GtkWidget *doc_menu, *devhelp_item, *man_item, *code_item;
 	DevhelpPluginPrivate *p;
 
 	g_return_if_fail(self != NULL);
@@ -187,20 +188,33 @@
 	p = self->priv;
 
 	p->editor_menu_sep = gtk_separator_menu_item_new();
-	p->editor_menu_item = gtk_menu_item_new_with_label(_("Search Devhelp for Tag"));
-	p->editor_man_menu_item = gtk_menu_item_new_with_label(_("Search manual pages for Tag"));
+	p->editor_menu_item = gtk_menu_item_new_with_label(_("Search for 'Tag' Documentation in"));
+	doc_menu = gtk_menu_new();
 
+	devhelp_item = gtk_menu_item_new_with_label(_("Devhelp"));
+	man_item = gtk_menu_item_new_with_label(_("Manual Pages"));
+	code_item = gtk_menu_item_new_with_label(_("Google Code"));
+
+	gtk_menu_shell_append(GTK_MENU_SHELL(doc_menu), devhelp_item);
+	gtk_menu_shell_append(GTK_MENU_SHELL(doc_menu), man_item);
+	gtk_menu_shell_append(GTK_MENU_SHELL(doc_menu), code_item);
+
 	g_signal_connect(geany->main_widgets->editor_menu, "show", G_CALLBACK(on_editor_menu_popup), self);
-	g_signal_connect(p->editor_menu_item, "activate", G_CALLBACK(on_search_help_activate), self);
-	g_signal_connect(p->editor_man_menu_item, "activate", G_CALLBACK(on_search_help_man_activate), self);
+	g_signal_connect(devhelp_item, "activate", G_CALLBACK(on_search_help_activate), self);
+	g_signal_connect(man_item, "activate", G_CALLBACK(on_search_help_man_activate), self);
+	g_signal_connect(code_item, "activate", G_CALLBACK(on_search_help_code_activate), self);
 
+	gtk_widget_show(p->editor_menu_sep);
+	gtk_widget_show(devhelp_item);
+	gtk_widget_show(man_item);
+	gtk_widget_show(code_item);
+
+	gtk_menu_item_set_submenu(GTK_MENU_ITEM(p->editor_menu_item), doc_menu);
+	gtk_widget_show_all(p->editor_menu_item);
+
 	gtk_menu_shell_append(GTK_MENU_SHELL(geany->main_widgets->editor_menu), p->editor_menu_sep);
 	gtk_menu_shell_append(GTK_MENU_SHELL(geany->main_widgets->editor_menu), p->editor_menu_item);
-	gtk_menu_shell_append(GTK_MENU_SHELL(geany->main_widgets->editor_menu), p->editor_man_menu_item);
 
-	gtk_widget_show(p->editor_menu_sep);
-	gtk_widget_show(p->editor_menu_item);
-	gtk_widget_show(p->editor_man_menu_item);
 }
 
 
@@ -384,7 +398,7 @@
 
 	g_free(man_fn);
 
-	devhelp_plugin_activate_all_tabs(self);
+	devhelp_plugin_activate_webview_tab(self);
 }
 
 
@@ -665,6 +679,13 @@
 }
 
 
+WebKitWebView* devhelp_plugin_get_webview(DevhelpPlugin *self)
+{
+	g_return_val_if_fail(self != NULL, NULL);
+	return WEBKIT_WEB_VIEW(self->priv->webview);
+}
+
+
 /* Activates (brings to top/makes visible) the Devhelp plugin's sidebar tab. */
 static inline void devhelp_plugin_activate_sidebar_tab(DevhelpPlugin *self)
 {
@@ -846,13 +867,34 @@
 }
 
 
+static void on_search_help_code_activate(GtkMenuItem *menuitem, DevhelpPlugin *self)
+{
+	gchar *current_tag;
+	const gchar *lang = NULL;
+	GeanyDocument *doc;
+
+	g_return_if_fail(self != NULL);
+
+	if ((current_tag = devhelp_plugin_get_current_tag()) == NULL)
+		return;
+
+	doc = document_get_current();
+	if (doc == NULL || doc->file_type == NULL || doc->file_type->name == NULL)
+		lang = doc->file_type->name;
+
+	devhelp_plugin_search_code(self, current_tag, lang);
+
+	g_free(current_tag);
+}
+
+
 /*
  * Called when the editor context menu is shown so that the devhelp
  * search item can be disabled if there isn't a selected tag.
  */
 static void on_editor_menu_popup(GtkWidget * widget, DevhelpPlugin *self)
 {
-	gchar *label_tag, *curword, *new_label, *new_man_label;
+	gchar *label_tag, *curword, *new_label;
 
 	g_return_if_fail(self != NULL);
 
@@ -861,23 +903,18 @@
 	if (curword == NULL)
 	{
 		gtk_widget_set_sensitive(self->priv->editor_menu_item, FALSE);
-		gtk_widget_set_sensitive(self->priv->editor_man_menu_item, FALSE);
 		return;
 	}
 
-	label_tag = g_strndup(curword, DHPLUG_MAX_LABEL_TAG);
-	new_label = g_strdup_printf(_("Search Devhelp for: %s..."), g_strstrip(label_tag));
-	new_man_label = g_strdup_printf(_("Search manual pages for: %s..."), label_tag);
+	label_tag = g_strstrip(g_strndup(curword, DHPLUG_MAX_LABEL_TAG));
+	new_label = g_strdup_printf(_("Search for '%s' Documentation in"), label_tag);
 
 	gtk_menu_item_set_label(GTK_MENU_ITEM(self->priv->editor_menu_item), new_label);
-	gtk_menu_item_set_label(GTK_MENU_ITEM(self->priv->editor_man_menu_item), new_man_label);
 
 	g_free(new_label);
-	g_free(new_man_label);
 	g_free(label_tag);
 
 	gtk_widget_set_sensitive(self->priv->editor_menu_item, TRUE);
-	gtk_widget_set_sensitive(self->priv->editor_man_menu_item, TRUE);
 
 	g_free(curword);
 }

Modified: trunk/geany-plugins/devhelp/src/devhelpplugin.h
===================================================================
--- trunk/geany-plugins/devhelp/src/devhelpplugin.h	2011-05-22 22:28:24 UTC (rev 2070)
+++ trunk/geany-plugins/devhelp/src/devhelpplugin.h	2011-05-23 00:20:26 UTC (rev 2071)
@@ -23,6 +23,7 @@
 #define DEVHELP_PLUGIN_COMMON_H
 
 #include <gtk/gtk.h>
+#include <webkit/webkitwebview.h>
 
 G_BEGIN_DECLS
 
@@ -98,6 +99,8 @@
 void			devhelp_plugin_toggle_contents_tab		(DevhelpPlugin *self);
 void			devhelp_plugin_toggle_webview_tab		(DevhelpPlugin *self);
 
+WebKitWebView*	devhelp_plugin_get_webview				(DevhelpPlugin *self);
 
+
 G_END_DECLS
 #endif /* DEVHELP_PLUGIN_H */


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Plugins-Commits mailing list