summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2021-01-08 22:40:00 -0500
committerouwou <26526779+ouwou@users.noreply.github.com>2021-01-08 22:40:00 -0500
commit117e5db5646ef74e7f09864d8450bac792e14923 (patch)
treedac3626d705a0f9647c2de84ffad7020a10370b3 /components
parent3f31d74cd84143dea4c3af258fd0f8aaa201721a (diff)
downloadabaddon-portaudio-117e5db5646ef74e7f09864d8450bac792e14923.tar.gz
abaddon-portaudio-117e5db5646ef74e7f09864d8450bac792e14923.zip
make completer work with terms after/before newlines
Diffstat (limited to 'components')
-rw-r--r--components/completer.cpp38
1 files changed, 36 insertions, 2 deletions
diff --git a/components/completer.cpp b/components/completer.cpp
index d673d40..f07bee6 100644
--- a/components/completer.cpp
+++ b/components/completer.cpp
@@ -264,14 +264,48 @@ void Completer::OnTextBufferChanged() {
}
}
+bool MultiBackwardSearch(const Gtk::TextIter &iter, const Glib::ustring &chars, Gtk::TextSearchFlags flags, Gtk::TextBuffer::iterator &out) {
+ bool any = false;
+ for (const auto c : chars) {
+ Glib::ustring tmp(1, c);
+ Gtk::TextBuffer::iterator tstart, tend;
+ if (!iter.backward_search(tmp, flags, tstart, tend)) continue;
+ // if previous found, compare to see if closer to out iter
+ if (any) {
+ if (tstart > out)
+ out = tstart;
+ } else
+ out = tstart;
+ any = true;
+ }
+ return any;
+}
+
+bool MultiForwardSearch(const Gtk::TextIter &iter, const Glib::ustring &chars, Gtk::TextSearchFlags flags, Gtk::TextBuffer::iterator &out) {
+ bool any = false;
+ for (const auto c : chars) {
+ Glib::ustring tmp(1, c);
+ Gtk::TextBuffer::iterator tstart, tend;
+ if (!iter.forward_search(tmp, flags, tstart, tend)) continue;
+ // if previous found, compare to see if closer to out iter
+ if (any) {
+ if (tstart < out)
+ out = tstart;
+ } else
+ out = tstart;
+ any = true;
+ }
+ return any;
+}
+
Glib::ustring Completer::GetTerm() {
const auto iter = m_buf->get_insert()->get_iter();
Gtk::TextBuffer::iterator dummy;
- if (!iter.backward_search(" ", Gtk::TEXT_SEARCH_TEXT_ONLY, m_start, dummy))
+ if (!MultiBackwardSearch(iter, " \n", Gtk::TEXT_SEARCH_TEXT_ONLY, m_start))
m_buf->get_bounds(m_start, dummy);
else
m_start.forward_char(); // 1 behind
- if (!iter.forward_search(" ", Gtk::TEXT_SEARCH_TEXT_ONLY, dummy, m_end))
+ if (!MultiForwardSearch(iter, " \n", Gtk::TEXT_SEARCH_TEXT_ONLY, m_end))
m_buf->get_bounds(dummy, m_end);
return m_start.get_text(m_end);
}