From efd1d46bc3c92e8821cf6156eaf6910444381e02 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Fri, 29 Mar 2013 23:09:11 +0100 Subject: [PATCH] ox-odt: Fix export of footnotes outside subtree during subtree export * etc/styles/OrgOdtStyles.xml: Define "OrgFootnoteCenter" and "OrgFootnoteQuotations" styles. * lisp/ox-odt.el (org-odt--format-paragraph): New function. (org-odt-paragraph): Use new function to limit code duplication. (org-odt-footnote-reference): Change default style for paragraphs when transcoding a footnote definition. --- etc/styles/OrgOdtStyles.xml | 6 ++++++ lisp/ox-odt.el | 46 +++++++++++++++++++++++++++++++-------------- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/etc/styles/OrgOdtStyles.xml b/etc/styles/OrgOdtStyles.xml index 26d05f1..f41d984 100644 --- a/etc/styles/OrgOdtStyles.xml +++ b/etc/styles/OrgOdtStyles.xml @@ -256,6 +256,9 @@ + + + @@ -298,6 +301,9 @@ + + + diff --git a/lisp/ox-odt.el b/lisp/ox-odt.el index 9dd8946..250aa33 100644 --- a/lisp/ox-odt.el +++ b/lisp/ox-odt.el @@ -1750,9 +1750,17 @@ CONTENTS is nil. INFO is a plist holding contextual information." ;; Inline definitions are secondary strings. ;; Non-inline footnotes definitions are full Org data. (t - (let* ((raw (org-export-get-footnote-definition footnote-reference - info)) - (def (let ((def (org-trim (org-export-data raw info)))) + (let* ((raw (org-export-get-footnote-definition + footnote-reference info)) + (translations + (cons (cons 'paragraph + (lambda (p c i) + (org-odt--format-paragraph + p c "Footnote" "OrgFootnoteCenter" + "OrgFootnoteQuotations"))) + (org-export-backend-translate-table 'odt))) + (def (let ((def (org-trim (org-export-data-with-translations + raw translations info)))) (if (eq (org-element-type raw) 'org-data) def (format "\n%s" "Footnote" def))))) @@ -2872,27 +2880,37 @@ INFO is a plist holding contextual information. See ;;;; Paragraph -(defun org-odt-paragraph (paragraph contents info) - "Transcode a PARAGRAPH element from Org to ODT. -CONTENTS is the contents of the paragraph, as a string. INFO is -the plist used as a communication channel." +(defun org-odt--format-paragraph (paragraph contents default center quote) + "Format paragraph according to given styles. +PARAGRAPH is a paragraph type element. CONTENTS is the +transcoded contents of that paragraph, as a string. DEFAULT, +CENTER and QUOTE are, respectively, style to use when paragraph +belongs to no special environment, a center block, or a quote +block." (let* ((parent (org-export-get-parent paragraph)) (parent-type (org-element-type parent)) (style (case parent-type - (quote-block "Quotations") - (center-block "OrgCenter") - (footnote-definition "Footnote") - (t (or (org-element-property :style paragraph) - "Text_20_body"))))) + (quote-block quote) + (center-block center) + (t default)))) ;; If this paragraph is a leading paragraph in an item and the ;; item has a checkbox, splice the checkbox and paragraph contents ;; together. (when (and (eq (org-element-type parent) 'item) - (eq paragraph (car (org-element-contents parent)))) + (eq paragraph (car (org-element-contents parent)))) (setq contents (concat (org-odt--checkbox parent) contents))) - (assert style) (format "\n%s" style contents))) +(defun org-odt-paragraph (paragraph contents info) + "Transcode a PARAGRAPH element from Org to ODT. +CONTENTS is the contents of the paragraph, as a string. INFO is +the plist used as a communication channel." + (org-odt--format-paragraph + paragraph contents + (or (org-element-property :style paragraph) "Text_20_body") + "OrgCenter" + "Quotations")) + ;;;; Plain List -- 1.8.2