From 32ba462be14850d251dfdfaeb7ced81a41e43855 Mon Sep 17 00:00:00 2001 From: Carsten Dominik Date: Thu, 8 Jan 2009 22:35:57 +0100 Subject: [PATCH] Export: Make id: links work after export. id: links to entries in other files will now work after export to HTML, provided that the published target file is on the same relative path. --- doc/org.texi | 52 +++++++++++++++++++++++++++++----------------------- lisp/ChangeLog | 8 ++++++++ lisp/org-exp.el | 27 ++++++++++++++++++++++++--- 3 files changed, 61 insertions(+), 26 deletions(-) diff --git a/doc/org.texi b/doc/org.texi index 09b010548..6422db9fe 100644 --- a/doc/org.texi +++ b/doc/org.texi @@ -2682,23 +2682,28 @@ insert it into an Org file, and to follow the link. @item C-c l Store a link to the current location. This is a @emph{global} command which can be used in any buffer to create a link. The link will be stored for -later insertion into an Org buffer (see below). For Org files, if there is a -@samp{<>} at the cursor, the link points to the target. Otherwise it -points to the current headline, either by text, or, if @file{org-id.el} is -loaded, by ID property. For VM, Rmail, Wanderlust, MH-E, Gnus and BBDB -buffers, the link will indicate the current article/entry. For W3 and W3M -buffers, the link goes to the current URL. For IRC links, if you set the -variable @code{org-irc-link-to-logs} to non-nil then @kbd{C-c l} will store a +later insertion into an Org buffer (see below). + +For Org files, if there is a @samp{<>} at the cursor, the link points +to the target. Otherwise it points to the current headline, either by text +(unsafe), or, if @file{org-id.el} is loaded and @code{org-link-to-org-use-id} +is set, by ID property. + +For VM, Rmail, Wanderlust, MH-E, Gnus and BBDB buffers, the link will +indicate the current article/entry. For W3 and W3M buffers, the link goes to +the current URL. For IRC links, if you set the variable +@code{org-irc-link-to-logs} to non-nil then @kbd{C-c l} will store a @samp{file:/} style link to the relevant point in the logs for the current conversation. Otherwise an @samp{irc:/} style link to the user/channel/server -under the point will be stored. For any other files, the link will point to -the file, with a search string (@pxref{Search options}) pointing to the -contents of the current line. If there is an active region, the selected -words will form the basis of the search string. If the automatically created -link is not working correctly or accurately enough, you can write custom -functions to select the search string and to do the search for particular -file types - see @ref{Custom searches}. The key binding @kbd{C-c l} is only -a suggestion - see @ref{Installation}. +under the point will be stored. + +For any other files, the link will point to the file, with a search string +(@pxref{Search options}) pointing to the contents of the current line. If +there is an active region, the selected words will form the basis of the +search string. If the automatically created link is not working correctly or +accurately enough, you can write custom functions to select the search string +and to do the search for particular file types - see @ref{Custom searches}. +The key binding @kbd{C-c l} is only a suggestion - see @ref{Installation}. @c @kindex C-c C-l @cindex link completion @@ -7884,14 +7889,15 @@ All lines between these markers are exported literally @cindex links, in HTML export @cindex internal links, in HTML export @cindex external links, in HTML export -Internal links (@pxref{Internal links}) will continue to work in HTML. -Automatic links created by radio targets (@pxref{Radio targets}) will also -work in the HTML file. Links to external files will still work if the HTML -file is in the same directory as the Org file. Links to other @file{.org} -files will be translated into HTML links under the assumption that an HTML -version also exists of the linked file. For information related to linking -files while publishing them to a publishing directory see @ref{Publishing -links}. +Internal links (@pxref{Internal links}) will continue to work in HTML. This +does include automatic links created by radio targets (@pxref{Radio +targets}). Links to external files will still work if the target file is on +the same @i{relative} path as the published Org file. Links to other +@file{.org} files will be translated into HTML links under the assumption +that an HTML version also exists of the linked file, at the same relative +path. @samp{id:} links can then be used to jump to specific entries across +files. For information related to linking files while publishing them to a +publishing directory see @ref{Publishing links}. If you want to specify attributes for links, you can do so using a special @code{#+ATTR_HTML} line to define attributes that wil be added to the diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 6b9c939f1..0e53d6397 100755 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,13 @@ 2009-01-08 Carsten Dominik + * org.el (org-format-latex-options): Add new matcher for single + letters between dollars. + + * org-exp.el (org-export-define-heading-targets): Record ID's also + as alternative targets. + (org-export-as-html): Interpret "id:" links to other files by + preserving the relative path. + * org-jsinfo.el (org-infojs-handle-options): Catch the case if v is nil. diff --git a/lisp/org-exp.el b/lisp/org-exp.el index e4661742c..52379bb42 100644 --- a/lisp/org-exp.el +++ b/lisp/org-exp.el @@ -1645,16 +1645,24 @@ The new targets are added to TARGET-ALIST, which is also returned." (org-init-section-numbers) (let ((re (concat "^" org-outline-regexp "\\| [ \t]*:ID:[ \t]*\\([^ \t\r\n]+\\)")) - level target) + level target last-section-target a) (while (re-search-forward re nil t) (if (match-end 1) - (push (cons (org-match-string-no-properties 1) - target) target-alist) + (progn + (push (cons (org-match-string-no-properties 1) + target) target-alist) + (setq a (or (assoc last-section-target org-export-target-aliases) + (progn + (push (list last-section-target) + org-export-target-aliases) + (car org-export-target-aliases)))) + (push (caar target-alist) (cdr a))) (setq level (org-reduced-level (save-excursion (goto-char (point-at-bol)) (org-outline-level)))) (setq target (org-solidify-link-text (format "sec-%s" (org-section-number level)))) + (setq last-section-target target) (push (cons target target) target-alist) (add-text-properties (point-at-bol) (point-at-eol) @@ -3264,6 +3272,7 @@ PUB-DIR is set, use this as the publishing directory." rpl path attr desc descp desc1 desc2 link snumber fnc item-tag footnotes footref-seen + id-file ) (let ((inhibit-read-only t)) @@ -3560,6 +3569,18 @@ lang=\"%s\" xml:lang=\"%s\"> "\"" attr ">" (org-export-html-format-desc desc) ""))) + ((and (equal type "id") + (setq id-file (org-id-find-id-file path))) + ;; This is an id: link to another file (if it was the same file, + ;; it would have become an internal link...) + (setq id-file (file-relative-name + id-file (file-name-directory org-current-export-file))) + (setq id-file (concat (file-name-sans-extension id-file) + "." html-extension)) + (setq rpl (concat "" + (org-export-html-format-desc desc) + ""))) ((member type '("http" "https")) ;; standard URL, just check if we need to inline an image (if (and (or (eq t org-export-html-inline-images) -- 2.11.4.GIT