Use smart case matching for contiguous/prefix/fullmatch detection

Fixes #1498
This commit is contained in:
Maxime Coste 2017-07-19 20:16:28 +02:00
parent 9c44077002
commit 016a50f213

View File

@ -68,7 +68,7 @@ static int count_word_boundaries_match(StringView candidate, StringView query)
return count; return count;
} }
static bool smartcase_eq(Codepoint query, Codepoint candidate) static bool smartcase_eq(Codepoint candidate, Codepoint query)
{ {
return query == (iswlower((wchar_t)query) ? to_lower(candidate) : candidate); return query == (iswlower((wchar_t)query) ? to_lower(candidate) : candidate);
} }
@ -93,7 +93,7 @@ static Optional<SubseqRes> subsequence_match_smart_case(StringView str, StringVi
while (true) while (true)
{ {
auto str_c = utf8::read_codepoint(it, str.end()); auto str_c = utf8::read_codepoint(it, str.end());
if (smartcase_eq(c, str_c)) if (smartcase_eq(str_c, c))
break; break;
if (max_index != -1 and single_word and not is_word(str_c)) if (max_index != -1 and single_word and not is_word(str_c))
@ -132,11 +132,11 @@ RankedMatch::RankedMatch(StringView candidate, StringView query, TestFunc func)
if (res->single_word) if (res->single_word)
m_flags |= Flags::SingleWord; m_flags |= Flags::SingleWord;
if (smartcase_eq(query[0], candidate[0])) if (smartcase_eq(candidate[0], query[0]))
m_flags |= Flags::FirstCharMatch; m_flags |= Flags::FirstCharMatch;
auto it = std::search(candidate.begin(), candidate.end(), auto it = std::search(candidate.begin(), candidate.end(),
query.begin(), query.end()); query.begin(), query.end(), smartcase_eq);
if (it != candidate.end()) if (it != candidate.end())
{ {
m_flags |= Flags::Contiguous; m_flags |= Flags::Contiguous;