replaceMatches method

String replaceMatches(
  1. String source,
  2. PassageReplacement replacement, {
  3. BibleLanguageEnum? language,
})

Replaces matches in one pass without scanning replacement text again.

Implementation

String replaceMatches(
  String source,
  PassageReplacement replacement, {
  BibleLanguageEnum? language,
}) {
  final matches = extract(source, language: language);
  if (matches.isEmpty) return source;

  final output = StringBuffer();
  var copiedThrough = 0;
  for (final match in matches) {
    output.write(source.substring(copiedThrough, match.start));
    output.write(replacement(match));
    copiedThrough = match.end;
  }
  output.write(source.substring(copiedThrough));
  return output.toString();
}