segIterable method

Iterable<String> segIterable(
  1. String str
)

Implementation

Iterable<String> segIterable(String str) sync* {
  StringBuffer buffer = StringBuffer();
  int state = 0;
  int deep = 0;
  for (int code in str.codeUnits) {
    if (state == 0) {
      if (code == leftBrackets) {
        state = 1;
      }
    } else {
      if (code == leftBrackets) {
        deep ++;
        buffer.writeCharCode(code);
      } else if (code == rightBrackets) {
        if (deep == 0) {
          yield buffer.toString();
          buffer.clear();
          state = 0;
        } else {
          deep--;
          buffer.writeCharCode(code);
        }
      } else {
        buffer.writeCharCode(code);
      }
    }
  }
}