Scaffold -- Added trim command to text-plugin

Rui Lopes <[email protected]>
Newsgroups gmane.comp.gnome.devtools
Message-ID <1062449136.607.26.camel@localhost>
Hi all,

Just a patch for adding a trim command to the text plugin.


Anyone noticed that the text-plugin only works on the first document
loaded?


Regards,
Rui Lopes
text-trim.patch (text/plain, 6.9 KB)
# * Add a trim command to text plugin.
# * Some minor tweaks.
# -- Rui Lopes <[email protected]>
Index: libscaffold/scaffold-utils.c
===================================================================
RCS file: /cvs/gnome/scaffold/libscaffold/scaffold-utils.c,v
retrieving revision 1.21
diff -u -r1.21 scaffold-utils.c
--- libscaffold/scaffold-utils.c	31 Jul 2003 08:55:15 -0000	1.21
+++ libscaffold/scaffold-utils.c	1 Sep 2003 20:36:48 -0000
@@ -68,8 +68,6 @@
 {
 	if (!s)
 		return TRUE;
-	if (strlen (s) == 0)
-		return TRUE;
 
 	while (*s) {
 		if (!isspace (*s))
Index: plugins/text/Makefile.am
===================================================================
RCS file: /cvs/gnome/scaffold/plugins/text/Makefile.am,v
retrieving revision 1.15
diff -u -r1.15 Makefile.am
--- plugins/text/Makefile.am	31 Jul 2003 08:55:41 -0000	1.15
+++ plugins/text/Makefile.am	1 Sep 2003 20:36:49 -0000
@@ -17,7 +17,9 @@
 	text-insert.c		\
 	text-insert.h		\
 	text-replace.c		\
-	text-replace.h
+	text-replace.h		\
+	text-trim.c		\
+	text-trim.h
 
 libscaffold_text_la_LIBADD = \
 	$(COMPONENT_LIBS)
Index: plugins/text/scaffold-text-plugin.xml
===================================================================
RCS file: /cvs/gnome/scaffold/plugins/text/scaffold-text-plugin.xml,v
retrieving revision 1.2
diff -u -r1.2 scaffold-text-plugin.xml
--- plugins/text/scaffold-text-plugin.xml	20 Mar 2001 03:57:56 -0000	1.2
+++ plugins/text/scaffold-text-plugin.xml	1 Sep 2003 20:36:49 -0000
@@ -19,6 +19,8 @@
 	        <cmd name="TextReplaceTabs" _label="Replace tabs with spaces"
 		_tip="Replace all tabs in the document with spaces"
 		pixtype="stock" pixname="Convert"/>
+ 	        <cmd name="TextTrimTrailingSpaces" _label="Trim trailing spaces"
+		_tip="Removes all white-space from end of lines"/>
 	</commands>
 
 	<menu>
@@ -36,6 +38,7 @@
 				<menuitem name="TextDeleteEOL" verb=""/>
 			</submenu>
 			<menuitem name="TextReplaceTabs" verb=""/>
+			<menuitem name="TextTrimTrailingSpaces" verb=""/>
 		</submenu>
 	</menu>
 </Root>
Index: plugins/text/text-tool.c
===================================================================
RCS file: /cvs/gnome/scaffold/plugins/text/text-tool.c,v
retrieving revision 1.10
diff -u -r1.10 text-tool.c
--- plugins/text/text-tool.c	31 Jul 2003 08:55:42 -0000	1.10
+++ plugins/text/text-tool.c	1 Sep 2003 20:36:49 -0000
@@ -20,6 +20,7 @@
 #include "text-insert.h"
 #include "text-delete.h"
 #include "text-replace.h"
+#include "text-trim.h"
 
 #define PLUGIN_NAME			"scaffold-text-plugin"
 #define PLUGIN_XML			"scaffold-text-plugin.xml"
@@ -46,6 +47,7 @@
 	BONOBO_UI_UNSAFE_VERB("TextDeleteBOL", text_delete_to_bol),
 	BONOBO_UI_UNSAFE_VERB("TextDeleteEOL", text_delete_to_eol),
 	BONOBO_UI_UNSAFE_VERB("TextReplaceTabs", text_replace_tab_spaces),
+	BONOBO_UI_UNSAFE_VERB("TextTrimTrailingSpaces", text_trim_trailing_spaces),
 	BONOBO_UI_VERB_END
 };
 
Index: src/preferences-dialog.c
===================================================================
RCS file: /cvs/gnome/scaffold/src/preferences-dialog.c,v
retrieving revision 1.5
diff -u -r1.5 preferences-dialog.c
--- src/preferences-dialog.c	31 Jul 2003 08:55:48 -0000	1.5
+++ src/preferences-dialog.c	1 Sep 2003 20:36:49 -0000
@@ -132,8 +132,11 @@
 	if (gtk_tree_selection_get_selected (treesel, NULL, &iter)) {
 		gtk_tree_model_get (GTK_TREE_MODEL (dlg->priv->store), &iter, 
 				    COL_WIDGET, &page, COL_POSITION, &tab_pos, -1);
-		if (page == NULL)
+		if (page == NULL) {
+			/* TODO: Instead of returning, select a "Scaffold" page;
+			 *       similar to what gedit does. */
 			return;
+		}
 
 		gtk_notebook_set_current_page (GTK_NOTEBOOK (dlg->priv->notebook),
 					       tab_pos);
@@ -171,7 +174,7 @@
 				 GTK_TREE_MODEL (dlg->priv->store));
 
 	column = gtk_tree_view_column_new ();
-	gtk_tree_view_column_set_title (column, "Categories");
+	gtk_tree_view_column_set_title (column, _("Categories"));
 	renderer = gtk_cell_renderer_text_new ();
 	gtk_tree_view_column_pack_start (column, renderer, TRUE);
 	gtk_tree_view_column_set_cell_data_func (column, renderer,
--- /dev/null	Mon Sep  1 21:33:00 2003
+++ plugins/text/text-trim.h	Mon Sep  1 15:09:06 2003
@@ -0,0 +1,26 @@
+/*
+ * Text Trim for Scaffold text plugin.
+ *
+ * Copyright (C) 2003 Rui Lopes <[email protected]>
+ * 
+ * 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
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PLUGIN_TEXT_TRIM_H
+#define PLUGIN_TEXT_TRIM_H
+
+void text_trim_trailing_spaces (GtkWidget* widget, gpointer data);
+
+#endif
--- /dev/null	Mon Sep  1 21:33:00 2003
+++ plugins/text/text-trim.c	Mon Sep  1 21:05:21 2003
@@ -0,0 +1,61 @@
+/*
+ * Text Trim for Scaffold text plugin.
+ *
+ * Copyright (C) 2003 Rui Lopes <[email protected]>
+ * 
+ * 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
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <libscaffold/libscaffold.h>
+#include <glib.h>
+#include "text-trim.h"
+
+
+void
+text_trim_trailing_spaces (GtkWidget* widget, gpointer data)
+{
+	ScaffoldTool* tool = (ScaffoldTool*)data;
+	long space_pos;
+	long pos;
+	long length;
+
+	/* TODO: If there is a selection, trim only the lines on that selection. */
+
+	/* trim trailing spaces from all document lines */
+	space_pos = -1;
+	length = scaffold_get_document_length (tool);
+	for (pos = 0; pos < length; ++pos) {
+		char* ch = scaffold_get_document_chars (tool, pos, pos + 1);
+
+		if (*ch == '\n') {
+			if (space_pos >= 0) { /* only trim if needed */
+				scaffold_delete_text (tool, space_pos, pos);
+				space_pos = -1;
+				length = scaffold_get_document_length (tool);
+			}
+		}
+		else if (g_ascii_isspace (*ch)) {
+			/* only update space_pos if the last character was a
+			 * non-space */
+			if (space_pos < 0)
+				space_pos = pos;
+		}
+		else
+			space_pos = -1;
+
+		g_free(ch);
+	}
+}
+
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.