Selaa lähdekoodia

Merge branch 'master' of orgmode.org:org-mode

Bastien Guerry 10 vuotta sitten
vanhempi
commit
16e21ae1f7
2 muutettua tiedostoa jossa 23 lisäystä ja 14 poistoa
  1. 9 5
      lisp/org-element.el
  2. 14 9
      testing/lisp/test-org-element.el

+ 9 - 5
lisp/org-element.el

@@ -3012,16 +3012,20 @@ Assume point is at the beginning of the link."
 	(cond
 	 ;; File type.
 	 ((or (file-name-absolute-p raw-link)
-	      (string-match "^\\.\\.?/" raw-link))
+	      (string-match "\\`\\.\\.?/" raw-link))
 	  (setq type "file" path raw-link))
 	 ;; Explicit type (http, irc, bbdb...).  See `org-link-types'.
-	 ((string-match org-link-re-with-space3 raw-link)
-	  (setq type (match-string 1 raw-link) path (match-string 2 raw-link)))
+	 ((string-match org-link-types-re raw-link)
+	  (setq type (match-string 1 raw-link)
+		;; According to RFC 3986, extra whitespace should be
+		;; ignored when a URI is extracted.
+		path (replace-regexp-in-string
+		      "[ \t]*\n[ \t]*" "" (substring raw-link (match-end 0)))))
 	 ;; Id type: PATH is the id.
-	 ((string-match "^id:\\([-a-f0-9]+\\)" raw-link)
+	 ((string-match "\\`id:\\([-a-f0-9]+\\)" raw-link)
 	  (setq type "id" path (match-string 1 raw-link)))
 	 ;; Code-ref type: PATH is the name of the reference.
-	 ((string-match "^(\\(.*\\))$" raw-link)
+	 ((string-match "\\`(\\(.*\\))\\'" raw-link)
 	  (setq type "coderef" path (match-string 1 raw-link)))
 	 ;; Custom-id type: PATH is the name of the custom id.
 	 ((= (aref raw-link 0) ?#)

+ 14 - 9
testing/lisp/test-org-element.el

@@ -1472,19 +1472,19 @@ e^{i\\pi}+1=0
     (org-test-with-temp-text "[[file:projects.org::*task title]]"
       (org-element-map (org-element-parse-buffer) 'link
 	(lambda (l) (list (org-element-property :type l)
-		     (org-element-property :path l)
-		     (org-element-property :search-option l)))))))
-  ;; ... file-type link with application.
+			  (org-element-property :path l)
+			  (org-element-property :search-option l)))))))
+  ;; ... file-type link with application...
   (should
    (equal
-    '(("file" "projects.org" "docview"))
+    '("file" "projects.org" "docview")
     (org-test-with-temp-text "[[docview:projects.org]]"
-      (org-element-map (org-element-parse-buffer) 'link
-	(lambda (l) (list (org-element-property :type l)
-		     (org-element-property :path l)
-		     (org-element-property :application l)))))))
+      (let ((l (org-element-context)))
+	(list (org-element-property :type l)
+	      (org-element-property :path l)
+	      (org-element-property :application l))))))
   ;; ... `:path' in a file-type link must be compatible with "file"
-  ;; scheme in URI syntax, even if Org syntax isn't.
+  ;; scheme in URI syntax, even if Org syntax isn't...
   (should
    (org-test-with-temp-text-in-file ""
      (let ((file (expand-file-name (buffer-file-name))))
@@ -1502,6 +1502,11 @@ e^{i\\pi}+1=0
      (let ((file (file-relative-name (buffer-file-name))))
        (insert (format "[[file:%s]]" file))
        (list (org-element-property :path (org-element-context)) file))))
+  ;; ... multi-line link.
+  (should
+   (equal "//orgmode.org"
+	  (org-test-with-temp-text "[[http://orgmode.\norg]]"
+	    (org-element-property :path (org-element-context)))))
   ;; Plain link.
   (should
    (org-test-with-temp-text "A link: http://orgmode.org"