summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/main.c b/main.c
index ee25eac..db6d641 100644
--- a/main.c
+++ b/main.c
@@ -160,7 +160,7 @@ static inline int bracket_dir(u32 c) {
}
}
-TxtLoc match_bracket(TxtLoc l) {
+int match_bracket(TxtLoc l, TxtLoc *out) {
u32 depth = 1;
u32 c = txt_chr(l);
u32 o = bracket_opp(c);
@@ -181,7 +181,12 @@ TxtLoc match_bracket(TxtLoc l) {
}
}
- return l;
+ if (depth == 0) {
+ *out = l;
+ return 1;
+ } else {
+ return 0;
+ }
}
TxtLoc next_func_end(TxtLoc l) {
@@ -203,11 +208,14 @@ TxtLoc prev_func_end(TxtLoc l) {
}
TxtLoc prev_func(TxtLoc l) {
- return match_bracket(prev_func_end(l));
+ match_bracket(prev_func_end(l), &l);
+ return l;
}
TxtLoc next_func(TxtLoc l) {
- return match_bracket(next_func_end(match_bracket(l)));
+ match_bracket(l, &l);
+ match_bracket(next_func_end(l), &l);
+ return l;
}
int empty_line(TxtLoc l) {
@@ -503,7 +511,7 @@ loop:
l = next_func(l);
break;
case '%':
- l = match_bracket(l);
+ if (!match_bracket(l, &l)) return 0;
break;
case KEY_PGUP:
for (u32 i = 0; i < LINES; i += 3) l = prev_line(l);