[gtksourceview/wip/chergert/vim] add some quote end checks



commit cf5b4837711d145dfc0dccf3dbba4b236245cbb7
Author: Christian Hergert <chergert redhat com>
Date:   Thu Nov 4 22:44:51 2021 -0700

    add some quote end checks

 gtksourceview/vim/gtk-source-vim-motion.c | 45 ++++++++++++++++++++-----------
 gtksourceview/vim/gtk-source-vim-motion.h |  3 +++
 2 files changed, 33 insertions(+), 15 deletions(-)
---
diff --git a/gtksourceview/vim/gtk-source-vim-motion.c b/gtksourceview/vim/gtk-source-vim-motion.c
index 8a57c19b..c8a986c5 100644
--- a/gtksourceview/vim/gtk-source-vim-motion.c
+++ b/gtksourceview/vim/gtk-source-vim-motion.c
@@ -2221,32 +2221,29 @@ gtk_source_vim_iter_backward_quote_start (GtkTextIter *iter,
 }
 
 static gboolean
-gtk_source_vim_iter_forward_quote_end (GtkTextIter *iter,
-                                       gunichar     ch)
+gtk_source_vim_iter_ends_quote (const GtkTextIter *iter,
+                                gunichar           ch)
 {
-       GtkTextIter limit;
-
-       /* The way this seems to work in VIM is that we match
-        * to backwards if we have a preference, then forwards.
-        * So if we find @ch before us and we are currently on
-        * @ch, then that is preferred over scanning forward.
-        */
        if (ch == gtk_text_iter_get_char (iter) &&
-           !gtk_text_iter_is_start (iter))
+           !gtk_text_iter_starts_line (iter))
        {
                GtkTextIter alt = *iter;
 
-               gtk_text_iter_backward_char (&alt);
-
                if (gtk_source_vim_iter_backward_quote_start (&alt, ch))
                {
                        return TRUE;
                }
-
-               gtk_text_iter_forward_char (iter);
        }
 
-       limit = *iter;
+       return FALSE;
+}
+
+static gboolean
+gtk_source_vim_iter_forward_quote_end (GtkTextIter *iter,
+                                       gunichar     ch)
+{
+       GtkTextIter limit = *iter;
+
        if (!gtk_text_iter_ends_line (&limit))
                gtk_text_iter_forward_to_line_end (&limit);
 
@@ -2259,6 +2256,24 @@ gtk_source_vim_iter_forward_quote_double (GtkTextIter *iter)
        return gtk_source_vim_iter_forward_quote_end (iter, '"');
 }
 
+gboolean
+gtk_source_vim_iter_ends_quote_double (const GtkTextIter *iter)
+{
+       return gtk_source_vim_iter_ends_quote (iter, '"');
+}
+
+gboolean
+gtk_source_vim_iter_ends_quote_single (const GtkTextIter *iter)
+{
+       return gtk_source_vim_iter_ends_quote (iter, '\'');
+}
+
+gboolean
+gtk_source_vim_iter_ends_quote_grave (const GtkTextIter *iter)
+{
+       return gtk_source_vim_iter_ends_quote (iter, '\'');
+}
+
 gboolean
 gtk_source_vim_iter_backward_quote_double (GtkTextIter *iter)
 {
diff --git a/gtksourceview/vim/gtk-source-vim-motion.h b/gtksourceview/vim/gtk-source-vim-motion.h
index fa25daa4..1eb8eb11 100644
--- a/gtksourceview/vim/gtk-source-vim-motion.h
+++ b/gtksourceview/vim/gtk-source-vim-motion.h
@@ -79,6 +79,9 @@ gboolean gtk_source_vim_iter_forward_word_end             (GtkTextIter       *it
 gboolean gtk_source_vim_iter_forward_WORD_end             (GtkTextIter       *iter);
 gboolean gtk_source_vim_iter_ends_word                    (const GtkTextIter *iter);
 gboolean gtk_source_vim_iter_ends_WORD                    (const GtkTextIter *iter);
+gboolean gtk_source_vim_iter_ends_quote_double            (const GtkTextIter *iter);
+gboolean gtk_source_vim_iter_ends_quote_single            (const GtkTextIter *iter);
+gboolean gtk_source_vim_iter_ends_quote_grave             (const GtkTextIter *iter);
 gboolean gtk_source_vim_iter_starts_word                  (const GtkTextIter *iter);
 gboolean gtk_source_vim_iter_starts_WORD                  (const GtkTextIter *iter);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]