diff --git a/contrib/lisp/org-e-ascii.el b/contrib/lisp/org-e-ascii.el index d6bc1588c..dea440e9d 100644 --- a/contrib/lisp/org-e-ascii.el +++ b/contrib/lisp/org-e-ascii.el @@ -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))) diff --git a/contrib/lisp/org-e-html.el b/contrib/lisp/org-e-html.el index 20a7c67f3..88b354101 100644 --- a/contrib/lisp/org-e-html.el +++ b/contrib/lisp/org-e-html.el @@ -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 "

%s

" - (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 " -

%s

\n" (org-export-secondary-string - (plist-get info :title) info)) +

%s

\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 "%s" (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 "%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) @@ -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 "%s" label desc))) ;; Fuzzy link points to a target. Do as above. diff --git a/contrib/lisp/org-e-latex.el b/contrib/lisp/org-e-latex.el index a2d976fc6..70f8ae216 100644 --- a/contrib/lisp/org-e-latex.el +++ b/contrib/lisp/org-e-latex.el @@ -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" diff --git a/contrib/lisp/org-e-odt.el b/contrib/lisp/org-e-odt.el index f949f9e22..5a13309e6 100644 --- a/contrib/lisp/org-e-odt.el +++ b/contrib/lisp/org-e-odt.el @@ -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")))) (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))) diff --git a/contrib/lisp/org-export.el b/contrib/lisp/org-export.el index 5d57bab4d..25948fa25 100644 --- a/contrib/lisp/org-export.el +++ b/contrib/lisp/org-export.el @@ -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)