* Attributes on HTML tables? @ 2013-04-07 2:55 François Pinard 2013-04-07 6:27 ` Bastien 0 siblings, 1 reply; 27+ messages in thread From: François Pinard @ 2013-04-07 2:55 UTC (permalink / raw) To: emacs-orgmode Hi, Org people. I took a few hours today to move the Org generation for a few of my Web pages to the new exporter, and after a bit of debugging to understand how some changes were meant, got the impression that it mainly works! I'll have to wander around when I'll find some more free time, looking at the generated pages, to check that everything is OK. There is one little thing that does not seem to work, but I do not remember if it worked with the old exporter. The Org manual says: 12.5.5 Tables ------------- Org mode tables are exported to HTML using the table tag defined in `org-html-table-tag'. The default setting makes tables without cell borders and frame. If you would like to change this for individual tables, place something like the following before the table: #+CAPTION: This is a table with lines around and between cells #+ATTR_HTML: border="2" rules="all" frame="border" Captions work indeed, but I do not see that attributes are transported on the generated <table ...> element. It seems to be always produced with the exact value of org-html-table-tag. François ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-07 2:55 Attributes on HTML tables? François Pinard @ 2013-04-07 6:27 ` Bastien 2013-04-07 14:42 ` Christian Moe 0 siblings, 1 reply; 27+ messages in thread From: Bastien @ 2013-04-07 6:27 UTC (permalink / raw) To: François Pinard; +Cc: emacs-orgmode Hi François, François Pinard <pinard@iro.umontreal.ca> writes: > #+CAPTION: This is a table with lines around and between cells > #+ATTR_HTML: border="2" rules="all" frame="border" You need to use :options now: #+CAPTION: This is a table with lines around and between cells #+ATTR_HTML: :options border="2" rules="all" frame="border" We are in the process of documenting this. -- Bastien ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-07 6:27 ` Bastien @ 2013-04-07 14:42 ` Christian Moe 2013-04-07 18:46 ` Nicolas Goaziou 0 siblings, 1 reply; 27+ messages in thread From: Christian Moe @ 2013-04-07 14:42 UTC (permalink / raw) To: Bastien; +Cc: François Pinard, emacs-orgmode Bastien writes: > You need to use :options now: > > #+CAPTION: This is a table with lines around and between cells > #+ATTR_HTML: :options border="2" rules="all" frame="border" Oddly, this doesn't work for me at the moment. I'm running release_8.0-pre-344-g882454, pulled this morning. (It /could/ be just me; I seem to have some unresolved installation issues.) When I export, both the defaults /and/ the "options" are applied, resulting in duplicated attributes, like this: <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides" border="2" rules="all" frame="border"> and on Firefox, at least, the values defined the second time are ignored. The documentation currently up on Worg (http://orgmode.org/worg/org-8.0.html#sec-8-3), which seems to say we should now use plists for HTML attributes. But that currently doesn't work for me either. Sorry if you've heard this before, but this doesn't make sense to me as a new syntax: #+ATTR_HTML: :options attribute="value" It's not just more verbose than the old way, it's redundant to say both "attr" and "options", since all it does is set attributes. Yours, Christian ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-07 14:42 ` Christian Moe @ 2013-04-07 18:46 ` Nicolas Goaziou 2013-04-07 20:39 ` Christian Moe 0 siblings, 1 reply; 27+ messages in thread From: Nicolas Goaziou @ 2013-04-07 18:46 UTC (permalink / raw) To: Christian Moe; +Cc: Bastien, François Pinard, emacs-orgmode Hello, Christian Moe <mail@christianmoe.com> writes: > Bastien writes: >> You need to use :options now: >> >> #+CAPTION: This is a table with lines around and between cells >> #+ATTR_HTML: :options border="2" rules="all" frame="border" > > Oddly, this doesn't work for me at the moment. I'm running > release_8.0-pre-344-g882454, pulled this morning. (It /could/ be just > me; I seem to have some unresolved installation issues.) > > When I export, both the defaults /and/ the "options" are applied, > resulting in duplicated attributes, like this: > > <table border="2" cellspacing="0" cellpadding="6" rules="groups" > frame="hsides" border="2" rules="all" frame="border"> This is a bug. > The documentation currently up on Worg > (http://orgmode.org/worg/org-8.0.html#sec-8-3), which seems to say we > should now use plists for HTML attributes. But that currently doesn't > work for me either. > > Sorry if you've heard this before, but this doesn't make sense to me as > a new syntax: > > #+ATTR_HTML: :options attribute="value" > > It's not just more verbose than the old way, it's redundant to say both > "attr" and "options", since all it does is set attributes. Actually, that's not the spirit. The idea is to define some widely used attributes that will be written directly like: #+attr_html: :border 0 :width 400 Then, :options attribute is used as a bucket for every other attribute, since we cannot support all of them. Unfortunately, no attribute is current recognized in table HTML transcoder. It needs to be improved. If Someone provides a list of such attributes, I can implement it. Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-07 18:46 ` Nicolas Goaziou @ 2013-04-07 20:39 ` Christian Moe 2013-04-07 20:48 ` Nicolas Goaziou 0 siblings, 1 reply; 27+ messages in thread From: Christian Moe @ 2013-04-07 20:39 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Bastien, François Pinard, emacs-orgmode Nicolas Goaziou writes: >> When I export, both the defaults /and/ the "options" are applied, >> resulting in duplicated attributes, like this: >> >> <table border="2" cellspacing="0" cellpadding="6" rules="groups" >> frame="hsides" border="2" rules="all" frame="border"> > > This is a bug. Ah, good (from my perspective, anyway, I was getting concerned about my setup). > The idea is to define some widely used > attributes that will be written directly like: > > #+attr_html: :border 0 :width 400 > > Then, :options attribute is used as a bucket for every other attribute, > since we cannot support all of them. I'm sorry, you've probably explained this many times before and I should go read the archives. But what is it that nees to be supported, and why couldn't you just pass through *whatever* :attribute value pair the user puts in attr_html? I really like the switch to plist style, but I think the combination with :options and literal syntax is confusing. > Unfortunately, no attribute is current recognized in table HTML > transcoder. It needs to be improved. > > If Someone provides a list of such attributes, I can implement it. I'd be happy to, but I need to understand the above. On what basis should attributes be selected for either plist style or the :options bucket, and what does the exporter need to know about them in order to support them? Yours, Christian ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-07 20:39 ` Christian Moe @ 2013-04-07 20:48 ` Nicolas Goaziou 2013-04-08 21:09 ` Christian Moe 0 siblings, 1 reply; 27+ messages in thread From: Nicolas Goaziou @ 2013-04-07 20:48 UTC (permalink / raw) To: Christian Moe; +Cc: Bastien, François Pinard, emacs-orgmode Christian Moe <mail@christianmoe.com> writes: > But what is it that nees to be supported, and why couldn't you just pass > through *whatever* :attribute value pair the user puts in attr_html? Does every possible attribute follow attribute="value" pattern? Aren't there single keywords? If they are that regular, we can indeed walk the plist like a list and change (:key1 val1 :key2 val2 ...) into key1="val1" key2="val2" If there are irregular keywords, the export back-end needs to know about them. Also, if attributes are provided, I assume defaults should be ignored altogether. Or do we need to create the union between default values and provided attributes? Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-07 20:48 ` Nicolas Goaziou @ 2013-04-08 21:09 ` Christian Moe 2013-04-10 17:44 ` François Pinard 2013-04-10 19:37 ` Nicolas Goaziou 0 siblings, 2 replies; 27+ messages in thread From: Christian Moe @ 2013-04-08 21:09 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Bastien, emacs-orgmode Nicolas Goaziou writes: > Does every possible attribute follow attribute="value" pattern? Aren't > there single keywords? In XHTML it does, and there aren't. In HTML you can use some "minimized" attributes, but in XHTML they have their own names as values, e.g. nowrap="nowrap". > If they are that regular, we can indeed walk the > plist like a list and change > > (:key1 val1 :key2 val2 ...) > > into > > key1="val1" key2="val2" ...and let the user worry about getting them right. That's my suggestion, FWIW. > If there are irregular keywords, the export back-end needs to know about > them. XML doesn't do `irregular'. :) XHTML is also fussy about quoting attribute values, and about escaping special characters as HTML entities, including the ampersand (&), and including inside attribute values. I'm guessing the exporter already does the right thing here. Since values may legitimately contain double quotes, one thing the back-end *does* need to know about is to put those in single quotes: :title This is a "pop-up" text title='This is a "pop-up" text' > Also, if attributes are provided, I assume defaults should be ignored > altogether. Or do we need to create the union between default values and > provided attributes? If I understand the question correctly, I think the union is the correct answer, with provided attributes overwriting defaults for the same attributes. In the example we started with, the defaults would create <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> If the user specifies #+attr_html: :border 2 :rules all :frame border :title My table I would expect the result <table border="2" cellspacing="0" cellpadding="6" rules="all" frame="border" title="My table"> You may want a second opinion on all this -- I'm no (X)HTML guru and I've never written an exporter. But it seems to me the pure plist form would less confusing to the user than a split syntax, and easier to maintain, as well. Yours, Christian ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-08 21:09 ` Christian Moe @ 2013-04-10 17:44 ` François Pinard 2013-04-12 2:06 ` Eric Abrahamsen 2013-04-10 19:37 ` Nicolas Goaziou 1 sibling, 1 reply; 27+ messages in thread From: François Pinard @ 2013-04-10 17:44 UTC (permalink / raw) To: emacs-orgmode Christian Moe <mail@christianmoe.com> writes: > XHTML is also fussy about quoting attribute values, and about escaping > special characters as HTML entities, including the ampersand (&), and > including inside attribute values. I'm guessing the exporter already > does the right thing here. Org can of course take care of XTHML fussiness, there is likely no problem there. While on this subject! :-) Could Org allow the output of HTML5 rather than XHTML, under the control of some option? I've read that some frameworks really expect HTML5 to work properly, such an option might ease inter-operation between exported Org and such frameworks. François ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-10 17:44 ` François Pinard @ 2013-04-12 2:06 ` Eric Abrahamsen 2013-04-12 5:42 ` Bastien 2013-04-13 17:10 ` Rick Frankel 0 siblings, 2 replies; 27+ messages in thread From: Eric Abrahamsen @ 2013-04-12 2:06 UTC (permalink / raw) To: emacs-orgmode François Pinard <pinard@iro.umontreal.ca> writes: > Christian Moe <mail@christianmoe.com> writes: > >> XHTML is also fussy about quoting attribute values, and about escaping >> special characters as HTML entities, including the ampersand (&), and >> including inside attribute values. I'm guessing the exporter already >> does the right thing here. > > Org can of course take care of XTHML fussiness, there is likely no > problem there. > > While on this subject! :-) > > Could Org allow the output of HTML5 rather than XHTML, under the control > of some option? I've read that some frameworks really expect HTML5 to > work properly, such an option might ease inter-operation between > exported Org and such frameworks. I'm curious about this possibility as well -- how much work would it be? E ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-12 2:06 ` Eric Abrahamsen @ 2013-04-12 5:42 ` Bastien 2013-04-12 6:01 ` Eric Abrahamsen 2013-04-13 17:10 ` Rick Frankel 1 sibling, 1 reply; 27+ messages in thread From: Bastien @ 2013-04-12 5:42 UTC (permalink / raw) To: Eric Abrahamsen; +Cc: emacs-orgmode Hi Eric, Eric Abrahamsen <eric@ericabrahamsen.net> writes: > I'm curious about this possibility as well -- how much work would it > be? The easiest way to know is to start working on it ;) Try creating a derived back-end from 'html one and see. ox-s5.el and ox-deck.el might be useful to read, they are derived from the 'html back-end already. HTH, PS: Maybe some adjustments could be done later do on ox-html.el so that it's easier to derive new back-ends from it... but we're not there yet. -- Bastien ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-12 5:42 ` Bastien @ 2013-04-12 6:01 ` Eric Abrahamsen 2013-04-12 8:46 ` Bastien 0 siblings, 1 reply; 27+ messages in thread From: Eric Abrahamsen @ 2013-04-12 6:01 UTC (permalink / raw) To: emacs-orgmode Bastien <bzg@gnu.org> writes: > Hi Eric, > > Eric Abrahamsen <eric@ericabrahamsen.net> writes: > >> I'm curious about this possibility as well -- how much work would it >> be? > > The easiest way to know is to start working on it ;) I was afraid that was the answer! > Try creating a derived back-end from 'html one and see. > > ox-s5.el and ox-deck.el might be useful to read, they are derived > from the 'html back-end already. > > HTH, > > PS: Maybe some adjustments could be done later do on ox-html.el > so that it's easier to derive new back-ends from it... but we're > not there yet. The first step is probably to research the differences between xhtml and html 5. In a perfect world we'd be able to export to html 4, html 5, and whatever flavor of xhtml is still current. Bleagh! E ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-12 6:01 ` Eric Abrahamsen @ 2013-04-12 8:46 ` Bastien 2013-04-12 14:36 ` François Pinard 0 siblings, 1 reply; 27+ messages in thread From: Bastien @ 2013-04-12 8:46 UTC (permalink / raw) To: Eric Abrahamsen; +Cc: emacs-orgmode Eric Abrahamsen <eric@ericabrahamsen.net> writes: > The first step is probably to research the differences between xhtml and > html 5. Well, I would even skip this step and just hack something usable. -- Bastien ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-12 8:46 ` Bastien @ 2013-04-12 14:36 ` François Pinard 2013-04-13 3:38 ` Eric Abrahamsen 0 siblings, 1 reply; 27+ messages in thread From: François Pinard @ 2013-04-12 14:36 UTC (permalink / raw) To: emacs-orgmode Bastien <bzg@gnu.org> writes: > Eric Abrahamsen <eric@ericabrahamsen.net> writes: >> The first step is probably to research the differences between xhtml and >> html 5. > Well, I would even skip this step and just hack something usable. There are validators out there, that could help us staying on track, whatever the track :-). François ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-12 14:36 ` François Pinard @ 2013-04-13 3:38 ` Eric Abrahamsen 2013-04-13 5:31 ` Eric Abrahamsen 0 siblings, 1 reply; 27+ messages in thread From: Eric Abrahamsen @ 2013-04-13 3:38 UTC (permalink / raw) To: emacs-orgmode François Pinard <pinard@iro.umontreal.ca> writes: > Bastien <bzg@gnu.org> writes: > >> Eric Abrahamsen <eric@ericabrahamsen.net> writes: > >>> The first step is probably to research the differences between xhtml and >>> html 5. > >> Well, I would even skip this step and just hack something usable. Okay, I've got a nearly-working patch for this, but I'm falling down hard on the defcustom. Here's what I thought to do: #+BEGIN_SRC emacs-lisp (defconst org-html-doctype-alist '((html4 . "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">") (html4-strict . "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"> \"http://www.w3.org/TR/html4/strict.dtd\"") (xhtml . "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">") (html5 . "<!DOCTYPE HTML>")) "An alist mapping (x)html flavors to specific doctypes.") (defcustom org-html-doctype 'xhtml "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 'i-dont-know-how-to-work-this) #+END_SRC The end result I'm after is: the user can either set org-html-doctype to a symbol from among the cars org-html-doctype-alist, or he/she can set it directly to the doctype string. I don't know how to represent that in a defcustom. And of course, if anyone has any better approaches, then speak now or... speak later. Eric ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-13 3:38 ` Eric Abrahamsen @ 2013-04-13 5:31 ` Eric Abrahamsen 2013-04-13 20:42 ` Rick Frankel 0 siblings, 1 reply; 27+ messages in thread From: Eric Abrahamsen @ 2013-04-13 5:31 UTC (permalink / raw) To: emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 1816 bytes --] Eric Abrahamsen <eric@ericabrahamsen.net> writes: > François Pinard <pinard@iro.umontreal.ca> writes: > >> Bastien <bzg@gnu.org> writes: >> >>> Eric Abrahamsen <eric@ericabrahamsen.net> writes: >> >>>> The first step is probably to research the differences between xhtml and >>>> html 5. >> >>> Well, I would even skip this step and just hack something usable. I sort of fudged on the below. The upside is that it should be pretty forgiving now: you can set all kinds of strings as your :html-doctype, and it will do a reasonably good job of guessing how to handle it. Barring actual bugs or poor design decisions, what's left to do is: 1. Make sure that inlined script and style chunks are escaped correctly, I seem to remember reading that the commenting/escaping syntax for these chunks varies according to html flavor. 2. I'd like to add the possibility to put an arbitrary :html-container attribute on HTML elements, so that things that would have been wrapped in "div"s can be wrapped in "article", "section", "nav", and so on and so forth. Rick Frankel kindly provided a test file for this, which I've modified below: #+BEGIN_SRC emacs-lisp #+TITLE: HTML 5 Test #+DATE: {{{modification-time(%Y-%m-%d)}}} #+HTML_DOCTYPE: html5 #+BIND: org-html-divs ((preamble "header" "preamble") (content "section" "content") (postamble "footer" "postamble")) * Org HTML5 Test ok? This should be a paragraph with a \\ line break in it. I think * How about a table | col1 | col2 | |------+------| | a | 1 | | b | 2 | Tables can't have attributes in HTML5. * And a list - a - b - c * And an image [[file:1356810947473.jpg]] * A definiton list #+ATTR_HTML: :options html-container article - a :: foo - b :: bar #+END_SRC Please break! I'll provide a properly-written patch when we've sorted it out. E [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-First-stab-at-exporting-to-various-flavors-of-HTML.patch --] [-- Type: text/x-patch, Size: 15168 bytes --] From 296bbf0f74d0c3d49259e146597a174e7c14fda9 Mon Sep 17 00:00:00 2001 From: Eric Abrahamsen <eric@ericabrahamsen.net> Date: Sat, 13 Apr 2013 13:22:14 +0800 Subject: [PATCH] First stab at exporting to various flavors of HTML. --- lisp/ox-html.el | 151 +++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 96 insertions(+), 55 deletions(-) diff --git a/lisp/ox-html.el b/lisp/ox-html.el index 0ad3dc3..af80707 100644 --- a/lisp/ox-html.el +++ b/lisp/ox-html.el @@ -142,6 +142,15 @@ (defvar org-html--pre/postamble-class "status" "CSS class used for pre/postamble") +(defconst org-html-doctype-alist + '(("html4" . "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">") + ("html4-strict" . "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"> +\"http://www.w3.org/TR/html4/strict.dtd\"") + ("xhtml" . "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" +\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">") + ("html5" . "<!DOCTYPE HTML>")) + "An alist mapping (x)html flavors to specific doctypes.") + (defconst org-html-special-string-regexps '(("\\\\-" . "­") ; shy ("---\\([^-]\\)" . "—\\1") ; mdash @@ -747,7 +756,9 @@ in all modes you want. Then, use the command '(:border "2" :cellspacing "0" :cellpadding "6" :rules "groups" :frame "hsides") "Default attributes and values which will be used in table tags. This is a plist where attributes are symbols, starting with -colons, and values are strings." +colons, and values are strings. + +When exporting to HTML5, these values will be disregarded." :group 'org-export-html :version "24.4" :package-version '(Org . "8.0") @@ -855,7 +866,9 @@ CSS classes, then this prefix can be very useful." "The extension for exported HTML files. %s will be replaced with the charset of the exported file. This may be a string, or an alist with export extensions -and corresponding declarations." +and corresponding declarations. + +This declaration only applies when exporting to XHTML." :group 'org-export-html :type '(choice (string :tag "Single declaration") @@ -871,15 +884,14 @@ Use utf-8 as the default value." :package-version '(Org . "8.0") :type 'coding-system) -(defcustom org-html-doctype - "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">" +(defcustom org-html-doctype "xhtml" "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 'string) + :type 'string) (defcustom org-html-container-element "div" "HTML element to use for wrapping top level sections. @@ -1034,7 +1046,7 @@ precedence over this variable." '(("en" "<p class=\"author\">Author: %a (%e)</p> <p class=\"date\">Date: %d</p> <p class=\"creator\">%c</p> -<p class=\"xhtml-validation\">%v</p>")) +<p class=\"validation\">%v</p>")) "Alist of languages and format strings for the HTML postamble. The first element of each list is the language code, as used for @@ -1059,7 +1071,7 @@ like that: \"%%\"." :value-type (string :tag "Format string"))) (defcustom org-html-validation-link - "<a href=\"http://validator.w3.org/check?uri=referer\">Validate XHTML 1.0</a>" + "<a href=\"http://validator.w3.org/check?uri=referer\">Validate</a>" "Link to HTML validation service." :group 'org-export-html :type 'string) @@ -1239,6 +1251,19 @@ CSS classes, then this prefix can be very useful." \f ;;; Internal Functions +(defun org-html-xhtml-p (info) + (let ((dt (downcase (plist-get info :html-doctype)))) + (string-match-p dt "xhtml"))) + +(defun org-html-html5-p (info) + (let ((dt (downcase (plist-get info :html-doctype)))) + (member dt '("html5" "<!doctype html>")))) + +(defun org-html-close-tag (info) + (if (org-html-xhtml-p info) + "/>" + ">")) + (defun org-html--make-attribute-string (attributes) "Return a list of attributes, as a string. ATTRIBUTES is a plist where values are either strings or nil. An @@ -1252,7 +1277,7 @@ attributes with a nil value will be omitted from the result." "\"" """ (org-html-encode-plain-text item)))) (setcar output (format "%s=\"%s\"" key value)))))))) -(defun org-html-format-inline-image (src &optional +(defun org-html-format-inline-image (src &optional info caption label attr standalone-p) "Format an inline image from SRC. CAPTION, LABEL and ATTR are optional arguments providing the @@ -1272,12 +1297,14 @@ When STANDALONE-P is t, wrap the <img.../> into a <div>...</div>." (file-name-nondirectory src))))))) (cond (standalone-p - (let ((img (format "<img src=\"%s\" %s/>" src attr))) + (let ((img (format "<img src=\"%s\" %s%s" src attr + (org-html-close-tag info)))) (format "\n<div%s class=\"figure\">%s%s\n</div>" id (format "\n<p>%s</p>" img) (if (and caption (not (string= caption ""))) (format "\n<p>%s</p>" caption) "")))) - (t (format "<img src=\"%s\" %s/>" src (concat attr id)))))) + (t (format "<img src=\"%s\" %s%s" src (concat attr id) + (org-html-close-tag info)))))) (defun org-html--textarea-block (element) "Transcode ELEMENT into a textarea block. @@ -1426,7 +1453,8 @@ INFO is a plist used as a communication channel." (let ((auth (plist-get info :author))) (and auth (org-export-data auth info))))) (description (plist-get info :description)) - (keywords (plist-get info :keywords))) + (keywords (plist-get info :keywords)) + (close (org-html-close-tag info))) (concat (format "<title>%s</title>\n" title) (format @@ -1434,17 +1462,18 @@ INFO is a plist used as a communication channel." (format-time-string (concat "<!-- " org-html-metadata-timestamp-format " -->\n")))) (format - "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=%s\"/>\n" + "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=%s\"%s\n" (or (and org-html-coding-system (fboundp 'coding-system-get) (coding-system-get org-html-coding-system 'mime-charset)) - "iso-8859-1")) - (format "<meta name=\"generator\" content=\"Org-mode\"/>\n") - (and author (format "<meta name=\"author\" content=\"%s\"/>\n" author)) + "iso-8859-1") close) + (format "<meta name=\"generator\" content=\"Org-mode\"%s\n" close) + (and author (format "<meta name=\"author\" content=\"%s\"%s\n" author close)) (and description - (format "<meta name=\"description\" content=\"%s\"/>\n" description)) + (format "<meta name=\"description\" content=\"%s\"%s\n" description + close)) (and keywords - (format "<meta name=\"keywords\" content=\"%s\"/>\n" keywords))))) + (format "<meta name=\"keywords\" content=\"%s\"%s\n" keywords close))))) (defun org-html--build-head (info) "Return information for the <head>..</head> of the HTML output. @@ -1457,8 +1486,8 @@ INFO is a plist used as a communication channel." (org-element-normalize-string (plist-get info :html-head-extra)) (when (and (plist-get info :html-htmlized-css-url) (eq org-html-htmlize-output-type 'css)) - (format "<link rel=\"stylesheet\" href=\"%s\" type=\"text/css\" />\n" - (plist-get info :html-htmlized-css-url))) + (format "<link rel=\"stylesheet\" href=\"%s\" type=\"text/css\" %s>\n" + (plist-get info :html-htmlized-css-url) (org-html-close-tag info))) (when (plist-get info :html-head-include-scripts) org-html-scripts)))) (defun org-html--build-mathjax-config (info) @@ -1555,7 +1584,7 @@ communication channel." (format-time-string org-html-metadata-timestamp-format))) (when (plist-get info :with-creator) (format "<p class=\"creator\">%s</p>\n" creator)) - (format "<p class=\"xhtml-validation\">%s</p>\n" + (format "<p class=\"validation\">%s</p>\n" validation-link)))) (t (format-spec (or (cadr (assoc @@ -1597,23 +1626,31 @@ holding export options." CONTENTS is the transcoded contents string. INFO is a plist holding export options." (concat - (format - (or (and (stringp org-html-xml-declaration) - org-html-xml-declaration) - (cdr (assoc (plist-get info :html-extension) - org-html-xml-declaration)) - (cdr (assoc "html" org-html-xml-declaration)) - - "") - (or (and org-html-coding-system - (fboundp 'coding-system-get) - (coding-system-get org-html-coding-system 'mime-charset)) - "iso-8859-1")) - "\n" - (plist-get info :html-doctype) + (when (org-html-xhtml-p info) + (format "%s\n" + (format (or (and (stringp org-html-xml-declaration) + org-html-xml-declaration) + (cdr (assoc (plist-get info :html-extension) + org-html-xml-declaration)) + (cdr (assoc "html" org-html-xml-declaration)) + + "") + (or (and org-html-coding-system + (fboundp 'coding-system-get) + (coding-system-get org-html-coding-system 'mime-charset)) + "iso-8859-1")))) + (let* ((dt (plist-get info :html-doctype)) + (dt-cons (assoc dt org-html-doctype-alist))) + (if dt-cons + (cdr dt-cons) + dt)) "\n" - (format "<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"%s\" xml:lang=\"%s\">\n" - (plist-get info :language) (plist-get info :language)) + (concat "<html" + (when (org-html-xhtml-p info) + (format + " xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"%s\" xml:lang=\"%s\"" + (plist-get info :language) (plist-get info :language))) + ">\n") "<head>\n" (org-html--build-meta-info info) (org-html--build-head info) @@ -2164,7 +2201,7 @@ holding contextual information." ;; Build the real contents of the sub-tree. (let* ((type (if numberedp 'ordered 'unordered)) (itemized-body (org-html-format-list-item - contents type nil nil full-text))) + contents type nil info nil full-text))) (concat (and (org-export-first-sibling-p headline info) (org-html-begin-plain-list type)) @@ -2222,7 +2259,7 @@ holding contextual information." (defun org-html-horizontal-rule (horizontal-rule contents info) "Transcode an HORIZONTAL-RULE object from Org to HTML. CONTENTS is nil. INFO is a plist holding contextual information." - "<hr/>") + (format "<hr%s" (org-html-close-tag info))) ;;;; Inline Src Block @@ -2279,11 +2316,12 @@ contextual information." (trans "<code>[-]</code>") (t ""))) -(defun org-html-format-list-item (contents type checkbox +(defun org-html-format-list-item (contents type checkbox info &optional term-counter-id headline) "Format a list item into HTML." - (let ((checkbox (concat (org-html-checkbox checkbox) (and checkbox " ")))) + (let ((checkbox (concat (org-html-checkbox checkbox) (and checkbox " "))) + (br (format "<br%s" (org-html-close-tag info)))) (concat (case type (ordered @@ -2291,13 +2329,13 @@ contextual information." (extra (if counter (format " value=\"%s\"" counter) ""))) (concat (format "<li%s>" extra) - (when headline (concat headline "<br/>"))))) + (when headline (concat headline br))))) (unordered (let* ((id term-counter-id) (extra (if id (format " id=\"%s\"" id) ""))) (concat (format "<li%s>" extra) - (when headline (concat headline "<br/>"))))) + (when headline (concat headline br))))) (descriptive (let* ((term term-counter-id)) (setq term (or term "(no term)")) @@ -2323,7 +2361,7 @@ contextual information." (tag (let ((tag (org-element-property :tag item))) (and tag (org-export-data tag info))))) (org-html-format-list-item - contents type checkbox (or tag counter)))) + contents type checkbox info (or tag counter)))) ;;;; Keyword @@ -2382,7 +2420,7 @@ CONTENTS is nil. INFO is a plist holding contextual information." (when (and formula-link (string-match "file:\\([^]]*\\)" formula-link)) (org-html-format-inline-image - (match-string 1 formula-link) caption label attr t)))) + (match-string 1 formula-link) info caption label attr t)))) (t latex-frag)))) ;;;; Latex Fragment @@ -2401,7 +2439,7 @@ CONTENTS is nil. INFO is a plist holding contextual information." (when (and formula-link (string-match "file:\\([^]]*\\)" formula-link)) (org-html-format-inline-image - (match-string 1 formula-link))))) + (match-string 1 formula-link) info)))) (t latex-frag)))) ;;;; Line Break @@ -2409,7 +2447,7 @@ CONTENTS is nil. INFO is a plist holding contextual information." (defun org-html-line-break (line-break contents info) "Transcode a LINE-BREAK object from Org to HTML. CONTENTS is nil. INFO is a plist holding contextual information." - "<br/>\n") + (format "<br%s\n" (org-html-close-tag info))) ;;;; Link @@ -2434,7 +2472,7 @@ Inline images can have these attributes: (label (org-element-property :name parent))) ;; Return proper string, depending on DISPOSITION. (org-html-format-inline-image - path caption label + path info caption label (org-html--make-attribute-string (org-export-read-attribute :attr_html parent)) (org-html-standalone-image-p link info)))) @@ -2755,7 +2793,8 @@ contextual information." (when (plist-get info :preserve-breaks) (setq output (replace-regexp-in-string - "\\(\\\\\\\\\\)?[ \t]*\n" "<br/>\n" output))) + "\\(\\\\\\\\\\)?[ \t]*\n" + (format "<br%s\n" (org-html-close-tag info)) output))) ;; Return value. output)) @@ -3030,11 +3069,12 @@ contextual information." (let* ((label (org-element-property :name table)) (caption (org-export-get-caption table)) (attributes - (org-html--make-attribute-string - (org-combine-plists - (and label (list :id (org-export-solidify-link-text label))) - (plist-get info :html-table-attributes) - (org-export-read-attribute :attr_html table)))) + (if (org-html-html5-p info) "" + (org-html--make-attribute-string + (org-combine-plists + (and label (list :id (org-export-solidify-link-text label))) + (plist-get info :html-table-attributes) + (org-export-read-attribute :attr_html table))))) (alignspec (if (and (boundp 'org-html-format-table-no-css) org-html-format-table-no-css) @@ -3114,9 +3154,10 @@ contextual information." ;; Replace each newline character with line break. Also replace ;; each blank line with a line break. (setq contents (replace-regexp-in-string - "^ *\\\\\\\\$" "<br/>\n" + "^ *\\\\\\\\$" (format "<br%s\n" (org-html-close-tag info)) (replace-regexp-in-string - "\\(\\\\\\\\\\)?[ \t]*\n" " <br/>\n" contents))) + "\\(\\\\\\\\\\)?[ \t]*\n" + (format " <br%s\n" (org-html-close-tag info)) contents))) ;; Replace each white space at beginning of a line with a ;; non-breaking space. (while (string-match "^[ \t]+" contents) -- 1.8.2.1 [-- Attachment #3: Type: text/plain, Size: 1292 bytes --] > Okay, I've got a nearly-working patch for this, but I'm falling down > hard on the defcustom. Here's what I thought to do: > > #+BEGIN_SRC emacs-lisp > (defconst org-html-doctype-alist > '((html4 . "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">") > (html4-strict . "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"> > \"http://www.w3.org/TR/html4/strict.dtd\"") > (xhtml . "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" > \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">") > (html5 . "<!DOCTYPE HTML>")) > "An alist mapping (x)html flavors to specific doctypes.") > > (defcustom org-html-doctype 'xhtml > "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 'i-dont-know-how-to-work-this) > #+END_SRC > > The end result I'm after is: the user can either set org-html-doctype to > a symbol from among the cars org-html-doctype-alist, or he/she can set > it directly to the doctype string. I don't know how to represent that in > a defcustom. > > And of course, if anyone has any better approaches, then speak now or... > speak later. > > Eric ^ permalink raw reply related [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-13 5:31 ` Eric Abrahamsen @ 2013-04-13 20:42 ` Rick Frankel 2013-04-14 10:13 ` Eric Abrahamsen 0 siblings, 1 reply; 27+ messages in thread From: Rick Frankel @ 2013-04-13 20:42 UTC (permalink / raw) To: Eric Abrahamsen; +Cc: emacs-orgmode On Sat, Apr 13, 2013 at 01:31:17PM +0800, Eric Abrahamsen wrote: > Eric Abrahamsen <eric@ericabrahamsen.net> writes: > > > François Pinard <pinard@iro.umontreal.ca> writes: > > > >> Bastien <bzg@gnu.org> writes: > >> > >>> Eric Abrahamsen <eric@ericabrahamsen.net> writes: > >> > >>>> The first step is probably to research the differences between xhtml and > >>>> html 5. > >> > >>> Well, I would even skip this step and just hack something usable. > > > I sort of fudged on the below. The upside is that it should be pretty > forgiving now: you can set all kinds of strings as your :html-doctype, > and it will do a reasonably good job of guessing how to handle it. > > Barring actual bugs or poor design decisions, what's left to do is: > > 1. Make sure that inlined script and style chunks are escaped correctly, > I seem to remember reading that the commenting/escaping syntax for these > chunks varies according to html flavor. > > 2. I'd like to add the possibility to put an arbitrary :html-container > #+BEGIN_SRC emacs-lisp > #+TITLE: HTML 5 Test > #+DATE: {{{modification-time(%Y-%m-%d)}}} > #+HTML_DOCTYPE: html5 > #+BIND: org-html-divs ((preamble "header" "preamble") (content "section" "content") (postamble "footer" "postamble")) > * Org HTML5 Test > #+ATTR_HTML: :options html-container article note that you just just set #+HTML_CONTAINER: article in the head of the file if you want all the containers to be "article"s. > +(defconst org-html-doctype-alist > + '(("html4" . "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">") > + ("html4-strict" . "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"> > +\"http://www.w3.org/TR/html4/strict.dtd\"") > + ("xhtml" . "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" > +\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">") > + ("html5" . "<!DOCTYPE HTML>")) I believe that should be (note the lowercase "html"): ("xhtml" . "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" > +\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">") ("html5" . "<!DOCTYPE html>") See http://www.w3schools.com/tags/tag_doctype.asp for a fairly complete list of valid doctypes. rick ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-13 20:42 ` Rick Frankel @ 2013-04-14 10:13 ` Eric Abrahamsen 2013-04-14 18:01 ` Rick Frankel 2013-04-15 18:03 ` Rick Frankel 0 siblings, 2 replies; 27+ messages in thread From: Eric Abrahamsen @ 2013-04-14 10:13 UTC (permalink / raw) To: emacs-orgmode Rick Frankel <rick@rickster.com> writes: > On Sat, Apr 13, 2013 at 01:31:17PM +0800, Eric Abrahamsen wrote: >> Eric Abrahamsen <eric@ericabrahamsen.net> writes: >> >> > François Pinard <pinard@iro.umontreal.ca> writes: >> > >> >> Bastien <bzg@gnu.org> writes: >> >> >> >>> Eric Abrahamsen <eric@ericabrahamsen.net> writes: >> >> >> >>>> The first step is probably to research the differences between xhtml and >> >>>> html 5. >> >> >> >>> Well, I would even skip this step and just hack something usable. >> >> >> I sort of fudged on the below. The upside is that it should be pretty >> forgiving now: you can set all kinds of strings as your :html-doctype, >> and it will do a reasonably good job of guessing how to handle it. >> >> Barring actual bugs or poor design decisions, what's left to do is: >> >> 1. Make sure that inlined script and style chunks are escaped correctly, >> I seem to remember reading that the commenting/escaping syntax for these >> chunks varies according to html flavor. >> >> 2. I'd like to add the possibility to put an arbitrary :html-container > >> #+BEGIN_SRC emacs-lisp >> #+TITLE: HTML 5 Test >> #+DATE: {{{modification-time(%Y-%m-%d)}}} >> #+HTML_DOCTYPE: html5 >> #+BIND: org-html-divs ((preamble "header" "preamble") (content "section" "content") (postamble "footer" "postamble")) >> * Org HTML5 Test >> #+ATTR_HTML: :options html-container article > > note that you just just set #+HTML_CONTAINER: article in the head of the > file if you want all the containers to be "article"s. That would be pretty drastic, though -- it would wrap "article" around a whole bunch of stuff that shouldn't be an article! I think ultimately the HTML exporter should grow a slightly more flexible system for wrapping document sections in containers, but this patch definitely shouldn't get hung up on that. >> +(defconst org-html-doctype-alist >> + '(("html4" . "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">") >> + ("html4-strict" . "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"> >> +\"http://www.w3.org/TR/html4/strict.dtd\"") >> + ("xhtml" . "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" >> +\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">") >> + ("html5" . "<!DOCTYPE HTML>")) > > I believe that should be (note the lowercase "html"): > > ("xhtml" . "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" >> +\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">") > ("html5" . "<!DOCTYPE html>") > > See http://www.w3schools.com/tags/tag_doctype.asp for a fairly > complete list of valid doctypes. Cool, thanks for the reference. If the approach of this patch seems generally acceptable I'll try to add most of the commonly-used doctypes in there. I'm waffling on XHTML5, though -- from what I can tell it's a spec everyone sort of thought ought to be in there, but no one is actually using. E ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-14 10:13 ` Eric Abrahamsen @ 2013-04-14 18:01 ` Rick Frankel 2013-04-15 18:03 ` Rick Frankel 1 sibling, 0 replies; 27+ messages in thread From: Rick Frankel @ 2013-04-14 18:01 UTC (permalink / raw) To: Eric Abrahamsen; +Cc: emacs-orgmode On Sun, Apr 14, 2013 at 06:13:40PM +0800, Eric Abrahamsen wrote: > Rick Frankel <rick@rickster.com> writes: > > > On Sat, Apr 13, 2013 at 01:31:17PM +0800, Eric Abrahamsen wrote: > >> * Org HTML5 Test > >> #+ATTR_HTML: :options html-container article > >> - a :: foo > >> - b :: bar > > note that you just just set #+HTML_CONTAINER: article in the head of the > > file if you want all the containers to be "article"s. > > That would be pretty drastic, though -- it would wrap "article" around a > whole bunch of stuff that shouldn't be an article! I think ultimately > the HTML exporter should grow a slightly more flexible system for > wrapping document sections in containers, but this patch definitely > shouldn't get hung up on that. It specifies the element for the top-level container---by default, something like: <div id="outline-container-sec-1" class="outline-2"> In the case of e.g., a blog or slideshow, <article> is an appropriate top-level wrapper lelement. Regardless, I'm not sure which object you are expecting the #+ATTR_HTML to apply to in the example above. Here's the html the above section generates: #+BEGIN_HTML <div id="outline-container-sec-5" class="outline-2"> <h2 id="sec-5"><span class="section-number-2">5</span> A definiton list</h2> <div class="outline-text-2" id="text-5"> <dl class="org-dl"> <dt> a </dt><dd>foo </dd> <dt> b </dt><dd>bar </dd> </dl> </div> </div> Where the 'outline-text-2' div is actually around the entire body of the section, not just the definition list (there is no explicit wrapper around the definition list). I would argue that to set the element type fro the outer (outline-container) div or the inner (outline-text) div, a property setting would make more sense. I can see using a (headline level) :HTML_CONTAINER property to set the container on a given headline (which i think i will impliment as it is very low impact), and perhaps either an :HTML_CHILD_CONTAINER or :HTML_TEXT_CONTAINER to specify the wrapper on the inner section. rick ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-14 10:13 ` Eric Abrahamsen 2013-04-14 18:01 ` Rick Frankel @ 2013-04-15 18:03 ` Rick Frankel 1 sibling, 0 replies; 27+ messages in thread From: Rick Frankel @ 2013-04-15 18:03 UTC (permalink / raw) To: Eric Abrahamsen; +Cc: emacs-orgmode Eric- > Rick Frankel <rick@rickster.com> writes: > I would argue that to set the element type fro the outer > (outline-container) div or the inner (outline-text) div, a property > setting would make more sense. I can see using a (headline level) > :HTML_CONTAINER property to set the container on a given headline > (which i think i will impliment as it is very low impact), and perhaps > either an :HTML_CHILD_CONTAINER or :HTML_TEXT_CONTAINER to specify the > wrapper on the inner section. I have pushed to master the abilty to set the :HTML_CONTAINER property on any headline and have that value override the default (:html-container for level 1 headines, "div" for the rest). Note that this is not an inherited property so only affect the headline it is specified on, not it's children. rick ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-12 2:06 ` Eric Abrahamsen 2013-04-12 5:42 ` Bastien @ 2013-04-13 17:10 ` Rick Frankel 2013-04-14 8:41 ` Bastien 1 sibling, 1 reply; 27+ messages in thread From: Rick Frankel @ 2013-04-13 17:10 UTC (permalink / raw) To: emacs-orgmode On Fri, Apr 12, 2013 at 10:06:21AM +0800, Eric Abrahamsen wrote: > François Pinard <pinard@iro.umontreal.ca> writes: > > > Christian Moe <mail@christianmoe.com> writes: > > > > While on this subject! :-) > > > > Could Org allow the output of HTML5 rather than XHTML, under the control > > of some option? I've read that some frameworks really expect HTML5 to > > work properly, such an option might ease inter-operation between > > exported Org and such frameworks. > > I'm curious about this possibility as well -- how much work would it be? Sorry, late to the thread, i've been laid up. Anyway, the xhtml output from ox-html _should_ be mostly valid html5 (valid xhtml 1.0 in general should be valid html5). However, you will need to change the html-table-tag to not use attributes, and remove the xml declaration (which is a warning and not an error in html5) Here's a sample org file (which changes the divs to be more "html5ish" as well, not necessary) which validates as HTML5: (btw, i've remove the scripts and default-styles just to make the html output smaller, the file will validate even with them in the output). rick ----- %< --------- #+TITLE: HTML 5 Test #+DATE: {{{modification-time(%Y-%m-%d)}}} #+HTML_DOCTYPE: <!DOCTYPE html> #+BIND: org-html-xml-declaration "" #+BIND: org-html-head-include-default-style nil #+BIND: org-html-table-tag "<table>" #+BIND: org-html-scripts "" #+BIND: org-html-divs ((preamble "header" "preamble") (content "section" "content") (postamble "footer" "postamble")) * Org HTML5 Test ok? * How about a table | col1 | col2 | |------+------| | a | 1 | | b | 2 | * And a list - a - b - c * A definiton list - a :: foo - b :: bar ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-13 17:10 ` Rick Frankel @ 2013-04-14 8:41 ` Bastien 0 siblings, 0 replies; 27+ messages in thread From: Bastien @ 2013-04-14 8:41 UTC (permalink / raw) To: Rick Frankel; +Cc: emacs-orgmode Hi Rick, Rick Frankel <rick@rickster.com> writes: > However, you will need to change the html-table-tag to not use > attributes, and remove the xml declaration > (which is a warning and not an error in html5) (Note that `org-html-table-tag' has been deleted, you need to check `org-html-table-default-attributes' instead.) The HTML5 validation is good news and your example is great. Would be nice to have this in worg/org-faq.org! Thanks, -- Bastien ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-08 21:09 ` Christian Moe 2013-04-10 17:44 ` François Pinard @ 2013-04-10 19:37 ` Nicolas Goaziou 2013-04-11 8:28 ` Christian Moe 1 sibling, 1 reply; 27+ messages in thread From: Nicolas Goaziou @ 2013-04-10 19:37 UTC (permalink / raw) To: Christian Moe; +Cc: Bastien, emacs-orgmode Hello, Christian Moe <mail@christianmoe.com> writes: > If I understand the question correctly, I think the union is the correct > answer, with provided attributes overwriting defaults for the same > attributes. > > In the example we started with, the defaults would create > > <table border="2" cellspacing="0" cellpadding="6" rules="groups" > frame="hsides"> > > If the user specifies > > #+attr_html: :border 2 :rules all :frame border :title My table > > I would expect the result > > <table border="2" cellspacing="0" cellpadding="6" rules="all" > frame="border" title="My table"> Thank you for all the information. I have pushed a patch along these lines. Caveat: `org-html-table-tag' is now named `org-html-table-default-attributes' and expect a plist as its value. Also, a nil value will remove the property from the attributes. Could you test it and confirm this is now behaving in a desirable way? Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-10 19:37 ` Nicolas Goaziou @ 2013-04-11 8:28 ` Christian Moe 2013-04-11 10:55 ` Nicolas Goaziou 0 siblings, 1 reply; 27+ messages in thread From: Christian Moe @ 2013-04-11 8:28 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Bastien, emacs-orgmode Nicolas Goaziou writes: > Caveat: `org-html-table-tag' is now named > `org-html-table-default-attributes' and expect a plist as its value. > Also, a nil value will remove the property from the attributes. > > Could you test it and confirm this is now behaving in a desirable way? Hi, I've run some tests and confirm it works as I'd like it to. Thanks, I really like this and I hope others like the plist syntax as well. Late thought, sorry: If we can have this plist syntax as a general rule, perhaps we should nevertheless keep the :options tag just as a fallback, to ease the transition for users with a lot of legacy attr_html lines? It's easier and less catastrophe-prone to do a quick search/replace from : ^#\+attr_html: to : #+attr_html: :options than it is to automatically replace verbatim attribute code with plists, especially if there are all sorts of html irregularities in there. Yours, Christian PS. Though if everything is nice and conforming to xhtml, one should be able to batch convert files from verbatim html attributes to plist syntax with something like the following -- USE AT OWN RISK, NO WARRANTY IMPLIED: : perl -i.bak -pe 's/([a-z]+)=([\"\'])(.*?)\2/:\1 \2/g if /^#\+attr_html/i' *.org ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-11 8:28 ` Christian Moe @ 2013-04-11 10:55 ` Nicolas Goaziou 2013-04-11 12:14 ` Christian Moe 2013-04-11 15:34 ` Bastien 0 siblings, 2 replies; 27+ messages in thread From: Nicolas Goaziou @ 2013-04-11 10:55 UTC (permalink / raw) To: Christian Moe; +Cc: Bastien, emacs-orgmode Hello, Christian Moe <mail@christianmoe.com> writes: > Nicolas Goaziou writes: >> Caveat: `org-html-table-tag' is now named >> `org-html-table-default-attributes' and expect a plist as its value. >> Also, a nil value will remove the property from the attributes. >> >> Could you test it and confirm this is now behaving in a desirable way? > > I've run some tests and confirm it works as I'd like it to. Thanks, I > really like this and I hope others like the plist syntax as well. Great. Thank you again. > Late thought, sorry: If we can have this plist syntax as a general rule, > perhaps we should nevertheless keep the :options tag just as a fallback, > to ease the transition for users with a lot of legacy attr_html lines? > It's easier and less catastrophe-prone to do a quick search/replace from > > : ^#\+attr_html: > > to > > : #+attr_html: :options > > than it is to automatically replace verbatim attribute code with plists, > especially if there are all sorts of html irregularities in there. I prefer not to mix the two methods as it would be fragile (e.g. what happens if an attribute is defined both outside and inside the :options keyword?). > PS. Though if everything is nice and conforming to xhtml, one should be > able to batch convert files from verbatim html attributes to plist syntax with > something like the following -- USE AT OWN RISK, NO WARRANTY IMPLIED: > > : perl -i.bak -pe 's/([a-z]+)=([\"\'])(.*?)\2/:\1 \2/g if /^#\+attr_html/i' *.org Would you mind adding it to Worg section about the migration to Org 8.0? It would be quite useful. Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-11 10:55 ` Nicolas Goaziou @ 2013-04-11 12:14 ` Christian Moe 2013-04-11 15:34 ` Bastien 1 sibling, 0 replies; 27+ messages in thread From: Christian Moe @ 2013-04-11 12:14 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: Bastien, emacs-orgmode Nicolas Goaziou writes: > I prefer not to mix the two methods as it would be fragile (e.g. what > happens if an attribute is defined both outside and inside the :options > keyword?). Perhaps not much. As I reported (the reason :options wasn't working), in Firefox the second definition of the attribute is simply quietly ignored. But if you prefer to keep it clean, I'm fine with that. >> to batch convert files from verbatim html attributes to plist syntax with >> something like the following -- USE AT OWN RISK, NO WARRANTY IMPLIED: >> >> : perl -i.bak -pe 's/([a-z]+)=([\"\'])(.*?)\2/:\1 \2/g if >> /^#\+attr_html/i' *.org Oops, in that message I accidentally copy-pasted a WRONG version. Hopefully didn't work at all, or it would mess things up. Sorry. This seems to work well: : perl -i.bak -pe "s/([a-z]+)=(\"|')(.*?)\2/:\1 \3/g if /^#\+attr_html/i" filename.org > Would you mind adding it to Worg section about the migration to > Org 8.0? It would be quite useful. Will do. Yours, Christian ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-11 10:55 ` Nicolas Goaziou 2013-04-11 12:14 ` Christian Moe @ 2013-04-11 15:34 ` Bastien 2013-04-11 17:29 ` Nicolas Goaziou 1 sibling, 1 reply; 27+ messages in thread From: Bastien @ 2013-04-11 15:34 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: emacs-orgmode, Christian Moe Hi, Nicolas Goaziou <n.goaziou@gmail.com> writes: >> than it is to automatically replace verbatim attribute code with plists, >> especially if there are all sorts of html irregularities in there. > > I prefer not to mix the two methods as it would be fragile (e.g. what > happens if an attribute is defined both outside and inside the :options > keyword?). Sorry, catching up in this thread -- my understanding was that :options was *always* available as a fallback, even with other attributes set before it. Am I wrong? If an attribute is both outside and inside the :options keywords, the outside version should take over. -- Bastien ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Attributes on HTML tables? 2013-04-11 15:34 ` Bastien @ 2013-04-11 17:29 ` Nicolas Goaziou 0 siblings, 0 replies; 27+ messages in thread From: Nicolas Goaziou @ 2013-04-11 17:29 UTC (permalink / raw) To: Bastien; +Cc: emacs-orgmode, Christian Moe Hello, Bastien <bzg@gnu.org> writes: > Nicolas Goaziou <n.goaziou@gmail.com> writes: > >>> than it is to automatically replace verbatim attribute code with plists, >>> especially if there are all sorts of html irregularities in there. >> >> I prefer not to mix the two methods as it would be fragile (e.g. what >> happens if an attribute is defined both outside and inside the :options >> keyword?). > > Sorry, catching up in this thread -- my understanding was that > :options was *always* available as a fallback, even with other > attributes set before it. Am I wrong? :options is more or less required in LaTeX export. Other keywords may go in different locations (optional arguments, mandatory arguments) so the back-end has to understand the keywords provided. It also means there will always be keywords it won't understand (i.e. which are not hardcoded). The :options bucket is a good place for them. On the other hand, I think we don't need it in HTML export. All attributes go in the same place, so the backend just transforms the plist into a string. Since it doesn't need to know about what it transforms, the bucket becomes useless, maybe confusing. Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 27+ messages in thread
end of thread, other threads:[~2013-04-15 18:04 UTC | newest] Thread overview: 27+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-04-07 2:55 Attributes on HTML tables? François Pinard 2013-04-07 6:27 ` Bastien 2013-04-07 14:42 ` Christian Moe 2013-04-07 18:46 ` Nicolas Goaziou 2013-04-07 20:39 ` Christian Moe 2013-04-07 20:48 ` Nicolas Goaziou 2013-04-08 21:09 ` Christian Moe 2013-04-10 17:44 ` François Pinard 2013-04-12 2:06 ` Eric Abrahamsen 2013-04-12 5:42 ` Bastien 2013-04-12 6:01 ` Eric Abrahamsen 2013-04-12 8:46 ` Bastien 2013-04-12 14:36 ` François Pinard 2013-04-13 3:38 ` Eric Abrahamsen 2013-04-13 5:31 ` Eric Abrahamsen 2013-04-13 20:42 ` Rick Frankel 2013-04-14 10:13 ` Eric Abrahamsen 2013-04-14 18:01 ` Rick Frankel 2013-04-15 18:03 ` Rick Frankel 2013-04-13 17:10 ` Rick Frankel 2013-04-14 8:41 ` Bastien 2013-04-10 19:37 ` Nicolas Goaziou 2013-04-11 8:28 ` Christian Moe 2013-04-11 10:55 ` Nicolas Goaziou 2013-04-11 12:14 ` Christian Moe 2013-04-11 15:34 ` Bastien 2013-04-11 17:29 ` Nicolas Goaziou
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).