// Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #pragma once #include #include #include QT_FORWARD_DECLARE_CLASS(QTextBlock) namespace QmlJS { class QMLJS_EXPORT QmlJSIndenter : public LineInfo { Q_DISABLE_COPY(QmlJSIndenter) public: QmlJSIndenter(); ~QmlJSIndenter(); void setTabSize(int size); void setIndentSize(int size); int indentForBottomLine(QTextBlock firstBlock, QTextBlock lastBlock, QChar typedIn); private: bool isOnlyWhiteSpace(const QString &t) const; int columnForIndex(const QString &t, int index) const; int indentOfLine(const QString &t) const; void eraseChar(QString &t, int k, QChar ch) const; QChar lastParen() const; bool okay(QChar typedIn, QChar okayCh) const; int indentWhenBottomLineStartsInMultiLineComment(); int indentForContinuationLine(); int indentForStandaloneLine(); private: int ppHardwareTabSize; int ppIndentSize; int ppContinuationIndentSize; int ppCommentOffset; private: QRegularExpression caseOrDefault; }; } // namespace QmlJS