From 565330033a623ed7bf4d0a3b57dd14710cf27703 Mon Sep 17 00:00:00 2001
From: Michael Hoffmann <brennan.brisad@gmail.com>
Date: Wed, 7 Jul 2021 18:26:37 +0200
Subject: [PATCH] Don't incorporate externally linked images in EPUB documents
 (#7430)

Just like it is possible to avoid incorporating an image in EPUB by
passing `data-external="1"` to a raw HTML snippet, this makes the same
possible for native Images, by looking for an associated `external`
attribute.
---
 MANUAL.txt                      | 6 ++++++
 src/Text/Pandoc/Writers/EPUB.hs | 3 ++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/MANUAL.txt b/MANUAL.txt
index 52563a8fa..c9dc9e62b 100644
--- a/MANUAL.txt
+++ b/MANUAL.txt
@@ -6177,6 +6177,12 @@ with the `src` attribute.  For example:
       </source>
     </audio>
 
+If the input format already is HTML then `data-external="1"` will work
+as expected for `<img>` elements. Similarly, for Markdown, external
+images can be declared with `![img](url){external=1}`. Note that this
+only works for images; the other media elements have no native
+representation in pandoc's AST and requires the use of raw HTML.
+
 # Jupyter notebooks
 
 When creating a [Jupyter notebook], pandoc will try to infer the
diff --git a/src/Text/Pandoc/Writers/EPUB.hs b/src/Text/Pandoc/Writers/EPUB.hs
index 3c092a2c1..508fb6a98 100644
--- a/src/Text/Pandoc/Writers/EPUB.hs
+++ b/src/Text/Pandoc/Writers/EPUB.hs
@@ -1131,7 +1131,8 @@ transformInline  :: PandocMonad m
                  => WriterOptions
                  -> Inline
                  -> E m Inline
-transformInline _opts (Image attr lab (src,tit)) = do
+transformInline _opts (Image attr@(_,_,kvs) lab (src,tit))
+  | isNothing (lookup "external" kvs) = do
     newsrc <- modifyMediaRef $ T.unpack src
     return $ Image attr lab ("../" <> newsrc, tit)
 transformInline opts x@(Math t m)