.. include:: docs/header0.txt

==================
 Docutils History
==================

:Author: David Goodger; open to all Docutils developers
:Contact: docutils-develop@lists.sourceforge.net
:Date: $Date: 2024-04-23 20:54:26 +0200 (Di, 23. Apr 2024) $
:Revision: $Revision: 9649 $
:Web site: https://docutils.sourceforge.io/
:Copyright: This document has been placed in the public domain.

.. contents::


Release 0.21.2 (2024-04-23)
===========================

* Declare support for languages Georgian and Catalan (Valencian).

* docs/ref/docutils.dtd

  - Remove declaration of element <info>.
  - Remove <decoration> from content declaration of <section> elements.

* Fix test failures.


Release 0.21.1 (2024-04-10)
===========================

The sdist in 0.21 was incomplete

- pypi allows no file replacing
- adding a postrelease suffix "post1": docutils-0.21.post1.tar.gz
  works on pypi, but fails with pip because the metadata differs.

  But if the metadata is 0.21.post1 pypi makes it a new release.

  0.21.1 is the same code except for the version number.

Release 0.21 (2024-04-09)
=========================

* General

  - Drop support for Python 3.7 and 3.8.
  - Updated build system to use Flit_ (patch #186 by Adam Turner).
    Removed ``setup.py``.
  - Provide ``rst2*`` "console_scripts" `entry points`_
    (without the ``.py`` extension) instead of installing the
    ``rst2*.py`` front end tools in the binary PATH.

  .. _Flit: https://github.com/pypa/flit/

* docs/ref/docutils.dtd

  - The <image> element accepts a new attribute "loading".

  - Fix definitions (no change to actual behaviour):

    * The <math_block> element uses the attribute "xml:space".
    * The <raw> element may contain text only (no inline elements).
    * The <topic> element uses the "depth" and "local" attributes to
      store "contents" directive options when used as placeholder for a
      generated table of contents (LaTeX writers with `use_latex_toc`_
      setting).

  - Documentation fix:
    Reference names (``%refname.type`` and ``%refnames.type``)
    are whitespace-normalized but **not** always downcased.

* docutils/frontend.py

  - Allow `validate_*()` functions to be called with just the "value"
    argument but keep the legacy interface for use with optparse.
  - New function `frontend.validate_math_output()`.

* docutils/io.py

  - Simpler and more secure `input encoding`_ default behaviour:

    Do not use the locale encoding as fallback if Python is started in
    `UTF-8 mode`_. Stop using "latin1" as second fallback.

    Remove BOM (U+FEFF ZWNBSP at start of data) only if the "input_encoding"
    configuration setting is None, '', 'utf-8-sig', 'utf-16', or 'utf-32'.
    Do not remove other ZWNBSPs.

    .. _UTF-8 mode: https://docs.python.org/3/library/os.html#utf8-mode
    .. _input encoding: docs/api/publisher.html#encodings

  - Auto-close `FileInput.source` in case of reading/decoding errors.

* docutils/languages/, docutils/parsers/rst/languages/

  - Mark/Fix mistranslated localizations of the "admonition" directive
    name. In Docutils, "admonition" is used as a generic term for
    "advice"/"advisory"/"remark", not a reprimand.
  - Add support for Georgian language (patch #204 by Temuri Doghonadze).
  - Update/complete Catalan translations (patch #203 by Antoni Bella Pérez).

* docutils/nodes.py

  - Remove compatibility hacks `nodes.reprunicode` and `nodes.ensure_str()`.

* docutils/parsers/rst/directives/images.py

  - New "image" directive option "loading".

* docutils/parsers/rst/directives/tables.py

  - Use the same CSV format for the ``:header:`` option and the main data
    of the "csv-table" directive.

  - Move `parsers.rst.directives.Table.process_header_option()` method
    to `parsers.rst.directives.CSVTable`.

* docutils/parsers/rst/states.py

  - Don't split inside "< >" when parsing "option groups" (fixes bug #474).

* docutils/parsers/rst/directives/misc.py,
  docutils/parsers/rst/directives/tables.py

  - Consider the new root_prefix_ setting when including files with
    "include", "raw", or "csv-table" directives.

* docutils/utils/math/*

  - Use custom exception `utils.math.MathError` instead of
    abusing `SyntaxError` for LaTeX math syntax errors.
  - Unify interface of LaTeX -> MathML conversion functions.
    Improve error reporting.
  - Sort ℏ (`\hslash`) as "mathord", not "mathalpha".

* docutils/utils/math/latex2mathml.py

  - Generate "MathML Core" to fix rendering with Chromium/Android.

    Use CSS rules instead of the deprecated "columnalign" attribute
    to style <mtable> as "align" environment.

    Use Mathematical Alphanumeric Symbols instead of <mstyle> with
    "mathvariant" attribute.

  - Use <mi> instead of <mo> for character class "mathord".

  - Support "aligned" environment.

  - Eliminate side-effect on later import of "tex2unichar".

* docutils/utils/math/mathml_elements.py

  - New module defining MathML element classes
    (outsourced from latex2mathml.py).
  - Base MathML element classes on `xml.etree.ElementTree`.

* docutils/utils/roman.py

  - Update to version `1.4 <https://pypi.org/project/roman/4.1/>`__.
    Fixes feature-request #95 (license is now ZPL 2.1).

* docutils/utils/smartquotes.py

  - Pre-compile regexps once, not with every call of `educateQuotes()`
    (patch #206 by Chris Sewell).
  - Simplify regexps; skip replacement rules if there is nothing to replace.

* docutils/writers/html4css1/__init__.py

  - Support video inclusion via ``<object>`` tags.

* docutils/writers/html5_polyglot/\*.css

  - Move MathML styles to "minimal.css" (required for correct rendering).
  - Highlight heading of target section also with explicit hyperlink target.
  - No additional margins for line-blocks.

* docutils/writers/_html_base.py

  - Stop setting the "footnote-reference" class value for footnote references.
    Since 0.18, you can use the CSS selector ``[role="doc-noteref"]``.
  - Support reading/embedding images also with "file:" URI.
  - Warn, if image scaling fails because the image file cannot be read.
  - Support video inclusion via ``<video>`` tags
    (moved here from writers/html5_polyglot/__init__.py).
  - New auxiliary method `HTMLTranslator.uri2imagepath()` ensures the
    image file can also be read when CWD and output directory differ.
  - Consider the root_prefix_ setting when converting an image URI
    to a local filesystem path.
  - New `\<image>`_ attribute "loading" overrides image_loading_ setting.
  - Embed SVG images as ``<svg>`` instead of data-URI.
    Fixes feature-request #100.
  - Generate system messages for errors/warnings during the writing stage
    (image transformations, math content conversion, ...).
  - Close ``<dt>`` element in `depart_term()` to allow a
    "definition_list_item" with multiple "terms" (cf. feature-request #60).
  - Link to the document "#top" from the ToC heading
    (unless toc_backlinks_ is False).
  - Transfer `id` attribute from <field> elements to the respective
    <field_name> child element to allow cross-references to field-list items
    (<field>s are skipped in HTML output).

* docutils/writers/latex2e/__init__.py

  - Fix placement of hyperlink target (label) for tables (bug #440).
  - More compact LaTeX source for option-lists and description-lists
    (no change in output).

* docutils/writers/manpage.py

  - Put manual section in .TH in quotes.
  - Skip footer to avoid the link to document source in the manpage.
  - Add multiple definition list term support, see feature #60.
  - Render reference, refid and refuri.
    Use of ``.UR`` and ``.UE`` macros for reference markup is too brittle.
  - Add preprocessor hinting tbl first line, see bug #477.
  - Change tbl-Tables using box option, see bug #475.
  - Apply literal block patch #205. Use ``.EE`` and ``.EX`` macros.
    Thanks to G. Branden Robinson.

* docutils/writers/odf_odt/__init__.py

  - Use context manager for image reading operations.
    Catch `URLError` when `urllib.request.urlopen()` fails.

  - Convert image URI to path if accessing a local file. Fixes bug #153.

* docutils/writers/s5_html/__init__.py

  - Warn if the S5 writer cannot copy the theme files.
  - Programmatic customization of theme_url_ setting no longer
    overridden by the default for theme_.

* tools/buildhtml.py

  - New configuration setting `sources`_.
  - Match `prune`_ values with `fnmatch.fnmatch()`.


Release 0.20.1 (2023-05-17)
===========================

* docutils/MANIFEST.in

  - Include tox.ini and docutils.conf in the source package
    (cf. bug #467 and bug #461).

* tools/rst2odt_prepstyles.py

  - Moved to ``docutils/writers/odf_odt/prepstyles.py``.
    Replaced with a provisional backwards compatibility script.


Release 0.20 (2023-05-09)
=========================

* General

  - Docutils 0.20 is the last version supporting Python 3.7 and 3.8.
  - Support Python 3.11 (patch #198 by Hugo van Kemenade).

* docutils/core.py

  - New functions `rst2…()` for use as "console_scripts" `entry points`_.
    (cf. `Future changes` in the RELEASE-NOTES_).

* docutils/frontend.py

  - New configuration setting "output_". Obsoletes the ``<destination>``
    positional argument (cf. `Future changes` in the RELEASE-NOTES_).

* docutils/languages/
  docutils/parsers/rst/languages/

  - Support Ukrainian. Patch by Dmytro Kazanzhy.

* docutils/nodes.py

  - Fix `previous_sibling()` method that led to invalid HTML in some cases
    (cf. patch #195).
  - Fix bug #463. Spurious comma in deprecation warning.

* docutils/parsers/recommonmark_wrapper.py

  - Improved mock Sphinx module.

* docutils/transforms/__init__.py

  - `Transformer.populate_from_components()` now silently ignores
    components that are not instances of `docutils.TransformSpec`.

* docutils/transforms/frontmatter.py

  - Accept author names with initials like ``A. Einstein`` in the "author"
    `bibliographic field`_ instead of rising an error
    (generally, such names are `parsed as enumerated list`__).

    .. _bibliographic field:
        docs/ref/rst/restructuredtext.html#bibliographic-fields
    __ docs/ref/rst/restructuredtext.html#enumerated-lists

* docutils/transforms/references.py

  - `DanglingReferences` ignores `citation_reference` nodes if the
    "use_bibex" setting is active. (In this case, citations are provided
    by LaTeX/BibTeX.) Fixes bug #384.

* docutils/utils/__init__.py

  - New utility function `xml_declaration()`.
  - `DependencyList.add()` accepts `pathlib.Path` instances.
  - `find_file_in_dirs()` now returns a POSIX path also on Windows;
    `get_stylesheet_list()` no longer converts ``\`` to ``/``.

* docutils/utils/math/latex2mathml.py

  - Support "mod" notation for modulo operation / modulus arithmetic.

* docutils/utils/math/tex2mathml_extern.py

  - Support `Pandoc` as alternative LaTeX to MathML converter.
    Patch by Ximin Luo.

* docutils/writers/_html_base.py

  - Refactoring of `HTMLTranslator` initialization and collecting of
    document "parts". Adapt HTML writers importing `_html_base`.

    Changes to the HTML output (no space character before closing tag of
    XML declaration, order of metadata elements)
    don't affect the HTML semantics, styling, and rendering.

  - Wrap definition lists with "details" class argument in a <div>
    with the "id" and "class" values of the list node.

  - Use dpub-ARIA role "doc-footnote__" (instead of ARIA role "note")
    for footnotes.

    __ https://www.w3.org/TR/dpub-aria-1.1/#doc-footnote

* docutils/writers/html5_polyglot/__init__.py

  - Do not convert class values to HTML5 text-level tags inside
    <code> and <code-block> (fixes bug #476).

* docutils/writers/latex2e/__init__.py

  - Do not load the `inputenc` package in UTF-8 encoded LaTeX sources.
    (UTF-8 is the default encoding for LaTeX2e since 2018).
  - Fix behaviour of the use_bibtex_ setting.
  - Outsource parts of `depart_document()` to new auxiliary methods
    `make_title()` and `append_bibliography()`.
  - Ensure POSIX paths in stylesheet loading macros.

* docutils/writers/latex2e/titlepage.tex

  - Drop ``\usepackage{fixltx2e}`` from template.
    (Obsolete since 2015 and dropped from other templates in Docutils 0.14.)

* docutils/writers/manpage.py

  - Do not output empty "manual" in ``.TH``.

* docutils/writers/xetex/__init__.py

  - Ignore settings in the [latex2e writer] configuration file section.
    Place common settings in section [latex writers].

* setup.py

  - Fix SetuptoolsDeprecationWarning: ``Installing '' as data is deprecated``
    by adding data directories to package_data.packages list.

* tox.ini

  - Extracted flake8 configuration and moved to ``.flake8``.
  - changedir to directory ``test`` to avoid path problems.

* test/

  - Refactored tests to use common `unittest` idioms.
    Fixes errors when running the test suite with ``python -m unittest``
    or external test frameworks, such as Pytest_.

  .. _pytest: https://pypi.org/project/pytest/

* test/coverage.sh

  - Removed. Use the coverage.py_ project instead,
    ``coverage run test/alltests.py`` and ``coverage report``.

  .. _coverage.py: https://pypi.org/project/coverage/

* tools/

  - Moved ``quicktest.py`` to ``tools/dev/``.


Release 0.19 (2022-07-05)
=========================

* General

  - Dropped support for Python 2.7, 3.5, and 3.6. and removed compatibility
    hacks from code and tests.
  - Code cleanup,
    check PEP 8 conformity with `flake8` (exceptions in file tox.ini).

* docutils/__main__.py

  - New module. Support for ``python -m docutils``.
    Also used for the ``docutils`` console script `entry point`_.

* docutils/core.py

  - Let `Publisher.publish()` print info and prompt when waiting for input
    from a terminal (cf. https://clig.dev/#interactivity).
  - Respect `input_encoding_error_handler`_ setting when opening a source.

* docutils/io.py

  - New function `error_string()`
    obsoletes `utils.error_reporting.ErrorString`.
  - Class `ErrorOutput` moved here from `utils.error_reporting` module.
  - Use "utf-8-sig" instead of Python's default encoding if the
    `input_encoding`_ setting is None.
  - Fix error when reading of UTF-16 encoded source without trailing newline.
  - Suppress deprecation warning (fixes bug #464).

* docutils/parsers/__init__.py

  - Aliases "markdown" and "commonmark" point to "commonmark_wrapper".
  - Alias for the "myst" parser (https://pypi.org/project/myst-docutils).
  - Use absolute module names in `_parser_aliases` instead of two
    import attempts. (Keeps details if the `recommonmark_wrapper` module
    raises an `ImportError`.)
  - Prepend parser name to `ImportError` if importing a parser class fails.

* docutils/parsers/commonmark_wrapper.py

  - New module for parsing CommonMark input. Selects a locally installed
    3rd-party parser (`pycmark`, `myst`, or `recommonmark`).

* docutils/parsers/recommonmark_wrapper.py

  - Raise `ImportError`, if import of the upstream parser module fails.
    If called from an `"include" directive`_,
    the system-message now has source/line info.
  - Adapt to and test with `recommonmark` versions 0.6.0 and 0.7.1.

  .. _"include" directive: docs/ref/rst/directives.html#include

* docutils/parsers/rst/__init__.py

  - Update PEP base URL (fixes bug #445),
    use "https:" scheme in RFC base URL.
  - Add `reporter` to `Directive` class attributes.

* docutils/parsers/rst/directives/__init__.py

  - `parser_name()` keeps details if converting  `ImportError` to  `ValueError`.

* docutils/parsers/rst/roles.py

  - Don't use mutable default values for function arguments. Fixes bug #430.

* docutils/transforms/universal.py

  - Fix bug #435: invalid references in `problematic` nodes
    with report_level=4.

* docutils/utils/__init__.py

  - `decode_path()` returns `str` instance instead of `nodes.reprunicode`.

* docutils/utils/error_reporting.py

  - Add deprecation warning.

* docutils/writers/_html_base.py

  - Add "html writers" to `config_section_dependencies`. Fixes bug #443.
  - Write table column widths with 3 digits precision. Fixes bug #444.

* docutils/writers/html5_polyglot/__init__.py

  - Add space before "charset" meta tag closing sequence.
  - Remove class value "controls" from an `image` node with video content
    after converting it to a "control" attribute of the <video> tag.
  - Wrap groups of footnotes in an ``<aside>`` for easier styling.

* docutils/writers/pep_html/

  - Use "https:" scheme in "python_home" URL default.
  - Fix links in template.txt.

* setup.py

  - New ``docutils``" console script `entry point`_. Fixes bug #447.

* test/alltests.py

  - Always encode the log file ``alltests.out`` using "utf-8".

* test/DocutilsTestSupport.py

  - `exception_data()` now returns None if no exception was raised.
  - `recommonmark_wrapper` only imported if upstream parser is present.

* test/test_parsers/test_rst/test_directives/test_tables.py

  - Fix bug #436: Null char valid in CSV since Python 3.11.

* tools/docutils-cli.py

  - Allow 3rd-party drop-in components for reader and parser, too.
  - Fix help output.
  - Actual code moved to docutils.__main__.py.

* tools/rst2odt_prepstyles.py

  - Options ``-h`` and ``--help`` print short usage message.

.. _entry point:
.. _entry points:
    https://packaging.python.org/en/latest/specifications/entry-points/


Release 0.18.1 (2021-11-23)
===========================

* docutils/nodes.py

  - `Node.traverse()` returns a list again to restore backwards
    compatibility. Fixes bug #431.

  - New method `Node.findall()`: like `Node.traverse()` but returns an
    iterator. Obsoletes `Node.traverse()`.

* docutils/utils/__init__.py

  - Fix behaviour of `get_stylesheet_list()`: do not look up stylesheets
    given as `stylesheet`_ setting. Cf. bug #434.

* docutils/writers/_html_base.py

  - Fix handling of ``footnote_backlinks == False`` (report Alan G Isaac).

* docutils/writers/html5_polyglot/math.css

  - Fix typo (bug #432).

* docutils/writers/odf_odt/__init__.py

  - Fix spurious output with Windows (bug #350).

* test/test_error_reporting.py

  - Fix a false positive (bug #434).


Release 0.18 (2021-10-26)
=========================

* docutils/frontend.py
  - Mark as provisional (will switch from using `optparse` to `argparse`).
  - Remove hack for the now obsolete "mod_python" Apache module.
  - New function `get_default_settings()`.

* docutils/nodes.py

  - Don't change a list while looping over it (in
    `document.set_name_id_map()`). Thanks to Mickey Endito.

* docutils/parsers/recommonmark_wrapper.py

  - Test and update to work with `recommonmark` version 0.6.0.
    Still provisional.

    Unfortunately, recommonmark_ is `no longer maintained`__.

    __ https://github.com/readthedocs/recommonmark/issues/221

* docutils/parsers/rst/directives/misc.py

  - Fix bug #424 Wrong circular inclusion detection.
    Use a "magic" comment instead of line numbers
    to keep a log of recursive inclusions.

* docutils/parsers/rst/states.py

  -  Use a "magic" comment to update the log of recursive inclusions.

* docutils/writers/html5_polyglot/__init__.py

  - New option `image_loading`_. Support "lazy" loading of images.
    Obsoletes `embed_images`_.

* docutils/writers/pseudoxml.py

  - Fix spelling of setting `detailed`_.

* tools/docutils-cli.py

  - Read settings from standard configuration files.

Fix spelling errors in documentation and docstrings.
Thanks to Dimitri Papadopoulos.


Release 0.18b1 (2021-10-05)
===========================

* docs/ref/docutils.dtd

  - New document tree element <meta>.

* docutils/frontend.py

  - The default value for the `auto_id_prefix`_ setting changed to "%":
    auto-generated IDs use the tag name as prefix.

* docutils/nodes.py

  - Make `\<meta>`_ a standard Docutils doctree node. Writers may ignore
    <meta> nodes if they are not supported by the output format.

  - document.make_id(): Do not strip leading number and hyphen characters
    from `name` if the `id_prefix`_ setting is non-empty.

  - `Node.traverse()` returns an iterator instead of a list.

* docutils/parsers/rst/directives/html.py

  - Removed. (Meta directive moved to ``misc.py``.)

* docutils/parsers/rst/directives/misc.py

  - `Meta` directive class (moved from html.py) inserts `meta`
    (instead of `pending`) nodes.

  - Add `class` option to `Raw` directive.

* docutils/parsers/rst/directives/tables.py

  - Unify behaviour of `"widths" option`_: check that the length of an
    integer list equals the number of table columns also for the "table"
    directive.

* docutils/tools/math/math2html.py,
  docutils/tools/math/tex2unicode.py,
  docutils/writers/html5/math.css

  - Fork from elyxer and remove code that is not required
    for math conversion.
  - Scale variable sized operators and big delimiters with CSS
  - Support more commands, fix mapping of commands to Unicode characters
    (cf. `LaTeX syntax for mathematics`_).
  - Fix bug #244 Wrong subscript/superscript order.
  - Don't use <tt> element (deprecated in HTML5).
  - Use STIX fonts if available.

  .. _LaTeX syntax for mathematics: docs/ref/rst/mathematics.html

* docutils/parsers/rst/states.py

  - Fix source location (line number) for attribution elements.
    Patch by Mickey Endito.
  - Add line, source, and rawsource internal attributes for blockquote
    elements. Patch by Mickey Endito.

* docutils/transforms/references.py

  - Skip system_messages when propagating targets. Fixes bug #425.

* docutils/utils/__init__.py

  - Removed `unique_combinations()` (obsoleted by `itertools.combinations()`).

* docutils/utils/latex2mathml.py

  - Major update (fixes and support for additional commands and symbols).
    Fixes bug #407.

* docutils/writers/_html_base.py

  - Write footnote brackets and field term colons to HTML, so that
    they are present also without CSS and when copying text.
    Adapt ``minimal.css``.

  - Use semantic tags <aside> for footnote text, topics, admonitions,
    and system-messages and <nav> for the table of contents. Use <div>
    for citations.

  - Only specify table column widths, if the `"widths" option`_ is set
    and is not "auto" (fixes bug #426).
    The `table_style`_ setting "colwidths-grid" restores the current default.

    .. _"widths" option: docs/ref/rst/directives.html#column-widths

  - Use ARIA roles to enable accessible HTML for abstract, dedication,
    the table of contents, footnote, references, footnotes, citations,
    and backlinks.

  - Use "aria-level" attribute instead of invalid tags <h7>, <h8>, ...
    for headings of deeply nested sections.

  - Do not set classes "compound-first", "compound-middle", or
    "compound-last" to elements nested in a compound.
    Use class value "backrefs" instead of "fn-backref" for a span of
    back-references.

  - Do not write class values handled by the HTML writer ("colwidths-auto",
    "colwidths-given", "colwidths-grid") to the output.

  - Move space character between section number and heading into
    "sectnum" span.

  - Removed attribute `HTMLTranslator.topic_classes`

  - Items of a definition list with class argument "details" are
    converted to <details> disclosure elements.

* docutils/writers/html4css1/__init__.py

  - Overwrite methods in _html_base.HTMLTranslator that use HTML5 tags
    (details, aside, nav, ...) and attributes (role, aria-level).

* docutils/writers/latex2e/__init__.py

  - The setting `legacy_class_functions`_ now defaults to "False".
    Adapt stylesheets modifying ``\DUadmonition`` and/or ``\DUtitle``.

  - Apply patch #181 "Fix tocdepth when chapter/part in use" by
    John Thorvald Wodder II.

  - Fix newlines after/before `ids_to_labels()` (cf. patch #183).

  - Refactor/revise ToC writing.

  - Don't add ``\phantomsection`` to labels in math-blocks.

  - Improve spacing and allow customization of Docutils-generated table
    of contents.

  - New algorithm for table column widths. Fixes bug #422.
    New configuration setting `legacy_column_widths`_.

    `Table.set_table_style()` arguments changed.

    Only write "continued on next page..." if it fits
    without making the table columns wider.

    Table "width" option overrides conflicting "auto" column "widths".

* docutils/writers/latex2e/docutils.sty

  - Fix excessive padding above sidebar titles.

* docutils/writers/pseudoxml.py

  - Fix option `detailed`_ under Python 2.7.

* docutils/writers/s5_html/themes/default

  - Remove IE 6 compatibility workarounds ``iepngfix.htc`` and
    ``blank.gif`` (fixes bug #169).

* docutils/writers/manpage.py

  - Fix: double quotes need to be escaped on macro invocation.
    Done everywhere.


Release 0.17.1 (2021-04-16)
===========================

* docutils/utils/math/latex2mathml.py

  - Fix bug #406 (MathML translation of ``\mathbf``).

* docutils/writers/latex2e/__init__.py

  - Open ``docutils.sty`` with encoding set to "utf-8".
    Fixes bug #414: error with Py3k when locale encoding is "ascii".

* docutils/parsers/*.py, docutils/transforms/*.py

  - Provide fallbacks for parser config settings
    to facilitate programmatic use.

* docutils/writers/manpage.py

  - Apply patch #166: move macro defs above ``.TH``
    (thanks Willie and sorry for the delay).


Release 0.17 (2021-04-03)
=========================

* General

  - Installing with ``setup.py`` now requires `setuptools`.
    Alternatively, install with `pip`_ (or "manually").
  - Use `importlib.import_module()` to programmatically import modules.
  - Fix bug #385: Import of language modules.

  .. _pip: https://pypi.org/project/pip/

* docs/ref/docutils.dtd

  - The "title" attribute of <sidebar> elements is now optional.

* docutils/MANIFEST.in

  - Exclude test outputs.

* docutils/__init__.py

  - VersionInfo:  `ValueError` for invalid values, fix comparison to tuples.

* docutils/languages/
  docutils/parsers/rst/languages/

  - Apply patch # 177 Arabic mappings by Shahin.
  - Apply patch for bug #399 Fixes in Korean translation by Shinjo Park.

* docutils/nodes.py

  - Apply patch #165 "Fix error when copying `system_message` node"
    by Takeshi KOMIYA.
  - Apply version of patch #167 "Let `document.set_id()` register all
    existing IDs". Thanks to Takeshi KOMIYA.
  - Fix bug #410: Use a "property" function to recursively fetch
    `Node.document` value from parent node.

* docutils/parsers/recommonmark_wrapper.py

  - New, **experimental** wrapper to integrate the
    `recommonmark`_ Markdown parser for use with Docutils.
    Currently only tested with `recommonmark` version 0.4.0.

    .. _recommonmark: https://pypi.org/project/recommonmark/

* docutils/parsers/rst/directives/body.py

  - Make the sidebar's "title" argument optional (feature request #69).

* docutils/parsers/rst/directives/html.py

  - Make `meta` elements available for "latex" and "odt" writers.

* docutils/parsers/rst/directives/misc.py

  - Prevent infinite inclusion loops.

* docutils/parsers/rst/roles.py

  - Apply patch #174 "Lowercase new role names on registration"
    by John Thorvald Wodder II.

* docutils/utils/smartquotes.py

  - Fix bug #383: Smart quotes around opening and separator characters.

* docutils/transforms/components.py

  - Allow a comma-separated list of formats for the Filter transform.

* docutils/writers/html*

  - Implement feature request #40 "Option to embed images as data URI".

* docutils/writers/html5_polyglot/__init__.py

  - Use the new semantic tags <main>, <section>, <header>,
    <footer>, <aside>, <figure>, and <figcaption>.
    See ``minimal.css`` and ``plain.css`` for styling rule examples.

    Change the `initial_header_level`_ setting default to "2", as browsers
    use the `same style for <h1> and <h2> when nested in a <section\>`__.

    __ https://stackoverflow.com/questions/39547412/same-font-size-for-h1-and-h2-in-article

  - Use HTML text-level tags <small>, <s>, <q>, <dfn>, <var>, <samp>, <kbd>,
    <i>, <b>, <u>, <mark>, and <bdi> if a unique, matching class value
    is found in `\<inline>`_ and `\<literal>`_ elements.
    Use <ins> and <del> if a unique matching class value
    is found in `inline`, `literal`, or `container` elements.
    Use <small> for generated code line numbers.

  - Fix bug #398: properly close link tag to "schema.dcterms".

  - Add a `viewport meta tag`__ to fix rendering in mobile browsers.

    __ https://developer.mozilla.org/en-US/docs/Web/HTML/Viewport_meta_tag

  - Use <video> for images with video MIME types supported by HTML5.

* docutils/writers/html5_polyglot/minimal.css

  - Move non-essential styling to ``plain.css``.
    Small fixes and tweaks.

  - Support "captionbelow" class value for tables.

  - Display code line numbers as pseudo-elements which are skipped
    when copying text from code blocks. Solves feature request #32.

* docutils/writers/html5_polyglot/plain.css

  - Support numbered figures.

* docutils/writers/html5_polyglot/responsive.css

  - New optional style that adapts to different screen sizes.

* docutils/writers/latex2e/__init__.py

  - Use LaTeX environments for admonitions and "class wrappers" for styling
    admonitions and titles if the new configuration setting
    `legacy_class_functions`_ is False.

  - Remove backwards compatibility code for the deprecated
    `styling command`__ prefix ``\docutilsrole``.

    __ docs/user/latex.html#custom-interpreted-text-roles

  - Remove legacy LaTeX stylesheet ``docutils-05-compat.sty``.

  - Support the `memoir` LaTeX document class.
    Fixes bugs #390, #391, and #392. Thanks to John Thorvald Wodder II.

  - The special value "auto" for the `graphicx_option`_ setting
    is no longer supported (it never worked for xetex/luatex).

  - Most helper commands and element definitions are now defined in the
    LaTeX package `docutils.sty`_ and only inserted in the document
    preamble if the `stylesheet`__ setting does not list "docutils".

    .. _docutils.sty: https://ctan.org/pkg/docutils
    __ docs/user/config.html#stylesheet-latex-writers

  - Apply patch #173 "Make \*TeX writers convert nonstandard table
    classes to DUclass environments" by John Thorvald Wodder II.

  - Fix bug #408 "Incorrect assert in latex writer
    for multiple citation references".

  - Apply patch #175 "Fix alignment of nested tables"
    by John Thorvald Wodder II. Additional fixes to table alignment.

  - Do not write Docutils-generated ToC, when ``use_latex_toc == True``.
    (This did happen when publishing from a doctree.)

  - Set PDF document properties from "meta" directive content.

  - Apply version of patch #176 "LaTeX writer: Append ``\leavevmode`` to
    non-docinfo field names" by John Thorvald Wodder II.

* docutils/writers/manpage.py

  - Fix #394 fix missing new line after rubric.
  - Patch #168 fix crashing on empty citation (by Takeshi KOMIYA).
  - Fix #126 manpage title with spaces.
  - Fix #380 command line option problem in sphinx.

* docutils/writers/odf_odt/__init__.py

  - Fix/improve metadata handling:
    fix "keyword" splitting,
    allow generic fields (stored as "Custom Properties").

* docutils/writers/pseudoxml.py

  - New option `detailled`_.

* test/DocutilsTestSupport.py

  - Run python3 test like python2 against source not the build/-directory

* tools/docutils-cli.py

  - New generic command line front end that allows the free selection of
    reader, parser, and writer components.


Release 0.16 (2020-01-16)
=========================

* General

  - Dropped support for Python 2.6, 3.3 and 3.4
  - Docutils now supports Python 2.7 and Python 3.5+ natively
    (without conversion by `2to3`).
  - Keep `backslash escapes`__ in the document tree. Backslash characters in
    text are be represented by NULL characters in the `text` attribute of
