org-export: Secondary strings are transcoded with `org-export-data'

* contrib/lisp/org-export.el (org-export-transcoder): New function.
(org-export-data): Also export secondary strings.  Refactored.
(org-export-secondary-string): Remove function.
(org-export-expand): Fix code indentation.
(org-export-expand-macro): Use `org-export-data' instead of
`org-export-secondary-string'.
* contrib/lisp/org-e-ascii.el (org-e-ascii--build-title,
  org-e-ascii--build-caption, org-e-ascii--list-listings,
  org-e-ascii--list-tables, org-e-ascii--describe-links,
  org-e-ascii-template--document-title, org-e-ascii-inlinetask,
  org-e-ascii-item, org-e-ascii-link, org-e-ascii-quote-section,
  org-e-ascii--table-cell-width): Use `org-export-data' instead of
  `org-export-secondary-string'.
* contrib/lisp/org-e-html.el (org-e-html-footnote-section,
org-e-html--caption/label-string, org-e-html-meta-info,
org-e-html-preamble, org-e-html-template,
org-e-html-format-headline--wrap, org-e-html-headline,
org-e-html-item, org-e-html-link): Use `org-export-data' instead of
`org-export-secondary-string'.
* contrib/lisp/org-e-latex.el (org-e-latex--caption/label-string,
  org-e-latex-template, org-e-latex-footnote-reference,
  org-e-latex-headline, org-e-latex-inlinetask, org-e-latex-item,
  org-e-latex-link, org-e-latex-src-block): Use `org-export-data'
  instead of `org-export-secondary-string'.
* contrib/lisp/org-e-odt.el (org-e-odt-format-preamble,
  org-e-odt-format-label, org-e-odt-update-meta-file,
  org-e-odt--caption/label-string, org-e-odt-footnote-def,
  org-e-odt-format-headline--wrap, org-e-odt-headline, org-e-odt-item,
  org-e-odt-latex-environment, org-e-odt-link, org-e-odt-src-block):
  Use `org-export-data' instead of `org-export-secondary-string'.
This commit is contained in:
Nicolas Goaziou 2012-04-30 02:04:03 +02:00
parent 330257949d
commit 03813d9bc4
5 changed files with 196 additions and 259 deletions

View File

@ -62,7 +62,6 @@
(declare-function org-export-resolve-fuzzy-link "org-export" (link info))
(declare-function org-export-resolve-id-link "org-export" (link info))
(declare-function org-export-resolve-ref-link "org-export" (link info))
(declare-function org-export-secondary-string "org-export" (secondary info))
(declare-function
org-export-to-file "org-export"
(backend file &optional subtreep visible-only body-only ext-plist))
@ -584,13 +583,11 @@ title."
#'number-to-string
(org-export-get-headline-number element info) ".")
" ")))
(text (org-export-secondary-string
(org-element-property :title element) info))
(text (org-export-data (org-element-property :title element) info))
(todo
(and (plist-get info :with-todo-keywords)
(let ((todo (org-element-property :todo-keyword element)))
(and todo
(concat (org-export-secondary-string todo info) " ")))))
(and todo (concat (org-export-data todo info) " ")))))
(tags (and (not notags)
(plist-get info :with-tags)
(org-element-property :tags element)))
@ -643,8 +640,7 @@ keyword."
(org-e-ascii--fill-string
(format
title-fmt reference
(if (not caption) name
(org-export-secondary-string (car caption) info)))
(if (not caption) name (org-export-data (car caption) info)))
(org-e-ascii--current-text-width element info) info)))))
(defun org-e-ascii--build-toc (info &optional n keyword)
@ -709,9 +705,8 @@ generation. INFO is a plist used as a communication channel."
(org-e-ascii--fill-string
(let ((caption (org-element-property :caption src-block)))
(if (not caption) (org-element-property :name src-block)
(org-export-secondary-string
;; Use short name in priority, if available.
(or (cdr caption) (car caption)) info)))
(org-export-data (or (cdr caption) (car caption)) info)))
(- text-width (length initial-text)) info)
(length initial-text))))))
(org-export-collect-listings info) "\n")))))
@ -749,8 +744,7 @@ generation. INFO is a plist used as a communication channel."
(let ((caption (org-element-property :caption table)))
(if (not caption) (org-element-property :name table)
;; Use short name in priority, if available.
(org-export-secondary-string
(or (cdr caption) (car caption)) info)))
(org-export-data (or (cdr caption) (car caption)) info)))
(- text-width (length initial-text)) info)
(length initial-text))))))
(org-export-collect-tables info) "\n")))))
@ -809,7 +803,7 @@ channel."
(let ((type (org-element-property :type link))
(anchor (let ((desc (org-element-contents link)))
(if (not desc) (org-element-property :raw-link link)
(org-export-secondary-string desc info)))))
(org-export-data desc info)))))
(cond
;; Coderefs, radio links and fuzzy links are ignored.
((member type '("coderef" "radio" "fuzzy")) nil)
@ -847,12 +841,12 @@ channel."
"Return document title, as a string.
INFO is a plist used as a communication channel."
(let ((text-width org-e-ascii-text-width)
(title (org-export-secondary-string (plist-get info :title) info))
(title (org-export-data (plist-get info :title) info))
(author (and (plist-get info :with-author)
(let ((auth (plist-get info :author)))
(and auth (org-export-secondary-string auth info)))))
(and auth (org-export-data auth info)))))
(email (and (plist-get info :with-email)
(org-export-secondary-string (plist-get info :email) info)))
(org-export-data (plist-get info :email) info)))
(date (plist-get info :date)))
;; There are two types of title blocks depending on the presence
;; of a title to display.
@ -962,7 +956,7 @@ holding export options."
;; Fill paragraph once footnote ID is inserted in
;; order to have a correct length for first line.
(org-e-ascii--fill-string
(concat id (org-export-secondary-string def info))
(concat id (org-export-data def info))
text-width info))))))
definitions "\n\n"))))
;; 5. Creator. Ignore `comment' value as there are no comments in
@ -1227,13 +1221,10 @@ contextual information."
CONTENTS holds the contents of the block. INFO is a plist
holding contextual information."
(let ((width (org-e-ascii--current-text-width inlinetask info))
(title (org-export-secondary-string
(org-element-property :title inlinetask) info))
(title (org-export-data (org-element-property :title inlinetask) info))
(todo (and (plist-get info :with-todo-keywords)
(let ((todo (org-element-property
:todo-keyword inlinetask)))
(and todo
(org-export-secondary-string todo info)))))
(let ((todo (org-element-property :todo-keyword inlinetask)))
(and todo (org-export-data todo info)))))
(todo-type (org-element-property :todo-type inlinetask))
(tags (and (plist-get info :with-tags)
(org-element-property :tags inlinetask)))
@ -1289,10 +1280,8 @@ contextual information."
(org-list-bullet-string
(case (org-element-property :type (org-export-get-parent item info))
(descriptive
(concat
(org-export-secondary-string
(org-element-property :tag item) info)
": "))
(concat (org-export-data (org-element-property :tag item) info)
": "))
(ordered
;; Return correct number for ITEM, paying attention to
;; counters.
@ -1393,7 +1382,7 @@ INFO is a plist holding contextual information."
;; Do not apply a special syntax on radio links. Though, parse
;; and transcode path to have a proper display of contents.
((string= type "radio")
(org-export-secondary-string
(org-export-data
(org-element-parse-secondary-string
(org-element-property :path link)
(cdr (assq 'radio-target org-element-object-restrictions)))
@ -1520,9 +1509,8 @@ holding contextual information."
CONTENTS is nil. INFO is a plist holding contextual information."
(let ((width (org-e-ascii--current-text-width quote-section info))
(value
(org-export-secondary-string
(org-remove-indentation
(org-element-property :value quote-section))
(org-export-data
(org-remove-indentation (org-element-property :value quote-section))
info)))
(org-e-ascii--indent-string
value
@ -1663,11 +1651,13 @@ are ignored. "
(lambda (row)
(setq max-width
(max (length
(org-export-data
(elt (if specialp (car (org-element-contents row))
(org-element-contents row))
col)
info))
(mapconcat
(lambda (obj) (org-export-data obj info))
(org-element-contents
(elt (if specialp (car (org-element-contents row))
(org-element-contents row))
col))
""))
max-width))))
max-width)))

View File

@ -71,7 +71,6 @@
"org-export" (extension &optional subtreep pub-dir))
(declare-function org-export-resolve-coderef "org-export" (ref info))
(declare-function org-export-resolve-fuzzy-link "org-export" (link info))
(declare-function org-export-secondary-string "org-export" (secondary info))
(declare-function org-export-solidify-link-text "org-export" (s))
(declare-function
org-export-to-buffer "org-export"
@ -1364,8 +1363,7 @@ Replaces invalid characters with \"_\"."
(cons n (if (equal (org-element-type raw) 'org-data)
(org-trim (org-export-data raw info))
(format "<p>%s</p>"
(org-trim
(org-export-secondary-string raw info))))))))
(org-trim (org-export-data raw info))))))))
(when fn-alist
(org-e-html-format-footnotes-section
(nth 4 (or (assoc (plist-get info :language)
@ -1407,15 +1405,14 @@ For non-floats, see `org-e-html--wrap-label'."
;; Option caption format with short name.
((cdr caption)
(format "\\caption[%s]{%s%s}\n"
(org-export-secondary-string (cdr caption) info)
(org-export-data (cdr caption) info)
label-str
(org-export-secondary-string (car caption) info)))
(org-export-data (car caption) info)))
;; Standard caption format.
;; (t (format "\\caption{%s%s}\n"
;; label-str
;; (org-export-secondary-string (car caption) info)))
(t (org-export-secondary-string (car caption) info)))))
;; (org-export-data (car caption) info)))
(t (org-export-data (car caption) info)))))
(defun org-e-html--find-verb-separator (s)
"Return a character not used in string S.
@ -1454,10 +1451,10 @@ This function shouldn't be used for floats. See
;;; Template
(defun org-e-html-meta-info (info)
(let* ((title (org-export-secondary-string (plist-get info :title) info))
(let* ((title (org-export-data (plist-get info :title) info))
(author (and (plist-get info :with-author)
(let ((auth (plist-get info :author)))
(and auth (org-export-secondary-string auth info)))))
(and auth (org-export-data auth info)))))
(description (plist-get info :description))
(keywords (plist-get info :keywords)))
(concat
@ -1519,9 +1516,9 @@ This function shouldn't be used for floats. See
(defun org-e-html-preamble (info)
(when (plist-get info :html-preamble)
(let* ((title (org-export-secondary-string (plist-get info :title) info))
(let* ((title (org-export-data (plist-get info :title) info))
(date (org-e-html-format-date info))
(author (org-export-secondary-string (plist-get info :author) info))
(author (org-export-data (plist-get info :author) info))
(lang-words (or (assoc (plist-get info :language)
org-export-language-setup)
(assoc "en" org-export-language-setup)))
@ -1670,8 +1667,7 @@ original parsed data. INFO is a plist holding export options."
(nth 1 org-e-html-divs)))
;; document title
(format "
<h1 class=\"title\">%s</h1>\n" (org-export-secondary-string
(plist-get info :title) info))
<h1 class=\"title\">%s</h1>\n" (org-export-data (plist-get info :title) info))
;; table of contents
(let ((depth (plist-get info :with-toc)))
(when (wholenump depth) (org-e-html-toc depth info)))
@ -2031,15 +2027,12 @@ holding contextual information."
(mapconcat 'number-to-string
headline-number ".")))
(todo (and (plist-get info :with-todo-keywords)
(let ((todo (org-element-property
:todo-keyword headline)))
(and todo
(org-export-secondary-string todo info)))))
(let ((todo (org-element-property :todo-keyword headline)))
(and todo (org-export-data todo info)))))
(todo-type (and todo (org-element-property :todo-type headline)))
(priority (and (plist-get info :with-priority)
(org-element-property :priority headline)))
(text (org-export-secondary-string
(org-element-property :title headline) info))
(text (org-export-data (org-element-property :title headline) info))
(tags (and (plist-get info :with-tags)
(org-element-property :tags headline)))
(headline-label (concat "sec-" (mapconcat 'number-to-string
@ -2064,12 +2057,10 @@ CONTENTS holds the contents of the headline. INFO is a plist
holding contextual information."
(let* ((numberedp (org-export-numbered-headline-p headline info))
(level (org-export-get-relative-level headline info))
(text (org-export-secondary-string
(org-element-property :title headline) info))
(text (org-export-data (org-element-property :title headline) info))
(todo (and (plist-get info :with-todo-keywords)
(let ((todo (org-element-property
:todo-keyword headline)))
(and todo (org-export-secondary-string todo info)))))
(let ((todo (org-element-property :todo-keyword headline)))
(and todo (org-export-data todo info)))))
(todo-type (and todo (org-element-property :todo-type headline)))
(tags (and (plist-get info :with-tags)
(org-element-property :tags headline)))
@ -2237,7 +2228,7 @@ contextual information."
(counter (org-element-property :counter item))
(checkbox (org-element-property :checkbox item))
(tag (let ((tag (org-element-property :tag item)))
(and tag (org-export-secondary-string tag info)))))
(and tag (org-export-data tag info)))))
(org-e-html-format-list-item
contents type checkbox (or tag counter))))
@ -2453,7 +2444,7 @@ INFO is a plist holding contextual information. See
((string= type "radio")
(format "<a href=\"#%s\">%s</a>"
(org-export-solidify-link-text path)
(org-export-secondary-string
(org-export-data
(org-element-parse-secondary-string
path (org-element-restriction 'radio-target))
info)))
@ -2468,7 +2459,7 @@ INFO is a plist holding contextual information. See
('nil
(format "<i>%s</i>"
(or desc
(org-export-secondary-string
(org-export-data
(org-element-property :raw-link link) info))))
;; Fuzzy link points to an invisible target.
(keyword nil)
@ -2485,7 +2476,7 @@ INFO is a plist holding contextual information. See
(cond
(desc desc)
((plist-get info :section-numbers) section-no)
(t (org-export-secondary-string
(t (org-export-data
(org-element-property :title destination) info))))
(format "<a href=\"#%s\">%s</a>" label desc)))
;; Fuzzy link points to a target. Do as above.

View File

@ -71,7 +71,6 @@
"org-export" (extension &optional subtreep pub-dir))
(declare-function org-export-resolve-coderef "org-export" (ref info))
(declare-function org-export-resolve-fuzzy-link "org-export" (link info))
(declare-function org-export-secondary-string "org-export" (secondary info))
(declare-function org-export-solidify-link-text "org-export" (s))
(declare-function
org-export-to-buffer "org-export"
@ -746,13 +745,13 @@ For non-floats, see `org-e-latex--wrap-label'."
;; Option caption format with short name.
((cdr caption)
(format "\\caption[%s]{%s%s}\n"
(org-export-secondary-string (cdr caption) info)
(org-export-data (cdr caption) info)
label-str
(org-export-secondary-string (car caption) info)))
(org-export-data (car caption) info)))
;; Standard caption format.
(t (format "\\caption{%s%s}\n"
label-str
(org-export-secondary-string (car caption) info))))))
(org-export-data (car caption) info))))))
(defun org-e-latex--guess-inputenc (header)
"Set the coding system in inputenc to what the buffer is.
@ -858,7 +857,7 @@ See `org-e-latex-text-markup-alist' for details."
"Return complete document string after LaTeX conversion.
CONTENTS is the transcoded contents string. INFO is a plist
holding export options."
(let ((title (org-export-secondary-string (plist-get info :title) info)))
(let ((title (org-export-data (plist-get info :title) info)))
(concat
;; 1. Time-stamp.
(and (plist-get info :time-stamp-file)
@ -890,10 +889,9 @@ holding export options."
;; 5. Author.
(let ((author (and (plist-get info :with-author)
(let ((auth (plist-get info :author)))
(and auth (org-export-secondary-string auth info)))))
(and auth (org-export-data auth info)))))
(email (and (plist-get info :with-email)
(org-export-secondary-string
(plist-get info :email) info))))
(org-export-data (plist-get info :email) info))))
(cond ((and author email (not (string= "" email)))
(format "\\author{%s\\thanks{%s}}\n" author email))
(author (format "\\author{%s}\n" author))
@ -1138,10 +1136,7 @@ CONTENTS is nil. INFO is a plist holding contextual information."
"\\footnotetext[%s]{%s}"
(org-export-get-footnote-number ref info)
(org-trim
(funcall
(if (eq (org-element-property :type ref) 'inline)
'org-export-secondary-string
'org-export-data)
(org-export-data
(org-export-get-footnote-definition ref info) info))))
(funcall search-refs def) ""))))))))
@ -1178,12 +1173,11 @@ holding contextual information."
((= (length sec) 4)
(if numberedp (concat (car sec) "\n%s" (nth 1 sec))
(concat (nth 2 sec) "\n%s" (nth 3 sec)))))))
(text (org-export-secondary-string
(org-element-property :title headline) info))
(text (org-export-data (org-element-property :title headline) info))
(todo
(and (plist-get info :with-todo-keywords)
(let ((todo (org-element-property :todo-keyword headline)))
(and todo (org-export-secondary-string todo info)))))
(and todo (org-export-data todo info)))))
(todo-type (and todo (org-element-property :todo-type headline)))
(tags (and (plist-get info :with-tags)
(org-element-property :tags headline)))
@ -1297,13 +1291,10 @@ contextual information."
"Transcode an INLINETASK element from Org to LaTeX.
CONTENTS holds the contents of the block. INFO is a plist
holding contextual information."
(let ((title (org-export-secondary-string
(org-element-property :title inlinetask) info))
(let ((title (org-export-data (org-element-property :title inlinetask) info))
(todo (and (plist-get info :with-todo-keywords)
(let ((todo (org-element-property
:todo-keyword inlinetask)))
(and todo
(org-export-secondary-string todo info)))))
(let ((todo (org-element-property :todo-keyword inlinetask)))
(and todo (org-export-data todo info)))))
(todo-type (org-element-property :todo-type inlinetask))
(tags (and (plist-get info :with-tags)
(org-element-property :tags inlinetask)))
@ -1364,8 +1355,7 @@ contextual information."
((eq checkbox 'off) "$\\Box$ ")
((eq checkbox 'trans) "$\\boxminus$ "))))
(tag (let ((tag (org-element-property :tag item)))
(and tag
(format "[%s]" (org-export-secondary-string tag info))))))
(and tag (format "[%s]" (org-export-data tag info))))))
(concat counter "\\item" tag " " checkbox contents)))
@ -1535,7 +1525,7 @@ INFO is a plist holding contextual information. See
((string= type "radio")
(format "\\hyperref[%s]{%s}"
(org-export-solidify-link-text path)
(org-export-secondary-string
(org-export-data
(org-element-parse-secondary-string
path (cdr (assq 'radio-target org-element-object-restrictions)))
info)))
@ -1550,7 +1540,7 @@ INFO is a plist holding contextual information. See
('nil
(format "\\texttt{%s}"
(or desc
(org-export-secondary-string
(org-export-data
(org-element-property :raw-link link) info))))
;; Fuzzy link points to an invisible target.
(keyword nil)
@ -1569,7 +1559,7 @@ INFO is a plist holding contextual information. See
(format "\\ref{%s}" label)
(format "\\hyperref[%s]{%s}" label
(or desc
(org-export-secondary-string
(org-export-data
(org-element-property :title destination) info))))))
;; Fuzzy link points to a target. Do as above.
(otherwise
@ -1858,12 +1848,11 @@ contextual information."
(or (cadr (assq (intern lang) org-e-latex-listings-langs)) lang))
(caption-str
(when caption
(let ((main (org-export-secondary-string (car caption) info)))
(let ((main (org-export-data (car caption) info)))
(if (not (cdr caption)) (format "{%s}" main)
(format
"{[%s]%s}"
(org-export-secondary-string (cdr caption) info)
main))))))
(format "{[%s]%s}"
(org-export-data (cdr caption) info)
main))))))
(concat
;; Options.
(format "\\lstset{%s}\n"

View File

@ -47,10 +47,10 @@
;; progress. See org-html.el.
(defun org-e-odt-format-preamble (info)
(let* ((title (org-export-secondary-string (plist-get info :title) info))
(let* ((title (org-export-data (plist-get info :title) info))
(author (and (plist-get info :with-author)
(let ((auth (plist-get info :author)))
(and auth (org-export-secondary-string auth info)))))
(and auth (org-export-data auth info)))))
(date (plist-get info :date))
(iso-date (org-e-odt-format-date date))
(date (org-e-odt-format-date date "%d %b %Y"))
@ -859,10 +859,9 @@ ATTR is a string of other attributes of the a element."
(caption (org-element-property :caption caption-from))
(short-caption (cdr caption))
;; transcode captions.
(caption (and (car caption)
(org-export-secondary-string (car caption) info)))
(caption (and (car caption) (org-export-data (car caption) info)))
(short-caption (and short-caption
(org-export-secondary-string short-caption info))))
(org-export-data short-caption info))))
(when (or label caption)
(let* ((default-category
(cond
@ -1079,9 +1078,9 @@ ATTR is a string of other attributes of the a element."
(insert "\n</manifest:manifest>"))))
(defun org-e-odt-update-meta-file (info) ; FIXME opt-plist
(let ((title (org-export-secondary-string (plist-get info :title) info))
(let ((title (org-export-data (plist-get info :title) info))
(author (or (let ((auth (plist-get info :author)))
(and auth (org-export-secondary-string auth info))) ""))
(and auth (org-export-data auth info))) ""))
(date (org-e-odt-format-date (plist-get info :date)))
(email (plist-get info :email))
(keywords (plist-get info :keywords))
@ -1371,7 +1370,6 @@ formula file."
"org-export" (extension &optional subtreep pub-dir))
(declare-function org-export-resolve-coderef "org-export" (ref info))
(declare-function org-export-resolve-fuzzy-link "org-export" (link info))
(declare-function org-export-secondary-string "org-export" (secondary info))
(declare-function org-export-solidify-link-text "org-export" (s))
(declare-function
org-export-to-buffer "org-export"
@ -2743,15 +2741,14 @@ For non-floats, see `org-e-odt--wrap-label'."
;; Option caption format with short name.
((cdr caption)
(format "\\caption[%s]{%s%s}\n"
(org-export-secondary-string (cdr caption) info)
(org-export-data (cdr caption) info)
label-str
(org-export-secondary-string (car caption) info)))
(org-export-data (car caption) info)))
;; Standard caption format.
;; (t (format "\\caption{%s%s}\n"
;; label-str
;; (org-export-secondary-string (car caption) info)))
(t (org-export-secondary-string (car caption) info)))))
;; (org-export-data (car caption) info)))
(t (org-export-data (car caption) info)))))
(defun org-e-odt--find-verb-separator (s)
"Return a character not used in string S.
@ -3073,7 +3070,7 @@ CONTENTS is nil. INFO is a plist holding contextual information."
(if (equal (org-element-type raw) 'org-data)
(org-trim (org-export-data raw info)) ; fix paragraph style
(org-e-odt-format-stylized-paragraph
'footnote (org-trim (org-export-secondary-string raw info)))))
'footnote (org-trim (org-export-data raw info)))))
(defvar org-e-odt-footnote-separator
(org-e-odt-format-fontify "," 'superscript))
@ -3127,15 +3124,12 @@ holding contextual information."
(mapconcat 'number-to-string
headline-number ".")))
(todo (and (plist-get info :with-todo-keywords)
(let ((todo (org-element-property
:todo-keyword headline)))
(and todo
(org-export-secondary-string todo info)))))
(let ((todo (org-element-property :todo-keyword headline)))
(and todo (org-export-data todo info)))))
(todo-type (and todo (org-element-property :todo-type headline)))
(priority (and (plist-get info :with-priority)
(org-element-property :priority headline)))
(text (org-export-secondary-string
(org-element-property :title headline) info))
(text (org-export-data (org-element-property :title headline) info))
(tags (and (plist-get info :with-tags)
(org-element-property :tags headline)))
(headline-label (concat "sec-" (mapconcat 'number-to-string
@ -3161,8 +3155,7 @@ holding contextual information."
(let* ((numberedp (org-export-numbered-headline-p headline info))
;; Get level relative to current parsed data.
(level (org-export-get-relative-level headline info))
(text (org-export-secondary-string
(org-element-property :title headline) info))
(text (org-export-data (org-element-property :title headline) info))
;; Create the headline text.
(full-text (org-e-odt-format-headline--wrap headline info)))
(cond
@ -3300,7 +3293,7 @@ contextual information."
(counter (org-element-property :counter item))
(checkbox (org-element-property :checkbox item))
(tag (let ((tag (org-element-property :tag item)))
(and tag (org-export-secondary-string tag info)))))
(and tag (org-export-data tag info)))))
(org-e-odt-format-list-item
contents type checkbox (or tag counter))))
@ -3365,9 +3358,8 @@ CONTENTS is nil. INFO is a plist holding contextual information."
(processing-type (plist-get info :LaTeX-fragments))
(caption (org-element-property :caption latex-environment))
(short-caption (and (cdr caption)
(org-export-secondary-string (cdr caption) info)))
(caption (and (car caption)
(org-export-secondary-string (car caption) info)))
(org-export-data (cdr caption) info)))
(caption (and (car caption) (org-export-data (car caption) info)))
(label (org-element-property :name latex-environment))
(attr nil) ; FIXME
(label (org-element-property :name latex-environment)))
@ -3594,7 +3586,7 @@ INFO is a plist holding contextual information. See
;; display of the contents.
((string= type "radio")
(org-e-odt-format-internal-link
(org-export-secondary-string
(org-export-data
(org-element-parse-secondary-string
path (org-element-restriction 'radio-target))
info)
@ -3609,7 +3601,7 @@ INFO is a plist holding contextual information. See
;; Fuzzy link points nowhere.
('nil
(org-e-odt-format-fontify
(or desc (org-export-secondary-string
(or desc (org-export-data
(org-element-property :raw-link link) info))
'emphasis))
;; Fuzzy link points to an invisible target.
@ -3627,7 +3619,7 @@ INFO is a plist holding contextual information. See
(cond
(desc desc)
((plist-get info :section-numbers) section-no)
(t (org-export-secondary-string
(t (org-export-data
(org-element-property :title destination) info))))
(org-e-odt-format-internal-link desc label)))
;; Fuzzy link points to a target. Do as above.
@ -3871,14 +3863,13 @@ contextual information."
(let* ((lang (org-element-property :language src-block))
(caption (org-element-property :caption src-block))
(short-caption (and (cdr caption)
(org-export-secondary-string (cdr caption) info)))
(caption (and (car caption)
(org-export-secondary-string (car caption) info)))
(org-export-data (cdr caption) info)))
(caption (and (car caption) (org-export-data (car caption) info)))
(label (org-element-property :name src-block)))
;; FIXME: Handle caption
;; caption-str (when caption)
;; (main (org-export-secondary-string (car caption) info))
;; (secondary (org-export-secondary-string (cdr caption) info))
;; (main (org-export-data (car caption) info))
;; (secondary (org-export-data (cdr caption) info))
;; (caption-str (org-e-odt--caption/label-string caption label info))
(let* ((captions (org-e-odt-format-label src-block info 'definition))
(caption (car captions)) (short-caption (cdr captions)))

View File

@ -1535,13 +1535,9 @@ non-nil, is a list of tags marking a subtree as exportable."
;;
;; `org-export-data' reads a parse tree (obtained with, i.e.
;; `org-element-parse-buffer') and transcodes it into a specified
;; back-end output. It takes care of updating local properties,
;; filtering out elements or objects according to export options and
;; organizing the output blank lines and white space are preserved.
;;
;; Though, this function is inapropriate for secondary strings, which
;; require a fresh copy of the plist passed as INFO argument. Thus,
;; `org-export-secondary-string' is provided for that specific task.
;; back-end output. It takes care of filtering out elements or
;; objects according to export options and organizing the output blank
;; lines and white space are preserved.
;;
;; Internally, three functions handle the filtering of objects and
;; elements during the export. In particular,
@ -1551,122 +1547,106 @@ non-nil, is a list of tags marking a subtree as exportable."
;; `org-export-expand' transforms the others back into their original
;; shape.
(defun org-export-transcoder (blob info)
"Return appropriate transcoder for BLOB.
INFO is a plist containing export directives."
(let ((type (org-element-type blob)))
;; Return contents only for complete parse trees.
(if (eq type 'org-data) (lambda (blob contents info) contents)
(let ((transcoder
(intern (format "org-%s-%s" (plist-get info :back-end) type))))
(and (fboundp transcoder) transcoder)))))
(defun org-export-data (data info)
"Convert DATA into current back-end format.
DATA is a nested list as returned by `org-element-parse-buffer'.
INFO is a plist holding export options and also used as
a communication channel between elements when walking the nested
list.
DATA is a parse tree, an element or an object or a secondary
string. INFO is a plist holding export options.
Return transcoded string."
(mapconcat
;; BLOB can be an element, an object, a string, or nil.
(lambda (blob)
(cond
((not blob) nil)
;; BLOB is a string. Check if the optional transcoder for plain
;; text exists, and call it in that case. Otherwise, simply
;; return string. Also update INFO and call
;; `org-export-filter-plain-text-functions'.
((stringp blob)
(let ((transcoder (intern (format "org-%s-plain-text"
(plist-get info :back-end)))))
(org-export-filter-apply-functions
(plist-get info :filter-plain-text)
(if (fboundp transcoder) (funcall transcoder blob info) blob)
info)))
;; BLOB is an element or an object.
(t
(let* ((type (org-element-type blob))
;; 1. Determine the appropriate TRANSCODER.
(transcoder
(cond
;; 1.0 A full Org document is inserted.
((eq type 'org-data) 'identity)
;; 1.1. BLOB should be ignored.
((member blob (plist-get info :ignore-list)) nil)
;; 1.2. BLOB shouldn't be transcoded. Interpret it
;; back into Org syntax.
((not (org-export-interpret-p blob info)) 'org-export-expand)
;; 1.3. Else apply naming convention.
(t (let ((trans (intern (format "org-%s-%s"
(plist-get info :back-end)
type))))
(and (fboundp trans) trans)))))
;; 2. Compute CONTENTS of BLOB.
(contents
(cond
;; Case 0. No transcoder or no contents: ignore BLOB.
((or (not transcoder) (not (org-element-contents blob))) nil)
;; Case 1. Transparently export an Org document.
((eq type 'org-data) (org-export-data blob info))
;; Case 2. For a greater element.
((memq type org-element-greater-elements)
;; Ignore contents of an archived tree
;; when `:with-archived-trees' is `headline'.
(unless (and
(eq type 'headline)
(eq (plist-get info :with-archived-trees) 'headline)
(org-element-property :archivedp blob))
(org-element-normalize-string (org-export-data blob info))))
;; Case 3. For an element containing objects.
(t
(org-export-data
(org-element-normalize-contents
blob
;; When normalizing contents of the first paragraph
;; in an item or a footnote definition, ignore
;; first line's indentation: there is none and it
;; might be misleading.
(and (eq type 'paragraph)
(not (org-export-get-previous-element blob info))
(let ((parent (org-export-get-parent blob info)))
(memq (org-element-type parent)
'(footnote-definition item)))))
info))))
;; 3. Transcode BLOB into RESULTS string.
(results (cond
((not transcoder) nil)
((eq transcoder 'org-export-expand)
(org-export-data
`(org-data nil ,(funcall transcoder blob contents))
info))
(t (funcall transcoder blob contents info)))))
;; 4. Return results.
(cond
((not results) nil)
;; No filter for a full document.
((eq type 'org-data) results)
;; Otherwise, update INFO, append the same white space
;; between elements or objects as in the original buffer,
;; and call appropriate filters.
(t
(let ((results
(org-export-filter-apply-functions
(plist-get info (intern (format ":filter-%s" type)))
(let ((post-blank (org-element-property :post-blank blob)))
(if (memq type org-element-all-elements)
(concat (org-element-normalize-string results)
(make-string post-blank ?\n))
(concat results (make-string post-blank ? ))))
info)))
;; Eventually return string.
results)))))))
(org-element-contents data) ""))
(defun org-export-secondary-string (secondary info)
"Convert SECONDARY string into current back-end target format.
SECONDARY is a nested list as returned by
`org-element-parse-secondary-string'. INFO is a plist used as
a communication channel.
Return transcoded string."
;; Make SECONDARY acceptable for `org-export-data'.
(let ((s (if (listp secondary) secondary (list secondary))))
(org-export-data `(org-data nil ,@s) (copy-sequence info))))
(let* ((type (org-element-type data))
(results
(cond
;; Ignored element/object.
((member data (plist-get info :ignore-list)) nil)
;; Plain text.
((eq type 'plain-text)
(org-export-filter-apply-functions
(plist-get info :filter-plain-text)
(let ((transcoder (org-export-transcoder data info)))
(if transcoder (funcall transcoder data info) data))
info))
;; Uninterpreted element/object: change it back to Org
;; syntax.
((not (org-export-interpret-p data info))
(org-export-expand
data
(org-element-normalize-string
(mapconcat (lambda (blob) (org-export-data blob info))
(org-element-contents data)
""))))
;; Secondary string.
((not type)
(mapconcat (lambda (obj) (org-export-data obj info)) data ""))
;; Element/Object without contents or, as a special case,
;; headline with archive tag and archived trees restricted
;; to title only.
((or (not (org-element-contents data))
(and (eq type 'headline)
(eq (plist-get info :with-archived-trees) 'headline)
(org-element-property :archivedp data)))
(let ((transcoder (org-export-transcoder data info)))
(and (fboundp transcoder) (funcall transcoder data nil info))))
;; Element/Object with contents.
(t
(let ((transcoder (org-export-transcoder data info)))
(when transcoder
(let* ((greaterp (memq type org-element-greater-elements))
(objectp (and (not greaterp)
(memq type org-element-recursive-objects)))
(contents
(mapconcat
(lambda (element) (org-export-data element info))
(org-element-contents
(if (or greaterp objectp) data
;; Elements directly containing objects
;; must have their indentation normalized
;; first.
(org-element-normalize-contents
data
;; When normalizing contents of the first
;; paragraph in an item or a footnote
;; definition, ignore first line's
;; indentation: there is none and it
;; might be misleading.
(when (eq type 'paragraph)
(let ((parent (org-export-get-parent data info)))
(and (equal (car (org-element-contents parent))
data)
(memq (org-element-type parent)
'(footnote-definition item))))))))
"")))
(funcall transcoder data
(if greaterp (org-element-normalize-string contents)
contents)
info))))))))
(cond
((not results) nil)
((memq type '(org-data plain-text nil)) results)
;; Append the same white space between elements or objects as in
;; the original buffer, and call appropriate filters.
(t
(let ((results
(org-export-filter-apply-functions
(plist-get info (intern (format ":filter-%s" type)))
(let ((post-blank (org-element-property :post-blank data)))
(if (memq type org-element-all-elements)
(concat (org-element-normalize-string results)
(make-string post-blank ?\n))
(concat results (make-string post-blank ? ))))
info)))
;; Eventually return string.
results)))))
(defun org-export-interpret-p (blob info)
"Non-nil if element or object BLOB should be interpreted as Org syntax.
@ -1696,8 +1676,9 @@ a plist."
"Expand a parsed element or object to its original state.
BLOB is either an element or an object. CONTENTS is its
contents, as a string or nil."
(funcall (intern (format "org-element-%s-interpreter" (org-element-type blob)))
blob contents))
(funcall
(intern (format "org-element-%s-interpreter" (org-element-type blob)))
blob contents))
(defun org-export-ignore-element (element info)
"Add ELEMENT to `:ignore-list' in INFO.
@ -2571,10 +2552,8 @@ DATA is the parse tree from which definitions are collected.
INFO is the plist used as a communication channel.
Definitions are sorted by order of references. They either
appear as Org data (transcoded with `org-export-data') or as
a secondary string for inlined footnotes (transcoded with
`org-export-secondary-string'). Unreferenced definitions are
ignored."
appear as Org data or as a secondary string for inlined
footnotes. Unreferenced definitions are ignored."
(let (num-alist
(collect-fn
(function
@ -2944,12 +2923,9 @@ INFO is a plist holding export options."
(let* ((key (org-element-property :key macro))
(args (org-element-property :args macro))
;; User's macros are stored in the communication channel with
;; a ":macro-" prefix. If it's a string leave it as-is.
;; Otherwise, it's a secondary string that needs to be
;; expanded recursively.
(value
(let ((val (plist-get info (intern (format ":macro-%s" key)))))
(if (stringp val) val (org-export-secondary-string val info)))))
;; a ":macro-" prefix.
(value (org-export-data
(plist-get info (intern (format ":macro-%s" key))) val info)))
;; Replace arguments in VALUE.
(let ((s 0) n)
(while (string-match "\\$\\([0-9]+\\)" value s)