diff options
Diffstat (limited to 'src/plugins/qmljstools/qmljsindenter.cpp')
-rw-r--r-- | src/plugins/qmljstools/qmljsindenter.cpp | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/src/plugins/qmljstools/qmljsindenter.cpp b/src/plugins/qmljstools/qmljsindenter.cpp new file mode 100644 index 0000000000..97f641a734 --- /dev/null +++ b/src/plugins/qmljstools/qmljsindenter.cpp @@ -0,0 +1,86 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + +#include "qmljsindenter.h" + +#include <qmljstools/qmljsqtstylecodeformatter.h> +#include <texteditor/basetexteditor.h> +#include <texteditor/tabsettings.h> + +#include <QtCore/QChar> +#include <QtGui/QTextDocument> +#include <QtGui/QTextBlock> +#include <QtGui/QTextCursor> + +using namespace QmlJSEditor; +using namespace Internal; + +Indenter::Indenter() +{} + +Indenter::~Indenter() +{} + +bool Indenter::isElectricCharacter(const QChar &ch) const +{ + if (ch == QLatin1Char('{') + || ch == QLatin1Char('}') + || ch == QLatin1Char(']') + || ch == QLatin1Char(':')) + return true; + return false; +} + +void Indenter::indentBlock(QTextDocument *doc, + const QTextBlock &block, + const QChar &typedChar, + TextEditor::BaseTextEditorWidget *editor) +{ + Q_UNUSED(doc) + Q_UNUSED(editor) + + const TextEditor::TabSettings &ts = editor->tabSettings(); + QmlJSTools::QtStyleCodeFormatter codeFormatter(ts); + + codeFormatter.updateStateUntil(block); + const int depth = codeFormatter.indentFor(block); + + if (isElectricCharacter(typedChar)) { + // only reindent the current line when typing electric characters if the + // indent is the same it would be if the line were empty + const int newlineIndent = codeFormatter.indentForNewLineAfter(block.previous()); + if (ts.indentationColumn(block.text()) != newlineIndent) + return; + } + + ts.indentLine(block, depth); +} |