diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2014-04-28 19:48:23 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2014-04-28 19:48:23 +0100 |
| commit | 7190791927e0e1bc20e2c301ae4e0ba7169e990d (patch) | |
| tree | 8f6596890bf3352dd39b3570abb80f842bdc14dc /src/buffer_utils.hh | |
| parent | 49bc7f8767c2b59084d2be14f0beecd6f8ba4bd5 (diff) | |
Move some buffer related utility functions to buffer_utils.{cc,hh}
Diffstat (limited to 'src/buffer_utils.hh')
| -rw-r--r-- | src/buffer_utils.hh | 47 |
1 files changed, 47 insertions, 0 deletions
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 + |
