DisplayAtom: support empty replacement
This commit is contained in:
parent
603cfd3108
commit
d7e1cab116
|
@ -8,10 +8,15 @@ namespace Kakoune
|
|||
|
||||
String DisplayAtom::content() const
|
||||
{
|
||||
if (m_replacement_text.empty())
|
||||
switch (m_content_mode)
|
||||
{
|
||||
case BufferText:
|
||||
return m_begin.buffer().string(m_begin, m_end);
|
||||
else
|
||||
case ReplacementText:
|
||||
return m_replacement_text;
|
||||
}
|
||||
assert(false);
|
||||
return "";
|
||||
}
|
||||
|
||||
static DisplayCoord advance_coord(const DisplayCoord& pos,
|
||||
|
@ -40,17 +45,23 @@ static DisplayCoord advance_coord(const DisplayCoord& pos,
|
|||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
DisplayCoord DisplayAtom::end_coord() const
|
||||
{
|
||||
if (m_replacement_text.empty())
|
||||
switch (m_content_mode)
|
||||
{
|
||||
case BufferText:
|
||||
return advance_coord(m_coord, m_begin, m_end);
|
||||
else
|
||||
case ReplacementText:
|
||||
return advance_coord(m_coord, m_replacement_text);
|
||||
}
|
||||
assert(false);
|
||||
return { 0, 0 };
|
||||
}
|
||||
|
||||
BufferIterator DisplayAtom::iterator_at(const DisplayCoord& coord) const
|
||||
{
|
||||
if (not m_replacement_text.empty() or coord <= m_coord)
|
||||
if (m_content_mode != BufferText or coord <= m_coord)
|
||||
return m_begin;
|
||||
|
||||
DisplayCoord pos = m_coord;
|
||||
|
@ -74,7 +85,7 @@ DisplayCoord DisplayAtom::line_and_column_at(const BufferIterator& iterator) con
|
|||
{
|
||||
assert(iterator >= m_begin and iterator < m_end);
|
||||
|
||||
if (not m_replacement_text.empty())
|
||||
if (m_content_mode != BufferText)
|
||||
return m_coord;
|
||||
|
||||
return advance_coord(m_coord, m_begin, iterator);
|
||||
|
@ -140,6 +151,7 @@ void DisplayBuffer::check_invariant() const
|
|||
void DisplayBuffer::replace_atom_content(iterator atom,
|
||||
const String& replacement)
|
||||
{
|
||||
atom->m_content_mode = DisplayAtom::ReplacementText;
|
||||
atom->m_replacement_text = replacement;
|
||||
|
||||
// update coordinates of subsequents atoms
|
||||
|
|
|
@ -57,7 +57,8 @@ struct DisplayAtom
|
|||
Color fg_color = Color::Default,
|
||||
Color bg_color = Color::Default,
|
||||
Attribute attribute = Attributes::Normal)
|
||||
: m_coord(coord),
|
||||
: m_content_mode(BufferText),
|
||||
m_coord(coord),
|
||||
m_begin(begin), m_end(end),
|
||||
m_fg_color(fg_color),
|
||||
m_bg_color(bg_color),
|
||||
|
@ -86,6 +87,13 @@ struct DisplayAtom
|
|||
private:
|
||||
friend class DisplayBuffer;
|
||||
|
||||
enum ContentMode
|
||||
{
|
||||
BufferText,
|
||||
ReplacementText
|
||||
};
|
||||
ContentMode m_content_mode;
|
||||
|
||||
DisplayCoord m_coord;
|
||||
BufferIterator m_begin;
|
||||
BufferIterator m_end;
|
||||
|
|
Loading…
Reference in New Issue
Block a user