* Radio targets with mixed capitalisation do not work in HTML export @ 2014-03-02 17:24 Noah Slater 2014-03-17 2:02 ` Bastien 0 siblings, 1 reply; 25+ messages in thread From: Noah Slater @ 2014-03-02 17:24 UTC (permalink / raw) To: emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 273 bytes --] Experiencing a bug with radio targets and html export. IF set a radio target like <<<Foo>> then the text foo in the body will be linked to #foo, but the radio target has an anchor id of Foo, so the link doesn't work. I expected the foo text to be linked to #Foo instead. [-- Attachment #2: Type: text/html, Size: 375 bytes --] ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-02 17:24 Radio targets with mixed capitalisation do not work in HTML export Noah Slater @ 2014-03-17 2:02 ` Bastien 2014-03-17 10:11 ` Nicolas Goaziou 0 siblings, 1 reply; 25+ messages in thread From: Bastien @ 2014-03-17 2:02 UTC (permalink / raw) To: Noah Slater; +Cc: emacs-orgmode Hi Noah, Noah Slater <nslater@tumbolia.org> writes: > Experiencing a bug with radio targets and html export. > > IF set a radio target like <<<Foo>> then the text foo in the body > will be linked to #foo, but the radio target has an anchor id of Foo, > so the link doesn't work. > > I expected the foo text to be linked to #Foo instead. Indeed. This is now fixed in maint, please confirm when you have a moment. Nicolas, I modified the logic for radio link export in ox-html.el, ox-latex.el and ox-beamer.el. I also modified the use of the target instead of the path in ox-ascii.el. Can you review this change (http://orgmode.org/cgit.cgi/org-mode.git/commit/?id=d2e7b1b) and confirm it does the right thing? Thanks, -- Bastien ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-17 2:02 ` Bastien @ 2014-03-17 10:11 ` Nicolas Goaziou 2014-03-17 11:29 ` Bastien 0 siblings, 1 reply; 25+ messages in thread From: Nicolas Goaziou @ 2014-03-17 10:11 UTC (permalink / raw) To: Bastien; +Cc: Noah Slater, emacs-orgmode Hello, Bastien <bzg@gnu.org> writes: > Nicolas, I modified the logic for radio link export in ox-html.el, > ox-latex.el and ox-beamer.el. I also modified the use of the target > instead of the path in ox-ascii.el. Can you review this change > (http://orgmode.org/cgit.cgi/org-mode.git/commit/?id=d2e7b1b) and > confirm it does the right thing? Actually, even though it works if you test it on cases like: <<<Foo>>> foo it isn't right on more complex cases: <<<with \alpha>>> with \alpha As you can see, the logic is right in ox-latex.el, ox-html.el and ox-beamer.el. Anyway, I think the solution is to slightly change the parser to enforce case-insensitivity. Some additional properties need to be added in order to preserve original contents of both radio links and radio targets. I pushed such a change. Is it working as expected? Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-17 10:11 ` Nicolas Goaziou @ 2014-03-17 11:29 ` Bastien 2014-03-17 12:04 ` Bastien 2014-03-17 12:38 ` Nicolas Goaziou 0 siblings, 2 replies; 25+ messages in thread From: Bastien @ 2014-03-17 11:29 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Noah Slater, emacs-orgmode Hi Nicolas, thanks for looking into this. Nicolas Goaziou <n.goaziou@gmail.com> writes: > Actually, even though it works if you test it on cases like: > > <<<Foo>>> foo > > it isn't right on more complex cases: > > <<<with \alpha>>> with \alpha True. It is not right on simpler example too, with just spaces: ======================================================================== <<<Hello World>>> Let's say hello world to test. ======================================================================== It produces ======================================================================== <p> <a id="Hello-World">Hello World</a> </p> <p> Let's say <a href="#Hello World">hello-world</a> to test. </p> ======================================================================== > As you can see, the logic is right in ox-latex.el, ox-html.el and > ox-beamer.el. I don't get the logic: the output text has two parts: the target of the link, the description of the link. It the example above, the Target is "Hello World", and should be rewritten "Hello-World" to escape spaces. The description is "hello world" and should not be rewritten, it must appears the same way to the user. > Anyway, I think the solution is to slightly change the parser to enforce > case-insensitivity. I thought about this, but it does not solve the problem of displaying the target instead of the link description. > Some additional properties need to be added in order > to preserve original contents of both radio links and radio targets. > > I pushed such a change. Is it working as expected? Not for me: when "a word" is linked to a radio target, I expect to see "a word" in the output, linked to a #a-word id. When "another word" is linked to "Another Word", I expect to see "another word" in the output, linking to an anchor #Another-Word. If we do this, I don't see the need to enforce case sensitivity. -- Bastien ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-17 11:29 ` Bastien @ 2014-03-17 12:04 ` Bastien 2014-03-17 14:27 ` Nicolas Goaziou 2014-03-17 12:38 ` Nicolas Goaziou 1 sibling, 1 reply; 25+ messages in thread From: Bastien @ 2014-03-17 12:04 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Noah Slater, emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 1022 bytes --] Bastien <bzg@gnu.org> writes: > If we do this, I don't see the need to enforce case sensitivity. I attach a patch that illustrates the fix I propose on top on my previous commit. With this, ======================================================================== <<<Hello \alpha world>>> Let's say hello \alpha world to test. ======================================================================== gets converted into ======================================================================== <p> <a id="Hello-alpha-world">Hello α world</a> </p> <p> Let's say <a href="#Hello-alpha-world">hello α world</a> to test. </p> ======================================================================== which I think is what the OP expected. We preserve case sensitivity of the target, and we preserve the link description. (I think the confusion comes from calling "path" what is really the description when path and description are the same, like in a link to a radio target.) Let me know what you think, [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: fix-org-radio.patch --] [-- Type: text/x-diff, Size: 840 bytes --] diff --git a/lisp/ox-html.el b/lisp/ox-html.el index 4d6180d..0cacd57 100644 --- a/lisp/ox-html.el +++ b/lisp/ox-html.el @@ -2775,9 +2775,13 @@ INFO is a plist holding contextual information. See (let ((destination (org-export-resolve-radio-link link info))) (when destination (format "<a href=\"#%s\"%s>%s</a>" - (org-export-data (org-element-contents destination) info) + (org-export-solidify-link-text + (org-export-data (org-element-contents destination) info)) attributes - (org-export-solidify-link-text path))))) + (org-export-data + (org-element-parse-secondary-string + path + (org-element-restriction 'paragraph)) info))))) ;; Links pointing to a headline: Find destination and build ;; appropriate referencing command. ((member type '("custom-id" "fuzzy" "id")) [-- Attachment #3: Type: text/plain, Size: 14 bytes --] -- Bastien ^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-17 12:04 ` Bastien @ 2014-03-17 14:27 ` Nicolas Goaziou 2014-03-17 15:50 ` Bastien 0 siblings, 1 reply; 25+ messages in thread From: Nicolas Goaziou @ 2014-03-17 14:27 UTC (permalink / raw) To: Bastien; +Cc: Noah Slater, emacs-orgmode Bastien <bzg@gnu.org> writes: > Bastien <bzg@gnu.org> writes: > >> If we do this, I don't see the need to enforce case sensitivity. > > I attach a patch that illustrates the fix I propose on top on my > previous commit. I somehow missed this message. > With this, > > ======================================================================== > <<<Hello \alpha world>>> > > Let's say hello \alpha world to test. > ======================================================================== > > gets converted into > > ======================================================================== > <p> > <a id="Hello-alpha-world">Hello α world</a> > </p> > > <p> > Let's say <a href="#Hello-alpha-world">hello α world</a> to test. > </p> > ======================================================================== > > which I think is what the OP expected. We preserve case sensitivity > of the target, and we preserve the link description. Indeed, downcasing value is not necessary in this case. > (I think the confusion comes from calling "path" what is really the > description when path and description are the same, like in a link > to a radio target.) path is always a string. Description is always parsed (and transcoded already). In the most simple cases, they are equals. > Let me know what you think, It could work if we revert 5174495 and b4ffae0 and propagate the changes to "ox-latex.el", "ox-beamer.el" and "ox-ascii.el". Though, there is still a problem to consider. See below. > diff --git a/lisp/ox-html.el b/lisp/ox-html.el > index 4d6180d..0cacd57 100644 > --- a/lisp/ox-html.el > +++ b/lisp/ox-html.el > @@ -2775,9 +2775,13 @@ INFO is a plist holding contextual information. See > (let ((destination (org-export-resolve-radio-link link info))) > (when destination > (format "<a href=\"#%s\"%s>%s</a>" > - (org-export-data (org-element-contents destination) info) > + (org-export-solidify-link-text > + (org-export-data (org-element-contents destination) info)) It should be (org-export-solidify-link-text (org-element-property :value destination)) See `org-html-radio-target'. > - (org-export-solidify-link-text path))))) > + (org-export-data > + (org-element-parse-secondary-string > + path > + (org-element-restriction 'paragraph)) info))))) It should be: (org-element-restriction 'radio-target) Anyway, this raises a question. 5174495 adds contents to radio links (and, because of this, introduces an infloop in `org-element-context' on master, but that's another story). Your change parses link's contents on the fly. So this is mostly equivalent, albeit more verbose in all exporters. So the question is : should we consider a radio-link as a link with a description, which would basically be its parsed path? I think it is useful because its contents can differ from its relative radio-target, due to case-insensitivity. Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-17 14:27 ` Nicolas Goaziou @ 2014-03-17 15:50 ` Bastien 2014-03-20 21:58 ` Bastien 0 siblings, 1 reply; 25+ messages in thread From: Bastien @ 2014-03-17 15:50 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Noah Slater, emacs-orgmode Hi Nicolas, Nicolas Goaziou <n.goaziou@gmail.com> writes: > path is always a string. Description is always parsed (and transcoded > already). In the most simple cases, they are equals. I found out I have to parse the path because "hello \alpha" would not be exported correctly otherwise. (But I agree this is a corner case.) > 5174495 adds contents to radio links (and, because of this, introduces > an infloop in `org-element-context' on master, but that's another > story). Your change parses link's contents on the fly. So this is mostly > equivalent, albeit more verbose in all exporters. Yes, I parsed the link's contents on the fly just for the purpose of this small patch, but a general solution is better. > So the question is : should we consider a radio-link as a link with > a description, which would basically be its parsed path? I think so. > I think it is > useful because its contents can differ from its relative radio-target, > due to case-insensitivity. Indeed. Can you make the change (ie. radio-link is a link with a description, the description being its parsed path)? If so, do you want me to make the change in the backends or do you want to take care of this too? Thanks, -- Bastien ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-17 15:50 ` Bastien @ 2014-03-20 21:58 ` Bastien 2014-03-21 14:25 ` Nicolas Goaziou 0 siblings, 1 reply; 25+ messages in thread From: Bastien @ 2014-03-20 21:58 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Noah Slater, emacs-orgmode Hi Nicolas, Bastien <bzg@gnu.org> writes: > Can you make the change (ie. radio-link is a link with a description, > the description being its parsed path)? If so, do you want me to make > the change in the backends or do you want to take care of this too? I see you reverted related commits -- are you on this? It's one of the last thing I want to get fixed before we release Org 8.2.3. Thanks in advance, -- Bastien ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-20 21:58 ` Bastien @ 2014-03-21 14:25 ` Nicolas Goaziou 2014-03-21 14:30 ` Bastien 0 siblings, 1 reply; 25+ messages in thread From: Nicolas Goaziou @ 2014-03-21 14:25 UTC (permalink / raw) To: Bastien; +Cc: Noah Slater, emacs-orgmode Hello, Bastien <bzg@gnu.org> writes: > Bastien <bzg@gnu.org> writes: > >> Can you make the change (ie. radio-link is a link with a description, >> the description being its parsed path)? If so, do you want me to make >> the change in the backends or do you want to take care of this too? > > I see you reverted related commits -- are you on this? I reverted them because they introduced an infloop that I didn't have time to fix. I'm working on it, slowly. There are also a couple of problems related to radio targets that need to be fixed at the same time. For example, `org-make-target-link-regexp' generates a regexp enclosed within "\\<...\\>". Unfortunately, that will not match a radio link starting with an entity, e.g., <<<\alpha-test>>> \alpha-test. It is probably due to the fact that radio targets were initially meant to contain only plain text, not Org syntax. Anyway, I think it should be enclosed to something like "\\(?:\\W\\|^\\)..."\\(?:\\W\\|$\\)" instead. > It's one of the last thing I want to get fixed before we release Org > 8.2.3. If you don't mind, I need a bit more time (around a week) for 8.2.3. In particular, there are speed issues in `org-element-context' that I would like to fix first. Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-21 14:25 ` Nicolas Goaziou @ 2014-03-21 14:30 ` Bastien 2014-03-21 17:25 ` Nicolas Goaziou 2014-03-23 17:13 ` Nicolas Goaziou 0 siblings, 2 replies; 25+ messages in thread From: Bastien @ 2014-03-21 14:30 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Noah Slater, emacs-orgmode Hi Nicolas, Nicolas Goaziou <n.goaziou@gmail.com> writes: > For example, `org-make-target-link-regexp' generates a regexp enclosed > within "\\<...\\>". Unfortunately, that will not match a radio link > starting with an entity, e.g., <<<\alpha-test>>> \alpha-test. It is > probably due to the fact that radio targets were initially meant to > contain only plain text, not Org syntax. FWIW, I'd be fine to only allow plain text in radio targets, instead of the full syntax. Your take. >> It's one of the last thing I want to get fixed before we release Org >> 8.2.3. > > If you don't mind, I need a bit more time (around a week) for 8.2.3. In > particular, there are speed issues in `org-element-context' that I would > like to fix first. Sure -- there is absolutely no rush, and I have my own share of things I need to fix too, so let's no hurry at all. I was mentioning 8.2.3 because Stefan created the emacs-24 branch, which means that the move toward Emacs 24.4 is accelerating now, but there is no deadline that I'm aware of. Thanks again, -- Bastien ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-21 14:30 ` Bastien @ 2014-03-21 17:25 ` Nicolas Goaziou 2014-03-21 17:28 ` Bastien 2014-03-23 17:13 ` Nicolas Goaziou 1 sibling, 1 reply; 25+ messages in thread From: Nicolas Goaziou @ 2014-03-21 17:25 UTC (permalink / raw) To: Bastien; +Cc: Noah Slater, emacs-orgmode Bastien <bzg@gnu.org> writes: > FWIW, I'd be fine to only allow plain text in radio targets, instead > of the full syntax. Your take. It would probably make my life less miserable. But do radio target users need entities within? Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-21 17:25 ` Nicolas Goaziou @ 2014-03-21 17:28 ` Bastien 2014-03-21 18:47 ` Noah Slater 0 siblings, 1 reply; 25+ messages in thread From: Bastien @ 2014-03-21 17:28 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Noah Slater, emacs-orgmode Hi Nicolas, Nicolas Goaziou <n.goaziou@gmail.com> writes: > It would probably make my life less miserable. But do radio target users > need entities within? IMHO the best way to know is to open a new thread with [POLL] and a very clear subject like "[POLL] Do you need special entities in radio target?" 2 cents, -- Bastien ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-21 17:28 ` Bastien @ 2014-03-21 18:47 ` Noah Slater 2014-03-21 21:38 ` Bastien 0 siblings, 1 reply; 25+ messages in thread From: Noah Slater @ 2014-03-21 18:47 UTC (permalink / raw) To: Bastien; +Cc: emacs-orgmode, Nicolas Goaziou [-- Attachment #1: Type: text/plain, Size: 512 bytes --] Or perhaps to survey what is already out there. What are people already doing/trying to do? On 21 March 2014 18:28, Bastien <bzg@altern.org> wrote: > Hi Nicolas, > > Nicolas Goaziou <n.goaziou@gmail.com> writes: > > > It would probably make my life less miserable. But do radio target users > > need entities within? > > IMHO the best way to know is to open a new thread with [POLL] > and a very clear subject like > > "[POLL] Do you need special entities in radio target?" > > 2 cents, > > -- > Bastien > [-- Attachment #2: Type: text/html, Size: 1018 bytes --] ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-21 18:47 ` Noah Slater @ 2014-03-21 21:38 ` Bastien 0 siblings, 0 replies; 25+ messages in thread From: Bastien @ 2014-03-21 21:38 UTC (permalink / raw) To: Noah Slater; +Cc: Nicolas Goaziou, emacs-orgmode Noah Slater <nslater@tumbolia.org> writes: > Or perhaps to survey what is already out there. What are people > already doing/trying to do? I opened a different thread to make the poll more prominent. -- Bastien ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-21 14:30 ` Bastien 2014-03-21 17:25 ` Nicolas Goaziou @ 2014-03-23 17:13 ` Nicolas Goaziou 2014-03-23 17:26 ` Bastien 1 sibling, 1 reply; 25+ messages in thread From: Nicolas Goaziou @ 2014-03-23 17:13 UTC (permalink / raw) To: Bastien; +Cc: Noah Slater, emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 1208 bytes --] Hello, Bastien <bzg@gnu.org> writes: > Nicolas Goaziou <n.goaziou@gmail.com> writes: > >> For example, `org-make-target-link-regexp' generates a regexp enclosed >> within "\\<...\\>". Unfortunately, that will not match a radio link >> starting with an entity, e.g., <<<\alpha-test>>> \alpha-test. It is >> probably due to the fact that radio targets were initially meant to >> contain only plain text, not Org syntax. > > FWIW, I'd be fine to only allow plain text in radio targets, instead > of the full syntax. Your take. > >>> It's one of the last thing I want to get fixed before we release Org >>> 8.2.3. >> >> If you don't mind, I need a bit more time (around a week) for 8.2.3. In >> particular, there are speed issues in `org-element-context' that I would >> like to fix first. > > Sure -- there is absolutely no rush, and I have my own share of things > I need to fix too, so let's no hurry at all. I was mentioning 8.2.3 > because Stefan created the emacs-24 branch, which means that the move > toward Emacs 24.4 is accelerating now, but there is no deadline that > I'm aware of. Here are 3 patches (for maint) fixing radio-target behaviour. Feedback welcome. Regards, -- Nicolas Goaziou [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-Change-and-syntax-to-symbol.patch --] [-- Type: text/x-diff, Size: 1082 bytes --] From a55057e99d72241d039a1f8d57ced3cbb5dcb68d Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou <n.goaziou@gmail.com> Date: Sun, 23 Mar 2014 11:23:08 +0100 Subject: [PATCH 1/3] Change "\" and "~" syntax to symbol * lisp/org.el (org-mode): Change "\" and "~" characters syntax from `punctuation' to `symbol' so they are on par with other characters used in Org syntax (e.g., "/", "*"...). This change is needed to correctly find radio links starting with an entity: <<<\alpha-test>>> \alpha-test --- lisp/org.el | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lisp/org.el b/lisp/org.el index 70bf19e..56ae096 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -5341,6 +5341,8 @@ The following commands are available: ;; Modify a few syntax entries (modify-syntax-entry ?@ "w") (modify-syntax-entry ?\" "\"") + (modify-syntax-entry ?\\ "_") + (modify-syntax-entry ?~ "_") (if org-startup-truncated (setq truncate-lines t)) (when org-startup-indented (require 'org-indent) (org-indent-mode 1)) (org-set-local 'font-lock-unfontify-region-function -- 1.9.1 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #3: 0002-Fix-radio-target-parsing.patch --] [-- Type: text/x-diff, Size: 7191 bytes --] From 2f46aae4d602402f201c8d3291a985de374d7593 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou <n.goaziou@gmail.com> Date: Sun, 23 Mar 2014 11:28:26 +0100 Subject: [PATCH 2/3] Fix radio target parsing * lisp/org-element.el (org-element-all-successors, org-element-object-restrictions): Prioritize `link' over other successors in order to find radio links starting with another syntax object (e.g., an entity). Also allow text markup within radio targets. (org-element-link-parser): Add contents to radio targets. * lisp/org.el (org-make-target-link-regexp): Fix regexp so it can match targets starting with an Org object (i.e., an entity). (org-ctrl-c-ctrl-c): Fix function when applied on an object contained within a radio target. * testing/lisp/test-org-element.el (test-org-element/radio-target-parser): Add test. * testing/lisp/test-ox.el (test-org-export/resolve-radio-link): Add test. --- lisp/org-element.el | 19 +++++++++++-------- lisp/org.el | 10 ++++++---- testing/lisp/test-org-element.el | 15 +++++++++++---- testing/lisp/test-ox.el | 9 +++++++++ 4 files changed, 37 insertions(+), 16 deletions(-) diff --git a/lisp/org-element.el b/lisp/org-element.el index 9bb7944..9589714 100644 --- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -187,10 +187,10 @@ is not sufficient to know if point is at a paragraph ending. See "List of recursive element types aka Greater Elements.") (defconst org-element-all-successors - '(export-snippet footnote-reference inline-babel-call inline-src-block - latex-or-entity line-break link macro plain-link radio-target - statistics-cookie sub/superscript table-cell target - text-markup timestamp) + '(link export-snippet footnote-reference inline-babel-call + inline-src-block latex-or-entity line-break macro plain-link + radio-target statistics-cookie sub/superscript table-cell target + text-markup timestamp) "Complete list of successors.") (defconst org-element-object-successor-alist @@ -328,13 +328,13 @@ Don't modify it, set `org-element-affiliated-keywords' instead.") (paragraph ,@standard-set) ;; Remove any variable object from radio target as it would ;; prevent it from being properly recognized. - (radio-target latex-or-entity sub/superscript) + (radio-target latex-or-entity sub/superscript text-markup) (strike-through ,@standard-set) (subscript ,@standard-set) (superscript ,@standard-set) ;; Ignore inline babel call and inline src block as formulas are ;; possible. Also ignore line breaks and statistics cookies. - (table-cell export-snippet footnote-reference latex-or-entity link macro + (table-cell link export-snippet footnote-reference latex-or-entity macro radio-target sub/superscript target text-markup timestamp) (table-row table-cell) (underline ,@standard-set) @@ -346,7 +346,8 @@ a list of successors that will be called within an element or object of such type. For example, in a `radio-target' object, one can only find -entities, latex-fragments, subscript and superscript. +entities, latex-fragments, subscript, superscript and text +markup. This alist also applies to secondary string. For example, an `headline' type element doesn't directly contain objects, but @@ -3095,7 +3096,9 @@ Assume point is at the beginning of the link." ((and org-target-link-regexp (looking-at org-target-link-regexp)) (setq type "radio" link-end (match-end 0) - path (org-match-string-no-properties 0))) + path (org-match-string-no-properties 0) + contents-begin (match-beginning 0) + contents-end (match-end 0))) ;; Type 2: Standard link, i.e. [[http://orgmode.org][homepage]] ((looking-at org-bracket-link-regexp) (setq contents-begin (match-beginning 3) diff --git a/lisp/org.el b/lisp/org.el index 56ae096..6d6fbeb 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -6097,7 +6097,7 @@ The regular expression finds the targets also if there is a line break between words." (and targets (concat - "\\<\\(" + "\\_<\\(" (mapconcat (lambda (x) (setq x (regexp-quote x)) @@ -6106,7 +6106,7 @@ between words." x) targets "\\|") - "\\)\\>"))) + "\\)\\_>"))) (defun org-activate-tags (limit) (if (re-search-forward (org-re "^\\*+.*[ \t]\\(:[[:alnum:]_@#%:]+:\\)[ \r\n]") limit t) @@ -20262,13 +20262,15 @@ This command does many different things, depending on context: ;; When at a link, act according to the parent instead. (link (setq context (org-element-property :parent context)) (setq type (org-element-type context))) - ;; Unsupported object types: check parent element instead. + ;; Unsupported object types: refer to the first supported + ;; element or object containing it. ((bold code entity export-snippet inline-babel-call inline-src-block italic latex-fragment line-break macro strike-through subscript superscript underline verbatim) (while (and (setq context (org-element-property :parent context)) (not (memq (setq type (org-element-type context)) - '(paragraph verse-block table-cell))))))) + '(radio-target paragraph verse-block + table-cell))))))) ;; For convenience: at the first line of a paragraph on the ;; same line as an item, apply function on that item instead. (when (eq type 'paragraph) diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el index c65151e..9d00af9 100644 --- a/testing/lisp/test-org-element.el +++ b/testing/lisp/test-org-element.el @@ -1688,12 +1688,19 @@ Outside list" "Test `radio-target' parser." ;; Standard test. (should - (org-test-with-temp-text "<<<radio>>>" - (org-element-map (org-element-parse-buffer) 'radio-target 'identity))) + (eq 'radio-target + (org-test-with-temp-text "<<<radio>>>" + (org-element-type (org-element-context))))) ;; Radio targets with objects. (should - (org-test-with-temp-text "<<<radio \\alpha>>>" - (org-element-map (org-element-parse-buffer) 'radio-target 'identity)))) + (eq 'radio-target + (org-test-with-temp-text "<<<radio \\alpha>>>" + (org-element-type (org-element-context))))) + ;; Radio targets starting with an object. + (should + (eq 'radio-target + (org-test-with-temp-text "<<<\\alpha radio>>>" + (org-element-type (org-element-context)))))) ;;;; Section diff --git a/testing/lisp/test-ox.el b/testing/lisp/test-ox.el index f5572d3..759e7a1 100644 --- a/testing/lisp/test-ox.el +++ b/testing/lisp/test-ox.el @@ -1858,6 +1858,15 @@ Another text. (ref:text) (org-export-resolve-radio-link (org-element-map tree 'link 'identity info t) info)))) + ;; Radio target with objects at its beginning. + (should + (org-test-with-temp-text "<<<\\alpha radio>>> \\alpha radio" + (org-update-radio-target-regexp) + (let* ((tree (org-element-parse-buffer)) + (info `(:parse-tree ,tree))) + (org-export-resolve-radio-link + (org-element-map tree 'link 'identity info t) + info)))) ;; Multiple radio targets. (should (equal '("radio1" "radio2") -- 1.9.1 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #4: 0003-export-back-ends-Update-radio-target-export.patch --] [-- Type: text/x-diff, Size: 5926 bytes --] From 3a1c47e9d96b7c43abd9fba246c61dc757027d01 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou <n.goaziou@gmail.com> Date: Sun, 23 Mar 2014 18:04:22 +0100 Subject: [PATCH 3/3] export back-ends: Update radio target export * contrib/lisp/ox-groff.el (org-groff-link): * lisp/ox-ascii.el (org-ascii-link): * lisp/ox-beamer.el (org-beamer-link): * lisp/ox-html.el (org-html-link): * lisp/ox-latex.el (org-latex-link): * lisp/ox-md.el (org-md-link): * lisp/ox-odt.el (org-odt-link): Update radio target export according to recent changes. See 2f46aae4d602402f201c8d3291a985de374d7593. --- contrib/lisp/ox-groff.el | 3 ++- lisp/ox-ascii.el | 5 +---- lisp/ox-beamer.el | 5 +++-- lisp/ox-html.el | 6 +++--- lisp/ox-latex.el | 5 +++-- lisp/ox-md.el | 4 +--- lisp/ox-odt.el | 10 +++++----- 7 files changed, 18 insertions(+), 20 deletions(-) diff --git a/contrib/lisp/ox-groff.el b/contrib/lisp/ox-groff.el index 1141292..1990f87 100644 --- a/contrib/lisp/ox-groff.el +++ b/contrib/lisp/ox-groff.el @@ -1274,7 +1274,8 @@ INFO is a plist holding contextual information. See (let ((destination (org-export-resolve-radio-link link info))) (when destination (format "\\fI [%s] \\fP" - (org-export-solidify-link-text path))))) + (org-export-solidify-link-text + (org-element-property :value destination)))))) ;; Links pointing to a headline: find destination and build ;; appropriate referencing command. diff --git a/lisp/ox-ascii.el b/lisp/ox-ascii.el index e8f1b1f..11ce0c3 100644 --- a/lisp/ox-ascii.el +++ b/lisp/ox-ascii.el @@ -1387,10 +1387,7 @@ INFO is a plist holding contextual information." (org-export-resolve-coderef ref info)))) ;; Do not apply a special syntax on radio links. Though, use ;; transcoded target's contents as output. - ((string= type "radio") - (let ((destination (org-export-resolve-radio-link link info))) - (when destination - (org-export-data (org-element-contents destination) info)))) + ((string= type "radio") desc) ;; Do not apply a special syntax on fuzzy links pointing to ;; targets. ((string= type "fuzzy") diff --git a/lisp/ox-beamer.el b/lisp/ox-beamer.el index 3102b62..41de7a6 100644 --- a/lisp/ox-beamer.el +++ b/lisp/ox-beamer.el @@ -690,8 +690,9 @@ used as a communication channel." (when destination (format "\\hyperlink%s{%s}{%s}" (or (org-beamer--element-has-overlay-p link) "") - (org-export-solidify-link-text path) - (org-export-data (org-element-contents destination) info))))) + (org-export-solidify-link-text + (org-element-property :value destination)) + contents)))) ((and (member type '("custom-id" "fuzzy" "id")) (let ((destination (if (string= type "fuzzy") (org-export-resolve-fuzzy-link link info) diff --git a/lisp/ox-html.el b/lisp/ox-html.el index cabf2b6..c590d86 100644 --- a/lisp/ox-html.el +++ b/lisp/ox-html.el @@ -2721,9 +2721,9 @@ INFO is a plist holding contextual information. See (let ((destination (org-export-resolve-radio-link link info))) (when destination (format "<a href=\"#%s\"%s>%s</a>" - (org-export-solidify-link-text path) - attributes - (org-export-data (org-element-contents destination) info))))) + (org-export-solidify-link-text + (org-element-property :value destination)) + attributes desc)))) ;; Links pointing to a headline: Find destination and build ;; appropriate referencing command. ((member type '("custom-id" "fuzzy" "id")) diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el index 9421a93..00e941b 100644 --- a/lisp/ox-latex.el +++ b/lisp/ox-latex.el @@ -1813,8 +1813,9 @@ INFO is a plist holding contextual information. See (let ((destination (org-export-resolve-radio-link link info))) (when destination (format "\\hyperref[%s]{%s}" - (org-export-solidify-link-text path) - (org-export-data (org-element-contents destination) info))))) + (org-export-solidify-link-text + (org-element-property :value destination)) + desc)))) ;; Links pointing to a headline: Find destination and build ;; appropriate referencing command. ((member type '("custom-id" "fuzzy" "id")) diff --git a/lisp/ox-md.el b/lisp/ox-md.el index 39843d5..84e075d 100644 --- a/lisp/ox-md.el +++ b/lisp/ox-md.el @@ -307,9 +307,7 @@ a communication channel." (let ((ref (org-element-property :path link))) (format (org-export-get-coderef-format ref contents) (org-export-resolve-coderef ref info)))) - ((equal type "radio") - (let ((destination (org-export-resolve-radio-link link info))) - (org-export-data (org-element-contents destination) info))) + ((equal type "radio") contents) ((equal type "fuzzy") (let ((destination (org-export-resolve-fuzzy-link link info))) (if (org-string-nw-p contents) contents diff --git a/lisp/ox-odt.el b/lisp/ox-odt.el index 1e966fe..da2ca3f 100644 --- a/lisp/ox-odt.el +++ b/lisp/ox-odt.el @@ -2735,11 +2735,11 @@ INFO is a plist holding contextual information. See ((string= type "radio") (let ((destination (org-export-resolve-radio-link link info))) (when destination - (let ((desc (org-export-data (org-element-contents destination) info)) - (href (org-export-solidify-link-text path))) - (format - "<text:bookmark-ref text:reference-format=\"text\" text:ref-name=\"OrgXref.%s\">%s</text:bookmark-ref>" - href desc))))) + (format + "<text:bookmark-ref text:reference-format=\"text\" text:ref-name=\"OrgXref.%s\">%s</text:bookmark-ref>" + (org-export-solidify-link-text + (org-element-property :value destination)) + desc)))) ;; Links pointing to a headline: Find destination and build ;; appropriate referencing command. ((member type '("custom-id" "fuzzy" "id")) -- 1.9.1 ^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-23 17:13 ` Nicolas Goaziou @ 2014-03-23 17:26 ` Bastien 2014-03-24 10:24 ` Nicolas Goaziou 2014-03-24 13:23 ` Nicolas Goaziou 0 siblings, 2 replies; 25+ messages in thread From: Bastien @ 2014-03-23 17:26 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Noah Slater, emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 330 bytes --] Hi Nicolas, Nicolas Goaziou <n.goaziou@gmail.com> writes: > Here are 3 patches (for maint) fixing radio-target behaviour. It looks perfect. I tested* the HTML and LaTeX backend and they do exactly what's expected. Thanks a lot for putting this together! * With quite a complex radio link like the one in the attached file. [-- Attachment #2: a.org --] [-- Type: application/vnd.lotus-organizer, Size: 83 bytes --] [-- Attachment #3: Type: text/plain, Size: 14 bytes --] -- Bastien ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-23 17:26 ` Bastien @ 2014-03-24 10:24 ` Nicolas Goaziou 2014-03-24 14:11 ` Bastien 2014-03-24 13:23 ` Nicolas Goaziou 1 sibling, 1 reply; 25+ messages in thread From: Nicolas Goaziou @ 2014-03-24 10:24 UTC (permalink / raw) To: Bastien; +Cc: Noah Slater, emacs-orgmode Hello, Bastien <bzg@gnu.org> writes: > It looks perfect. I tested* the HTML and LaTeX backend and they do > exactly what's expected. Thanks a lot for putting this together! There is still a limitation (which was already present before the patch), though. The regexp cannot match a radio link next to an apostrophe, since those are considered word-constituent. An obvious solution would be to drop the separator ("\\_<", previously "\\<") altogether. This would allow the following construct: <<<some target>>> some target's This would also allow midword matching when the radio target is small enough to be contained within a word. <<org>> organization However, I'm not sure this is something desirable, but the apostrophe problem is mildly annoying. WDYT? Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-24 10:24 ` Nicolas Goaziou @ 2014-03-24 14:11 ` Bastien 2014-03-25 9:24 ` Nicolas Goaziou 0 siblings, 1 reply; 25+ messages in thread From: Bastien @ 2014-03-24 14:11 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Noah Slater, emacs-orgmode Hi Nicolas, Nicolas Goaziou <n.goaziou@gmail.com> writes: > However, I'm not sure this is something desirable, but the apostrophe > problem is mildly annoying. My intuition is that midword matching will soon be used as a neat trick, while preventing "target's" to match "<<<target>>>" will prove annoying. Also, one can easily circumvent midword false positives by using a slightly different word. That's quite a premature and unstable intuition, but I think it's worth trying if your intuition goes in the same direction. Otherwise let's just prevent apostrophes. Thanks again, -- Bastien ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-24 14:11 ` Bastien @ 2014-03-25 9:24 ` Nicolas Goaziou 2014-03-25 11:07 ` Bastien 0 siblings, 1 reply; 25+ messages in thread From: Nicolas Goaziou @ 2014-03-25 9:24 UTC (permalink / raw) To: Bastien; +Cc: Noah Slater, emacs-orgmode Hello, Bastien <bzg@gnu.org> writes: > That's quite a premature and unstable intuition, but I think it's > worth trying if your intuition goes in the same direction. Otherwise > let's just prevent apostrophes. OK, let's try it. Time will tell. Installed in 1c1936fbb1f0c42e5c7e1d3c903626aa5993a357. Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-25 9:24 ` Nicolas Goaziou @ 2014-03-25 11:07 ` Bastien 0 siblings, 0 replies; 25+ messages in thread From: Bastien @ 2014-03-25 11:07 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Noah Slater, emacs-orgmode Nicolas Goaziou <n.goaziou@gmail.com> writes: > OK, let's try it. Time will tell. > > Installed in 1c1936fbb1f0c42e5c7e1d3c903626aa5993a357. Thanks, -- Bastien ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-23 17:26 ` Bastien 2014-03-24 10:24 ` Nicolas Goaziou @ 2014-03-24 13:23 ` Nicolas Goaziou 1 sibling, 0 replies; 25+ messages in thread From: Nicolas Goaziou @ 2014-03-24 13:23 UTC (permalink / raw) To: Bastien; +Cc: Noah Slater, emacs-orgmode Bastien <bzg@gnu.org> writes: > It looks perfect. I tested* the HTML and LaTeX backend and they do > exactly what's expected. Thanks a lot for putting this together! Applied. -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-17 11:29 ` Bastien 2014-03-17 12:04 ` Bastien @ 2014-03-17 12:38 ` Nicolas Goaziou 2014-03-17 12:59 ` Bastien 1 sibling, 1 reply; 25+ messages in thread From: Nicolas Goaziou @ 2014-03-17 12:38 UTC (permalink / raw) To: Bastien; +Cc: Noah Slater, emacs-orgmode Bastien <bzg@gnu.org> writes: > I don't get the logic: the output text has two parts: the target of > the link, the description of the link. It the example above, the > Target is "Hello World", and should be rewritten "Hello-World" to > escape spaces. The description is "hello world" and should not be > rewritten, it must appears the same way to the user. Actually, the target is "hello-world". On latest "maint", with your example, I get: --8<---------------cut here---------------start------------->8--- <p> <a id="hello-world">Hello World</a> </p> <p> Let’s say <a href="#hello-world">Hello World</a> to test.</p> --8<---------------cut here---------------end--------------->8--- It looks good to me. >> Anyway, I think the solution is to slightly change the parser to enforce >> case-insensitivity. > > I thought about this, but it does not solve the problem of displaying > the target instead of the link description. I cannot reproduce this problem. Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-17 12:38 ` Nicolas Goaziou @ 2014-03-17 12:59 ` Bastien 2014-03-17 13:11 ` Nicolas Goaziou 0 siblings, 1 reply; 25+ messages in thread From: Bastien @ 2014-03-17 12:59 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Noah Slater, emacs-orgmode Nicolas Goaziou <n.goaziou@gmail.com> writes: > <p> > <a id="hello-world">Hello World</a> > </p> > > <p> > Let’s say <a href="#hello-world">Hello World</a> to test.</p> > > It looks good to me. The target is the radio link: "Hello World". The link description in the second paragraph is "hello world". So the output is not good: 1) <a id="hello-world">Hello World</a> should be <a id="Hello-World">Hello World</a> ^ ^ 2) <a href="#hello-world">Hello World</a> should be <a href="#Hello-World">hello world</a> ^ ^ ^ ^ See the difference with the result you get after applying the patch I just sent on top of d2e7b1b5. -- Bastien ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-17 12:59 ` Bastien @ 2014-03-17 13:11 ` Nicolas Goaziou 2014-03-17 14:18 ` Bastien 0 siblings, 1 reply; 25+ messages in thread From: Nicolas Goaziou @ 2014-03-17 13:11 UTC (permalink / raw) To: Bastien; +Cc: Noah Slater, emacs-orgmode Bastien <bzg@gnu.org> writes: > Nicolas Goaziou <n.goaziou@gmail.com> writes: > >> <p> >> <a id="hello-world">Hello World</a> >> </p> >> >> <p> >> Let’s say <a href="#hello-world">Hello World</a> to test.</p> >> >> It looks good to me. > > The target is the radio link: "Hello World". > > The link description in the second paragraph is "hello world". > > So the output is not good: > > 1) <a id="hello-world">Hello World</a> should be > <a id="Hello-World">Hello World</a> > ^ ^ > > 2) <a href="#hello-world">Hello World</a> should be > <a href="#Hello-World">hello world</a> > ^ ^ ^ ^ > > See the difference with the result you get after applying > the patch I just sent on top of d2e7b1b5. I see the capitalization problem, but I still don't understand why you think target and description are inverted. <a href="#xxx">yyy</a> targets <a id="xxx">zzz</a> In the current state (ignoring the description part), you have: <a href="#hello-world">...</a> and <a id="hello-world">...</a> What do you think is wrong here? Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: Radio targets with mixed capitalisation do not work in HTML export 2014-03-17 13:11 ` Nicolas Goaziou @ 2014-03-17 14:18 ` Bastien 0 siblings, 0 replies; 25+ messages in thread From: Bastien @ 2014-03-17 14:18 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Noah Slater, emacs-orgmode Nicolas Goaziou <n.goaziou@gmail.com> writes: > I see the capitalization problem, but I still don't understand why you > think target and description are inverted. Well, they are. Okay, again: ======================================================================== <<<Hello World>>> hello world ======================================================================== The target of the second "hello world" is "Hello World" (capitalized). The description of the second hello world is "hello world" (lower case.) With the latest maint, the second "hello world" is translated as <a href="#hello-world">Hello World</a> whereas it should be <a href="#Hello-World">hello world</a> ^ ^ ^ ^ [target] [description] > <a href="#xxx">yyy</a> > > targets > > <a id="xxx">zzz</a> > > In the current state (ignoring the description part), you have: > > <a href="#hello-world">...</a> > > and > > <a id="hello-world">...</a> > > What do you think is wrong here? If the radio link is "Hello World", the target should be #Hello-World. We can decide to lower case all targets, but it is not necessary with the fix I propose. -- Bastien ^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2014-03-25 11:08 UTC | newest] Thread overview: 25+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-03-02 17:24 Radio targets with mixed capitalisation do not work in HTML export Noah Slater 2014-03-17 2:02 ` Bastien 2014-03-17 10:11 ` Nicolas Goaziou 2014-03-17 11:29 ` Bastien 2014-03-17 12:04 ` Bastien 2014-03-17 14:27 ` Nicolas Goaziou 2014-03-17 15:50 ` Bastien 2014-03-20 21:58 ` Bastien 2014-03-21 14:25 ` Nicolas Goaziou 2014-03-21 14:30 ` Bastien 2014-03-21 17:25 ` Nicolas Goaziou 2014-03-21 17:28 ` Bastien 2014-03-21 18:47 ` Noah Slater 2014-03-21 21:38 ` Bastien 2014-03-23 17:13 ` Nicolas Goaziou 2014-03-23 17:26 ` Bastien 2014-03-24 10:24 ` Nicolas Goaziou 2014-03-24 14:11 ` Bastien 2014-03-25 9:24 ` Nicolas Goaziou 2014-03-25 11:07 ` Bastien 2014-03-24 13:23 ` Nicolas Goaziou 2014-03-17 12:38 ` Nicolas Goaziou 2014-03-17 12:59 ` Bastien 2014-03-17 13:11 ` Nicolas Goaziou 2014-03-17 14:18 ` 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).