2011-09-02 18:51:20 +02:00
|
|
|
#ifndef display_buffer_hh_INCLUDED
|
|
|
|
#define display_buffer_hh_INCLUDED
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
#include <vector>
|
|
|
|
|
2011-10-14 16:29:53 +02:00
|
|
|
#include "line_and_column.hh"
|
|
|
|
|
2011-09-28 22:54:11 +02:00
|
|
|
#include "buffer.hh"
|
|
|
|
|
2011-09-02 18:51:20 +02:00
|
|
|
namespace Kakoune
|
|
|
|
{
|
|
|
|
|
2011-10-14 16:29:53 +02:00
|
|
|
struct DisplayCoord : LineAndColumn<DisplayCoord>
|
|
|
|
{
|
|
|
|
DisplayCoord(int line = 0, int column = 0)
|
|
|
|
: LineAndColumn(line, column) {}
|
|
|
|
};
|
|
|
|
|
2011-09-02 18:51:20 +02:00
|
|
|
typedef int Attribute;
|
|
|
|
|
|
|
|
enum Attributes
|
|
|
|
{
|
2011-09-26 01:51:12 +02:00
|
|
|
Normal = 0,
|
|
|
|
Underline = 1,
|
|
|
|
Reverse = 2,
|
|
|
|
Blink = 4,
|
|
|
|
Bold = 8,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum class Color
|
|
|
|
{
|
|
|
|
Default,
|
|
|
|
Black,
|
|
|
|
Red,
|
|
|
|
Green,
|
|
|
|
Yellow,
|
|
|
|
Blue,
|
|
|
|
Magenta,
|
|
|
|
Cyan,
|
|
|
|
White
|
2011-09-02 18:51:20 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
struct DisplayAtom
|
|
|
|
{
|
2011-09-28 22:54:11 +02:00
|
|
|
BufferIterator begin;
|
|
|
|
BufferIterator end;
|
|
|
|
Color fg_color;
|
|
|
|
Color bg_color;
|
|
|
|
Attribute attribute;
|
2011-10-12 20:52:22 +02:00
|
|
|
BufferString replacement_text;
|
2011-09-02 18:51:20 +02:00
|
|
|
|
2011-09-28 22:54:11 +02:00
|
|
|
DisplayAtom(BufferIterator begin, BufferIterator end,
|
2011-09-29 10:55:08 +02:00
|
|
|
Color fg_color = Color::Default,
|
|
|
|
Color bg_color = Color::Default,
|
|
|
|
Attribute attribute = Attributes::Normal)
|
2011-10-07 16:19:58 +02:00
|
|
|
: begin(begin),
|
2011-09-28 22:54:11 +02:00
|
|
|
end(end),
|
2011-09-29 10:55:08 +02:00
|
|
|
fg_color(fg_color),
|
|
|
|
bg_color(bg_color),
|
|
|
|
attribute(attribute)
|
2011-09-26 01:51:12 +02:00
|
|
|
{}
|
2011-09-02 18:51:20 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
class DisplayBuffer
|
|
|
|
{
|
|
|
|
public:
|
2011-09-28 22:54:11 +02:00
|
|
|
typedef std::vector<DisplayAtom> AtomList;
|
2011-09-02 18:51:20 +02:00
|
|
|
typedef AtomList::iterator iterator;
|
|
|
|
typedef AtomList::const_iterator const_iterator;
|
|
|
|
|
|
|
|
DisplayBuffer();
|
|
|
|
|
|
|
|
void clear() { m_atoms.clear(); }
|
|
|
|
void append(const DisplayAtom& atom) { m_atoms.push_back(atom); }
|
2011-09-28 22:54:11 +02:00
|
|
|
iterator insert(iterator where, const DisplayAtom& atom) { return m_atoms.insert(where, atom); }
|
2011-10-07 16:19:58 +02:00
|
|
|
iterator split(iterator atom, const BufferIterator& pos);
|
2011-09-02 18:51:20 +02:00
|
|
|
|
|
|
|
iterator begin() { return m_atoms.begin(); }
|
|
|
|
iterator end() { return m_atoms.end(); }
|
|
|
|
|
|
|
|
const_iterator begin() const { return m_atoms.begin(); }
|
|
|
|
const_iterator end() const { return m_atoms.end(); }
|
2011-09-29 11:10:27 +02:00
|
|
|
|
|
|
|
void check_invariant() const;
|
2011-09-02 18:51:20 +02:00
|
|
|
private:
|
|
|
|
AtomList m_atoms;
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif // display_buffer_hh_INCLUDED
|