onIndefinite method

  1. @override
void onIndefinite(
  1. String text
)
override

Implementation

@override
void onIndefinite(String text) {
  // Process depending on indefinite type.
  switch (text) {
    case indefBytes:
      _indefiniteStartCount++;
      _indefiniteStack.add(text);
      _byteAssembly.clear();
      break;
    case indefString:
      _indefiniteStartCount++;
      _indefiniteStack.add(text);
      _stringAssembly = '';
      break;
    case indefMap:
      _indefiniteStartCount++;
      _indefiniteStack.add(text);
      onMap(indefiniteMaxSize);
      break;
    case indefArray:
      _indefiniteStartCount++;
      _indefiniteStack.add(text);
      onArray(indefiniteMaxSize);
      break;
    case indefStop:
      // Get the top of the indefinite stack and switch on it.
      if (_indefiniteStack.isEmpty) {
        onError('Unbalanced indefinite break');
        break;
      }
      final top = _indefiniteStack.removeLast();
      switch (top) {
        case indefBytes:
          onBytes(_byteAssembly, _byteAssembly.length);
          break;
        case indefString:
          onString(_stringAssembly);
          break;
        case indefMap:
        case indefArray:
          {
            // Add an indefinite iterable stop item
            final item = DartItem();
            item.type = dartTypes.dtIterableIndefiniteStop;
            item.complete = true;
            _append(item);
          }
          break;
        default:
          onError('Unknown indefinite type on stop');
      }
      _indefiniteStartCount--;
      break;
    default:
      onError('Unknown indefinite type on start');
  }
  // If the indefinite sequence has stopped process it
  if (_indefiniteStartCount == 0) {
    _buildIndefiniteSequence();
  }
}