getHeadEquality static method

String getHeadEquality(
  1. List<String> l, {
  2. Pattern? delimiter,
  3. int? minLength,
  4. bool validator(
    1. String s
    )?,
})

Returns the equals head part of l elements.

Implementation

static String getHeadEquality(List<String> l,
    {Pattern? delimiter,
    int? minLength,
    bool Function(String s)? validator}) {
  if (l.length <= 1) return '';

  var min = l.map((e) => e.length).min;
  if (minLength != null && min > minLength) min = minLength;

  var longest = '';
  String? longestWithDelimiter;

  if (delimiter is RegExp) {
    delimiter = asEndingPattern(delimiter);
  }

  for (var sz = 1; sz < min; ++sz) {
    var head = l[0].substring(0, sz);

    var matches = true;
    for (var i = 1; i < l.length; ++i) {
      var e = l[i];
      if (!e.startsWith(head)) {
        matches = false;
        break;
      }
    }

    if (matches && (validator == null || validator(head))) {
      longest = head;
      if (delimiter != null &&
          endsWithPattern(head, delimiter, isEndingPattern: true)) {
        longestWithDelimiter = head;
      }
    }
  }

  return longestWithDelimiter ?? longest;
}