summaryrefslogtreecommitdiff
path: root/src/display_buffer.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2013-12-11 21:38:43 +0000
committerMaxime Coste <frrrwww@gmail.com>2013-12-11 23:19:24 +0000
commit277b02eee6cb0037d2ecce46d1f2a455dfb0b001 (patch)
treea4a34fbc87541d995c526f73d780a94c8f68f15e /src/display_buffer.cc
parent39512914ad6adbb91de57ac5957594acde543848 (diff)
Add experimental region_ref highlighter
highlights a region using another highlighter.
Diffstat (limited to 'src/display_buffer.cc')
-rw-r--r--src/display_buffer.cc19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/display_buffer.cc b/src/display_buffer.cc
index e4827673..89f2c74b 100644
--- a/src/display_buffer.cc
+++ b/src/display_buffer.cc
@@ -61,6 +61,13 @@ void DisplayLine::push_back(DisplayAtom atom)
m_atoms.push_back(std::move(atom));
}
+DisplayLine::iterator DisplayLine::erase(iterator beg, iterator end)
+{
+ iterator res = m_atoms.erase(beg, end);
+ compute_range();
+ return res;
+}
+
void DisplayLine::optimize()
{
if (m_atoms.empty())
@@ -142,9 +149,11 @@ void DisplayLine::trim(CharCount first_char, CharCount char_count)
compute_range();
}
+constexpr BufferRange init_range{ {INT_MAX, INT_MAX}, {INT_MIN, INT_MIN} };
+
void DisplayLine::compute_range()
{
- m_range = { {INT_MAX, INT_MAX}, {INT_MIN, INT_MIN} };
+ m_range = init_range;
for (auto& atom : m_atoms)
{
if (not atom.has_buffer_range())
@@ -152,17 +161,21 @@ void DisplayLine::compute_range()
m_range.first = std::min(m_range.first, atom.begin());
m_range.second = std::max(m_range.second, atom.end());
}
+ if (m_range == init_range)
+ m_range = { { 0, 0 }, { 0, 0 } };
+ kak_assert(m_range.first <= m_range.second);
}
void DisplayBuffer::compute_range()
{
- m_range.first = {INT_MAX,INT_MAX};
- m_range.second = {0,0};
+ m_range = init_range;
for (auto& line : m_lines)
{
m_range.first = std::min(line.range().first, m_range.first);
m_range.second = std::max(line.range().second, m_range.second);
}
+ if (m_range == init_range)
+ m_range = { { 0, 0 }, { 0, 0 } };
kak_assert(m_range.first <= m_range.second);
}