ソースを参照

Add better svg support to html exporter.

* lisp/ox-html.el (org-html--format-image): If image is an svg file,
  format as "object" using new function `org-html--svg-image' instead
  of "img".
Rick Frankel 11 年 前
コミット
e955be903a
1 ファイル変更30 行追加11 行削除
  1. 30 11
      lisp/ox-html.el

+ 30 - 11
lisp/ox-html.el

@@ -1406,17 +1406,36 @@ SOURCE is a string specifying the location of the image.
 ATTRIBUTES is a plist, as returned by
 `org-export-read-attribute'.  INFO is a plist used as
 a communication channel."
-  (org-html-close-tag
-   "img"
-   (org-html--make-attribute-string
-    (org-combine-plists
-     (list :src source
-	   :alt (if (string-match-p "^ltxpng/" source)
-		    (org-html-encode-plain-text
-		     (org-find-text-property-in-string 'org-latex-src source))
-		  (file-name-nondirectory source)))
-     attributes))
-   info))
+  (if (string= "svg" (file-name-extension source))
+      (org-html--svg-image source attributes info)
+    (org-html-close-tag
+     "img"
+     (org-html--make-attribute-string
+      (org-combine-plists
+       (list :src source
+	     :alt (if (string-match-p "^ltxpng/" source)
+		      (org-html-encode-plain-text
+		       (org-find-text-property-in-string 'org-latex-src source))
+		    (file-name-nondirectory source)))
+       attributes))
+     info)))
+
+(defun org-html--svg-image (source attributes info)
+  "Return \"object\" appropriate for embedding svg file SOURCE
+with assoicated ATTRIBUTES. INFO is a plist used as a
+communication channel.
+
+The special attribute \"fallback\" can be used to specify a fallback
+image file to use if the object embedding is not supported."
+  (let ((fallback (plist-get attributes :fallback))
+	(attrs (org-html--make-attribute-string
+		(plist-put attributes :fallback nil))))
+  (format "<object type=\"image/svg+xml\" data=\"%s\" %s>\n%s</object>"
+	  source attrs
+	  (if fallback
+	      (org-html-close-tag
+	       "img" (format "src=\"%s\" %s" fallback attrs) info)
+	    "Sorry, your browser does not support SVG."))))
 
 (defun org-html--textarea-block (element)
   "Transcode ELEMENT into a textarea block.