[gnome-builder] auto-indent: skip past c89 comments when looking for matching brackets
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] auto-indent: skip past c89 comments when looking for matching brackets
- Date: Fri, 17 Oct 2014 01:22:58 +0000 (UTC)
commit 27c411d214ebfc2caff4132ce36d2dfc6b6e76d3
Author: Christian Hergert <christian hergert me>
Date: Thu Oct 16 18:22:45 2014 -0700
auto-indent: skip past c89 comments when looking for matching brackets
src/auto-indent/gb-source-auto-indenter-c.c | 98 ++++++++++++++++-----------
1 files changed, 58 insertions(+), 40 deletions(-)
---
diff --git a/src/auto-indent/gb-source-auto-indenter-c.c b/src/auto-indent/gb-source-auto-indenter-c.c
index 5e55082..8c7e1c7 100644
--- a/src/auto-indent/gb-source-auto-indenter-c.c
+++ b/src/auto-indent/gb-source-auto-indenter-c.c
@@ -112,6 +112,23 @@ build_indent (GbSourceAutoIndenterC *c,
}
static gboolean
+iter_ends_c89_comment (const GtkTextIter *iter)
+{
+ if (gtk_text_iter_get_char (iter) == '/')
+ {
+ GtkTextIter tmp;
+
+ tmp = *iter;
+
+ if (gtk_text_iter_backward_char (&tmp) &&
+ ('*' == gtk_text_iter_get_char (&tmp)))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
non_space_predicate (gunichar ch,
gpointer user_data)
{
@@ -211,6 +228,42 @@ backward_last_word (GtkTextIter *iter,
}
static gboolean
+backward_before_c89_comment (GtkTextIter *iter)
+{
+ GtkTextIter copy;
+ GtkTextIter match_start;
+ GtkTextIter match_end;
+ gunichar ch;
+
+ gtk_text_iter_assign (©, iter);
+
+ while (g_unichar_isspace (gtk_text_iter_get_char (iter)))
+ if (!gtk_text_iter_backward_char (iter))
+ GOTO (cleanup);
+
+ if (!(ch = gtk_text_iter_get_char (iter)) ||
+ (ch != '/') ||
+ !gtk_text_iter_backward_char (iter) ||
+ !(ch = gtk_text_iter_get_char (iter)) ||
+ (ch != '*') ||
+ !gtk_text_iter_backward_search (iter, "/*",
+ GTK_TEXT_SEARCH_TEXT_ONLY,
+ &match_start, &match_end, NULL) ||
+ !gtk_text_iter_backward_find_char (&match_start, non_space_predicate,
+ NULL, NULL))
+ GOTO (cleanup);
+
+ gtk_text_iter_assign (iter, &match_start);
+
+ return TRUE;
+
+cleanup:
+ gtk_text_iter_assign (iter, ©);
+
+ return FALSE;
+}
+
+static gboolean
backward_find_matching_char (GtkTextIter *iter,
gunichar ch)
{
@@ -234,10 +287,6 @@ backward_find_matching_char (GtkTextIter *iter,
break;
}
- /*
- * TODO: Make this skip past comment blocks!
- */
-
gtk_text_iter_assign (©, iter);
while (gtk_text_iter_backward_char (iter))
@@ -267,6 +316,11 @@ backward_find_matching_char (GtkTextIter *iter,
if (strcur != cur)
break;
}
+ else if ((cur == '/') && iter_ends_c89_comment (iter))
+ {
+ if (!backward_before_c89_comment (iter))
+ break;
+ }
if (cur == match)
{
@@ -355,42 +409,6 @@ backward_to_line_first_char (GtkTextIter *iter)
}
static gboolean
-backward_before_c89_comment (GtkTextIter *iter)
-{
- GtkTextIter copy;
- GtkTextIter match_start;
- GtkTextIter match_end;
- gunichar ch;
-
- gtk_text_iter_assign (©, iter);
-
- while (g_unichar_isspace (gtk_text_iter_get_char (iter)))
- if (!gtk_text_iter_backward_char (iter))
- GOTO (cleanup);
-
- if (!(ch = gtk_text_iter_get_char (iter)) ||
- (ch != '/') ||
- !gtk_text_iter_backward_char (iter) ||
- !(ch = gtk_text_iter_get_char (iter)) ||
- (ch != '*') ||
- !gtk_text_iter_backward_search (iter, "/*",
- GTK_TEXT_SEARCH_TEXT_ONLY,
- &match_start, &match_end, NULL) ||
- !gtk_text_iter_backward_find_char (&match_start, non_space_predicate,
- NULL, NULL))
- GOTO (cleanup);
-
- gtk_text_iter_assign (iter, &match_start);
-
- return TRUE;
-
-cleanup:
- gtk_text_iter_assign (iter, ©);
-
- return FALSE;
-}
-
-static gboolean
in_c89_comment (GtkTextIter *iter,
GtkTextIter *match_begin)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]