foldsFindMatchingBracket function
int
foldsFindMatchingBracket(
{ - required Rope rope,
- required int targetOffset,
})
Implementation
int foldsFindMatchingBracket({required Rope rope, required int targetOffset}) {
final value = rope.charAt(targetOffset);
const pairs = {'(': ')', '[': ']', '{': '}'};
const reversePairs = {')': '(', ']': '[', '}': '{'};
final forward = pairs[value];
final backward = reversePairs[value];
if (forward == null && backward == null) return -1;
final step = forward != null ? 1 : -1;
final expected = forward ?? backward!;
var depth = 0;
for (
var offset = targetOffset;
offset >= 0 && offset < rope.length;
offset += step
) {
final char = rope.charAt(offset);
if (char == value) {
depth++;
} else if (char == expected) {
depth--;
if (depth == 0) return offset;
}
}
return -1;
}