Revision: 1358 http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=1358&view=re... Author: frlan Date: 2010-05-15 21:26:52 +0000 (Sat, 15 May 2010)
Log Message: ----------- Added a function to put XML tags around a selection
Modified Paths: -------------- trunk/geany-plugins/addons/AUTHORS trunk/geany-plugins/addons/ChangeLog trunk/geany-plugins/addons/README trunk/geany-plugins/addons/src/addons.c trunk/geany-plugins/po/POTFILES.in
Added Paths: ----------- trunk/geany-plugins/addons/src/ao_xmltagging.c trunk/geany-plugins/addons/src/ao_xmltagging.h
Modified: trunk/geany-plugins/addons/AUTHORS =================================================================== --- trunk/geany-plugins/addons/AUTHORS 2010-05-15 21:26:05 UTC (rev 1357) +++ trunk/geany-plugins/addons/AUTHORS 2010-05-15 21:26:52 UTC (rev 1358) @@ -1,3 +1,4 @@ Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> Bert Vermeulen <bert(at)biot(dot)com> Eugene Arshinov <earshinov(at)gmail(dot)com> +Frank Lanitz <frank(at)frank(dot)uvena(dot)de>
Modified: trunk/geany-plugins/addons/ChangeLog =================================================================== --- trunk/geany-plugins/addons/ChangeLog 2010-05-15 21:26:05 UTC (rev 1357) +++ trunk/geany-plugins/addons/ChangeLog 2010-05-15 21:26:52 UTC (rev 1358) @@ -1,3 +1,9 @@ +2010-05-15 Frank Lanitz <frank(at)frank(dot)uvena(dot)de> + + * src/ao_xmltagging.[c|h]: + Add function for setting tags around a selection. + + 2010-01-17 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
* src/addons.c, src/ao_tasks.c, src/ao_tasks.h:
Modified: trunk/geany-plugins/addons/README =================================================================== --- trunk/geany-plugins/addons/README 2010-05-15 21:26:05 UTC (rev 1357) +++ trunk/geany-plugins/addons/README 2010-05-15 21:26:52 UTC (rev 1358) @@ -51,6 +51,11 @@ saved. If you have 'Ensure new line at file end' option checked in Preferences, one trailing newline will be left.
+XMLtagging +^^^^^^^^^^ +XMLtagging allows to easy tag a selected text, by checking for a +selection, offering a little dialog for inserting a tag and +replacing a selection.
Downloads ---------
Modified: trunk/geany-plugins/addons/src/addons.c =================================================================== --- trunk/geany-plugins/addons/src/addons.c 2010-05-15 21:26:05 UTC (rev 1357) +++ trunk/geany-plugins/addons/src/addons.c 2010-05-15 21:26:52 UTC (rev 1358) @@ -31,6 +31,7 @@ #include "ao_bookmarklist.h" #include "ao_markword.h" #include "ao_tasks.h" +#include "ao_xmltagging.h"
@@ -50,6 +51,7 @@ KB_FOCUS_BOOKMARK_LIST, KB_FOCUS_TASKS, KB_UPDATE_TASKS, + KB_XMLTAGGING, KB_COUNT };
@@ -65,6 +67,7 @@ gboolean enable_systray; gboolean enable_bookmarklist; gboolean enable_markword; + gboolean enable_xmltagging; gboolean strip_trailing_blank_lines;
gchar *tasks_token_list; @@ -90,6 +93,7 @@ static void ao_document_before_save_cb(GObject *obj, GeanyDocument *doc, gpointer data); static void ao_document_close_cb(GObject *obj, GeanyDocument *doc, gpointer data); static void ao_startup_complete_cb(GObject *obj, gpointer data); + gboolean ao_editor_notify_cb(GObject *object, GeanyEditor *editor, SCNotification *nt, gpointer data);
@@ -133,6 +137,10 @@ ao_tasks_update(ao_info->tasks, NULL); }
+static void kb_ao_xmltagging(guint key_id) +{ + ao_xmltagging(NULL, NULL); +}
gboolean ao_editor_notify_cb(GObject *object, GeanyEditor *editor, SCNotification *nt, gpointer data) @@ -234,6 +242,8 @@ "addons", "enable_markword", FALSE); ao_info->strip_trailing_blank_lines = utils_get_setting_boolean(config, "addons", "strip_trailing_blank_lines", FALSE); + ao_info->enable_xmltagging = utils_get_setting_boolean(config, "addons", + "enable_xmltagging", FALSE);
main_locale_init(LOCALEDIR, GETTEXT_PACKAGE); plugin_module_make_resident(geany_plugin); @@ -256,6 +266,8 @@ 0, 0, "focus_tasks", _("Focus Tasks List"), NULL); keybindings_set_item(key_group, KB_UPDATE_TASKS, kb_tasks_update, 0, 0, "update_tasks", _("Update Tasks List"), NULL); + keybindings_set_item(key_group, KB_XMLTAGGING, kb_ao_xmltagging, + 0, 0, "xml_tagging", _("Run XML tagging"), NULL); }
@@ -295,6 +307,8 @@ g_object_get_data(G_OBJECT(dialog), "check_markword")))); ao_info->strip_trailing_blank_lines = (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( g_object_get_data(G_OBJECT(dialog), "check_blanklines")))); + ao_info->enable_xmltagging = (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( + g_object_get_data(G_OBJECT(dialog), "check_xmltagging"))));
g_key_file_load_from_file(config, ao_info->config_file, G_KEY_FILE_NONE, NULL); g_key_file_set_boolean(config, "addons", @@ -310,6 +324,8 @@ g_key_file_set_boolean(config, "addons", "enable_markword", ao_info->enable_markword); g_key_file_set_boolean(config, "addons", "strip_trailing_blank_lines", ao_info->strip_trailing_blank_lines); + g_key_file_set_boolean(config, "addons", "enable_xmltagging", + ao_info->enable_xmltagging);
g_object_set(ao_info->doclist, "enable-doclist", ao_info->show_toolbar_doclist_item, NULL); g_object_set(ao_info->openuri, "enable-openuri", ao_info->enable_openuri, NULL); @@ -347,7 +363,7 @@ GtkWidget *vbox, *check_doclist, *check_openuri, *check_tasks, *check_systray; GtkWidget *check_bookmarklist, *check_markword, *frame_tasks, *vbox_tasks; GtkWidget *check_tasks_scan_mode, *entry_tasks_tokens, *label_tasks_tokens, *tokens_hbox; - GtkWidget *check_blanklines; + GtkWidget *check_blanklines, *check_xmltagging;
vbox = gtk_vbox_new(FALSE, 6);
@@ -424,6 +440,12 @@ ao_info->strip_trailing_blank_lines); gtk_box_pack_start(GTK_BOX(vbox), check_blanklines, FALSE, FALSE, 3);
+ check_xmltagging = gtk_check_button_new_with_label( + _("XML tagging for selection")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_xmltagging), + ao_info->enable_xmltagging); + gtk_box_pack_start(GTK_BOX(vbox), check_xmltagging, FALSE, FALSE, 3); + g_object_set_data(G_OBJECT(dialog), "check_doclist", check_doclist); g_object_set_data(G_OBJECT(dialog), "check_openuri", check_openuri); g_object_set_data(G_OBJECT(dialog), "check_tasks", check_tasks); @@ -433,6 +455,7 @@ g_object_set_data(G_OBJECT(dialog), "check_bookmarklist", check_bookmarklist); g_object_set_data(G_OBJECT(dialog), "check_markword", check_markword); g_object_set_data(G_OBJECT(dialog), "check_blanklines", check_blanklines); + g_object_set_data(G_OBJECT(dialog), "check_xmltagging", check_xmltagging); g_signal_connect(dialog, "response", G_CALLBACK(ao_configure_response_cb), NULL);
ao_configure_tasks_toggled_cb(GTK_TOGGLE_BUTTON(check_tasks), dialog);
Added: trunk/geany-plugins/addons/src/ao_xmltagging.c =================================================================== --- trunk/geany-plugins/addons/src/ao_xmltagging.c (rev 0) +++ trunk/geany-plugins/addons/src/ao_xmltagging.c 2010-05-15 21:26:52 UTC (rev 1358) @@ -0,0 +1,100 @@ +/* + * ao_xmltagging.c + * + * Copyright 2010 Frank Lanitz <frank(at)frank(dot)uvena(dot)de> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ + +#include "geanyplugin.h" +#include "addons.h" +#include "ao_xmltagging.h" + + +static void enter_key_pressed_in_entry(G_GNUC_UNUSED GtkWidget *widget, gpointer dialog) +{ + gtk_dialog_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT); +} + + +void ao_xmltagging() +{ + GeanyDocument *doc = NULL; + + doc = document_get_current(); + + g_return_if_fail(doc != NULL); + + if (sci_has_selection(doc->editor->sci) == TRUE) + { + gchar *selection = NULL; + gchar *replacement = NULL; + GtkWidget *dialog = NULL; + GtkWidget *vbox = NULL; + GtkWidget *label = NULL; + GtkWidget *textbox = NULL; + GtkWidget *table = NULL; + + dialog = gtk_dialog_new_with_buttons(_("XML tagging"), + GTK_WINDOW(geany->main_widgets->window), + GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, + NULL); + vbox = ui_dialog_vbox_new(GTK_DIALOG(dialog)); + gtk_widget_set_name(dialog, "GeanyDialog"); + gtk_box_set_spacing(GTK_BOX(vbox), 10); + + table = gtk_table_new(1, 2, FALSE); + gtk_table_set_col_spacings(GTK_TABLE(table), 6); + gtk_table_set_row_spacings(GTK_TABLE(table), 6); + + label = gtk_label_new(_("Tag name to be inserted:")); + textbox = gtk_entry_new(); + + gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + + gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1); + gtk_table_attach_defaults(GTK_TABLE(table), textbox, 1, 2, 0, 1); + gtk_container_add(GTK_CONTAINER(vbox), table); + + g_signal_connect(G_OBJECT(textbox), "activate", + G_CALLBACK(enter_key_pressed_in_entry), dialog); + + gtk_widget_show_all(vbox); + + if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) + { + const gchar *tag = NULL; + + selection = sci_get_selection_contents(doc->editor->sci); + sci_start_undo_action(doc->editor->sci); + + tag = g_strdup(gtk_entry_get_text(GTK_ENTRY(textbox))); + if (NZV(tag)) + { + replacement = g_strconcat("<", tag, ">", + selection, "</", tag, ">", NULL); + } + + sci_replace_sel(doc->editor->sci, replacement); + sci_end_undo_action(doc->editor->sci); + g_free(selection); + g_free(replacement); + } + + gtk_widget_destroy(dialog); + } +}
Added: trunk/geany-plugins/addons/src/ao_xmltagging.h =================================================================== --- trunk/geany-plugins/addons/src/ao_xmltagging.h (rev 0) +++ trunk/geany-plugins/addons/src/ao_xmltagging.h 2010-05-15 21:26:52 UTC (rev 1358) @@ -0,0 +1,22 @@ +/* + * ao_xmltagging.h + * + * Copyright 2010 Frank Lanitz <frank(at)frank(dot)uvena(dot)de> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ + +void ao_xmltagging();
Modified: trunk/geany-plugins/po/POTFILES.in =================================================================== --- trunk/geany-plugins/po/POTFILES.in 2010-05-15 21:26:05 UTC (rev 1357) +++ trunk/geany-plugins/po/POTFILES.in 2010-05-15 21:26:52 UTC (rev 1358) @@ -9,6 +9,7 @@ addons/src/ao_bookmarklist.c addons/src/ao_markword.c addons/src/ao_blanklines.c +addons/src/ao_xmltagging.c
#codenav codenav/src/codenavigation.c
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.