Browse Source

Markdown exporter: restructure org-md-link

* lisp/ox-md.el (org-md-link): Restructure slightly to match the code
  structure of other exporters.  For easier later refactor.
Gustav Wikström 5 years ago
parent
commit
32aa7139fd
1 changed files with 30 additions and 32 deletions
  1. 30 32
      lisp/ox-md.el

+ 30 - 32
lisp/ox-md.el

@@ -385,20 +385,28 @@ channel."
 
 ;;;; Link
 
-(defun org-md-link (link contents info)
+(defun org-md-link (link desc info)
   "Transcode LINE-BREAK object into Markdown format.
-CONTENTS is the link's description.  INFO is a plist used as
-a communication channel."
-  (let ((link-org-files-as-md
-	 (lambda (raw-path)
-	   ;; Treat links to `file.org' as links to `file.md'.
-	   (if (string= ".org" (downcase (file-name-extension raw-path ".")))
-	       (concat (file-name-sans-extension raw-path) ".md")
-	     raw-path)))
-	(type (org-element-property :type link)))
+DESC is the description part of the link, or the empty string.
+INFO is a plist holding contextual information.  See
+`org-export-data'."
+  (let* ((link-org-files-as-md
+	  (lambda (raw-path)
+	    ;; Treat links to `file.org' as links to `file.md'.
+	    (if (string= ".org" (downcase (file-name-extension raw-path ".")))
+		(concat (file-name-sans-extension raw-path) ".md")
+	      raw-path)))
+	 (type (org-element-property :type link))
+	 (raw-path (raw-path (org-element-property :path link)))
+	 (path (cond
+		((member type '("http" "https" "ftp" "mailto"))
+		 (concat type ":" path))
+		((string= type "file")
+		 (org-export-file-uri (funcall link-org-files-as-md raw-path)))
+		(t raw-path))))
     (cond
      ;; Link type is handled by a special function.
-     ((org-export-custom-protocol-maybe link contents 'md))
+     ((org-export-custom-protocol-maybe link desc 'md))
      ((member type '("custom-id" "id" "fuzzy"))
       (let ((destination (if (string= type "fuzzy")
 			     (org-export-resolve-fuzzy-link link info)
@@ -406,13 +414,13 @@ a communication channel."
 	(pcase (org-element-type destination)
 	  (`plain-text			; External file.
 	   (let ((path (funcall link-org-files-as-md destination)))
-	     (if (not contents) (format "<%s>" path)
-	       (format "[%s](%s)" contents path))))
+	     (if (not desc) (format "<%s>" path)
+	       (format "[%s](%s)" desc path))))
 	  (`headline
 	   (format
 	    "[%s](#%s)"
 	    ;; Description.
-	    (cond ((org-string-nw-p contents))
+	    (cond ((org-string-nw-p desc))
 		  ((org-export-numbered-headline-p destination info)
 		   (mapconcat #'number-to-string
 			      (org-export-get-headline-number destination info)
@@ -435,10 +443,9 @@ a communication channel."
 		       description
 		       (org-export-get-reference destination info))))))))
      ((org-export-inline-image-p link org-html-inline-image-rules)
-      (let ((path (let ((raw-path (org-element-property :path link)))
-		    (cond ((not (equal "file" type)) (concat type ":" raw-path))
-			  ((not (file-name-absolute-p raw-path)) raw-path)
-			  (t (expand-file-name raw-path)))))
+      (let ((path (cond ((not (equal "file" type)) (concat type ":" raw-path))
+			((not (file-name-absolute-p raw-path)) raw-path)
+			(t (expand-file-name raw-path))))
 	    (caption (org-export-data
 		      (org-export-get-caption
 		       (org-export-get-parent-element link)) info)))
@@ -446,20 +453,11 @@ a communication channel."
 		(if (not (org-string-nw-p caption)) path
 		  (format "%s \"%s\"" path caption)))))
      ((string= type "coderef")
-      (let ((ref (org-element-property :path link)))
-	(format (org-export-get-coderef-format ref contents)
-		(org-export-resolve-coderef ref info))))
-     ((equal type "radio") contents)
-     (t (let* ((raw-path (org-element-property :path link))
-	       (path
-		(cond
-		 ((member type '("http" "https" "ftp" "mailto"))
-		  (concat type ":" raw-path))
-		 ((string= type "file")
-		  (org-export-file-uri (funcall link-org-files-as-md raw-path)))
-		 (t raw-path))))
-	  (if (not contents) (format "<%s>" path)
-	    (format "[%s](%s)" contents path)))))))
+      (format (org-export-get-coderef-format path desc)
+	      (org-export-resolve-coderef path info)))
+     ((equal type "radio") desc)
+     (t (if (not desc) (format "<%s>" path)
+	  (format "[%s](%s)" desc path))))))
 
 
 ;;;; Node Property