[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51903] trunk/blender/source/blender/ blenkernel/intern/text.c: Improvement for text indentation: keep selection as good as possible
Sergey Sharybin
sergey.vfx at gmail.com
Mon Nov 5 14:31:30 CET 2012
Revision: 51903
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51903
Author: nazgul
Date: 2012-11-05 13:31:26 +0000 (Mon, 05 Nov 2012)
Log Message:
-----------
Improvement for text indentation: keep selection as good as possible
Patch by Sebastian Nell, thanks!
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/text.c
Modified: trunk/blender/source/blender/blenkernel/intern/text.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/text.c 2012-11-05 13:00:33 UTC (rev 51902)
+++ trunk/blender/source/blender/blenkernel/intern/text.c 2012-11-05 13:31:26 UTC (rev 51903)
@@ -2862,7 +2862,7 @@
void txt_indent(Text *text)
{
- int len, num;
+ int len, num, curc_old;
char *tmp;
const char *add = "\t";
@@ -2885,6 +2885,8 @@
indentlen = spaceslen;
}
+ curc_old = text->curc;
+
num = 0;
while (TRUE) {
tmp = MEM_mallocN(text->curl->len + indentlen + 1, "textline_string");
@@ -2905,7 +2907,7 @@
txt_clean_text(text);
if (text->curl == text->sell) {
- text->selc = text->sell->len;
+ text->selc += indentlen;
break;
}
else {
@@ -2913,7 +2915,9 @@
num++;
}
}
- text->curc = 0;
+ if (!curc_old) text->curc = 0;
+ else text->curc = curc_old + indentlen;
+
while (num > 0) {
text->curl = text->curl->prev;
num--;
@@ -2928,7 +2932,8 @@
{
int num = 0;
const char *remove = "\t";
- int indent = 1;
+ int indentlen = 1;
+ int unindented_first = FALSE;
/* hardcoded: TXT_TABSIZE = 4 spaces: */
int spaceslen = TXT_TABSIZE;
@@ -2940,25 +2945,26 @@
/* insert spaces rather than tabs */
if (text->flags & TXT_TABSTOSPACES) {
remove = tab_to_spaces;
- indent = spaceslen;
+ indentlen = spaceslen;
}
while (TRUE) {
int i = 0;
- if (BLI_strncasecmp(text->curl->line, remove, indent) == 0) {
+ if (BLI_strncasecmp(text->curl->line, remove, indentlen) == 0) {
+ if (num == 0) unindented_first = TRUE;
while (i < text->curl->len) {
- text->curl->line[i] = text->curl->line[i + indent];
+ text->curl->line[i] = text->curl->line[i + indentlen];
i++;
}
- text->curl->len -= indent;
+ text->curl->len -= indentlen;
}
txt_make_dirty(text);
txt_clean_text(text);
if (text->curl == text->sell) {
- text->selc = text->sell->len;
+ if (i > 0) text->selc = MAX2(text->selc - indentlen, 0);
break;
}
else {
@@ -2967,7 +2973,9 @@
}
}
- text->curc = 0;
+
+ if (unindented_first) text->curc = MAX2(text->curc - indentlen, 0);
+
while (num > 0) {
text->curl = text->curl->prev;
num--;
More information about the Bf-blender-cvs
mailing list