withResolvedImages function

String withResolvedImages(
  1. String markdown,
  2. String? resolve(
    1. String src
    )
)

markdown with each image destination resolve maps replaced by its result; fenced code is kept as written.

Implementation

String withResolvedImages(
  String markdown,
  String? Function(String src) resolve,
) {
  String rewrite(String text) => text.replaceAllMapped(
    _imageDestination,
    (Match m) => '${m[1]}${resolve(m[2]!) ?? m[2]}',
  );
  final StringBuffer out = StringBuffer();
  int last = 0;
  for (final Match fence in _fence.allMatches(markdown)) {
    out
      ..write(rewrite(markdown.substring(last, fence.start)))
      ..write(fence[0]);
    last = fence.end;
  }
  return (out..write(rewrite(markdown.substring(last)))).toString();
}