Regex: Add support for \Q...\E quoted parts

This commit is contained in:
Maxime Coste 2017-09-26 23:51:05 +09:00
parent 7a313ddafe
commit 2f450e0080

View File

@ -200,6 +200,19 @@ private:
{ {
const Codepoint cp = *m_pos++; const Codepoint cp = *m_pos++;
if (cp == 'Q')
{
auto escaped_sequence = new_node(ParsedRegex::Sequence);
constexpr StringView end_mark{"\\E"};
auto quote_end = std::search(m_pos.base(), m_regex.end(), end_mark.begin(), end_mark.end());
while (m_pos != quote_end)
escaped_sequence->children.push_back(new_node(ParsedRegex::Literal, *m_pos++));
if (quote_end != m_regex.end())
m_pos += 2;
return escaped_sequence;
}
// CharacterClassEscape // CharacterClassEscape
for (auto& character_class : character_class_escapes) for (auto& character_class : character_class_escapes)
{ {
@ -962,6 +975,17 @@ auto test_regex = UnitTest{[]{
kak_assert(vm.exec("123-456")); kak_assert(vm.exec("123-456"));
kak_assert(not vm.exec("123_456")); kak_assert(not vm.exec("123_456"));
} }
{
TestVM vm{R"(\Q{}[]*+?\Ea+)"};
kak_assert(vm.exec("{}[]*+?aa"));
}
{
TestVM vm{R"(\Q...)"};
kak_assert(vm.exec("..."));
kak_assert(not vm.exec("bla"));
}
}}; }};
} }