fillTemplateString method
String
fillTemplateString(
- String template,
- TreeReference contextRef, [
- Map<
String, Object?> variables = const {}
Replaces ${n} placeholders in template with the values of
outputFragments, evaluated at contextRef.
Implementation
String fillTemplateString(
String template,
TreeReference contextRef, [
Map<String, Object?> variables = const {},
]) {
final args = <String, String>{};
var depth = 0;
var outstanding = Localizer.getArgs(template);
while (outstanding.isNotEmpty) {
for (final argName in outstanding) {
if (args.containsKey(argName)) continue;
final index = int.tryParse(argName) ?? -1;
if (index < 0 || index >= outputFragments.length) continue;
final ec = EvaluationContext.withContext(evaluationContext, contextRef)
..originalContext = contextRef
..setVariables(variables);
args[argName] = outputFragments[index].evalReadable(mainInstance, ec);
}
template = Localizer.processNamedArguments(template, args);
outstanding = Localizer.getArgs(template);
if (++depth >= _templatingRecursionLimit) {
throw StateError(
'Dependency cycle in <output>s; recursion limit exceeded!!',
);
}
}
return template;
}