pairOpsWithTheirBlock static method

List<TDataGroup> pairOpsWithTheirBlock(
  1. List<DeltaInsertOp> ops
)

Implementation

static List<TDataGroup> pairOpsWithTheirBlock(List<DeltaInsertOp> ops) {
  final result = <TDataGroup>[];

  bool canBeInBlock(DeltaInsertOp op) {
    return !(op.isJustNewline() || op.isCustomEmbedBlock() || op.isVideo() || op.isContainerBlock());
  }

  bool isInlineData(DeltaInsertOp op) => op.isInline();

  var lastInd = ops.length - 1;
  for (var i = lastInd; i >= 0; i--) {
    final op = ops[i];

    if (op.isVideo()) {
      result.add(VideoItem(op));
    } else if (op.isCustomEmbedBlock()) {
      result.add(BlotBlock(op));
    } else if (op.isContainerBlock()) {
      final opsSlice = sliceFromReverseWhile(ops, i - 1, canBeInBlock);
      result.add(BlockGroup(op, opsSlice.elements));
      i = opsSlice.sliceStartsAt > -1 ? opsSlice.sliceStartsAt : i;
    } else {
      final opsSlice = sliceFromReverseWhile(ops, i - 1, isInlineData);
      result.add(InlineGroup(opsSlice.elements..add(op)));
      i = opsSlice.sliceStartsAt > -1 ? opsSlice.sliceStartsAt : i;
    }
  }
  return result.reversed.toList();
}