RegstrInvoke function

dynamic RegstrInvoke(
  1. String invokeFrom,
  2. List<List> patternMappers, {
  3. int? maxCount,
  4. Function? invoker,
})

maxCount support upto 10.

Implementation

dynamic RegstrInvoke(String invokeFrom, List<List<dynamic>> patternMappers,
    {int? maxCount, Function? invoker}) {
  if (patternMappers.isNotEmpty) {
    assert(patternMappers[0].length >= 2);
    assert(patternMappers[0][1] is Iterable);
  }
  if (maxCount == null) {
    maxCount = 0;
    patternMappers.forEach((element) {
      if (element[1].length > maxCount) {
        maxCount = element[1].length;
      }
    });
  }
  for (var singleRule in patternMappers) {
    var isPureOrLink = singleRule.length > 2;
    var rem = RegExp(singleRule[0]).matchAsPrefix(invokeFrom);
    var groupPureOrLink = isPureOrLink
        ? groupPureOrLinkCapture(invokeFrom, singleRule[0], singleRule[2])
        : null;
    if (rem != null) {
      dynamic groupValue(v) => (v is int && v > 0
          ? (isPureOrLink ? groupPureOrLink![v] : rem.group(v))
          : v);
      if (invoker == null) {
        return singleRule[1].map((v) => groupValue(v)).toList();
      } else {
        switch (maxCount) {
          case 1:
            return invoker(groupValue(singleRule[1][0]));
          case 2:
            return invoker(
                groupValue(singleRule[1][0]), groupValue(singleRule[1][1]));
          case 3:
            return invoker(groupValue(singleRule[1][0]),
                groupValue(singleRule[1][1]), groupValue(singleRule[1][2]));
          case 4:
            return invoker(
                groupValue(singleRule[1][0]),
                groupValue(singleRule[1][1]),
                groupValue(singleRule[1][2]),
                groupValue(singleRule[1][3]));
          case 5:
            return invoker(
                groupValue(singleRule[1][0]),
                groupValue(singleRule[1][1]),
                groupValue(singleRule[1][2]),
                groupValue(singleRule[1][3]),
                groupValue(singleRule[1][4]));
          case 6:
            return invoker(
                groupValue(singleRule[1][0]),
                groupValue(singleRule[1][1]),
                groupValue(singleRule[1][2]),
                groupValue(singleRule[1][3]),
                groupValue(singleRule[1][4]),
                groupValue(singleRule[1][5]));
          case 7:
            return invoker(
                groupValue(singleRule[1][0]),
                groupValue(singleRule[1][1]),
                groupValue(singleRule[1][2]),
                groupValue(singleRule[1][3]),
                groupValue(singleRule[1][4]),
                groupValue(singleRule[1][5]),
                groupValue(singleRule[1][6]));
          case 8:
            return invoker(
                groupValue(singleRule[1][0]),
                groupValue(singleRule[1][1]),
                groupValue(singleRule[1][2]),
                groupValue(singleRule[1][3]),
                groupValue(singleRule[1][4]),
                groupValue(singleRule[1][5]),
                groupValue(singleRule[1][6]),
                groupValue(singleRule[1][7]));
          case 9:
            return invoker(
                groupValue(singleRule[1][0]),
                groupValue(singleRule[1][1]),
                groupValue(singleRule[1][2]),
                groupValue(singleRule[1][3]),
                groupValue(singleRule[1][4]),
                groupValue(singleRule[1][5]),
                groupValue(singleRule[1][6]),
                groupValue(singleRule[1][7]),
                groupValue(singleRule[1][8]));
          case 10:
            return invoker(
                groupValue(singleRule[1][0]),
                groupValue(singleRule[1][1]),
                groupValue(singleRule[1][2]),
                groupValue(singleRule[1][3]),
                groupValue(singleRule[1][4]),
                groupValue(singleRule[1][5]),
                groupValue(singleRule[1][6]),
                groupValue(singleRule[1][7]),
                groupValue(singleRule[1][8]),
                groupValue(singleRule[1][9]));
          default:
            throw 'maxCount support upto 10';
        }
      }
    }
  }
}