From 7190791927e0e1bc20e2c301ae4e0ba7169e990d Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Mon, 28 Apr 2014 19:48:23 +0100 Subject: Move some buffer related utility functions to buffer_utils.{cc,hh} --- src/buffer_utils.hh | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/buffer_utils.hh (limited to 'src/buffer_utils.hh') diff --git a/src/buffer_utils.hh b/src/buffer_utils.hh new file mode 100644 index 00000000..16e2c764 --- /dev/null +++ b/src/buffer_utils.hh @@ -0,0 +1,47 @@ +#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 + -- cgit v1.2.3