From ec8823bea50966be511deffb3c8192551ade1c99 Mon Sep 17 00:00:00 2001 From: Rick Frankel Date: Fri, 8 Mar 2013 19:00:21 -0500 Subject: [PATCH] Parameterize some html content containers * lisp/ox-html.el: (define-backend): Add :html-doctype and :html-container parameters. (org-html-doctype): New option for doctype declaration. (org-html-container-elemnt): New option for specifying the wrapper container element. (org-html-divs): Change to alist of three entries each containing a key ('preamble, 'content, 'postamble), an HTML element type and an id to allow setting container elements. (org-html--build-preamble): Modified to use `org-html-divs'. (org-html--build-postamble): Modified to use `org-html-divs'. (org-html-template): Modified to use doctype and container-element settings. --- lisp/ox-html.el | 80 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 61 insertions(+), 19 deletions(-) diff --git a/lisp/ox-html.el b/lisp/ox-html.el index c55be1299..c80753a72 100644 --- a/lisp/ox-html.el +++ b/lisp/ox-html.el @@ -113,6 +113,8 @@ (org-open-file (org-html-export-to-html nil s v b))))))) :options-alist ((:html-extension nil nil org-html-extension) + (:html-doctype "HTML_DOCTYPE" nil org-html-doctype) + (:html-container "HTML_CONTAINER" nil org-html-container-element) (:html-link-home "HTML_LINK_HOME" nil org-html-link-home) (:html-link-up "HTML_LINK_UP" nil org-html-link-up) (:html-mathjax "HTML_MATHJAX" nil "" space) @@ -859,19 +861,46 @@ Use utf-8 as the default value." :package-version '(Org . "8.0") :type 'coding-system) -(defcustom org-html-divs '("preamble" "content" "postamble") - "The name of the main divs for HTML export. -This is a list of three strings, the first one for the preamble -DIV, the second one for the content DIV and the third one for the -postamble DIV." +(defcustom org-html-doctype + "" + "Document type definition to use for exported HTML files. +Can be set with the in-buffer HTML_DOCTYPE property or for +publishing, with :html-doctype." :group 'org-export-html :version "24.4" :package-version '(Org . "8.0") - :type '(list - (string :tag " Div for the preamble:") - (string :tag " Div for the content:") - (string :tag "Div for the postamble:"))) + :type 'string) +(defcustom org-html-container-element "div" + "Container class to use for wrapping top level sections. +Can be set with the in-buffer HTML_CONTAINER property or for +publishing, with :html-container." + :group 'org-export-html + :version "24.4" + :package-version '(Org . "8.0") + :type 'string) + +(defcustom org-html-divs + '((preamble "div" "preamble") + (content "div" "content") + (postamble "div" "postamble")) + "Alist of the threed section elements for HTML export. +The car of each entry is one of 'preamble, 'content or 'postamble. +The cdrs of each entry are the ELEMENT_TYPE and ID for each +section of the exported document." + :group 'org-export-html + :version "24.4" + :package-version '(Org . "8.0") + :type '(list :greedy t + (list :tag "Preamble" + (const :format "" preamble) + (string :tag "element") (string :tag " id")) + (list :tag "Content" + (const :format "" content) + (string :tag "element") (string :tag " id")) + (list :tag "Postamble" (const :format "" postamble) + (string :tag " id") (string :tag "element")))) ;;;; Template :: Mathjax @@ -1482,9 +1511,11 @@ INFO is a plist used as a communication channel." `((?t . ,title) (?a . ,author) (?d . ,date) (?e . ,email)))))))) (when (org-string-nw-p preamble-contents) - (concat (format "
\n" (nth 0 org-html-divs)) + (concat (format "<%s id=\"%s\">\n" + (nth 1 (assq 'preamble org-html-divs)) + (nth 2 (assq 'preamble org-html-divs))) (org-element-normalize-string preamble-contents) - "
\n")))))) + (format "\n" (nth 1 (assq 'preamble org-html-divs))))))))) (defun org-html--build-postamble (info) "Return document postamble as a string, or nil. @@ -1534,9 +1565,11 @@ INFO is a plist used as a communication channel." (?v . ,html-validation-link))))))))) (when (org-string-nw-p postamble-contents) (concat - (format "
\n" (nth 2 org-html-divs)) + (format "<%s id=\"%s\">\n" + (nth 1 (assq 'postamble org-html-divs)) + (nth 2 (assq 'postamble org-html-divs))) (org-element-normalize-string postamble-contents) - "
\n")))))) + (format "\n" (nth 1 (assq 'postamble org-html-divs))))))))) (defun org-html-inner-template (contents info) "Return body of document string after HTML conversion. @@ -1571,8 +1604,8 @@ holding export options." (coding-system-get org-html-coding-system 'mime-charset)) "iso-8859-1")) "\n" - "\n" + (plist-get info :html-doctype) + "\n" (format "\n" (plist-get info :language) (plist-get info :language)) "\n" @@ -1590,12 +1623,15 @@ holding export options." ;; Preamble. (org-html--build-preamble info) ;; Document contents. - (format "
\n" (nth 1 org-html-divs)) + (format "<%s id=\"%s\">\n" + (nth 1 (assq 'content org-html-divs)) + (nth 2 (assq 'content org-html-divs))) ;; Document title. (let ((title (plist-get info :title))) (format "

%s

\n" (org-export-data (or title "") info))) contents - "
\n" + (format "\n" + (nth 1 (assq 'content org-html-divs))) ;; Postamble. (org-html--build-postamble info) ;; Closing document. @@ -2157,7 +2193,10 @@ holding contextual information." (extra-class (org-element-property :HTML_CONTAINER_CLASS headline)) (level1 (+ level (1- org-html-toplevel-hlevel))) (first-content (car (org-element-contents headline)))) - (format "
%s%s
\n" + (format "<%s id=\"%s\" class=\"%s\">%s%s\n" + (if (= 1 (org-export-get-relative-level headline info)) + (plist-get info :html-container) + "div") (format "outline-container-%s" (or (org-element-property :CUSTOM_ID headline) section-number)) @@ -2181,7 +2220,10 @@ holding contextual information." (if (not (eq (org-element-type first-content) 'section)) (concat (org-html-section first-content "" info) contents) - contents))))))) + contents) + (if (= 1 (org-export-get-relative-level headline info)) + (plist-get info :html-container) + "div"))))))) ;;;; Horizontal Rule