From 94d59cc4dd19a0e45b537ac854bf3fdaa6824679 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Fri, 2 Dec 2011 14:28:27 +0000 Subject: Buffer: add filter support filters are functions called prior to applying a modification to a buffer. They can manipulate the modification to change the editor behaviour. --- src/buffer.cc | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/buffer.cc') diff --git a/src/buffer.cc b/src/buffer.cc index 0587cf45..2d2e106c 100644 --- a/src/buffer.cc +++ b/src/buffer.cc @@ -227,6 +227,9 @@ void Buffer::apply_modification(const BufferModification& modification) void Buffer::append_modification(BufferModification&& modification) { + for (auto filter : m_filters) + filter.second(*this, modification); + apply_modification(modification); m_current_undo_group.push_back(std::move(modification)); } @@ -277,4 +280,22 @@ void Buffer::unregister_modification_listener(BufferModificationListener* listen m_modification_listeners.erase(it); } +void Buffer::add_filter(FilterAndId&& filter) +{ + if (m_filters.contains(filter.first)) + throw filter_id_not_unique(filter.first); + m_filters.append(filter); +} + +void Buffer::remove_filter(const std::string& id) +{ + m_filters.remove(id); +} + +CandidateList Buffer::complete_filterid(const std::string& prefix, + size_t cursor_pos) +{ + return m_filters.complete_id(prefix, cursor_pos); +} + } -- cgit v1.2.3