RegstrInvoke function
dynamic
RegstrInvoke(})
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';
}
}
}
}
}