Fix select_next_match that would select the end of the buffer in some circumstances

This commit is contained in:
Maxime Coste 2013-11-04 21:16:04 +00:00
parent 7b0eeb26b1
commit 70e94cb00a

View File

@ -637,20 +637,18 @@ Selection select_next_match(const Buffer& buffer, const Selection& selection, co
MatchResults matches; MatchResults matches;
if (find_match_in_buffer<direction>(buffer, utf8::next(begin), matches, regex)) bool found = false;
if ((found = find_match_in_buffer<direction>(buffer, utf8::next(begin), matches, regex)))
{ {
begin = matches[0].first; begin = matches[0].first;
end = matches[0].second; end = matches[0].second;
for (auto& match : matches) for (auto& match : matches)
captures.push_back(String(match.first, match.second)); captures.push_back(String(match.first, match.second));
} }
else if (not found or begin == buffer.end())
throw runtime_error("'" + regex.str() + "': no matches found"); throw runtime_error("'" + regex.str() + "': no matches found");
if (begin == end) end = (begin == end) ? end : utf8::previous(end);
++end;
end = utf8::previous(end);
if (direction == Backward) if (direction == Backward)
std::swap(begin, end); std::swap(begin, end);
return Selection{begin.coord(), end.coord(), std::move(captures)}; return Selection{begin.coord(), end.coord(), std::move(captures)};