On 04/04/2011 19:59, Martin wrote:
On 04/04/2011 17:23, patspiper wrote:
On 04/04/2011 06:47 PM, Martin wrote:
but what about using LogicalCaretXY, then getting the line, and
reading it?
possible subtracting the length of CurrentString.
I am almost there (by giving it another shot at the ide sources):
Line:=SynEdit1.LineText;
p1:=SynEdit1.LogicalCaretXY;
if (p1.x>length(Line)+1) or (Line='') then exit;
SynEdit1.GetWordBoundsAtRowCol(p1, x1, x2);
// There must be a saner way than subtracting 2
p1.x := x1-2;
SynEdit1.GetWordBoundsAtRowCol(p1, x1, x2);
WordToken := copy(Line, x1, x2);
However, what is the correct way to go back to the previous token?
Subtracting 2 is not the way.
The caret is at the end of currentstring.
So your dot should be 1 before. But if you allow spaces after the dot,
then it can be anything before..., and maybe you even allow it on the
previous line?
Note that LogicalCaret is 1 based, and 1 is before the first char.
Also you must use LogicalCaret, normal Caret will not work if there
are multybyte chars, or tabs.
- LogicalCaret: BYTE (not char) pos in text
-Caret (sometime PhysicalCaret): screenpos, a tab is one byte in the
text, but may be 4 chars on the screen // an a-umlaut is 2 bytes in
the text, but 1 on the screen)
If your line is
ABC.def
And the caret is between the A and B, then LogicalCaret.X = 2 (1
would be before the A)
So if you are behind the "def" LC.x = 8
x := LC.x - len(CurrentString);
makes x = 8 - 3 = 5
LineString[5] = 'd'
so you need to subtract another one to see the char before currentstring
x:= LC.x-length(CurrentString)
x:= LC.x-length(CurrentString) -1
somehow the -1 got lost
while (x> 1) and (linestring[x] in[#32,#9]) do dec(x);
Now you should be on the first none space, before the currentstring....
and so on,
It all depends on what you believe a word/token is, what are the
boundaries...
You can look at GetWordBoundsAtRowCol....
maybe it expects to be NOT at the end of the word, so by substracting
one more (-2) you get into the middle (or to the start) of the word???
Not sure, haven't looked at
--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus