stepSix method
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);
}