SF.net SVN: geany-plugins:[549] trunk/geanylatex

frlan at users.sourceforge.net frlan at xxxxx
Mon Mar 16 23:22:28 UTC 2009


Revision: 549
          http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=549&view=rev
Author:   frlan
Date:     2009-03-16 23:22:28 +0000 (Mon, 16 Mar 2009)

Log Message:
-----------
GeanyLaTeX: Added a function to bulk replace special characters inside marked text by keybinding

Modified Paths:
--------------
    trunk/geanylatex/ChangeLog
    trunk/geanylatex/src/geanylatex.c

Modified: trunk/geanylatex/ChangeLog
===================================================================
--- trunk/geanylatex/ChangeLog	2009-03-16 23:20:12 UTC (rev 548)
+++ trunk/geanylatex/ChangeLog	2009-03-16 23:22:28 UTC (rev 549)
@@ -1,3 +1,9 @@
+2009-03-15  Frank Lanitz  <frank(at)frank(dot)uvena(dot)de>
+
+ * Added a function to bulk replace special characters
+   inside marked text by keybinding
+
+
 2009-03-13  Frank Lanitz  <frank(at)frank(dot)uvena(dot)de>
 
  * Don't offer insert environment dialog in case of no document is open.

Modified: trunk/geanylatex/src/geanylatex.c
===================================================================
--- trunk/geanylatex/src/geanylatex.c	2009-03-16 23:20:12 UTC (rev 548)
+++ trunk/geanylatex/src/geanylatex.c	2009-03-16 23:22:28 UTC (rev 549)
@@ -66,6 +66,7 @@
 	LATEX_TOGGLE_ACTIVE,
 	LATEX_ENVIRONMENT_INSERT,
 	LATEX_INSERT_NEWITEM_KB,
+	LATEX_REPLACE_SPECIAL_CHARS,
 	COUNT_KB
 };
 
@@ -121,11 +122,53 @@
 			}
 		}
 	}
-
 	return FALSE;
 }
 
 
+static void replace_special_character()
+{
+	GeanyDocument *doc = NULL;
+	doc = document_get_current();
+
+	if (doc != NULL && sci_has_selection(doc->editor->sci))
+	{
+		gint selection_len = sci_get_selected_text_length(doc->editor->sci);
+		gchar *selection = g_malloc(selection_len + 1);
+		GString *replacement = g_string_new(NULL);
+		gint i;
+		gchar *new = NULL;
+		gchar *entity = NULL;
+		gchar buf[7];
+		gint len;
+
+		sci_get_selected_text(doc->editor->sci, selection);
+
+		selection_len = sci_get_selected_text_length(doc->editor->sci) - 1;
+		for (i = 0; i < selection_len; i++)
+		{
+			len = g_unichar_to_utf8(g_utf8_get_char(selection + i), buf);
+			i = len - 1 + i;
+			buf[len] = '\0';
+			entity = glatex_get_entity(buf);
+
+			if (entity != NULL)
+			{
+				replacement = g_string_append(replacement, entity);
+			}
+			else
+			{
+				replacement = g_string_append(replacement, buf);
+			}
+		}
+		new = g_string_free(replacement, FALSE);
+		sci_replace_sel(doc->editor->sci, new);
+		g_free(selection);
+		g_free(new);
+		g_free(entity);
+	}
+}
+
 /* Called when keys were pressed */
 static void kblatex_toggle(G_GNUC_UNUSED guint key_id)
 {
@@ -147,7 +190,6 @@
 {
 	GeanyDocument *doc = NULL;
 
-
 	doc = document_get_current();
 
 	if (doc != NULL && string != NULL)
@@ -950,6 +992,13 @@
 	glatex_insert_string("\\item ", TRUE);
 }
 
+static void kb_replace_special_chars(G_GNUC_UNUSED guint key_id)
+{
+	if (NULL == document_get_current())
+		return;
+	replace_special_character();
+}
+
 /*static void kb_bibtex_entry_insert(G_GNUC_UNUSED guint key_id)
 {
 	insert_bibtex_entry(NULL, NULL);
@@ -974,6 +1023,8 @@
 		_("Run insert environment dialog"), menu_latex_insert_environment);
 	keybindings_set_item(plugin_key_group, LATEX_INSERT_NEWITEM_KB,
 		kb_insert_newitem, 0, 0, "latex_insert_item", _("Insert \\item"), NULL);
+	keybindings_set_item(plugin_key_group, LATEX_REPLACE_SPECIAL_CHARS,
+		kb_replace_special_chars, 0, 0, "latex_replace_chars", _("Replacement of special characters"), NULL);
 }
 
 void plugin_help()


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