resolveMarkdownImage function

String? resolveMarkdownImage(
  1. String src, {
  2. required String markdownPath,
  3. required String imageDirectory,
  4. required Set<String> assets,
})

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;
}