diff options
| author | Maxime Coste <mawww@kakoune.org> | 2017-09-26 23:51:05 +0900 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2017-11-01 14:05:14 +0800 |
| commit | 2f450e0080edc269a129f309cd66b5662378fa66 (patch) | |
| tree | acbe3ed6fc41ae6d502671a89d54b75173439376 /src | |
| parent | 7a313ddafe74637d85e677b9b319cf6e6b99c6b1 (diff) | |
Regex: Add support for \Q...\E quoted parts
Diffstat (limited to 'src')
| -rw-r--r-- | src/regex_impl.cc | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/regex_impl.cc b/src/regex_impl.cc index 948cd50a..933af2ad 100644 --- a/src/regex_impl.cc +++ b/src/regex_impl.cc @@ -200,6 +200,19 @@ private: { 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 for (auto& character_class : character_class_escapes) { @@ -962,6 +975,17 @@ auto test_regex = UnitTest{[]{ kak_assert(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")); + } }}; } |
