emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Bug: HTML Export doesn't handle internal link with spaces [8.0.7 (8.0.7-6-g13cb28-elpa @ /home/jbalint/.emacs.d/elpa/org-20130812/)]
@ 2013-12-16 20:48 Jess Balint
  2013-12-20 21:47 ` Nicolas Goaziou
  0 siblings, 1 reply; 9+ messages in thread
From: Jess Balint @ 2013-12-16 20:48 UTC (permalink / raw)
  To: emacs-orgmode


Remember to cover the basics, that is, what you expected to happen and
what in fact did happen.  You don't know how to make a good report?  See

     http://orgmode.org/manual/Feedback.html#Feedback

Your bug report will be posted to the Org-mode mailing list.
------------------------------------------------------------------------

I've generated a link to a headline with `org-store-link' and
`org-insert-link'. It's rendered into the Org file like so:

  [[*Headline%20with%Spaces][Headline with Spaces]]

The HTML export renders this as an italic string (the last cond in the org-html-link function).

The HTML exporter gets a "fuzzy" link which is handled in this block:

     ;; Links pointing to a headline: Find destination and build
     ;; appropriate referencing command.
     ((member type '("custom-id" "fuzzy" "id"))
      (let ((destination (if (string= type "fuzzy")
			     (org-export-resolve-fuzzy-link link info)
			   (org-export-resolve-id-link link info))))

The problem is in `org-export-resolve-fuzzy-link' which get's the path
directly from the link:

  (let* ((raw-path (org-element-property :path link))

But at this point it has "%20" in it which causes a problem when
splitting it:

     ;; Split PATH at white spaces so matches are space
     ;; insensitive.
     (path (org-split-string
        (if match-title-p (substring raw-path 1) raw-path)))

This does nothing because there are no spaces in the string (they are
%20 here). The search for a headline matching this fails. I can solve
this here by doing:

	 ;; Split PATH at white spaces so matches are space
	 ;; insensitive.
	 (path (org-split-string
			(replace-regexp-in-string "%20" " "
		(if match-title-p (substring raw-path 1) raw-path))))

I'm not it's the proper solution though. Thanks.
Jess

Emacs  : GNU Emacs 24.3.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.8.2)
 of 2013-08-06 on -mnt-storage-buildroots-staging-x86_64-eric
Package: Org-mode version 8.0.7 (8.0.7-6-g13cb28-elpa @ /home/jbalint/.emacs.d/elpa/org-20130812/)

current state:
==============
(setq
 org-tab-first-hook '(org-hide-block-toggle-maybe
					  org-src-native-tab-command-maybe
					  org-babel-hide-result-toggle-maybe
					  org-babel-header-arg-expand)
 org-speed-command-hook '(org-speed-command-default-hook
						  org-babel-speed-command-hook)
 org-occur-hook '(org-first-headline-recenter)
 org-metaup-hook '(org-babel-load-in-session-maybe)
 org-log-done 'time
 org-confirm-shell-link-function 'yes-or-no-p
 org-latex-format-headline-function 'org-latex-format-headline-default-function
 org-default-notes-file "~/Dropbox/important/org/notes.org"
 org-after-todo-state-change-hook '(org-clock-out-if-current)
 org-src-mode-hook '(org-src-babel-configure-edit-buffer
					 org-src-mode-configure-edit-buffer)
 org-agenda-before-write-hook '(org-agenda-add-entry-text)
 org-babel-pre-tangle-hook '(save-buffer)
 org-mode-hook '(#[nil "\300\301\302\303\304$\207"
				   [org-add-hook change-major-mode-hook
					org-show-block-all append local]
				   5]
				 #[nil "\300\301\302\303\304$\207"
				   [org-add-hook change-major-mode-hook
					org-babel-show-result-all append local]
				   5]
				 org-babel-result-hide-spec org-babel-hide-all-hashes
				 (lambda nil (local-set-key "\x03a" (quote org-agenda))
				  (local-unset-key "\x03\x0f")
				  (local-set-key "\x03\x0f"
				   (function
					(lambda nil (interactive)
					 (if (oracle-elem-open) nil (org-open-at-point)))
					)
				   )
				  (org-babel-do-load-languages
				   (quote org-babel-load-languages) (quote ((ditaa . t))))
				  )
				 )
 org-ctrl-c-ctrl-c-hook '(org-babel-hash-at-point
						  org-babel-execute-safely-maybe)
 org-directory "~/Dropbox/important/org"
 org-cycle-hook '(org-cycle-hide-archived-subtrees org-cycle-hide-drawers
				  org-cycle-hide-inline-tasks org-cycle-show-empty-lines
				  org-optimize-window-after-visibility-change)
 org-todo-keywords '((sequence "TODO" "|" "DONE")
					 (sequence "|" "WAITING") (sequence "|" "CANCELED"))
 org-confirm-elisp-link-function 'yes-or-no-p
 org-metadown-hook '(org-babel-pop-to-session-maybe)
 org-babel-load-languages '((ditaa . t))
 org-agenda-files '("~/Dropbox/important/org"
					"~/Dropbox/important/org/oracle_work_log"
					"~/Dropbox/important/org/notes")
 org-clock-out-hook '(org-clock-remove-empty-clock-drawer)
 org-confirm-babel-evaluate 'my-org-confirm-babel-evaluate
 org-src-fontify-natively t
 )

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Bug: HTML Export doesn't handle internal link with spaces [8.0.7 (8.0.7-6-g13cb28-elpa @ /home/jbalint/.emacs.d/elpa/org-20130812/)]
  2013-12-16 20:48 Bug: HTML Export doesn't handle internal link with spaces [8.0.7 (8.0.7-6-g13cb28-elpa @ /home/jbalint/.emacs.d/elpa/org-20130812/)] Jess Balint
@ 2013-12-20 21:47 ` Nicolas Goaziou
  2014-01-03 14:48   ` Bastien
  0 siblings, 1 reply; 9+ messages in thread
From: Nicolas Goaziou @ 2013-12-20 21:47 UTC (permalink / raw)
  To: Jess Balint; +Cc: emacs-orgmode

Hello,

Jess Balint <jbalint@gmail.com> writes:

> I've generated a link to a headline with `org-store-link' and
> `org-insert-link'. It's rendered into the Org file like so:
>
>   [[*Headline%20with%Spaces][Headline with Spaces]]
>

[...]

> The problem is in `org-export-resolve-fuzzy-link' which get's the path
> directly from the link:
>
>   (let* ((raw-path (org-element-property :path link))
>
> But at this point it has "%20" in it which causes a problem when
> splitting it:
>
>      ;; Split PATH at white spaces so matches are space
>      ;; insensitive.
>      (path (org-split-string
>         (if match-title-p (substring raw-path 1) raw-path)))
>

Thank you for the report.

This bug exists because `org-insert-link' blindly url-hexifies links,
but nothing will unhexify it before it reaches an export back-end.

This is difficult to solve, because if you unhexify it, the very same
bug will occur on the other side (i.e. links you paste without using
`org-insert-link', which you don't want to unhexify).

IMO, `org-insert-link' shouldn't hexify links in all situations (if at
all).

Anyway, I can't think of any satisfactory solution at the moment.


Regards,

-- 
Nicolas Goaziou

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Bug: HTML Export doesn't handle internal link with spaces [8.0.7 (8.0.7-6-g13cb28-elpa @ /home/jbalint/.emacs.d/elpa/org-20130812/)]
  2013-12-20 21:47 ` Nicolas Goaziou
@ 2014-01-03 14:48   ` Bastien
  2014-01-03 15:05     ` Nicolas Goaziou
  0 siblings, 1 reply; 9+ messages in thread
From: Bastien @ 2014-01-03 14:48 UTC (permalink / raw)
  To: Nicolas Goaziou; +Cc: emacs-orgmode, Jess Balint

[-- Attachment #1: Type: text/plain, Size: 485 bytes --]

Nicolas Goaziou <n.goaziou@gmail.com> writes:

> IMO, `org-insert-link' shouldn't hexify links in all situations (if at
> all).

Agreed.

We can first narrow the set of url-hexified links to those matching
`org-link-types-re' (http://, ftp://.)

> Anyway, I can't think of any satisfactory solution at the moment.

See patch.

Of course, there will still be some false positives, because
`org-link-types-re' comprises custom link types, but this is
a step in the right direction IMO.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: org-don't-url-hexify-all-links.patch --]
[-- Type: text/x-diff, Size: 720 bytes --]

diff --git a/lisp/org.el b/lisp/org.el
index f7a038e..20e6e33 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -9793,11 +9793,10 @@ according to FMT (default from `org-email-link-description-format')."
 	     (not (equal link (org-link-escape link))))
     (setq description (org-extract-attributes link)))
   (setq link
-	(cond ((string-match (org-image-file-name-regexp) link) link)
-	      ((string-match org-link-types-re link)
+	(cond ((string-match org-link-types-re link)
 	       (concat (match-string 1 link)
 		       (org-link-escape (substring link (match-end 1)))))
-	      (t (org-link-escape link))))
+	      (t link)))
   (concat "[[" link "]"
 	  (if description (concat "[" description "]") "")
 	  "]"))

[-- Attachment #3: Type: text/plain, Size: 14 bytes --]


-- 
 Bastien

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: Bug: HTML Export doesn't handle internal link with spaces [8.0.7 (8.0.7-6-g13cb28-elpa @ /home/jbalint/.emacs.d/elpa/org-20130812/)]
  2014-01-03 14:48   ` Bastien
@ 2014-01-03 15:05     ` Nicolas Goaziou
  2014-01-04 14:35       ` Bastien
  0 siblings, 1 reply; 9+ messages in thread
From: Nicolas Goaziou @ 2014-01-03 15:05 UTC (permalink / raw)
  To: Bastien; +Cc: Jess Balint, emacs-orgmode

Hello,

Bastien <bzg@gnu.org> writes:

> See patch.
>
> Of course, there will still be some false positives, because
> `org-link-types-re' comprises custom link types, but this is
> a step in the right direction IMO.

Also, I think there will be a problem if an internal link contains
brackets. E.g, how to create an internal link to the following headline?

 * Some [headline]

Anyway, I agree this is a step in the right direction.


Regards,

-- 
Nicolas Goaziou

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Bug: HTML Export doesn't handle internal link with spaces [8.0.7 (8.0.7-6-g13cb28-elpa @ /home/jbalint/.emacs.d/elpa/org-20130812/)]
  2014-01-03 15:05     ` Nicolas Goaziou
@ 2014-01-04 14:35       ` Bastien
  2014-01-05  0:03         ` Nicolas Goaziou
  0 siblings, 1 reply; 9+ messages in thread
From: Bastien @ 2014-01-04 14:35 UTC (permalink / raw)
  To: Nicolas Goaziou; +Cc: emacs-orgmode, Jess Balint

Hi Nicolas,

Nicolas Goaziou <n.goaziou@gmail.com> writes:

> Also, I think there will be a problem if an internal link contains
> brackets. E.g, how to create an internal link to the following headline?
>
>  * Some [headline]

Maybe we can just escape square brackets for such internal links.
At least this would solve the OP problem.

Let me know if you can think of other side-effect this change would
have.

-- 
 Bastien

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Bug: HTML Export doesn't handle internal link with spaces [8.0.7 (8.0.7-6-g13cb28-elpa @ /home/jbalint/.emacs.d/elpa/org-20130812/)]
  2014-01-04 14:35       ` Bastien
@ 2014-01-05  0:03         ` Nicolas Goaziou
  2014-01-05  6:45           ` Bastien
  0 siblings, 1 reply; 9+ messages in thread
From: Nicolas Goaziou @ 2014-01-05  0:03 UTC (permalink / raw)
  To: Bastien; +Cc: Jess Balint, emacs-orgmode

Hello,

Bastien <bzg@gnu.org> writes:

> Nicolas Goaziou <n.goaziou@gmail.com> writes:
>
>> Also, I think there will be a problem if an internal link contains
>> brackets. E.g, how to create an internal link to the following headline?
>>
>>  * Some [headline]
>
> Maybe we can just escape square brackets for such internal links.
> At least this would solve the OP problem.

I'm not sure to understand. IIUC, one reason for url-hexification is to
avoid forbidden characters in Org links, i.e., Org hexifies links to
escape characters like brackets.

Do you mean using another escape mechanism? If so, I think the problem
would be the same as before (impossible to know if link at point was
escaped or not in the first place).

Another idea would be to get rid of automatic hexification in all cases,
and have more tolerant regexps for links.


Regards,

-- 
Nicolas Goaziou

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Bug: HTML Export doesn't handle internal link with spaces [8.0.7 (8.0.7-6-g13cb28-elpa @ /home/jbalint/.emacs.d/elpa/org-20130812/)]
  2014-01-05  0:03         ` Nicolas Goaziou
@ 2014-01-05  6:45           ` Bastien
  2014-01-06 11:32             ` Nicolas Goaziou
  0 siblings, 1 reply; 9+ messages in thread
From: Bastien @ 2014-01-05  6:45 UTC (permalink / raw)
  To: Nicolas Goaziou; +Cc: emacs-orgmode, Jess Balint

Nicolas Goaziou <n.goaziou@gmail.com> writes:

> I'm not sure to understand. IIUC, one reason for url-hexification is to
> avoid forbidden characters in Org links, i.e., Org hexifies links to
> escape characters like brackets.
>
> Do you mean using another escape mechanism?

No, I mean to url-hexify URLs that correspond to a link type (through
org-link-types) and for internal links, to escape only [ and ], which
are the only two problematic characters (aren't they?)

> If so, I think the problem
> would be the same as before (impossible to know if link at point was
> escaped or not in the first place).

Yes...

> Another idea would be to get rid of automatic hexification in all cases,
> and have more tolerant regexps for links.

This seems incertain.

Or maybe we can just live with the current problem.

-- 
 Bastien

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Bug: HTML Export doesn't handle internal link with spaces [8.0.7 (8.0.7-6-g13cb28-elpa @ /home/jbalint/.emacs.d/elpa/org-20130812/)]
  2014-01-05  6:45           ` Bastien
@ 2014-01-06 11:32             ` Nicolas Goaziou
  2014-01-06 16:36               ` Bastien
  0 siblings, 1 reply; 9+ messages in thread
From: Nicolas Goaziou @ 2014-01-06 11:32 UTC (permalink / raw)
  To: Bastien; +Cc: emacs-orgmode, Jess Balint

Bastien <bzg@gnu.org> writes:

>> Another idea would be to get rid of automatic hexification in all cases,
>> and have more tolerant regexps for links.
>
> This seems incertain.

How so? Accepting balanced pairs of square brackets is better than no
closing square bracket at all.

> Or maybe we can just live with the current problem.

Probably, yes. But I have the feeling we encounter the problem again.


Regards,

-- 
Nicolas Goaziou

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Bug: HTML Export doesn't handle internal link with spaces [8.0.7 (8.0.7-6-g13cb28-elpa @ /home/jbalint/.emacs.d/elpa/org-20130812/)]
  2014-01-06 11:32             ` Nicolas Goaziou
@ 2014-01-06 16:36               ` Bastien
  0 siblings, 0 replies; 9+ messages in thread
From: Bastien @ 2014-01-06 16:36 UTC (permalink / raw)
  To: Nicolas Goaziou; +Cc: Jess Balint, emacs-orgmode

Nicolas Goaziou <n.goaziou@gmail.com> writes:

> Bastien <bzg@gnu.org> writes:
>
>>> Another idea would be to get rid of automatic hexification in all cases,
>>> and have more tolerant regexps for links.
>>
>> This seems incertain.
>
> How so? Accepting balanced pairs of square brackets is better than no
> closing square bracket at all.

Well, I let you try this, but my guess it that the cost in terms of
regexp complexity (especially for the "balanced" aspects) will be a
bit too high.

-- 
 Bastien

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2014-01-06 16:37 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-12-16 20:48 Bug: HTML Export doesn't handle internal link with spaces [8.0.7 (8.0.7-6-g13cb28-elpa @ /home/jbalint/.emacs.d/elpa/org-20130812/)] Jess Balint
2013-12-20 21:47 ` Nicolas Goaziou
2014-01-03 14:48   ` Bastien
2014-01-03 15:05     ` Nicolas Goaziou
2014-01-04 14:35       ` Bastien
2014-01-05  0:03         ` Nicolas Goaziou
2014-01-05  6:45           ` Bastien
2014-01-06 11:32             ` Nicolas Goaziou
2014-01-06 16:36               ` 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).