diff options
author | Michael Brand <michael.ch.brand@gmail.com> | 2013-10-05 15:00:25 +0200 |
---|---|---|
committer | Carsten Dominik <carsten.dominik@gmail.com> | 2013-10-17 06:59:00 +0200 |
commit | e04a22ed2d66726dae5c26f89268eedc3082c894 (patch) | |
tree | f7de3d8f31d20381cb0f85e22cb249f2fe1ef840 | |
parent | 4bf9a53cde29b6024062d5d7ab63eb5ac199ee0e (diff) | |
download | org-mode-e04a22ed2d66726dae5c26f89268eedc3082c894.tar.gz |
Small improvement of maintainability of link escaping
* lisp/org.el (org-link-escape-chars): Add comment with escape numbers
alphabetically ordered.
(org-link-escape-chars-browser): Add comment with escape numbers.
(org-link-escape): Use better readable char constant instead of number
constant for percent char.
(org-link-escape-browser): New function to substitute duplicate source
code.
(org-open-at-point): Substitute duplicate source code.
* testing/README: Make comment in source code example clearer.
* testing/lisp/test-org.el (test-org/org-link-escape-chars-browser):
Change URL to real use case and use the new function
`org-link-escape-browser'.
-rw-r--r-- | lisp/org.el | 32 | ||||
-rw-r--r-- | testing/README | 4 | ||||
-rw-r--r-- | testing/lisp/test-org.el | 8 |
3 files changed, 21 insertions, 23 deletions
diff --git a/lisp/org.el b/lisp/org.el index 5ff9969..9149441 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -9732,11 +9732,13 @@ according to FMT (default from `org-email-link-description-format')." "]")) (defconst org-link-escape-chars - '(?\ ?\[ ?\] ?\; ?\= ?\+) + ;;%20 %2B %3B %3D %5B %5D + '(?\ ?\+ ?\; ?\= ?\[ ?\]) "List of characters that should be escaped in link. This is the list that is used for internal purposes.") (defconst org-link-escape-chars-browser + ;;%20 %22 '(?\ ?\") "List of escapes for characters that are problematic in links. This is the list that is used before handing over to the browser.") @@ -9758,7 +9760,7 @@ If optional argument MERGE is set, merge TABLE into (mapconcat (lambda (char) (if (or (member char table) - (and (or (< char 32) (= char 37) (> char 126)) + (and (or (< char 32) (= char ?\%) (> char 126)) org-url-hexify-p)) (mapconcat (lambda (sequence-element) (format "%%%.2X" sequence-element)) @@ -9767,6 +9769,13 @@ If optional argument MERGE is set, merge TABLE into (char-to-string char))) "") (char-to-string char))) text "")) +(defun org-link-escape-browser (text) + (if (org-string-match-p + (concat "[[:nonascii:]" org-link-escape-chars-browser "]") + text) + (org-link-escape text org-link-escape-chars-browser) + text)) + (defun org-link-unescape (str) "Unhex hexified Unicode strings as returned from the JavaScript function encodeURIComponent. E.g. `%C3%B6' is the german o-Umlaut." @@ -10467,24 +10476,11 @@ application the system uses for this file type." (apply cmd (nreverse args1)))) ((member type '("http" "https" "ftp" "news")) - (browse-url - (concat type ":" - (if (org-string-match-p - (concat "[[:nonascii:]" - org-link-escape-chars-browser "]") - path) - (org-link-escape path org-link-escape-chars-browser) - path)))) + (browse-url (concat type ":" (org-link-escape-browser path)))) ((string= type "doi") - (browse-url - (concat org-doi-server-url - (if (org-string-match-p - (concat "[[:nonascii:]" - org-link-escape-chars-browser "]") - path) - (org-link-escape path org-link-escape-chars-browser) - path)))) + (browse-url (concat org-doi-server-url + (org-link-escape-browser path)))) ((member type '("message")) (browse-url (concat type ":" path))) diff --git a/testing/README b/testing/README index 9601ea7..e25a109 100644 --- a/testing/README +++ b/testing/README @@ -64,9 +64,9 @@ load and run the test suite with the following commands. Use this as a demo example of a failing test #+BEGIN_SRC emacs-lisp (ert-deftest test-org/org-link-escape-ascii-character-demo-of-fail () - (should (string= "%5B" ;; expected is right + (should (string= "%5B" ;; expecting %5B is right (org-link-escape "["))) - (should (string= "%5C" ;; expected is wrong, "%5D" would be right + (should (string= "%5C" ;; expecting %5C is wrong, %5D right (org-link-escape "]")))) #+END_SRC or evaluate the ert-deftest form of the test you want to run. Then diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el index b6c5558..32fa69e 100644 --- a/testing/lisp/test-org.el +++ b/testing/lisp/test-org.el @@ -524,9 +524,11 @@ http://article.gmane.org/gmane.emacs.orgmode/21459/" "Escape a URL to pass to `browse-url'." (should (string= - "http://some.host.com/search?q=%22Org%20mode%22" - (org-link-escape "http://some.host.com/search?q=\"Org mode\"" - org-link-escape-chars-browser)))) + (concat "http://lists.gnu.org/archive/cgi-bin/namazu.cgi?query=" + "%22Release%208.2%22&idxname=emacs-orgmode") + (org-link-escape-browser + (concat "http://lists.gnu.org/archive/cgi-bin/namazu.cgi?query=" + "\"Release 8.2\"&idxname=emacs-orgmode"))))) |