emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] custom link export and ox-md


From: Nick Dokos
Subject: Re: [O] custom link export and ox-md
Date: Mon, 24 Feb 2014 14:37:33 -0500
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux)

Nicolas,

can you take a look at this patch? If it looks OK, I can
push it to maint.

--8<---------------cut here---------------start------------->8---
commit f820173bf514549134e8ba10bbbba1e539cb89f6
Author: Nick Dokos <address@hidden>
Date:   Mon Feb 24 14:31:33 2014 -0500

    Add handling of user-defined custom links to org-md-link
    
    * ox-md.el (org-md-link): Add code to handle user-defined custom links.
      Refactor raw-path calculation to simplify the code.
    
    Reported by John Peloquin 
(http://thread.gmane.org/gmane.emacs.orgmode/82627)

diff --git a/lisp/ox-md.el b/lisp/ox-md.el
index 39843d5..fbc5d6f 100644
--- a/lisp/ox-md.el
+++ b/lisp/ox-md.el
@@ -278,7 +278,8 @@ a communication channel."
            (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)))
+       (type (org-element-property :type link))
+       (raw-path (org-element-property :path link)))
     (cond ((member type '("custom-id" "id"))
           (let ((destination (org-export-resolve-id-link link info)))
             (if (stringp destination)  ; External file.
@@ -294,9 +295,8 @@ a communication channel."
                                            destination info)
                                           ".")))))))
          ((org-export-inline-image-p link org-html-inline-image-rules)
-          (let ((path (let ((raw-path (org-element-property :path link)))
-                        (if (not (file-name-absolute-p raw-path)) raw-path
-                          (expand-file-name raw-path))))
+          (let ((path (if (not (file-name-absolute-p raw-path)) raw-path
+                          (expand-file-name raw-path)))
                 (caption (org-export-data
                           (org-export-get-caption
                            (org-export-get-parent-element link)) info)))
@@ -304,7 +304,7 @@ 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)))
+          (let ((ref raw-path))
             (format (org-export-get-coderef-format ref contents)
                     (org-export-resolve-coderef ref info))))
          ((equal type "radio")
@@ -318,8 +318,11 @@ a communication channel."
                   (when number
                     (if (atom number) (number-to-string number)
                       (mapconcat 'number-to-string number "."))))))))
-         (t (let* ((raw-path (org-element-property :path link))
-                   (path
+         ;; Link type is handled by a special function.
+         ((functionp (setq protocol (nth 2 (assoc type org-link-protocols))))
+          (funcall protocol raw-path contents 'md))
+
+         (t (let* ((path
                     (cond
                      ((member type '("http" "https" "ftp"))
                       (concat type ":" raw-path))
--8<---------------cut here---------------end--------------->8---

Thanks,
Nick




reply via email to

[Prev in Thread] Current Thread [Next in Thread]