[gnome-builder/wip/chergert/clang] text-iter: add current symbol helper
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/chergert/clang] text-iter: add current symbol helper
- Date: Tue, 1 May 2018 23:18:26 +0000 (UTC)
commit c10b69d36b7ee9920cb98e27f7bcea1d3aa7c581
Author: Christian Hergert <chergert redhat com>
Date: Tue May 1 14:53:40 2018 -0700
text-iter: add current symbol helper
src/libide/sourceview/ide-completion-provider.c | 22 ++++----------------
src/libide/sourceview/ide-text-iter.c | 27 +++++++++++++++++++++++++
src/libide/sourceview/ide-text-iter.h | 2 ++
3 files changed, 33 insertions(+), 18 deletions(-)
---
diff --git a/src/libide/sourceview/ide-completion-provider.c b/src/libide/sourceview/ide-completion-provider.c
index a97ca2432..d42002dc1 100644
--- a/src/libide/sourceview/ide-completion-provider.c
+++ b/src/libide/sourceview/ide-completion-provider.c
@@ -23,6 +23,7 @@
#include "ide-context.h"
#include "sourceview/ide-completion-provider.h"
+#include "sourceview/ide-text-iter.h"
G_DEFINE_INTERFACE (IdeCompletionProvider, ide_completion_provider, GTK_SOURCE_TYPE_COMPLETION_PROVIDER)
@@ -86,29 +87,14 @@ ide_completion_provider_context_in_comment_or_string (GtkSourceCompletionContext
gchar *
ide_completion_provider_context_current_word (GtkSourceCompletionContext *context)
{
- GtkTextIter end;
- GtkTextIter begin;
- gunichar ch = 0;
+ GtkTextIter iter;
g_return_val_if_fail (GTK_SOURCE_IS_COMPLETION_CONTEXT (context), NULL);
- if (!gtk_source_completion_context_get_iter (context, &end))
+ if (!gtk_source_completion_context_get_iter (context, &iter))
return NULL;
- begin = end;
-
- do
- {
- if (!gtk_text_iter_backward_char (&begin))
- break;
- ch = gtk_text_iter_get_char (&begin);
- }
- while (g_unichar_isalnum (ch) || (ch == '_'));
-
- if (ch && !g_unichar_isalnum (ch) && (ch != '_'))
- gtk_text_iter_forward_char (&begin);
-
- return gtk_text_iter_get_slice (&begin, &end);
+ return _ide_text_iter_current_symbol (&iter);
}
void
diff --git a/src/libide/sourceview/ide-text-iter.c b/src/libide/sourceview/ide-text-iter.c
index 409c1720a..c63b3f217 100644
--- a/src/libide/sourceview/ide-text-iter.c
+++ b/src/libide/sourceview/ide-text-iter.c
@@ -928,3 +928,30 @@ _ide_text_iter_find_chars_forward (GtkTextIter *iter,
return FALSE;
}
+
+static inline gboolean
+is_symbol_char (gunichar ch)
+{
+ return g_unichar_isalnum (ch) || (ch == '_');
+}
+
+gchar *
+_ide_text_iter_current_symbol (const GtkTextIter *iter)
+{
+ GtkTextIter end = *iter;
+ GtkTextIter begin = *iter;
+ gunichar ch = 0;
+
+ do
+ {
+ if (!gtk_text_iter_backward_char (&begin))
+ break;
+ ch = gtk_text_iter_get_char (&begin);
+ }
+ while (is_symbol_char (ch));
+
+ if (ch && !is_symbol_char (ch))
+ gtk_text_iter_forward_char (&begin);
+
+ return gtk_text_iter_get_slice (&begin, &end);
+}
diff --git a/src/libide/sourceview/ide-text-iter.h b/src/libide/sourceview/ide-text-iter.h
index 8d48e1ccc..d7906aee2 100644
--- a/src/libide/sourceview/ide-text-iter.h
+++ b/src/libide/sourceview/ide-text-iter.h
@@ -90,5 +90,7 @@ gboolean _ide_text_iter_find_chars_forward (GtkTextIter *iter
GtkTextIter *end,
const gchar *str,
gboolean only_at_start);
+IDE_AVAILABLE_IN_3_30
+gchar *_ide_text_iter_current_symbol (const GtkTextIter *iter);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]