summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Goaziou <mail@nicolasgoaziou.fr>2015-04-13 11:24:42 +0200
committerNicolas Goaziou <mail@nicolasgoaziou.fr>2015-04-13 15:21:22 +0200
commit459033265295723cbfb0fccb3577acbfdc9d0285 (patch)
treea6ee9daac155eb1c6796f1af41220c2223df7610
parent186bae42a4f1c7dd6b7a6af0bc1aebeb18025527 (diff)
downloadorg-mode-459033265295723cbfb0fccb3577acbfdc9d0285.tar.gz
Export back-ends: Use `org-export-get-reference'
* lisp/ox-beamer.el (org-beamer-link): (org-beamer-plain-list): (org-beamer-target): (org-beamer-radio-target): * lisp/ox-html.el (org-html--wrap-image): (org-html--format-toc-headline): (org-html-list-of-listings): (org-html-list-of-tables): (org-html-headline): (org-html-inline-src-block): (org-html-link): (org-html-paragraph): (org-html-section): (org-html-radio-target): (org-html-src-block): (org-html-table): (org-html-target): * lisp/ox-latex.el (org-latex--caption/label-string): (org-latex--wrap-label): (org-latex-center-block): (org-latex-drawer): (org-latex-dynamic-block): (org-latex-example-block): (org-latex-fixed-width): (org-latex-headline): (org-latex-horizontal-rule): (org-latex-latex-environment): (org-latex-link): (org-latex-plain-list): (org-latex-quote-block): (org-latex-radio-target): (org-latex-target): (org-latex-verse-block): * lisp/ox-man.el (org-man-target): * lisp/ox-md.el (org-md-headline): * lisp/ox-odt.el (org-odt-format-headline--wrap): (org-odt-headline): (org-odt-format-label): (org-odt-link--infer-description): (org-odt-link): (org-odt-radio-target): (org-odt-target): * lisp/ox-texinfo.el (org-texinfo--get-node): (org-texinfo-radio-target): (org-texinfo-target): * contrib/lisp/ox-groff.el (org-groff-link): (org-groff-radio-target): (org-groff-target): * contrib/lisp/ox-rss.el (org-rss-headline): Use `org-export-get-reference'.
-rw-r--r--contrib/lisp/ox-groff.el17
-rw-r--r--contrib/lisp/ox-rss.el5
-rw-r--r--lisp/ox-beamer.el18
-rw-r--r--lisp/ox-html.el123
-rw-r--r--lisp/ox-latex.el87
-rw-r--r--lisp/ox-man.el3
-rw-r--r--lisp/ox-md.el8
-rw-r--r--lisp/ox-odt.el101
-rw-r--r--lisp/ox-texinfo.el14
9 files changed, 164 insertions, 212 deletions
diff --git a/contrib/lisp/ox-groff.el b/contrib/lisp/ox-groff.el
index c776d3c..96ead87 100644
--- a/contrib/lisp/ox-groff.el
+++ b/contrib/lisp/ox-groff.el
@@ -1269,8 +1269,7 @@ INFO is a plist holding contextual information. See
(let ((destination (org-export-resolve-radio-link link info)))
(if (not destination) desc
(format "\\fI [%s] \\fP"
- (org-export-solidify-link-text
- (org-element-property :value destination))))))
+ (org-export-get-reference destination info)))))
;; Links pointing to a headline: find destination and build
;; appropriate referencing command.
@@ -1302,9 +1301,9 @@ INFO is a plist holding contextual information. See
(org-element-property :title destination) info))))))
;; Fuzzy link points to a target. Do as above.
(otherwise
- (let ((path (org-export-solidify-link-text path)))
- (if (not desc) (format "\\fI%s\\fP" path)
- (format "%s \\fBat\\fP \\fI%s\\fP" desc path)))))))
+ (let ((ref (org-export-get-reference destination info)))
+ (if (not desc) (format "\\fI%s\\fP" ref)
+ (format "%s \\fBat\\fP \\fI%s\\fP" desc ref)))))))
;; External link with a description part.
((and path desc) (format "%s \\fBat\\fP \\fI%s\\fP" path desc))
;; External link without a description part.
@@ -1458,10 +1457,7 @@ holding contextual information."
"Transcode a RADIO-TARGET object from Org to Groff.
TEXT is the text of the target. INFO is a plist holding
contextual information."
- (format "%s - %s"
- (org-export-solidify-link-text
- (org-element-property :value radio-target))
- text))
+ (format "%s - %s" (org-export-get-reference radio-target info) text))
;;; Section
@@ -1791,8 +1787,7 @@ a communication channel."
"Transcode a TARGET object from Org to Groff.
CONTENTS is nil. INFO is a plist holding contextual
information."
- (format "\\fI%s\\fP"
- (org-export-solidify-link-text (org-element-property :value target))))
+ (format "\\fI%s\\fP" (org-export-get-reference target info)))
;;; Timestamp
diff --git a/contrib/lisp/ox-rss.el b/contrib/lisp/ox-rss.el
index 8d3cc27..4cdfe0e 100644
--- a/contrib/lisp/ox-rss.el
+++ b/contrib/lisp/ox-rss.el
@@ -237,10 +237,7 @@ communication channel."
(hl-home (file-name-as-directory (plist-get info :html-link-home)))
(hl-pdir (plist-get info :publishing-directory))
(hl-perm (org-element-property :RSS_PERMALINK headline))
- (anchor
- (org-export-solidify-link-text
- (or (org-element-property :CUSTOM_ID headline)
- (concat "sec-" (mapconcat 'number-to-string hl-number "-")))))
+ (anchor (org-export-get-reference headline info))
(category (org-rss-plain-text
(or (org-element-property :CATEGORY headline) "") info))
(pubdate0 (org-element-property :PUBDATE headline))
diff --git a/lisp/ox-beamer.el b/lisp/ox-beamer.el
index 1dfd3d7..3306a6d 100644
--- a/lisp/ox-beamer.el
+++ b/lisp/ox-beamer.el
@@ -720,8 +720,7 @@ used as a communication channel."
(if (not destination) contents
(format "\\hyperlink%s{%s}{%s}"
(or (org-beamer--element-has-overlay-p link) "")
- (org-export-solidify-link-text
- (org-element-property :value destination))
+ (org-export-get-reference destination info)
contents))))
((and (member type '("custom-id" "fuzzy" "id"))
(let ((destination (if (string= type "fuzzy")
@@ -743,11 +742,11 @@ used as a communication channel."
label
contents))))
(target
- (let ((path (org-export-solidify-link-text path)))
- (if (not contents) (format "\\ref{%s}" path)
+ (let ((ref (org-export-get-reference destination info)))
+ (if (not contents) (format "\\ref{%s}" ref)
(format "\\hyperlink%s{%s}{%s}"
(or (org-beamer--element-has-overlay-p link) "")
- path
+ ref
contents))))))))
;; Otherwise, use `latex' back-end.
(t (org-export-with-backend 'latex link contents info)))))
@@ -785,7 +784,8 @@ contextual information."
'option)
;; Eventually insert contents and close environment.
contents
- latex-type))))
+ latex-type)
+ info)))
;;;; Radio Target
@@ -796,8 +796,7 @@ TEXT is the text of the target. INFO is a plist holding
contextual information."
(format "\\hypertarget%s{%s}{%s}"
(or (org-beamer--element-has-overlay-p radio-target) "")
- (org-export-solidify-link-text
- (org-element-property :value radio-target))
+ (org-export-get-reference radio-target info)
text))
@@ -807,8 +806,7 @@ contextual information."
"Transcode a TARGET object into Beamer code.
CONTENTS is nil. INFO is a plist holding contextual
information."
- (format "\\label{%s}"
- (org-export-solidify-link-text (org-element-property :value target))))
+ (format "\\label{%s}" (org-export-get-reference target info)))
;;;; Template
diff --git a/lisp/ox-html.el b/lisp/ox-html.el
index d2f141d..073e379 100644
--- a/lisp/ox-html.el
+++ b/lisp/ox-html.el
@@ -1516,8 +1516,7 @@ arguments CAPTION and LABEL are given, use them for caption and
(format (if html5-fancy "\n<figure%s>%s%s\n</figure>"
"\n<div%s class=\"figure\">%s%s\n</div>")
;; ID.
- (if (not (org-string-nw-p label)) ""
- (format " id=\"%s\"" (org-export-solidify-link-text label)))
+ (if (org-string-nw-p label) (format " id=\"%s\"" label) "")
;; Contents.
(format "\n<p>%s</p>" contents)
;; Caption.
@@ -2205,9 +2204,7 @@ INFO is a plist used as a communication channel."
(org-export-get-tags headline info))))
(format "<a href=\"#%s\">%s</a>"
;; Label.
- (org-export-solidify-link-text
- (or (org-element-property :CUSTOM_ID headline)
- (org-export-get-headline-id headline info)))
+ (org-export-get-reference headline info)
;; Body.
(concat
(and (not (org-export-low-level-p headline info))
@@ -2235,7 +2232,8 @@ of listings as a string, or nil if it is empty."
(org-html--translate "Listing %d:" info))))
(mapconcat
(lambda (entry)
- (let ((label (org-element-property :name entry))
+ (let ((label (and (org-element-property :name entry)
+ (org-export-get-reference entry info)))
(title (org-trim
(org-export-data
(or (org-export-get-caption entry t)
@@ -2246,7 +2244,7 @@ of listings as a string, or nil if it is empty."
(if (not label)
(concat (format initial-fmt (incf count)) " " title)
(format "<a href=\"#%s\">%s %s</a>"
- (org-export-solidify-link-text label)
+ label
(format initial-fmt (incf count))
title))
"</li>")))
@@ -2271,7 +2269,8 @@ of tables as a string, or nil if it is empty."
(org-html--translate "Table %d:" info))))
(mapconcat
(lambda (entry)
- (let ((label (org-element-property :name entry))
+ (let ((label (and (org-element-property :name entry)
+ (org-export-get-reference entry info)))
(title (org-trim
(org-export-data
(or (org-export-get-caption entry t)
@@ -2282,7 +2281,7 @@ of tables as a string, or nil if it is empty."
(if (not label)
(concat (format initial-fmt (incf count)) " " title)
(format "<a href=\"#%s\">%s %s</a>"
- (org-export-solidify-link-text label)
+ label
(format initial-fmt (incf count))
title))
"</li>")))
@@ -2445,26 +2444,18 @@ holding contextual information."
(full-text (funcall (plist-get info :html-format-headline-function)
todo todo-type priority text tags info))
(contents (or contents ""))
- (ids (delq nil
- (list (org-element-property :CUSTOM_ID headline)
- (org-export-get-headline-id headline info)
- (org-element-property :ID headline))))
- (preferred-id (car ids))
- (extra-ids (mapconcat
- (lambda (id)
- (org-html--anchor
- (org-export-solidify-link-text
- (if (org-uuidgen-p id) (concat "ID-" id) id))
- nil nil info))
- (cdr ids) "")))
+ (reference (org-export-get-reference headline info))
+ (extra-id (let ((id (org-element-property :ID headline)))
+ (if (not id) ""
+ (org-html--anchor (concat "ID-" id) nil nil info)))))
(if (org-export-low-level-p headline info)
;; This is a deep sub-tree: export it as a list item.
(let* ((type (if numberedp 'ordered 'unordered))
(itemized-body
(org-html-format-list-item
contents type nil info nil
- (concat (org-html--anchor preferred-id nil nil info)
- extra-ids
+ (concat (org-html--anchor reference nil nil info)
+ extra-id
full-text))))
(concat (and (org-export-first-sibling-p headline info)
(org-html-begin-plain-list type))
@@ -2476,16 +2467,15 @@ holding contextual information."
;; Standard headline. Export it as a section.
(format "<%s id=\"%s\" class=\"%s\">%s%s</%s>\n"
(org-html--container headline info)
- (format "outline-container-%s"
- (or (org-element-property :CUSTOM_ID headline)
- (org-export-get-headline-id headline info)))
+ (concat "outline-container-"
+ (org-export-get-reference headline info))
(concat (format "outline-%d" level)
(and extra-class " ")
extra-class)
(format "\n<h%d id=\"%s\">%s%s</h%d>\n"
level
- preferred-id
- extra-ids
+ reference
+ extra-id
(concat
(and numberedp
(format
@@ -2533,15 +2523,13 @@ CONTENTS is nil. INFO is a plist holding contextual information."
"Transcode an INLINE-SRC-BLOCK element from Org to HTML.
CONTENTS holds the contents of the item. INFO is a plist holding
contextual information."
- (let* ((org-lang (org-element-property :language inline-src-block))
- (code (org-element-property :value inline-src-block)))
- (let ((lang (org-element-property :language inline-src-block))
- (code (org-html-format-code inline-src-block info))
- (label (let ((lbl (org-element-property :name inline-src-block)))
- (if (not lbl) ""
- (format " id=\"%s\""
- (org-export-solidify-link-text lbl))))))
- (format "<code class=\"src src-%s\"%s>%s</code>" lang label code))))
+ (let ((lang (org-element-property :language inline-src-block))
+ (code (org-html-format-code inline-src-block info))
+ (label
+ (let ((lbl (and (org-element-property :name inline-src-block)
+ (org-export-get-reference inline-src-block info))))
+ (if (not lbl) "" (format " id=\"%s\"" lbl)))))
+ (format "<code class=\"src src-%s\"%s>%s</code>" lang label code)))
;;;; Inlinetask
@@ -2896,9 +2884,9 @@ INFO is a plist holding contextual information. See
(let ((destination (org-export-resolve-radio-link link info)))
(if (not destination) desc
(format "<a href=\"#%s\"%s>%s</a>"
- (org-export-solidify-link-text
- (org-element-property :value destination))
- attributes desc))))
+ (org-export-get-reference destination info)
+ attributes
+ desc))))
;; Links pointing to a headline: Find destination and build
;; appropriate referencing command.
((member type '("custom-id" "fuzzy" "id"))
@@ -2922,43 +2910,42 @@ INFO is a plist holding contextual information. See
(org-element-property :raw-link link) info))))
;; Link points to a headline.
(headline
- (let ((href (or (and (string= type "custom-id")
- (org-element-property :CUSTOM_ID destination))
- (org-export-get-headline-id destination info)))
+ (let ((href (org-export-get-reference destination info))
;; What description to use?
(desc
;; Case 1: Headline is numbered and LINK has no
;; description. Display section number.
(if (and (org-export-numbered-headline-p destination info)
(not desc))
- (mapconcat 'number-to-string
+ (mapconcat #'number-to-string
(org-export-get-headline-number
destination info) ".")
;; Case 2: Either the headline is un-numbered or
;; LINK has a custom description. Display LINK's
;; description or headline's title.
- (or desc (org-export-data (org-element-property
- :title destination) info)))))
- (format "<a href=\"#%s\"%s>%s</a>"
- (org-export-solidify-link-text href) attributes desc)))
+ (or desc
+ (org-export-data
+ (org-element-property :title destination) info)))))
+ (format "<a href=\"#%s\"%s>%s</a>" href attributes desc)))
;; Fuzzy link points to a target or an element.
(t
- (let* ((path (org-export-solidify-link-text path))
- (org-html-standalone-image-predicate 'org-html--has-caption-p)
+ (let* ((ref (org-export-get-reference destination info))
+ (org-html-standalone-image-predicate
+ #'org-html--has-caption-p)
(number (cond
(desc nil)
((org-html-standalone-image-p destination info)
(org-export-get-ordinal
(org-element-map destination 'link
- 'identity info t)
+ #'identity info t)
info 'link 'org-html-standalone-image-p))
(t (org-export-get-ordinal
destination info nil 'org-html--has-caption-p))))
(desc (cond (desc)
((not number) "No description for this link")
((numberp number) (number-to-string number))
- (t (mapconcat 'number-to-string number ".")))))
- (format "<a href=\"#%s\"%s>%s</a>" path attributes desc))))))
+ (t (mapconcat #'number-to-string number ".")))))
+ (format "<a href=\"#%s\"%s>%s</a>" ref attributes desc))))))
;; Coderef: replace link with the reference name or the
;; equivalent line number.
((string= type "coderef")
@@ -3028,7 +3015,8 @@ the plist used as a communication channel."
'identity info t)
info nil 'org-html-standalone-image-p))
"</span> " raw))))
- (label (org-element-property :name paragraph)))
+ (label (and (org-element-property :name paragraph)
+ (org-export-get-reference paragraph info))))
(org-html--wrap-image contents info caption label)))
;; Regular paragraph.
(t (format "<p%s%s>\n%s</p>"
@@ -3176,7 +3164,7 @@ holding contextual information."
class-num
(or (org-element-property :CUSTOM_ID parent)
section-number
- (org-export-get-headline-id parent info))
+ (org-export-get-reference parent info))
(or contents ""))))))
;;;; Radio Target
@@ -3185,9 +3173,8 @@ holding contextual information."
"Transcode a RADIO-TARGET object from Org to HTML.
TEXT is the text of the target. INFO is a plist holding
contextual information."
- (let ((id (org-export-solidify-link-text
- (org-element-property :value radio-target))))
- (org-html--anchor id text nil info)))
+ (let ((ref (org-export-get-reference radio-target info)))
+ (org-html--anchor ref text nil info)))
;;;; Special Block
@@ -3225,10 +3212,9 @@ contextual information."
(let ((lang (org-element-property :language src-block))
(caption (org-export-get-caption src-block))
(code (org-html-format-code src-block info))
- (label (let ((lbl (org-element-property :name src-block)))
- (if (not lbl) ""
- (format " id=\"%s\""
- (org-export-solidify-link-text lbl))))))
+ (label (let ((lbl (and (org-element-property :name src-block)
+ (org-export-get-reference src-block info))))
+ (if lbl (format " id=\"%s\"" lbl) ""))))
(if (not lang) (format "<pre class=\"example\"%s>\n%s</pre>" label code)
(format
"<div class=\"org-src-container\">\n%s%s\n</div>"
@@ -3390,14 +3376,14 @@ contextual information."
(table.el (org-html-table--table.el-table table info))
;; Case 2: Standard table.
(t
- (let* ((label (org-element-property :name table))
- (caption (org-export-get-caption table))
+ (let* ((caption (org-export-get-caption table))
(number (org-export-get-ordinal
- table info nil 'org-html--has-caption-p))
+ table info nil #'org-html--has-caption-p))
(attributes
(org-html--make-attribute-string
(org-combine-plists
- (and label (list :id (org-export-solidify-link-text label)))
+ (and (org-element-property :name table)
+ (list :id (org-export-get-reference table info)))
(and (not (org-html-html5-p info))
(plist-get info :html-table-attributes))
(org-export-read-attribute :attr_html table))))
@@ -3445,9 +3431,8 @@ contextual information."
"Transcode a TARGET object from Org to HTML.
CONTENTS is nil. INFO is a plist holding contextual
information."
- (let ((id (org-export-solidify-link-text
- (org-element-property :value target))))
- (org-html--anchor id nil nil info)))
+ (let ((ref (org-export-get-reference target info)))
+ (org-html--anchor ref nil nil info)))
;;;; Timestamp
diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el
index b3c7f44..5627744 100644
--- a/lisp/ox-latex.el
+++ b/lisp/ox-latex.el
@@ -1050,25 +1050,25 @@ INFO is a plist holding contextual information. If there's no
caption nor label, return the empty string.
For non-floats, see `org-latex--wrap-label'."
- (let* ((label (org-element-property :name element))
- (label-str (if (not (org-string-nw-p label)) ""
- (format "\\label{%s}"
- (org-export-solidify-link-text label))))
+ (let* ((label
+ (if (not (org-element-property :name element)) ""
+ (format "\\label{%s}" (org-export-get-reference element info))))
(main (org-export-get-caption element))
(short (org-export-get-caption element t))
- (caption-from-attr-latex (org-export-read-attribute :attr_latex element :caption)))
+ (caption-from-attr-latex
+ (org-export-read-attribute :attr_latex element :caption)))
(cond
((org-string-nw-p caption-from-attr-latex)
(concat caption-from-attr-latex "\n"))
- ((and (not main) (equal label-str "")) "")
- ((not main) (concat label-str "\n"))
+ ((and (not main) (equal label "")) "")
+ ((not main) (concat label "\n"))
;; Option caption format with short name.
(short (format "\\caption[%s]{%s%s}\n"
(org-export-data short info)
- label-str
+ label
(org-export-data main info)))
;; Standard caption format.
- (t (format "\\caption{%s%s}\n" label-str (org-export-data main info))))))
+ (t (format "\\caption{%s%s}\n" label (org-export-data main info))))))
(defun org-latex-guess-inputenc (header)
"Set the coding system in inputenc to what the buffer is.
@@ -1144,15 +1144,16 @@ nil."
options
","))
-(defun org-latex--wrap-label (element output)
+(defun org-latex--wrap-label (element output info)
"Wrap label associated to ELEMENT around OUTPUT, if appropriate.
-This function shouldn't be used for floats. See
+INFO is the current export state, as a plist. This function
+should not be used for floats. See
`org-latex--caption/label-string'."
- (let ((label (org-element-property :name element)))
- (if (not (and (org-string-nw-p output) (org-string-nw-p label))) output
- (concat (format "\\phantomsection\n\\label{%s}\n"
- (org-export-solidify-link-text label))
- output))))
+ (if (not (and (org-string-nw-p output) (org-element-property :name element)))
+ output
+ (concat (format "\\phantomsection\n\\label{%s}\n"
+ (org-export-get-reference element info))
+ output)))
(defun org-latex--text-markup (text markup info)
"Format TEXT depending on MARKUP text markup.
@@ -1372,8 +1373,7 @@ contextual information."
CONTENTS holds the contents of the center block. INFO is a plist
holding contextual information."
(org-latex--wrap-label
- center-block
- (format "\\begin{center}\n%s\\end{center}" contents)))
+ center-block (format "\\begin{center}\n%s\\end{center}" contents) info))
;;;; Clock
@@ -1410,7 +1410,7 @@ holding contextual information."
(let* ((name (org-element-property :drawer-name drawer))
(output (funcall (plist-get info :latex-format-drawer-function)
name contents)))
- (org-latex--wrap-label drawer output)))
+ (org-latex--wrap-label drawer output info)))
;;;; Dynamic Block
@@ -1419,7 +1419,7 @@ holding contextual information."
"Transcode a DYNAMIC-BLOCK element from Org to LaTeX.
CONTENTS holds the contents of the block. INFO is a plist
holding contextual information. See `org-export-data'."
- (org-latex--wrap-label dynamic-block contents))
+ (org-latex--wrap-label dynamic-block contents info))
;;;; Entity
@@ -1441,7 +1441,8 @@ information."
(org-latex--wrap-label
example-block
(format "\\begin{verbatim}\n%s\\end{verbatim}"
- (org-export-format-code-default example-block info)))))
+ (org-export-format-code-default example-block info))
+ info)))
;;;; Export Block
@@ -1471,7 +1472,8 @@ CONTENTS is nil. INFO is a plist holding contextual information."
fixed-width
(format "\\begin{verbatim}\n%s\\end{verbatim}"
(org-remove-indentation
- (org-element-property :value fixed-width)))))
+ (org-element-property :value fixed-width)))
+ info))
;;;; Footnote Reference
@@ -1566,7 +1568,7 @@ holding contextual information."
(format "\\label{%s}\n"
(or (and (plist-get info :latex-custom-id-labels)
(org-element-property :CUSTOM_ID headline))
- (org-export-get-headline-id headline info))))
+ (org-export-get-reference headline info))))
(pre-blanks
(make-string (org-element-property :pre-blank headline) 10)))
(if (or (not section-fmt) (org-export-low-level-p headline info))
@@ -1669,7 +1671,8 @@ CONTENTS is nil. INFO is a plist holding contextual information."
horizontal-rule
(format "\\rule{%s}{%s}"
(or (plist-get attr :width) "\\linewidth")
- (or (plist-get attr :thickness) "0.5pt"))))))
+ (or (plist-get attr :thickness) "0.5pt"))
+ info))))
;;;; Inline Src Block
@@ -1871,10 +1874,9 @@ CONTENTS is nil. INFO is a plist holding contextual information."
"Transcode a LATEX-ENVIRONMENT element from Org to LaTeX.
CONTENTS is nil. INFO is a plist holding contextual information."
(when (plist-get info :with-latex)
- (let ((label (org-element-property :name latex-environment))
- (value (org-remove-indentation
+ (let ((value (org-remove-indentation
(org-element-property :value latex-environment))))
- (if (not (org-string-nw-p label)) value
+ (if (not (org-element-property :name latex-environment)) value
;; Environment is labeled: label must be within the environment
;; (otherwise, a reference pointing to that element will count
;; the section instead).
@@ -1883,7 +1885,8 @@ CONTENTS is nil. INFO is a plist holding contextual information."
(goto-char (point-min))
(forward-line)
(insert
- (format "\\label{%s}\n" (org-export-solidify-link-text label)))
+ (format "\\label{%s}\n"
+ (org-export-get-reference latex-environment info)))
(buffer-string))))))
@@ -2070,8 +2073,7 @@ INFO is a plist holding contextual information. See
(let ((destination (org-export-resolve-radio-link link info)))
(if (not destination) desc
(format "\\hyperref[%s]{%s}"
- (org-export-solidify-link-text
- (org-element-property :value destination))
+ (org-export-get-reference destination info)
desc))))
;; Links pointing to a headline: Find destination and build
;; appropriate referencing command.
@@ -2099,7 +2101,7 @@ INFO is a plist holding contextual information. See
(and (plist-get info :latex-custom-id-labels)
(org-element-property :CUSTOM_ID destination)))
(label (or custom-label
- (org-export-get-headline-id destination info))))
+ (org-export-get-reference destination info))))
(if (and (not desc)
(org-export-numbered-headline-p destination info))
(format "\\ref{%s}" label)
@@ -2109,9 +2111,9 @@ INFO is a plist holding contextual information. See
(org-element-property :title destination) info))))))
;; Fuzzy link points to a target. Do as above.
(otherwise
- (let ((path (org-export-solidify-link-text path)))
- (if (not desc) (format "\\ref{%s}" path)
- (format "\\hyperref[%s]{%s}" path desc)))))))
+ (let ((ref (org-export-get-reference destination info)))
+ (if (not desc) (format "\\ref{%s}" ref)
+ (format "\\hyperref[%s]{%s}" ref desc)))))))
;; Coderef: replace link with the reference name or the
;; equivalent line number.
((string= type "coderef")
@@ -2165,7 +2167,8 @@ contextual information."
latex-type
(or (plist-get attr :options) "")
contents
- latex-type))))
+ latex-type)
+ info)))
;;;; Plain Text
@@ -2393,8 +2396,7 @@ channel."
CONTENTS holds the contents of the block. INFO is a plist
holding contextual information."
(org-latex--wrap-label
- quote-block
- (format "\\begin{quote}\n%s\\end{quote}" contents)))
+ quote-block (format "\\begin{quote}\n%s\\end{quote}" contents) info))
;;;; Radio Target
@@ -2403,10 +2405,7 @@ holding contextual information."
"Transcode a RADIO-TARGET object from Org to LaTeX.
TEXT is the text of the target. INFO is a plist holding
contextual information."
- (format "\\label{%s}%s"
- (org-export-solidify-link-text
- (org-element-property :value radio-target))
- text))
+ (format "\\label{%s}%s" (org-export-get-reference radio-target info) text))
;;;; Section
@@ -3019,8 +3018,7 @@ a communication channel."
"Transcode a TARGET object from Org to LaTeX.
CONTENTS is nil. INFO is a plist holding contextual
information."
- (format "\\label{%s}"
- (org-export-solidify-link-text (org-element-property :value target))))
+ (format "\\label{%s}" (org-export-get-reference target info)))
;;;; Timestamp
@@ -3077,7 +3075,8 @@ contextual information."
"^[ \t]*\\\\\\\\$" "\\vspace*{1em}"
(replace-regexp-in-string
"\\([ \t]*\\\\\\\\\\)?[ \t]*\n" "\\\\\n"
- contents nil t) nil t) nil t))))
+ contents nil t) nil t) nil t))
+ info))
diff --git a/lisp/ox-man.el b/lisp/ox-man.el
index c283f7d..e95c8b5 100644
--- a/lisp/ox-man.el
+++ b/lisp/ox-man.el
@@ -1073,8 +1073,7 @@ a communication channel."
"Transcode a TARGET object from Org to Man.
CONTENTS is nil. INFO is a plist holding contextual
information."
- (format "\\fI%s\\fP"
- (org-export-solidify-link-text (org-element-property :value target))))
+ (format "\\fI%s\\fP" (org-export-get-reference target info)))
;;; Timestamp
diff --git a/lisp/ox-md.el b/lisp/ox-md.el
index 181ecb1..b3fb10f 100644
--- a/lisp/ox-md.el
+++ b/lisp/ox-md.el
@@ -195,11 +195,9 @@ a communication channel."
(let ((char (org-element-property :priority headline)))
(and char (format "[#%c] " char)))))
(anchor
- (when (plist-get info :with-toc)
- (org-html--anchor
- (or (org-element-property :CUSTOM_ID headline)
- (org-export-get-headline-id headline info))
- nil nil info)))
+ (and (plist-get info :with-toc)
+ (org-html--anchor
+ (org-export-get-reference headline info) nil nil info)))
;; Headline text without tags.
(heading (concat todo priority title))
(style (plist-get info :md-headline-style)))
diff --git a/lisp/ox-odt.el b/lisp/ox-odt.el
index d060adf..9e31468 100644
--- a/lisp/ox-odt.el
+++ b/lisp/ox-odt.el
@@ -1813,7 +1813,7 @@ INFO is a plist holding contextual information."
(org-element-property :title headline) backend info))
(tags (and (plist-get info :with-tags)
(org-export-get-tags headline info)))
- (headline-label (org-export-get-headline-id headline info))
+ (headline-label (org-export-get-reference headline info))
(format-function
(if (functionp format-function) format-function
(function*
@@ -1840,18 +1840,11 @@ holding contextual information."
(level (org-export-get-relative-level headline info))
(numbered (org-export-numbered-headline-p headline info))
;; Get canonical label for the headline.
- (id (org-export-get-headline-id headline info))
- ;; Get user-specified labels for the headline.
- (extra-ids (list (org-element-property :CUSTOM_ID headline)
- (org-element-property :ID headline)))
+ (id (org-export-get-reference headline info))
;; Extra targets.
(extra-targets
- (mapconcat (lambda (x)
- (when x
- (let ((x (if (org-uuidgen-p x) (concat "ID-" x) x)))
- (org-odt--target
- "" (org-export-solidify-link-text x)))))
- extra-ids ""))
+ (let ((id (org-element-property :ID headline)))
+ (if id (org-odt--target "" (concat "ID-" id)) "")))
;; Title.
(anchored-title (org-odt--target full-text id)))
(cond
@@ -2164,9 +2157,9 @@ SHORT-CAPTION are strings."
(link (org-export-get-parent-element element))
(t element)))
;; Get label and caption.
- (label (org-element-property :name caption-from))
- (caption (org-export-get-caption caption-from))
- (caption (and caption (org-export-data caption info)))
+ (label (org-export-get-reference element info))
+ (caption (let ((c (org-export-get-caption caption-from)))
+ (and c (org-export-data c info))))
;; FIXME: We don't use short-caption for now
(short-caption nil))
(when (or label caption)
@@ -2197,9 +2190,6 @@ SHORT-CAPTION are strings."
(case op
;; Case 1: Handle Label definition.
(definition
- ;; Assign an internal label, if user has not provided one
- (setq label (org-export-solidify-link-text
- (or label (format "%s-%s" default-category seqno))))
(cons
(concat
;; Sneak in a bookmark. The bookmark is used when the
@@ -2221,14 +2211,13 @@ SHORT-CAPTION are strings."
short-caption))
;; Case 2: Handle Label reference.
(reference
- (assert label)
- (setq label (org-export-solidify-link-text label))
(let* ((fmt (cddr (assoc-string label-style org-odt-label-styles t)))
(fmt1 (car fmt))
(fmt2 (cadr fmt)))
(format "<text:sequence-ref text:reference-format=\"%s\" text:ref-name=\"%s\">%s</text:sequence-ref>"
- fmt1 label (format-spec fmt2 `((?e . ,category)
- (?n . ,seqno))))))
+ fmt1
+ label
+ (format-spec fmt2 `((?e . ,category) (?n . ,seqno))))))
(t (error "Unknown %S on label" op))))))))
@@ -2668,11 +2657,10 @@ Return nil, otherwise."
;; FIXME: Handle footnote-definition footnote-reference?
(let* ((genealogy (org-element-lineage destination))
(data (reverse genealogy))
- (label (case (org-element-type destination)
- (headline (org-export-get-headline-id destination info))
- (target
- (org-element-property :value destination))
- (t (error "FIXME: Resolve %S" destination)))))
+ (label (let ((type (org-element-type destination)))
+ (if (memq type '(headline target))
+ (org-export-get-reference destination info)
+ (error "FIXME: Unable to resolve %S" destination)))))
(or
(let* ( ;; Locate top-level list.
(top-level-list
@@ -2709,7 +2697,7 @@ Return nil, otherwise."
(let ((item-numbers (append listified-headline-nos item-numbers)))
(when (and item-numbers (not (memq nil item-numbers)))
(format "<text:bookmark-ref text:reference-format=\"number-all-superior\" text:ref-name=\"%s\">%s</text:bookmark-ref>"
- (org-export-solidify-link-text label)
+ label
(mapconcat (lambda (n) (if (not n) " "
(concat (number-to-string n) ".")))
item-numbers "")))))
@@ -2727,7 +2715,7 @@ Return nil, otherwise."
;; We found one.
(when headline
(format "<text:bookmark-ref text:reference-format=\"chapter\" text:ref-name=\"OrgXref.%s\">%s</text:bookmark-ref>"
- (org-export-solidify-link-text label)
+ label
(mapconcat 'number-to-string (org-export-get-headline-number
headline info) "."))))
;; Case 4: Locate a regular headline in the hierarchy. Display
@@ -2739,7 +2727,7 @@ Return nil, otherwise."
;; We found one.
(when headline
(format "<text:bookmark-ref text:reference-format=\"text\" text:ref-name=\"OrgXref.%s\">%s</text:bookmark-ref>"
- (org-export-solidify-link-text label)
+ label
(let ((title (org-element-property :title headline)))
(org-export-data title info)))))
(error "FIXME?"))))
@@ -2782,8 +2770,7 @@ INFO is a plist holding contextual information. See
(if (not destination) 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))
+ (org-export-get-reference destination info)
desc))))
;; Links pointing to a headline: Find destination and build
;; appropriate referencing command.
@@ -2804,9 +2791,10 @@ INFO is a plist holding contextual information. See
;; If there's a description, create a hyperlink.
;; Otherwise, try to provide a meaningful description.
(if (not desc) (org-odt-link--infer-description destination info)
- (let ((label (or (and (string= type "custom-id")
- (org-element-property :CUSTOM_ID destination))
- (org-export-get-headline-id destination info))))
+ (let ((label
+ (or (and (string= type "custom-id")
+ (org-element-property :CUSTOM_ID destination))
+ (org-export-get-reference destination info))))
(format
"<text:a xlink:type=\"simple\" xlink:href=\"#%s\">%s</text:a>"
label desc))))
@@ -2814,29 +2802,29 @@ INFO is a plist holding contextual information. See
(target
;; If there's a description, create a hyperlink.
;; Otherwise, try to provide a meaningful description.
- (let ((label (org-element-property :value destination)))
- (format "<text:a xlink:type=\"simple\" xlink:href=\"#%s\">%s</text:a>"
- (org-export-solidify-link-text label)
- (or desc (org-export-get-ordinal destination info)))))
+ (format "<text:a xlink:type=\"simple\" xlink:href=\"#%s\">%s</text:a>"
+ (org-export-get-reference destination info)
+ (or desc (org-export-get-ordinal destination info))))
;; Case 4: Fuzzy link points to some element (e.g., an
;; inline image, a math formula or a table).
(otherwise
(let ((label-reference
- (ignore-errors (org-odt-format-label
- destination info 'reference))))
- (cond ((not label-reference)
- (org-odt-link--infer-description destination info))
- ;; LINK has no description. Create
- ;; a cross-reference showing entity's sequence
- ;; number.
- ((not desc) label-reference)
- ;; LINK has description. Insert a hyperlink with
- ;; user-provided description.
- (t
- (let ((label (org-element-property :name destination)))
- (format "<text:a xlink:type=\"simple\" xlink:href=\"#%s\">%s</text:a>"
- (org-export-solidify-link-text label)
- desc)))))))))
+ (ignore-errors
+ (org-odt-format-label destination info 'reference))))
+ (cond
+ ((not label-reference)
+ (org-odt-link--infer-description destination info))
+ ;; LINK has no description. Create
+ ;; a cross-reference showing entity's sequence
+ ;; number.
+ ((not desc) label-reference)
+ ;; LINK has description. Insert a hyperlink with
+ ;; user-provided description.
+ (t
+ (format
+ "<text:a xlink:type=\"simple\" xlink:href=\"#%s\">%s</text:a>"
+ (org-export-get-reference destination info)
+ desc))))))))
;; Coderef: replace link with the reference name or the
;; equivalent line number.
((string= type "coderef")
@@ -3070,9 +3058,7 @@ holding contextual information."
"Transcode a RADIO-TARGET object from Org to ODT.
TEXT is the text of the target. INFO is a plist holding
contextual information."
- (org-odt--target
- text (org-export-solidify-link-text
- (org-element-property :value radio-target))))
+ (org-odt--target text (org-export-get-reference radio-target info)))
;;;; Special Block
@@ -3681,8 +3667,7 @@ pertaining to indentation here."
"Transcode a TARGET object from Org to ODT.
CONTENTS is nil. INFO is a plist holding contextual
information."
- (let ((value (org-element-property :value target)))
- (org-odt--target "" (org-export-solidify-link-text value))))
+ (org-odt--target "" (org-export-get-reference target info)))
;;;; Timestamp
diff --git a/lisp/ox-texinfo.el b/lisp/ox-texinfo.el
index 788cd40..ac7cbe3 100644
--- a/lisp/ox-texinfo.el
+++ b/lisp/ox-texinfo.el
@@ -459,11 +459,9 @@ anchor name is unique."
(or (cdr (assq blob cache))
(let ((name
(org-texinfo--sanitize-node
- (case (org-element-type blob)
- (headline
- (org-export-data (org-export-get-alt-title blob info) info))
- ((radio-target target) (org-element-property :value blob))
- (otherwise (or (org-element-property :name blob) ""))))))
+ (if (eq (org-element-type blob) 'headline)
+ (org-export-data (org-export-get-alt-title blob info) info)
+ (org-export-get-reference blob info)))))
;; Ensure NAME is unique.
(while (rassoc name cache) (setq name (concat name "x")))
(plist-put info :texinfo-node-cache (cons (cons blob name) cache))
@@ -1205,8 +1203,7 @@ holding contextual information."
TEXT is the text of the target. INFO is a plist holding
contextual information."
(format "@anchor{%s}%s"
- (org-export-solidify-link-text
- (org-element-property :value radio-target))
+ (org-export-get-reference radio-target info)
text))
;;;; Section
@@ -1345,8 +1342,7 @@ a communication channel."
"Transcode a TARGET object from Org to Texinfo.
CONTENTS is nil. INFO is a plist holding contextual
information."
- (format "@anchor{%s}"
- (org-export-solidify-link-text (org-element-property :value target))))
+ (format "@anchor{%s}" (org-export-get-reference target info)))
;;;; Timestamp