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

frlan at users.sourceforge.net frlan at xxxxx
Wed Feb 18 00:21:47 UTC 2009


Revision: 490
          http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=490&view=rev
Author:   frlan
Date:     2009-02-18 00:21:47 +0000 (Wed, 18 Feb 2009)

Log Message:
-----------
GeanyLaTeX: Replace special characters at input with LaTeX replacment

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

Modified: trunk/geanylatex/ChangeLog
===================================================================
--- trunk/geanylatex/ChangeLog	2009-02-18 00:21:13 UTC (rev 489)
+++ trunk/geanylatex/ChangeLog	2009-02-18 00:21:47 UTC (rev 490)
@@ -1,6 +1,8 @@
 2009-02-18  Frank Lanitz  <frank(at)frank(dot)uvena(dot)de>
 
  * Formating of selected text
+ * Added feature to replace special characters at input with LaTeX
+   replacment
 
 
 2009-02-15  Frank Lanitz  <frank(at)frank(dot)uvena(dot)de>

Modified: trunk/geanylatex/src/geanylatex.c
===================================================================
--- trunk/geanylatex/src/geanylatex.c	2009-02-18 00:21:13 UTC (rev 489)
+++ trunk/geanylatex/src/geanylatex.c	2009-02-18 00:21:47 UTC (rev 490)
@@ -46,8 +46,15 @@
 GtkWidget *menu_latex_format_insert = NULL;
 GtkWidget *menu_latex_format_insert_submenu = NULL;
 
+/* doing some global stuff */
+static GtkWidget *menu_latex_replace_toggle = NULL;
+
+/* Function will be deactivated, when only loaded */
+static gboolean toggle_active = FALSE;
+
 static GtkWidget *main_menu_item = NULL;
 
+
 /* Doing some basic keybinding stuff */
 enum
 {
@@ -55,11 +62,83 @@
 	LATEX_INSERT_LABEL_KB,
 	LATEX_INSERT_REF_KB,
 	LATEX_INSERT_NEWLINE,
+	LATEX_TOGGLE_ACTIVE,
 	COUNT_KB
 };
 
 PLUGIN_KEY_GROUP(geanylatex, COUNT_KB)
 
+
+/* Functions to toggle the status of plugin */
+void glatex_set_latextoggle_status(gboolean new_status)
+{
+	/* No more function at the moment.*/
+	if (toggle_active != new_status)
+		toggle_active = new_status;
+}
+
+static void toggle_status(G_GNUC_UNUSED GtkMenuItem * menuitem)
+{
+	if (toggle_active == TRUE)
+		glatex_set_latextoggle_status(FALSE);
+	else
+		glatex_set_latextoggle_status(TRUE);
+}
+
+
+static gboolean ht_editor_notify_cb(G_GNUC_UNUSED GObject *object, GeanyEditor *editor,
+									SCNotification *nt, G_GNUC_UNUSED gpointer data)
+{
+	g_return_val_if_fail(editor != NULL, FALSE);
+
+	if (toggle_active != TRUE)
+		return FALSE;
+
+	if (nt->nmhdr.code == SCN_CHARADDED)
+	{
+		gchar buf[7];
+		gint len;
+
+		len = g_unichar_to_utf8(nt->ch, buf);
+		if (len > 0)
+		{
+			const gchar *entity;
+
+			buf[len] = '\0';
+			entity = glatex_get_entity(buf);
+
+			if (entity != NULL)
+			{
+				gint pos = sci_get_current_position(editor->sci);
+
+				sci_set_selection_start(editor->sci, pos - len);
+				sci_set_selection_end(editor->sci, pos);
+
+				sci_replace_sel(editor->sci, entity);
+			}
+		}
+	}
+
+	return FALSE;
+}
+
+
+/* Called when keys were pressed */
+static void kblatex_toggle(G_GNUC_UNUSED guint key_id)
+{
+	if (toggle_active == TRUE)
+		glatex_set_latextoggle_status(FALSE);
+	else
+		glatex_set_latextoggle_status(TRUE);
+}
+
+
+PluginCallback plugin_callbacks[] =
+{
+	{ "editor-notify", (GCallback) &ht_editor_notify_cb, FALSE, NULL },
+	{ NULL, NULL, FALSE, NULL }
+};
+
 void
 glatex_insert_string(gchar *string, gboolean reset_position)
 {
@@ -863,6 +942,10 @@
 		0, 0, "insert_latex_ref", _("Insert \\ref"), menu_latex_ref);
 	keybindings_set_item(plugin_key_group, LATEX_INSERT_NEWLINE, kb_insert_newline,
 		0, 0, "insert_new_line", _("Insert linebreak \\\\ "), NULL);
+	keybindings_set_item(plugin_key_group, LATEX_TOGGLE_ACTIVE, kblatex_toggle,
+		0, 0, "latex_toggle_status", _("Turn input replacement on/off"),
+		menu_latex_replace_toggle);
+
 }
 
 void plugin_help()
@@ -960,6 +1043,17 @@
 			G_CALLBACK(glatex_insert_latex_format), GINT_TO_POINTER(i));
 	}
 
+	menu_latex_replace_toggle = gtk_check_menu_item_new_with_mnemonic(_
+		("_Special Characters Replacing"));
+	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(menu_latex_replace_toggle),
+		toggle_active);
+
+	g_signal_connect((gpointer) menu_latex_replace_toggle, "activate",
+			 G_CALLBACK(toggle_status), NULL);
+
+	gtk_container_add(GTK_CONTAINER(menu_latex_menu),
+			menu_latex_replace_toggle);
+
 	init_keybindings();
 
 	ui_add_document_sensitive(menu_latex_menu_special_char);

Modified: trunk/geanylatex/src/geanylatex.h
===================================================================
--- trunk/geanylatex/src/geanylatex.h	2009-02-18 00:21:13 UTC (rev 489)
+++ trunk/geanylatex/src/geanylatex.h	2009-02-18 00:21:47 UTC (rev 490)
@@ -45,6 +45,7 @@
 #include "latexutils.h"
 #include "reftex.h"
 #include "formatutils.h"
+#include "Scintilla.h"
 #include "plugindata.h"
 #include "geanyfunctions.h"
 

Modified: trunk/geanylatex/src/letters.c
===================================================================
--- trunk/geanylatex/src/letters.c	2009-02-18 00:21:13 UTC (rev 489)
+++ trunk/geanylatex/src/letters.c	2009-02-18 00:21:47 UTC (rev 490)
@@ -214,3 +214,21 @@
 	{0, NULL, NULL},
 
 };
+
+
+gchar *glatex_get_entity(const gchar *letter)
+{
+    guint i, len;
+
+    len = G_N_ELEMENTS(glatex_char_array);
+	for (i = 0; i < len; i++)
+	{
+		if (utils_str_equal(glatex_char_array[i].label, letter))
+		{
+			return glatex_char_array[i].latex;
+		}
+	}
+
+	/* if the char is not in the list */
+	return NULL;
+}

Modified: trunk/geanylatex/src/letters.h
===================================================================
--- trunk/geanylatex/src/letters.h	2009-02-18 00:21:13 UTC (rev 489)
+++ trunk/geanylatex/src/letters.h	2009-02-18 00:21:47 UTC (rev 490)
@@ -23,10 +23,17 @@
 #ifndef LETTERS_H
 #define LETTER_H
 
+#include "geanylatex.h"
 #include "datatypes.h"
+#include "ui_utils.h"
+#include "support.h"
+#include "utils.h"
 
 extern SubMenuTemplate glatex_char_array[];
 
 extern CategoryName glatex_cat_names[];
 
+gchar *glatex_get_entity(const gchar *letter);
+
+
 #endif


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