query-parser: support phrase queries

This commit is contained in:
djcb
2017-10-26 21:31:22 +03:00
parent e4b3174ed8
commit 7cd7d118e2
5 changed files with 73 additions and 22 deletions

View File

@ -27,12 +27,11 @@ using namespace Mux;
static bool
is_separator (char c)
{
const auto seps = std::string (":()\"");
if (isblank(c))
return true;
else
return seps.find(c) != std::string::npos;
const auto seps = std::string ("()");
return seps.find(c) != std::string::npos;
}
@ -80,8 +79,14 @@ eat_token (std::string& food, size_t& pos)
continue;
}
if (kar == '"' && !escaped && quoted)
return Token{pos, Token::Type::Data, value};
if (kar == '"') {
if (!escaped && quoted)
return Token{pos, Token::Type::Data, value};
else {
quoted = true;
continue;
}
}
if (!quoted && !escaped && is_separator(kar)) {
@ -90,9 +95,6 @@ eat_token (std::string& food, size_t& pos)
return op_or_value(pos, value);
}
if (kar == '"')
quoted = true;
if (quoted || isblank(kar))
continue;