48 lines
1.2 KiB
C++
48 lines
1.2 KiB
C++
|
#ifndef buffer_utils_hh_INCLUDED
|
||
|
#define buffer_utils_hh_INCLUDED
|
||
|
|
||
|
#include "buffer.hh"
|
||
|
#include "selection.hh"
|
||
|
|
||
|
namespace Kakoune
|
||
|
{
|
||
|
|
||
|
inline String content(const Buffer& buffer, const Selection& range)
|
||
|
{
|
||
|
return buffer.string(range.min(), buffer.char_next(range.max()));
|
||
|
}
|
||
|
|
||
|
inline BufferIterator erase(Buffer& buffer, const Selection& range)
|
||
|
{
|
||
|
return buffer.erase(buffer.iterator_at(range.min()),
|
||
|
utf8::next(buffer.iterator_at(range.max())));
|
||
|
}
|
||
|
|
||
|
inline CharCount char_length(const Buffer& buffer, const Selection& range)
|
||
|
{
|
||
|
return utf8::distance(buffer.iterator_at(range.min()),
|
||
|
utf8::next(buffer.iterator_at(range.max())));
|
||
|
}
|
||
|
|
||
|
inline void avoid_eol(const Buffer& buffer, BufferCoord& coord)
|
||
|
{
|
||
|
const auto column = coord.column;
|
||
|
const auto& line = buffer[coord.line];
|
||
|
if (column != 0 and column == line.length() - 1)
|
||
|
coord.column = line.byte_count_to(line.char_length() - 2);
|
||
|
}
|
||
|
|
||
|
inline void avoid_eol(const Buffer& buffer, Selection& sel)
|
||
|
{
|
||
|
avoid_eol(buffer, sel.anchor());
|
||
|
avoid_eol(buffer, sel.cursor());
|
||
|
}
|
||
|
|
||
|
CharCount get_column(const Buffer& buffer,
|
||
|
CharCount tabstop, BufferCoord coord);
|
||
|
|
||
|
}
|
||
|
|
||
|
#endif // buffer_utils_hh_INCLUDED
|
||
|
|