Jens Lechtenboerger <lech...@wi.uni-muenster.de> writes:
Currently the only element handled differently to
`org-html-encode-plain-text' is "author". I don't know why so I
don't
want to touch it.
I believe that was also the previous conclusion. However, as
this
is not documented, maybe now could be the chance to change this?
Hmm. Maybe, it sounds like some tests may be in order.
I must I admit that I do not fully understand your approach.
Why do you treat keywords and description differently (with
description in org-html-meta-tags and keywords in
org-html--build-meta-info)?
Ooops, that should have been in org-html-meta-tags as the rest
are.
[Fixed]
Why do you pass _title into the lambda expressions in
org-html-meta-tags when it is never used? Currently, the
variable
org-html-meta-tags does not seem user-friendly to me.
Title and author just seemed like the most likely useful
information for
customisation. It would be nice if it looked less boiler-plate-y,
but
I'm not sure what the best approach for that would be, and it's
already
miles better than the current.
If you have any ideas, please let me know.
Also, in org-html--build-meta-info you call
org-html-encode-plain-text with two arguments, but it just
accepts
one.
? No I don't.
Best wishes
Jens
Hope that clarifies things a bit,
Timothy.
------
Moved the keyword in with the rest.
From 889ae918aed267417825d565df9135221dae16b1 Mon Sep 17 00:00:00
2001
From: TEC <t...@tecosaur.com>
Subject: [PATCH] lisp/ox-html.el: make html meta func nicer
* lisp/ox-html.el (org-html--build-meta-info): Multi-line repeated
structure extracted to new function `org-html--build-meta-entry'.
The opportunity was taken to extract most metadata info to custom
variable `org-html-meta-tags', allowing for easy end-user
modification.
---
lisp/ox-html.el | 114
+++++++++++++++++++++++++++---------------------
1 file changed, 64 insertions(+), 50 deletions(-)
diff --git a/lisp/ox-html.el b/lisp/ox-html.el
index d2f24f5c6..46195b0e0 100644
--- a/lisp/ox-html.el
+++ b/lisp/ox-html.el
@@ -1425,6 +1425,31 @@ not be modified."
;;;; Template :: Styles
+(defcustom org-html-meta-tags
+ '((lambda (_title author _info)
+ (when (org-string-nw-p author)
+ (list "name" "author" author)))
+ (lambda (_title _author info)
+ (when (org-string-nw-p (plist-get info :description))
+ (list "name" "description"
+ (plist-get info :description))))
+ (lambda (_title _author info)
+ (when (org-string-nw-p (plist-get info :keywords))
+ (list "keywords" (plist-get info :keywords))))
+ ("name" "generator" "Org Mode"))
+ "A list of arguments to be passed to
`org-html--build-meta-entry'.
+Each argument can either be an list which is applied, or a
function which
+generates such a list with signature (TITLE AUTHOR INFO) where
TITLE and AUTHOR
+are strings, and INFO a communication plist."
+ :group 'org-export-html
+ :package-version '(Org . "9.5")
+ :type '(repeat
+ (choice
+ (list (string :tag "Meta label")
+ (string :tag "label value")
+ (string :tag "Content value"))
+ function)))
+
(defcustom org-html-head-include-default-style t
"Non-nil means include the default style in exported HTML
files.
The actual style is defined in `org-html-style-default' and
@@ -1835,23 +1860,31 @@ INFO is a plist used as a communication
channel."
;;; Template
+(defun org-html--build-meta-entry (label identity &optional
content-format &rest content-formatters)
+ "Construct <meta> tag with LABEL=\"IDENTITY\" and content from
CONTENT-FORMAT and CONTENT-FORMATTER."
+ (concat "<meta "
+ (format "%s=\"%s" label identity)
+ (when content-format
+ (concat "\" content=\""
+ (replace-regexp-in-string
+ "\"" """
+ (org-html-encode-plain-text
+ (if content-formatters
+ (apply #'format content-format content-formatters)
+ content-format)))))
+ "\" />\n"))
+
(defun org-html--build-meta-info (info)
"Return meta tags for exported document.
INFO is a plist used as a communication channel."
- (let* ((protect-string
- (lambda (str)
- (replace-regexp-in-string
- "\"" """ (org-html-encode-plain-text str))))
- (title (org-export-data (plist-get info :title) info))
+ (let* ((title (org-html-encode-plain-text (plist-get info
:title) info))
;; Set title to an invisible character instead of
leaving it
;; empty, which is invalid.
(title (if (org-string-nw-p title) title "‎"))
(author (and (plist-get info :with-author)
(let ((auth (plist-get info :author)))
- ;; Return raw Org syntax.
+ ;; Return raw Org syntax.
(and auth (org-element-interpret-data
auth)))))
- (description (plist-get info :description))
- (keywords (plist-get info :keywords))
(charset (or (and org-html-coding-system
(fboundp 'coding-system-get)
(coding-system-get
org-html-coding-system
@@ -1863,50 +1896,31 @@ INFO is a plist used as a communication
channel."
(concat "<!-- "
(plist-get info :html-metadata-timestamp-format)
" -->\n")))
- (format
- (if (org-html-html5-p info)
- (org-html-close-tag "meta" "charset=\"%s\"" info)
- (org-html-close-tag
- "meta" "http-equiv=\"Content-Type\"
content=\"text/html;charset=%s\""
- info))
- charset) "\n"
+
+ (if (org-html-html5-p info)
+ (org-html--build-meta-entry "charset" charset)
+ (org-html--build-meta-entry "http-equiv" "Content-Type"
+ (concat "text/html;charset=" charset)))
+
(let ((viewport-options
- (cl-remove-if-not (lambda (cell) (org-string-nw-p (cadr
cell)))
- (plist-get info :html-viewport))))
- (and viewport-options
- (concat
- (org-html-close-tag
- "meta"
- (format "name=\"viewport\" content=\"%s\""
- (mapconcat
- (lambda (elm) (format "%s=%s" (car elm) (cadr
elm)))
- viewport-options ", "))
- info)
- "\n")))
+ (cl-remove-if-not (lambda (cell) (org-string-nw-p
(cadr cell)))
+ (plist-get info :html-viewport))))
+ (if viewport-options
+ (org-html--build-meta-entry "name" "viewport"
+ (mapconcat
+ (lambda (elm) (format
"%s=%s" (car elm) (cadr elm)))
+ viewport-options ", "))))
+
(format "<title>%s</title>\n" title)
- (org-html-close-tag "meta" "name=\"generator\" content=\"Org
mode\"" info)
- "\n"
- (and (org-string-nw-p author)
- (concat
- (org-html-close-tag "meta"
- (format "name=\"author\" content=\"%s\""
- (funcall protect-string author))
- info)
- "\n"))
- (and (org-string-nw-p description)
- (concat
- (org-html-close-tag "meta"
- (format "name=\"description\" content=\"%s\"\n"
- (funcall protect-string description))
- info)
- "\n"))
- (and (org-string-nw-p keywords)
- (concat
- (org-html-close-tag "meta"
- (format "name=\"keywords\" content=\"%s\""
- (funcall protect-string keywords))
- info)
- "\n")))))
+
+ (apply #'concat
+ (mapcar
+ (lambda (form)
+ (when (functionp form)
+ (setq form (funcall form title author info)))
+ (when form
+ (apply #'org-html--build-meta-entry form)))
+ org-html-meta-tags)))))
(defun org-html--build-head (info)
"Return information for the <head>..</head> of the HTML output.
--
2.28.0