apply method

  1. @override
Future<String> apply(
  1. String content,
  2. Map<String, dynamic> context
)
override

Implementation

@override
Future<String> apply(String content, Map<String, dynamic> context) async {
  return content.replaceAllMapped(_whileRegex, (match) {
    final condition = match.group(1)?.trim();
    final body = match.group(2);

    if (condition == null || body == null) return '';

    final buffer = StringBuffer();
    var iterations = 0;
    const maxIterations = 1000; // Prevent infinite loops

    while (iterations < maxIterations) {
      try {
        final shouldContinue = _evaluate(condition, context);
        if (!shouldContinue) break;

        buffer.write(body);
        iterations++;
      } catch (_) {
        break;
      }
    }

    return buffer.toString();
  });
}