withResolvedImages function
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();
}