gtksourceview r2196 - in branches/indenters: . gtksourceview



Author: icq
Date: Mon Mar  2 12:31:29 2009
New Revision: 2196
URL: http://svn.gnome.org/viewvc/gtksourceview?rev=2196&view=rev

Log:
2009-03-02  Ignacio Casal Quinteiro  <nacho resa gmail com>

        * gtksourceview/c-indenter.c:
        * gtksourceview/gtksourceindenter-utils.c:
        * gtksourceview/gtksourceindenter.c:
        * gtksourceview/gtksourceview.c:
        * gtksourceview/gtksourceindenter-utils.h:
        * gtksourceview/gtksourceindenter.h:
        Clean up the source code and change from the gfloat approach
        to a gint approach when getting the indent level. 



Modified:
   branches/indenters/ChangeLog
   branches/indenters/gtksourceview/c-indenter.c
   branches/indenters/gtksourceview/gtksourceindenter-utils.c
   branches/indenters/gtksourceview/gtksourceindenter-utils.h
   branches/indenters/gtksourceview/gtksourceindenter.c
   branches/indenters/gtksourceview/gtksourceindenter.h
   branches/indenters/gtksourceview/gtksourceview.c

Modified: branches/indenters/gtksourceview/c-indenter.c
==============================================================================
--- branches/indenters/gtksourceview/c-indenter.c	(original)
+++ branches/indenters/gtksourceview/c-indenter.c	Mon Mar  2 12:31:29 2009
@@ -137,7 +137,7 @@
 	return found;
 }
 
-static gfloat
+static gint
 c_indenter_get_indentation_level (GtkSourceIndenter *indenter,
 				  GtkTextView *view,
 				  GtkTextIter *cur,
@@ -149,18 +149,18 @@
 	 */
 	GtkTextIter iter;
 	gunichar c;
-	gfloat amount = 0.;
+	gint amount = 0;
 	
 	iter = *cur;
 	
 	if (!gtk_source_indenter_move_to_no_space (&iter, -1))
-		return 0.;
+		return 0;
 
 	/*
 	 * Check for comments
 	 */
 	if (!gtk_source_indenter_move_to_no_comments (&iter))
-		return 0.;
+		return 0;
 
 	c = gtk_text_iter_get_char (&iter);
 	g_warning ("char %c", c);
@@ -181,7 +181,7 @@
 		
 		if (ch == '/')
 		{
-			amount = gtk_source_indenter_add_space (view, amount);
+			amount++;
 		}
 	}
 	else if (c == ';')
@@ -282,7 +282,7 @@
 		}
 		else
 		{
-			amount++;
+			amount = gtk_source_indenter_add_indent (view, amount);
 		}
 	}
 	else if (c == ',' || c == '&' || c == '|')
@@ -296,7 +296,7 @@
 		if (gtk_source_indenter_find_open_char (&s, '(', ')', TRUE))
 		{
 			amount = gtk_source_indenter_get_amount_indents_from_position (view, &s);
-			amount = gtk_source_indenter_add_space (view, amount);
+			amount++;
 		}
 	}
 	else if (c == ')' && relocating)
@@ -324,7 +324,7 @@
 			
 			if (!is_caselabel (label))
 			{
-				amount = 0.;
+				amount = 0;
 			}
 			else
 			{
@@ -335,19 +335,23 @@
 		}
 		else
 		{
-			amount = 1.;
+			/*
+			 * FIXME: Is this OK with amount = 1 indent ??
+			 */
+			amount = gtk_source_indenter_add_indent (view, 0);
 		}
 	}
 	else if (c == '=')
 	{
-		amount = gtk_source_indenter_get_amount_indents (view, &iter) + 1;
+		amount = gtk_source_indenter_get_amount_indents (view, &iter);
+		amount = gtk_source_indenter_add_indent (view, amount);
 	}
 	else if (match_regexes (&iter))
 	{
 		gtk_source_indenter_find_open_char (&iter, '(', ')', FALSE);
 		
-		amount = gtk_source_indenter_get_amount_indents (view,
-								 &iter) + 1;
+		amount = gtk_source_indenter_get_amount_indents (view, &iter);
+		amount = gtk_source_indenter_add_indent (view, amount);
 	}
 	else
 	{

Modified: branches/indenters/gtksourceview/gtksourceindenter-utils.c
==============================================================================
--- branches/indenters/gtksourceview/gtksourceindenter-utils.c	(original)
+++ branches/indenters/gtksourceview/gtksourceindenter-utils.c	Mon Mar  2 12:31:29 2009
@@ -27,59 +27,36 @@
 #include "gtksourceindenter-utils.h"
 #include "gtksourceview-utils.h"
 #include "gtksourceview.h"
-#include <math.h>
 
-gfloat
+gint
 gtk_source_indenter_get_amount_indents (GtkTextView *view,
 					GtkTextIter *cur)
 {
-	gint indent_width;
 	GtkTextIter start;
 	gunichar c;
-	gint amount = 0;
-	gint rest = 0;
+	
+	g_return_val_if_fail (GTK_IS_TEXT_VIEW (view), 0);
+	g_return_val_if_fail (cur != NULL, 0);
 	
 	start = *cur;
 	gtk_text_iter_set_line_offset (&start, 0);
 	
 	c = gtk_text_iter_get_char (&start);
-	if (!g_unichar_isspace (c))
-		return 0;
-	
-	indent_width = _gtk_source_view_get_real_indent_width (GTK_SOURCE_VIEW (view));
 	
 	while (g_unichar_isspace (c) &&
 	       c != '\n' &&
-	       c != '\r' &&
-	       gtk_text_iter_compare (&start, cur) < 0)
+	       c != '\r')
 	{
-		if (c == '\t')
-		{
-			if (rest != 0)
-				rest = 0;
-			amount++;
-		}
-		else
-		{
-			rest++;
-		}
-		
-		if (rest == indent_width)
-		{
-			amount++;
-			rest = 0;
-		}
-		
 		if (!gtk_text_iter_forward_char (&start))
 			break;
 		
 		c = gtk_text_iter_get_char (&start);
 	}
 
-	return (gfloat)amount + (gfloat)(0.1 * rest);
+	return gtk_source_indenter_get_amount_indents_from_position (view, &start);
 }
 
-gfloat
+gint
 gtk_source_indenter_get_amount_indents_from_position (GtkTextView *view,
 						      GtkTextIter *cur)
 {
@@ -89,6 +66,9 @@
 	gint amount = 0;
 	gint rest = 0;
 	
+	g_return_val_if_fail (GTK_IS_TEXT_VIEW (view), 0);
+	g_return_val_if_fail (cur != NULL, 0);
+	
 	indent_width = _gtk_source_view_get_real_indent_width (GTK_SOURCE_VIEW (view));
 	
 	start = *cur;
@@ -102,7 +82,7 @@
 		{
 			if (rest != 0)
 				rest = 0;
-			amount++;
+			amount += indent_width;
 		}
 		else
 		{
@@ -111,7 +91,7 @@
 		
 		if (rest == indent_width)
 		{
-			amount++;
+			amount += indent_width;
 			rest = 0;
 		}
 		
@@ -121,7 +101,7 @@
 		c = gtk_text_iter_get_char (&start);
 	}
 	
-	return (gfloat)amount + (gfloat)(0.1 * rest);
+	return amount + rest;
 }
 
 gboolean
@@ -131,6 +111,8 @@
 	gunichar c;
 	gboolean moved = TRUE;
 	
+	g_return_val_if_fail (iter != NULL, FALSE);
+	
 	c = gtk_text_iter_get_char (iter);
 	
 	while (g_unichar_isspace (c))
@@ -151,6 +133,8 @@
 {
 	gunichar c;
 	
+	g_return_val_if_fail (iter != NULL, FALSE);
+	
 	c = gtk_text_iter_get_char (iter);
 	
 	if (c == '/' && gtk_text_iter_backward_char (iter))
@@ -210,6 +194,8 @@
 	gboolean moved = FALSE;
 	gint counter = 0;
 	
+	g_return_val_if_fail (iter != NULL, FALSE);
+	
 	copy = *iter;
 	
 	/*
@@ -245,28 +231,15 @@
 	return moved;
 }
 
-gfloat
-gtk_source_indenter_add_space (GtkTextView *view,
-			       gfloat current_level)
+gint
+gtk_source_indenter_add_indent (GtkTextView *view,
+				gint current_level)
 {
 	gint indent_width;
-	gint spaces;
-	gint tabs;
-	
-	indent_width = _gtk_source_view_get_real_indent_width (GTK_SOURCE_VIEW (view));
-	tabs = (gint)current_level;
-	spaces = rint (10 * (gfloat)(current_level - tabs));
 	
-	/*
-	 * We add the new space
-	 */
-	spaces++;
+	g_return_val_if_fail (GTK_IS_TEXT_VIEW (view), 0);
 	
-	if (spaces == indent_width)
-	{
-		spaces = 0;
-		tabs++;
-	}
+	indent_width = _gtk_source_view_get_real_indent_width (GTK_SOURCE_VIEW (view));
 	
-	return (gfloat)tabs + (gfloat)(0.1 * spaces);
+	return current_level + indent_width;
 }

Modified: branches/indenters/gtksourceview/gtksourceindenter-utils.h
==============================================================================
--- branches/indenters/gtksourceview/gtksourceindenter-utils.h	(original)
+++ branches/indenters/gtksourceview/gtksourceindenter-utils.h	Mon Mar  2 12:31:29 2009
@@ -28,10 +28,10 @@
 
 G_BEGIN_DECLS
 
-gfloat		 gtk_source_indenter_get_amount_indents		(GtkTextView *view,
+gint		 gtk_source_indenter_get_amount_indents		(GtkTextView *view,
 								 GtkTextIter *cur);
 
-gfloat		 gtk_source_indenter_get_amount_indents_from_position
+gint		 gtk_source_indenter_get_amount_indents_from_position
 								(GtkTextView *view,
 								 GtkTextIter *cur);
 
@@ -45,8 +45,8 @@
 								 gchar close,
 								 gboolean skip_first);
 
-gfloat		 gtk_source_indenter_add_space			(GtkTextView *view,
-								 gfloat current_level);
+gint		 gtk_source_indenter_add_indent			(GtkTextView *view,
+								 gint current_level);
 
 G_END_DECLS
 

Modified: branches/indenters/gtksourceview/gtksourceindenter.c
==============================================================================
--- branches/indenters/gtksourceview/gtksourceindenter.c	(original)
+++ branches/indenters/gtksourceview/gtksourceindenter.c	Mon Mar  2 12:31:29 2009
@@ -35,17 +35,6 @@
 	NULL
 };
 
-static const gchar * extra_indent_words[] =
-{
-	"if",
-	"else",
-	"while",
-	"do",
-	"for",
-	"switch",
-	NULL
-};
-
 /* Default implementation */
 static const gchar * const *
 gtk_source_indenter_get_relocatables_default (GtkSourceIndenter *self)
@@ -54,14 +43,7 @@
 }
 
 /* Default implementation */
-static const gchar * const *
-gtk_source_indenter_get_extra_indent_words_default (GtkSourceIndenter *self)
-{
-	return extra_indent_words;
-}
-
-/* Default implementation */
-static gfloat
+static gint
 gtk_source_indenter_get_indentation_level_default (GtkSourceIndenter *self,
 						   GtkTextView       *view,
 						   GtkTextIter       *iter,
@@ -82,7 +64,6 @@
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
 	klass->get_relocatables = gtk_source_indenter_get_relocatables_default;
-	klass->get_extra_indent_words = gtk_source_indenter_get_extra_indent_words_default;
 	klass->get_indentation_level = gtk_source_indenter_get_indentation_level_default;
 
 	object_class->finalize = gtk_source_indenter_finalize;
@@ -109,7 +90,7 @@
  *
  * Returns: the indentation level for a line determined by @iter.
  */
-gfloat
+gint
 gtk_source_indenter_get_indentation_level (GtkSourceIndenter *self,
 					   GtkTextView       *view,
 					   GtkTextIter       *iter,
@@ -121,23 +102,6 @@
 }
 
 /**
- * gtk_source_indenter_get_extra_indent_words:
- * @self: a #GtkSourceIndenter
- *
- * Gets the words that start an extra indent in the next line.
- * This will not change the indentation level.
- *
- * Returns: the words that start an extra indent in the next line.
- */
-const gchar * const *
-gtk_source_indenter_get_extra_indent_words (GtkSourceIndenter *self)
-{
-	g_return_val_if_fail (GTK_IS_SOURCE_INDENTER (self), NULL);
-	
-	return GTK_SOURCE_INDENTER_GET_CLASS (self)->get_extra_indent_words (self);
-}
-
-/**
  * gtk_source_indenter_get_relocatables:
  * @self: a #GtkSourceIndenter
  *

Modified: branches/indenters/gtksourceview/gtksourceindenter.h
==============================================================================
--- branches/indenters/gtksourceview/gtksourceindenter.h	(original)
+++ branches/indenters/gtksourceview/gtksourceindenter.h	Mon Mar  2 12:31:29 2009
@@ -56,9 +56,7 @@
 	
 	const gchar * const * (*get_relocatables)         (GtkSourceIndenter *self);
 	
-	const gchar * const * (*get_extra_indent_words)   (GtkSourceIndenter *self);
-	
-	gfloat		      (*get_indentation_level)    (GtkSourceIndenter *self,
+	gint		      (*get_indentation_level)    (GtkSourceIndenter *self,
 							   GtkTextView       *view,
 							   GtkTextIter       *iter,
 							   gboolean           relocating);
@@ -69,23 +67,12 @@
 const gchar * const *
 		 gtk_source_indenter_get_relocatables	(GtkSourceIndenter *self);
 
-const gchar * const *
-		 gtk_source_indenter_get_extra_indent_words
-		 					(GtkSourceIndenter *self);
-
-gfloat		 gtk_source_indenter_get_indentation_level
+gint		 gtk_source_indenter_get_indentation_level
 							(GtkSourceIndenter *self,
 							 GtkTextView       *buf,
 							 GtkTextIter       *iter,
 							 gboolean           relocating);
 
-gfloat		 gtk_source_indenter_get_amount_indents (GtkTextView *view,
-							 GtkTextIter *cur);
-
-gfloat		 gtk_source_indenter_get_amount_indents_from_position
-							(GtkTextView *view,
-							 GtkTextIter *cur);
-
 G_END_DECLS
 
 #endif

Modified: branches/indenters/gtksourceview/gtksourceview.c
==============================================================================
--- branches/indenters/gtksourceview/gtksourceview.c	(original)
+++ branches/indenters/gtksourceview/gtksourceview.c	Mon Mar  2 12:31:29 2009
@@ -32,7 +32,6 @@
 #include <gtk/gtk.h>
 #include <gdk/gdkkeysyms.h>
 #include <pango/pango-tabs.h>
-#include <math.h>
 
 #include "gtksourceview-i18n.h"
 
@@ -2783,16 +2782,16 @@
 
 static gchar *
 get_indent_string_from_indent_level (GtkSourceView *view,
-				     gfloat level)
+				     gint level)
 {
 	gint tabs;
 	gint spaces;
 	gchar *indent = NULL;
 	gint indent_width;
 	
-	tabs = (gint)level;
-	spaces = rint (10 * (gfloat)(level - tabs));
 	indent_width = _gtk_source_view_get_real_indent_width (view);
+	tabs = level / indent_width;
+	spaces = level % indent_width;
 	
 	if (view->priv->insert_spaces)
 	{
@@ -3252,7 +3251,7 @@
 	GtkSourceIndenter *indenter;
 	GtkTextIter copy;
 	const gchar * const *relocatables;
-	gfloat level;
+	gint level;
 	gint m = 0;
 	
 	if (event->type != GDK_KEY_PRESS || 
@@ -3400,7 +3399,7 @@
 		 * level as the previous line.
 		 * SHIFT+ENTER allows to avoid autoindentation.
 		 */
-		gfloat indent_level;
+		gint indent_level;
 		gchar *indent = NULL;
 
 		/* Calculate line indentation and create indent string. */
@@ -3409,7 +3408,7 @@
 									  &cur, FALSE);
 		indent = get_indent_string_from_indent_level (view, indent_level);
 		
-		g_warning ("%f", indent_level);
+		g_warning ("%d", indent_level);
 		
 		if (indent != NULL)
 		{
@@ -4009,7 +4008,7 @@
 	while (gtk_text_iter_get_line (start) <=
 	       gtk_text_iter_get_line (end))
 	{
-		gfloat level;
+		gint level;
 		gchar *str;
 		
 		/*
@@ -4022,7 +4021,7 @@
 								   GTK_TEXT_VIEW (view),
 								   start,
 								   FALSE);
-		g_warning ("reindent level: %f", level);
+		g_warning ("reindent level: %d", level);
 		str = get_indent_string_from_indent_level (view, level);
 		if (str != NULL)
 		{



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]