diff --git a/lisp/ox-org.el b/lisp/ox-org.el index cecad5632..8601f8b34 100644 --- a/lisp/ox-org.el +++ b/lisp/ox-org.el @@ -87,6 +87,7 @@ setting of `org-html-htmlize-output-type' is 'css." (line-break . org-org-identity) (link . org-org-identity) (node-property . org-org-identity) + (template . org-org-template) (paragraph . org-org-identity) (plain-list . org-org-identity) (planning . org-org-identity) @@ -140,16 +141,54 @@ CONTENTS is its contents, as a string or nil. INFO is ignored." "Transcode KEYWORD element back into Org syntax. CONTENTS is nil. INFO is ignored. This function ignores keywords targeted at other export back-ends." - (unless (member (org-element-property :key keyword) - (mapcar - (lambda (block-cons) - (and (eq (cdr block-cons) 'org-element-export-block-parser) - (car block-cons))) - org-element-block-name-alist)) - (org-element-keyword-interpreter keyword nil))) + (let ((key (org-element-property :key keyword))) + (unless (or (member key + (mapcar + (lambda (block-cons) + (and (eq (cdr block-cons) + 'org-element-export-block-parser) + (car block-cons))) + org-element-block-name-alist)) + (member key + '("AUTHOR" "CREATOR" "DATE" "DESCRIPTION" "EMAIL" + "KEYWORDS" "TITLE"))) + (org-element-keyword-interpreter keyword nil)))) + +(defun org-org-template (contents info) + "Return Org document template with document keywords. +CONTENTS is the transcoded contents string. INFO is a plist used +as a communication channel." + (concat + (and (plist-get info :time-stamp-file) + (format-time-string "# Created %Y-%m-%d %a %H:%M\n")) + (format "#+TITLE: %s\n" (org-export-data (plist-get info :title) info)) + (and (plist-get info :with-date) + (let ((date (org-export-data (org-export-get-date info) info))) + (and (org-string-nw-p date) + (format "#+DATE: %s\n" date)))) + (and (plist-get info :with-author) + (let ((author (org-export-data (plist-get info :author) info))) + (and (org-string-nw-p author) + (format "#+AUTHOR: %s\n" author)))) + (and (plist-get info :with-email) + (let ((email (org-export-data (plist-get info :email) info))) + (and (org-string-nw-p email) + (format "#+EMAIL: %s\n" email)))) + (and (eq (plist-get info :with-creator) t) + (org-string-nw-p (plist-get info :creator)) + (format "#+CREATOR: %s\n" (plist-get info :creator))) + (and (org-string-nw-p (plist-get info :keywords)) + (format "#+KEYWORDS: %s\n" (plist-get info :keywords))) + (and (org-string-nw-p (plist-get info :description)) + (format "#+DESCRIPTION: %s\n" (plist-get info :description))) + contents + (and (eq (plist-get info :with-creator) 'comment) + (org-string-nw-p (plist-get info :creator)) + (format "\n# %s\n" (plist-get info :creator))))) ;;;###autoload -(defun org-org-export-as-org (&optional async subtreep visible-only ext-plist) +(defun org-org-export-as-org + (&optional async subtreep visible-only body-only ext-plist) "Export current buffer to an Org buffer. If narrowing is active in the current buffer, only export its @@ -168,6 +207,9 @@ first. When optional argument VISIBLE-ONLY is non-nil, don't export contents of hidden elements. +When optional argument BODY-ONLY is non-nil, strip document +keywords from output. + EXT-PLIST, when provided, is a property list with external parameters overriding Org default settings, but still inferior to file-local settings. @@ -177,10 +219,11 @@ be displayed when `org-export-show-temporary-export-buffer' is non-nil." (interactive) (org-export-to-buffer 'org "*Org ORG Export*" - async subtreep visible-only nil ext-plist (lambda () (org-mode)))) + async subtreep visible-only body-only ext-plist (lambda () (org-mode)))) ;;;###autoload -(defun org-org-export-to-org (&optional async subtreep visible-only ext-plist) +(defun org-org-export-to-org + (&optional async subtreep visible-only body-only ext-plist) "Export current buffer to an org file. If narrowing is active in the current buffer, only export its @@ -199,6 +242,9 @@ first. When optional argument VISIBLE-ONLY is non-nil, don't export contents of hidden elements. +When optional argument BODY-ONLY is non-nil, strip document +keywords from output. + EXT-PLIST, when provided, is a property list with external parameters overriding Org default settings, but still inferior to file-local settings.