diff options
Diffstat (limited to 'src/libs/utils/textutils.h')
-rw-r--r-- | src/libs/utils/textutils.h | 46 |
1 files changed, 40 insertions, 6 deletions
diff --git a/src/libs/utils/textutils.h b/src/libs/utils/textutils.h index e214f74659..80e4150c1d 100644 --- a/src/libs/utils/textutils.h +++ b/src/libs/utils/textutils.h @@ -5,8 +5,7 @@ #include "utils_global.h" -#include "linecolumn.h" - +#include <QMetaType> #include <QString> QT_BEGIN_NAMESPACE @@ -17,6 +16,39 @@ QT_END_NAMESPACE namespace Utils { namespace Text { +class QTCREATOR_UTILS_EXPORT Position +{ +public: + int line = 0; // 1-based + int column = -1; // 0-based + + bool operator<(const Position &other) const + { return line < other.line || (line == other.line && column < other.column); } + bool operator==(const Position &other) const; + + bool operator!=(const Position &other) const { return !(operator==(other)); } + + bool isValid() const { return line > 0 && column >= 0; } + + static Position fromFileName(QStringView fileName, int &postfixPos); + static Position fromPositionInDocument(const QTextDocument *document, int pos); + static Position fromCursor(const QTextCursor &cursor); +}; + +class QTCREATOR_UTILS_EXPORT Range +{ +public: + int length(const QString &text) const; + + Position begin; + Position end; + + bool operator<(const Range &other) const { return begin < other.begin; } + bool operator==(const Range &other) const; + + bool operator!=(const Range &other) const { return !(operator==(other)); } +}; + struct Replacement { Replacement() = default; @@ -36,12 +68,10 @@ using Replacements = std::vector<Replacement>; QTCREATOR_UTILS_EXPORT void applyReplacements(QTextDocument *doc, const Replacements &replacements); -// line is 1-based, column is 1-based +// line is 1-based, column is 0-based QTCREATOR_UTILS_EXPORT bool convertPosition(const QTextDocument *document, int pos, int *line, int *column); -QTCREATOR_UTILS_EXPORT -OptionalLineColumn convertPosition(const QTextDocument *document, int pos); // line and column are 1-based QTCREATOR_UTILS_EXPORT int positionInText(const QTextDocument *textDocument, int line, int column); @@ -60,9 +90,13 @@ QTCREATOR_UTILS_EXPORT int utf8NthLineOffset(const QTextDocument *textDocument, const QByteArray &buffer, int line); -QTCREATOR_UTILS_EXPORT LineColumn utf16LineColumn(const QByteArray &utf8Buffer, int utf8Offset); QTCREATOR_UTILS_EXPORT QString utf16LineTextInUtf8Buffer(const QByteArray &utf8Buffer, int currentUtf8Offset); +QTCREATOR_UTILS_EXPORT QDebug &operator<<(QDebug &stream, const Position &pos); + } // Text } // Utils + +Q_DECLARE_METATYPE(Utils::Text::Position) +Q_DECLARE_METATYPE(Utils::Text::Range) |