[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [30881] trunk/blender/source/blender: patch [#23088] 2.5 Text Editor: Preserve indentation with spaces

Campbell Barton ideasman42 at gmail.com
Fri Jul 30 00:34:46 CEST 2010


Revision: 30881
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30881
Author:   campbellbarton
Date:     2010-07-30 00:34:46 +0200 (Fri, 30 Jul 2010)

Log Message:
-----------
patch [#23088] 2.5 Text Editor: Preserve indentation with spaces
from Fabian Fricke (frigi)

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_text.h
    trunk/blender/source/blender/blenkernel/intern/text.c
    trunk/blender/source/blender/editors/space_text/text_ops.c

Modified: trunk/blender/source/blender/blenkernel/BKE_text.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_text.h	2010-07-29 20:59:47 UTC (rev 30880)
+++ trunk/blender/source/blender/blenkernel/BKE_text.h	2010-07-29 22:34:46 UTC (rev 30881)
@@ -92,7 +92,7 @@
 void 	comment			(struct Text *text);
 void 	indent			(struct Text *text);
 void	uncomment		(struct Text *text);
-int	setcurr_tab		(struct Text *text);
+int	setcurr_tab_spaces	(struct Text *text, int space);
 
 void	txt_add_marker						(struct Text *text, struct TextLine *line, int start, int end, char color[4], int group, int flags);
 short	txt_clear_marker_region				(struct Text *text, struct TextLine *line, int start, int end, int group, int flags);

Modified: trunk/blender/source/blender/blenkernel/intern/text.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/text.c	2010-07-29 20:59:47 UTC (rev 30880)
+++ trunk/blender/source/blender/blenkernel/intern/text.c	2010-07-29 22:34:46 UTC (rev 30881)
@@ -2683,19 +2683,20 @@
 	}
 }
 
-int setcurr_tab (Text *text)
+int setcurr_tab_spaces (Text *text, int space)
 {
 	int i = 0;
 	int test = 0;
-	char *word = ":";
-	char *comm = "#";
+	const char *word = ":";
+	const char *comm = "#";
+	const char indent= (text->flags & TXT_TABSTOSPACES) ? ' ' : '\t';
 	static char *back_words[]= {"return", "break", "continue", "pass", "yield", NULL};
 	if (!text) return 0;
 	if (!text->curl) return 0;
-	
-	while (text->curl->line[i] == '\t')
+
+	while (text->curl->line[i] == indent)
 	{
-		//we only count thos tabs that are before any text or before the curs;
+		//we only count those tabs/spaces that are before any text or before the curs;
 		if (i == text->curc)
 		{
 			return i;
@@ -2718,7 +2719,7 @@
 			}
 		}
 		if (indent) {
-			i++;
+			i += space;
 		}
 	}
 
@@ -2729,7 +2730,7 @@
 		{
 			if(strcspn(text->curl->line, back_words[test]) < strcspn(text->curl->line, comm))
 			{
-				i--;
+				i -= space;
 			}
 		}
 	}

Modified: trunk/blender/source/blender/editors/space_text/text_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_text/text_ops.c	2010-07-29 20:59:47 UTC (rev 30880)
+++ trunk/blender/source/blender/editors/space_text/text_ops.c	2010-07-29 22:34:46 UTC (rev 30881)
@@ -902,15 +902,22 @@
 
 static int line_break_exec(bContext *C, wmOperator *op)
 {
+	SpaceText *st= CTX_wm_space_text(C);
 	Text *text= CTX_data_edit_text(C);
-	int a, curtab;
+	int a, curts;
+	int space = (text->flags & TXT_TABSTOSPACES) ? st->tabnumber : 1;
 
-	// double check tabs before splitting the line
-	curtab= setcurr_tab(text);
+	// double check tabs/spaces before splitting the line
+	curts= setcurr_tab_spaces(text, space);
 	txt_split_curline(text);
 
-	for(a=0; a < curtab; a++)
-		txt_add_char(text, '\t');
+	for(a=0; a < curts; a++) {
+		if (text->flags & TXT_TABSTOSPACES) {
+			txt_add_char(text, ' ');
+		} else {
+			txt_add_char(text, '\t');
+		}
+	}
 
 	if(text->curl) {
 		if(text->curl->prev)





More information about the Bf-blender-cvs mailing list