* custom link export and ox-md
@ 2014-02-24 2:12 John Peloquin
2014-02-24 5:00 ` Nick Dokos
0 siblings, 1 reply; 5+ messages in thread
From: John Peloquin @ 2014-02-24 2:12 UTC (permalink / raw)
To: emacs-orgmode
Greetings,
I'm trying to define a custom link in org mode with custom export
formatting, but I get unexpected results when exporting to markdown.
Minimal example:
`minimal-init.el`
(add-to-list 'load-path "~/.emacs.d/elpa/org-20140217")
(require 'org)
(add-to-list 'org-export-backends "md")
(org-add-link-type
"cite" nil
(lambda (path desc format)
(format "[@%s]" path)))
`minimal.org`
Some text [[cite:citekey]].
When I export `minimal.org` to markdown using C-c C-e m M, I get:
Some text <citekey>.
Whereas I expected:
Some text [@citekey].
I tried this with a clean emacs configuration (`emacs -Q -l
minimal-init.el`). `org-version` returns 8.2.5h, which as far as I know
is the latest version. `emacs-version` is 24.3.1.
I do get the expected export result if I export to latex or html, so the
link export definition in init.el does work. Am I doing something
wrong? Is this a bug in ox-md?
Best regards,
John Peloquin
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: custom link export and ox-md
2014-02-24 2:12 custom link export and ox-md John Peloquin
@ 2014-02-24 5:00 ` Nick Dokos
2014-02-24 19:37 ` Nick Dokos
0 siblings, 1 reply; 5+ messages in thread
From: Nick Dokos @ 2014-02-24 5:00 UTC (permalink / raw)
To: emacs-orgmode
John Peloquin <john.peloquin@gmail.com> writes:
> Greetings,
>
> I'm trying to define a custom link in org mode with custom export
> formatting, but I get unexpected results when exporting to markdown.
>
>
> Minimal example:
>
> `minimal-init.el`
>
> (add-to-list 'load-path "~/.emacs.d/elpa/org-20140217")
> (require 'org)
> (add-to-list 'org-export-backends "md")
>
> (org-add-link-type
> "cite" nil
> (lambda (path desc format)
> (format "[@%s]" path)))
>
>
> `minimal.org`
>
> Some text [[cite:citekey]].
>
>
> When I export `minimal.org` to markdown using C-c C-e m M, I get:
>
> Some text <citekey>.
>
>
> Whereas I expected:
>
> Some text [@citekey].
>
>
> I tried this with a clean emacs configuration (`emacs -Q -l
> minimal-init.el`). `org-version` returns 8.2.5h, which as far as I
> know is the latest version. `emacs-version` is 24.3.1.
>
> I do get the expected export result if I export to latex or html, so
> the link export definition in init.el does work. Am I doing something
> wrong?
No.
> Is this a bug in ox-md?
>
Yes. There is no provision for handling user-defined link types. Try the
following patch:
--8<---------------cut here---------------start------------->8---
diff --git a/lisp/ox-md.el b/lisp/ox-md.el
index b8316dd..fa64f2d 100644
--- a/lisp/ox-md.el
+++ b/lisp/ox-md.el
@@ -340,6 +340,10 @@ a communication channel."
(when number
(if (atom number) (number-to-string number)
(mapconcat 'number-to-string number "."))))))))
+ ;; Link type is handled by a special function.
+ ((functionp (setq protocol (nth 2 (assoc type org-link-protocols))))
+ (funcall protocol (org-element-property :path link) contents 'md))
+
(t (let* ((raw-path (org-element-property :path link))
(path
(cond
--8<---------------cut here---------------end--------------->8---
Lightly tested with your reproducer - thanks for providing one!
--
Nick
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: custom link export and ox-md
2014-02-24 5:00 ` Nick Dokos
@ 2014-02-24 19:37 ` Nick Dokos
2014-02-25 17:20 ` Nicolas Goaziou
0 siblings, 1 reply; 5+ messages in thread
From: Nick Dokos @ 2014-02-24 19:37 UTC (permalink / raw)
To: emacs-orgmode
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 <ndokos@redhat.com>
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
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: custom link export and ox-md
2014-02-24 19:37 ` Nick Dokos
@ 2014-02-25 17:20 ` Nicolas Goaziou
2014-03-21 8:15 ` Bastien
0 siblings, 1 reply; 5+ messages in thread
From: Nicolas Goaziou @ 2014-02-25 17:20 UTC (permalink / raw)
To: Nick Dokos; +Cc: emacs-orgmode
Hello,
Nick Dokos <ndokos@gmail.com> writes:
> can you take a look at this patch?
Thank you for the patch. Here we go.
> If it looks OK, I can push it to maint.
Why maint? It isn't a bugfix.
> commit f820173bf514549134e8ba10bbbba1e539cb89f6
> Author: Nick Dokos <ndokos@redhat.com>
> 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)))
I'd rather not bind RAW-PATH here, as only half the branches in the
`cond' are using it. Also, I think it is clearer to mostly do bindings
close to the areas where they are needed.
> - (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)))
See above.
> - (let ((ref (org-element-property :path link)))
> + (let ((ref raw-path))
If you want to go further, you could even remove REF, but, see above.
> - (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))
> +
This raises an interesting question. What do we do with derived
back-ends? E.g., what should happen if TYPE is handled in
`org-link-protocols' for `html' but not `md'?
Also the blank line is not needed.
Regards,
--
Nicolas Goaziou
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: custom link export and ox-md
2014-02-25 17:20 ` Nicolas Goaziou
@ 2014-03-21 8:15 ` Bastien
0 siblings, 0 replies; 5+ messages in thread
From: Bastien @ 2014-03-21 8:15 UTC (permalink / raw)
To: Nicolas Goaziou; +Cc: Nick Dokos, emacs-orgmode
Hi Nick and Nicolas,
can we move forward on this patch? It is good, modulo Nicolas
suggestions, which seems good to me.
> This raises an interesting question. What do we do with derived
> back-ends? E.g., what should happen if TYPE is handled in
> `org-link-protocols' for `html' but not `md'?
I'm not sure I understand the problem, but I guess it can be fixed
separately from the issue addressed by the patch.
Anyway, yes, this would go to master, as a small enhancement.
Thanks,
--
Bastien
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-03-21 8:15 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-02-24 2:12 custom link export and ox-md John Peloquin
2014-02-24 5:00 ` Nick Dokos
2014-02-24 19:37 ` Nick Dokos
2014-02-25 17:20 ` Nicolas Goaziou
2014-03-21 8:15 ` Bastien
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).