]> git.eshelyaron.com Git - emacs.git/commitdiff
Add default foreground colours to SVG images
authorLars Ingebrigtsen <larsi@gnus.org>
Sat, 14 Sep 2019 14:48:21 +0000 (16:48 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Sat, 14 Sep 2019 14:48:21 +0000 (16:48 +0200)
* lisp/net/shr.el (svg--wrap-svg): Add a default foreground colour
to SVG images (bug#37159).  This helps with images like the ones
in https://en.wikipedia.org/wiki/Banach_fixed-point_theorem that
specify no foreground or background colours.
(shr-parse-image-data): Use it.

lisp/net/shr.el

index 81c3fb4aa52649f56283bf881c20778fbe9f916e..1dff129b9dca04a84460d052dbda90655132dcec 100644 (file)
@@ -1180,8 +1180,24 @@ Return a string with image data."
             ;; so glitches may occur during this transformation.
            (shr-dom-to-xml
             (libxml-parse-xml-region (point) (point-max)))))
+    ;; SVG images often do not have a specified foreground/background
+    ;; color, so wrap them in styles.
+    (when (eq content-type 'image/svg+xml)
+      (setq data (svg--wrap-svg data)))
     (list data content-type)))
 
+(defun svg--wrap-svg (data)
+  "Add a default foreground colour to SVG images."
+  (with-temp-buffer
+    (insert "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" "
+            "xmlns:xi=\"http://www.w3.org/2001/XInclude\" "
+            "style=\"color: "
+            (face-foreground 'default) ";\">"
+            "<xi:include href=\"data:image/svg+xml;base64,"
+            (base64-encode-string data t)
+            "\"></xi:include></svg>")
+    (buffer-string)))
+
 (defun shr-image-displayer (content-function)
   "Return a function to display an image.
 CONTENT-FUNCTION is a function to retrieve an image for a cid url that