]> git.wh0rd.org Git - nano.git/commitdiff
refactor the statusbar prompt's bracket searching code to be closer to
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Wed, 16 Nov 2005 13:45:41 +0000 (13:45 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Wed, 16 Nov 2005 13:45:41 +0000 (13:45 +0000)
the edit window's bracket searching code

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3194 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/prompt.c
src/proto.h

index 73f43c202f4cd11353ce977d9cb76b2545817390..a99d372b5094e63c9966f03f67dca3481155efa3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -106,8 +106,9 @@ CVS code -
          and find_bracket_match(); changes to shortcut_init() and
          do_find_bracket(). (DLR)
        - Add the ability to do bracket searches at the statusbar
-         prompt.  New function do_statusbar_find_bracket(); changes to
-         do_statusbar_input(). (DLR)
+         prompt.  New functions find_statusbar_bracket_match() and
+         do_statusbar_find_bracket(); changes to do_statusbar_input().
+         (DLR)
 - chars.c:
   mbwidth()
        - If wcwidth() returns -1 for the character passed in, treat the
index fe3fff4c4c4ec639808627496730bf96650f7b38..49a9e87a6f275bb5fbd7c647911681e4ad44c09f 100644 (file)
@@ -644,10 +644,46 @@ void do_statusbar_verbatim_input(bool *got_enter)
 }
 
 #ifndef NANO_TINY
+/* Search for a match to one of the two characters in bracket_set.  If
+ * reverse is TRUE, search backwards.  Otherwise, search forwards. */
+bool find_statusbar_bracket_match(bool reverse, const char
+       *bracket_set)
+{
+    const char *rev_start = NULL, *found = NULL;
+
+    assert(strlen(bracket_set) == 2);
+
+    /* rev_start might end up 1 character before the start or after the
+     * end of the line.  This won't be a problem because we'll skip over
+     * it below in that case. */
+    rev_start = reverse ? answer + (statusbar_x - 1) : answer +
+       (statusbar_x + 1);
+
+    while (TRUE) {
+       /* Look for either of the two characters in bracket_set.
+        * rev_start can be 1 character before the start or after the
+        * end of the line.  In either case, just act as though no match
+        * is found. */
+       found = ((rev_start > answer && *(rev_start - 1) == '\0') ||
+               rev_start < answer) ? NULL : (reverse ?
+               revstrpbrk(answer, bracket_set, rev_start) :
+               strpbrk(rev_start, bracket_set));
+
+       /* We've found a potential match. */
+       if (found != NULL)
+           break;
+    }
+
+    /* We've definitely found something. */
+    statusbar_x = found - answer;
+    statusbar_pww = statusbar_xplustabs();
+
+    return TRUE;
+}
+
 void do_statusbar_find_bracket(void)
 {
     size_t statusbar_x_save, pww_save;
-    const char *rev_start = NULL, *found = NULL;
     const char *bracket_list = "()<>[]{}";
        /* The list of brackets we can find matches to. */
     const char *pos;
@@ -686,26 +722,7 @@ void do_statusbar_find_bracket(void)
     bracket_set[2] = '\0';
 
     while (TRUE) {
-       /* rev_start might end up 1 character before the start or after
-        * the end of the line.  This won't be a problem because we'll
-        * skip over it below in that case. */
-       rev_start = reverse ? answer + (statusbar_x - 1) : answer +
-               (statusbar_x + 1);
-
-       /* Look for either of the two characters in bracket_set.
-        * rev_start can be 1 character before the start or after the
-        * end of the line.  In either case, just act as though no match
-        * is found. */
-       found = ((rev_start > answer && *(rev_start - 1) == '\0') ||
-               rev_start < answer) ? NULL : (reverse ?
-               revstrpbrk(answer, bracket_set, rev_start) :
-               strpbrk(rev_start, bracket_set));
-
-       if (found != NULL) {
-           /* We've definitely found something. */
-           statusbar_x = found - answer;
-           statusbar_pww = statusbar_xplustabs();
-
+       if (find_statusbar_bracket_match(reverse, bracket_set)) {
            /* If we found an identical bracket, increment count.  If we
             * found a complementary bracket, decrement it. */
            count += (answer[statusbar_x] == ch) ? 1 : -1;
index 1db1af7127a3b638e846cdbbb823e1125f02ff16..74ab7e1308312dc44b56e2ba966ee9e68667cb72 100644 (file)
@@ -446,6 +446,8 @@ bool do_statusbar_prev_word(bool allow_punct);
 #endif
 void do_statusbar_verbatim_input(bool *got_enter);
 #ifndef NANO_TINY
+bool find_statusbar_bracket_match(bool reverse, const char
+       *bracket_set);
 void do_statusbar_find_bracket(void);
 #endif
 size_t statusbar_xplustabs(void);