I thought I could jump in on this and investigate a bit.
So I put this snippet in the abbreviations.cpp...
wxString foo;
foo << control->WordStartPosition(curPos, true);
foo << _T(" vs. ");
foo << control->WordStartPosition(curPos, false);
foo << _T(" and ");
foo << control->WordEndPosition(curPos, true);
foo << _T(" vs. ");
foo << control->WordEndPosition(curPos, false);
logMan->DebugLog(_T("Data on positions: ") + foo);
And the result is as follows...
Data on positions: 7054 vs. 7054 and 7058 vs. 7060
Auto-complete keyword: forb
Auto-complete match for keyword found.
My suspicion would be that the "false" case eats up the EOL (most likely \r\n) and thus fails to find a match. (note that the word start position doesn't change ... in this case)
But I'm sure you already know this.
Update:
Confirmed that "false" eats up all EOLs (source had 2 EOLs following the input line):
Data on positions: 5095 vs. 5095 and 5099 vs. 5103
false: forb
true: forb
Auto-complete keyword: forb
Auto-complete match for keyword found.
Maybe we can just trim EOLs and it "should" work?