Rasmus <ras...@gmx.us> writes: > Hi, > > Eric Abrahamsen <e...@ericabrahamsen.net> writes: > >> Currently, if the global variable `org-html-html5-fancy' is t, some >> elements of HTML export will use fancy elements even when not exporting >> to HTML5 at all. >> >> Specifically, the TITLE of a document will be wrapped in <header> tags, >> even when exporting to XHTML4. I ran into this while making some epub >> files and the syntax checker barked at me. >> >> This patch fills out the check. There's growing redundancy in this file >> now -- if it seems desirable to have a `org-html-html5-fancy-p' function >> that encapsulates the paired checks, I'd be happy to provide that. > > Remind me, do we have a "non-fancy" HTML5 mode? > > I think it's better to introduce a new function to check if fancy HTML5. > This would make it easier to adhere to the docstring of > org-html-html5-fancy: > > "This variable is ignored for anything other than HTML5 export"
Yup, this was the problem. We do have "non-fancy" HTML5: just HTML5 without the use of any of the new elements like <header> or <nav>, which aren't currently handled right by all browsers. All the various options make for some fiddly conditionals, but I think it's worth it. Here's another patch with a new function. Thanks! Eric
>From d0150b8c34efb1086dd5b240b256b0cf1f053148 Mon Sep 17 00:00:00 2001 From: Eric Abrahamsen <e...@ericabrahamsen.net> Date: Tue, 18 Aug 2015 08:42:35 +0800 Subject: [PATCH] Add function to better guard html5 exports * lisp/ox-html.el (org-html-html5-fancy-p): New function. Check that we're exporting to HTML5, *and* that the user has requested fancy elements. (org-html--wrap-image, org-html-template, org-html-toc) (org-html-special-block): Use new function. --- lisp/ox-html.el | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/lisp/ox-html.el b/lisp/ox-html.el index bdcdeee..78c8e11 100644 --- a/lisp/ox-html.el +++ b/lisp/ox-html.el @@ -1473,6 +1473,10 @@ CSS classes, then this prefix can be very useful." (let ((dt (downcase (plist-get info :html-doctype)))) (member dt '("html5" "xhtml5" "<!doctype html>")))) +(defun org-html-html5-fancy-p (info) + (and (plist-get info :html-html5-fancy) + (org-html-html5-p info))) + (defun org-html-close-tag (tag attr info) (concat "<" tag " " attr (if (org-html-xhtml-p info) " />" ">"))) @@ -1503,8 +1507,7 @@ attributes with a nil value will be omitted from the result." INFO is a plist used as a communication channel. When optional arguments CAPTION and LABEL are given, use them for caption and \"id\" attribute." - (let ((html5-fancy (and (org-html-html5-p info) - (plist-get info :html-html5-fancy)))) + (let ((html5-fancy (org-html-html5-fancy-p info))) (format (if html5-fancy "\n<figure%s>%s%s\n</figure>" "\n<div%s class=\"figure\">%s%s\n</div>") ;; ID. @@ -1929,16 +1932,17 @@ holding export options." ;; Document title. (when (plist-get info :with-title) (let ((title (plist-get info :title)) - (subtitle (plist-get info :subtitle))) + (subtitle (plist-get info :subtitle)) + (html5-fancy (org-html-html5-fancy-p info))) (when title (format - (if (plist-get info :html-html5-fancy) + (if html5-fancy "<header>\n<h1 class=\"title\">%s</h1>\n%s</header>" "<h1 class=\"title\">%s%s</h1>\n") (org-export-data title info) (if subtitle (format - (if (plist-get info :html-html5-fancy) + (if html5-fancy "<p class=\"subtitle\">%s</p>\n" "\n<br>\n<span class=\"subtitle\">%s</span>\n") (org-export-data subtitle info)) @@ -2133,8 +2137,7 @@ of contents as a string, or nil if it is empty." (org-html--toc-text toc-entries) "</div>\n"))) (if scope toc - (let ((outer-tag (if (and (org-html-html5-p info) - (plist-get info :html-html5-fancy)) + (let ((outer-tag (if (org-html-html5-fancy-p info) "nav" "div"))) (concat (format "<%s id=\"table-of-contents\">\n" outer-tag) @@ -3181,8 +3184,7 @@ CONTENTS holds the contents of the block. INFO is a plist holding contextual information." (let* ((block-type (org-element-property :type special-block)) (contents (or contents "")) - (html5-fancy (and (org-html-html5-p info) - (plist-get info :html-html5-fancy) + (html5-fancy (and (org-html-html5-fancy-p info) (member block-type org-html-html5-elements))) (attributes (org-export-read-attribute :attr_html special-block))) (unless html5-fancy -- 2.5.0