emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [Orgmode] Links with description and '%3f' in URL fail


From: Carsten Dominik
Subject: Re: [Orgmode] Links with description and '%3f' in URL fail
Date: Thu, 4 Mar 2010 21:51:42 +0100

Hi Sebastian,

could you please try if the following patch does solve this issue?

Thanks.

- Carsten

diff --git a/lisp/org.el b/lisp/org.el
index 85b74fa..59d2acf 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -7950,12 +7950,14 @@ This is the list that is used before handing over to the browser.")
       (url-unhex-string text)
     (setq table (or table org-link-escape-chars))
     (when text
-      (let ((re (mapconcat (lambda (x) (regexp-quote (cdr x)))
+      (let ((case-fold-search t)
+           (re (mapconcat (lambda (x) (regexp-quote (downcase (cdr x))))
                           table "\\|")))
        (while (string-match re text)
          (setq text
                (replace-match
-                (char-to-string (car (rassoc (match-string 0 text) table)))
+                (char-to-string (car (rassoc (upcase (match-string 0 text))
+                                             table)))
                 t t text)))
        text))))




On Mar 4, 2010, at 5:06 PM, Sebastien Delafond wrote:

Quoting from debian bug report #572404[0]:

 This error is quite esoteric.  Creating a link with a '%3f' escape
 sequence in its URL (at least HTTP ones) makes it fail to be edited
 with C-c C-l and exported with the error:

   org-link-unescape: Wrong type argument: characterp, nil

 But only if the link has a description.  Other escape sequences like
'%3e' or '%40' or even the literal '?' corresponding to character 0x3f
 don't trigger the error.  For instance:

 - http://www.example.com/x%3fx  doesn't trigger the error
 - [[http://www.example.com/x%3fx][test]]  triggers the error
 - [[http://www.example.com/x%3ex][test]]  doesn't trigger the error
 - [[http://www.example.com/x?x][test]]  doesn't trigger the error

 Even more strange, while '%3f' reveals the error, '%3F' does not.  I
 guess the ``org-link-unescape`` function has some serious problems
 with the handling of '?': when using '%3F' in an HTTP URL, it is
unescaped when exported to HTML, resulting most of the time in invalid URLs, since the '?' character separates the path from query arguments.

For instance, in "http://x.org/what%3F"; the '%3F' should be left as is
 instead of being exported as "http://x.org/what?";.  In
 "http://x.org/query?foo=bar";, the '?' should also be left as is.

 Here it's better to trust the user and leave URLs untouched than
 trying to be too smart.

It at least sounds a like strange that it'd behave diffrently depending
on whether or not there is a description alongside the link...

Cheers,

--Seb

[0] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=572404



_______________________________________________
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
address@hidden
http://lists.gnu.org/mailman/listinfo/emacs-orgmode

- Carsten







reply via email to

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