Boolean TEditor::search( const char *findStr, ushort opts ) { ushort pos = curPtr; ushort i; do { if( (opts & efCaseSensitive) != 0 ) i = scan( &buffer[bufPtr(pos)], bufLen - pos, findStr); else i = iScan( &buffer[bufPtr(pos)], bufLen - pos, findStr); if( i != sfSearchFailed ) { i += pos; if( (opts & efWholeWordsOnly) == 0 || !( ( i != 0 && isWordChar(bufChar(i - 1)) != 0 ) || ( i + strlen(findStr) != bufLen && isWordChar(bufChar(i + strlen(findStr))) ) )) { lock(); setSelect(i, i + strlen(findStr), False); trackCursor(Boolean(!cursorVisible())); unlock(); return True; } else pos = i + 1; } } while( i != sfSearchFailed ); return False; }
ushort TEditor::prevWord( ushort p ) { while( p > 0 && isWordChar(bufChar(prevChar(p))) == 0 ) p = prevChar(p); while( p > 0 && isWordChar(bufChar(prevChar(p))) != 0 ) p = prevChar(p); return p; }
ushort TEditor::nextWord( ushort p ) { while( p < bufLen && isWordChar(bufChar(p)) != 0 ) p = nextChar(p); while( p < bufLen && isWordChar(bufChar(p)) == 0 ) p = nextChar(p); return p; }
size_t TEditor::charPtr( size_t p, int target ) { int pos = 0; while( (pos < target) && (p < bufLen) && (bufChar(p) != '\x0D') ) { if( bufChar(p) == '\x09' ) pos |= 7; pos++; p++; } if( pos > target ) p--; return p; }
int TEditor::charPos( size_t p, size_t target ) { int pos = 0; while( p < target ) { if( bufChar(p) == '\x9' ) pos |= 7; pos++; p++; } return pos; }