Revision: 1265 http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=1265&view=re... Author: colombanw Date: 2010-04-21 13:22:58 +0000 (Wed, 21 Apr 2010)
Log Message: ----------- GeanyGenDoc: Add ability to document a whole file at once
Modified Paths: -------------- trunk/geanygendoc/src/ggd-plugin.c trunk/geanygendoc/src/ggd.c trunk/geanygendoc/src/ggd.h
Modified: trunk/geanygendoc/src/ggd-plugin.c =================================================================== --- trunk/geanygendoc/src/ggd-plugin.c 2010-04-21 13:22:25 UTC (rev 1264) +++ trunk/geanygendoc/src/ggd-plugin.c 2010-04-21 13:22:58 UTC (rev 1265) @@ -34,9 +34,6 @@
/* - * TODO: - * * add option to generate comments for the whole file - * * Questions: * * how to update tag list? (tm_source_file_buffer_update() is not found in * symbols table) @@ -121,6 +118,20 @@ } }
+/* tries to insert comments for all the document */ +static void +insert_all_comments (void) +{ + GeanyDocument *doc; + + doc = document_get_current (); + if (DOC_VALID (doc)) { + /* try to ensure tags corresponds to the actual state of the file */ + refresh_tag_list (doc->tm_file, doc->editor->sci, doc); + ggd_insert_all_comments (doc, OPT_doctype); + } +} + static gboolean load_configuration (void) { @@ -189,7 +200,7 @@ }
static void -keybinding_activated_handler (guint key_id) +insert_comment_keybinding_handler (guint key_id) { (void)key_id;
@@ -219,7 +230,7 @@ /* make item document-presence sensitive */ ui_add_document_sensitive (pdata->edit_menu_item); /* and attach a keybinding */ - keybindings_set_item (plugin_key_group, KB_INSERT, keybinding_activated_handler, + keybindings_set_item (plugin_key_group, KB_INSERT, insert_comment_keybinding_handler, GDK_d, GDK_CONTROL_MASK | GDK_SHIFT_MASK, "instert_doc", _("Insert documentation comment"), pdata->edit_menu_item); @@ -282,6 +293,14 @@
/* build submenu */ menu = gtk_menu_new (); + /* build "document all" item */ + item = gtk_menu_item_new_with_mnemonic (_("_Document all")); + g_signal_connect (item, "activate", + G_CALLBACK (insert_all_comments), NULL); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + /* separator */ + item = gtk_separator_menu_item_new (); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); /* build "reload" item */ item = gtk_image_menu_item_new_with_mnemonic (_("_Reload configuration files")); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item),
Modified: trunk/geanygendoc/src/ggd.c =================================================================== --- trunk/geanygendoc/src/ggd.c 2010-04-21 13:22:25 UTC (rev 1264) +++ trunk/geanygendoc/src/ggd.c 2010-04-21 13:22:58 UTC (rev 1265) @@ -28,6 +28,7 @@
#include "ggd-file-type.h" #include "ggd-file-type-manager.h" +#include "ggd-utils.h" #include "ggd-plugin.h"
@@ -395,3 +396,65 @@
return success; } + +/** + * ggd_insert_all_comments: + * @doc: A #GeanyDocument for which insert the comments + * @doc_type: Documentation type identifier + * + * Tries to insert a comment for each symbol of a document. + * + * Returns: %TRUE on full success, %FALSE otherwise. + */ +gboolean +ggd_insert_all_comments (GeanyDocument *doc, + const gchar *doc_type) +{ + gboolean success = FALSE; + GgdFileType *ft; + + g_return_val_if_fail (DOC_VALID (doc), FALSE); + + ft = ggd_file_type_manager_get_file_type (doc->file_type->id); + if (ft) { + GgdDocType *doctype; + + doctype = ggd_file_type_get_doc (ft, doc_type); + if (! doctype) { + msgwin_status_add (_("No documentation type "%s" for language "%s""), + doc_type, doc->file_type->name); + } else { + GPtrArray *tag_array; + ScintillaObject *sci = doc->editor->sci; + const TMTag *tag; + guint i; + GHashTable *tag_done_table; /* keeps the list of documented tags. + * Useful since documenting a tag might + * actually document another one */ + + success = TRUE; + tag_array = doc->tm_file->tags_array; + tag_done_table = g_hash_table_new (NULL, NULL); + /* sort the tags to be sure to insert by the end of the document, then we + * don't modify the element's position of tags we'll work on */ + ggd_tag_sort_by_line (tag_array, GGD_SORT_DESC); + sci_start_undo_action (sci); + GGD_PTR_ARRAY_FOR (tag_array, i, tag) { + GgdDocSetting *setting; + + setting = get_setting_from_tag (doctype, tag_array, tag, &tag); + if (! setting) { + success = FALSE; + break; + } else if (! g_hash_table_lookup (tag_done_table, tag)) { + success = do_insert_comment (sci, tag_array, tag, ft, setting); + g_hash_table_insert (tag_done_table, (gpointer)tag, (gpointer)tag); + } + } + sci_end_undo_action (sci); + g_hash_table_destroy (tag_done_table); + } + } + + return success; +}
Modified: trunk/geanygendoc/src/ggd.h =================================================================== --- trunk/geanygendoc/src/ggd.h 2010-04-21 13:22:25 UTC (rev 1264) +++ trunk/geanygendoc/src/ggd.h 2010-04-21 13:22:58 UTC (rev 1265) @@ -29,6 +29,8 @@ gboolean ggd_insert_comment (GeanyDocument *doc, gint line, const gchar *doc_type); +gboolean ggd_insert_all_comments (GeanyDocument *doc, + const gchar *doc_type);
G_END_DECLS
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.