aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--text-motions.c29
1 files changed, 8 insertions, 21 deletions
diff --git a/text-motions.c b/text-motions.c
index a25299b..e48dd9a 100644
--- a/text-motions.c
+++ b/text-motions.c
@@ -587,37 +587,24 @@ size_t text_function_end_prev(Text *txt, size_t pos) {
return text_function_end_direction(txt, pos, -1);
}
-static size_t text_paren_start_end(Text *txt, size_t pos, int direction, Filerange (*rangefn)(Text *, size_t)) {
- /* don't select (as a text obj) a bracket we're currently on */
- size_t offbracketpos = pos + direction;
-
- Filerange r = rangefn(txt, offbracketpos);
- if (!text_range_valid(&r))
- return pos;
-
- /* we want the outer text object */
- r.start += direction;
- r.end -= direction;
- if (!text_range_valid(&r))
- return pos;
-
- return direction < 0 ? r.start : r.end;
-}
-
size_t text_block_start(Text *txt, size_t pos) {
- return text_paren_start_end(txt, pos, -1, text_object_curly_bracket);
+ Filerange r = text_object_curly_bracket(txt, pos-1);
+ return text_range_valid(&r) ? r.start-1 : pos;
}
size_t text_block_end(Text *txt, size_t pos) {
- return text_paren_start_end(txt, pos, +1, text_object_curly_bracket);
+ Filerange r = text_object_curly_bracket(txt, pos+1);
+ return text_range_valid(&r) ? r.end : pos;
}
size_t text_parenthese_start(Text *txt, size_t pos) {
- return text_paren_start_end(txt, pos, -1, text_object_paranthese);
+ Filerange r = text_object_paranthese(txt, pos-1);
+ return text_range_valid(&r) ? r.start-1 : pos;
}
size_t text_parenthese_end(Text *txt, size_t pos) {
- return text_paren_start_end(txt, pos, +1, text_object_paranthese);
+ Filerange r = text_object_paranthese(txt, pos+1);
+ return text_range_valid(&r) ? r.end : pos;
}
size_t text_bracket_match(Text *txt, size_t pos) {