findTopLevelBrackets static method

List<BracketRange> findTopLevelBrackets(
  1. String input, {
  2. String openingBracket = '{',
  3. String closingBracket = '}',
})

Implementation

static List<BracketRange> findTopLevelBrackets(
  String input, {
  String openingBracket = '{',
  String closingBracket = '}',
}) {
  final characters = input.split('');
  final result = <BracketRange>[];
  int start = -1;
  int counter = 0;
  characters.forEachIndexed((index, c) {
    if (c == openingBracket) {
      counter++;
      if (counter == 1) {
        // first opening bracket
        start = index;
      }
    } else if (c == closingBracket) {
      counter--;
      if (counter == 0) {
        result.add(BracketRange(characters, start, index));
      } else if (counter < 0) {
        // invalid closing bracket
        // just find the next opening bracket
        counter = 0;
      }
    }
  });

  return result;
}