From 3fdc205a549fe315b3096afb72a87868ef9c57d5 Mon Sep 17 00:00:00 2001 From: TEC Date: Mon, 14 Dec 2020 17:50:15 +0800 Subject: [PATCH 2/2] lisp/ox-html.el: make html meta tags customizable * lisp/ox-html.el (org-html-meta-tags): Introduce this as a new option which can be modified to set the meta tags added in HTML exports. (org-html--build-meta-info): Make use of `org-html-meta-tags' instead of hardcoded meta tags. This is leveraging the earlier restructuring of `org-html--build-meta-info' into a much DRYer form, such that this modification has a negligible impact on complexity and readability. --- lisp/ox-html.el | 47 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/lisp/ox-html.el b/lisp/ox-html.el index 005703f60..6a74cdca8 100644 --- a/lisp/ox-html.el +++ b/lisp/ox-html.el @@ -1425,6 +1425,22 @@ not be modified." ;;;; Template :: Styles +(defcustom org-html-meta-tags #'org-html-meta-tags-default + "A list where each item is a list of arguments to be passed +to `org-html--build-meta-entry'. Any nil items are ignored. + +Also accept a function which gives such a list when called with 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 '(choice + (repeat + (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,6 +1851,22 @@ INFO is a plist used as a communication channel." ;;; Template +(defun org-html-meta-tags-default (_title author info) + "Generate a list items, each of which is a list of arguments that can +be passed to `org-html--build-meta-entry', to generate meta tags to be +included in the HTML head. + +The documents's TITLE, AUTHOR, and communication plist INFO may be used." + (list + (when (org-string-nw-p author) + (list "name" "author" author)) + (when (org-string-nw-p (plist-get info :description)) + (list "name" "description" + (plist-get info :description))) + (when (org-string-nw-p (plist-get info :keywords)) + (list "name" "keywords" (plist-get info :keywords))) + '("name" "generator" "Org Mode"))) + (defun org-html--build-meta-entry (label identity &optional content-format &rest content-formatters) "Construct tag of form , or when CONTENT-FORMAT is present: @@ -1895,16 +1927,11 @@ INFO is a plist used as a communication channel." (format "%s\n" title) - (when (org-string-nw-p author) - (org-html--build-meta-entry "name" "author" author)) - - (when (org-string-nw-p (plist-get info :description)) - (org-html--build-meta-entry "name" "description" (plist-get info :description))) - - (when (org-string-nw-p (plist-get info :keywords)) - (org-html--build-meta-entry "keywords" (plist-get info :keywords))) - - (org-html--build-meta-entry "name" "generator" "Org Mode")))) + (mapconcat + (lambda (args) (apply #'org-html--build-meta-entry args)) + (delq nil (if (functionp org-html-meta-tags) + (funcall org-html-meta-tags title author info) + org-html-meta-tags)) "")))) (defun org-html--build-head (info) "Return information for the .. of the HTML output. -- 2.29.2