[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdelibs/kate/utils
From: Parker Coates <parker.coates () gmail ! com>
Date: 2009-03-01 17:37:53
Message-ID: 1235929073.941658.7879.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 933822 by coates:
When using tabs for indentation and spaces for alignment, Kate should now preserve \
your space alignment when changing indentation manually.
M +22 -3 kateautoindent.cpp
--- trunk/KDE/kdelibs/kate/utils/kateautoindent.cpp #933821:933822
@@ -137,13 +137,32 @@
if (indentDepth < 0)
indentDepth = 0;
- QString indentString = tabString (indentDepth, align);
-
int first_char = textline->firstChar();
-
if (first_char < 0)
first_char = textline->length();
+ // Preserve existing "tabs then spaces" alignment if and only if:
+ // - no alignment was passed to doIndent and
+ // - we aren't using spaces for indentation and
+ // - we aren't rounding indentation up to the next multiple of the indentation \
width and + // - we aren't using a combination to tabs and spaces for alignment, or \
in other words + // the indent width is a multiple of the tab width.
+ bool preserveAlignment = !useSpaces && keepExtra && indentWidth % tabWidth == 0;
+ if (align == 0 && preserveAlignment)
+ {
+ // Count the number of consecutive spaces at the end of the existing indentation
+ QString oldIndentation = textline->string(0, first_char);
+ int i = oldIndentation.size() - 1;
+ while (i >= 0 && oldIndentation.at(i) == ' ')
+ --i;
+ // Use the passed indentDepth as the alignment, and set the indentDepth to
+ // that value minus the number of spaces found (but don't let it get negative).
+ align = indentDepth;
+ indentDepth = qMax(0, align - (oldIndentation.size() - 1 - i));
+ }
+
+ QString indentString = tabString(indentDepth, align);
+
// remove leading whitespace, then insert the leading indentation
doc->editStart (view);
doc->editRemoveText (line, 0, first_char);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic