forked from qt-creator/qt-creator
Editor: Fix whitespace cleaning.
Task-number: QTCREATORBUG-7994 Change-Id: I6c197ccc3a148555018e8f8184d116c88d7ea400 Reviewed-by: Christian Stenger <christian.stenger@theqtcompany.com> Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
This commit is contained in:
@@ -24,6 +24,7 @@
|
||||
****************************************************************************/
|
||||
|
||||
#include "tabsettings.h"
|
||||
#include "texteditorplugin.h"
|
||||
|
||||
#include <utils/settingsutils.h>
|
||||
|
||||
@@ -42,12 +43,16 @@ static const char paddingModeKey[] = "PaddingMode";
|
||||
|
||||
namespace TextEditor {
|
||||
|
||||
TabSettings::TabSettings() :
|
||||
m_tabPolicy(SpacesOnlyTabPolicy),
|
||||
m_tabSize(8),
|
||||
m_indentSize(4),
|
||||
m_continuationAlignBehavior(ContinuationAlignWithSpaces)
|
||||
TabSettings::TabSettings(TabSettings::TabPolicy tabPolicy,
|
||||
int tabSize,
|
||||
int indentSize,
|
||||
TabSettings::ContinuationAlignBehavior continuationAlignBehavior)
|
||||
: m_tabPolicy(tabPolicy)
|
||||
, m_tabSize(tabSize)
|
||||
, m_indentSize(indentSize)
|
||||
, m_continuationAlignBehavior(continuationAlignBehavior)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void TabSettings::toSettings(const QString &category, QSettings *s) const
|
||||
@@ -157,7 +162,7 @@ void TabSettings::removeTrailingWhitespace(QTextCursor cursor, QTextBlock &block
|
||||
}
|
||||
}
|
||||
|
||||
bool TabSettings::isIndentationClean(const QTextBlock &block) const
|
||||
bool TabSettings::isIndentationClean(const QTextBlock &block, const int indent) const
|
||||
{
|
||||
int i = 0;
|
||||
int spaceCount = 0;
|
||||
@@ -170,10 +175,16 @@ bool TabSettings::isIndentationClean(const QTextBlock &block) const
|
||||
|
||||
if (c == QLatin1Char(' ')) {
|
||||
++spaceCount;
|
||||
if (!spacesForTabs && spaceCount == m_tabSize)
|
||||
if (spaceCount == m_tabSize)
|
||||
if (!spacesForTabs)
|
||||
if ((m_continuationAlignBehavior != ContinuationAlignWithSpaces) || (i < indent))
|
||||
return false;
|
||||
if (spaceCount > indent && m_continuationAlignBehavior == NoContinuationAlign)
|
||||
return false;
|
||||
} else if (c == QLatin1Char('\t')) {
|
||||
if (spacesForTabs || spaceCount != 0)
|
||||
if (spacesForTabs || (spaceCount != 0))
|
||||
return false;
|
||||
if ((m_continuationAlignBehavior != ContinuationAlignWithIndent) && ((i + 1) * m_tabSize > indent))
|
||||
return false;
|
||||
}
|
||||
++i;
|
||||
@@ -275,23 +286,29 @@ bool TabSettings::guessSpacesForTabs(const QTextBlock &_block) const
|
||||
return m_tabPolicy != TabsOnlyTabPolicy;
|
||||
}
|
||||
|
||||
QString TabSettings::indentationString(int startColumn, int targetColumn, const QTextBlock &block) const
|
||||
QString TabSettings::indentationString(int startColumn, int targetColumn, int padding,
|
||||
const QTextBlock &block) const
|
||||
{
|
||||
targetColumn = qMax(startColumn, targetColumn);
|
||||
if (guessSpacesForTabs(block))
|
||||
return QString(targetColumn - startColumn, QLatin1Char(' '));
|
||||
|
||||
QString s;
|
||||
int alignedStart = startColumn - (startColumn % m_tabSize) + m_tabSize;
|
||||
int alignedStart = startColumn == 0 ? 0 : startColumn - (startColumn % m_tabSize) + m_tabSize;
|
||||
if (alignedStart > startColumn && alignedStart <= targetColumn) {
|
||||
s += QLatin1Char('\t');
|
||||
startColumn = alignedStart;
|
||||
}
|
||||
if (int columns = targetColumn - startColumn) {
|
||||
int tabs = columns / m_tabSize;
|
||||
s += QString(tabs, QLatin1Char('\t'));
|
||||
s += QString(columns - tabs * m_tabSize, QLatin1Char(' '));
|
||||
if (m_continuationAlignBehavior == NoContinuationAlign) {
|
||||
targetColumn -= padding;
|
||||
padding = 0;
|
||||
} else if (m_continuationAlignBehavior == ContinuationAlignWithIndent) {
|
||||
padding = 0;
|
||||
}
|
||||
const int columns = targetColumn - padding - startColumn;
|
||||
const int tabs = columns / m_tabSize;
|
||||
s += QString(tabs, QLatin1Char('\t'));
|
||||
s += QString(targetColumn - startColumn - tabs * m_tabSize, QLatin1Char(' '));
|
||||
return s;
|
||||
}
|
||||
|
||||
@@ -313,15 +330,7 @@ void TabSettings::indentLine(QTextBlock block, int newIndent, int padding) const
|
||||
// if (indentationColumn(text) == newIndent)
|
||||
// return;
|
||||
|
||||
QString indentString;
|
||||
|
||||
if (m_tabPolicy == TabsOnlyTabPolicy) {
|
||||
// user likes tabs for spaces and uses tabs for indentation, preserve padding
|
||||
indentString = indentationString(0, newIndent - padding, block);
|
||||
indentString += QString(padding, QLatin1Char(' '));
|
||||
} else {
|
||||
indentString = indentationString(0, newIndent, block);
|
||||
}
|
||||
const QString indentString = indentationString(0, newIndent, padding, block);
|
||||
|
||||
if (oldBlockLength == indentString.length() && text == indentString)
|
||||
return;
|
||||
@@ -346,15 +355,11 @@ void TabSettings::reindentLine(QTextBlock block, int delta) const
|
||||
if (oldIndent == newIndent)
|
||||
return;
|
||||
|
||||
QString indentString;
|
||||
if (m_tabPolicy == TabsOnlyTabPolicy && m_tabSize == m_indentSize) {
|
||||
// user likes tabs for spaces and uses tabs for indentation, preserve padding
|
||||
int padding = qMin(maximumPadding(text), newIndent);
|
||||
indentString = indentationString(0, newIndent - padding, block);
|
||||
indentString += QString(padding, QLatin1Char(' '));
|
||||
} else {
|
||||
indentString = indentationString(0, newIndent, block);
|
||||
}
|
||||
int padding = 0;
|
||||
// user likes tabs for spaces and uses tabs for indentation, preserve padding
|
||||
if (m_tabPolicy == TabsOnlyTabPolicy && m_tabSize == m_indentSize)
|
||||
padding = qMin(maximumPadding(text), newIndent);
|
||||
const QString indentString = indentationString(0, newIndent, padding, block);
|
||||
|
||||
if (oldBlockLength == indentString.length() && text == indentString)
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user