summaryrefslogtreecommitdiff
path: root/src/libs/cplusplus/ExpressionUnderCursor.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-09-17 12:29:06 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2009-09-17 12:29:22 +0200
commit71c46fbc54da4d6ffae9cf2b49b8048ce38cc1db (patch)
treea3ddb50e3e949cb19550605284c4351b9a63957f /src/libs/cplusplus/ExpressionUnderCursor.cpp
parent4e21b188274a1b395301c1af6097dea78200cd41 (diff)
downloadqt-creator-71c46fbc54da4d6ffae9cf2b49b8048ce38cc1db.tar.gz
Added BackwardsScanner
Diffstat (limited to 'src/libs/cplusplus/ExpressionUnderCursor.cpp')
-rw-r--r--src/libs/cplusplus/ExpressionUnderCursor.cpp88
1 files changed, 1 insertions, 87 deletions
diff --git a/src/libs/cplusplus/ExpressionUnderCursor.cpp b/src/libs/cplusplus/ExpressionUnderCursor.cpp
index b51026b585..1cc546de22 100644
--- a/src/libs/cplusplus/ExpressionUnderCursor.cpp
+++ b/src/libs/cplusplus/ExpressionUnderCursor.cpp
@@ -29,6 +29,7 @@
#include "ExpressionUnderCursor.h"
#include "SimpleLexer.h"
+#include "BackwardsScanner.h"
#include <Token.h>
#include <QTextCursor>
@@ -36,93 +37,6 @@
using namespace CPlusPlus;
-namespace CPlusPlus {
-
-class BackwardsScanner
-{
- enum { MAX_BLOCK_COUNT = 10 };
-
-public:
- BackwardsScanner(const QTextCursor &cursor)
- : _offset(0)
- , _blocksTokenized(0)
- , _block(cursor.block())
- {
- _tokenize.setSkipComments(true);
- _text = _block.text().left(cursor.position() - cursor.block().position());
- _tokens.append(_tokenize(_text, previousBlockState(_block)));
- }
-
- QList<SimpleToken> tokens() const { return _tokens; }
-
- const SimpleToken &operator[](int i)
- {
- while (_offset + i < 0) {
- _block = _block.previous();
- if (_blocksTokenized == MAX_BLOCK_COUNT || !_block.isValid()) {
- ++_offset;
- _tokens.prepend(SimpleToken()); // sentinel
- break;
- } else {
- ++_blocksTokenized;
-
- QString blockText = _block.text();
- _text.prepend(blockText);
- QList<SimpleToken> adaptedTokens;
- for (int i = 0; i < _tokens.size(); ++i) {
- const SimpleToken &t = _tokens.at(i);
- const int position = t.position() + blockText.length();
- adaptedTokens.append(SimpleToken(t.kind(),
- position,
- t.length(),
- _text.midRef(position, t.length())));
- }
-
- _tokens = _tokenize(blockText, previousBlockState(_block));
- _offset += _tokens.size();
- _tokens += adaptedTokens;
- }
- }
-
- return _tokens.at(_offset + i);
- }
-
- int startPosition() const
- { return _block.position(); }
-
- const QString &text() const
- { return _text; }
-
- QString text(int begin, int end) const
- {
- const SimpleToken &firstToken = _tokens.at(begin + _offset);
- const SimpleToken &lastToken = _tokens.at(end + _offset - 1);
- return _text.mid(firstToken.begin(), lastToken.end() - firstToken.begin());
- }
-
- int previousBlockState(const QTextBlock &block)
- {
- const QTextBlock prevBlock = block.previous();
- if (prevBlock.isValid()) {
- int state = prevBlock.userState();
-
- if (state != -1)
- return state;
- }
- return 0;
- }
-
-private:
- QList<SimpleToken> _tokens;
- int _offset;
- int _blocksTokenized;
- QTextBlock _block;
- QString _text;
- SimpleLexer _tokenize;
-};
-
-}
-
ExpressionUnderCursor::ExpressionUnderCursor()
{ }