forked from mirrors/org-mode
ox-org: Improve keyword handling
* lisp/ox-org.el (org-org-template): New function. (org-org-keyword): Handle document keywords specially.
This commit is contained in:
parent
73d60606bd
commit
38a2bd3783
|
@ -87,6 +87,7 @@ setting of `org-html-htmlize-output-type' is 'css."
|
||||||
(line-break . org-org-identity)
|
(line-break . org-org-identity)
|
||||||
(link . org-org-identity)
|
(link . org-org-identity)
|
||||||
(node-property . org-org-identity)
|
(node-property . org-org-identity)
|
||||||
|
(template . org-org-template)
|
||||||
(paragraph . org-org-identity)
|
(paragraph . org-org-identity)
|
||||||
(plain-list . org-org-identity)
|
(plain-list . org-org-identity)
|
||||||
(planning . 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.
|
"Transcode KEYWORD element back into Org syntax.
|
||||||
CONTENTS is nil. INFO is ignored. This function ignores
|
CONTENTS is nil. INFO is ignored. This function ignores
|
||||||
keywords targeted at other export back-ends."
|
keywords targeted at other export back-ends."
|
||||||
(unless (member (org-element-property :key keyword)
|
(let ((key (org-element-property :key keyword)))
|
||||||
(mapcar
|
(unless (or (member key
|
||||||
(lambda (block-cons)
|
(mapcar
|
||||||
(and (eq (cdr block-cons) 'org-element-export-block-parser)
|
(lambda (block-cons)
|
||||||
(car block-cons)))
|
(and (eq (cdr block-cons)
|
||||||
org-element-block-name-alist))
|
'org-element-export-block-parser)
|
||||||
(org-element-keyword-interpreter keyword nil)))
|
(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
|
;;;###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.
|
"Export current buffer to an Org buffer.
|
||||||
|
|
||||||
If narrowing is active in the current buffer, only export its
|
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
|
When optional argument VISIBLE-ONLY is non-nil, don't export
|
||||||
contents of hidden elements.
|
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
|
EXT-PLIST, when provided, is a property list with external
|
||||||
parameters overriding Org default settings, but still inferior to
|
parameters overriding Org default settings, but still inferior to
|
||||||
file-local settings.
|
file-local settings.
|
||||||
|
@ -177,10 +219,11 @@ be displayed when `org-export-show-temporary-export-buffer' is
|
||||||
non-nil."
|
non-nil."
|
||||||
(interactive)
|
(interactive)
|
||||||
(org-export-to-buffer 'org "*Org ORG Export*"
|
(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
|
;;;###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.
|
"Export current buffer to an org file.
|
||||||
|
|
||||||
If narrowing is active in the current buffer, only export its
|
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
|
When optional argument VISIBLE-ONLY is non-nil, don't export
|
||||||
contents of hidden elements.
|
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
|
EXT-PLIST, when provided, is a property list with external
|
||||||
parameters overriding Org default settings, but still inferior to
|
parameters overriding Org default settings, but still inferior to
|
||||||
file-local settings.
|
file-local settings.
|
||||||
|
|
Loading…
Reference in New Issue