aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/utils/textutils.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/utils/textutils.h')
-rw-r--r--src/libs/utils/textutils.h46
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)