summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2011-11-14 14:23:02 +0000
committerMaxime Coste <frrrwww@gmail.com>2011-11-14 14:23:02 +0000
commit031fa1a25c7ade25f9308ceb3d2211b05ea60a1e (patch)
tree8b13706fb9f8184348fbd1f48c32a1ed7ddf716c /src
parentd2b9cd6e60d69d6a1e1bb206a865d481bb739bf8 (diff)
Filters: colorize_regex supports matches spanning multiple display atoms
Diffstat (limited to 'src')
-rw-r--r--src/filters.cc29
1 files changed, 19 insertions, 10 deletions
diff --git a/src/filters.cc b/src/filters.cc
index 06553ee4..ea648463 100644
--- a/src/filters.cc
+++ b/src/filters.cc
@@ -1,5 +1,6 @@
#include "filters.hh"
+#include "assert.hh"
#include "window.hh"
#include "display_buffer.hh"
#include "filter_registry.hh"
@@ -23,19 +24,27 @@ void colorize_regex(DisplayBuffer& display_buffer,
{
BufferIterator begin = (*re_it)[0].first;
BufferIterator end = (*re_it)[0].second;
+ assert(begin != end);
+
auto begin_atom_it = display_buffer.atom_containing(begin, atom_it);
- auto end_atom_it = display_buffer.atom_containing(end, atom_it);
- if (begin_atom_it == end_atom_it)
- {
- if (begin_atom_it->begin() != begin)
- begin_atom_it = ++display_buffer.split(begin_atom_it, begin);
- if (begin_atom_it->end() != end)
- begin_atom_it = display_buffer.split(begin_atom_it, end);
+ assert(begin_atom_it != display_buffer.end());
+ if (begin_atom_it->begin() != begin)
+ begin_atom_it = ++display_buffer.split(begin_atom_it, begin);
+
+ auto end_atom_it = display_buffer.atom_containing(end, begin_atom_it);
+ if (end_atom_it != display_buffer.end() and
+ end_atom_it->begin() != end)
+ end_atom_it = ++display_buffer.split(end_atom_it, end);
- begin_atom_it->fg_color() = fg_color;
- begin_atom_it->bg_color() = bg_color;
+ assert(begin_atom_it != end_atom_it);
+
+ for (auto it = begin_atom_it; it != end_atom_it; ++it)
+ {
+ it->fg_color() = fg_color;
+ it->bg_color() = bg_color;
}
- atom_it = begin_atom_it;
+
+ atom_it = end_atom_it;
}
}