stepSix method

void stepSix(
  1. List<LayerElement> layer
)

Implementation

void stepSix(List<LayerElement> layer) {
  var scanned = <LayerElement>[];

  for (var i = 0; i < layer.length; i++) {
    var element = layer[i];

    if (scanned.isEmpty) {
      if (element is ContainerElement) {
        scanned.add(element);
      } else {
        scanned.add(ContainerElement(ContainerX.createEmpty()));
        scanned.add(element);
      }
    } else {
      var previous = scanned.last;

      if (previous is ContainerElement && element is ContainerElement) {
        // Join containers
        previous.container.join(element.container);
      } else if (previous is NodeElement && element is NodeElement) {
        // Insert empty container between nodes
        scanned.add(ContainerElement(ContainerX.createEmpty()));
        scanned.add(element);
      } else {
        scanned.add(element);
      }
    }
  }

  // Ensure ends with container
  if (scanned.isNotEmpty && scanned.last is NodeElement) {
    scanned.add(ContainerElement(ContainerX.createEmpty()));
  }

  layer.clear();
  layer.addAll(scanned);
  updateIndices(layer);
}