findOutsideOfBrackets function

List<int> findOutsideOfBrackets(
  1. BracketType bracketType,
  2. String source,
  3. String pattern
)

Gets the starting positions of the pattern inside brackets inp: aaa,aaaa<aa,a,>aa,a | out: 3,17

Implementation

List<int> findOutsideOfBrackets(BracketType bracketType, String source, String pattern) {
  var bracket = getBracket(bracketType);

  var level = 0;
  var x1 = StringBuffer();
  source.runes.forEach((x) {
    var char = String.fromCharCode(x);
    if (char == bracket.start) level++;
    if (char == bracket.end) level--;
    x1.write(level == 0 ? char : "¬");
  });
  var x2 = x1.toString();

  var rgx = RegExp(pattern);
  var r = rgx.allMatches(x2).map((x) => x.start).toList();
  return r;
}