|
|
===================== |
|
|
Docutils HTML writers |
|
|
===================== |
|
|
|
|
|
.. contents:: |
|
|
|
|
|
html |
|
|
---- |
|
|
|
|
|
`html` is an alias for the default Docutils HTML writer. |
|
|
Currently, `html` is mapped to html4css1_. |
|
|
|
|
|
The target may change with the development of HTML, browsers, Docutils, and |
|
|
the web. |
|
|
|
|
|
* Use ``get_writer_by_name('html')`` or the rst2html.py_ front end, if you |
|
|
want the output to be up-to-date automatically. |
|
|
|
|
|
* Use a specific writer name or front end, if you depend on stability of the |
|
|
generated HTML code, e.g. because you use a custom style sheet or |
|
|
post-processing that may break otherwise. |
|
|
|
|
|
|
|
|
html4css1 |
|
|
--------- |
|
|
|
|
|
:aliases: html4, html_ |
|
|
:front-ends: rst2html4.py, rst2html.py_ |
|
|
:config: `[html4css1 writer]`_ |
|
|
|
|
|
The HTML Writer module, ``docutils/writers/html4css1.py``, was the first |
|
|
Docutils writer and up to release 0.13 the only official HTML writer. |
|
|
|
|
|
The output conforms to the `XHTML 1 Transitional`_ specification. It does |
|
|
not validate as `HTML 4.01 Transitional`_ due to the closing of empty tags |
|
|
required in XML but not allowed in HTML 4. However, the output follows the |
|
|
`HTML Compatibility Guidelines`_ for proper rendering on most HTML user |
|
|
agents. |
|
|
|
|
|
Correct rendering depends on a CSS_ style sheet. A reference style sheet, |
|
|
`html4css1.css`_, is provided and used by default. |
|
|
|
|
|
To support the `Internet Explorer` (with a market share of about 90% around |
|
|
2002, the time this writer was written), documents contain some hard-coded |
|
|
formatting hints and are tagged as "text/html" (instead of |
|
|
"application/xhtml+xml"). [#IE]_ |
|
|
|
|
|
.. [#IE] Conformance to `CSS 2.1`_ has been added in IE 8 (2009), support |
|
|
for XHTML in IE 9 (2011). |
|
|
|
|
|
.. _rst2html.py: tools.html#rst2html-py |
|
|
.. _[html4css1 writer]: config.html#html4css1-writer |
|
|
.. _html4css1.css: ../../docutils/writers/html4css1/html4css1.css |
|
|
|
|
|
pep_html |
|
|
~~~~~~~~ |
|
|
|
|
|
:front-end: rstpep2html.py_ |
|
|
:config: `[pep_html writer]`_ |
|
|
|
|
|
This is a special writer for the generation of `Python Enhancement |
|
|
Proposals`_ (PEPs). It inherits from html4css1_ and adds some `PEP-specific |
|
|
options`_, a style sheet and template. The front-end uses also a specialised |
|
|
reader. |
|
|
|
|
|
.. _rstpep2html.py: tools.html#rstpep2html-py |
|
|
.. _PEP-specific options: |
|
|
.. _[pep_html writer]: config.html#pep-html-writer |
|
|
.. _Python Enhancement Proposals: https://www.python.org/dev/peps/ |
|
|
|
|
|
s5_html |
|
|
~~~~~~~ |
|
|
|
|
|
:alias: s5 |
|
|
:front-end: rst2s5.py_ |
|
|
:config: `[s5_html writer]`_ |
|
|
|
|
|
The `s5` writer inherits from html4css1_. It produces XHTML for use with |
|
|
S5_, the “Simple Standards-based Slide Show System” by Eric Meyer. See |
|
|
`Easy Slide Shows With reST & S5`_ for details. |
|
|
|
|
|
.. _rst2s5.py: tools.html#rst2s5-py |
|
|
.. _[s5_html writer]: config.html#s5-html-writer |
|
|
.. _Easy Slide Shows With reST & S5: slide-shows.html |
|
|
.. _S5: http://meyerweb.com/eric/tools/s5/ |
|
|
.. _theme: tools.html#themes |
|
|
|
|
|
|
|
|
html5_polyglot |
|
|
-------------- |
|
|
|
|
|
:aliases: html5 |
|
|
:front-end: rst2html5.py_ |
|
|
:config: `[html5 writer]`_ |
|
|
|
|
|
The ``html5_polyglot`` writer generates `polyglot HTML`_ [#]_ output, valid |
|
|
XML [#safetext]_ that is compatible with `HTML5`_. New features and elements |
|
|
will only be used if they are widely supported to make documents `viewable |
|
|
with any browser`_. |
|
|
|
|
|
There is no hard-coded formatting information in the HTML document. Correct |
|
|
rendering of elements not directly supported by HTML depends on a CSS_ style |
|
|
sheet. The provided style sheets minimal.css_ and plain.css_ define required |
|
|
and optional styling rules respectively. Adaption of the layout is possible |
|
|
with `custom style sheets`_. [#safetext]_ |
|
|
|
|
|
New in Docutils 0.13 |
|
|
|
|
|
.. [#] see also `Benefits of polyglot XHTML5`_ |
|
|
.. [#safetext] The validity of raw HTML and custom stylesheets must be |
|
|
ensured by the author (e.g. using `safe text content`_). |
|
|
|
|
|
.. _rst2html5.py: tools.html#rst2html5-py |
|
|
.. _[html5 writer]: config.html#html5-writer |
|
|
.. _minimal.css: ../../docutils/writers/html5_polyglot/minimal.css |
|
|
.. _plain.css: ../../docutils/writers/html5_polyglot/plain.css |
|
|
.. _custom style sheets: ../howto/html-stylesheets.html |
|
|
.. _viewable with any browser: http://www.anybrowser.org/campaign |
|
|
.. _Benefits of polyglot XHTML5: http://xmlplease.com/xhtml/xhtml5polyglot/ |
|
|
.. _safe text content: |
|
|
https://www.w3.org/TR/html-polyglot/#dfn-safe-text-content |
|
|
|
|
|
|
|
|
HTML writers in the sandbox |
|
|
--------------------------- |
|
|
|
|
|
There are two more HTML writers in the sandbox_: |
|
|
|
|
|
.. _sandbox: ../dev/policies.html#the-sandbox |
|
|
|
|
|
xhtml11 |
|
|
~~~~~~~ |
|
|
:aliases: xhtml, html4strict |
|
|
:front-end: rst2xhtml.py |
|
|
:config: `[xhtml11 writer]` |
|
|
|
|
|
`XHTML 1.1`_ is the latest version of the XML based `extensible |
|
|
Hypertext Markup Language` with an official DTD. |
|
|
|
|
|
The `xhtml11 writer`_ lives in the Docutils sandbox_ since 2008. The output |
|
|
conforms to the strict requirements of `XHTML 1.1`_. |
|
|
|
|
|
.. _xhtml11 writer: ../../../sandbox/html4strict/README.html |
|
|
|
|
|
|
|
|
html4trans |
|
|
~~~~~~~~~~ |
|
|
|
|
|
:front-end: rst2html_trans.py_ |
|
|
|
|
|
The `HTML writer for lightweight browsers`_ lives in the Docutils sandbox |
|
|
(`sandbox/html4trans`_) since 2008. It removes the dependency on CSS. The |
|
|
output conforms to `XHTML 1 Transitional`_ and contains sufficient |
|
|
formatting information for rendering without style sheet. (Of course, this |
|
|
has some drawbacks_.) |
|
|
|
|
|
.. _HTML writer for lightweight browsers: |
|
|
../../../sandbox/html4trans/README.html |
|
|
.. _drawbacks: ../../../sandbox/html4trans/README.html#drawbacks |
|
|
.. _sandbox/html4trans: ../../../sandbox/html4trans |
|
|
.. _rst2html_trans.py: ../../../sandbox/html4trans/tools/rst2html_trans.py |
|
|
|
|
|
|
|
|
Overview |
|
|
-------- |
|
|
|
|
|
=============== =========== ============== ================= =========== |
|
|
name alias(es) `front-end`_ HTML version CSS version |
|
|
=============== =========== ============== ================= =========== |
|
|
html4css1_ html4, rst2html4.py, `XHTML 1 `CSS 1`_ |
|
|
html_ rst2html.py Transitional`_ |
|
|
|
|
|
pep_html_ .. rstpep2html.py `XHTML 1 `CSS 1`_ |
|
|
Transitional`_ |
|
|
|
|
|
s5_html_ s5 rst2s5.py `XHTML 1 `CSS 1`_ |
|
|
Transitional`_ |
|
|
|
|
|
html5_polyglot_ html5 rst2html5.py `HTML5`_ `CSS 3`_ |
|
|
|
|
|
xhtml11_ xhtml, rst2xhtml.py `XHTML 1.1`_ `CSS 3`_ |
|
|
html4strict |
|
|
|
|
|
html4trans_ .. rst2html_trans `XHTML 1 no CSS |
|
|
Transitional`_ required |
|
|
=============== =========== ============== ================= =========== |
|
|
|
|
|
|
|
|
References |
|
|
---------- |
|
|
|
|
|
_`HTML5` |
|
|
`HTML5, A vocabulary and associated APIs for HTML and XHTML`, |
|
|
W3C Recommendation, 28 October 2014. |
|
|
http://www.w3.org/TR/html5/ |
|
|
|
|
|
_`XHTML 1.1` |
|
|
`XHTML™ 1.1 - Module-based XHTML - Second Edition`, |
|
|
W3C Recommendation, 23 November 2010. |
|
|
http://www.w3.org/TR/xhtml11/ |
|
|
|
|
|
_`XHTML 1 Transitional` |
|
|
`Transitional version`_ of: |
|
|
`XHTML™ 1.0 The Extensible HyperText Markup Language (Second |
|
|
Edition)`, `A Reformulation of HTML 4 in XML 1.0`, |
|
|
W3C Recommendation, 26 January 2000, revised 1 August 2002. |
|
|
http://www.w3.org/TR/xhtml1/ |
|
|
|
|
|
_`XHTML Basic` |
|
|
`XHTML™ Basic 1.1 - Second Edition`, |
|
|
W3C Recommendation, 23 November 2010. |
|
|
http://www.w3.org/TR/xhtml-basic/ |
|
|
|
|
|
.. _transitional version: |
|
|
http://www.w3.org/TR/xhtml1/#a_dtd_XHTML-1.0-Transitional |
|
|
|
|
|
_`HTML 4.01 Transitional` |
|
|
Transitional version of: |
|
|
`HTML 4.01 Specification`, W3C Recommendation 24 December 1999. |
|
|
http://www.w3.org/TR/html4/ |
|
|
|
|
|
.. _`CSS 1`: |
|
|
|
|
|
_`CSS Level 1`: |
|
|
The features defined in the `CSS1 specification`_, but using the syntax |
|
|
and definitions in the `CSS 2.1`_ specification. |
|
|
|
|
|
_`CSS 2.1` `Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification`, |
|
|
W3C Recommendation 07 June 2011. |
|
|
http://www.w3.org/TR/CSS21/ |
|
|
|
|
|
_`CSS 3`: |
|
|
CSS Level 3 builds on CSS Level 2 module by module, using the CSS2.1 |
|
|
specification as its core. |
|
|
|
|
|
Specifications: http://www.w3.org/Style/CSS/specs.en.html |
|
|
|
|
|
Validator: http://jigsaw.w3.org/css-validator/ |
|
|
|
|
|
.. other references |
|
|
---------------- |
|
|
|
|
|
.. _HTML Compatibility Guidelines: http://www.w3.org/TR/xhtml1/#guidelines |
|
|
.. _CSS: http://www.w3.org/TR/CSS/ |
|
|
.. _CSS1 specification: http://www.w3.org/TR/2008/REC-CSS1-20080411/ |
|
|
.. _polyglot HTML: http://www.w3.org/TR/html-polyglot/ |
|
|
|
|
|
.. Beware. This specification is no longer in active maintenance and the |
|
|
HTML Working Group does not intend to maintain it further. |
|
|
|
|
|
.. Appendix |
|
|
|
|
|
|
|
|
On the question of Polyglot markup, there seems to be little |
|
|
consensus. One line of argument suggests that, to the extent that it |
|
|
is practical to obey the Robustness principle, it makes sense to do |
|
|
so. That is, if you're generating HTML markup for the web, and you can |
|
|
generate Polyglot markup that is also directly consumable as XML, you |
|
|
should do so. Another line of argument suggests that even under the |
|
|
most optimistic of projections, so tiny a fraction of the web will |
|
|
ever be written in Polyglot that there's no practical benefit to |
|
|
pursuing it as a general strategy for consuming documents from the |
|
|
web. If you want to consume HTML content, use an HTML parser that |
|
|
produces an XML-compatible DOM or event stream. |
|
|
|
|
|
-- https://www.w3.org/TR/html-xml-tf-report/#conclusions |
|
|
|
|
|
Further development |
|
|
|
|
|
On 2016-05-25, David Goodger wrote: |
|
|
|
|
|
> In addition, I'd actually like to see the HTML writer(s) with |
|
|
> fully-parameterized classes, i.e. removing hard-coded *classes* as well as |
|
|
> formatting. This way, any user who wants to (e.g.) write reST for use with |
|
|
> Bootstrap can easily work around any naming conflicts. |
|
|
|
|
|
|
|
|
|
|
|
Problems with html4css1 writer: |
|
|
|
|
|
1. Limiting ourself to CSS Level 1 requires use of hard-coded HTML |
|
|
formatting to get all rST objects mapped to HTML. |
|
|
Hard-coded HTML formatting is considered bad practice. |
|
|
|
|
|
2. Maths cannot be included in MathML format without rendering a |
|
|
hmtl4css1-generated document invalid. |
|
|
|
|
|
(XHTML 1.1. is the only member of the "HTML4 family" allowing embedding |
|
|
of MathML. However, hard-coded HTML formatting prevents its use.) |
|
|
|
|
|
|
|
|
|
|
|
Comparison of current HTML versions |
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
|
|
|
|
XHTML1.1 |
|
|
"""""""" |
|
|
|
|
|
+2 XML-based with official DTD |
|
|
+1 allows processing with XML-tool-chain |
|
|
+1 allows validating against the DTD |
|
|
|
|
|
+1 writer exists (in sandbox) and in active use since 2008 |
|
|
|
|
|
-1 "old" format |
|
|
-1 requires to work around restrictions lifted in HTML5 |
|
|
("start" argument for enumerated lists, some tags in parsed literal) |
|
|
which makes code and documents more complicated |
|
|
|
|
|
HTML5 |
|
|
""""" |
|
|
+1 more recent |
|
|
+1 simpler to write, less restrictions |
|
|
|
|
|
+1 writer exists and in active use since 2015 |
|
|
|
|
|
+1 new page structure elements such as <main>, <section>, <article>, |
|
|
<header>, <footer>, <aside>, <nav> and <figure> |
|
|
provide better matches for the rst document model. |
|
|
|
|
|
-1 new elements not yet supported by many browsers. |
|
|
|
|
|
-2 no DTD |
|
|
- no proper validation possible (there is an experimental validator) |
|
|
- no standard interface to post-processing XML-tools |
|
|
|
|
|
-1 two concurring definitions: |
|
|
W3C standard and WHATWG "HTML Living Standard". |
|
|
|
|
|
.. _front-end: tools.html
|
|
|
|