summaryrefslogtreecommitdiff
path: root/src/buffer_utils.hh
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2014-04-28 19:48:23 +0100
committerMaxime Coste <frrrwww@gmail.com>2014-04-28 19:48:23 +0100
commit7190791927e0e1bc20e2c301ae4e0ba7169e990d (patch)
tree8f6596890bf3352dd39b3570abb80f842bdc14dc /src/buffer_utils.hh
parent49bc7f8767c2b59084d2be14f0beecd6f8ba4bd5 (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.hh47
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
+