resolveMarkdownImage function
The asset an image src of the Markdown file markdownPath shows: src, relative to the file, or under imageDirectory by path or name; null when none is bundled.
Implementation
String? resolveMarkdownImage(
String src, {
required String markdownPath,
required String imageDirectory,
required Set<String> assets,
}) {
if (src.contains('://') || src.startsWith('data:')) return null;
final String directory = markdownPath.substring(
0,
markdownPath.lastIndexOf('/') + 1,
);
final String images = imageDirectory.isEmpty || imageDirectory.endsWith('/')
? imageDirectory
: '$imageDirectory/';
String relativeTo(String dir) =>
Uri.decodeFull(Uri(path: dir).resolve(src).path);
for (final String candidate in <String>[
src,
relativeTo(directory),
relativeTo(images),
'$images${src.split('/').last}',
]) {
if (assets.contains(candidate)) return candidate;
}
return null;
}