getInsertionAnchor method

(int, String) getInsertionAnchor(
  1. XmlInsertElementEdit insert
)

Determines the insertion anchor point for the given insert operation. Returns a tuple of (anchor index, indent string).

Implementation

(int, String) getInsertionAnchor(XmlInsertElementEdit insert) {
  final range = _getElementScope(insert.path);
  if (range == null) {
    return (-1, _defaultIndent);
  }
  int anchor = -1;
  if (insert.insertAfter != null) {
    for (var i = range.start; i <= range.end; i++) {
      final event = _events[i];
      if (event is XmlStartElementEvent) {
        final content = (i + 1 <= range.end && _events[i + 1] is XmlTextEvent)
            ? _events[i + 1] as XmlTextEvent
            : null;
        if (insert.insertAfter!(event.name, content?.value)) {
          anchor = i + 1;
        }
      }
      // Stop at the end of the range
      if (i == range.end) break;
    }
  }

  if (anchor != -1) {
    return (anchor, _getPreviousElementIndent(max(anchor - 1, 0)));
  }

  // Default to inserting at the start of the range
  return (range.start, _getNextElementIndent(range.start));
}