emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [New Exporter] Parameterized wrapper elements
@ 2013-03-09  0:17 Rick Frankel
  2013-03-09  0:46 ` Nicolas Goaziou
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Rick Frankel @ 2013-03-09  0:17 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 504 bytes --]

(cc'ing list)

Nicolas-

The patch Jambunathan sent didn't really make much sense to me, as it
didn't provide any added functionality over simply subclassing
(deriving) from the current html exporter.

Anyway, attached is a patch which parameterizes the html exporter in a
way which is useful (for me :) in deriving new backends. It also make
the exporter more capable of generating HTML5 compatible output
instead of just XHTML.

If you agree with it, i would be happy to apply it (or you can :).

rick

[-- Attachment #2: 0001-Parameterize-some-html-content-containers.patch --]
[-- Type: text/plain, Size: 6603 bytes --]

From 01640c5a9f0d4957a0289a9dfc0497f5b7d42bd9 Mon Sep 17 00:00:00 2001
From: Rick Frankel <rick@rickster.com>
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 customization variable for doctype
declaration.
(org-html-container-elemnt): New customization variable for specifying
wrapper container element.
(org-html-div): Change to list of pairs id, element type to allow
setting container element.
(org-html--build-preamble): Modified to use new org-html-div settings.
(org-html--build-postamble): Modified to use new org-html-div settings.
(org-html-template): Modified to use doctype and container-element
settings.
---
 lisp/ox-html.el | 76 ++++++++++++++++++++++++++++++++++++++++++---------------
 1 file changed, 57 insertions(+), 19 deletions(-)

diff --git a/lisp/ox-html.el b/lisp/ox-html.el
index 829fe28..a971440 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,44 @@ 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
+  "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"
+    \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"
+  "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 in
+the exported html file. 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")
+    ("content"   "div")
+    ("postamble" "div"))
+  "Alist of the main divs for HTML export.
+This is a list of three pairs, ID and ELEMENT, the first one
+for the preamble, the second one for the content and the
+third one for the postamble."
+  :group 'org-export-html
+  :version "24.4"
+  :package-version '(Org . "8.0")
+  :type '(list
+	  (list :tag "Preamble"
+		(string :tag "     id") (string :tag "element"))
+	  (list :tag "Content"
+		(string :tag "     id") (string :tag "element"))
+	  (list :tag "Postamble"
+		(string :tag "     id") (string :tag "element"))))
 
 ;;;; Template :: Mathjax
 
@@ -1482,9 +1509,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 "<div id=\"%s\">\n" (nth 0 org-html-divs))
+	  (concat (format "<%s id=\"%s\">\n"
+			  (nth 1 (nth 0 org-html-divs))
+			  (nth 0 (nth 0 org-html-divs)))
 		  (org-element-normalize-string preamble-contents)
-		  "</div>\n"))))))
+		  (format "</%s>\n" (nth 1 (nth 0 org-html-divs)))))))))
 
 (defun org-html--build-postamble (info)
   "Return document postamble as a string, or nil.
@@ -1534,9 +1563,11 @@ INFO is a plist used as a communication channel."
 			     (?v . ,html-validation-link)))))))))
 	(when (org-string-nw-p postamble-contents)
 	  (concat
-	   (format "<div id=\"%s\">\n" (nth 2 org-html-divs))
+	   (format "<%s id=\"%s\">\n"
+		   (nth 1 (nth 2 org-html-divs))
+		   (nth 0 (nth 2 org-html-divs)))
 	   (org-element-normalize-string postamble-contents)
-	   "</div>\n"))))))
+	   (format "</%s>\n" (nth 1 (nth 2 org-html-divs)))))))))
 
 (defun org-html-inner-template (contents info)
   "Return body of document string after HTML conversion.
@@ -1571,8 +1602,8 @@ holding export options."
 	     (coding-system-get org-html-coding-system 'mime-charset))
 	"iso-8859-1"))
    "\n"
-   "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"
-	       \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"
+   (plist-get info :html-doctype)
+   "\n"
    (format "<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"%s\" xml:lang=\"%s\">\n"
 	   (plist-get info :language) (plist-get info :language))
    "<head>\n"
@@ -1590,12 +1621,14 @@ holding export options."
    ;; Preamble.
    (org-html--build-preamble info)
    ;; Document contents.
-   (format "<div id=\"%s\">\n" (nth 1 org-html-divs))
+   (format "<%s id=\"%s\">\n"
+	   (nth 1 (nth 1 org-html-divs))
+	   (nth 0 (nth 1 org-html-divs)))
    ;; Document title.
    (let ((title (plist-get info :title)))
      (format "<h1 class=\"title\">%s</h1>\n" (org-export-data (or title "") info)))
    contents
-   "</div>\n"
+   (format "</%s>\n" (nth 1 (nth 1 org-html-divs)))
    ;; Postamble.
    (org-html--build-postamble info)
    ;; Closing document.
@@ -2157,7 +2190,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 "<div id=\"%s\" class=\"%s\">%s%s</div>\n"
+	(format "<%s id=\"%s\" class=\"%s\">%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 +2217,9 @@ 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))))))))
 
 
 ;;;; Horizontal Rule
-- 
1.8.1.5


^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2013-03-09 17:16 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-03-09  0:17 [New Exporter] Parameterized wrapper elements Rick Frankel
2013-03-09  0:46 ` Nicolas Goaziou
2013-03-09 16:07   ` Rick Frankel
2013-03-09  2:33 ` Jambunathan K
2013-03-09  9:32 ` Bastien
2013-03-09 16:39   ` Rick Frankel
2013-03-09 17:15     ` Jambunathan K

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).