Commit fd8a1815 authored by Nicolas Goaziou's avatar Nicolas Goaziou
Browse files

Fix file uri

* lisp/ox.el (org-export-file-uri): Properly expand file uri.

* lisp/org-element.el (org-element-link-parser): Start path with "//"
  when referring to a remote file.

* testing/lisp/test-ox.el (test-org-export/file-uri): Add test.

Reported-by: default avatarAW <>
parent e68bc78a
......@@ -3125,13 +3125,13 @@ Assume point is at the beginning of the link."
(when (string-match "::\\(.*\\)\\'" path)
(setq search-option (match-string 1 path))
(setq path (replace-match "" nil nil path)))
(setq path (replace-regexp-in-string "\\`/+" "/" path)))
(setq path (replace-regexp-in-string "\\`///+" "/" path)))
;; Translate link, if `org-link-translation-function' is set.
(let ((trans (and (functionp org-link-translation-function)
(funcall org-link-translation-function type path))))
(when trans
(setq type (car trans))
(setq path (cdr trans))))
(setq path (cdr trans))))
(list 'link
(list :type type
:path path
......@@ -4199,12 +4199,10 @@ has type \"radio\"."
(defun org-export-file-uri (filename)
"Return file URI associated to FILENAME."
(if (not (file-name-absolute-p filename)) filename
(concat "file:/"
(and (not (org-file-remote-p filename)) "/")
(if (org-string-match-p "\\`~" filename)
(expand-file-name filename)
(cond ((org-string-match-p "\\`//" filename) (concat "file:" filename))
((not (file-name-absolute-p filename)) filename)
((org-file-remote-p filename) (concat "file:/" filename))
(t (concat "file://" (expand-file-name filename)))))
;;;; For References
......@@ -2728,6 +2728,8 @@ Another text. (ref:text)
;; Remote files start with "file://"
(should (equal "file://myself@some.where:papers/last.pdf"
(org-export-file-uri "/myself@some.where:papers/last.pdf")))
(should (equal "file://localhost/etc/fstab"
(org-export-file-uri "//localhost/etc/fstab")))
;; Expand filename starting with "~".
(should (equal (org-export-file-uri "~/")
(concat "file://" (expand-file-name "~/")))))
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment