code: private <E, F> void maybeStartBlock(Delta<E> delta, State<E, F> state, int contextSize)
      {
          if (state.getLastDelta() == null
              || state.getLastDelta().getPrevious().getLastIndex() < delta.getPrevious().getIndex() - contextSize * 2) {
              maybeEndBlock(state, contextSize);
              state.getBlocks().push(new UnifiedDiffBlock<E, F>());
          }
  
          // Add the unmodified elements before the given delta.
          int count = state.getBlocks().peek().isEmpty() ? contextSize : contextSize * 2;
          int lastChangeIndex = state.getLastDelta() == null ? -1 : state.getLastDelta().getPrevious().getLastIndex();
          int end = delta.getPrevious().getIndex();
          int start = Math.max(end - count, lastChangeIndex + 1);
          state.getBlocks().peek().addAll(this.<E, F>getUnmodifiedElements(state.getPrevious(), start, end));
      }
docs: Starts a new {@link UnifiedDiffBlock} if the provided change is in a different context. The distance between two
  changes inside the same block is less than 2 * context size.
  
  @param delta the change
  @param state the state of the displayer
  @param contextSize the number of unmodified elements to display before and after each change
  @param <E> the type of composite elements that are compared to produce the first level diff
  @param <F> the type of sub-elements that are compared to produce the second-level diff when a composite element
  is modified