ox-html: Handle external fuzzy links

* lisp/ox-html.el (org-html-link): Resolve external links with search
  options like [[file.org::#custom-id]] or
  [[file.org::*headline-search]].

In particular, this allows to resolve completely links produced by
index generation during publishing.
This commit is contained in:
Nicolas Goaziou 2013-02-23 00:03:22 +01:00
parent 93a70ac598
commit 3e95e859cd

View file

@ -2164,18 +2164,37 @@ INFO is a plist holding contextual information. See
(raw-path (org-element-property :path link))
;; Ensure DESC really exists, or set it to nil.
(desc (and (not (string= desc "")) desc))
(path (cond
((member type '("http" "https" "ftp" "mailto"))
(concat type ":" raw-path))
((string= type "file")
;; Treat links to ".org" files as ".html", if needed.
(setq raw-path (funcall --link-org-files-as-html-maybe
raw-path info))
;; If file path is absolute, prepend it with protocol
;; component - "file://".
(if (not (file-name-absolute-p raw-path)) raw-path
(concat "file://" (expand-file-name raw-path))))
(t raw-path)))
(path
(cond
((member type '("http" "https" "ftp" "mailto"))
(concat type ":" raw-path))
((string= type "file")
;; Treat links to ".org" files as ".html", if needed.
(setq raw-path
(funcall --link-org-files-as-html-maybe raw-path info))
;; If file path is absolute, prepend it with protocol
;; component - "file://".
(when (file-name-absolute-p raw-path)
(setq raw-path
(concat "file://" (expand-file-name raw-path))))
;; Add search option, if any. A search option can be
;; relative to a custom-id or a headline title. Any other
;; option is ignored.
(let ((option (org-element-property :search-option link)))
(cond ((not option) raw-path)
((eq (aref option 0) ?#) (concat raw-path option))
;; External fuzzy link: try to resolve it if path
;; belongs to current project, if any.
((eq (aref option 0) ?*)
(concat
raw-path
(let ((numbers
(org-publish-resolve-external-fuzzy-link
(org-element-property :path link) option)))
(and numbers (concat "#sec-"
(mapconcat 'number-to-string
numbers "-")))))))))
(t raw-path)))
attributes protocol)
;; Extract attributes from parent's paragraph.
(and (setq attributes