diff options
author | David Schulz <david.schulz@qt.io> | 2019-07-15 12:50:29 +0200 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2019-07-17 06:21:23 +0000 |
commit | 3213e12ce7411efd05a544645aaa1ecd74e533a2 (patch) | |
tree | ae7187904453f530d4660832ff834371905cefaf /src/plugins/python/pythonscanner.h | |
parent | 2778a5adab13a16f4a6b3cda0980fa3b4f2b3a5e (diff) | |
download | qt-creator-3213e12ce7411efd05a544645aaa1ecd74e533a2.tar.gz |
rename PythonEditor plugin to Python
The plugin does not only contain a pure editor, but all kind of support
for a programming language like project and run support.
Change-Id: I1251367c8db2e7a54986415ffc5b860cb210de3c
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/python/pythonscanner.h')
-rw-r--r-- | src/plugins/python/pythonscanner.h | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/src/plugins/python/pythonscanner.h b/src/plugins/python/pythonscanner.h new file mode 100644 index 0000000000..5d37f3ba11 --- /dev/null +++ b/src/plugins/python/pythonscanner.h @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#pragma once + +#include "pythonformattoken.h" + +#include <QString> + +namespace Python { +namespace Internal { + +/** + * @brief The Scanner class - scans source code for highlighting only + */ +class Scanner +{ +public: + Scanner(const Scanner &other) = delete; + void operator=(const Scanner &other) = delete; + + enum State { + State_Default, + State_String, + State_MultiLineString + }; + + Scanner(const QChar *text, const int length); + + void setState(int state); + int state() const; + FormatToken read(); + QString value(const FormatToken& tk) const; + +private: + FormatToken onDefaultState(); + + void checkEscapeSequence(QChar quoteChar); + FormatToken readStringLiteral(QChar quoteChar); + FormatToken readMultiLineStringLiteral(QChar quoteChar); + FormatToken readIdentifier(); + FormatToken readNumber(); + FormatToken readFloatNumber(); + FormatToken readComment(); + FormatToken readDoxygenComment(); + FormatToken readWhiteSpace(); + FormatToken readOperator(); + + void clearState(); + void saveState(State state, QChar savedData); + void parseState(State &state, QChar &savedData) const; + + void setAnchor() { m_markedPosition = m_position; } + void move() { ++m_position; } + int length() const { return m_position - m_markedPosition; } + int anchor() const { return m_markedPosition; } + bool isEnd() const { return m_position >= m_textLength; } + + QChar peek(int offset = 0) const + { + int pos = m_position + offset; + if (pos >= m_textLength) + return QLatin1Char('\0'); + return m_text[pos]; + } + + const QChar *m_text; + const int m_textLength; + int m_position = 0; + int m_markedPosition = 0; + + int m_state; +}; + +} // namespace Internal +} // namespace Python |