[rtems-source-builder commit] sb: Back port changes to support mailing list posting.

Chris Johns chrisj at rtems.org
Mon Feb 5 23:20:28 UTC 2018


Module:    rtems-source-builder
Branch:    4.10
Commit:    652a90f0a8613ee3bc4112a69137730b5abd9938
Changeset: http://git.rtems.org/rtems-source-builder/commit/?id=652a90f0a8613ee3bc4112a69137730b5abd9938

Author:    Chris Johns <chrisj at rtems.org>
Date:      Fri Feb  2 10:59:21 2018 +1100

sb: Back port changes to support mailing list posting.

Close #3287

---

 rtems/config/4.10/rtems-autotools.bset             |    5 +
 source-builder/sb/asciidoc/BUGS                    |   27 -
 source-builder/sb/asciidoc/BUGS.txt                |   20 -
 source-builder/sb/asciidoc/CHANGELOG               | 3291 ----------
 source-builder/sb/asciidoc/CHANGELOG.txt           | 3128 ----------
 source-builder/sb/asciidoc/COPYING                 |  339 --
 source-builder/sb/asciidoc/COPYRIGHT               |   18 -
 source-builder/sb/asciidoc/INSTALL                 |  235 -
 source-builder/sb/asciidoc/INSTALL.txt             |  227 -
 source-builder/sb/asciidoc/MANIFEST                |   90 -
 source-builder/sb/asciidoc/Makefile.in             |  185 -
 source-builder/sb/asciidoc/README                  |   45 -
 source-builder/sb/asciidoc/README.txt              |   35 -
 source-builder/sb/asciidoc/a2x.py                  |  960 ---
 source-builder/sb/asciidoc/asciidoc.conf           |  647 --
 source-builder/sb/asciidoc/asciidoc.py             | 6260 --------------------
 source-builder/sb/asciidoc/asciidocapi.py          |  257 -
 source-builder/sb/asciidoc/common.aap              |    9 -
 source-builder/sb/asciidoc/configure               | 3033 ----------
 source-builder/sb/asciidoc/configure.ac            |   11 -
 .../sb/asciidoc/dblatex/asciidoc-dblatex.sty       |   20 -
 .../sb/asciidoc/dblatex/asciidoc-dblatex.xsl       |   74 -
 .../sb/asciidoc/dblatex/dblatex-readme.txt         |   39 -
 source-builder/sb/asciidoc/doc/a2x.1               |  744 ---
 source-builder/sb/asciidoc/doc/a2x.1.txt           |  358 --
 source-builder/sb/asciidoc/doc/article-docinfo.xml |   87 -
 source-builder/sb/asciidoc/doc/article.pdf         |  Bin 37949 -> 0 bytes
 source-builder/sb/asciidoc/doc/article.txt         |  139 -
 source-builder/sb/asciidoc/doc/asciidoc.1          |  310 -
 source-builder/sb/asciidoc/doc/asciidoc.1.txt      |  197 -
 source-builder/sb/asciidoc/doc/asciidoc.conf       |    7 -
 source-builder/sb/asciidoc/doc/asciidoc.dict       | 1085 ----
 source-builder/sb/asciidoc/doc/asciidoc.txt        | 6038 -------------------
 source-builder/sb/asciidoc/doc/asciidocapi.txt     |  189 -
 source-builder/sb/asciidoc/doc/asciimathml.txt     |   61 -
 source-builder/sb/asciidoc/doc/book-multi.txt      |  181 -
 source-builder/sb/asciidoc/doc/book.epub           |  Bin 17614 -> 0 bytes
 source-builder/sb/asciidoc/doc/book.txt            |  156 -
 source-builder/sb/asciidoc/doc/customers.csv       |   18 -
 source-builder/sb/asciidoc/doc/epub-notes.txt      |  210 -
 source-builder/sb/asciidoc/doc/faq.txt             | 1358 -----
 source-builder/sb/asciidoc/doc/images/icons/README |    5 -
 .../sb/asciidoc/doc/images/icons/callouts/1.png    |  Bin 329 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/callouts/10.png   |  Bin 361 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/callouts/11.png   |  Bin 565 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/callouts/12.png   |  Bin 617 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/callouts/13.png   |  Bin 623 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/callouts/14.png   |  Bin 411 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/callouts/15.png   |  Bin 640 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/callouts/2.png    |  Bin 353 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/callouts/3.png    |  Bin 350 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/callouts/4.png    |  Bin 345 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/callouts/5.png    |  Bin 348 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/callouts/6.png    |  Bin 355 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/callouts/7.png    |  Bin 344 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/callouts/8.png    |  Bin 357 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/callouts/9.png    |  Bin 357 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/caution.png       |  Bin 2734 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/example.png       |  Bin 2599 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/home.png          |  Bin 1340 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/important.png     |  Bin 2980 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/next.png          |  Bin 1302 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/note.png          |  Bin 2494 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/prev.png          |  Bin 1348 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/tip.png           |  Bin 2718 -> 0 bytes
 source-builder/sb/asciidoc/doc/images/icons/up.png |  Bin 1320 -> 0 bytes
 .../sb/asciidoc/doc/images/icons/warning.png       |  Bin 3214 -> 0 bytes
 source-builder/sb/asciidoc/doc/images/smallnew.png |  Bin 292 -> 0 bytes
 source-builder/sb/asciidoc/doc/images/tiger.png    |  Bin 6515 -> 0 bytes
 source-builder/sb/asciidoc/doc/latex-backend.txt   |  192 -
 source-builder/sb/asciidoc/doc/latex-bugs.txt      |  134 -
 source-builder/sb/asciidoc/doc/latex-filter.pdf    |  Bin 100587 -> 0 bytes
 source-builder/sb/asciidoc/doc/latex-filter.txt    |  196 -
 source-builder/sb/asciidoc/doc/latexmath.txt       |  121 -
 source-builder/sb/asciidoc/doc/latexmathml.txt     |   41 -
 source-builder/sb/asciidoc/doc/main.aap            |  233 -
 source-builder/sb/asciidoc/doc/music-filter.pdf    |  Bin 36491 -> 0 bytes
 source-builder/sb/asciidoc/doc/music-filter.txt    |  148 -
 .../doc/publishing-ebooks-with-asciidoc.txt        |  398 --
 source-builder/sb/asciidoc/doc/slidy-example.txt   |  167 -
 source-builder/sb/asciidoc/doc/slidy.txt           |  113 -
 .../sb/asciidoc/doc/source-highlight-filter.pdf    |  Bin 127428 -> 0 bytes
 .../sb/asciidoc/doc/source-highlight-filter.txt    |  270 -
 source-builder/sb/asciidoc/doc/testasciidoc.txt    |  231 -
 .../asciidoc/docbook-xsl/asciidoc-docbook-xsl.txt  |   65 -
 source-builder/sb/asciidoc/docbook-xsl/chunked.xsl |   17 -
 source-builder/sb/asciidoc/docbook-xsl/common.xsl  |  106 -
 source-builder/sb/asciidoc/docbook-xsl/epub.xsl    |   35 -
 source-builder/sb/asciidoc/docbook-xsl/fo.xsl      |  152 -
 .../sb/asciidoc/docbook-xsl/htmlhelp.xsl           |   16 -
 source-builder/sb/asciidoc/docbook-xsl/manpage.xsl |   31 -
 source-builder/sb/asciidoc/docbook-xsl/text.xsl    |   55 -
 source-builder/sb/asciidoc/docbook-xsl/xhtml.xsl   |   14 -
 source-builder/sb/asciidoc/docbook45.conf          |  802 ---
 .../sb/asciidoc/examples/website/ASCIIMathML.js    |  938 ---
 .../sb/asciidoc/examples/website/CHANGELOG.txt     | 3128 ----------
 .../sb/asciidoc/examples/website/INSTALL.txt       |  227 -
 .../sb/asciidoc/examples/website/LaTeXMathML.js    | 1223 ----
 .../asciidoc/examples/website/README-website.txt   |   29 -
 .../sb/asciidoc/examples/website/README.txt        |   35 -
 .../sb/asciidoc/examples/website/a2x.1.txt         |  358 --
 .../examples/website/asciidoc-docbook-xsl.txt      |   65 -
 .../examples/website/asciidoc-graphviz-sample.txt  |  170 -
 .../sb/asciidoc/examples/website/asciidoc.css      |  525 --
 .../sb/asciidoc/examples/website/asciidoc.js       |  189 -
 .../sb/asciidoc/examples/website/asciidocapi.txt   |  189 -
 .../sb/asciidoc/examples/website/asciimathml.txt   |   61 -
 .../sb/asciidoc/examples/website/build-website.sh  |   25 -
 .../sb/asciidoc/examples/website/customers.csv     |   18 -
 .../sb/asciidoc/examples/website/epub-notes.txt    |  210 -
 .../sb/asciidoc/examples/website/faq.txt           | 1358 -----
 .../examples/website/images/highlighter.png        |  Bin 128142 -> 0 bytes
 .../asciidoc/examples/website/images/icons/README  |    5 -
 .../examples/website/images/icons/callouts/1.png   |  Bin 329 -> 0 bytes
 .../examples/website/images/icons/callouts/10.png  |  Bin 361 -> 0 bytes
 .../examples/website/images/icons/callouts/11.png  |  Bin 565 -> 0 bytes
 .../examples/website/images/icons/callouts/12.png  |  Bin 617 -> 0 bytes
 .../examples/website/images/icons/callouts/13.png  |  Bin 623 -> 0 bytes
 .../examples/website/images/icons/callouts/14.png  |  Bin 411 -> 0 bytes
 .../examples/website/images/icons/callouts/15.png  |  Bin 640 -> 0 bytes
 .../examples/website/images/icons/callouts/2.png   |  Bin 353 -> 0 bytes
 .../examples/website/images/icons/callouts/3.png   |  Bin 350 -> 0 bytes
 .../examples/website/images/icons/callouts/4.png   |  Bin 345 -> 0 bytes
 .../examples/website/images/icons/callouts/5.png   |  Bin 348 -> 0 bytes
 .../examples/website/images/icons/callouts/6.png   |  Bin 355 -> 0 bytes
 .../examples/website/images/icons/callouts/7.png   |  Bin 344 -> 0 bytes
 .../examples/website/images/icons/callouts/8.png   |  Bin 357 -> 0 bytes
 .../examples/website/images/icons/callouts/9.png   |  Bin 357 -> 0 bytes
 .../examples/website/images/icons/caution.png      |  Bin 2734 -> 0 bytes
 .../examples/website/images/icons/example.png      |  Bin 2599 -> 0 bytes
 .../examples/website/images/icons/home.png         |  Bin 1340 -> 0 bytes
 .../examples/website/images/icons/important.png    |  Bin 2980 -> 0 bytes
 .../examples/website/images/icons/next.png         |  Bin 1302 -> 0 bytes
 .../examples/website/images/icons/note.png         |  Bin 2494 -> 0 bytes
 .../examples/website/images/icons/prev.png         |  Bin 1348 -> 0 bytes
 .../asciidoc/examples/website/images/icons/tip.png |  Bin 2718 -> 0 bytes
 .../asciidoc/examples/website/images/icons/up.png  |  Bin 1320 -> 0 bytes
 .../examples/website/images/icons/warning.png      |  Bin 3214 -> 0 bytes
 .../asciidoc/examples/website/images/smallnew.png  |  Bin 292 -> 0 bytes
 .../sb/asciidoc/examples/website/images/tiger.png  |  Bin 6515 -> 0 bytes
 .../sb/asciidoc/examples/website/index.txt         |  510 --
 .../sb/asciidoc/examples/website/latex-backend.txt |  192 -
 .../sb/asciidoc/examples/website/latex-bugs.txt    |  134 -
 .../sb/asciidoc/examples/website/latex-filter.txt  |  196 -
 .../sb/asciidoc/examples/website/latexmathml.txt   |   41 -
 .../sb/asciidoc/examples/website/layout1.conf      |  153 -
 .../sb/asciidoc/examples/website/layout1.css       |   65 -
 .../sb/asciidoc/examples/website/layout2.conf      |  153 -
 .../sb/asciidoc/examples/website/layout2.css       |   83 -
 .../sb/asciidoc/examples/website/main.aap          |  159 -
 .../sb/asciidoc/examples/website/manpage.txt       |  197 -
 .../sb/asciidoc/examples/website/music-filter.txt  |  148 -
 .../sb/asciidoc/examples/website/newlists.txt      |   40 -
 .../sb/asciidoc/examples/website/newtables.txt     |  743 ---
 .../sb/asciidoc/examples/website/plugins.txt       |   91 -
 .../website/publishing-ebooks-with-asciidoc.txt    |  398 --
 .../sb/asciidoc/examples/website/slidy-example.txt |  167 -
 .../sb/asciidoc/examples/website/slidy.txt         |  113 -
 .../examples/website/source-highlight-filter.txt   |  270 -
 .../sb/asciidoc/examples/website/support.txt       |    5 -
 .../sb/asciidoc/examples/website/testasciidoc.txt  |  231 -
 .../sb/asciidoc/examples/website/userguide.txt     | 6038 -------------------
 .../sb/asciidoc/examples/website/version83.txt     |   37 -
 .../asciidoc/examples/website/xhtml11-quirks.css   |   43 -
 .../asciidoc/filters/code/code-filter-readme.txt   |   37 -
 .../sb/asciidoc/filters/code/code-filter-test.txt  |   15 -
 .../sb/asciidoc/filters/code/code-filter.conf      |    8 -
 .../sb/asciidoc/filters/code/code-filter.py        |  239 -
 .../filters/graphviz/asciidoc-graphviz-sample.txt  |  170 -
 .../asciidoc/filters/graphviz/graphviz-filter.conf |   53 -
 .../sb/asciidoc/filters/graphviz/graphviz2png.py   |  169 -
 .../sb/asciidoc/filters/latex/latex-filter.conf    |   28 -
 .../sb/asciidoc/filters/latex/latex2png.py         |  232 -
 .../asciidoc/filters/music/music-filter-test.txt   |   40 -
 .../sb/asciidoc/filters/music/music-filter.conf    |   42 -
 .../sb/asciidoc/filters/music/music2png.py         |  213 -
 .../source/source-highlight-filter-test.txt        |   19 -
 .../filters/source/source-highlight-filter.conf    |  140 -
 source-builder/sb/asciidoc/help.conf               |  394 --
 source-builder/sb/asciidoc/html4.conf              |  506 --
 source-builder/sb/asciidoc/html5.conf              |  696 ---
 source-builder/sb/asciidoc/images/highlighter.png  |  Bin 128142 -> 0 bytes
 source-builder/sb/asciidoc/images/icons/README     |    5 -
 .../sb/asciidoc/images/icons/callouts/1.png        |  Bin 329 -> 0 bytes
 .../sb/asciidoc/images/icons/callouts/10.png       |  Bin 361 -> 0 bytes
 .../sb/asciidoc/images/icons/callouts/11.png       |  Bin 565 -> 0 bytes
 .../sb/asciidoc/images/icons/callouts/12.png       |  Bin 617 -> 0 bytes
 .../sb/asciidoc/images/icons/callouts/13.png       |  Bin 623 -> 0 bytes
 .../sb/asciidoc/images/icons/callouts/14.png       |  Bin 411 -> 0 bytes
 .../sb/asciidoc/images/icons/callouts/15.png       |  Bin 640 -> 0 bytes
 .../sb/asciidoc/images/icons/callouts/2.png        |  Bin 353 -> 0 bytes
 .../sb/asciidoc/images/icons/callouts/3.png        |  Bin 350 -> 0 bytes
 .../sb/asciidoc/images/icons/callouts/4.png        |  Bin 345 -> 0 bytes
 .../sb/asciidoc/images/icons/callouts/5.png        |  Bin 348 -> 0 bytes
 .../sb/asciidoc/images/icons/callouts/6.png        |  Bin 355 -> 0 bytes
 .../sb/asciidoc/images/icons/callouts/7.png        |  Bin 344 -> 0 bytes
 .../sb/asciidoc/images/icons/callouts/8.png        |  Bin 357 -> 0 bytes
 .../sb/asciidoc/images/icons/callouts/9.png        |  Bin 357 -> 0 bytes
 .../sb/asciidoc/images/icons/caution.png           |  Bin 2734 -> 0 bytes
 .../sb/asciidoc/images/icons/example.png           |  Bin 2599 -> 0 bytes
 source-builder/sb/asciidoc/images/icons/home.png   |  Bin 1340 -> 0 bytes
 .../sb/asciidoc/images/icons/important.png         |  Bin 2980 -> 0 bytes
 source-builder/sb/asciidoc/images/icons/next.png   |  Bin 1302 -> 0 bytes
 source-builder/sb/asciidoc/images/icons/note.png   |  Bin 2494 -> 0 bytes
 source-builder/sb/asciidoc/images/icons/prev.png   |  Bin 1348 -> 0 bytes
 source-builder/sb/asciidoc/images/icons/tip.png    |  Bin 2718 -> 0 bytes
 source-builder/sb/asciidoc/images/icons/up.png     |  Bin 1320 -> 0 bytes
 .../sb/asciidoc/images/icons/warning.png           |  Bin 3214 -> 0 bytes
 source-builder/sb/asciidoc/images/smallnew.png     |  Bin 292 -> 0 bytes
 source-builder/sb/asciidoc/images/tiger.png        |  Bin 6515 -> 0 bytes
 source-builder/sb/asciidoc/install-sh              |  201 -
 .../sb/asciidoc/javascripts/ASCIIMathML.js         |  938 ---
 .../sb/asciidoc/javascripts/LaTeXMathML.js         | 1223 ----
 source-builder/sb/asciidoc/javascripts/asciidoc.js |  189 -
 source-builder/sb/asciidoc/javascripts/slidy.js    | 2845 ---------
 source-builder/sb/asciidoc/javascripts/toc.js      |   77 -
 source-builder/sb/asciidoc/lang-de.conf            |   61 -
 source-builder/sb/asciidoc/lang-el.conf            |   55 -
 source-builder/sb/asciidoc/lang-en.conf            |   54 -
 source-builder/sb/asciidoc/lang-es.conf            |   57 -
 source-builder/sb/asciidoc/lang-fr.conf            |   59 -
 source-builder/sb/asciidoc/lang-hu.conf            |   57 -
 source-builder/sb/asciidoc/lang-it.conf            |   57 -
 source-builder/sb/asciidoc/lang-nl.conf            |   62 -
 source-builder/sb/asciidoc/lang-pt-BR.conf         |   58 -
 source-builder/sb/asciidoc/lang-ru.conf            |   59 -
 source-builder/sb/asciidoc/lang-uk.conf            |   60 -
 source-builder/sb/asciidoc/latex.conf              |  700 ---
 source-builder/sb/asciidoc/main.aap                |   77 -
 source-builder/sb/asciidoc/slidy.conf              |  150 -
 .../sb/asciidoc/stylesheets/asciidoc.css           |  525 --
 .../sb/asciidoc/stylesheets/docbook-xsl.css        |  329 -
 .../sb/asciidoc/stylesheets/pygments.css           |   66 -
 source-builder/sb/asciidoc/stylesheets/slidy.css   |  445 --
 source-builder/sb/asciidoc/stylesheets/toc2.css    |   34 -
 .../sb/asciidoc/stylesheets/xhtml11-quirks.css     |   43 -
 source-builder/sb/asciidoc/tests/asciidocapi.py    |  257 -
 .../sb/asciidoc/tests/data/deprecated-quotes.txt   |   12 -
 .../sb/asciidoc/tests/data/filters-test.txt        |   90 -
 .../sb/asciidoc/tests/data/lang-de-man-test.txt    |   21 -
 .../sb/asciidoc/tests/data/lang-de-test.txt        |  106 -
 .../sb/asciidoc/tests/data/lang-en-man-test.txt    |   21 -
 .../sb/asciidoc/tests/data/lang-en-test.txt        |  114 -
 .../sb/asciidoc/tests/data/lang-es-man-test.txt    |   21 -
 .../sb/asciidoc/tests/data/lang-es-test.txt        |  106 -
 .../sb/asciidoc/tests/data/lang-fr-man-test.txt    |   21 -
 .../sb/asciidoc/tests/data/lang-fr-test.txt        |  106 -
 .../sb/asciidoc/tests/data/lang-hu-man-test.txt    |   21 -
 .../sb/asciidoc/tests/data/lang-hu-test.txt        |  106 -
 .../sb/asciidoc/tests/data/lang-it-man-test.txt    |   21 -
 .../sb/asciidoc/tests/data/lang-it-test.txt        |  106 -
 .../sb/asciidoc/tests/data/lang-nl-man-test.txt    |   21 -
 .../sb/asciidoc/tests/data/lang-nl-test.txt        |   94 -
 .../sb/asciidoc/tests/data/lang-pt-BR-man-test.txt |   21 -
 .../sb/asciidoc/tests/data/lang-pt-BR-test.txt     |  106 -
 .../sb/asciidoc/tests/data/lang-ru-man-test.txt    |   21 -
 .../sb/asciidoc/tests/data/lang-ru-test.txt        |  106 -
 .../sb/asciidoc/tests/data/lang-uk-man-test.txt    |   21 -
 .../sb/asciidoc/tests/data/lang-uk-test.txt        |  106 -
 .../sb/asciidoc/tests/data/oldtables.txt           |   64 -
 .../sb/asciidoc/tests/data/open-block-test.txt     |  117 -
 .../sb/asciidoc/tests/data/rcs-id-marker-test.txt  |    6 -
 .../sb/asciidoc/tests/data/testcases.conf          |   12 -
 .../sb/asciidoc/tests/data/testcases.txt           |  786 ---
 .../sb/asciidoc/tests/data/utf8-bom-test.txt       |    9 -
 .../sb/asciidoc/tests/data/utf8-examples.txt       |  217 -
 source-builder/sb/asciidoc/tests/testasciidoc.conf |  652 --
 source-builder/sb/asciidoc/tests/testasciidoc.py   |  420 --
 source-builder/sb/asciidoc/text.conf               |   16 -
 source-builder/sb/asciidoc/themes/flask/flask.css  |  597 --
 .../sb/asciidoc/themes/volnitsky/volnitsky.css     |  435 --
 .../sb/asciidoc/vim/ftdetect/asciidoc_filetype.vim |   53 -
 source-builder/sb/asciidoc/vim/syntax/asciidoc.vim |  173 -
 source-builder/sb/asciidoc/wordpress.conf          |   88 -
 source-builder/sb/asciidoc/xhtml11-quirks.conf     |   61 -
 source-builder/sb/asciidoc/xhtml11.conf            |  694 ---
 source-builder/sb/macros.py                        |    3 +
 source-builder/sb/markdown/LICENSE.md              |   30 +
 source-builder/sb/markdown/README.md               |   38 +
 source-builder/sb/markdown/__init__.py             |  529 ++
 source-builder/sb/markdown/__main__.py             |  136 +
 source-builder/sb/markdown/__version__.py          |   30 +
 source-builder/sb/markdown/blockparser.py          |  100 +
 source-builder/sb/markdown/blockprocessors.py      |  573 ++
 source-builder/sb/markdown/extensions/__init__.py  |  100 +
 source-builder/sb/markdown/extensions/abbr.py      |   91 +
 .../sb/markdown/extensions/admonition.py           |   96 +
 source-builder/sb/markdown/extensions/attr_list.py |  178 +
 .../sb/markdown/extensions/codehilite.py           |  265 +
 source-builder/sb/markdown/extensions/def_list.py  |  115 +
 source-builder/sb/markdown/extensions/extra.py     |  132 +
 .../sb/markdown/extensions/fenced_code.py          |  113 +
 source-builder/sb/markdown/extensions/footnotes.py |  416 ++
 source-builder/sb/markdown/extensions/headerid.py  |   97 +
 source-builder/sb/markdown/extensions/meta.py      |   78 +
 source-builder/sb/markdown/extensions/nl2br.py     |   35 +
 .../sb/markdown/extensions/sane_lists.py           |   55 +
 .../sb/markdown/extensions/smart_strong.py         |   41 +
 source-builder/sb/markdown/extensions/smarty.py    |  268 +
 source-builder/sb/markdown/extensions/tables.py    |  196 +
 source-builder/sb/markdown/extensions/toc.py       |  310 +
 source-builder/sb/markdown/extensions/wikilinks.py |   89 +
 source-builder/sb/markdown/inlinepatterns.py       |  534 ++
 source-builder/sb/markdown/odict.py                |  191 +
 source-builder/sb/markdown/postprocessors.py       |  111 +
 source-builder/sb/markdown/preprocessors.py        |  352 ++
 source-builder/sb/markdown/serializers.py          |  282 +
 source-builder/sb/markdown/treeprocessors.py       |  371 ++
 source-builder/sb/markdown/util.py                 |  177 +
 source-builder/sb/reports.py                       |  283 +-
 source-builder/sb/setbuilder.py                    |  138 +-
 311 files changed, 6436 insertions(+), 70224 deletions(-)

diff --git a/rtems/config/4.10/rtems-autotools.bset b/rtems/config/4.10/rtems-autotools.bset
index f7f1929..a15aa1b 100644
--- a/rtems/config/4.10/rtems-autotools.bset
+++ b/rtems/config/4.10/rtems-autotools.bset
@@ -18,5 +18,10 @@
 #
 %define _internal_autotools_path %{_tmppath}/sb-%{_uid}/${SB_PREFIX_CLEAN}
 
+#
+# Disable emailing reports of this building for RTEMS.
+#
+%define mail_disable
+
 4.10/rtems-autotools-internal
 4.10/rtems-autotools-base
diff --git a/source-builder/sb/asciidoc/BUGS b/source-builder/sb/asciidoc/BUGS
deleted file mode 100644
index 8e17177..0000000
--- a/source-builder/sb/asciidoc/BUGS
+++ /dev/null
@@ -1,27 +0,0 @@
-                            Bugs and Known Problems
-
-   version 8.6.8, 17 July 2012
-     __________________________________________________________________
-
-1. AsciiDoc
-
-     * A benign warning with will become a reserved keyword in Python 2.6
-       sometimes occurs when using Python 2.5 — it’s harmless and will
-       disappear with Python 3.
-     * Reported line numbers in diagnostic messages are sometimes wrong.
-     * Attribute references in macro attribute lists can’t be unescaped
-       (with the exception of attribute list entry {0}).
-     * Section numbering is incorrect when outputting HTML from a
-       multi-part book type document. This is not a biggy since multi-part
-       books are generally processed to DocBook.
-     * A row of apostrophes in an inline context throws AsciiDoc into an
-       endless loop. The problem seems to be in the input file Reader.
-     __________________________________________________________________
-
-2. dblatex
-
-   See ./dblatex/dblatex-readme.txt.
-     __________________________________________________________________
-
-   Version 8.6.8
-   Last updated 2011-11-10 09:23:10 NZDT
diff --git a/source-builder/sb/asciidoc/BUGS.txt b/source-builder/sb/asciidoc/BUGS.txt
deleted file mode 100644
index b74c1a2..0000000
--- a/source-builder/sb/asciidoc/BUGS.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Bugs and Known Problems
-=======================
-
-AsciiDoc
---------
-- A benign warning 'with will become a reserved keyword
-  in Python 2.6' sometimes occurs when using Python 2.5 -- it's
-  harmless and will disappear with Python 3.
-- Reported line numbers in diagnostic messages are sometimes wrong.
-- Attribute references in macro attribute lists can't be unescaped
-  (with the exception of attribute list entry `{0}`).
-- Section numbering is incorrect when outputting HTML from a
-  multi-part book type document. This is not a biggy since multi-part
-  books are generally processed to DocBook.
-- A row of apostrophes in an inline context throws AsciiDoc into an
-  endless loop. The problem seems to be in the input file 'Reader'.
-
-dblatex
--------
-See `./dblatex/dblatex-readme.txt`.
diff --git a/source-builder/sb/asciidoc/CHANGELOG b/source-builder/sb/asciidoc/CHANGELOG
deleted file mode 100644
index 8d260e5..0000000
--- a/source-builder/sb/asciidoc/CHANGELOG
+++ /dev/null
@@ -1,3291 +0,0 @@
-                               AsciiDoc ChangeLog
-
-   version 8.6.8, 17 July 2012
-     __________________________________________________________________
-
-1. Version 8.6.8 (2012-07-17)
-
-   Release highlights
-   Added full complement of styles to Open Blocks and Normal Paragraphs —
-   those with a minimalist bent could construct virtually any document
-   using just Title, Normal Paragraph and Open Block syntaxes.
-
-   Other additions and changes
-     * Increased default maximum include depth from 5 to 10.
-     * Emit warning if maximum include depth is exceeded.
-     * Suppress repeated console messages.
-     * Music filter: removed --beams=None option from abc2ly invocation
-       because it is broken on LilyPond 2.14 (Ubuntu 12.04).
-     * Replaced obsolete <tt> tag with <code> in HTML backends.
-     * Allow configuration attribute entries to create a new section
-       (previously you could only modify existing sections). See:
-       [1]discussion list.
-     * Documented {wj} (word-joiner) attribute and updated FAQ. See:
-       [2]discussion list.
-     * FAQ: Added How can I place a footnote immediately following quoted
-       text? See [3]discussion list.
-     * Added Greek language configuration file. Contributed by Michael
-       Dourmousoglou. See [4]discussion list.
-     * FAQ: Added Using roles to select fonts for PDF. Submitted by Lex
-       Trotman and based on solution by Antonio Borneo. See: [5]discussion
-       list.
-     * Apply same monospaced font size to all monospaced text.
-     * Changed 0 number padding to spaces in numbered GNU source-highlight
-       outputs.
-     * Allow highlight source highlighter to use python for Python
-       {language} name. r1142: Update the AsciiDoc source filter to allow
-       the use of the highlight source code highlighter. See [6]discussion
-       list.
-
-       Note
-           The pygments attribute has been deprecated in favor of the new
-           source-highlighter attribute.
-     * Vim syntax highlighter: Don’t confuse trailing open block delimiter
-       with section underline.
-     * Added skip option to paragraphs (c.f. Delimited Block skip option).
-
-   Bug fixes
-     * FIXED: latex, music and graphviz filters: When the filter output
-       image is data-uri encoded write it to the indir (instead of the
-       outdir) so that encoder can find it. See [7]discussion list.
-     * FIXED: Escape the ] character inside inline macros. See
-       [8]discussion list.
-     * FIXED: source highlighter filter: Pass role attribute to HTML
-       backends.
-     * FIXED: source highlight filter: docbook backend: role attribute was
-       not passed to listings without a title. Patch submitted by Lex
-       Trotman. See [9]discussion list.
-     * FIXED: music2png.py: FOPException: Raster ByteInterleavedRaster
-       error (FOP 1.0, ImageMagick 6.6.9-7).
-     __________________________________________________________________
-
-2. Version 8.6.7 (2012-03-17)
-
-   Release highlights
-   No major enhancements but quite a few bug fixes which, among other
-   things, fixes Jython compatibility and improves Windows compatibility.
-
-   All additions and changes
-     * Vim syntax highlighter: highlight entity refs in macro arguments.
-     * Added files with .asciidoc extension to Vim file type detection.
-       [10]Patch submitted by Dag Wiers.
-     * Added replacement3 substitution to enable [11]ODT whitespace
-       processing.
-     * Added unbreakable option to XHTML and HTML 5 backends.
-     * Implemented toc::[] block macro and toc-placement attribute for
-       HTML backends to allow the Table of Contents placement to be set
-       manually by the author.
-     * Added FAQs: How can I control page breaks when printing HTML
-       outputs? and Is it possible to reposition the Table of Contents in
-       HTML outputs?.
-     * Added --backend and --backend-opts options to the a2x command to
-       allow a2x to use backend plugin code extensions. [12]Patch
-       submitted by Lex Trotman.
-     * Added [13]args block attribute to source highlight blocks to allow
-       arbitrary parameters to be passed to the source highlighters.
-     * If the ascii-ids attribute is defined then non-ascii characters in
-       auto-generated IDs [14]are replaced by their nearest ascii
-       equivalents (to work around DocBook processor limitations).
-     * Added global blockname attribute which is dynamically updated to
-       identify the current block. See [15]discussion list.
-     * xhtml11, html5 backends: Include book part TOC entries for
-       multi-part books. Patch submitted by Loïc Paillotin.
-     * Removed code filter example from the AsciiDoc User Guide so that
-       backends implemented as external plugins can compile the manual.
-       See [16]discussion list.
-     * If the delimited block skip option is set then do not consume block
-       title and attributes. This makes it possible for the comment
-       delimited blocks to use an attribute list (previously the comment
-       delimited block was hardwired to skip preceding attributes and
-       titles). See [17]discussion list.
-     * Added backend-confdir intrinsic attribute.
-
-   Bug fixes
-     * FIXED: slidy backend: broken stylesheet attribute. [18]Patch
-       submitted by Micheal Hackett.
-     * FIXED: Restored [19]missing themes to zip file distribution
-       archive.
-     * FIXED: Grammatical error in error messages. [20]Patch submitted by
-       Dag Wieers.
-     * FIXED: Use configured normal substitution in preference to the
-       default one.
-     * FIXED: The eval block macro would execute multiple times if it
-       evaluated to None.
-     * FIXED: Duplicated entries in TOC of large document. [21]Patch
-       submitted by Sebastien Helleu.
-     * FIXED: Python 2.4 backward [22]incompatibility.
-     * FIXED: 8.6.6 regression broke Jython compatibility. See
-       [23]discussion list.
-     * FIXED: Leaky file handles in a2x and music and latex filters which
-       created incompatibility problems for Jython.
-     * FIXED: All Python filters are executed with the same Python
-       interpreter that executes the asciidoc parent (previously filters
-       were hardwired to execute the python interpreter). This prevents
-       [24]Python mix-ups.
-     * FIXED: Microsoft Windows shelled command-line truncation that
-       caused shelled commands to fail e.g. the data-uri attribute
-       failure.
-     __________________________________________________________________
-
-3. Version 8.6.6 (2011-09-04)
-
-   Release highlights
-     * The AsciiDoc plugin architecture has been enhanced, unified and
-       extended:
-          + Plugin commands have been added to the asciidoc(1) --backend
-            option.
-          + An asciidoc(1) --theme option has been implemented to specify
-            a theme and to manage theme plugins.
-          + A plugin build command (for creating plugins) added.
-          + build, install, list and remove plugin commands are all
-            recognized by asciidoc(1) --backend, --filter and --theme
-            options.
-     * A security update by Kenny MacDermid removes the use of eval() on
-       untrusted input (to disallow code malicious execution).
-
-   All additions and changes
-     * xhtml11, html5: Made verse and quote block text darker to print
-       legibly in Google Chrome browser.
-     * Added plugin build command for plugin file creation.
-     * Merged --help plugins back to --help manpage so it matches the
-       asciidoc(1) manpage.
-     * The --filter command-line option can specify the name of filters
-       that will be unconditionally loaded.
-     * If a filter directory contains a file named __noautoload__ then the
-       filter is not automatically loaded (you can used the --filter
-       command-line option to override this behavior).
-     * tests: Add Italian language tests. Patch submitted by Simon
-       Ruderich. See:
-       [25]http://groups.google.com/group/asciidoc/browse_thread/thread/5e
-       2e6f4dd740d51a
-     * tests: Add tests for localized man pages. Patch submitted by Simon
-       Ruderich. See:
-       [26]http://groups.google.com/group/asciidoc/browse_thread/thread/5e
-       2e6f4dd740d51a
-     * If the section name is prefixed with a + character then the section
-       contents is appended to the contents of an already existing
-       same-named section (the default behavior is to replace the the
-       section).
-     * If a configuration file section named docinfo is loaded then it
-       will be included in the document header. Typically the docinfo
-       section name will be prefixed with a + character so that it is
-       appended to (rather than replace) other docinfo sections.
-     * Added {sp} intrinsic attribute for single space character. See
-       [27]http://groups.google.com/group/asciidoc/browse_thread/thread/a8
-       39aa01db0765d2
-     * Fixed TOC and footnotes generator. Patch submitted by Will. See
-       [28]http://groups.google.com/group/asciidoc/browse_thread/thread/73
-       4ac5afed736987
-     * The asciidoc-confdir attribute is set to the asciidoc executable
-       directory if it contains global configuration files i.e. a local
-       asciidoc installation.
-     * asciidoc now throws an error instead of just a warning of the
-       backend configuration file is not found.
-     * latex filter: write MD5 file after successful PNG file generation.
-       Always delete temp files irrespective of outcome.
-     * Added truecolor option to LaTeX filter. Patch submitted by Michel
-       Krämer. See:
-       [29]http://groups.google.com/group/asciidoc/browse_thread/thread/64
-       36788a10561851
-     * Unit test for table column specifiers with merged cells. Patch
-       submitted by Simon Ruderich. See:
-       [30]http://groups.google.com/group/asciidoc/browse_thread/thread/c9
-       238380a1f2507a
-     * Added verbose message for ifeval::[] macro evaluation.
-     * Added test case for ifeval::[] evaluation.
-     * Security update to remove the use of eval() on untrusted input (to
-       disallow code malicious execution). Patch submitted by Kenny
-       MacDermid.
-     * Changed web site layout from table to CSS based. See
-       [31]http://groups.google.com/group/asciidoc/browse_thread/thread/ec
-       8e8481eb0e27b0/d1c035092b5bb7a4?lnk=gst&q=caption+option#d1c035092b
-       5bb7a4
-     * a2x: Pass --format option value to asciidoc as a2x-format
-       attribute. Patch submitted by Lex Trotman
-       ([32]http://groups.google.com/group/asciidoc/browse_thread/thread/3
-       e177b84bc133ca9/659796dfadad30ea?lnk=gst&q=a2x+format#659796dfadad3
-       0ea).
-     * Added two FAQs submitted by Lex Trotman. See:
-       [33]http://groups.google.com/group/asciidoc/browse_thread/thread/16
-       d3fb9672a408e7
-     * html5,xhtml11: Implemented themes directory structure.
-     * html5,xhtml11: Implemented asciidoc --theme management option
-       (install, list, build and remove commands).
-     * html5,xhtml11: A theme can now optionally include a JavaScript file
-       <theme>.js
-     * html5,xhtml11: If the data-uri attribute is defined then icons from
-       the theme icons directory (if they exist) will be embedded in the
-       generated document.
-     * Added optional warnings argument to include macros.
-     * The asciidoc --verbose option now prints file inclusion messages.
-     * xhtml11, html5: Remove necessity for separate manpage CSS files.
-     * Added css-signature attribute to tests.
-     * Add css-signature attribute to set a CSS signature for the
-       document. Patch submitted by Peg Russell, see:
-       [34]http://groups.google.com/group/asciidoc/browse_thread/thread/ba
-       cbf8aeb8ad6a3a
-     * White background for toc2 TOC viewport so that horizontally
-       scrolled content does not obscure the the TOC. Patch submitted by
-       Lionel Orry, see:
-       [35]http://code.google.com/p/asciidoc/issues/detail?id=8
-
-   Bug fixes
-     * FIXED: Plugin install command: Delete backend directory is install
-       fails.
-     * FIXED: Plugin install command: Fixed bug extracting binary files on
-       Windows (reported by Jean-Michel Inglebert).
-     * FIXED: tests: Skip blank sections in testasciidoc.conf test
-       configuration file instead of throwing an exception (reported by
-       Jean-Michel Inglebert).
-     * FIXED: If a plugin Zip file does not contain file permissions
-       (probably because it was created under Windows) then install it
-       using the default permissions.
-     * FIXED: Fixed missing quote in preceding LaTeX filter patch. Fix
-       submitted by Simon Ruderich. See:
-       [36]http://groups.google.com/group/asciidoc/browse_thread/thread/64
-       36788a10561851
-     * FIXED: Some path attributes were processed as escaped Python
-       strings which could result in corrupted path names with backslash
-       separated Windows path names. Reported by Will. See:
-       [37]http://groups.google.com/group/asciidoc/browse_thread/thread/e8
-       f3938bcb4c8bb4/44d13113a35738ef
-     * FIXED: Vertically spanned table cells resulted in incorrect column
-       styles being applied to some cells. Reported by Will:
-       [38]http://groups.google.com/group/asciidoc/browse_thread/thread/c9
-       238380a1f2507a/9afc4559d51e1dbd
-     * FIXED: LaTeX backend: fixed bad escapes. Patch submitted by Mark
-       McCurry:
-       [39]http://groups.google.com/group/asciidoc/browse_thread/thread/8c
-       111f1046b33691/158a944cf4d5ff0d?lnk=gst&q=latex+escapes#158a944cf4d
-       5ff0d
-     * FIXED: When using slidy backend, display of characters with accents
-       is wrong because of meta http-equiv line missing. Reported by
-       Fabrice Flore-Thebault. See:
-       [40]http://groups.google.com/group/asciidoc/browse_thread/thread/ea
-       f25f21d1da180a
-     __________________________________________________________________
-
-4. Version 8.6.5 (2011-05-20)
-
-   Release highlights
-     * The addition of an html5 backend to generate HTML 5 output. Apart
-       from the inclusion of audio and video block macros the html5
-       backend is functionally identical to the xhtml11 backend.
-     * A new flask theme for xhtml11 and html5 backends inspired by the
-       [41]Flask website styling (see toc2 example in the next item
-       below).
-     * The new toc2 attribute generates a table of contents in the left
-       hand margin (xhtml11 and html5 backends). [42]This example was
-       generated using the following command:
-  asciidoc -b html5 -a icons -a toc2 -a theme=flask article.txt
-     * a2x(1) now has a flexible mechanism for copying arbitrary resource
-       files to HTML based outputs — this is very handy for generating
-       EPUB files with embedded fonts and other resources.
-          + The a2x(1) --resource option can be used to inject any file
-            into EPUB output documents e.g. CSS resources such as fonts
-            and background images.
-          + Explicitly specified resources are added to the EPUB OPF
-            manifest automatically.
-          + You can explicitly specify file extension MIME types.
-          + The enhanced resource processing works around a couple of
-            DocBook XSL bugs (see [43]EPUB Notes).
-
-   All additions and changes
-     * A new flask theme for xhtml11 and html5 backends. A shameless
-       knock-off of the [44]Flask website styling.
-     * Added HTML 5 article with toc2 table of contents to the example on
-       the AsciiDoc website home page.
-     * Added filters and topics help topics. Fixed documentation errors in
-       help text. Patch submitted by Lionel Orry, see:
-       [45]http://groups.google.com/group/asciidoc/browse_thread/thread/9d
-       a9d48a6461ff14
-     * Pass parent configuration files, command-line attributes and header
-       attributes to table asciidoc filters. Based on patch submitted by
-       Simon Ruderich, see:
-       [46]http://groups.google.com/group/asciidoc/browse_thread/thread/5c
-       792cbb395b753b
-     * Allow a title attribute entry in the document header so that HTML
-       backends can set the title element separately from the displayed
-       document title (the doctitle attribute).
-     * Pass lang attribute to asciidoc table style filter. Patch submitted
-       by Simon Ruderich, see:
-       [47]http://groups.google.com/group/asciidoc/browse_thread/thread/e2
-       100b7cb29283ce
-     * xhtml11,html5: Added toc2 attribute which generates a scrollable
-       table of contents in the left hand margin. Based on customized CSS
-       written by Suraj Kurapati, see
-       [48]http://groups.google.com/group/asciidoc/browse_thread/thread/c5
-       e30ee5555877f5
-     * Added asciidoc-confdir intrinsic attribute which expands to the
-       global conf directory.
-     * Documented that you can specify multiple CSS files with the a2x(1)
-       --stylesheet command option. See:
-       [49]http://groups.google.com/group/asciidoc/browse_thread/thread/ba
-       f3218551d05a05
-     * Improved xhtml11 backend’s table of contents generation latency.
-       Patch submitted by Hongli Lai. See:
-       [50]http://groups.google.com/group/asciidoc/browse_thread/thread/5a
-       7fe64fbfd65ad
-     * Added html5 backend.
-     * For consistency converted all DOS formatted configuration and text
-       files to UNIX format.
-     * html4: Added ability to use role attribute with most block
-       elements. Patch contributed by Simon Ruderich. See
-       [51]http://groups.google.com/group/asciidoc/browse_thread/thread/56
-       20ba634fdb030a
-     * Added Dutch language configuration file and accompanying test file
-       (contributed by Dag Wieers, see
-       [52]http://groups.google.com/group/asciidoc/browse_thread/thread/f9
-       69b9ce987d7f5d).
-     * Configuration files are loaded in two passes when the -e
-       command-line option is used (the same behavior as when the -e
-       option is not used). Patch submitted by haad. See
-       [53]http://groups.google.com/group/asciidoc/browse_thread/thread/cd
-       0f47495fd04181 and
-       [54]http://code.google.com/p/asciidoc/issues/detail?id=6&q=label%3A
-       Priority-Medium
-     * Documented how to include embedded fonts in an EPUB document.
-     * a2x: Added .<ext>=<mimetype> resource specifier syntax.
-     * a2x: Enable admonition icons in example EPUBs.
-     * a2x: allow environment variables and tilde home directories in
-       resource manifest files.
-     * a2x: don’t process non-existent resource directories.
-     * a2x: assume resource option is a directory if the name ends with a
-       directory separator.
-     * a2x: Added a new syntax to the --resource option specifier which
-       allows the destination path to be specified.
-     * a2x: Copy resources referenced in the OPF and resources referenced
-       by the generated HTML (in theory DocBook XSL should ensure they are
-       identical but this is not always the case e.g.
-       [55]http://sourceforge.net/tracker/?func=detail&atid=373747&aid=285
-       4075&group_id=21935).
-     * Drop border from callout list image links.
-     * html4: Moved manpage NAME section out of header so that the name
-       section is rendered when the asciidoc(1) --no-header-footer option
-       is specified (so that manpages processed blogpost include the NAME
-       section).
-     * Vim syntax highlighter: TODO markers now appear in list items and
-       literal paragraphs and blocks.
-     * Constrained quotes can now be bounded on the left by a } character.
-       See:
-       [56]http://groups.google.com/group/asciidoc/browse_thread/thread/b2
-       4cc3362f35b801
-     * Added text-decoration roles (underline, overline, line-through,
-       blink) for xhtml11 and html5 outputs.
-
-   Bug fixes
-     * FIXED: epubcheck 1.1 previously issued a warning for files not
-       registered in the manifest (epubcheck 1.0.5 did not). This resulted
-       in a problem compiling the adventures-of-sherlock-holmes.txt
-       example (the underline.png resource was not in the manifest).
-     __________________________________________________________________
-
-5. Version 8.6.4 (2011-02-20)
-
-   Additions and changes
-     * Added text foreground and background color along with text size CSS
-       styles for XHTML outputs, see
-       [57]http://www.methods.co.nz/asciidoc/userguide.html#X96.
-     * Vim syntax highlighter: highlight macros that start with an
-       attribute reference (a common idiom).
-     * Vim syntax highlighter: highlight attribute references in macro
-       attribute lists.
-     * Attribute entries can be used to set configuration markup
-       templates.
-     * Double-width East Asian characters in titles now correctly match
-       the title underline widths. Submitted by Changjian Gao (see
-       [58]http://groups.google.com/group/asciidoc/browse_thread/thread/77
-       f28b0dfe60d262).
-     * Implemented [59]asciidoc(1) filter commands, see:
-       [60]http://groups.google.com/group/asciidoc/browse_thread/thread/40
-       c64cd33ee1905c
-     * User’s home directory now calculated in a platform independent
-       manner.
-     * Added double-quote characters to French language file. Patch
-       contributed Yves-Alexis Perez, see:
-       [61]http://groups.google.com/group/asciidoc/browse_thread/thread/e1
-       5282f072413940
-     * Vim Syntax highlighter: Highlight closing OpenBlocks which
-       immediately follow a literal paragraph.
-     * Changed UNIX /dev/null to OS independent os.devnull in filters
-       code. Suggested by Henrik Maier:
-       [62]http://groups.google.com/group/asciidoc/browse_thread/thread/5a
-       c8e8ea895147e9
-     * Vim syntax highlighter: Single and double quoted text now
-       highlights correctly when preceded by an attributes list.
-     * Added Ukrainian language file (lang-uk.conf). Added double-quote
-       characters to Russian language file.conf). Patches contributed by
-       Lavruschenko Oleksandr, see
-       [63]http://groups.google.com/group/asciidoc/browse_thread/thread/e1
-       5282f072413940
-     * Single and double quote characters are now set using the {lsquo},
-       {rsquo}, {ldquo} and {rdquo} attributes. This makes is easy to
-       customise language specific quotes. See:
-       [64]http://groups.google.com/group/asciidoc/browse_thread/thread/e1
-       5282f072413940
-     * Implemented conf-files attribute to allow configuration files to be
-       specified in the source document. Suggested by Lex Trotman, see:
-       [65]http://groups.google.com/group/asciidoc/browse_thread/thread/b1
-       1066a828ab45b9
-
-   Bug fixes
-     * FIXED: Auto-generated section title ids are now Unicode aware.
-     * FIXED: Setting quotes configuration entries using document
-       attribute entries failed if the attribute entry was not in the
-       document header. See:
-       [66]http://groups.google.com/group/asciidoc/browse_thread/thread/a1
-       dd0562dee8b939
-     * FIXED: If the input and output file names were different then the
-       output file name was incorrectly used to synthesize docinfo file
-       names. Reported by Christian Zuckschwerdt.
-     * FIXED: An error can occur when more than one consecutive quotes are
-       defined as a blank string. Reported by Peggy Russell.
-     * FIXED: Encoding error in automatically generated author initials.
-       Patch submitted by Xin Wang. See:
-       [67]http://groups.google.com/group/asciidoc/browse_thread/thread/f4
-       4615dca0b834e9
-     __________________________________________________________________
-
-6. Version 8.6.3 (2010-11-14)
-
-   Additions and changes
-     * Added and unbreakable option to bulleted and numbered lists (thanks
-       to Henrik Maier for this patch).
-     * Added ifeval::[] system macro (thanks to Henrik Maier for
-       suggesting this feature).
-     * The image scale attribute sets the DocBook imagedata element scale
-       attribute. Patch submitted by Henrik Maier.
-     * DocBook preface, colophon and dedication style section titles now
-       work. Based on patch submitted by Henrik Maier.
-     * a2x: Do not inject xsltproc parameters if they were specified on
-       the command-line (parameter double-ups generate xsltproc Global
-       parameter already defined errors).
-     * a2x: Refactored xsltproc parameter injection.
-     * a2x: articles chunked at section level by default.
-     * attributes, titles and specialcharacters sections are now read from
-       the local asciidoc.conf file before the header is parsed. This
-       fixes a regression problem. See
-       [68]http://groups.google.com/group/asciidoc/browse_thread/thread/1b
-       3f88f1f8118ab3
-     * Document header attributes take precedence over configuration file
-       attributes.
-     * Refactored music, graphviz and latex filter configurations.
-     * Refactored source filter configuration and added literal paragraph
-       source style.
-     * Separated paragraph styles from paragraph syntax — any style can be
-       applied to any syntax.
-     * Added listing and quote paragraph styles.
-     * Renamed paragraph default style to normal.
-     * Updated --help option text.
-     * a2x: The asciidoc_opts, dblatex_opts, fop_opts and xsltproc_opts
-       command-line options can be specified multiple times. This makes
-       embedding multiple a2x options in document headers easier to manage
-       and less error prone.
-     * Added ASCIIMathML and LaTeXMathML support to slidy backend.
-     * Pass the encoding attribute to the Pygments source highlight filter
-       command.
-     * a2x: HTML Help .hhk file named after AsciiDoc source file.
-     * a2x: Added --xsl-file option to allow custom XSL stylesheets to be
-       specified.
-     * Make builds the man pages. Patch submitted by Sebastian Pipping.
-       See
-       [69]http://groups.google.com/group/asciidoc/browse_thread/thread/c2
-       1c2902c29bae64
-
-   Bug fixes
-     * FIXED: Sometimes double backquotes were misinterpreted as inline
-       literal macros. See:
-       [70]http://groups.google.com/group/asciidoc/browse_thread/thread/f5
-       10ea82a88aaee8
-     * FIXED: Regression in 8.6.2: command-line attributes were not
-       available to the global asciidoc.conf.
-     * FIXED: Postponed document title substitutions until backend conf
-       files have been loaded (8.6.2 regression). See
-       [71]http://groups.google.com/group/asciidoc/browse_thread/thread/42
-       b63ce90c2563b8
-     * FIXED: The XSL Stylesheets customizations were preventing chapter
-       and section level TOCs from being generated when using XSL
-       Stylesheets via a2x. See
-       [72]http://groups.google.com/group/asciidoc/browse_thread/thread/42
-       b63ce90c2563b8
-     * FIXED: “UnicodeDecodeError: 'ascii' codec can’t decode byte” error.
-       This error is due to a limitation in the Python HTMLParser module,
-       see: [73]http://bugs.python.org/issue3932
-     * FIXED: Broken --no-conf option (8.6.2 regression).
-     * FIXED: Regression in 8.6.2: configuration attribute entries set in
-       the document header may cause a FAILED: incomplete configuration
-       files error.
-     * FIXED: html4: corrected self closed meta tags.
-     * FIXED: a2x regression in 8.6.2: HTML Help .hhp file name had
-       reverted to default name instead of the AsciiDoc source file name.
-       See:
-       [74]http://groups.google.com/group/asciidoc/browse_thread/thread/de
-       dc961b23e9ac56
-     * FIXED: Attributes in man page title caused it to be dropped
-       resulting in invalid DocBook output.
-     * FIXED: make uninstall now deletes the asciidoc.1 and a2x.1 man
-       pages.
-     __________________________________________________________________
-
-7. Version 8.6.2 (2010-10-03)
-
-   Additions and changes
-     * docbook45: Enclosed bibliographic lists in a bibliodiv — you can
-       now include block titles with bibliographic lists.
-     * Added optional keywords, description and title document header
-       meta-data attributes to HTML backends for SEO.
-     * AttributeEntry values can span multiple lines with a ' +' line
-       continuation.
-     * Added slidy backend (based on Phillip Lord’s slidy backend
-       [75]https://phillordbio-asciidoc-fixes.googlecode.com/hg/).
-     * Implemented OpenBlock partintro style for book part introductions.
-     * Comment lines substitute special characters only.
-     * Backend specific global configuration files (all except
-       asciidoc.conf) are loaded after the header has been parsed —
-       virtually any attribute can now be specified in the document
-       header.
-     * xhtml11: Volnitsky theme: allow bulleted lists to have intervening
-       children.
-     * xhtml11: refactored CSS font-family rules to start of file.
-     * xhtml11: list bullets colored gray.
-     * ifdef and ifndef system block macros accept multiple attribute
-       names: multiple names separated by commas are ored; multiple
-       attribute names separated by pluses are anded.
-     * xhtml11: Volnitsky theme: set max-width on labeled lists.
-     * Vim syntax highlighter: Entities inside quoted text are now
-       highlighted.
-     * Added role and id attributes to HTML outputs generated by
-       OpenBlocks.
-     * Allow floating titles to generate h1 (level 0) titles in HTML
-       outputs.
-     * Added a start attribute to numbered lists to set the start number.
-       See:
-       [76]http://groups.google.com/group/asciidoc/browse_thread/thread/c1
-       4a4c3b1e4f6dc5
-     * Added two more docinfo attributes docinfo1 and docinfo2 to allow
-       and control inclusion of a shared docinfo file. See
-       [77]http://groups.google.com/group/asciidoc/browse_thread/thread/c9
-       48697943432e24
-     * Vim syntax highlighter highlights multi-name conditional
-       attributes.
-     * LaTeX backend patch submitted by Andreas Hermann Braml (see
-       [78]http://groups.google.com/group/asciidoc/browse_thread/thread/1c
-       415fc4540ce5e5).
-     * Implemented backend aliases; renamed docbook.conf to docbook45.conf
-       and aliased docbook45 backend to docbook; aliased xhtml11 to html.
-
-   Bug fixes
-     * FIXED: Filter commands located in filter directories local to the
-       source document that where not in the search PATH where not found.
-     * FIXED: Volnitsky theme: Verseblock font set normal instead of
-       monospaced.
-     * FIXED: xhtml11: Callout icons were not rendered as Data URIs when
-       icons and data-uri attributes were specified.
-     * FIXED: Long standing bug: nested include macros did not restore the
-       parent document infile and indir attributes. See:
-       [79]http://groups.google.com/group/asciidoc/browse_thread/thread/87
-       12a95e95a292a7
-     * FIXED: html4: set preamble ID anchor.
-     * FIXED: xhtml11: dropped unusable id and role attributes from
-       preamble template.
-     * FIXED: Bug in multi-name conditional attributes e.g. {x,y#} fails
-       if x or y is undefined.
-     * FIXED: latex filter not being installed by Makefile. Thanks to
-       Grant Edwards for this patch. See
-       [80]http://groups.google.com/group/asciidoc/browse_thread/thread/c4
-       427a3902d130a8
-     * FIXED: a2x: Long-standing bug in a2x which always passes
-       --string-param navig.graphics 0 to xsltproc, regardless of whether
-       icons are enabled or not. Reported by Michael Wild:
-       [81]http://groups.google.com/group/asciidoc/browse_thread/thread/59
-       a610068e4acb58
-     __________________________________________________________________
-
-8. Version 8.6.1 (2010-08-22)
-
-   Additions and changes
-     * a2x: --resource-dir option renamed to --resource.
-     * a2x: --resource option accepts both file and directory names.
-     * a2x: Added -m,--resource-manifest option.
-     * Added Vim syntax highlighting for quote attribute lists.
-     * Load asciidoc.conf from all configuration directories before any
-       other configuration files. This ensures that attributes used for
-       conditional inclusion are set before backend configuration files
-       are processed. Previously if you wanted to control global conf file
-       inclusion your only choice was to modify the global asciidoc.conf
-       file.
-     * AsciiDoc Quote element attributes have been simplified and
-       generalized — positional color and size attributes and named role
-       attribute have been replaced by a single positional attribute.
-
-   Bug fixes
-     * FIXED: testasciidoc.py: BACKEND command argument was being ignored.
-     * FIXED: Broken docinfo file functionality in html4 and xhtml11
-       backends (previously the docinfo file was included in the body
-       instead of the header).
-
-  8.1. Regression issues
-
-   This release breaks compatibility with quoted element positional color
-   and size attributes (HTML backends). To revert to the deprecated quote
-   behavior define the deprecated-quotes attribute in the global
-   asciidoc.conf file or on the command-line. For a more detailed
-   explanation of the rationale behind this change see
-   [82]http://groups.google.com/group/asciidoc/browse_thread/thread/b22603
-   bfb879418c.
-     __________________________________________________________________
-
-9. Version 8.6.0 (2010-08-16)
-
-   Additions and changes
-     * The AsciiDoc distribution can now be built “out of the box” from
-       the distribution tarball or the Mercurial repository (provided you
-       have the requisite build applications installed).
-     * The global configuration files directory is ignored by both
-       asciidoc and a2x if AsciiDoc configuration files are installed in
-       the same directory as the asciidoc executable. This change allows
-       both a system wide copy and multiple local copies of AsciiDoc to
-       coexist on the same host PC.
-     * CSS quirks mode is no longer the default xhtml11 output
-       ([83]http://groups.google.com/group/asciidoc/browse_thread/thread/1
-       c02d27d49221aa2).
-     * Relaxed anchor ID name syntax
-       ([84]http://groups.google.com/group/asciidoc/browse_thread/thread/5
-       f3e825c74ed30c).
-     * Added document files: doc/epub-notes.txt,
-       doc/publishing-ebooks-with-asciidoc.txt.
-     * a2x: If all other resource locations are exhausted then recursively
-       search directories named images and stylesheets in the asciidoc
-       configuration files directory.
-     * a2x: options can also be set in the AsciiDoc source file. If the
-       source file contains a line beginning with // a2x: then the
-       remainder of the line will be treated as a2x command-line options.
-     * Added dblatex table-width processing instruction — tables generated
-       by dblatex now observe the AsciiDoc table width as a percentage
-       (thanks to Gustav Broberg for suggesting this enhancement).
-     * a2x: Don’t exit if the --epubcheck option is set and epubcheck is
-       missing, issue warning and continue.
-     * Added a global plaintext attribute for dealing with large amounts
-       of imported text.
-     * The author name format has been relaxed, if the the author does not
-       match the formal specification then it is assigned to the firstname
-       attribute (previously asciidoc exited with an error message).
-     * FAQ and documentation updates.
-     * Refactored chunked.xsl and epub.xsl files.
-     * Exchanged article.epub for more relevant book.epub on website.
-     * Put asciidoc.epub User Guide on website.
-     * a2x: Chunking EPUB and HTML outputs set to a per chapter basis and
-       the first chapter is separate from preceding contents.
-     * Changed dates format in example article and books to suppress EPUB
-       validation error.
-     * Added style and role CSS classes to xhtml11 section templates.
-     * Added the role element to xhtml11 backend block templates.
-     * Suppressed md5 module deprecation warning from music and Graphviz
-       filters.
-     * Pygments ([85]http://pygments.org/) option added to source code
-       highlight filter. Based on Pygments source code filter written by
-       David Hajage
-       ([86]http://groups.google.com/group/asciidoc/browse_thread/thread/d
-       8d042f5a3021369/8934ebbb8cb7144b).
-     * xhtml11: Added a new theme (volnitsky). Written and contributed by
-       Leonid V. Volnitsky.
-     * xhtml11: Set body element class name to document type.
-     * Added refentryinfo element and contents (including revdate) to man
-       page DocBook output. Man pages are now dated using the revdate
-       attribute value if it has been defined. Based on patch supplied by
-       Rainer Muller
-       [87]http://groups.google.com/group/asciidoc/browse_frm/thread/319e5
-       cd94493e330/3fcb83fab067af42.
-     * Added {template:...} system attribute.
-     * Table of contents attribute toc can now be specified in the
-       document header.
-     * Reimplemented music and latex filter -m option functionality when
-       the input is stdin using MD5 checksums.
-     * Added latex filter.
-     * Added auto file name generation to image generating filters
-       (latex,music, graphviz).
-     * Added counter2 and set2 system attributes (to implement image auto
-       file name generation).
-     * Undefined attribute in filter command generates error but does not
-       exit.
-     * Attribute substitution proceeds from start line to end line
-       (previously was in reverse order which was really confusing).
-     * Tidied up music filter code:
-          + Format option is optional and default to abc unless Lilypond
-            notation detected.
-          + The -m option does not apply to stdin input.
-     * Added paragraph styles to music and graphviz filters.
-     * Documented dynamic template names. 753: Graphviz filter can now
-       generate SVG format images. Patch submitted by Elmo Todurov, see:
-       [88]http://groups.google.com/group/asciidoc/browse_frm/thread/fe9b3
-       3d8f5f1e0af The xhtml11 SVG Graphviz template marked EXPERIMENTAL.
-       No SVG support for other backends.
-     * AsciiDoc template names can now contain embedded attribute
-       references.
-     * Added legalnotice tag to doc/article-docinfo.xml example.
-     * xhtml11 backend: Callouts and callout lists display callout icons
-       when the icons attribute is defined. See
-       [89]http://groups.google.com/group/asciidoc/browse_frm/thread/8eda3
-       ea812968854
-     * Document attribute names are case insensitive everywhere, this
-       makes using attribute entries more consistent e.g. previously
-       :VERS: had to be refered to
-     * Hungarian translation of footer-text (submitted by Miklos Vajna).
-       See
-       [90]http://groups.google.com/group/asciidoc/browse_frm/thread/7174c
-       b7598993c72#
-     * asciidocapi.py 0.1.2: Can now load AsciiDoc script named asciidoc.
-       See
-       [91]http://groups.google.com/group/asciidoc/browse_frm/thread/66e7b
-       59d12cd2f91 Based on patch submitted by Phillip Lord.
-     * German translation of footer-text (submitted by Simon Ruderich).
-       See
-       [92]http://groups.google.com/group/asciidoc/browse_frm/thread/7174c
-       b7598993c72
-     * Pushed HTML footer text into language conf files with the
-       introduction of a [footer-text] configuration file template
-       section. See
-       [93]http://groups.google.com/group/asciidoc/browse_frm/thread/7174c
-       b7598993c72
-
-   Bug fixes
-     * FIXED: Sometimes multiple double quoted text elements in the same
-       paragraph were mistakenly seen as starting with an inline literal.
-       See
-       [94]http://groups.google.com/group/asciidoc/browse_frm/thread/219c8
-       6ae25b79a21
-     * FIXED: localtime and doctime attributes calculated incorrect
-       daylight saving / non daylight saving timezones and consequently so
-       did HTML footers. Patch submitted by Slawomir Testowy. See
-       [95]http://groups.google.com/group/asciidoc/browse_frm/thread/af652
-       507caf6cec9
-     * FIXED: Missing selector for List of examples title in DocBook CSS
-       file. Patch submitted by Laurent Laville. See
-       [96]http://groups.google.com/group/asciidoc/browse_frm/thread/3f969
-       00f7fbf5620
-     * FIXED: Broken accents in lang-hu.conf. See:
-       [97]http://groups.google.com/group/asciidoc/browse_frm/thread/7174c
-       b7598993c72
-     * FIXED: DocBook XSL generated HTML callout lists are properly
-       aligned. Submitted by Lionel Orry. See
-       [98]http://groups.google.com/group/asciidoc/browse_frm/thread/2ff80
-       2547b6a75ea
-     * FIXED: Filter execution now occurs prior to filter markup template
-       substitution to ensure image data URI encoding happens after image
-       generation (see
-       [99]http://groups.google.com/group/asciidoc/browse_thread/thread/14
-       e8fcb289a135b).
-     * FIXED: The section numbers no longer increment when the numbered
-       attribute is undefined (see
-       [100]http://groups.google.com/group/asciidoc/browse_thread/thread/f
-       aa36e9e5c7da019/d24cab3fe363e58d).
-     __________________________________________________________________
-
-10. Version 8.5.3 (2010-01-18)
-
-   Additions and changes
-     * a2x: Added a2x configuration file options ASCIIDOC_OPTS,
-       DBLATEX_OPTS, FOP_OPTS, XSLTPROC_OPTS (appended to same-named
-       command-line options). See
-       [101]http://groups.google.com/group/asciidoc/browse_frm/thread/ac4b
-       9bfa2116db28
-     * Dropped .hgignore from the repository. See
-       [102]http://groups.google.com/group/asciidoc/browse_frm/thread/c17a
-       bd175778f5ea
-     * Don’t pass verbose options to asciidoc table filter so that
-       asciidocapi messages are not discarded. See:
-       [103]http://groups.google.com/group/asciidoc/browse_frm/thread/c17a
-       bd175778f5ea
-     * Added ./tests/data/lang-pt-BR-test.txt file to the repository.
-     * xhtml11: Verse block and verse paragraph content enveloped in a pre
-       tag (instead of a div) so it renders better in text-only browsers.
-       See:
-       [104]http://groups.google.com/group/asciidoc/browse_frm/thread/1b6b
-       66adb24e710
-     * User Guide: Clarified Passthrough Blocks (suggested by Simon
-       Ruderich).
-     * FAQ: How can I include lines of dashes inside a listing block?
-     * FAQ errata and updates (submitted by Simon Ruderich).
-     * User Guide errata.
-     * Simplified asciidoc-toc processing instruction and included lists
-       of figures, tables, examples and equations in books (i.e. revert to
-       pre-8.5.0 behavior).
-     * Attempted to have dblatex recognise the asciidoc-toc processing
-       instruction but couldn’t get it to work.
-     * Added notitle attribute to allow the document title to be hidden.
-
-   Bug fixes
-     * FIXED: Regression: system attribute escaping did not work.
-     * FIXED: Website: broken image links in chunked User Guide.
-     __________________________________________________________________
-
-11. Version 8.5.2 (2009-12-07)
-
-   Additions and changes
-     * Updated example article and book documents with the recommended
-       explicit section name syntax (see the Special section titles vs.
-       explicit template names sidebar in the AsciiDoc User Guide).
-     * Added Italian language configuration file (contributed by Fabio
-       Inguaggiato).
-     * Added header table style. See:
-       [105]http://groups.google.com/group/asciidoc/browse_frm/thread/a23f
-       ea28394c8ca9
-     * Pass icons, data-uri, imagesdir, iconsdir attributes to asciidoc
-       table style filter so that images are rendered in table cells.
-     * Pass trace and verbose attributes to asciidoc table style filter so
-       diagnostic information is printed from table cell source.
-     * The eval system attribute can be nested inside other system
-       attributes.
-     * HTML outputs: Table and figure caption punctuation set to more
-       usual syntax.
-     * docbook backend: footnotes can now contain embedded images. See
-       [106]http://groups.google.com/group/asciidoc/browse_frm/thread/50b2
-       8f6941de111a
-     * CSS tweaks so that tables processed by DocBook XSL Stylesheets have
-       the default asciidoc xhtml11 backend styling. See
-       [107]http://groups.google.com/group/asciidoc/browse_frm/thread/dfe5
-       204d5b2c9685
-     * Block titles take precedence over section titles to avoid titled
-       delimited blocks being mistaken for two line section titles (see
-       [108]http://groups.google.com/group/asciidoc/browse_frm/thread/f0b6
-       f9989f828c3).
-     * Section title trace displays level and title text.
-     * FAQ additions.
-     * Added {zwsp} (zero width space) attribute.
-     * Undefined paragraph styles are reported (previously threw a runtime
-       error).
-     * Eliminated empty preamble generation.
-     * Floating titles now processed in all contexts.
-     * Implemented auto-lettered appendix names and updated example
-       documents.
-     * Section numbering can be disabled in HTML outputs with a
-       :numbered!: AttributeEntry.
-     * xhtml11: Nicer default quote block styling.
-     * Exclude floating titles from xhtml11 table of contents. Patch
-       submitted by Mark Burton (see
-       [109]http://groups.google.com/group/asciidoc/browse_frm/thread/14ae
-       fc1cb6bd85f5).
-     * Enhanced doc/article-docinfo.xml example docinfo file.
-     * Vim syntax highlighter improvements.
-
-   Bug fixes
-     * FIXED: Absolute imagesdir and iconsdir attribute path names do not
-       work with the xhtml11 data-uri encoding. See
-       [110]http://groups.google.com/group/asciidoc/browse_frm/thread/cb8b
-       7694bbc82a6
-     * FIXED: Regression issue with inline data-uri images. See
-       [111]http://groups.google.com/group/asciidoc/browse_frm/thread/cb8b
-       7694bbc82a6
-     * FIXED: An unexpected error occurred when processing a table
-       containing CSV data if the cols attribute was not explicitly
-       specified. See
-       [112]http://groups.google.com/group/asciidoc/browse_frm/thread/4b0f
-       364b477ec165
-     __________________________________________________________________
-
-12. Version 8.5.1 (2009-10-31)
-
-   Additions and changes
-     * If an AsciiDoc document file begins with a UTF-8 BOM (byte order
-       mark) then it is passed transparently through to the output file.
-       The BOM is stripped from included files. See
-       [113]http://groups.google.com/group/asciidoc/browse_frm/thread/e5e6
-       1823ff4203cd
-     * Added AsciiDoc role attribute to quoted text. Sets class attribute
-       in HTML outputs; role attribute in DocBook outputs. See:
-       [114]http://groups.google.com/group/asciidoc/browse_frm/thread/2aa3
-       e5711d243045
-     * Conditional attribute syntax extended: they now accept multiple
-       ORed or ANDed attribute names.
-     * The xhtml11 backend dynamically processes footnotes using
-       JavaScript.
-     * Tidied up and namespaced xhtml11 JavaScript.
-     * Superceded javascripts/toc.js with javascripts/asciidoc-xhtml11.js.
-     * Added disable-javascript attribute (xhtml11 backend).
-     * Styled HTML footnotes.
-     * Added links to HTML footnote refs.
-     * Added title attribute to inline image macros to display popup
-       “tooltip” (HTML outputs only).
-     * Single-quoted attribute values are substituted in block macros
-       (just like the AttributeList element).
-     * For consistency changed underscores to dashes in attribute names.
-       Public attributes with underscores retained for compatibility.
-     * Added Brazilian Portuguese language configuration file (contributed
-       by Thiago Farina).
-     * Added leveloffset attribute to make it easier to combine documents.
-
-   Bug fixes
-     * FIXED: a2x: --dblatex-opts is now processed last so
-       asciidoc-dblatex.xsl params can be overridden. Patch submitted by
-       Mark Fernandes (see
-       [115]http://groups.google.com/group/asciidoc/browse_frm/thread/5215
-       c99dcc865e7d).
-     * FIXED: An error occurred if a directory in current path with same
-       name as executable.
-
-  12.1. Regression issues
-
-   There’s been quite a bit of tiding up to the xhtml11 JavaScript. The
-   most obvious change is that the toc.js script has been superceded by
-   asciidoc-xhtml11.js so if you’re linking you’ll need get a copy of the
-   new file from the distribution javascripts directory.
-
-   If you use customised xhtml11 configuration file [header] and [footer]
-   sections and you want them to use the new footnotes feature then you’ve
-   got a bit more work to do:
-    1. The onload event expression changed.
-    2. The new <div id="content">...</div> div envelopes document content.
-    3. You need to add <div id="footnotes">...</div> div to the
-       [footnotes] section for footnotes to work.
-    4. Drop the ifdef::toc[] macro that surround JavaScript inclusion.
-
-   Take a look at the [header] and [footer] changes in the xhtml11.conf
-   diff to see what’s going on:
-   [116]http://hg.sharesource.org/asciidoc/diff/55a5999bfd04/xhtml11.conf
-     __________________________________________________________________
-
-13. Version 8.5.0 (2009-10-04)
-
-   Additions and changes
-     * Implemented a float attribute for tables and block images (HTML
-       outputs only).
-     * Added unfloat::[] block macro to cancel floating.
-     * Added table align attribute to (HTML outputs only).
-     * The image align attribute now works with HTML backends.
-     * Renamed table cell align attribute to halign so it doesn’t clash
-       with the new table align attribute.
-     * Added breakable and unbreakable options to AsciiDoc example and
-       block image elements.
-     * [miscellaneous] section entries now update properly when set from a
-       document AttributeEntry.
-     * [miscellaneous] section pagewidth entry accepts fractional values.
-     * Fractional column widths are now calculated correctly when using
-       fractional pageunits (DocBook tables).
-     * Use DocBook XSL table width processing instructions.
-     * asciidoc KeyboardInterrupt exits with error code 1.
-     * Added set system attribute to allow attributes to be set from
-       configuration file templates.
-     * Allow constrained quotes to be bounded on the left by a colons and
-       semicolons, see
-       [117]http://groups.google.com/group/asciidoc/browse_frm/thread/b276
-       a927fdc87995
-     * Titled listing and literal blocks (DocBook outputs) no longer
-       default to examples. See
-       [118]http://groups.google.com/group/asciidoc/browse_frm/thread/f4df
-       7c9eec01a9bd
-     * Updated language file table, figure and example captions to
-       accommodate new auto-numbering in html4 and xhtml11 backends.
-     * Titled source highlight filter listings generated by docbook
-       backend are now rendered as examples. See
-       [119]http://groups.google.com/group/asciidoc/browse_frm/thread/f4df
-       7c9eec01a9bd
-     * Implemented counter system attribute.
-     * Use counter system attributes to number titled tables and block
-       images in HTML backends.
-     * Added program name suffix to console messages.
-     * Added substitution to the AttributeEntry passthrough syntax, this
-       replaces the now unnecessary attributeentry-subs attribute.
-     * Allow passthrough inline macro syntax to be used in
-       AttributeEntrys.
-     * Reinstated 8.4.4 default lang attribute behavior. See
-       [120]http://groups.google.com/group/asciidoc/browse_frm/thread/d299
-       24043e21cb6a.
-     * Added max-width attribute to the xhtml11 backend to set maximum
-       display width. See
-       [121]http://groups.google.com/group/asciidoc/browse_frm/thread/74d9
-       a542b79ccd50.
-     * Added a2x.py, a rewritten and much enhanced version of the old a2x
-       bash script.
-     * The new a2x can output EPUB formatted documents.
-     * Added --safe option and deprecated --unsafe option. Patch submitted
-       by Todd Zullinger. See
-       [122]http://groups.google.com/group/asciidoc/browse_frm/thread/ea3a
-       8ea399ae5d2a and
-       [123]http://groups.google.com/group/asciidoc/browse_frm/thread/69b3
-       183fdab7c6a5
-     * Added CHECK and TEST todo highlight words to Vim syntax
-       highlighter.
-     * Line breaks, page breaks, and horizontal rulers are now processed
-       by dblatex, thanks to a patch submitted by Mark Fernandes
-       ([124]http://groups.google.com/group/asciidoc/browse_frm/thread/a25
-       4cf949ea7c6c5).
-     * Allow footnote macros hard up against the preceding word so the
-       rendered footnote mark can be placed against the noted text without
-       an intervening space (patch submitted by Stas Bushuev,
-       [125]http://groups.google.com/group/asciidoc/browse_frm/thread/e1dc
-       b7ee0efc17b5).
-     * Normalized path in safe_filename function (submitted by Todd
-       Zullinger,
-       [126]http://groups.google.com/group/asciidoc/browse_frm/thread/69b3
-       183fdab7c6a5).
-     * The Asciidoc numbered and toc attributes cause DocBook outputs to
-       include asciidoc-numbered and asciidoc-toc processing instructions,
-       these are used by DocBook XSL to include section numbering and
-       table of contents (like Asciidoc HTML backends). For backward
-       compatibility both numbered and toc attributes are defined by
-       default when the docbook backend is used. See
-       [127]http://groups.google.com/group/asciidoc/browse_frm/thread/1bad
-       ad21ff9447ac.
-     * data-uri attribute is now evaluated dynamically and can be set in
-       document body (previously could only be set from command-line).
-     * Added sys3 and eval3 system attributes to passthrough generated
-       output, this fixes the data-uri inline image problem:
-       [128]http://groups.google.com/group/asciidoc/browse_frm/thread/a42d
-       b6bc54c2c537.
-     * Missing language file generates a warning instead of an error.
-     * Updated Spanish language file (updates contributed by Gustavo
-       Andrés Gómez Farhat).
-
-   Bug fixes
-     * FIXED: Options in an AttributeList option attribute are merged with
-       (rather than replace) configuration file options.
-     * FIXED: Comment blocks and comment block macros no longer consume
-       preceding block titles and attribute lists.
-     * FIXED: examples/website/layout1.conf and
-       examples/website/layout2.conf TOC problem. Submitted by Mark
-       (burtoogle). See
-       [129]http://groups.google.com/group/asciidoc/browse_frm/thread/b9c6
-       3be67dd1d11c
-     * FIXED: Only the first occurrence of passthrough macro was
-       substituted. Patch submitted by Peter Johnson. See
-       [130]http://groups.google.com/group/asciidoc/browse_frm/thread/1269
-       dc2feb1a482c
-     * FIXED: asciidoc now runs on Jython 2.5.0.
-     * FIXED: Wordpress margins and pads in a number of block elements
-       ([131]http://groups.google.com/group/asciidoc/browse_frm/thread/36f
-       f073c79cbc20a).
-
-  13.1. Regression issues
-
-     * Tables generated by dblatex occupy 100% of the available space
-       regardless of the width attribute setting. To restore width
-       behavior change the pageunits miscellaneous parameter to pt. You
-       can do this from the command-line with the -a pageunits=pt option.
-       See [132]DocBook table widths.
-     __________________________________________________________________
-
-14. Version 8.4.5 (2009-05-24)
-
-   Additions and changes
-     * Added manpage Name and Synopsis section title customization to
-       languages configuration files.
-     * Synopsis manpage section no longer mandatory.
-     * Section markup templates can be specified by setting the title’s
-       first positional attribute or template attribute.
-     * The article and book document header can now include a revision
-       remark.
-     * A role attribute can now be applied to block elements. This adds
-       the role attribute to DocBook elements. Patch submitted by
-       [133]Noah Slater).
-     * Renamed revision and date attributes to more sensible and
-       consistent revnumber and revdate (old names deprecated but still
-       recognized).
-     * Moved backend specific attributes to Appendix H in User Guide.
-     * Renamed and generalized the docbook backend revision history
-       inclusion mechanism to docinfo to reflect the use of all article or
-       book information elements. The old revision history names still
-       work but have been deprecated.
-     * Refactored docbook.conf headers.
-     * Moved line break replacement from [replacements] to [replacements2]
-       so the replacement occurs after the mailto macro. This fixes bug
-       [134]http://groups.google.com/group/asciidoc/browse_thread/thread/4
-       bdcdfb0af773e2
-     * The typewriter to punctuation apostrophe replacement can be escaped
-       with a backslash.
-     * Graphviz filter outputs images to imagesdir if it is defined.
-     * Made the block image macro generic so that it can be used for
-       filter outputs. As a result Music and Graphviz filters:
-          + Have been greatly simplified.
-          + Honor the data-uri attribute.
-          + html4 outputs no longer generate W3C validation warning.
-     * The iconsdir attribute no longer requires a trailing directory
-       separator character.
-     * Removed borders around linked html4 images.
-     * Added html4 specific HTML output for music filter.
-     * a2x: Added --unsafe option (shortcut for --asciidoc-opts=--unsafe).
-     * a2x: The FOP executable can now be named fop (this is the default
-       name in some distributions).
-     * Attributes are now substituted in the system macro attribute list.
-     * If the output is set to stdout (i.e. no output directory is
-       defined) then Music and Graphviz filters will output included
-       images to the source file directory.
-     * Added name directive to testasciidoc.
-     * Added lots of testasciidoc new tests.
-     * Moved language specific configuration parameters into lang-en.conf
-       file.
-     * lang attribute entry can be specified in the AsciiDoc source file
-       (preceding the header).
-     * Removed cruft from A-A-P scripts and documented them.
-     * Added German language config file (lang-de.conf) contributed by
-       Michael Wild.
-     * Added French language config file (lang-fr.conf) contributed by
-       Yves-Alexis Perez.
-     * Added Russian language config file (lang-ru.conf) contributed by
-       Artem Zolochevskiy.
-     * Added Hungarian language config file (lang-hu.conf) contributed by
-       Miklos Vajna.
-
-   Bug fixes
-     * FIXED: Multiple manpage names are now handled correctly when
-       generating DocBook output, each name now generates a separate
-       DocBook <refname> element. See
-       [135]http://groups.google.com/group/asciidoc/browse_thread/thread/c
-       93bb4db025225d8
-     * FIXED: A problem that caused AttributeEntries preceding the header
-       to be overwritten when the language conf file loaded.
-     * FIXED: Possible inline macro name ambiguity e.g. link matches
-       olink.
-     * FIXED: The documented macro definition deletion behavior had been
-       broken for a long time.
-     * FIXED: Email addresses not recognized when followed by a period
-       character.
-     * FIXED: Hyphens in mailto macros can delimit nested addresses e.g.
-       bloggs at mail was processed inside
-       mailto:joe-bloggs at mail-server.com[Mail].
-     * FIXED: User name in FTP URI generated incorrect FTP link. See
-       [136]http://groups.google.com/group/asciidoc/browse_thread/thread/1
-       d796a9c9ddb2855
-     * FIXED: Source highlighter now works with Wordpress backend (see
-       [137]http://groups.google.com/group/asciidoc/browse_thread/thread/6
-       d8c716748b109e3).
-
-  14.1. Regression issues
-
-    1. A colon following the date in the AsciiDoc header is treated as a
-       revision remark delimiter — this could be an issue if you have used
-       a colon in the header date.
-     __________________________________________________________________
-
-15. Version 8.4.4 (2009-04-26)
-
-   Additions and changes
-     * Added table column and row spanning.
-     * Table styles can now be applied per cell.
-     * Vertical cell alignment can be applied to columns and individual
-       cells.
-     * Added table align attribute to set horizontal alignment for entire
-       table.
-     * Included Geoff Eddy’s update of the experimental LaTeX backend.
-     * A new attribute named trace controls the output of diagnostic
-       information. If the trace attribute is defined then
-       element-by-element diagnostic messages detailing output markup
-       generation are printed to stderr.
-     * Added literal paragraph style (allows literal style to be applied
-       to normal paragraphs).
-     * Deleted unused replacements2 from xhtml11.conf.
-     * Added replacements2 to default substitutions.
-     * testasciidoc.py: messages to stdout, only diffs to stderr.
-     * Added transparency to smallnew.png image.
-
-   Bug fixes
-     * All combinations of leading comments and attribute entries at the
-       start of a document are now skipped correctly.
-     * FIXED: ./configure doesn’t support --docdir as expected (patch
-       submitted by Artem Zolochevskiy)
-     * FIXED: Constrained quotes were incorrectly matched across line
-       boundaries e.g. the string +\nabc+ incorrectly matched a monospace
-       quote.
-     __________________________________________________________________
-
-16. Version 8.4.3 (2009-04-13)
-
-   Additions and changes
-     * DocBook outputs default to DocBook version 4.5 doctype (previously
-       4.2).
-     * Configuration file [specialsections] definitions can be undefined
-       by setting their configuration entry values blank.
-     * The Makefile install target depends on the all target to ensure
-       pre-install patches are applied.
-     * testasciidoc.py now emits user friendly messages if:
-         1. the configuration file is missing.
-         2. an illegal backend is specified.
-         3. an illegal test number is specified.
-
-   Bug fixes
-     * Fixed [138]missing template section error.
-     * The testasciidoc.py --force option no longer deletes test data
-       files that were not specified.
-     * Dropped second quotes substitution in table cells — it had
-       effectively disabled quote escaping in table cells.
-     __________________________________________________________________
-
-17. Version 8.4.2 (2009-03-19)
-
-   Additions and changes
-     * Added [139]testasciidoc, a tool to verify AsciiDoc conformance.
-     * A warning is issued if nested inline passthroughs are encountered.
-     * asciidocapi: setting an attribute value to None will undefine
-       (delete) the attribute (this in addition to the name! attribute
-       name format that the asciidoc(1) command uses).
-     __________________________________________________________________
-
-18. Version 8.4.1 (2009-03-10)
-
-   Additions and changes
-     * AsciiDoc now has a [140]Python API. The following minimal example
-       compiles mydoc.txt to mydoc.html:
-
-       from asciidocapi import AsciiDocAPI asciidoc = AsciiDocAPI()
-       asciidoc.execute('mydoc.txt')
-
-     * Backtick quoting for monospaced text is now implemented as an
-       inline literal passthrough. This makes more sense since monospace
-       text is usually intended to be rendered literally. See
-       [141]Regression issues below for the impact this may have on
-       existing documents. Here are some examples that would previously
-       have had to be escaped:
-  The `++i` and `++j` auto-increments.
-  Paths `~/.vim` and `~/docs`.
-  The `__init__` method.
-  The `{id}` attribute.
-     * Added --doctest option to asciidoc(1) command.
-     * Added an optional second argument to BlockId element, this sets the
-       {reftext} attribute which in turn is used to set the xreflabel
-       attribute in DocBook elements.
-     * Added lists to --help syntax summary.
-     * {infile} and {indir} attributes reflect the current input file
-       (previously always referred to the root document).
-     * {docfile} (new) and {docdir} (previously deprecated) attributes
-       refer to the root document specified on the asciidoc(1)
-       command-line.
-     * Vim syntax highlighter improvements.
-     * Syntax summary command (asciidoc -h syntax) additions.
-     * Admonition icons now have transparent backgrounds.
-     * Changed yellow W3C badges to blue ones in page footers.
-
-   Bug fixes
-     * Dropped asciidoc(1) broken undocumented --profile option.
-     * Em dash replacement now recognized at start of block.
-
-  18.1. Regression issues
-
-   Replacing backtick quoting with the inline literal passthrough raises
-   two regression scenarios for existing documents:
-    1. You have escaped the expansion of enclosed inline elements, for
-       example: \{id}. You would need to delete the backslashes: {id} (if
-       you don’t the backslashes will be printed). Mostly it’s just a case
-       of interactively finding and replacing of all occurrences of `\.
-    2. There are enclosed inline elements, for example: some *bold*
-       monospaced. You would need to switch to plus character monospace
-       quoting: +some *bold* monospaced+ (if you don’t the enclosed
-       elements won’t be expanded).
-
-   If your existing documents include these cases and you don’t want to
-   upgrade then use the -a no-inline-literal command-line option,
-   alternatively put this in ~/.asciidoc/asciidoc.conf:
-  [attributes]
-  no-inline-literal=
-     __________________________________________________________________
-
-19. Version 8.3.5 (2009-02-02)
-
-   Additions and changes
-     * Cached compiled regular expression delimiters (speed up User Manual
-       compilation by 250%).
-     * Created distinct list definitions for each numbered list style to
-       allow nesting of all styles.
-     * Roman numbers in numbered lists are followed by a closing
-       parenthesis instead of a period to eliminate i, v, x item ambiguity
-       with respect to alpha numbered list items.
-     * Added **, ***, ****, ***** bulleted lists.
-     * Added ..., ...., ..... implicit numbered lists.
-     * Added :::, :::: labeled lists.
-     * Updated User Guide for new list syntaxes.
-     * Optimized paragraph and list termination detection with separate
-       precompiled regular expressions for performance and to prevent
-       reaching Python 100 named group limit.
-     * Updated Vim syntax highlighter for new list syntaxes.
-     * Allow template::[] macros in conf file entries sections (not just
-       in template sections).
-     * Dropped unused [listdef-numbered2] conf file sections.
-     * Renamed ListBlock to more appropriate OpenBlock.
-     * Implemented single-line versions of ifdef::[] and ifndef::[]
-       macros.
-     * html4 backend styling:
-          + Underlined admonition captions.
-          + Added side border to Example Blocks.
-     * xhtml11 backend styling:
-          + Dropped right hand margin from all but quote and verse blocks.
-          + html4 backend: corrected over-sized width of caption in
-            admonition block.
-
-   Bug fixes
-     * Fixed broken numbered list nesting.
-
-  19.1. Compatibility issues
-
-   The roman numbered list parenthesis syntax is incompatible with the
-   potentially ambiguous roman period syntax introduced in 8.3.2.
-     __________________________________________________________________
-
-20. Version 8.3.4 (2009-01-20)
-
-   Additions and changes
-     * Implemented a title float style. A floating title (or bridgehead)
-       is rendered just like a normal section but is not formally
-       associated with a text body and is not part of the regular section
-       hierarchy so the normal ordering rules do not apply.
-     * Implemented inline comment macro so comment lines can now appear
-       inside block elements.
-     * Comment lines are sent to the output if the showcomments attribute
-       is defined (comment blocks are never sent to the output).
-     * Single quoting attribute values in AttributeList elements causes
-       them to be substituted like normal inline text (without single
-       quoting only attribute substitution is performed).
-     * Rewrote list item processing (was very crufty). List continuation
-       and list blocks now work as expected. Updated and clarified list
-       documentation in User Guide.
-     * The revision attribute now recognizes the RCS $Id$ marker format.
-     * An RCS $Id$ marker formatted revision line in the header does not
-       need to be preceded by an author line.
-     * If an RCS $Id$ formatted revision is specified and the author name
-       has not already been set then the author name in the $Id$ marker
-       will be used.
-     * Updated Gouichi Iisaka’s Graphviz filter to version 1.1.3.
-     * Added autowidth table attribute option for (X)HTML outputs.
-     * DocBook backend now puts orgname optional attribute in DocBook
-       header.
-     * Deprecated undocumented companyname attribute in favor of DocBook’s
-       corpname.
-     * Removed explicit closing backslash from HTML4 self-closing tags to
-       comply with WC3 recommendation.
-
-   Bug fixes
-     * Fixed 8.3.3 regression whereby adjacent lists with the same syntax
-       but different list styles were incorrectly treated as a single
-       list.
-     __________________________________________________________________
-
-21. Version 8.3.3 (2009-01-02)
-
-   This release supersedes 8.3.2.
-
-   Bug fixes
-     * The broken and confusing numeration and numeration2 numbered list
-       attributes have been dropped, use the style attribute instead.
-     __________________________________________________________________
-
-22. Version 8.3.2 (2009-01-01)
-
-   Additions and changes
-     * Added Gouichi Iisaka’s Graphviz filter to distribution.
-     * The SidebarBlock element can now be rendered with an abstract
-       style.
-     * Reorganized filters into a separate subdirectory for each filter.
-     * Updated Makefile.in and MANIFEST files to reflect new filters
-       organization.
-     * Added listing style to LiteralBlock element so listings with nested
-       listing blocks can be rendered as a listing block.
-     * Changed example code filter to use preferred ListingBlock syntax
-       (the old ~ delimited filter syntax is no longer used).
-     * Implemented enumeration and enumeration2 numbered list attributes
-       for specifying the list numbering style (arabic, loweralpha,
-       upperalpha, lowerroman and upperroman).
-     * AsciiDoc now recognizes upperalpha, lowerroman and upperroman
-       numbers in listdef-numbered2 numbered lists and sets the number
-       style based on the style of the first numbered list item
-       (alternative to setting enumeration2 attribute).
-     * Updated formatlistpat definition in .vimrc example in User Guide.
-     * You can now backslash escape system block macros.
-     * Added Pychart FAQ.
-     * Drop paragraph text and list text, index and label match groups
-       from attributes — they are included in the element’s text and we
-       don’t want them processed a second time as attributes.
-     * Changed comment line block macro to a passthrough block macro to
-       ensure no substitutions.
-     * A subslist no longer has to be appended to a PassthroughBlock macro
-       definition, if omitted no substitutions are performed.
-     * Code tidy up: replaced deprecated <> operator with !=.
-     * Removed unused linuxdoc code.
-     * Code tidy ups: dropped old types module reference; replaced
-       has_key() with preferred in operator.
-
-   Bug fixes
-     * Old syntax source highlight filter regression: special characters
-       where not escaped in DocBook outputs.
-     __________________________________________________________________
-
-23. Version 8.3.1 (2008-12-14)
-
-   Additions and changes
-     * Replaced the install.sh script with Ben Walton’s updated autoconf
-       scripts — see [142]INSTALL for details.
-     * Added a generalized AttributeEntry syntax to allow arbitrary
-       configuration file entries to be set from within an AsciiDoc
-       document (suggested by Henrik Maier).
-     * Listing delimited blocks in DocBook outputs now support IDs; IDs of
-       titled Listing and Literal delimited blocks have been moved to the
-       enclosing DocBook example tag (thanks to Vijay Kumar for this
-       patch).
-     * Replaced vertical typewriter apostrophe with punctuation apostrophe
-       (thanks to Noah Slater).
-
-   Bug fixes
-     * Regression: Excluding double-quotes from unquoted attribute values
-       resulted in backward incompatibility, double-quotes in unquoted
-       attribute values has been reinstated.
-     * Regression: Text like &...; was sometimes mistaken for an entity
-       reference — tightened up entity reference matching.
-     __________________________________________________________________
-
-24. Version 8.3.0 (2008-11-29)
-
-   Additions and changes
-     * [143]AsciiDoc new tables is a complete redesign of the tables
-       syntax and generation. The new syntax and features are a huge
-       improvement over the old tables. The old tables syntax has been
-       deprecated but is currently still processed.
-     * [144]Lists can now be styled like other block elements. This allows
-       a single list syntax for glossary, qanda (Question and Answer) and
-       bibliography lists instead of having to remember a different syntax
-       for each type.
-     * Inline passthroughs macros have been improved and block passthrough
-       macros added. Attribute substitution can be optionally specified
-       when the macro is called.
-     * The passthrough block has a fully transparent passthrough delimited
-       block block style called pass.
-     * The asciimath and latexmath [145]passthrough macros along with
-       asciimath and latexmath [146]passthrough blocks provide a (backend
-       dependent) mechanism for rendering mathematical formulas. There are
-       [147]LaTeX Math, [148]AsciiMathML and [149]LaTeXMathML examples on
-       the AsciiDoc website.
-     * Reimplemented and cleaned up filter processing based on a patch
-       submitted by Kelly Anderson. Uses the newer subprocess module
-       instead of the deprecated popen2 module. Now works in Win32 command
-       shell.
-     * Addition FAQs, more documentation updates.
-     * Arbitrary HTML/XML entities can be entered in AsciiDoc source.
-     * Did away with the need for the shaded-literallayout.patch (thanks
-       to Henrik Maier for this patch).
-     * Implemented page break block macro.
-     * Added line breaks and ruler processing instructions to DocBook
-       outputs (thanks to Henrik Maier for this patch).
-     * Added deg (degree) and wj (word joiner) entity attributes (thanks
-       to Henrik Maier).
-     * Tweaked DocBook indexterm2 macro to avoid white space preceding the
-       term when used in table cells (thanks to Henrik Maier for this
-       patch).
-     * Title elements now process the options attribute like other block
-       elements.
-     * Added ‘single quoted’ element.
-     * Spaces on both sides of a — em-dash are translated to thin space
-       characters.
-     * Improved detection and reporting of malformed attribute lists.
-     * The list compact style is now a list option.
-     * Added strong labeled list option which makes the labels bold (HTML
-       outputs only).
-     * Dropped unsupported linuxdoc backend.
-     * Dropped deprecated xhtml-deprecated (version 6) backend.
-     * Added breakable and unbreakable attribute options to tables to
-       control table breaking across page boundaries (DocBook XSL/FO
-       outputs). By and in collaboration with Henrik Maier.
-     * Added pgwide attribute option to tables to table, block image,
-       horizontal labeled lists. Specifies that the element should be
-       rendered across the full text width of the page irrespective of the
-       current indentation (DocBook XSL/FO outputs). Thanks to Henrik
-       Maier for this patch.
-     * Vim syntax highlighter: spaces before/after bullets no longer
-       highlighted (which is ugly if using a theme that highlights with
-       underlines). Thanks to Donald Chai for this patch.
-     * Added a2x(1) --fop option.
-     * Added a2x(1) --no-xmllint option.
-     * Highlighted labelled list terms with the navy color in XHTML
-       outputs.
-     * Use w3m(1) as default a2x(1) text format generator (fallback to
-       lynx(1)).
-     * Changed callout formats in html4 and xhtml11 outputs to angle
-       brackets to match source highlighter rendering.
-     * Macros now inject user defined <optionname>-option attributes into
-       markup.
-     * Added IRC URLs to AsciiDoc inline macros.
-     * Added depth attribute to include::[] system macro.
-     * Added footnoteref inline macro.
-     * Added stylesheet XHTML attribute to specify additional custom CSS
-       stylesheet.
-     * If a paragraph style is specified it will be added to the XHTML
-       class attribute and DocBook role attribute.
-     * Replacements can be set in a document using the reserved
-       AttributeEntry name replacement.
-     * The prefix for auto-generated section name IDs can be set with the
-       idprefix attribute.
-
-   Bug fixes
-     * Escaped quote skipped over leading and trailing quote instead of
-       just the leading quote.
-     * Fixed bug that was causing false negative safe mode warnings (patch
-       submitted by Julien Palmas).
-     * Placed priority of AttributeEntry, AttributeList and BlockTitle
-       above Title. This ensures an AttributeEntry, AttributeList or
-       BlockTitle followed by a same length leading ListingBlock delimiter
-       is not mistaken for a two-line title.
-     * Vim syntax highlighter: fixed multi-line quoted text.
-     * Contstrained quote termination after non-space character enforced.
-     * Vim syntax highlighter: unterminated quoted text is no longer
-       highlighted.
-     * Vim syntax highlighter: passthroughs now exactly match AsciiDoc
-       semantics.
-     * Vim syntax highlighter: escaped quoted text, attribute references
-       and inline macros are not highlighted.
-     * Vim syntax highlighter: TODO’s highlighted in CommentBlocks (thanks
-       to Scott Wall); non-greedy $$...$$.
-     * Vim syntax highlighter: Comment lines mistaken for vertical list
-       labels (thanks to Scott Wall).
-     * Vim syntax highlighter: Single unmatched $$ mistakenly highlighted
-       remaining text (patch contributed by Scott Wall).
-     * Callouts now work in source highlighted listing generated by
-       dblatex.
-     * Fixed exception that occured if undefined attribute was present in
-       filter command.
-     * AttributeList block can now follow a paragraph without intervening
-       blank line.
-     * The include macro tabsize attribute is no longer propagated to
-       nested includes.
-
-   Omissions
-   The following features were implemented but then but removed from this
-   release:
-     * pi, cdata and comment passthrough macros and passthrough block
-       styles (creeping featurism, use pass macros instead).
-     * Generic tag inline macro (creeping featurism, use pass macros
-       instead).
-
-  24.1. Compatibility issues
-
-   Version 8.3.0 has a number of backward incompatibilities with respect
-   to the previous 8.2.7 release:
-     * The old table syntax is still processed but a DEPRECATED warning is
-       issued.
-     * Entity references have to be escaped with a backslash.
-     * You have to explicitly precede horizontal style labeled lists with
-       the [horizontal] style attribute — by default all labeled lists are
-       rendered vertically.
-     * The list compact style has been dropped and is now a list option
-       (use options="compact" in attribute lists).
-     * AsciiDoc version 6 sytnax no longer supported.
-     * Linuxdoc been removed from the distribution.
-     * The unsupported experimental latex backend has not been tested on
-       this release.
-     * The introduction of single-quote quoting requires that double-quote
-       quoting is escaped with two backslashes.
-     __________________________________________________________________
-
-25. Version 8.2.7 (2008-07-04)
-
-   Additions and changes
-     * Added dvi, ps and tex output format options to a2x(1).
-     * Added --dblatex option to a2x(1) so dblatex(1) can be used to
-       generate PDFs.
-     * Added custom dblatex(1) configuration files (in distribution
-       ./dblatex directory) that are used by a2x(1).
-     * dblatex(1) is now used to generate the distributed PDF version of
-       the AsciiDoc User Guide.
-     * If you don’t need a customized the link caption you can enter the
-       http, https, ftp, file URLs and email addresses without any special
-       macro syntax — you get the links by just cutting and pasting URLs
-       and emails addresses. This also makes it easier to open links
-       directly form AsciiDoc source ( most editors allow you to open URLs
-       directly). The Vim syntax highlighter has been updated to reflect
-       these changes.
-     * Highlighted source code paragraphs have been implemented — it’s a
-       much more convenient way to enter short code examples (see [150]the
-       online docs).
-     * The source highlighter and music filter syntax has changed — they
-       now used the ListingBlock syntax customized with source and music
-       style attribute values. This follows the Paragraph styling
-       convention introduced by the source paragraph (previous item) and
-       is easier to read. The old syntax still works but has been
-       deprecated.
-     * QuoteBlocks now have a verse style — you no longer have to nest a
-       verse LiteralBlock inside a QuoteBlock for verses. The verse style
-       on the LiteralBlock has been deprecated (still works though) and
-       the style attribute is positional attribute 1, pushing attribution
-       and citetitle attributes to the right (you’ll need to insert a
-       quote attribute into your existing QuoteBlocks).
-     * It is no up to the DocBook processor to highlight source code
-       syntax in <programlisting> elements rather than GNU Highlighter —
-       this is the correct way to handle it, plus dblatex(1) makes a much
-       better job.
-     * scaledwidth and align attributes have been added to the image
-       macro. They apply to DocBook outputs (specifically for PDF
-       documents). scaledwidth sets the image size as a percent of the
-       available page width; align applies left, center or right
-       horizontal image justification.
-     * Added a2x(1) --fop-opts=FOP_OPTS option (patch submitted by Miklos
-       Vajna).
-     * Added a2x(1) --dblatex-opts=DBLATEX_OPTS option.
-     * Added Mikhail Yakshin’s FOP 0.95 patch which fixes a long-standing
-       fo.xsl problem and allows PDF’s to be generated with FOP 0.95
-       (previously had to use FOP 0.20.5).
-     * The User Guide has been updated and outdated FOP configuration and
-       installation sections removed.
-
-   Bug fixes
-     * Fixed stylesheets/xhtml11-manpage.css not being included when
-       linkcss attribute was used.
-     * Configuration file *-style attributes are now dumped correctly.
-     * Fixed FAILED: malformed section entry LaTeX backend error.
-
-   See the also the [151]AsciiDoc repository changelog.
-     __________________________________________________________________
-
-26. Version 8.2.6 (2008-04-29)
-
-   Additions and changes
-     * Enhancements to the Vim AsciiDoc syntax highlighter, for example,
-       quoted text is now highlighted in titles and macro captions.
-     * If you define the data-uri intrinsic attribute images referenced by
-       image macros will be embedded in XHTML using the [152]data: URI
-       scheme. NOTE: Microsoft browser support for the data: URI scheme is
-       currently limited to MSIE 8 beta 1.
-     * Added toc-title attribute to allow custom table of contents titles.
-     * Added references to Alex Efros’s AsciiDoc Cheatsheet to AsciiDoc
-       website.
-     * asciidoc(1) and a2x(1) man pages formatted to conform to
-       man-pages(7) recommendations.
-     * Old code-filter syntax (pre-8.1.0) is no longer recognized so that
-       malformed two-line level 2 titles are no longer confused with
-       code-filter block delimiters.
-     * Added → ← ⇒ ⇐ arrow replacements from the Arrows block of Unicode.
-     * Added DocBook refentry lang attribute — patch contributed by
-       VMiklos.
-     * AttributeEntry names can now be numeric (“named macro targets”).
-     * Hide Table of Contents title if Table of Contents empty — patch
-       contributed by Alex Efros.
-     * Various XHTML CSS tweaks.
-     * Code cleanup:
-          + Replaced realpath() with Python 2.2 os.path.realpath() library
-            function.
-          + Replaced old string library functions with string methods.
-          + Use file generators instead of readlines().
-          + Renamed entities that shadowed builtins.
-          + Standardized string quoting.
-          + Dropped readlines() function.
-
-   Bug fixes
-     * Fixed broken CSS for decimal ordered lists nested in alpha ordered
-       list, thanks to Alex Efros.
-     * A missing closing block delimiter now reports the opening delimiter
-       line number instead of the end of file line number.
-     * Fixed an error generated by the asciidoc -e option when there are
-       no block definitions — patch contributed by Alejandro Mery.
-     * Handle both \r\n (as well as \n) line separators that may be
-       returned by {sys} attribute evaluation.
-     * Numbered attribute names no longer interfere with positional
-       attribute list values.
-     __________________________________________________________________
-
-27. Version 8.2.5 (2007-11-18)
-
-   Bug fixes
-     * Fixed exception thrown by illegal command-line arguments.
-     * Rolled back the with warning bug fix introduced in 8.2.4 — it was
-       incompatible with Python <2.5.
-     __________________________________________________________________
-
-28. Version 8.2.4 (2007-11-10)
-
-   Additions and changes
-     * You can now use the lang attribute to set the DocBook language
-       attribute.
-     * Attribute values can now contain attribute references.
-     * If the lang attribute is defined then configuration files named
-       like lang-<lang>.conf will be loaded automatically.
-     * The help file name help-<lang>.conf is based on the AsciiDoc lang
-       attribute, defaults to help.conf (English).
-     * Admonition, figure and table captions have been factored into a
-       predefined set of caption_* attributes. They only apply to directly
-       generated (X)HTML outputs (DocBook stylesheets generate their own
-       language specific captions based on the lang attribute).
-     * Dropped platform dependent doc/asciidoc.chm file from distribution
-       documentation formats.
-
-   Bug fixes
-     * The spurious warning with will become a reserved keyword in Python
-       2.6 has been suppressed.
-     __________________________________________________________________
-
-29. Version 8.2.3 (2007-09-12)
-
-   Additions and changes
-     * Added VMiklos’s permalink patch for auto-generated section IDs
-       (enabled by default by the sectids attribute).
-     * Added [153]FAQ to website.
-     * Changed format of {localdate} attribute to ISO 8601 (%Y-%m-%d).
-     * Added abc2ly --beams=None option to make music2png.py conform to
-       ABC’s notion of beams.
-     * XHTML level 2 section headings are now styled with an underlining
-       border.
-     * XHTML links to AsciiDoc title elements are now implemented with
-       title ID attributes (previously separate <a> element targets were
-       generated.
-     * Multi-word first, middle and last names can be entered in the
-       header author line using the underscore as a word separator.
-     * The nested inline macros restriction has now been lifted, for
-       example you can now include links and inline images inside
-       footnotes.
-     * Help topic names can be shortened (so long as they are not
-       ambiguous). For example asciidoc -hm will print the AsciiDoc man
-       page.
-     * Added {two_colons} and {two_semicolons} attributes for escaping
-       labeled list ambiguity.
-     * If quirks mode is disabled the XHTML Mime Type is set to the
-       recommended application/xhtml+xml (rather than text/html).
-
-   Bug fixes
-     * Author information is now correctly set when using attribute
-       entries in the header instead of an author line (previously the
-       author attribute was not being calculated correctly and there were
-       attribute substitution problems).
-     __________________________________________________________________
-
-30. Version 8.2.2 (2007-07-22)
-
-   Additions and changes
-     * [154]LaTeXMathML capability has been added for users who are more
-       familiar with or prefer LaTeX math formulas to the [155]ASCIIMathML
-       notation (thanks to Arthur Sakellariou for the patch).
-     * The source highlight and code filters now process embedded
-       callouts.
-     * Added an --attribute=ATTRIBUTE option to a2x(1) for passing
-       attribute values to asciidoc(1) (a shortcut for --asciidoc-opts="-a
-       ATTRIBUTE").
-     * Image block and inline macros prepend optional {imagesdir}
-       attribute to image link targets.
-
-   Bug fixes
-     * Fixed an assertion error that occurred when a configuration file
-       containing an include::[] macro was loaded using the --conf-file
-       option and the configuration file name did not include an explicit
-       directory path — patch submitted by Dmitry Potapov.
-     * Asciidoc titles are only converted to lower case if all characters
-       are upper case otherwise case is left unchanged — patch submitted
-       by Dmitry Potapov.
-     * Added a missing check that input is not stdin before loading
-       configuration files from the document directory — patch submitted
-       by Dmitry Potapov.
-     * Attribute list items must evaluate to strings, numbers or None
-       (previously it was possible to evaluate to other object types which
-       resulted in surprising attribute values).
-     * If an AsciiDoc document has no title an empty XHTML 1.1 title
-       element is created — previously the title element was dropped which
-       resulted in invalid XHTML 1.1.
-     * The Vim syntax file no longer highlights escaped callouts.
-     * The Vim syntax highlighter now correctly highlights Double-dollar
-       passthroughs when they enclose dollar delimited ASCIIMathML and
-       LaTeXMathML formulas.
-     __________________________________________________________________
-
-31. Version 8.2.1 (2007-04-06)
-
-   Additions and changes
-     * A number of improvements have been made to the Vim syntax
-       highlighter, for example the word C++ is no longer mistaken for the
-       start of an unconstrained monospace quote.
-     * Labeled list definitions have been tightened — a list label can no
-       longer containing trailing spaces. The following example is no
-       longer recognized as a valid list label:
-
-        Lorum ipsum
-                This change implements the originally intended behavior
-                (as per the AsciiDoc documentation and examples) so there
-                should be very few compatibility issues.
-     __________________________________________________________________
-
-32. Version 8.2.0 (2007-04-04)
-
-   Additions and changes
-     * A Vim syntax file is now included in the AsciiDoc distribution
-       (inspired by Felix Obenhuber’s asciidoc.vim script). You can find
-       it (along with a Vim filetype detection script in the distribution
-       ./vim/ directory (the scripts are installed automatically by the
-       AsciiDoc installer ./install.sh). See Appendix J of the AsciiDoc
-       User Guide for details.
-     * Added toclevel attribute (1..4) which sets the number of title
-       levels reported in the table of contents. Defaults to 2 and must be
-       used with the toc attribute. Example usage:
-  $ asciidoc -a toc -a toclevels=3 doc/asciidoc.txt
-     * Added a listindex attribute which is the current list item index
-       (1..). If this attribute appears outside a list its value is the
-       number of items in the most recently closed list.
-     * The single line titles syntax now accepts trailing suffixes — this
-       syntax matches the title line syntax of a number of popular Wiki
-       markups.
-     * If a QuoteBlock has no attribution or citetitle then the DocBook
-       <attribution> element is not generated (previously generated empty
-       <attribution> element).
-     * If the text of a labeled list item is blank then no texttag is
-       written.
-     * An end of line backslash performs line continuation for horizontal
-       labeled list items.
-     * The Revision line now accommodates Subversion $Id markers (in
-       addition to CVS and RCS markers). Thanks to Tiago Sturmer Daitx for
-       this patch.
-     * Implemented a2x(1) option --skip-asciidoc which allows a2x(1) to
-       convert DocBook XML files not derived from AsciiDoc sources.
-     * If a2x(1) --doctype option is not specified it defaults to manpage
-       if --format=manpage else defaults to article (previously --doctype
-       always defaulted to article).
-     * Added an External Resources section to the [156]AsciiDoc home page.
-     __________________________________________________________________
-
-33. Version 8.1.0 (2006-10-22)
-
-   Additions and changes
-     * AsciiDoc generated XHTML documents now display a table of contents
-       if the toc attribute is defined (JavaScript needs to be enabled for
-       this to work). Thanks to Troy Hanson who contributed this feature
-       based on a JavaScript by Mihai Bazon. I’ve simplified things
-       somewhat to match Docbook XSL Stylesheets style, see Troy’s
-       [157]tpl User Guide for a fancier layout. Use the -a toc -a
-       numbered command-line options to produce a number table of
-       contents.
-     * A [158]music filter is included in the distribution ./filters/
-       directory. It translates music in [159]LilyPond or [160]ABC
-       notation to standard classical notation in the form of a trimmed
-       PNG image which is inserted into the AsciiDoc output document.
-     * Incorporated Paul Melis’s Win32 filter patch. This workaround
-       allows AsciiDoc to run filters under Windows.
-     * Added uninstall.sh script.
-     * Rather than proliferate a confusing number of filter block
-       delimiters the following convention has been adopted: delimiters
-       belonging to DelimitedBlock filters distributed with AsciiDoc will
-       consist of a word (normally a noun identifying the block content)
-       followed by four or more tilde characters. This has necessitated
-       changing existing filter delimiters (the old delimiters still work
-       but may be deprecated in future versions):
-          + The example code filter block delimiter is now the word code
-            followed by four or more tilde characters.
-          + The source highlight filter block delimiter is now the word
-            source followed by four or more tilde characters.
-     * Conditionally redefined subscript and superscripting so they use
-       the old replacements mechanism when asciidoc7compatible is defined
-       rather than the asciidoc 8 default unconstrained quoting (patch for
-       affected files attached).
-     * Moved the source highlight filter from ./examples/ to ./filter/.
-     * Added {verbose} intrinsic attribute (useful for passing verbose
-       flag to filters).
-     * Added {outdir} intrinsic attribute.
-     * Renamed {docdir} intrinsic attribute to unambiguous {indir}
-       ({docdir} still works but may be removed in future release).
-     * If asciidoc(1) outputs to stdout then intrinsic attribute {docname}
-       is extracted from the input file name.
-     __________________________________________________________________
-
-34. Version 8.0.0 (2006-08-27)
-
-   This is a major release because changes to quoting and index entry
-   handling may break existing documents (see Additions and changes below
-   and Appendix A: Migration Notes in the AsciiDoc User Guide).
-
-   Please report any problems you encounter.
-
-   [161]Stuart Rackham
-
-   Additions and changes
-     * Quoting can can occur within words (based on patch submitted by
-       Benjamin Klum). See the Unconstrained Quotes sub-section in the
-       User Guide.
-     * The underline and plus characters can be used as alternatives to
-       the existing apostrophe and backtick quote characters. They are
-       arguably better choices than the apostrophe and backtick as they
-       are not confused with punctuation.
-     * The syntax for index entry macros have have been deprecated from
-       +...+ and ++...++ to ((...)) and (((...))) respectively. Rationale:
-          + Bracketing is consistent other with [[...]] and <<...>>
-            reference macros.
-          + To easily confused with triple plus passthroughs.
-          + To make way for the new monospace quoting.
-     * Superscripts and subscripts are implemented as constrained quotes
-       so they can now be escaped with a leading backslash and prefixed
-       with with an attribute list.
-     * An experimental LaTeX backend has been written by Benjamin Klum (a
-       number additions in this release are to accommodate the LaTeX
-       backend).
-     * include macro file names now expand environment variables and tilde
-       expansions.
-     * A configuration file [quotes] entry can be undefined by setting to
-       a blank value.
-     * Added callto inline macro for Skype callto links.
-     * Added colnumber attribute for table data markup.
-     * A leading comment block or comment lines are now skipped
-       (previously a document had to start with either attribute entries
-       or a document Title).
-     * Experimental rows attribute (number of source lines in table)
-       available in table markup templates (used by experimental LaTeX
-       backend).
-     * Included install shell script written by [162]Jacob Mandelson for
-       installing the tarball distribution.
-     * Added INSTALL documentation file.
-     * Added replacements2 substitution options — a second replacements
-       section.
-     * Added the ability to redefine normal and verbatim substitutions
-       with subsnormal and subsverbatim entries in configuration file
-       [miscellaneous] section.
-     * By default AttributeEntry values are substituted for
-       specialcharacters and attributes, if you want a different
-       AttributeEntry substitution set the attributeentry-subs attribute.
-     * The name in name=value configuration file entries can now end with
-       a backslash, just escape the trailing backslash with a backslash.
-       For example:
-  abc\\=xyz
-       Results in name=abc\ and value=xyz —  previously this would have
-       escaped the = character.
-     * A blank configuration file section deletes any preceding section
-       with the same name (applies to non-markup template sections).
-     * A command-line attribute value with a @ suffix does not override
-       existing document and configuration file attributes (normally
-       command-line attributes have precedence over document and
-       configuration file attributes).
-     * localtime attribute is now encoded from the native system encoding
-       to the output encoding. Patch submitted by [163]FKtPp — here’s his
-       description of the problem:
-       “I am a Chinese user of AsciiDoc and I find that when I use UTF-8
-       (the default encoding) to write asciidoc documents in Windows
-       platform the resulting html footer line will get screwed. It was
-       caused by a localized tzname that was always encoded in the windows
-       native encoding, which in my case is cp936.”
-     * a2x(1) can generate Open Document Text files using
-       [164]docbook2odf. Currently docbook2odf(1) only processes a subset
-       of DocBook, unimplemented elements are skipped.
-     * The a2x(1) format option defaults to xhtml (previously a format had
-       to be specified explicitly).
-     * The -d, \--doctype=DOCTYPE option has been added to a2x(1) which is
-       a shortcut for --asciidoc-options="--doctype=DOCTYPE".
-     * Replaced a2x(1) --no-icons and --no-copy options with their negated
-       equivalents: --icons and --copy respectively. The default behavior
-       has also changed: copying and use of icons is disabled by default.
-       Rationale:
-          + To make the default behavior more consistent since use of
-            icons and CSS stylesheets does not apply to all formats.
-          + To make the default behavior less surprising (the creation of
-            icon and stylesheet output files must now be explicit).
-     * a2x(1) has been bumped from version 0.1.1 to version 1.0.0.
-
-   Bug fixes
-     * Removed duplicate ./doc/a2x.1.txt from distribution tarball.
-     * Documentation errata.
-     * Attribute replacement is no longer performed twice in Titles and
-       AttributeEntrys.
-     * a2x(1) skipped asciidoc(1) execution when rerun with different
-       --asciidoc-options options, it now always executes asciidoc(1). The
-       problem was that previously asciidoc(1) was executed only if the
-       output file was missing or older than the source file.
-     __________________________________________________________________
-
-35. Version 7.1.2 (2006-03-07)
-
-   Additions and changes
-     * Support for [165]ASCIIMathML has been added. See Appendix I:
-       ASCIIMathML Support in the User Guide and the examples at
-       [166]http://www.methods.co.nz/asciidoc/asciimath.html.
-     * You can now prefix quoted text with inline attributes lists. You
-       can use this to set font size and color (XHTML and HTML outputs).
-     * Added ##...## quoting — it does nothing — it’s purpose is to allow
-       inline attributes to be applied to normal text.
-     * An inline passthrough mechanism has been implemented.
-     * Configuration file comment lines can be escaped with a backslash —
-       this is to allows the inclusion of configuration lines that start
-       with a hash character.
-     * The scriptsdir attribute can be used to specify the name of the
-       directory containing linked JavaScripts (see the [167]User Guide
-       for details.
-     * The BackendBlock has been renamed PassthroughBlock for consistency
-       with the new inline passthrough naming.
-     * a2x(1) now works with the older bash(1) version 2.05b. Patch
-       submitted by [168]Francis Daly.
-     * Content included by the include1::[] system macro is no longer
-       subject to attribute substitution so that ambiguities no longer
-       arise when used to include CSS or JavaScript files.
-     __________________________________________________________________
-
-36. Version 7.1.1 (2006-02-24)
-
-   Additions and changes
-     * The caption attribute can be used to customize admonition captions
-       as well as image, table and example block element title prefixes
-       (xhtml11 and html4 backends).
-     * You can now override the default icon image using the icon
-       attribute to specify the path of the linked image (xhtml11 and
-       html4 backends only).
-     * The deprecated imagesdir attribute is no longer recognized (use
-       iconsdir instead).
-     * Added Appendix H: Using AsciiDoc with non-English Languages to the
-       AsciiDoc User Guide.
-     * Added Admonition Icons and Captions subsection to the User Guide
-       explaining how to customize Admonition elements.
-
-   Bug fixes
-     * a2x(1) failed when configuration files were installed in the global
-       /etc/asciidoc/ directory — it was only searching the directory
-       containing the asciidoc executable (thanks to Christian Wiese for
-       finding and submitting a patch this bug).
-     * The html4 backend admonition caption now correctly displays the
-       admonition caption attribute (previously displayed the style
-       attribute).
-     __________________________________________________________________
-
-37. Version 7.1.0 (2006-01-13)
-
-   Additions and changes
-     * a2x(1) toolchain wrapper utility. This overcomes the biggest hurdle
-       for new users which seems to be assembling and using a working
-       DocBook XML toolchain. With a2x(1) you can generate XHTML (chunked
-       and unchunked), PDF, man page, HTML Help and text file outputs from
-       an AsciiDoc input file with a single command. All you need to
-       install (in addition to AsciiDoc) is xsltproc(1), DocBook XSL
-       Stylesheets and optionally FOP (if you want PDF) or lynx(1) (if you
-       want text).
-     * Block titles can now start with any non-space character (previously
-       where not allowed to start with .~-_ characters).
-     * ./stylesheets/docbook.css renamed to ./stylesheets/docbook-xsl.css
-       to clarify its function.
-     * Renamed ./docbook-xsl/manpages.xsl to ./docbook-xsl/manpage.xsl for
-       consistency.
-     * Admonition and navigation icons moved to ./images/icons/ to clarify
-       usage and conform with a2x(1) usage.
-     * Renamed xhtml11 intrinsic attribute imagesdir to iconsdir to keep
-       vocab consistent and changed default value to ./images/icons
-       (previously ./images). imagesdir attribute still accepted but
-       deprecated.
-     * Unused image files have been weeded out of the distribution.
-     * Packager notes (appendix B) have been updated to reflect the needs
-       of a2x(1).
-
- Important
-          The renaming of the xhtml11 backend imagesdir intrinsic attribute and
-          it’s new default value introduces a backward compatibility issue: if
-          you use the icons attribute you will need to either move your icons to
-          the new default ./images/icons location or include an
-          --attribute{nbsp}iconsdir="your_icons_path" option in your asciidoc
-          commands.
-
-   Bug fixes
-     * Backslash line continuation is now observed in verbatim paragraphs.
-     * Fixed errors generated by example
-       ./examples/website/build-website.sh script.
-     __________________________________________________________________
-
-38. Version 7.0.4 (2005-12-08)
-
-   Additions and changes
-     * Added ternary conditional attributes
-       {<name>@<regexp>:<value1>[:<value2>]} and
-       {<name>$<regexp>:<value1>[:<value2>]}.
-     * Safety violations now generate errors (they previously generated
-       warnings).
-     * asciidoc(1) now defaults to safe mode, consequently the
-       [miscellaneous] safe mode entry and --safe command-line option are
-       no longer necessary (though for backward compatibility asciidoc(1)
-       still accepts the --safe option).
-     * Backend Blocks are now flagged unsafe (they could be used to
-       include arbitrary and hence potentially unsafe output content).
-     * Filters are no longer considered unsafe. There’s not much point in
-       insisting on filter safety since the installation of an unsafe
-       filter would require the introduction of new or modified
-       configuration files — if your application configurations can be
-       compromised you’re in all sorts of trouble (safe mode protects
-       against unsafe input files not unsafe configuration). As with all
-       filters, before installing, you should verify that they can’t be
-       coerced into generating malicious output or exposing sensitive
-       information.
-
-   Bug fixes
-     * Fixed a lot of glaring grammatical and factual errors in the User
-       Guide.
-     __________________________________________________________________
-
-39. Version 7.0.3 (2005-12-01)
-
-   Additions and changes
-     * Added --safe and --unsafe command-line options — AsciiDoc can now
-       be executed in a safe mode which disallows the execution of
-       arbitrary code or the inclusion of arbitrary files (see
-       [169]Appendix C in the AsciiDoc User Guide).
-     * Included [170]source-highlight filter in the distribution
-       ./examples/source-highlight-filter/ directory (based on filter
-       submitted by [171]Ryan Phillips).
-     * Included the DocBook XSL Stylesheets 1.69.1 customizations used to
-       generate the distributed AsciiDoc documentation (read the
-       asciidoc-docbook-xsl.txt file in the distribution ./docbook-xsl/
-       directory).
-     * AsciiDoc DocBook XSL Stylesheet drivers moved from ./doc/ to
-       ./docbook-xsl/.
-     * Modified ./doc/manpages.xsl so only URL content is displayed in
-       manpages.
-
-   Bug fixes
-     * Explicitly set table CSS border style (xhtml11 backend) to solid
-       because default border styles vary from browser to browser.
-     __________________________________________________________________
-
-40. Version 7.0.2 (2005-08-28)
-
-   Additions and changes
-     * There are now long versions of all AsciiDoc options.
-     * If the --backend is not specified it defaults to xhtml11.
-     * Added CSS simulated frames layout to the examples website (see
-       ./examples/website/layout2/README-website.txt). This layout does
-       not work with IE6 and the original tables based layout is still the
-       default.
-     * Support page added to AsciiDoc website.
-
-   Bug fixes
-     * Invalid options are now trapped gracefully.
-     * Documentation errata.
-     __________________________________________________________________
-
-41. Version 7.0.1 (2005-06-24)
-
-   Additions and changes
-     * Reverted to use of strong, em, tt XHTML tags — they’re more obvious
-       and no less correct than span tags, besides, the generated file
-       sizes are smaller (the User Guide was 11% smaller).
-     * Table title rendered with caption tag rather than a separate div.
-     * The AsciiDoc stylesdir attribute (if specified) is now recognized
-       when searching for embedded stylesheets (previously only searched
-       default ./stylesheets directory).
-     * Default charset encoding changed from ISO-8859-1 to UTF-8 — it’s
-       less language specific and displays most common languages.
-     * template::[] macros now expand in all configuration file sections
-       previously only in markup template sections.
-     * Cleaned up example website layout CSS and configuration
-       (presentation has not been changed).
-     * Refactored xhtml11.conf configuration file.
-     * Set consistent and sensible permissions on distributed files.
-     * White space is now stripped from DSV formatted table cell data.
-     * class="tableblock" attribute added to tables generated by
-       xhtml-deprecated-css.conf to assist CSS.
-
-   Bug fixes
-     * Illegal character set encoder (specified by the AsciiDoc encoding
-       attribute) and character data are trapped gracefully.
-     * AsciiDoc table format attribute in table attribute lists were not
-       recognized.
-     * The nested horizontal labeled list example in the AsciiDoc User
-       Guide has been dropped — it generated invalid DocBook markup.
-     __________________________________________________________________
-
-42. Version 7.0.0 (2005-06-06)
-
-   This is a major release with many code and documentation changes.
-   Please report any problems you encounter.
-
-   [172]Stuart Rackham
-
-   Additions and changes
-     * A new xhtml11 backend generates XHTML 1.1 with integrated CSS2
-       replacing the previous xhtml, css, and css-embedded backends.
-     * The CSS stylesheets have finally been rewritten.
-     * The asciidoc(1) command help now includes user [173]customizable
-       help topics. When asciidoc is invoked with the --help option the
-       command argument is interpreted as a help topic.
-     * The previous example website has been replaced by the actual
-       AsciiDoc website (see ./examples/website/.
-     * XHTML generation options now controlled by the following
-       attributes: badges, linkcss, icons, numbered, quirks, theme,
-       stylesdir, imagesdir (see the [174]User Guide for details.
-     * By default HTML and XHTML are output as stand-alone documents (no
-       embedded CSS and no linked admonition icon images).
-     * Documents encoded with the UTF-8 Unicode character set are now
-       processed thanks to a patch supplied by [175]Viktor Vasilev.
-     * The -a ^name command-line syntax to undefine an attribute has been
-       deprecated in favor of the -a name! syntax.
-     * AttributeEntry syntax addition: :name!: to undefine name attribute.
-     * Added template system block macro to allow the inclusion of one
-       configuration file template section within another.
-     * A verse style attribute can now be applied to literal paragraphs
-       and blocks to reproduce line breaks and white space from the source
-       document.
-     * Replacements and Special Words can now be escaped with leading
-       backslashes.
-     * Replacements are now processed in configuration file order
-       (previous ordering was indeterminate).
-     * System macros can now be used in the base asciidoc.conf
-       configuration file.
-     * Deprecated features that emitted warnings in prior versions are no
-       longer tolerated.
-     * The eval system attribute expression evaluates to False the
-       attribute is undefined, if it evaluates to True the result is an
-       empty string.
-     * The Paragraph and DelimitedBlock presubs parameter can be aliased
-       as subs.
-     * Added verbatim substitutions option.
-     * Renamed List Continuation Block to List Block and renamed the
-       listcontinuation option to list.
-     * Deprecated default substitutions option (use normal instead).
-     * The section-numbers section numbering attribute has be renamed
-       numbered.
-     * Dropped the #UNDER CONSTRUCTION# block macro.
-     * Rewrote Paragraph and DelimitedBlock handlers adding a [176]styles
-       configuration entry.
-
-   Bug fixes
-     * Included files are no longer read inside conditionally excluded
-       content.
-     * Manpage command names containing dashes (in the manpage NAME
-       section) were misinterpreted as the spaced dash command
-       name/purpose separator. Bug report and patch supplied by [177]David
-       Greaves.
-     * Unexpected error following malformed author line error.
-     __________________________________________________________________
-
-43. Version 6.0.3 (2005-04-20)
-
-   Additions and changes
-     * Special characters are now substituted in AttributeEntry element
-       values.
-     * Spaced and unspaced em dashes are now recognized (previously only
-       spaced em dashes were recognized).
-     * Replaced the table noborders option with richer frame and grid
-       attributes.
-     * The duplicate macro warning message now only occurs when the
-       verbose (-v) option is enabled.
-     * Single lines starting with two forward slashes hard up against the
-       left margin are treated as comments and are not processed.
-     * Renamed section delimited block option to sectionbody to more
-       accurately reflect it’s role.
-     * Added a List Continuation block — a specialized delimited block
-       that is functionally equivalent to the List Item Continuation
-       feature except that the list contained within the block does not
-       require explicit + list item continuation lines.
-     * Dropped deprecated <u> tags from generated HTML.
-     * Literal Block delimiters must now consist of at least four points
-       (previously three) to avoid lone ellipsis ambiguity.
-
-   Bug fixes
-     * Some system attribute evaluation failures caused unexpected
-       exceptions to occur.
-     __________________________________________________________________
-
-44. Version 6.0.2 (2005-03-30)
-
-   Additions and changes
-     * Three new system block macros have been added — eval, sys and sys2
-       which are the block macro equivalents to the same named system
-       attributes.
-     * Intrinsic macros have been renamed system macros along with action
-       attributes which have been renamed system attributes:
-          + To reflect their common (though contextually different)
-            behavior.
-          + To avoid confusion with intrinsic attributes.
-
-   Bug fixes
-     * Asciidoc now searches in /etc/asciidoc/filters for filters.
-     __________________________________________________________________
-
-45. Version 6.0.1 (2005-03-06)
-
-   Additions and changes
-     * A global configuration file location /etc/asciidoc has been added
-       and is now processed before all other locations (patch supplied by
-       [178]Fredrik Steen).
-     * Recoded tempfile.mktemp() and other artifacts that are no longer
-       necessary or desirable (patches supplied by [179]Fredrik Steen).
-     * Added BUGS file to the distribution.
-
-   Bug fixes
-     * Illegal comment syntax in css-embedded-stylesheet.conf resulted in
-       illegal CSS in files generated by the css-embedded backend.
-     __________________________________________________________________
-
-46. Version 6.0.0 (2005-01-28)
-
-   This release has had some fairly major code and documentation changes.
-   Please report any problems you encounter.
-
-   [180]Stuart Rackham
-
-   A lot of new stuff. A new major version number — some regression
-   incompatibility (hopefully mitigated by deprecated warnings).
-
-   Went mad trying to rein in the current feature anarchy — established a
-   unified notion of document attributes. Attempted to introduce a
-   consistent vocabulary — renamed many poorly or inconsistently named
-   entities.
-
-   Actually, deprecated syntax is still processed correctly in almost all
-   cases. One source of incompatibility that may arise if you have
-   customized CSS stylesheets is the change of AsciiDoc CSS class names
-   (see below). I guess the moral is if you’ve done a lot of configuration
-   file customization and are happy with version 5 then you may want to
-   stay put.
-
-   Note
-       This version requires Python 2.3 or better to run.
-
-   Additions and changes
-     * Glossary entries have been renamed attributes. This eliminates
-       confusion with the accepted meaning of glossary.
-     * An AttributeEntry block element has been added so that document
-       attributes can be assigned from within an AsciiDoc document.
-     * The AttributeList block element has been added which is a more
-       general solution than the (now deprecated) DelimitedBlock
-       arguments.
-     * An BlockId element has been added for setting block element anchor
-       (link target) IDs.
-     * Quoted text can now span multiple lines (thanks to James Bowlin for
-       this patch).
-     * Inline macros can now span multiple lines.
-     * ‘`double backtick / apostrophe’' quotes generate “curly quotes”.
-     * A warning is now emitted for out of order list item (applies to
-       explicitly enumerated numbered list items).
-     * Added include action attribute.
-     * A line of three or more apostrophes generates an HTML horizontal
-       ruler (<hr/> tag). You will get a warning if processed with
-       non-HTML backend.
-     * An {imagesdir} attribute specifies image file location for images
-       referenced in configuration files when generating HTML (the default
-       location is images).
-     * An {stylesdir} attribute specifies the location of CSS stylesheets
-       when generating styled HTML (the default location for configured
-       markup is .).
-     * The use of the (often inappropriately named) {caption} attribute
-       list entry has been deprecated, use {0} instead.
-     * New ExampleBlock delimited block along with associated variants
-       Note, Tip, Warning, Caution and Important.
-     * The docbook.conf file now facilitates the optional inclusion of a
-       DocBook revision history file.
-     * To better reflect their purpose the following block elements have
-       been renamed: VerbatimBlock to ListingBlock; IndentedBlock to
-       LiteralBlock; IndentedParagraph to LiteralParagraph; CustomBlock to
-       BackendBlock; SimpleSection to SectionBody. Any corresponding CSS
-       class names have also been changed which could result in backward
-       incompatibility in customized stylesheets.
-     * Swapped plain DocBook admonition icons for Jimmac’s DocBook icons
-       ([181]http://jimmac.musichall.cz/ikony.php3). The original plain
-       icons have been moved to ./images/plain.
-     * Renamed html backend to xhtml to better reflect it’s function
-       (former html-4 backend renamed to html).
-     * A new inline anchor macro syntax [[[<id>]]] is available, it
-       displays [<id>] at the anchor location and is for anchoring
-       bibliography list entries.
-     * An optional single-line titles syntax can be used.
-     * Tweaks to distributed CSS stylesheets and FOP fo.xsl customization
-       file.
-     * List Item Continuation has been implemented which allows additional
-       block elements to be included in list items by separating them from
-       the preceding list item element with a line containing a single
-       plus character.
-     * A new Horizontal Labeled List list type has been added. Generates
-       two column list — the first column contains the list element
-       labels, the second contains the element text. Same syntax as
-       Vertical Labeled Lists except the double colon label suffix is
-       followed by the start of the list item text.
-
-   Bug fixes
-     * Fixed broken backslash line continuation.
-     * Labeled list end tags were not undergoing attribute substitution.
-     * Documents without any author information now generate legitimate
-       DocBook (previously if the author line was not included in the
-       document header then an empty (illegal) DocBook author element was
-       generated).
-     * Multiple spaces in filter command arguments were replaced by a
-       single space. The ./examples/asciidoc2text/asciidoc2text.sh script
-       now indents text correctly.
-     __________________________________________________________________
-
-47. Version 5.1.1 (2004-10-10)
-
-   15-December-2004: Interim update: Updated asciidoc.py to fix broken
-   join_lines function — no other changes.
-     * PDF documentation is now produced from DocBook XML using XSLTLib
-       and FOP. Previously we processed DocBook SGML with jw(1) (which
-       used Dvips to convert DVI files to PDF). FOP has come a long way in
-       the last 12 months and produces very acceptable PDF under both
-       Linux and Windows.
-     * Sections detailing how to install and use the DocBook XSL
-       Stylesheets, xsltproc, FOP toolchain and the AsciiDoc XSLT drivers
-       have been added to the User Guide.
-     * The PDF output from the he example article template has been
-       included in the distribution (./doc/article.pdf).
-     * Special characters are emitted using decimal Unicode character
-       codes (previously used named character entities which cannot be
-       assumed included in non-HTML documents).
-     * Added registered trademark ® to [replacements].
-     * CSS stylesheet tweaks.
-     * Admonitions (Note, Tip, Important, Warning, Caution) include icons
-       when generating css output.
-     __________________________________________________________________
-
-48. Version 5.1.0 (2004-09-18)
-
-     * Callouts have been implemented (see the Callouts section of the
-       AsciiDoc User Guide for details).
-     * Added XSL drivers for generating XHTML, chunked XHTML and HTML Help
-       from DocBook XML using XSL stylesheets and xsltproc(1).
-     * Added CSS stylesheet for HTML generated from DocBook XML using XSL
-       stylesheets.
-     * Distribution contains HTML Help formatted User Guide
-       (./doc/asciidoc.chm), the User Guide tells you how it’s generated.
-     * Images referred to by distributed stylesheets are now located in
-       the ./images subdirectory (previously located in .).
-     * Filters path names are now handled properly under Cygwin.
-     * The usual documentation and examples additions, updates and
-       polishing.
-     __________________________________________________________________
-
-49. Version 5.0.9 (2004-09-09)
-
-     * The convention of using a .asc file extension for AsciiDoc files
-       has been dropped in favor of the familiar .txt extension. It makes
-       more sense in that AsciiDoc is a text presentation format and
-       because .asc clashed with the same extension used by other
-       applications. It’s only a naming convention — you don’t have to
-       switch if you don’t want to.
-     * Changed the subscript formatting character from underline to tilde
-       since underscores in file names are reasonably common (especially
-       in link and image macros).
-     * An alternative syntax for the index term inline macro has been
-       added: ++<primary>,<secondary>,<tertiary>++.
-     * Index terms that have secondary and tertiary entries now
-       additionally generate separate index terms for the secondary and
-       tertiary entries.
-     * A +<primary>+ index term inline macro has been added which displays
-       the term in the primary text flow.
-     * Added alternative variable list definition using double semi-colon
-       terminator as opposed to the standard double colon terminator so
-       variable lists can be nested to two levels.
-     * Footnotes now appear on a separate line in HTML and Linuxdoc
-       outputs.
-     * Python version compatibility is checked at startup.
-     * Preface and appendix section titles in multi-part Book documents
-       are meant to be out of sequence — warnings are no longer emitted
-       when outputting HTML.
-     * Empty section warnings have been replaced by error messages and are
-       emitted only if invalid markup would result.
-     * Missing macro sections or invalid macro name warnings are only
-       generated at startup if the -v (verbose) option is set. Otherwise
-       they are deferred until a matching macro is encountered in the
-       input file.
-     * Missing or invalid table definition warnings are only generated at
-       startup if the -v (verbose) option is set. Otherwise they are
-       deferred until a matching table is encountered in the input file.
-     * AsciiDoc now makes more of an effort to continue in the face of
-       errors.
-     * Fixed broken ./examples/website/main.aap script.
-     * Converted distribution text files DOS text format as a sop to
-       Windows users with challenged text editors.
-     * Documentation additions and corrections.
-     __________________________________________________________________
-
-50. Version 5.0.8 (2004-05-15)
-
-     * Spurious out of sequence level 2 warnings no longer appear when
-       processing book document multi-part book top level Preface and
-       Appendix sub-sections since they are (correctly) out of sequence.
-     * A warning is no longer emitted for empty Index sections since this
-       is normal when generating DocBook outputs.
-     * Fixed: [quotes] configuration file entries where not being
-       overridden by downstream configuration file entries.
-     * Footnote text is now output enclosed in square brackets in HTML
-       documents.
-     * Added superscripts and subscripts to the standard PRS configuration
-       files.
-     * Adjusted CSS stylesheets so list titles don’t have so much space
-       between title and first list item (broken in IE6 due to poor CSS
-       compliance). Lessened sidebar title top margin.
-     __________________________________________________________________
-
-51. Version 5.0.7 (2004-04-22)
-
-     * The version 5.0.6 README incorrectly stated that AsciiDoc would run
-       under Python 2.0, in fact it requires Python 2.1 or better. The
-       README has been corrected.
-     * Documented techniques for combining and splitting AsciiDoc
-       documents and processing the combined and split parts (see the Tips
-       and Tricks section of the User Guide).
-     * An example of marking up superscripts and subscripts is documented
-       in the Tips and Tricks section of the User Guide (the example
-       configuration file is in the AsciiDoc examples directory).
-     * Added ellipsis to shipped [replacements]; three periods output an
-       ellipsis entity.
-     * Removed unused SectionClose class.
-     * The AsciiDoc Preamble element is output as a DocBook Preface when
-       processed as a book document type (in older AsciiDoc versions a
-       warning was issued and processing stopped).
-     * Fixed a quoting anomaly: quoted text can no longer begin or end
-       with with white space.
-     __________________________________________________________________
-
-52. Version 5.0.6 (2004-03-07)
-
-     * New image macro implements optional image scaling and linking and
-       works in both inline and block contexts. The image macro obsolesces
-       the existing graphic block macro and icon inline macro.
-     * Macro substitution section names now have -inlinemacro and
-       -blockmacro suffixes to resolve context ambiguity, make their
-       purpose clearer and relieve section namespace congestion.
-     * Header derived glossary entries can now be overridden from the
-       command-line.
-     * Special character substitution is now performed on AuthorLine
-       derived author names.
-     * A macro or block argument called options can be used as a shortcut
-       for a list named arguments with zero length string values.
-     * Tables can be output without borders using the options="noborders"
-       argument.
-     * Table data lines that do not immediately follow a table section
-       underline can now be blank. This allows CSV data with embedded
-       blank lines to be processed correctly.
-     * Blank DSV format table data lines are silently skipped.
-     * Tightened up on enforcement of configuration file section names to
-       reduce the possibility of section content being seen as a section
-       header line.
-     * Section titles can be optionally suffixed with title arguments
-       enclosed in double square brackets.
-     * A replacement has been added to asciidoc.conf to replace inline
-       double dashes with the — entity.
-     * Changed the .UNDER-CONSTRUCTION. macro syntax to
-       #UNDER-CONSTRUCTION# so it is not mistaken for a BlockTitle.
-       Similarly changed the .NEW. replacement with #NEW#.
-     * #NEW# and #UNDER-CONSTRUCTION# macros are now included in
-       the DocBook backend.
-     * Replaced shipped smallnew.gif with smallnew.png.
-     * Documentation tidy ups.
-     __________________________________________________________________
-
-53. Version 5.0.5 (2004-02-25)
-
-     * Fixed the disappearing paragraph titles problem that was caused by
-       Inline macros (incorrectly) processing BlockTitles.
-     * Tightened AuthorLine validation. Previously invalid email addresses
-       and embedded special characters in the AuthorLine resulted in
-       invalid output markup.
-     __________________________________________________________________
-
-54. Version 5.0.4 (2004-02-09)
-
-     * Reinstated missing infile, outfile, filetype and
-       filetype-<filetype> glossary entries.
-     * As of version 5.0.3 asciidoc(1) now requires Python 2.0 or greater,
-       this has now been documented.
-     __________________________________________________________________
-
-55. Version 5.0.3 (2004-01-23)
-
-     * Fixed problem that caused any filters directory file containing
-       .conf (not just those with the .conf extension) from being loaded.
-     * All [miscellaneous] configuration file entries can now be
-       referenced like glossary entries (they are now processed internally
-       as glossary entries).
-     * The output file line terminator (previously hardwired to \r\n is
-       now set using the newline entry in the configuration file
-       [miscellaneous] section.
-     * The misspelt blocktitles configuration file entry name has been
-       corrected (to blocktitle).
-     * An {empty} glossary entry has been added to the default
-       configuration which is useful for outputting trailing blank lines
-       from configuration file substitution sections.
-     __________________________________________________________________
-
-56. Version 5.0.2 (2003-12-18)
-
-     * New (alternative) anchor and xref macro syntax (old syntax still
-       valid).
-     * DocBook mediaobject and inlinemediaobject tags are generated in
-       place of graphic and inlinegraphic tags by the AsciiDoc graphic and
-       icon macros. If a macro argument is specified it is the alternative
-       text output if the target document format does not support the
-       specified graphic file format.
-     * Dropped the LinuxDoc left and right square bracket special
-       character substitutions as they interfered with macro substitution.
-     * Documentation updates and corrections.
-     __________________________________________________________________
-
-57. Version 5.0.1 (2003-12-09)
-
-     * Fixed problem with anchor tag when generating CSS styled HTML.
-     __________________________________________________________________
-
-58. Version 5.0 (2003-12-08)
-
-   This release has had some fairly major code and documentation changes.
-   Please report any problems you encounter.
-
-   [182]Stuart Rackham
-
-     * AsciiDoc can now produce a full-blown multi-part DocBook book
-       including dedication, abstract, preface, colophon, glossary,
-       appendix, bibliography and book part elements using the new
-       specialsections configuration file section.
-     * All Section element children (Paragraph, DelimitedBlock, List,
-       Table, BlockMacro) can now be titled using the BlockTitle element.
-       A BlockTitle element is a single line containing a title and
-       beginning with a period.
-     * The index and backmatter macros have been dropped, superseded by
-       specialsections.
-     * The AsciiDoc Preface element has been renamed Preamble (to avoid
-       confusion with the DocBook book preface element).
-     * Out of sequence titles are now tolerated with a warning. This
-       allows book document level 0 sections to be processed.
-     * An anchor inline macro has been added for document link target
-       creation.
-     * Note, Tip, Important and Warning paragraph types have been added to
-       support the corresponding DocBook elements.
-     * Title substitution is now performed in SidebarBlock titles.
-     * DocBook graphics now output as figure and informalfigure elements
-       rather than mediaobjects. This ensures numbered figures and a lists
-       of figures are produced by the DocBook toolchain.
-     * You can now escape block argument lines by appending a backslash.
-       Alternatively, if you embed arguments in the delimiter line
-       AsciiDoc does not check for an arguments line.
-     * The default DocBook backend file extension has been changed from
-       .docbook to .xml (.sgml for the docbook-sgml backend).
-     * Warnings are output by default (previously they only printed when
-       verbose option enabled).
-     * A Question and Answer variable list definition has been added to
-       the shipped configuration files, primarily to create DocBook qanda
-       DocBook elements.
-     * Fixed broken code-filter -b linuxdoc option. The asciidoc.asc User
-       Guide can now be processed by linuxdoc(1) (although tables are
-       dropped because LinuxDoc does not implement tables).
-
-   Compatibility issues:
-    1. Table titles are no longer in the arguments line, use the new
-       BlockTitles.
-    2. Graphic titles are no longer in the graphic block macro caption,
-       use the new BlockTitles.
-    3. The code-filter title must be placed in a preceding BlockTitle.
-    4. SidebarBlock titles must be placed in a preceding BlockTitle.
-    5. The DelimitedBlock option sidebar has been renamed to section.
-    6. The default DocBook backend file extension has been changed from
-       .docbook to .xml (.sgml for the docbook-sgml backend).
-     __________________________________________________________________
-
-59. Version 4.2 (2003-11-26)
-
-     * The default HTML output is now XHTML 1.0 markup. To output the
-       former HTML 4 markup specify the html-4 backend.
-     * The default DocBook output is now DocBook XML. To output the former
-       DocBook SGML specify the docbook-sgml backend. The associated
-       docbook-sgml.conf file illustrates how to support minor DTD
-       variations. Examples of using the xmlto(1) command for DocBook
-       conversion have been added to the User Guide.
-     * Glossary entries set using the command-line -g option can now be
-       referenced in configuration files.
-     * Configuration dumps (-c command-line option) no longer output
-       redundant undefined glossary entries.
-     * DelimitedBlock arguments can now be specified in a separate
-       arguments line immediately following the leading delimiter line,
-       This is in preference to the existing delimiter embedded arguments.
-       Reasons:
-          + The syntax is in keeping with the Tables arguments syntax.
-          + It’s easier to enter and implements line continuation.
-     * A new QuoteBlock DelimitedBlock definition has been added to the
-       distribution configuration files.
-     * The table arguments lines can be continued using the backslash line
-       continuation character.
-     * Added new calculated glossary reference type {<name>%<value>}.
-     * Double-quote characters can now appear in unquoted positional
-       arguments.
-     __________________________________________________________________
-
-60. Version 4.1 (2003-11-13)
-
-     * Added DSV (Delimiter Separated Values) tables format.
-     * {eval:<expr>} glossary references drop the containing line if
-       <expr> evaluates to None.
-     * Block, Table and Macro arguments can now be positional (quoted or
-       unquoted).
-     * Vocabulary change: DelimitedBlock, Table and Macro attributes are
-       now referred to as arguments. This makes more sense in light of the
-       extended syntax and avoids confusion with backend markup tag
-       attributes.
-     * tablewidth table ruler parameter can now be expressed in percent
-       units (0..100). If between 0 and 1 then the original fractional
-       unit measure is applied.
-     * The use of quoting for generating footnotes and index entries has
-       been dropped in favor of footnote and indexterm inline macros.
-     * backmatter inline macro included in distribution.
-     * Fixed: CSS styled HTML tables are now fully XHTML 1.0 conformant.
-     * Fixed: tablewidth was processed incorrectly when passed as table
-       argument.
-     * Fixed: Glossary references like {x=\{y}} were one character off if
-       {x] was defined and {y} was not.
-     __________________________________________________________________
-
-61. Version 4.0 (2003-11-08)
-
-   This release has had some fairly major code and documentation changes.
-   Please report any problems you encounter.
-
-   Stuart Rackham
-
-     * Added tables to AsciiDoc.
-     * Added two special subs options: default specifies the default
-       substitution options and none specifies no substitution. These
-       options can only appear singly.
-     * Line continuation using a trailing backslash character is available
-       in Paragraphs, ListItems, Tables.
-     * The left and right quotes for quoted text can now be specified
-       separately.
-     * Shipped configuration files implement footnotes (only useful for
-       DocBook output) using \[[]] quoting.
-     * Shipped configuration files implement index terms (only useful for
-       DocBook and LinuxDoc output) using \(()) quoting.
-     * The shipped html backend configuration now emits valid HTML 4.01
-       Transitional.
-     * Added new calculated glossary reference types {<name>!<value>} and
-       {<name>#<value>}.
-     * The DelimitedBlock params option has been dropped in favor of the
-       new block attributes mechanism. If you have customized block params
-       options you may need to adjust source files to use the block
-       attributes syntax. The example code filter has been updated to
-       reflect these changes.
-     * The code filter now has a -t tabsize option.
-     * Replaced -w option with -v (verbose) option. The warnings option
-       was just to confusing.
-     * Named attributes can now be specified in macro calls.
-     * The tabsize attribute is recognized in the built-in include macros.
-       A tabsize of zero suppresses tab expansion.
-     * The configuration file [options] section has been split into
-       [miscellaneous] and [titles]. If you have customized any of these
-       settings you will need to adjust the affected configuration files.
-     * Configuration file [miscellaneous] entries can now also be set
-       using the command-line -g option.
-     * Fixed: error that occurred when attempting to use zero length
-       configuration and source files.
-     * Fixed: blocking filter halt problem.
-     * Fixed: inline macro escape prefix problem.
-     * Fixed: missing macros from configuration dump problem.
-     * Fixed: named macros were dumped incorrectly.
-     * Many documentation changes/additions/corrections.
-     __________________________________________________________________
-
-62. Version 3.2.2 (2003-10-26)
-
-     * Added -n option (synonym for -g section-numbers).
-     * Dropped the processing commentary (hey, this is Unix).
-     * Added new calculated glossary reference type {<name>?<value>}.
-       <name> is the glossary entry name and <value> is the text
-       substituted if the glossary entry is defined. <value> can only
-       contain literal text (no glossary references allowed).
-     * Added asciidoc2text to distribution examples/asciidoc2text
-       directory (converts AsciiDoc source to text file with section
-       numbering).
-     * Fixed incorrect nesting of Simple lists inside Variable lists.
-     * List definitions have been modified so that list items can be
-       indented. This allows a more intuitive indentation of nested lists
-       in AsciiDoc source.
-     * Lists must be separated from preceding paragraphs by a blank line.
-       This is to avoid paragraph lines being mistaken for list items.
-     * Corrected asciidoc man page documentation error: the`-f` option
-       does not search relative to source document directory for the
-       configuration file.
-     * Minor updates to various distribution .conf files.
-     * Included badges.conf in examples directory.
-     * css-embedded-stylesheet.conf now supports footer badges.
-     * The default in-line element processing order has been changed:
-       Glossary References are now processed before Inline Macros. This
-       allows glossary expansions to occur inside macro references.
-     * Glossary entries are now allowed in Author and Revision lines.
-     * Default List subs options and Paragraph presubs options are
-       assigned the following default value if not specified:
-  specialcharacters,quotes,specialwords,replacements,glossary,macros
-     * Documentation changes/additions/corrections.
-     __________________________________________________________________
-
-63. Version 3.2 (2003-05-26)
-
-     * Added a -s command-line option to suppress the output of [header]
-       and [footer] sections.
-     * Article document headers are no longer mandatory: this allows
-       AsciiDoc to process arbitrary chunks of text. When used in
-       conjunction with the new -s command-line option corresponding
-       chunks of backend markup can be generated.
-     * AsciiDoc now emits a warning message and continues when an out of
-       sequence section title is detected (previously it failed and
-       halted). This allows document sections to be processed separately.
-     * Optional presubs and postsubs entries have been added to
-       DelimitedBlock and Paragraph definitions. As a consequence
-       substitution options are no longer legal in options entries.
-     * presubs and postsubs substitutions are processed in the order the
-       options are specified (rather than the fixed options order of
-       previous versions).
-     * ./filters subdirectories are automatically searched for filter
-       commands.
-     * A title-subs configuration option specifies the substitutions
-       performed on document Header and Section titles.
-     * A subs entry in now included in List configuration file definitions
-       that specified substitutions performed on list entry text.
-     * Configuration files are auto-loaded from ./filters subdirectories.
-     * Added example code filter (see ./examples/filters).
-     * Bug fix: if section was empty you may have got erroneous missing
-       tag "paragraph" error.
-     * Internal code tidy up.
-     __________________________________________________________________
-
-64. Version 3.1 (2003-05-18)
-
-     * In version 3.0 a [macros] section entry of the form name was
-       equivalent to name=. An entry of the form name now undefines the
-       entry (to bring it in line with the behavior of other special
-       sections).
-     * Paragraphs have now been generalized (in the same way as Lists and
-       DelimitedBlocks).
-     * The indentsize option has been dropped as as consequence of
-       paragraph generalization.
-     * Pipe | characters can be included in substituted tag and
-       substitution section text using the {brvbar} (broken vertical bar)
-       glossary reference.
-     * Removed the restriction requiring substitution section text
-       placeholders | to be on a separate line.
-     * Added an -e asciidoc(1) command option that excludes implicit
-       configuration files (used in conjunction with -c generated
-       configuration files).
-     * Version 3.0 documentation has undergone a considerable cleanup.
-     * The dumping of quoted section entries (see -c option) now works
-       correctly.
-     * The format of special section entries has been made consistent:
-       name undefines the entry; name= sets the entry value to a blank
-       string; name=value sets the entry value to value.
-     * As a consequence of the previous change the caret prefix is no
-       longer used in glossary configuration file entries (although it is
-       still used when undefining an entry using the -g command-line
-       option).
-     __________________________________________________________________
-
-65. Version 3.0 (2003-05-13)
-
-   This version is the culmination of work begun in the 2.x releases
-   whereby fixed policy has been replaced by extensible mechanisms.
-     * Added -c command-line option to dump a composite asciidoc(1)
-       configuration file to stdout.
-     * Lists and Delimited Blocks are now defined by a set of
-       configuration file parameter sections. The user can modify the
-       default definitions or add new ones.
-     * Block content can now be processed through external filters.
-     * The default behavior for Custom Blocks is to perform glossary
-       substitution (previously there was no substitution inside Custom
-       Blocks).
-     * The old 2.x style macros have been reimplemented; as with Lists and
-       Delimited Blocks there syntax and behavior can be configured by the
-       user. The default macro syntax remains the same but the semantics
-       are now (hopefully) a bit more intelligible.
-     * Block and Builtin macros use :: delimiter instead of the 2.x single
-       colon delimit (to distinguish them from inline macros). The 2.x
-       syntax is still supported for backward compatibility.
-     * Nested lists are now supported and IndentedParagraphs can be
-       included in list items.
-     * Conditional source inclusion can be specified using built in ifdef,
-       ifndef and endif macros.
-     * The new conditional source inclusion feature has been used to
-       reduce the number of default configuration files down to one per
-       backend.
-     * A change of name: 2.x Substitutions are now called Replacements and
-       the 2.x [substitutions] configuration file section is now called
-       [replacements] (the old name is still recognized for backward
-       compatibility).
-     * The line break is now implemented as a Replacements substitution.
-     * Inline icon macro for inline images has been added to default
-       configuration files.
-     __________________________________________________________________
-
-66. Version 2.2 (2003-04-07)
-
-     * The master.conf configuration file name has been deprecated in
-       favor of asciidoc.conf.
-     * The standard configuration files set is now loaded from the
-       .asciidoc folder in the users home directory (if it exists) and
-       then from the source document directory. Configuration files that
-       don’t exist are silently skipped.
-     * Configuration files named like the source file will be
-       automatically loaded if they are found in the source file
-       directory. For example if the source file is mydoc.asc and the -b
-       html option is used then asciidoc(1) will look for mydoc.conf and
-       mydoc-html.conf in that order.
-     * The characters used to quote formatted text can be configured and
-       extended by the user (see the master.conf [quotes] section).
-     * Quoted text can now be escaped by prefixing a backslash character
-       to the leading quote.
-     * The double single-quote '' strong text quote has been deprecated in
-       favor of an asterisk * character.
-     * Added {eval:expression}, {sys:command} and {sys2:command} glossary
-       reference actions.
-     * Trailing brace characters } are now allowed inside glossary
-       references provided they are escaped with a backslash character.
-     * Glossary entries can now be escaped by prefixing a backslash
-       character to the leading brace character (use this in preference to
-       placing the backslash inside the brace).
-     * The output macro has been deprecated (use the new include1 macro
-       inside a CustomBlock).
-     * The default document type is article (asciidoc no longer attempts
-       to guess).
-     * Files included within DelimitedBlocks are not searched for block
-       termination underlines. This ensures the entire file is part of the
-       DelimitedBlock.
-     * include macros can now be used in configuration files.
-     * Corrected {infile} and {outfile} glossary entry documentation.
-     * File inclusion is now limited to a depth of 5 to catch recursion
-       loops.
-     * Inline tags have been deprecated, they’re not necessary and they
-       immediately make the source document backend specific. Use
-       CustomBlocks or Substitutions instead.
-     __________________________________________________________________
-
-67. Version 2.1 (2003-03-17)
-
-     * Added section auto numbering {sectnum} glossary entry
-       (auto-numbering function contributed by Ludovico Magnocavallo).
-     * asciidoc(1) now correctly returns non-zero exit status if an error
-       occurs.
-     * An AsciiDoc example website has been included in the AsciiDoc
-       distribution examples/website directory.
-     * NOTE: The asciidoc wrapper script included in the 2.0 distribution
-       has been dropped, if you’ve symlinked or aliased to asciidoc you’ll
-       need to change them to point directly to asciidoc.py instead.
-     * An RCS $Id$ marker can be used as the document header revision line
-       (based on a patch submitted by Ludovico Magnocavallo).
-     * In addition to the name=value glossary entry format two new ones
-       have been introduced: name (the default value is set to an empty
-       string) and ^name (the glossary entry is undefined).
-     * The -q command-line option has been deprecated and the -w level
-       command-line option added.
-       NOTE: By default skipped substitution warnings are now suppressed.
-     * If a configuration file specified with the -f command-line option
-       is not found relative to the current working directory then the
-       search is repeated relative to the asciidoc(1) directory. This
-       allows global configuration files to be used.
-     * Added {infile}, {outfile} predefined glossary entries.
-     * Added under-construction macro to HTML article configuration files.
-     * Deprecated {asciidoc_version} glossary entry in favor of
-       {asciidoc-version} (to it consistent with other entries).
-     __________________________________________________________________
-
-68. Version 2.0 (2003-02-24)
-
-     * The emphasized, strong and monospaced words options have been
-       generalized with the introduction of macro based special words
-       lists.
-     * Glossary references can now appear in both the document and macro
-       bodies.
-     * All output files use crlf line termination (previously used UNIX lf
-       (newline) termination).
-     * Added [substitutions] section which implements arbitrary regular
-       expression based substitutions.
-     * An optional master.conf configuration file can be used for entries
-       that are not backend or document type specific.
-     * Special character definitions moved from the code to the new
-       [special_characters] configuration file section.
-     * Configuration file glossary added.
-     * Command-line -g glossary entry added.
-     * A new book document type has been implemented for the docbook
-       backend. It outputs DocBook book documents.
-     * A major internal change has been the implementation of parametrized
-       user definable macros. Internally most document elements are now
-       processed as macros.
-     * Configuration file macro variables can be specified with default
-       values (literals or other macro variables).
-     * An attempt has been made to tighten up the vocabulary used to
-       describe the AsciiDoc document syntax.
-     * The term abstract has been replaced by the more general term
-       preface and a new preface section introduced into article
-       configuration files (replacing the synopsis sections).
-     * Any section elements can now be put in the document preface
-       (previous versions only allowed paragraphs).
-     * AsciiDoc Blocks have been unified and their behavior can be user
-       defined and parametrized.
-     * An output inclusion allows an external file to be written directly
-       to the backend output file.
-     * A new CustomBlock has been added. Default behavior is to insert the
-       enveloped AsciiDoc source lines directly into the output file.
-     * A line break tag can be inserted by terminating a line with a +
-       character (only really useful for HTML backends).
-     * An fourth section level has been introduced.
-     * The SidebarBlock delimiter line characters have been changed. The
-       deprecated underline is still accepted.
-     * Levels 2 and 3 title underline characters have been changed. The
-       deprecated underlines are still accepted.
-     * Lines with backend specific inline tags can be inserted into
-       AsciiDoc source files.
-     * Single words enveloped by underscores are no longer emphasized.
-       This feature was deprecated as it is redundant (use single quotes
-       instead) and was being applied to file names with underscores.
-     * A -q quiet option has been added to suppress warning messages.
-     * Badge images sourced locally.
-     * Added author and author-mail meta tags to HTML configuration files.
-     __________________________________________________________________
-
-69. Version 1.5 (2003-01-08)
-
-     * Implemented sidebar document elements.
-     * Explicit checks for user specified configuration files and input
-       file (rather than throwing exception).
-     __________________________________________________________________
-
-70. Version 1.4 (2003-01-04)
-
-     * New configuration file options emphasizedwords and strongwords.
-       These allow the definition of words that will always be emphasized
-       or rendered in a strong font without inline formatting.
-     * Document and section titles are no long subject to inline
-       formatting.
-     * Multiple configuration files can be overlaid in a single command.
-     * Configuration file tags and options entries can now be overridden
-       on an entry by entry basis (previously the entire section was
-       overloaded).
-     * Configuration file tags and options entries are now cached this has
-       resulted in around 37% performance improvement over version 1.3.
-     * Variable lists can now contain multiple terms per list item.
-     * Placeholder paragraph eliminated from empty sections that contain
-       subsections.
-     * Added {asciidoc_version} substitution variable.
-     * More documentation additions and tidy ups.
-     __________________________________________________________________
-
-71. Version 1.3 (2003-01-01)
-
-     * A new strong text formatting convention has been implemented: Word
-       phrases enclosed in pairs of single quote characters (acute
-       accents) are rendered in a strong font (usually bold).
-     * Paragraphs can now be followed immediately by Simple lists and
-       Ordered lists without an intervening blank line.
-     * A user specified configuration file (asciidoc(1) -f option)
-       overlays the default configuration file rather than replacing it.
-       Custom configuration files need only contain those sections that
-       have been customized.
-     * Comment Block delimiters have been relaxed slightly. They must
-       start with three forward slashes /// but the remainder can contain
-       any characters, this allows comments to be embedded in the
-       delimiter line.
-     * Leading non-digit characters preceding revision number are now
-       ignored.
-     * Set default indentsize [option] from 2 to documented default value
-       of zero in HTML backend html-article.conf and html-manpage.conf
-       files.
-     * Fixed error that occurred when taking input from stdin without
-       explicitly specifying a document type.
-     * Restored file name and line number error message information.
-     * Changed deprecated -t option to -d in asciidoc --help and usage
-       command output.
-     * CSS styles tweaking.
-     * Code, configuration file and documentation tidy ups.
-     __________________________________________________________________
-
-72. Version 1.2 (2002-12-28)
-
-     * Implemented include URL to allow file inclusion.
-     * fileextension configuration file [option] renamed to more sensible
-       outfilesuffix (fileextension still accepted by this version but
-       will be dropped in future).
-     * Improved error reporting.
-     * CSS backends generate valid XHTML.
-     * New css-embedded backend generates HTML with embedded stylesheets
-       (use the css backend for linked stylesheets). The css-embedded
-       backend output contains no linked images so the generated html
-       files are completely self contained.
-     * Bug fixes.
-     __________________________________________________________________
-
-73. Version 1.1 (2002-12-03)
-
-     * Added css (cascading style sheets) backend
-     * Implemented IndentedBlock document element.
-     * Tabsize command-line option has been deprecated in favor of
-       configuration file.
-     * Default indent width changed to zero.
-     * Added {localdate} and {localtime} substitution variables.
-     * Added optional [options] configuration file section with
-       fileextension, tabsize and indentsize options.
-     * Implemented {authorinitials} substitution variable.
-     * Added https link type.
-     * Corrected [graphic] substitution from {title} to {caption} in
-       linuxdoc-article.conf configuration file.
-     * Fixed error that occurred when == title underline was used.
-     __________________________________________________________________
-
-74. Version 1.0 (2002-11-25)
-
-   First AsciiDoc public release along with AsciiDoc web site
-   ([183]http://www.methods.co.nz/asciidoc/) and SourceForge.net project
-   registration ([184]https://sourceforge.net/projects/asciidoc/).
-     __________________________________________________________________
-
-   Version 8.6.8
-   Last updated 2012-07-17 07:24:10 NZST
-
-References
-
-   1. https://groups.google.com/group/asciidoc/browse_thread/thread/7be28e9714f249c7
-   2. https://groups.google.com/group/asciidoc/browse_thread/thread/961a957ab5872ebf
-   3. https://groups.google.com/group/asciidoc/browse_thread/thread/961a957ab5872ebf
-   4. https://groups.google.com/group/asciidoc/browse_thread/thread/9e79d8494ef8d870
-   5. https://groups.google.com/group/asciidoc/browse_frm/thread/64b071bb21de9cf0
-   6. https://groups.google.com/group/asciidoc/browse_frm/thread/e045c9986c71d72a
-   7. https://groups.google.com/group/asciidoc/browse_thread/thread/f5174f450a61f14b
-   8. https://groups.google.com/group/asciidoc/browse_thread/thread/db3b734a6931cb74
-   9. https://groups.google.com/group/asciidoc/browse_thread/thread/13c9ee97930342b3
-  10. http://groups.google.com/group/asciidoc/browse_thread/thread/a9762e21ec0cc244/5d3a4ebf20e6847e
-  11. http://groups.google.com/group/asciidoc/browse_thread/thread/843d7d3d671006fb/25628e14c829db3f
-  12. http://groups.google.com/group/asciidoc/browse_thread/thread/b8e93740b7cd0e1d/b5e0b83fe37ae31a
-  13. http://groups.google.com/group/asciidoc/browse_thread/thread/3d06b0105dfbb780/8c60eb7a62f522e4
-  14. http://groups.google.com/group/asciidoc/browse_thread/thread/33e99b78e2472122
-  15. http://groups.google.com/group/asciidoc/browse_thread/thread/8200e29815c40f72
-  16. http://groups.google.com/group/asciidoc/browse_thread/thread/849e5ea91f43adf2
-  17. http://groups.google.com/group/asciidoc/browse_thread/thread/e92a75abcc382701
-  18. http://groups.google.com/group/asciidoc/browse_thread/thread/58d0843ae4345afd
-  19. http://groups.google.com/group/asciidoc/browse_thread/thread/b0e69e393b6f9f20/47a2c7586f9e40c6?lnk=gst&q=themes+tarball#47a2c7586f9e40c6
-  20. http://groups.google.com/group/asciidoc/browse_thread/thread/b9d705c6b6b39f59/1e120483dafca109
-  21. http://groups.google.com/group/asciidoc/browse_thread/thread/103445ab9d95cb0c
-  22. http://code.google.com/p/asciidoc/issues/detail?id=9
-  23. http://groups.google.com/group/asciidoc/browse_thread/thread/4608b77ec289f6c4
-  24. http://groups.google.com/group/asciidoc/browse_thread/thread/14e8fcb289a135b/3af3b4e57b827c78?lnk=gst&q=archlinux#3af3b4e57b827c78
-  25. http://groups.google.com/group/asciidoc/browse_thread/thread/5e2e6f4dd740d51a
-  26. http://groups.google.com/group/asciidoc/browse_thread/thread/5e2e6f4dd740d51a
-  27. http://groups.google.com/group/asciidoc/browse_thread/thread/a839aa01db0765d2
-  28. http://groups.google.com/group/asciidoc/browse_thread/thread/734ac5afed736987
-  29. http://groups.google.com/group/asciidoc/browse_thread/thread/6436788a10561851
-  30. http://groups.google.com/group/asciidoc/browse_thread/thread/c9238380a1f2507a
-  31. http://groups.google.com/group/asciidoc/browse_thread/thread/ec8e8481eb0e27b0/d1c035092b5bb7a4?lnk=gst&q=caption+option#d1c035092b5bb7a4
-  32. http://groups.google.com/group/asciidoc/browse_thread/thread/3e177b84bc133ca9/659796dfadad30ea?lnk=gst&q=a2x+format#659796dfadad30ea
-  33. http://groups.google.com/group/asciidoc/browse_thread/thread/16d3fb9672a408e7
-  34. http://groups.google.com/group/asciidoc/browse_thread/thread/bacbf8aeb8ad6a3a
-  35. http://code.google.com/p/asciidoc/issues/detail?id=8
-  36. http://groups.google.com/group/asciidoc/browse_thread/thread/6436788a10561851
-  37. http://groups.google.com/group/asciidoc/browse_thread/thread/e8f3938bcb4c8bb4/44d13113a35738ef
-  38. http://groups.google.com/group/asciidoc/browse_thread/thread/c9238380a1f2507a/9afc4559d51e1dbd
-  39. http://groups.google.com/group/asciidoc/browse_thread/thread/8c111f1046b33691/158a944cf4d5ff0d?lnk=gst&q=latex+escapes#158a944cf4d5ff0d
-  40. http://groups.google.com/group/asciidoc/browse_thread/thread/eaf25f21d1da180a
-  41. http://flask.pocoo.org/docs/
-  42. file://localhost/tmp/lynxXXXXrCQLhm/article-html5-toc2.html
-  43. file://localhost/tmp/lynxXXXXrCQLhm/epub-notes.html
-  44. http://flask.pocoo.org/docs/
-  45. http://groups.google.com/group/asciidoc/browse_thread/thread/9da9d48a6461ff14
-  46. http://groups.google.com/group/asciidoc/browse_thread/thread/5c792cbb395b753b
-  47. http://groups.google.com/group/asciidoc/browse_thread/thread/e2100b7cb29283ce
-  48. http://groups.google.com/group/asciidoc/browse_thread/thread/c5e30ee5555877f5
-  49. http://groups.google.com/group/asciidoc/browse_thread/thread/baf3218551d05a05
-  50. http://groups.google.com/group/asciidoc/browse_thread/thread/5a7fe64fbfd65ad
-  51. http://groups.google.com/group/asciidoc/browse_thread/thread/5620ba634fdb030a
-  52. http://groups.google.com/group/asciidoc/browse_thread/thread/f969b9ce987d7f5d
-  53. http://groups.google.com/group/asciidoc/browse_thread/thread/cd0f47495fd04181
-  54. http://code.google.com/p/asciidoc/issues/detail?id=6&q=label%3APriority-Medium
-  55. http://sourceforge.net/tracker/?func=detail&atid=373747&aid=2854075&group_id=21935
-  56. http://groups.google.com/group/asciidoc/browse_thread/thread/b24cc3362f35b801
-  57. http://www.methods.co.nz/asciidoc/userguide.html#X96
-  58. http://groups.google.com/group/asciidoc/browse_thread/thread/77f28b0dfe60d262
-  59. http://www.methods.co.nz/asciidoc/manpage.html
-  60. http://groups.google.com/group/asciidoc/browse_thread/thread/40c64cd33ee1905c
-  61. http://groups.google.com/group/asciidoc/browse_thread/thread/e15282f072413940
-  62. http://groups.google.com/group/asciidoc/browse_thread/thread/5ac8e8ea895147e9
-  63. http://groups.google.com/group/asciidoc/browse_thread/thread/e15282f072413940
-  64. http://groups.google.com/group/asciidoc/browse_thread/thread/e15282f072413940
-  65. http://groups.google.com/group/asciidoc/browse_thread/thread/b11066a828ab45b9
-  66. http://groups.google.com/group/asciidoc/browse_thread/thread/a1dd0562dee8b939
-  67. http://groups.google.com/group/asciidoc/browse_thread/thread/f44615dca0b834e9
-  68. http://groups.google.com/group/asciidoc/browse_thread/thread/1b3f88f1f8118ab3
-  69. http://groups.google.com/group/asciidoc/browse_thread/thread/c21c2902c29bae64
-  70. http://groups.google.com/group/asciidoc/browse_thread/thread/f510ea82a88aaee8
-  71. http://groups.google.com/group/asciidoc/browse_thread/thread/42b63ce90c2563b8
-  72. http://groups.google.com/group/asciidoc/browse_thread/thread/42b63ce90c2563b8
-  73. http://bugs.python.org/issue3932
-  74. http://groups.google.com/group/asciidoc/browse_thread/thread/dedc961b23e9ac56
-  75. https://phillordbio-asciidoc-fixes.googlecode.com/hg/
-  76. http://groups.google.com/group/asciidoc/browse_thread/thread/c14a4c3b1e4f6dc5
-  77. http://groups.google.com/group/asciidoc/browse_thread/thread/c948697943432e24
-  78. http://groups.google.com/group/asciidoc/browse_thread/thread/1c415fc4540ce5e5
-  79. http://groups.google.com/group/asciidoc/browse_thread/thread/8712a95e95a292a7
-  80. http://groups.google.com/group/asciidoc/browse_thread/thread/c4427a3902d130a8
-  81. http://groups.google.com/group/asciidoc/browse_thread/thread/59a610068e4acb58
-  82. http://groups.google.com/group/asciidoc/browse_thread/thread/b22603bfb879418c
-  83. http://groups.google.com/group/asciidoc/browse_thread/thread/1c02d27d49221aa2
-  84. http://groups.google.com/group/asciidoc/browse_thread/thread/5f3e825c74ed30c
-  85. http://pygments.org/
-  86. http://groups.google.com/group/asciidoc/browse_thread/thread/d8d042f5a3021369/8934ebbb8cb7144b
-  87. http://groups.google.com/group/asciidoc/browse_frm/thread/319e5cd94493e330/3fcb83fab067af42
-  88. http://groups.google.com/group/asciidoc/browse_frm/thread/fe9b33d8f5f1e0af
-  89. http://groups.google.com/group/asciidoc/browse_frm/thread/8eda3ea812968854
-  90. http://groups.google.com/group/asciidoc/browse_frm/thread/7174cb7598993c72
-  91. http://groups.google.com/group/asciidoc/browse_frm/thread/66e7b59d12cd2f91
-  92. http://groups.google.com/group/asciidoc/browse_frm/thread/7174cb7598993c72
-  93. http://groups.google.com/group/asciidoc/browse_frm/thread/7174cb7598993c72
-  94. http://groups.google.com/group/asciidoc/browse_frm/thread/219c86ae25b79a21
-  95. http://groups.google.com/group/asciidoc/browse_frm/thread/af652507caf6cec9
-  96. http://groups.google.com/group/asciidoc/browse_frm/thread/3f96900f7fbf5620
-  97. http://groups.google.com/group/asciidoc/browse_frm/thread/7174cb7598993c72
-  98. http://groups.google.com/group/asciidoc/browse_frm/thread/2ff802547b6a75ea
-  99. http://groups.google.com/group/asciidoc/browse_thread/thread/14e8fcb289a135b
- 100. http://groups.google.com/group/asciidoc/browse_thread/thread/faa36e9e5c7da019/d24cab3fe363e58d
- 101. http://groups.google.com/group/asciidoc/browse_frm/thread/ac4b9bfa2116db28
- 102. http://groups.google.com/group/asciidoc/browse_frm/thread/c17abd175778f5ea
- 103. http://groups.google.com/group/asciidoc/browse_frm/thread/c17abd175778f5ea
- 104. http://groups.google.com/group/asciidoc/browse_frm/thread/1b6b66adb24e710
- 105. http://groups.google.com/group/asciidoc/browse_frm/thread/a23fea28394c8ca9
- 106. http://groups.google.com/group/asciidoc/browse_frm/thread/50b28f6941de111a
- 107. http://groups.google.com/group/asciidoc/browse_frm/thread/dfe5204d5b2c9685
- 108. http://groups.google.com/group/asciidoc/browse_frm/thread/f0b6f9989f828c3
- 109. http://groups.google.com/group/asciidoc/browse_frm/thread/14aefc1cb6bd85f5
- 110. http://groups.google.com/group/asciidoc/browse_frm/thread/cb8b7694bbc82a6
- 111. http://groups.google.com/group/asciidoc/browse_frm/thread/cb8b7694bbc82a6
- 112. http://groups.google.com/group/asciidoc/browse_frm/thread/4b0f364b477ec165
- 113. http://groups.google.com/group/asciidoc/browse_frm/thread/e5e61823ff4203cd
- 114. http://groups.google.com/group/asciidoc/browse_frm/thread/2aa3e5711d243045
- 115. http://groups.google.com/group/asciidoc/browse_frm/thread/5215c99dcc865e7d
- 116. http://hg.sharesource.org/asciidoc/diff/55a5999bfd04/xhtml11.conf
- 117. http://groups.google.com/group/asciidoc/browse_frm/thread/b276a927fdc87995
- 118. http://groups.google.com/group/asciidoc/browse_frm/thread/f4df7c9eec01a9bd
- 119. http://groups.google.com/group/asciidoc/browse_frm/thread/f4df7c9eec01a9bd
- 120. http://groups.google.com/group/asciidoc/browse_frm/thread/d29924043e21cb6a
- 121. http://groups.google.com/group/asciidoc/browse_frm/thread/74d9a542b79ccd50
- 122. http://groups.google.com/group/asciidoc/browse_frm/thread/ea3a8ea399ae5d2a
- 123. http://groups.google.com/group/asciidoc/browse_frm/thread/69b3183fdab7c6a5
- 124. http://groups.google.com/group/asciidoc/browse_frm/thread/a254cf949ea7c6c5
- 125. http://groups.google.com/group/asciidoc/browse_frm/thread/e1dcb7ee0efc17b5
- 126. http://groups.google.com/group/asciidoc/browse_frm/thread/69b3183fdab7c6a5
- 127. http://groups.google.com/group/asciidoc/browse_frm/thread/1badad21ff9447ac
- 128. http://groups.google.com/group/asciidoc/browse_frm/thread/a42db6bc54c2c537
- 129. http://groups.google.com/group/asciidoc/browse_frm/thread/b9c63be67dd1d11c
- 130. http://groups.google.com/group/asciidoc/browse_frm/thread/1269dc2feb1a482c
- 131. http://groups.google.com/group/asciidoc/browse_frm/thread/36ff073c79cbc20a
- 132. http://www.methods.co.nz/asciidoc/userguide.html#X89
- 133. http://groups.google.com/group/asciidoc/browse_thread/thread/62278a054188a038
- 134. http://groups.google.com/group/asciidoc/browse_thread/thread/4bdcdfb0af773e2
- 135. http://groups.google.com/group/asciidoc/browse_thread/thread/c93bb4db025225d8
- 136. http://groups.google.com/group/asciidoc/browse_thread/thread/1d796a9c9ddb2855
- 137. http://groups.google.com/group/asciidoc/browse_thread/thread/6d8c716748b109e3
- 138. http://groups.google.com/group/asciidoc/browse_thread/thread/fd27add515597c06
- 139. http://www.methods.co.nz/asciidoc/testasciidoc.html
- 140. http://www.methods.co.nz/asciidoc/asciidocapi.html
- 141. file://localhost/tmp/lynxXXXXrCQLhm/L12417-6257TMP.html#X2
- 142. http://www.methods.co.nz/asciidoc/INSTALL.html
- 143. http://www.methods.co.nz/asciidoc/newtables.html
- 144. http://www.methods.co.nz/asciidoc/newlists.html
- 145. http://www.methods.co.nz/asciidoc/userguide.html#X77
- 146. http://www.methods.co.nz/asciidoc/userguide.html#X76
- 147. http://www.methods.co.nz/asciidoc/latexmath.pdf
- 148. http://www.methods.co.nz/asciidoc/asciimathml.html
- 149. http://www.methods.co.nz/asciidoc/latexmathml.html
- 150. http://www.methods.co.nz/asciidoc/source-highlight-filter.html
- 151. https://sharesource.org/hg/asciidoc/
- 152. http://en.wikipedia.org/wiki/Data:_URI_scheme
- 153. http://www.methods.co.nz/asciidoc/faq.html
- 154. http://www.maths.nottingham.ac.uk/personal/drw/lm.html
- 155. http://www.methods.co.nz/asciidoc/asciimathml.html
- 156. http://www.methods.co.nz/asciidoc/index.html
- 157. http://tpl.sourceforge.net/userguide.html
- 158. http://www.methods.co.nz/asciidoc/music-filter.html
- 159. http://lilypond.org/
- 160. http://abcnotation.org.uk/
- 161. mailto:srackham at gmail.com
- 162. mailto:jlm at ofb.net
- 163. mailto:m_pupil at yahoo.com.cn
- 164. http://open.comsultia.com/docbook2odf/
- 165. http://www1.chapman.edu/~jipsen/mathml/asciimath.html
- 166. http://www.methods.co.nz/asciidoc/asciimath.html
- 167. file://localhost/tmp/lynxXXXXrCQLhm/userguide.html#X33
- 168. mailto:francis at daoine.org
- 169. file://localhost/tmp/lynxXXXXrCQLhm/userguide.html#X39
- 170. file://localhost/tmp/lynxXXXXrCQLhm/source-highlight-filter.html
- 171. mailto:trolocsis at gmail.com
- 172. mailto:srackham at gmail.com
- 173. file://localhost/tmp/lynxXXXXrCQLhm/userguide.html#X36
- 174. file://localhost/tmp/lynxXXXXrCQLhm/userguide.html#X33
- 175. mailto:viktor at rbg.informatik.tu-darmstadt.de
- 176. file://localhost/tmp/lynxXXXXrCQLhm/userguide.html#X23
- 177. mailto:david at dgreaves.com
- 178. mailto:stone at debian.org
- 179. mailto:stone at debian.org
- 180. mailto:srackham at gmail.com
- 181. http://jimmac.musichall.cz/ikony.php3
- 182. mailto:srackham at gmail.com
- 183. http://www.methods.co.nz/asciidoc/
- 184. https://sourceforge.net/projects/asciidoc/
diff --git a/source-builder/sb/asciidoc/CHANGELOG.txt b/source-builder/sb/asciidoc/CHANGELOG.txt
deleted file mode 100644
index 5b01600..0000000
--- a/source-builder/sb/asciidoc/CHANGELOG.txt
+++ /dev/null
@@ -1,3128 +0,0 @@
-AsciiDoc ChangeLog
-==================
-
-:website: http://www.methods.co.nz/asciidoc/
-
-
-Version 8.6.8 (2012-07-17)
---------------------------
-.Release highlights
-Added full complement of styles to 'Open Blocks' and 'Normal
-Paragraphs' -- those with a minimalist bent could construct virtually
-any document using just Title, Normal Paragraph and Open Block
-syntaxes.
-
-.Other additions and changes
-- Increased default maximum include depth from 5 to 10.
-- Emit warning if maximum include depth is exceeded.
-- Suppress repeated console messages.
-- Music filter: removed '--beams=None' option from abc2ly invocation
-  because it is broken on LilyPond 2.14 (Ubuntu 12.04).
-- Replaced obsolete '<tt>' tag with '<code>' in HTML backends.
-- Allow configuration attribute entries to create a new section
-  (previously you could only modify existing sections).  See:
-  https://groups.google.com/group/asciidoc/browse_thread/thread/7be28e9714f249c7[discussion
-  list].
-- Documented `{wj}` (word-joiner) attribute and updated FAQ.  See:
-  https://groups.google.com/group/asciidoc/browse_thread/thread/961a957ab5872ebf[discussion
-  list].
-- FAQ: Added 'How can I place a footnote immediately following quoted
-  text?' See
-  https://groups.google.com/group/asciidoc/browse_thread/thread/961a957ab5872ebf[discussion
-  list].
-- Added Greek language configuration file. Contributed by Michael
-  Dourmousoglou.  See
-  https://groups.google.com/group/asciidoc/browse_thread/thread/9e79d8494ef8d870[discussion
-  list].
-- FAQ: Added 'Using roles to select fonts for PDF'. Submitted by Lex
-  Trotman and based on solution by Antonio Borneo. See:
-  https://groups.google.com/group/asciidoc/browse_frm/thread/64b071bb21de9cf0[discussion
-  list].
-- Apply same monospaced font size to all monospaced text.
-- Changed '0' number padding to spaces in numbered GNU
-  source-highlight outputs.
-- Allow 'highlight' source highlighter to use 'python' for Python
-  `{language}` name.  r1142: Update the AsciiDoc 'source' filter to
-  allow the use of the 'highlight' source code highlighter.  See
-  https://groups.google.com/group/asciidoc/browse_frm/thread/e045c9986c71d72a[discussion
-  list].
-+
-NOTE: The 'pygments' attribute has been deprecated in favor of the new
-'source-highlighter' attribute.
-
-- Vim syntax highlighter: Don't confuse trailing open block delimiter
-  with section underline.
-- Added 'skip' option to paragraphs (c.f. Delimited Block 'skip'
-  option).
-
-.Bug fixes
-- *FIXED*: latex, music and graphviz filters: When the filter output
-  image is data-uri encoded write it to the indir (instead of the
-  outdir) so that encoder can find it. See
-  https://groups.google.com/group/asciidoc/browse_thread/thread/f5174f450a61f14b[discussion
-  list].
-- *FIXED*: Escape the ']' character inside inline macros.  See
-  https://groups.google.com/group/asciidoc/browse_thread/thread/db3b734a6931cb74[discussion
-  list].
-- *FIXED*: source highlighter filter: Pass 'role' attribute to HTML
-  backends.
-- *FIXED*: source highlight filter: docbook backend: 'role' attribute
-  was not passed to listings without a title. Patch submitted by Lex
-  Trotman. See
-  https://groups.google.com/group/asciidoc/browse_thread/thread/13c9ee97930342b3[discussion
-  list].
-- *FIXED*: music2png.py: 'FOPException: Raster ByteInterleavedRaster'
-  error (FOP 1.0, ImageMagick 6.6.9-7).
-
-
-
-Version 8.6.7 (2012-03-17)
---------------------------
-.Release highlights
-No major enhancements but quite a few bug fixes which, among other
-things, fixes Jython compatibility and improves Windows compatibility.
-
-.All additions and changes
-- Vim syntax highlighter: highlight entity refs in macro arguments.
-- Added files with `.asciidoc` extension to Vim file type detection.
-  http://groups.google.com/group/asciidoc/browse_thread/thread/a9762e21ec0cc244/5d3a4ebf20e6847e[Patch]
-  submitted by Dag Wiers.
-- Added 'replacement3' substitution to enable
-  http://groups.google.com/group/asciidoc/browse_thread/thread/843d7d3d671006fb/25628e14c829db3f[ODT
-  whitespace processing].
-- Added 'unbreakable' option to XHTML and HTML 5 backends.
-- Implemented toc::[] block macro and 'toc-placement' attribute for
-  HTML backends to allow the Table of Contents placement to be set
-  manually by the author.
-- Added FAQs: 'How can I control page breaks when printing HTML
-  outputs?' and 'Is it possible to reposition the Table of Contents
-  in HTML outputs?'.
-- Added `--backend` and `--backend-opts` options to the 'a2x' command
-  to allow 'a2x' to use backend plugin code extensions.
-  http://groups.google.com/group/asciidoc/browse_thread/thread/b8e93740b7cd0e1d/b5e0b83fe37ae31a[Patch]
-  submitted by Lex Trotman.
-- Added
-  http://groups.google.com/group/asciidoc/browse_thread/thread/3d06b0105dfbb780/8c60eb7a62f522e4[args
-  block attribute] to source highlight blocks to allow arbitrary
-  parameters to be passed to the source highlighters.
-- If the 'ascii-ids' attribute is defined then non-ascii characters in
-  auto-generated IDs
-  http://groups.google.com/group/asciidoc/browse_thread/thread/33e99b78e2472122[are
-  replaced] by their nearest ascii equivalents (to work around DocBook
-  processor limitations).
-- Added global 'blockname' attribute which is dynamically updated to
-  identify the current block.  See
-  http://groups.google.com/group/asciidoc/browse_thread/thread/8200e29815c40f72[discussion
-  list].
-- 'xhtml11', 'html5' backends: Include book part TOC entries for
-  multi-part books.  Patch submitted by Loïc Paillotin.
-- Removed code filter example from the AsciiDoc User Guide so that
-  backends implemented as external plugins can compile the manual. See
-  http://groups.google.com/group/asciidoc/browse_thread/thread/849e5ea91f43adf2[discussion
-  list].
-- If the delimited block 'skip' option is set then do not consume
-  block title and attributes. This makes it possible for the comment
-  delimited blocks to use an attribute list (previously the comment
-  delimited block was hardwired to skip preceding attributes and
-  titles). See
-  http://groups.google.com/group/asciidoc/browse_thread/thread/e92a75abcc382701[discussion
-  list].
-- Added `backend-confdir` intrinsic attribute.
-
-.Bug fixes
-- *FIXED*: slidy backend: broken 'stylesheet' attribute.
-  http://groups.google.com/group/asciidoc/browse_thread/thread/58d0843ae4345afd[Patch]
-  submitted by Micheal Hackett.
-- *FIXED*: Restored
-  http://groups.google.com/group/asciidoc/browse_thread/thread/b0e69e393b6f9f20/47a2c7586f9e40c6?lnk=gst&q=themes+tarball#47a2c7586f9e40c6[missing
-  themes] to zip file distribution archive.
-- *FIXED*: Grammatical error in error messages.
-  http://groups.google.com/group/asciidoc/browse_thread/thread/b9d705c6b6b39f59/1e120483dafca109[Patch]
-  submitted by Dag Wieers.
-- *FIXED*: Use configured normal substitution in preference to the
-  default one.
-- *FIXED*: The 'eval' block macro would execute multiple times if it
-  evaluated to 'None'.
-- *FIXED*: Duplicated entries in TOC of large document.
-  http://groups.google.com/group/asciidoc/browse_thread/thread/103445ab9d95cb0c[Patch]
-  submitted by Sebastien Helleu.
-- *FIXED*: Python 2.4 backward
-  http://code.google.com/p/asciidoc/issues/detail?id=9[incompatibility].
-- *FIXED*: 8.6.6 regression broke Jython compatibility.  See
-  http://groups.google.com/group/asciidoc/browse_thread/thread/4608b77ec289f6c4[discussion
-  list].
-- *FIXED*: Leaky file handles in a2x and music and latex filters which
-  created incompatibility problems for Jython.
-- *FIXED*: All Python filters are executed with the same Python
-  interpreter that executes the asciidoc parent (previously filters
-  were hardwired to execute the 'python' interpreter). This prevents
-  http://groups.google.com/group/asciidoc/browse_thread/thread/14e8fcb289a135b/3af3b4e57b827c78?lnk=gst&q=archlinux#3af3b4e57b827c78[Python
-  mix-ups].
-- *FIXED*: Microsoft Windows shelled command-line truncation that
-  caused shelled commands to fail e.g. the 'data-uri' attribute
-  failure.
-
-
-Version 8.6.6 (2011-09-04)
---------------------------
-.Release highlights
-- The AsciiDoc plugin architecture has been enhanced, unified and
-  extended:
-  * Plugin commands have been added to the asciidoc(1) `--backend`
-    option.
-  * An asciidoc(1) `--theme` option has been implemented to specify a
-    theme and to manage theme plugins.
-  * A plugin 'build' command (for creating plugins) added.
-  * 'build', 'install', 'list' and 'remove' plugin commands are all
-    recognized by asciidoc(1) `--backend`, `--filter` and `--theme`
-    options.
-- A security update by Kenny MacDermid removes the use of `eval()` on
-  untrusted input (to disallow code malicious execution).
-
-.All additions and changes
-- 'xhtml11', 'html5': Made verse and quote block text darker to print
-  legibly in Google Chrome browser.
-- Added plugin 'build' command for plugin file creation.
-- Merged `--help plugins` back to `--help manpage` so it matches the
-  asciidoc(1) manpage.
-- The `--filter` command-line option can specify the name of filters
-  that will be unconditionally loaded.
-- If a filter directory contains a file named `__noautoload__` then
-  the filter is not automatically loaded (you can used the `--filter`
-  command-line option to override this behavior).
-- tests: Add Italian language tests.  Patch submitted by Simon
-  Ruderich. See:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/5e2e6f4dd740d51a
-- tests: Add tests for localized man pages.  Patch submitted by Simon
-  Ruderich. See:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/5e2e6f4dd740d51a
-- If the section name is prefixed with a '+' character then the
-  section contents is appended to the contents of an already existing
-  same-named section (the default behavior is to replace the the
-  section).
-- If a configuration file section named 'docinfo' is loaded then it
-  will be included in the document header.  Typically the 'docinfo'
-  section name will be prefixed with a '+' character so that it is
-  appended to (rather than replace) other 'docinfo' sections.
-- Added `{sp}` intrinsic attribute for single space character.  See
-  http://groups.google.com/group/asciidoc/browse_thread/thread/a839aa01db0765d2
-- Fixed TOC and footnotes generator. Patch submitted by Will.  See
-  http://groups.google.com/group/asciidoc/browse_thread/thread/734ac5afed736987
-- The `asciidoc-confdir` attribute is set to the asciidoc executable
-  directory if it contains global configuration files i.e. a local
-  asciidoc installation.
-- asciidoc now throws an error instead of just a warning of the
-  backend configuration file is not found.
-- latex filter: write MD5 file after successful PNG file generation.
-  Always delete temp files irrespective of outcome.
-- Added truecolor option to LaTeX filter. Patch submitted by Michel
-  Krämer. See:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/6436788a10561851
-- Unit test for table column specifiers with merged cells. Patch
-  submitted by Simon Ruderich. See:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/c9238380a1f2507a
-- Added verbose message for `ifeval::[]` macro evaluation.
-- Added test case for `ifeval::[]` evaluation.
-- Security update to remove the use of `eval()` on untrusted input (to
-  disallow code malicious execution).  Patch submitted by Kenny
-  MacDermid.
-- Changed web site layout from table to CSS based.  See
-  http://groups.google.com/group/asciidoc/browse_thread/thread/ec8e8481eb0e27b0/d1c035092b5bb7a4?lnk=gst&q=caption+option#d1c035092b5bb7a4
-- a2x: Pass `--format` option value to asciidoc as 'a2x-format'
-  attribute.  Patch submitted by Lex Trotman
-  (http://groups.google.com/group/asciidoc/browse_thread/thread/3e177b84bc133ca9/659796dfadad30ea?lnk=gst&q=a2x+format#659796dfadad30ea).
-- Added two FAQs submitted by Lex Trotman. See:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/16d3fb9672a408e7
-- html5,xhtml11: Implemented themes directory structure.
-- html5,xhtml11: Implemented asciidoc `--theme` management option
-  (install, list, build and remove commands).
-- html5,xhtml11: A theme can now optionally include a JavaScript file
-  `<theme>.js`
-- html5,xhtml11: If the 'data-uri' attribute is defined then icons
-  from the theme icons directory (if they exist) will be embedded in
-  the generated document.
-- Added optional 'warnings' argument to include macros.
-- The asciidoc `--verbose` option now prints file inclusion messages.
-- xhtml11, html5: Remove necessity for separate manpage CSS files.
-- Added 'css-signature' attribute to tests.
-- Add 'css-signature' attribute to set a CSS signature for the
-  document.  Patch submitted by Peg Russell, see:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/bacbf8aeb8ad6a3a
-- White background for toc2 TOC viewport so that horizontally scrolled
-  content does not obscure the the TOC.  Patch submitted by Lionel
-  Orry, see: http://code.google.com/p/asciidoc/issues/detail?id=8
-
-.Bug fixes
-- *FIXED*: Plugin install command: Delete backend directory is install
-  fails.
-- *FIXED*: Plugin install command: Fixed bug extracting binary files
-  on Windows (reported by Jean-Michel Inglebert).
-- *FIXED*: tests: Skip blank sections in testasciidoc.conf test
-  configuration file instead of throwing an exception (reported by
-  Jean-Michel Inglebert).
-- *FIXED*: If a plugin Zip file does not contain file permissions
-  (probably because it was created under Windows) then install it
-  using the default permissions.
-- *FIXED*: Fixed missing quote in preceding LaTeX filter patch. Fix
-  submitted by Simon Ruderich. See:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/6436788a10561851
-- *FIXED*: Some path attributes were processed as escaped Python
-  strings which could result in corrupted path names with backslash
-  separated Windows path names. Reported by Will. See:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/e8f3938bcb4c8bb4/44d13113a35738ef
-- *FIXED*: Vertically spanned table cells resulted in incorrect column
-  styles being applied to some cells.  Reported by Will:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/c9238380a1f2507a/9afc4559d51e1dbd
-- *FIXED*: LaTeX backend: fixed bad escapes. Patch submitted by Mark
-  McCurry:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/8c111f1046b33691/158a944cf4d5ff0d?lnk=gst&q=latex+escapes#158a944cf4d5ff0d
-- *FIXED*: When using slidy backend, display of characters with
-  accents is wrong because of 'meta http-equiv' line missing. Reported
-  by Fabrice Flore-Thebault.  See:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/eaf25f21d1da180a
-
-
-Version 8.6.5 (2011-05-20)
---------------------------
-.Release highlights
-- The addition of an 'html5' backend to generate HTML 5 output. Apart
-  from the inclusion of 'audio' and 'video' block macros the 'html5'
-  backend is functionally identical to the 'xhtml11' backend.
-
-- A new 'flask' theme for 'xhtml11' and 'html5' backends inspired by
-  the http://flask.pocoo.org/docs/[Flask website] styling (see 'toc2'
-  example in the next item below).
-
-- The new 'toc2' attribute generates a table of contents in
-  the left hand margin ('xhtml11' and 'html5' backends).
-  link:article-html5-toc2.html[This example] was generated using
-  the following command:
-
-  asciidoc -b html5 -a icons -a toc2 -a theme=flask article.txt
-
-- `a2x(1)` now has a flexible mechanism for copying arbitrary
-  resource files to HTML based outputs -- this is very handy for
-  generating EPUB files with embedded fonts and other resources.
-
-  * The `a2x(1)` `--resource` option can be used to inject any file
-    into EPUB output documents e.g. CSS resources such as fonts and
-    background images.
-  * Explicitly specified resources are added to the EPUB OPF manifest
-    automatically.
-  * You can explicitly specify file extension MIME types.
-  * The enhanced resource processing works around a couple of DocBook
-    XSL bugs (see link:epub-notes.html[EPUB Notes]).
-
-.All additions and changes
-- A new 'flask' theme for 'xhtml11' and 'html5' backends.  A shameless
-  knock-off of the http://flask.pocoo.org/docs/[Flask website]
-  styling.
-- Added HTML 5 article with 'toc2' table of contents to the example on
-  the AsciiDoc website home page.
-- Added 'filters' and 'topics' help topics.  Fixed documentation
-  errors in help text.  Patch submitted by Lionel Orry, see:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/9da9d48a6461ff14
-- Pass parent configuration files, command-line attributes and header
-  attributes to table asciidoc filters. Based on patch submitted by
-  Simon Ruderich, see:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/5c792cbb395b753b
-- Allow a 'title' attribute entry in the document header so that HTML
-  backends can set the 'title' element separately from the displayed
-  document title (the 'doctitle' attribute).
-- Pass 'lang' attribute to 'asciidoc' table style filter. Patch
-  submitted by Simon Ruderich, see:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/e2100b7cb29283ce
-- xhtml11,html5: Added 'toc2' attribute which generates a scrollable
-  table of contents in the left hand margin. Based on customized CSS
-  written by Suraj Kurapati, see
-  http://groups.google.com/group/asciidoc/browse_thread/thread/c5e30ee5555877f5
-- Added 'asciidoc-confdir' intrinsic attribute which expands to the
-  global conf directory.
-- Documented that you can specify multiple CSS files with the a2x(1)
-  `--stylesheet` command option. See:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/baf3218551d05a05
-- Improved xhtml11 backend's table of contents generation latency.
-  Patch submitted by Hongli Lai. See:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/5a7fe64fbfd65ad
-- Added html5 backend.
-- For consistency converted all DOS formatted configuration and text
-  files to UNIX format.
-- html4: Added ability to use 'role' attribute with most block
-  elements. Patch contributed by Simon Ruderich.  See
-  http://groups.google.com/group/asciidoc/browse_thread/thread/5620ba634fdb030a
-- Added Dutch language configuration file and accompanying test file
-  (contributed by Dag Wieers, see
-  http://groups.google.com/group/asciidoc/browse_thread/thread/f969b9ce987d7f5d).
-- Configuration files are loaded in two passes when the -e
-  command-line option is used (the same behavior as when the -e option
-  is not used). Patch submitted by haad. See
-  http://groups.google.com/group/asciidoc/browse_thread/thread/cd0f47495fd04181
-  and
-  http://code.google.com/p/asciidoc/issues/detail?id=6&q=label%3APriority-Medium
-- Documented how to include embedded fonts in an EPUB document.
-- a2x: Added `.<ext>=<mimetype>` resource specifier syntax.
-- a2x: Enable admonition icons in example EPUBs.
-- a2x: allow environment variables and tilde home directories in
-  resource manifest files.
-- a2x: don't process non-existent resource directories.
-- a2x: assume resource option is a directory if the name ends with a
-  directory separator.
-- a2x: Added a new syntax to the `--resource` option specifier which
-  allows the destination path to be specified.
-- a2x: Copy resources referenced in the OPF and resources referenced
-  by the generated HTML (in theory DocBook XSL should ensure they are
-  identical but this is not always the case e.g.
-  http://sourceforge.net/tracker/?func=detail&atid=373747&aid=2854075&group_id=21935).
-- Drop border from callout list image links.
-- html4: Moved manpage NAME section out of header so that the name
-  section is rendered when the asciidoc(1) `--no-header-footer` option
-  is specified (so that manpages processed blogpost include the NAME
-  section).
-- Vim syntax highlighter: TODO markers now appear in list items and
-  literal paragraphs and blocks.
-- Constrained quotes can now be bounded on the left by a } character.
-  See:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/b24cc3362f35b801
-- Added text-decoration roles (underline, overline, line-through,
-  blink) for xhtml11 and html5 outputs.
-
-.Bug fixes
-- *FIXED*: epubcheck 1.1 previously issued a warning for files not
-  registered in the manifest (epubcheck 1.0.5 did not). This resulted
-  in a problem compiling the adventures-of-sherlock-holmes.txt example
-  (the `underline.png` resource was not in the manifest).
-
-
-Version 8.6.4 (2011-02-20)
---------------------------
-.Additions and changes
-- Added text foreground and background color along with text size CSS
-  styles for XHTML outputs, see {website}userguide.html#X96[].
-- Vim syntax highlighter: highlight macros that start with an
-  attribute reference (a common idiom).
-- Vim syntax highlighter: highlight attribute references in macro
-  attribute lists.
-- Attribute entries can be used to set configuration markup templates.
-- Double-width East Asian characters in titles now correctly match the
-  title underline widths. Submitted by Changjian Gao (see
-  http://groups.google.com/group/asciidoc/browse_thread/thread/77f28b0dfe60d262).
-- Implemented {website}manpage.html[asciidoc(1)] filter commands, see:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/40c64cd33ee1905c
-- User's home directory now calculated in a platform independent
-  manner.
-- Added double-quote characters to French language file.  Patch
-  contributed Yves-Alexis Perez, see:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/e15282f072413940
-- Vim Syntax highlighter: Highlight closing OpenBlocks which
-  immediately follow a literal paragraph.
-- Changed UNIX `/dev/null` to OS independent `os.devnull` in filters
-  code.  Suggested by Henrik Maier:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/5ac8e8ea895147e9
-- Vim syntax highlighter: Single and double quoted text now highlights
-  correctly when preceded by an attributes list.
-- Added Ukrainian language file (`lang-uk.conf`). Added double-quote
-  characters to Russian language file.conf). Patches contributed by
-  Lavruschenko Oleksandr, see
-  http://groups.google.com/group/asciidoc/browse_thread/thread/e15282f072413940
-- Single and double quote characters are now set using the `{lsquo}`,
-  `{rsquo}`, `{ldquo}` and `{rdquo}` attributes. This makes is easy to
-  customise language specific quotes. See:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/e15282f072413940
-- Implemented 'conf-files' attribute to allow configuration files to
-  be specified in the source document. Suggested by Lex Trotman, see:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/b11066a828ab45b9
-
-.Bug fixes
-- *FIXED*: Auto-generated section title ids are now Unicode aware.
-- *FIXED*: Setting 'quotes' configuration entries using document
-  attribute entries failed if the attribute entry was not in the
-  document header.  See:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/a1dd0562dee8b939
-- *FIXED*: If the input and output file names were different then the
-  output file name was incorrectly used to synthesize 'docinfo' file
-  names. Reported by Christian Zuckschwerdt.
-- *FIXED*: An error can occur when more than one consecutive quotes
-  are defined as a blank string. Reported by Peggy Russell.
-- *FIXED*: Encoding error in automatically generated author initials.
-  Patch submitted by Xin Wang. See:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/f44615dca0b834e9
-
-
-Version 8.6.3 (2010-11-14)
---------------------------
-.Additions and changes
-- Added and 'unbreakable' option to bulleted and numbered lists
-  (thanks to Henrik Maier for this patch).
-- Added `ifeval::[]` system macro (thanks to Henrik Maier for
-  suggesting this feature).
-- The image 'scale' attribute sets the DocBook 'imagedata' element
-  'scale' attribute.  Patch submitted by Henrik Maier.
-- DocBook 'preface', 'colophon' and 'dedication' style section titles
-  now work. Based on patch submitted by Henrik Maier.
-- 'a2x': Do not inject xsltproc parameters if they were specified on
-  the command-line (parameter double-ups generate xsltproc 'Global
-  parameter already defined' errors).
-- 'a2x': Refactored xsltproc parameter injection.
-- 'a2x': articles chunked at section level by default.
-- 'attributes', 'titles' and 'specialcharacters' sections are now read
-  from the local `asciidoc.conf` file before the header is parsed.
-  This fixes a regression problem. See
-  http://groups.google.com/group/asciidoc/browse_thread/thread/1b3f88f1f8118ab3
-- Document header attributes take precedence over configuration file
-  attributes.
-- Refactored 'music', 'graphviz' and 'latex' filter configurations.
-- Refactored source filter configuration and added literal paragraph
-  source style.
-- Separated paragraph styles from paragraph syntax -- any style can be
-  applied to any syntax.
-- Added 'listing' and 'quote' paragraph styles.
-- Renamed paragraph 'default' style to 'normal'.
-- Updated `--help` option text.
-- 'a2x': The `asciidoc_opts`, `dblatex_opts`, `fop_opts` and
-  `xsltproc_opts` command-line options can be specified multiple
-  times.  This makes embedding multiple 'a2x' options in document
-  headers easier to manage and less error prone.
-- Added ASCIIMathML and LaTeXMathML support to slidy backend.
-- Pass the 'encoding' attribute to the Pygments source highlight
-  filter command.
-- 'a2x': HTML Help `.hhk` file named after AsciiDoc source file.
-- 'a2x': Added `--xsl-file` option to allow custom XSL stylesheets to
-  be specified.
-- Make builds the man pages. Patch submitted by Sebastian Pipping.  See
-  http://groups.google.com/group/asciidoc/browse_thread/thread/c21c2902c29bae64
-
-.Bug fixes
-- *FIXED*: Sometimes double backquotes were misinterpreted as inline
-  literal macros.  See:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/f510ea82a88aaee8
-- *FIXED*: Regression in 8.6.2: command-line attributes were not
-  available to the global asciidoc.conf.
-- *FIXED*: Postponed document title substitutions until backend conf
-  files have been loaded (8.6.2 regression). See
-  http://groups.google.com/group/asciidoc/browse_thread/thread/42b63ce90c2563b8
-- *FIXED*: The XSL Stylesheets customizations were preventing chapter
-  and section level TOCs from being generated when using XSL
-  Stylesheets via 'a2x'.  See
-  http://groups.google.com/group/asciidoc/browse_thread/thread/42b63ce90c2563b8
-- *FIXED*: ``UnicodeDecodeError: \'ascii' codec can't decode byte''
-  error.  This error is due to a limitation in the Python HTMLParser
-  module, see: http://bugs.python.org/issue3932
-- *FIXED*: Broken `--no-conf` option (8.6.2 regression).
-- *FIXED*: Regression in 8.6.2: configuration attribute entries set in
-  the document header may cause a 'FAILED: incomplete configuration
-  files' error.
-- *FIXED*: 'html4': corrected self closed meta tags.
-- *FIXED*: 'a2x' regression in 8.6.2: HTML Help `.hhp` file name had
-  reverted to default name instead of the AsciiDoc source file name.
-  See:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/dedc961b23e9ac56
-- *FIXED*: Attributes in man page title caused it to be dropped
-  resulting in invalid DocBook output.
-- *FIXED*: `make uninstall` now deletes the `asciidoc.1` and `a2x.1`
-  man pages.
-
-
-Version 8.6.2 (2010-10-03)
---------------------------
-.Additions and changes
-- 'docbook45': Enclosed bibliographic lists in a 'bibliodiv' -- you
-  can now include block titles with bibliographic lists.
-- Added optional 'keywords', 'description' and 'title' document header
-  meta-data attributes to HTML backends for SEO.
-- AttributeEntry values can span multiple lines with a ' +' line
-  continuation.
-- Added 'slidy' backend (based on Phillip Lord's slidy backend
-  https://phillordbio-asciidoc-fixes.googlecode.com/hg/).
-- Implemented 'OpenBlock' 'partintro' style for book part
-  introductions.
-- Comment lines substitute special characters only.
-- Backend specific global configuration files (all except
-  `asciidoc.conf`) are loaded *after* the header has been parsed --
-  virtually any attribute can now be specified in the document header.
-- 'xhtml11': Volnitsky theme: allow bulleted lists to have intervening
-  children.
-- 'xhtml11': refactored CSS font-family rules to start of file.
-- 'xhtml11': list bullets colored gray.
-- 'ifdef' and 'ifndef' system block macros accept multiple attribute
-  names: multiple names separated by commas are 'ored'; multiple
-  attribute names separated by pluses are 'anded'.
-- 'xhtml11': Volnitsky theme: set max-width on labeled lists.
-- Vim syntax highlighter: Entities inside quoted text are now
-  highlighted.
-- Added 'role' and 'id' attributes to HTML outputs generated by
-  'OpenBlocks'.
-- Allow floating titles to generate 'h1' (level 0) titles in HTML
-  outputs.
-- Added a 'start' attribute to numbered lists to set the start number.
-  See:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/c14a4c3b1e4f6dc5
-- Added two more docinfo attributes 'docinfo1' and 'docinfo2' to allow
-  and control inclusion of a shared docinfo file. See
-  http://groups.google.com/group/asciidoc/browse_thread/thread/c948697943432e24
-- Vim syntax highlighter highlights multi-name conditional attributes.
-- LaTeX backend patch submitted by Andreas Hermann Braml (see
-  http://groups.google.com/group/asciidoc/browse_thread/thread/1c415fc4540ce5e5).
-- Implemented 'backend aliases'; renamed `docbook.conf` to
-  `docbook45.conf` and aliased 'docbook45' backend to 'docbook';
-  aliased 'xhtml11' to 'html'.
-
-.Bug fixes
-- *FIXED*: Filter commands located in filter directories local to the
-  source document that where not in the search 'PATH' where not found.
-- *FIXED*: Volnitsky theme: Verseblock font set normal instead of
-  monospaced.
-- *FIXED*: 'xhtml11': Callout icons were not rendered as Data URIs
-  when 'icons' and 'data-uri' attributes were specified.
-- *FIXED*: Long standing bug: nested include macros did not restore
-  the parent document 'infile' and 'indir' attributes. See:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/8712a95e95a292a7
-- *FIXED*: 'html4': set preamble ID anchor.
-- *FIXED*: 'xhtml11': dropped unusable 'id' and 'role' attributes from
-  preamble template.
-- *FIXED*: Bug in multi-name conditional attributes e.g. `{x,y#}`
-  fails if x or y is undefined.
-- *FIXED*: latex filter not being installed by Makefile. Thanks to
-  Grant Edwards for this patch. See
-  http://groups.google.com/group/asciidoc/browse_thread/thread/c4427a3902d130a8
-- *FIXED*: 'a2x': Long-standing bug in a2x which always passes
-  `--string-param navig.graphics 0` to 'xsltproc', regardless of
-  whether icons are enabled or not.  Reported by Michael Wild:
-  http://groups.google.com/group/asciidoc/browse_thread/thread/59a610068e4acb58
-
-
-Version 8.6.1 (2010-08-22)
---------------------------
-.Additions and changes
-- 'a2x': `--resource-dir` option renamed to `--resource`.
-- 'a2x': `--resource` option accepts both file and directory names.
-- 'a2x': Added `-m,--resource-manifest` option.
-- Added Vim syntax highlighting for quote attribute lists.
-- Load 'asciidoc.conf' from all configuration directories before any
-  other configuration files. This ensures that attributes used for
-  conditional inclusion are set before backend configuration files are
-  processed. Previously if you wanted to control global conf file
-  inclusion your only choice was to modify the global 'asciidoc.conf'
-  file.
-- AsciiDoc 'Quote element' attributes have been simplified and
-  generalized -- positional color and size attributes and named 'role'
-  attribute have been replaced by a single positional attribute.
-
-.Bug fixes
-- *FIXED*: 'testasciidoc.py': `BACKEND` command argument was being
-  ignored.
-- *FIXED*: Broken 'docinfo' file functionality in 'html4' and
-  'xhtml11' backends (previously the docinfo file was included in
-  the 'body' instead of the 'header').
-
-Regression issues
-~~~~~~~~~~~~~~~~~
-This release breaks compatibility with quoted element positional color
-and size attributes (HTML backends). To revert to the deprecated quote
-behavior define the 'deprecated-quotes' attribute in the global
-`asciidoc.conf` file or on the command-line.  For a more detailed
-explanation of the rationale behind this change see
-http://groups.google.com/group/asciidoc/browse_thread/thread/b22603bfb879418c.
-
-
-Version 8.6.0 (2010-08-16)
---------------------------
-.Additions and changes
-- The AsciiDoc distribution can now be built ``out of the box''
-  from the distribution tarball or the Mercurial repository
-  (provided you have the requisite build applications installed).
-- The global configuration files directory is ignored by both
-  'asciidoc' and 'a2x' if AsciiDoc configuration files are installed
-  in the same directory as the asciidoc executable.  This change
-  allows both a system wide copy and multiple local copies of AsciiDoc
-  to coexist on the same host PC.
-- CSS 'quirks' mode is no longer the default 'xhtml11' output
-  (http://groups.google.com/group/asciidoc/browse_thread/thread/1c02d27d49221aa2).
-- Relaxed anchor ID name syntax
-  (http://groups.google.com/group/asciidoc/browse_thread/thread/5f3e825c74ed30c).
-- Added document files: `doc/epub-notes.txt`,
-  `doc/publishing-ebooks-with-asciidoc.txt`.
-- 'a2x': If all other resource locations are exhausted then recursively
-  search directories named 'images' and 'stylesheets' in the
-  'asciidoc' configuration files directory.
-- 'a2x': options can also be set in the AsciiDoc source file. If the
-  source file contains a line beginning with '// a2x:' then the
-  remainder of the line will be treated as a2x command-line options.
-- Added dblatex table-width processing instruction -- tables generated
-  by dblatex now observe the AsciiDoc table width as a percentage
-  (thanks to Gustav Broberg for suggesting this enhancement).
-- 'a2x': Don't exit if the `--epubcheck` option is set and 'epubcheck'
-  is missing, issue warning and continue.
-- Added a global 'plaintext' attribute for dealing with large amounts
-  of imported text.
-- The author name format has been relaxed, if the the author does not
-  match the formal specification then it is assigned to the
-  'firstname' attribute (previously asciidoc exited with an error
-  message).
-- FAQ and documentation updates.
-- Refactored chunked.xsl and epub.xsl files.
-- Exchanged article.epub for more relevant book.epub on website.
-- Put asciidoc.epub User Guide on website.
-- 'a2x': Chunking EPUB and HTML outputs set to a per chapter basis and
-  the first chapter is separate from preceding contents.
-- Changed dates format in example article and books to suppress EPUB
-  validation error.
-- Added 'style' and 'role' CSS classes to xhtml11 section templates.
-- Added the 'role' element to xhtml11 backend block templates.
-- Suppressed md5 module deprecation warning from music and Graphviz filters.
-- Pygments (http://pygments.org/) option added to source code
-  highlight filter.  Based on Pygments source code filter written by
-  David Hajage
-  (http://groups.google.com/group/asciidoc/browse_thread/thread/d8d042f5a3021369/8934ebbb8cb7144b).
-- xhtml11: Added a new theme (volnitsky). Written and contributed by
-  Leonid V. Volnitsky.
-- xhtml11: Set body element class name to document type.
-- Added refentryinfo element and contents (including revdate) to man
-  page DocBook output. Man pages are now dated using the revdate
-  attribute value if it has been defined.  Based on patch supplied by
-  Rainer Muller
-  http://groups.google.com/group/asciidoc/browse_frm/thread/319e5cd94493e330/3fcb83fab067af42.
-- Added `{template:...}` system attribute.
-- Table of contents attribute 'toc' can now be specified in the
-  document header.
-- Reimplemented music and latex filter -m option functionality when
-  the input is stdin using MD5 checksums.
-- Added 'latex' filter.
-- Added auto file name generation to image generating filters
-  (latex,music, graphviz).
-- Added `counter2` and `set2` system attributes (to implement image
-  auto file name generation).
-- Undefined attribute in filter command generates error but does not
-  exit.
-- Attribute substitution proceeds from start line to end line
-  (previously was in reverse order which was really confusing).
-- Tidied up music filter code:
-  * Format option is optional and default to 'abc' unless Lilypond
-    notation detected.
-  * The -m option does not apply to stdin input.
-- Added paragraph styles to music and graphviz filters.
-- Documented dynamic template names.  753: Graphviz filter can now
-  generate SVG format images. Patch submitted by Elmo Todurov, see:
-  http://groups.google.com/group/asciidoc/browse_frm/thread/fe9b33d8f5f1e0af
-  The xhtml11 SVG Graphviz template marked EXPERIMENTAL. No SVG
-  support for other backends.
-- AsciiDoc template names can now contain embedded attribute
-  references.
-- Added 'legalnotice' tag to `doc/article-docinfo.xml` example.
-- xhtml11 backend: Callouts and callout lists display callout icons
-  when the 'icons' attribute is defined. See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/8eda3ea812968854
-- Document attribute names are case insensitive everywhere, this makes using
-attribute entries more consistent e.g. previously :VERS: had to be refered to
-with {vers} ({VERS} did not work).
-- Hungarian translation of footer-text (submitted by Miklos Vajna).
-  See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/7174cb7598993c72#
-- asciidocapi.py 0.1.2: Can now load AsciiDoc script named asciidoc.
-  See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/66e7b59d12cd2f91
-  Based on patch submitted by Phillip Lord.
-- German translation of footer-text (submitted by Simon Ruderich). See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/7174cb7598993c72
-- Pushed HTML footer text into language conf files with the
-  introduction of a [footer-text] configuration file template section.
-  See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/7174cb7598993c72
-
-.Bug fixes
-- *FIXED*: Sometimes multiple double quoted text elements in the same
-  paragraph were mistakenly seen as starting with an inline literal.
-  See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/219c86ae25b79a21
-- *FIXED*: 'localtime' and 'doctime' attributes calculated incorrect
-  daylight saving / non daylight saving timezones and consequently so
-  did HTML footers.  Patch submitted by Slawomir Testowy. See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/af652507caf6cec9
-- *FIXED*: Missing selector for 'List of examples' title in DocBook
-  CSS file. Patch submitted by Laurent Laville. See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/3f96900f7fbf5620
-- *FIXED*: Broken accents in lang-hu.conf. See:
-  http://groups.google.com/group/asciidoc/browse_frm/thread/7174cb7598993c72
-- *FIXED*: DocBook XSL generated HTML callout lists are properly
-  aligned.  Submitted by Lionel Orry. See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/2ff802547b6a75ea
-- *FIXED*: Filter execution now occurs prior to filter markup template
-  substitution to ensure image data URI encoding happens after image
-  generation (see
-  http://groups.google.com/group/asciidoc/browse_thread/thread/14e8fcb289a135b).
-- *FIXED*: The section numbers no longer increment when the 'numbered'
-  attribute is undefined (see
-  http://groups.google.com/group/asciidoc/browse_thread/thread/faa36e9e5c7da019/d24cab3fe363e58d).
-
-
-Version 8.5.3 (2010-01-18)
---------------------------
-.Additions and changes
-- a2x: Added a2x configuration file options ASCIIDOC_OPTS,
-  DBLATEX_OPTS, FOP_OPTS, XSLTPROC_OPTS (appended to same-named
-  command-line options). See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/ac4b9bfa2116db28
-- Dropped `.hgignore` from the repository. See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/c17abd175778f5ea
-- Don't pass verbose options to asciidoc table filter so that
-  asciidocapi messages are not discarded. See:
-  http://groups.google.com/group/asciidoc/browse_frm/thread/c17abd175778f5ea
-- Added `./tests/data/lang-pt-BR-test.txt` file to the repository.
-- xhtml11: Verse block and verse paragraph content enveloped in a
-  'pre' tag (instead of a 'div') so it renders better in text-only
-  browsers. See:
-  http://groups.google.com/group/asciidoc/browse_frm/thread/1b6b66adb24e710
-- User Guide: Clarified Passthrough Blocks (suggested by Simon
-  Ruderich).
-- FAQ: 'How can I include lines of dashes inside a listing block?'
-- FAQ errata and updates (submitted by Simon Ruderich).
-- User Guide errata.
-- Simplified 'asciidoc-toc' processing instruction and included lists
-  of figures, tables, examples and equations in books (i.e. revert to
-  pre-8.5.0 behavior).
-- Attempted to have dblatex recognise the 'asciidoc-toc' processing
-  instruction but couldn't get it to work.
-- Added 'notitle' attribute to allow the document title to be hidden.
-
-
-.Bug fixes
-- *FIXED*: Regression: system attribute escaping did not work.
-- *FIXED*: Website: broken image links in chunked User Guide.
-
-
-Version 8.5.2 (2009-12-07)
---------------------------
-.Additions and changes
-- Updated example article and book documents with the recommended
-  explicit section name syntax (see  the 'Special section titles
-  vs. explicit template names' sidebar in the AsciiDoc 'User Guide').
-- Added Italian language configuration file (contributed by Fabio
-  Inguaggiato).
-- Added 'header' table style. See:
-  http://groups.google.com/group/asciidoc/browse_frm/thread/a23fea28394c8ca9
-- Pass 'icons', 'data-uri', 'imagesdir', 'iconsdir' attributes to
-  'asciidoc' table style filter so that images are rendered in table
-  cells.
-- Pass 'trace' and 'verbose' attributes to 'asciidoc' table style
-  filter so diagnostic information is printed from table cell source.
-- The 'eval' system attribute can be nested inside other system
-  attributes.
-- HTML outputs: Table and figure caption punctuation set to more usual
-  syntax.
-- docbook backend: footnotes can now contain embedded images.  See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/50b28f6941de111a
-- CSS tweaks so that tables processed by DocBook XSL Stylesheets have
-  the default asciidoc xhtml11 backend styling.  See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/dfe5204d5b2c9685
-- Block titles take precedence over section titles to avoid titled
-  delimited blocks being mistaken for two line section titles (see
-  http://groups.google.com/group/asciidoc/browse_frm/thread/f0b6f9989f828c3).
-- Section title trace displays level and title text.
-- FAQ additions.
-- Added `{zwsp}` (zero width space) attribute.
-- Undefined paragraph styles are reported (previously threw a runtime
-  error).
-- Eliminated empty preamble generation.
-- Floating titles now processed in all contexts.
-- Implemented auto-lettered appendix names and updated example
-  documents.
-- Section numbering can be disabled in HTML outputs with a
-  ':numbered!:' AttributeEntry.
-- xhtml11: Nicer default quote block styling.
-- Exclude floating titles from xhtml11 table of contents. Patch
-  submitted by Mark Burton (see
-  http://groups.google.com/group/asciidoc/browse_frm/thread/14aefc1cb6bd85f5).
-- Enhanced `doc/article-docinfo.xml` example docinfo file.
-- Vim syntax highlighter improvements.
-
-.Bug fixes
-- *FIXED*: Absolute 'imagesdir' and 'iconsdir' attribute  path names
-  do not work with the xhtml11 data-uri encoding. See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/cb8b7694bbc82a6
-- *FIXED*: Regression issue with inline data-uri images. See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/cb8b7694bbc82a6
-- *FIXED*: An unexpected error occurred when processing a table
-  containing CSV data if the 'cols' attribute was not explicitly
-  specified. See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/4b0f364b477ec165
-
-
-Version 8.5.1 (2009-10-31)
---------------------------
-.Additions and changes
-- If an AsciiDoc document file begins with a UTF-8 BOM (byte order
-  mark) then it is passed transparently through to the output file.
-  The BOM is stripped from included files.  See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/e5e61823ff4203cd
-- Added AsciiDoc 'role' attribute to quoted text. Sets 'class'
-  attribute in HTML outputs; 'role' attribute in DocBook outputs. See:
-  http://groups.google.com/group/asciidoc/browse_frm/thread/2aa3e5711d243045
-- Conditional attribute syntax extended: they now accept multiple ORed
-  or ANDed attribute names.
-- The 'xhtml11' backend dynamically processes footnotes using
-  JavaScript.
-- Tidied up and namespaced 'xhtml11' JavaScript.
-- Superceded `javascripts/toc.js` with `javascripts/asciidoc-xhtml11.js`.
-- Added 'disable-javascript' attribute ('xhtml11' backend).
-- Styled HTML footnotes.
-- Added links to HTML footnote refs.
-- Added title attribute to inline image macros to display popup
-  ``tooltip'' (HTML outputs only).
-- Single-quoted attribute values are substituted in block macros (just
-  like the AttributeList element).
-- For consistency changed underscores to dashes in attribute names.
-  Public attributes with underscores retained for compatibility.
-- Added Brazilian Portuguese language configuration file (contributed
-  by Thiago Farina).
-- Added 'leveloffset' attribute to make it easier to combine
-  documents.
-
-.Bug fixes
-- *FIXED:* a2x: `--dblatex-opts` is now processed last so
-  `asciidoc-dblatex.xsl` params can be overridden. Patch submitted by
-  Mark Fernandes (see
-  http://groups.google.com/group/asciidoc/browse_frm/thread/5215c99dcc865e7d).
-- *FIXED:* An error occurred if a directory in current path with same
-  name as executable.
-
-Regression issues
-~~~~~~~~~~~~~~~~~
-There's been quite a bit of tiding up to the xhtml11 JavaScript. The
-most obvious change is that the toc.js script has been superceded by
-asciidoc-xhtml11.js so if you're linking you'll need get a copy of
-the new file from the distribution javascripts directory.
-
-If you use customised xhtml11 configuration file `[header]` and
-`[footer]` sections and you want them to use the new footnotes feature
-then you've got a bit more work to do:
-
-. The onload event expression changed.
-. The new `<div id="content">...</div>` div envelopes document
-  content.
-. You need to add `<div id="footnotes">...</div>` div to the
-  `[footnotes]` section for footnotes to work.
-. Drop the `ifdef::toc[]` macro that surround JavaScript inclusion.
-
-Take a look at the [header] and [footer] changes in the xhtml11.conf
-diff to see what's going on:
-http://hg.sharesource.org/asciidoc/diff/55a5999bfd04/xhtml11.conf
-
-
-Version 8.5.0 (2009-10-04)
---------------------------
-.Additions and changes
-- Implemented a 'float' attribute for tables and block images (HTML
-  outputs only).
-- Added `unfloat::[]` block macro to cancel floating.
-- Added table 'align' attribute to (HTML outputs only).
-- The image 'align' attribute now works with HTML backends.
-- Renamed table cell 'align' attribute to 'halign' so it doesn't clash
-  with the new table 'align' attribute.
-- Added 'breakable' and 'unbreakable' options to AsciiDoc example and
-  block image elements.
-- `[miscellaneous]` section entries now update properly when set from
-  a document 'AttributeEntry'.
-- `[miscellaneous]` section `pagewidth` entry accepts fractional
-  values.
-- Fractional column widths are now calculated correctly when using
-  fractional 'pageunits' (DocBook tables).
-- Use DocBook XSL table width processing instructions.
-- asciidoc 'KeyboardInterrupt' exits with error code 1.
-- Added 'set' system attribute to  allow attributes to be set from
-  configuration file templates.
-- Allow constrained quotes to be bounded on the left by a colons and
-  semicolons, see
-  http://groups.google.com/group/asciidoc/browse_frm/thread/b276a927fdc87995
-- Titled listing and literal blocks (DocBook outputs) no longer default
-  to examples. See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/f4df7c9eec01a9bd
-- Updated language file table, figure and example captions to
-  accommodate new auto-numbering in html4 and xhtml11 backends.
-- Titled source highlight filter listings generated by docbook backend
-  are now rendered as examples. See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/f4df7c9eec01a9bd
-- Implemented 'counter' system attribute.
-- Use 'counter' system attributes to number titled tables and block
-  images in HTML backends.
-- Added program name suffix to console messages.
-- Added substitution to the 'AttributeEntry' passthrough syntax, this
-  replaces the now unnecessary 'attributeentry-subs' attribute.
-- Allow passthrough inline macro syntax to be used in
-  'AttributeEntrys'.
-- Reinstated 8.4.4 default 'lang' attribute behavior. See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/d29924043e21cb6a.
-- Added 'max-width' attribute to the 'xhtml11' backend to set maximum
-  display width. See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/74d9a542b79ccd50.
-- Added 'a2x.py', a rewritten and much enhanced version of the old
-  'a2x' bash script.
-- The new 'a2x' can output EPUB formatted documents.
-- Added `--safe` option and deprecated `--unsafe` option. Patch
-  submitted by Todd Zullinger. See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/ea3a8ea399ae5d2a
-  and
-  http://groups.google.com/group/asciidoc/browse_frm/thread/69b3183fdab7c6a5
-- Added 'CHECK' and 'TEST' todo highlight words to Vim syntax
-  highlighter.
-- Line breaks, page breaks, and horizontal rulers are now processed by
-  dblatex, thanks to a patch submitted by Mark Fernandes
-  (http://groups.google.com/group/asciidoc/browse_frm/thread/a254cf949ea7c6c5).
-- Allow footnote macros hard up against the preceding word so the
-  rendered footnote mark can be placed against the noted text without
-  an intervening space (patch submitted by Stas Bushuev,
-  http://groups.google.com/group/asciidoc/browse_frm/thread/e1dcb7ee0efc17b5).
-- Normalized path in `safe_filename` function (submitted by Todd
-  Zullinger,
-  http://groups.google.com/group/asciidoc/browse_frm/thread/69b3183fdab7c6a5).
-- The Asciidoc 'numbered' and 'toc' attributes cause DocBook outputs
-  to include `asciidoc-numbered` and `asciidoc-toc` processing
-  instructions, these are used by DocBook XSL to include section
-  numbering and table of contents (like Asciidoc HTML backends). For
-  backward compatibility both 'numbered' and 'toc' attributes are
-  defined by default when the 'docbook' backend is used.  See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/1badad21ff9447ac.
-- 'data-uri' attribute is now evaluated dynamically and can be set in
-  document body (previously could only be set from command-line).
-- Added 'sys3' and 'eval3' system attributes to passthrough generated
-  output, this fixes the data-uri inline image problem:
-  http://groups.google.com/group/asciidoc/browse_frm/thread/a42db6bc54c2c537.
-- Missing language file generates a warning instead of an error.
-- Updated Spanish language file (updates contributed by Gustavo Andrés
-  Gómez Farhat).
-
-.Bug fixes
-- *FIXED:* Options in an 'AttributeList' option attribute are merged
-  with (rather than replace) configuration file options.
-- *FIXED:* Comment blocks and comment block macros no longer consume
-  preceding block titles and attribute lists.
-- *FIXED:* `examples/website/layout1.conf` and
-  `examples/website/layout2.conf` TOC problem.  Submitted by Mark
-  (burtoogle).  See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/b9c63be67dd1d11c
-- *FIXED:* Only the first occurrence of passthrough macro was
-  substituted.  Patch submitted by  Peter Johnson. See
-  http://groups.google.com/group/asciidoc/browse_frm/thread/1269dc2feb1a482c
-- *FIXED:* asciidoc now runs on Jython 2.5.0.
-- *FIXED:* Wordpress margins and pads in a number of block
-  elements
-  (http://groups.google.com/group/asciidoc/browse_frm/thread/36ff073c79cbc20a).
-
-Regression issues
-~~~~~~~~~~~~~~~~~
-- Tables generated by 'dblatex' occupy 100% of the available space
-  regardless of the 'width' attribute setting. To restore width
-  behavior change the 'pageunits' miscellaneous parameter to 'pt'. You
-  can do this from the command-line with the `-a pageunits=pt` option.
-  See {website}userguide.html#X89[DocBook table widths].
-
-
-Version 8.4.5 (2009-05-24)
---------------------------
-.Additions and changes
-- Added manpage 'Name' and 'Synopsis' section title customization to languages
-  configuration files.
-- Synopsis manpage section no longer mandatory.
-- Section markup templates can be specified by setting the title's
-  first positional attribute or 'template' attribute.
-- The article and book document header can now include a revision
-  remark.
-- A 'role' attribute can now be applied to block elements. This adds
-  the 'role' attribute to DocBook elements. Patch submitted by
-  http://groups.google.com/group/asciidoc/browse_thread/thread/62278a054188a038[Noah
-  Slater]).
-- Renamed 'revision' and 'date' attributes to more sensible and consistent
-  'revnumber' and 'revdate' (old names deprecated but still
-  recognized).
-- Moved backend specific attributes to Appendix H in User Guide.
-- Renamed and generalized the docbook backend revision history
-  inclusion mechanism to 'docinfo' to reflect the use of all article
-  or book information elements. The old revision history names still
-  work but have been deprecated.
-- Refactored docbook.conf headers.
-- Moved line break replacement from `[replacements]` to
-  `[replacements2]` so the replacement occurs after the mailto macro.
-  This fixes bug
-  http://groups.google.com/group/asciidoc/browse_thread/thread/4bdcdfb0af773e2
-- The typewriter to punctuation apostrophe replacement can be escaped
-  with a backslash.
-- Graphviz filter outputs images to 'imagesdir' if it is defined.
-- Made the block image macro generic so that it can be used for filter
-  outputs. As a result Music and Graphviz filters:
-  * Have been greatly simplified.
-  * Honor the 'data-uri' attribute.
-  * 'html4' outputs no longer generate W3C validation warning.
-- The 'iconsdir' attribute no longer requires a trailing directory
-  separator character.
-- Removed borders around linked html4 images.
-- Added 'html4' specific HTML output for music filter.
-- 'a2x': Added `--unsafe` option (shortcut for
-  `--asciidoc-opts=--unsafe`).
-- 'a2x': The FOP executable can now be named `fop` (this is the
-  default name in some distributions).
-- Attributes are now substituted in the system macro attribute list.
-- If the output is set to stdout (i.e. no output directory is defined)
-  then Music and Graphviz filters will output included images to the
-  source file directory.
-- Added 'name' directive to 'testasciidoc'.
-- Added lots of 'testasciidoc' new tests.
-- Moved language specific configuration parameters into `lang-en.conf`
-  file.
-- 'lang' attribute entry can be specified in the AsciiDoc source file
-  (preceding the header).
-- Removed cruft from A-A-P scripts and documented them.
-- Added German language config file (`lang-de.conf`) contributed by
-  Michael Wild.
-- Added French language config file (`lang-fr.conf`) contributed by
-  Yves-Alexis Perez.
-- Added Russian language config file (`lang-ru.conf`) contributed by
-  Artem Zolochevskiy.
-- Added Hungarian language config file (`lang-hu.conf`) contributed by
-  Miklos Vajna.
-
-.Bug fixes
-- *FIXED:* Multiple manpage names are now handled correctly when
-  generating DocBook output, each name now generates a separate
-  DocBook `<refname>` element. See
-  http://groups.google.com/group/asciidoc/browse_thread/thread/c93bb4db025225d8
-- *FIXED:* A problem that caused AttributeEntries preceding the header
-  to be overwritten when the language conf file loaded.
-- *FIXED:* Possible inline macro name ambiguity e.g. link matches olink.
-- *FIXED:* The documented macro definition deletion behavior had been
-  broken for a long time.
-- *FIXED:* Email addresses not recognized when followed by a period
-  character.
-- *FIXED:* Hyphens in mailto macros can delimit nested addresses e.g.
-  \bloggs at mail was processed inside
-  \mailto:joe-bloggs at mail-server.com[Mail].
-- *FIXED:* User name in FTP URI generated incorrect FTP link. See
-  http://groups.google.com/group/asciidoc/browse_thread/thread/1d796a9c9ddb2855
-- *FIXED:* Source highlighter now works with Wordpress backend (see
-  http://groups.google.com/group/asciidoc/browse_thread/thread/6d8c716748b109e3).
-
-[[X2]]
-Regression issues
-~~~~~~~~~~~~~~~~~
-. A colon following the date in the AsciiDoc header is treated as a
-  revision remark delimiter -- this could be an issue if you have used
-  a colon in the header date.
-
-
-Version 8.4.4 (2009-04-26)
---------------------------
-.Additions and changes
-- Added table column and row spanning.
-- Table styles can now be applied per cell.
-- Vertical cell alignment can be applied to columns and individual
-  cells.
-- Added table 'align' attribute to set horizontal alignment for entire
-  table.
-- Included Geoff Eddy's update of the experimental LaTeX backend.
-- A new attribute named 'trace' controls the output of diagnostic
-  information. If the 'trace' attribute is defined then
-  element-by-element diagnostic messages detailing output markup
-  generation are printed to stderr.
-- Added 'literal' paragraph style (allows 'literal' style to be
-  applied to normal paragraphs).
-- Deleted unused `replacements2` from `xhtml11.conf`.
-- Added `replacements2` to default substitutions.
-- 'testasciidoc.py': messages to 'stdout', only diffs to 'stderr'.
-- Added transparency to `smallnew.png` image.
-
-.Bug fixes
-- All combinations of leading comments and attribute entries at the
-  start of a document are now skipped correctly.
-- *FIXED:* `./configure` doesn't support `--docdir` as expected (patch
-  submitted by Artem Zolochevskiy)
-- *FIXED:* Constrained quotes were incorrectly matched across line
-  boundaries e.g. the string `+\nabc+` incorrectly matched a monospace
-  quote.
-
-
-Version 8.4.3 (2009-04-13)
---------------------------
-.Additions and changes
-- DocBook outputs default to DocBook version 4.5 doctype (previously
-  4.2).
-- Configuration file `[specialsections]` definitions can be undefined
-  by setting their configuration entry values blank.
-- The Makefile 'install' target depends on the 'all' target to ensure
-  pre-install patches are applied.
-- 'testasciidoc.py' now emits user friendly messages if:
-  . the configuration file is missing.
-  . an illegal backend is specified.
-  . an illegal test number is specified.
-
-.Bug fixes
-- Fixed
-  http://groups.google.com/group/asciidoc/browse_thread/thread/fd27add515597c06[missing
-  template section] error.
-- The 'testasciidoc.py' `--force` option no longer deletes test data
-  files that were not specified.
-- Dropped second quotes substitution in table cells -- it had
-  effectively disabled quote escaping in table cells.
-
-
-Version 8.4.2 (2009-03-19)
---------------------------
-.Additions and changes
-- Added {website}testasciidoc.html[testasciidoc], a tool to verify
-  AsciiDoc conformance.
-- A warning is issued if nested inline passthroughs are encountered.
-- 'asciidocapi': setting an attribute value to `None` will undefine
-  (delete) the attribute (this in addition to the `name!` attribute
-  name format that the `asciidoc(1)` command uses).
-
-.Bug fixes
-
-
-Version 8.4.1 (2009-03-10)
---------------------------
-.Additions and changes
-- AsciiDoc now has a {website}asciidocapi.html[Python API].  The
-  following minimal example compiles `mydoc.txt` to `mydoc.html`:
-+
-[source,python]
--------------------------------------------------------------------------------
-from asciidocapi import AsciiDocAPI asciidoc = AsciiDocAPI()
-asciidoc.execute('mydoc.txt')
--------------------------------------------------------------------------------
-
-- Backtick quoting for monospaced text is now implemented as an
-  'inline literal' passthrough.  This makes more sense since monospace
-  text is usually intended to be rendered literally. See
-  <<X2,Regression issues>> below for the impact this may have on
-  existing documents.  Here are some examples that would previously
-  have had to be escaped:
-
-  The `++i` and `++j` auto-increments.
-  Paths `~/.vim` and `~/docs`.
-  The `__init__` method.
-  The `{id}` attribute.
-
-- Added `--doctest` option to `asciidoc(1)` command.
-- Added an optional second argument to 'BlockId' element, this sets
-  the `{reftext}` attribute which in turn is used to set the `xreflabel`
-  attribute in DocBook elements.
-- Added lists to `--help` syntax summary.
-- `{infile}` and `{indir}` attributes reflect the current input file
-  (previously always referred to the root document).
-- `{docfile}` (new) and `{docdir}` (previously deprecated) attributes
-  refer to the root document specified on the `asciidoc(1)`
-  command-line.
-- Vim syntax highlighter improvements.
-- Syntax summary command (`asciidoc -h syntax`) additions.
-- Admonition icons now have transparent backgrounds.
-- Changed yellow W3C badges to blue ones in page footers.
-
-.Bug fixes
-- Dropped `asciidoc(1)` broken undocumented `--profile` option.
-- Em dash replacement now recognized at start of block.
-
-Regression issues
-~~~~~~~~~~~~~~~~~
-Replacing backtick quoting with the 'inline literal' passthrough
-raises two regression scenarios for existing documents:
-
-1. You have escaped the expansion of enclosed inline elements, for
-   example: `\{id}`.  You would need to delete the backslashes: `{id}`
-   (if you don't the backslashes will be printed). Mostly it's just a
-   case of interactively finding and replacing of all occurrences of
-   `\.
-
-2. There are enclosed inline elements, for example: `some *bold*
-   monospaced`.  You would need to switch to plus character monospace
-   quoting: `+some *bold* monospaced+` (if you don't the enclosed
-   elements won't be expanded).
-
-If your existing documents include these cases and you don't want to
-upgrade then use the `-a no-inline-literal` command-line option,
-alternatively put this in `~/.asciidoc/asciidoc.conf`:
-
-  [attributes]
-  no-inline-literal=
-
-
-Version 8.3.5 (2009-02-02)
---------------------------
-.Additions and changes
-- Cached compiled regular expression delimiters (speed up 'User
-  Manual' compilation by 250%).
-- Created distinct list definitions for each numbered list style to
-  allow nesting of all styles.
-- Roman numbers in numbered lists are followed by a closing
-  parenthesis instead of a period to eliminate 'i', 'v', 'x' item
-  ambiguity with respect to alpha numbered list items.
-- Added `**`, `***`, `****`, `*****`
-  bulleted lists.
-- Added `...`, `....`, `.....` implicit numbered
-  lists.
-- Added `:::`, `::::` labeled lists.
-- Updated User Guide for new list syntaxes.
-- Optimized paragraph and list termination detection with separate
-  precompiled regular expressions for performance and to prevent
-  reaching Python 100 named group limit.
-- Updated Vim syntax highlighter for new list syntaxes.
-- Allow `template::[]` macros in conf file entries sections (not just
-  in template sections).
-- Dropped unused `[listdef-numbered2]` conf file sections.
-- Renamed 'ListBlock' to more appropriate 'OpenBlock'.
-- Implemented single-line versions of `ifdef::[]` and `ifndef::[]`
-  macros.
-- 'html4' backend styling:
-  * Underlined admonition captions.
-  * Added side border to Example Blocks.
-- 'xhtml11' backend styling:
-  * Dropped right hand margin from all but quote and verse blocks.
-  * html4 backend: corrected over-sized width of caption in admonition
-    block.
-
-.Bug fixes
-- Fixed broken numbered list nesting.
-
-Compatibility issues
-~~~~~~~~~~~~~~~~~~~~
-The roman numbered list parenthesis syntax is incompatible with the
-potentially ambiguous roman period syntax introduced in 8.3.2.
-
-
-Version 8.3.4 (2009-01-20)
---------------------------
-.Additions and changes
-- Implemented a title 'float' style.  A floating title (or bridgehead)
-  is rendered just like a normal section but is not formally
-  associated with a text body and is not part of the regular section
-  hierarchy so the normal ordering rules do not apply.
-- Implemented inline comment macro so comment lines can now appear
-  inside block elements.
-- Comment lines are sent to the output if the 'showcomments' attribute
-  is defined (comment blocks are never sent to the output).
-- Single quoting attribute values in 'AttributeList' elements causes
-  them to be substituted like normal inline text (without single
-  quoting only attribute substitution is performed).
-- Rewrote list item processing (was very crufty). List continuation
-  and list blocks now work as expected. Updated and clarified list
-  documentation in User Guide.
-- The 'revision' attribute now recognizes the RCS $Id$ marker format.
-- An RCS $Id$ marker formatted revision line in the header does not
-  need to be preceded by an author line.
-- If an RCS $Id$ formatted revision is specified and the author name
-  has not already been set then the author name in the $Id$ marker
-  will be used.
-- Updated Gouichi Iisaka's Graphviz filter to version 1.1.3.
-- Added 'autowidth' table attribute option for (X)HTML outputs.
-- DocBook backend now puts 'orgname' optional attribute in DocBook
-  header.
-- Deprecated undocumented 'companyname' attribute in favor of
-  DocBook's 'corpname'.
-- Removed explicit closing backslash from HTML4 self-closing tags to
-  comply with WC3 recommendation.
-
-.Bug fixes
-- Fixed 8.3.3 regression whereby adjacent lists with the same syntax
-  but different list styles were incorrectly treated as a single list.
-
-
-Version 8.3.3 (2009-01-02)
---------------------------
-This release supersedes 8.3.2.
-
-.Bug fixes
-- The broken and confusing numeration and numeration2 numbered list
-  attributes have been dropped, use the style attribute instead.
-
-
-Version 8.3.2 (2009-01-01)
---------------------------
-.Additions and changes
-- Added Gouichi Iisaka's Graphviz filter to distribution.
-- The 'SidebarBlock' element can now be rendered with an 'abstract'
-  style.
-- Reorganized filters into a separate subdirectory for each filter.
-- Updated `Makefile.in` and `MANIFEST` files to reflect new filters
-  organization.
-- Added 'listing' style to 'LiteralBlock' element so listings with
-  nested listing blocks can be rendered as a listing block.
-- Changed example 'code' filter to use preferred 'ListingBlock' syntax
-  (the old `~` delimited filter syntax is no longer used).
-- Implemented 'enumeration' and 'enumeration2' numbered list
-  attributes for specifying the list numbering style ('arabic',
-  'loweralpha', 'upperalpha', 'lowerroman' and 'upperroman').
-- AsciiDoc now recognizes 'upperalpha', 'lowerroman' and 'upperroman'
-  numbers in `listdef-numbered2` numbered lists and sets the number
-  style based on the style of the first numbered list item
-  (alternative to setting 'enumeration2' attribute).
-- Updated `formatlistpat` definition in `.vimrc` example in User
-  Guide.
-- You can now backslash escape system block macros.
-- Added 'Pychart' FAQ.
-- Drop paragraph 'text' and list 'text', 'index' and 'label' match
-  groups from attributes -- they are included in the element's text
-  and we don't want them processed a second time as attributes.
-- Changed comment line block macro to a passthrough block macro to
-  ensure no substitutions.
-- A 'subslist' no longer has to be appended to a 'PassthroughBlock'
-  macro definition, if omitted no substitutions are performed.
-- Code tidy up: replaced deprecated `<>` operator with `!=`.
-- Removed unused linuxdoc code.
-- Code tidy ups: dropped old types module reference; replaced
-  `has_key()` with preferred `in` operator.
-
-.Bug fixes
-- Old syntax source highlight filter regression: special characters
-  where not escaped in DocBook outputs.
-
-
-Version 8.3.1 (2008-12-14)
---------------------------
-.Additions and changes
-- Replaced the `install.sh` script with Ben Walton's updated autoconf
-  scripts -- see {website}INSTALL.html[INSTALL] for details.
-- Added a generalized 'AttributeEntry' syntax to allow arbitrary
-  configuration file entries to be set from within an AsciiDoc
-  document (suggested by Henrik Maier).
-- Listing delimited blocks in DocBook outputs now support IDs; IDs of
-  titled Listing and Literal delimited blocks have been moved to the
-  enclosing DocBook example tag (thanks to Vijay Kumar for this
-  patch).
-- Replaced vertical typewriter apostrophe with punctuation apostrophe
-  (thanks to Noah Slater).
-
-.Bug fixes
-- Regression: Excluding double-quotes from unquoted attribute values
-  resulted in backward incompatibility, double-quotes in unquoted
-  attribute values has been reinstated.
-- Regression: Text like `&...;` was sometimes mistaken for an entity
-  reference -- tightened up entity reference matching.
-
-
-Version 8.3.0 (2008-11-29)
---------------------------
-.Additions and changes
-- {website}newtables.html[AsciiDoc new tables] is a complete redesign
-  of the tables syntax and generation. The new syntax and features are
-  a huge improvement over the old tables. The old tables syntax has
-  been deprecated but is currently still processed.
-- {website}newlists.html[Lists can now be styled] like other block
-  elements. This allows a single list syntax for 'glossary', 'qanda'
-  (Question and Answer) and 'bibliography' lists instead of having to
-  remember a different syntax for each type.
-- Inline passthroughs macros have been improved and block passthrough
-  macros added. Attribute substitution can be optionally specified
-  when the macro is called.
-- The passthrough block has a fully transparent passthrough delimited
-  block block style called 'pass'.
-- The 'asciimath' and 'latexmath'
-  {website}userguide.html#X77[passthrough macros] along with
-  'asciimath' and 'latexmath' {website}userguide.html#X76[passthrough
-  blocks] provide a (backend dependent) mechanism for rendering
-  mathematical formulas. There are {website}latexmath.pdf[LaTeX Math],
-  {website}asciimathml.html[AsciiMathML] and
-  {website}latexmathml.html[LaTeXMathML] examples on the AsciiDoc
-  website.
-- Reimplemented and cleaned up filter processing based on a patch
-  submitted by Kelly Anderson.  Uses the newer subprocess module
-  instead of the deprecated popen2 module.  Now works in Win32 command
-  shell.
-- Addition FAQs, more documentation updates.
-- Arbitrary HTML/XML entities can be entered in AsciiDoc source.
-- Did away with the need for the `shaded-literallayout.patch` (thanks
-  to Henrik Maier for this patch).
-- Implemented 'page break' block macro.
-- Added 'line breaks' and 'ruler' processing instructions to DocBook
-  outputs  (thanks to Henrik Maier for this patch).
-- Added 'deg' (degree) and 'wj' (word joiner) entity attributes
-  (thanks to Henrik Maier).
-- Tweaked DocBook 'indexterm2' macro to avoid white space preceding
-  the term when used in table cells (thanks to Henrik Maier for this
-  patch).
-- Title elements now process the 'options' attribute like other block
-  elements.
-- Added `single quoted' element.
-- Spaces on both sides of a -- em-dash are translated to thin space
-  characters.
-- Improved detection and reporting of malformed attribute lists.
-- The list 'compact' style is now a list option.
-- Added 'strong' labeled list option which makes the labels bold (HTML
-  outputs only).
-- Dropped unsupported 'linuxdoc' backend.
-- Dropped deprecated 'xhtml-deprecated' (version 6) backend.
-- Added 'breakable' and 'unbreakable' attribute options to tables to
-  control table breaking across page boundaries (DocBook XSL/FO
-  outputs). By and in collaboration with Henrik Maier.
-- Added 'pgwide' attribute option to tables to table, block image,
-  horizontal labeled lists.  Specifies that the element should be
-  rendered across the full text width of the page irrespective of the
-  current indentation (DocBook XSL/FO outputs). Thanks to Henrik Maier
-  for this patch.
-- Vim syntax highlighter: spaces before/after bullets no longer
-  highlighted (which is ugly if using a theme that highlights with
-  underlines).  Thanks to Donald Chai for this patch.
-- Added `a2x(1)` `--fop` option.
-- Added `a2x(1)` `--no-xmllint` option.
-- Highlighted labelled list terms with the navy color in XHTML
-  outputs.
-- Use `w3m(1)` as default `a2x(1)` text format generator (fallback to
-  `lynx(1)`).
-- Changed callout formats in html4 and xhtml11 outputs to angle
-  brackets to match source highlighter rendering.
-- Macros now inject user defined `<optionname>-option` attributes into
-  markup.
-- Added IRC URLs to AsciiDoc inline macros.
-- Added `depth` attribute to `include::[]` system macro.
-- Added 'footnoteref' inline macro.
-- Added 'stylesheet' XHTML attribute to specify additional custom CSS
-  stylesheet.
-- If a paragraph style is specified it will be added to the XHTML
-  'class' attribute and DocBook 'role' attribute.
-- Replacements can be set in a document using the reserved
-  AttributeEntry name 'replacement'.
-- The prefix for auto-generated section name IDs can be set with the
-  'idprefix' attribute.
-
-.Bug fixes
-- Escaped quote skipped over leading and trailing quote instead of
-  just the leading quote.
-- Fixed bug that was causing false negative safe mode warnings (patch
-  submitted by Julien Palmas).
-- Placed priority of AttributeEntry, AttributeList and BlockTitle
-  above Title.  This ensures an  AttributeEntry, AttributeList or
-  BlockTitle followed by a same length leading ListingBlock delimiter
-  is not mistaken for a two-line title.
-- Vim syntax highlighter: fixed multi-line quoted text.
-- Contstrained quote termination after non-space character enforced.
-- Vim syntax highlighter: unterminated quoted text is no longer
-  highlighted.
-- Vim syntax highlighter: passthroughs now exactly match AsciiDoc
-  semantics.
-- Vim syntax highlighter: escaped quoted text, attribute references
-  and inline macros are not highlighted.
-- Vim syntax highlighter: TODO's highlighted in CommentBlocks (thanks
-  to Scott Wall); non-greedy pass:[$$...$$].
-- Vim syntax highlighter: Comment lines mistaken for vertical list
-  labels (thanks to Scott Wall).
-- Vim syntax highlighter: Single unmatched $$ mistakenly highlighted
-  remaining text (patch contributed by Scott Wall).
-- Callouts now work in source highlighted listing generated by
-  dblatex.
-- Fixed exception that occured if undefined attribute was present in
-  filter command.
-- AttributeList block can now follow a paragraph without intervening
-  blank line.
-- The include macro tabsize attribute is no longer propagated to
-  nested includes.
-
-.Omissions
-The following features were implemented but then but removed from this
-release:
-
-- 'pi', 'cdata' and 'comment' passthrough macros and passthrough block
-  styles (creeping featurism, use 'pass' macros instead).
-- Generic 'tag' inline macro (creeping featurism, use 'pass' macros
-  instead).
-
-
-[[X1]]
-Compatibility issues
-~~~~~~~~~~~~~~~~~~~~
-Version 8.3.0 has a number of backward incompatibilities with respect
-to the previous 8.2.7 release:
-
-- The old table syntax is still processed but a 'DEPRECATED' warning
-  is issued.
-- Entity references have to be escaped with a backslash.
-- You have to explicitly precede horizontal style labeled lists with
-  the `[horizontal]` style attribute -- by default all labeled lists
-  are rendered vertically.
-- The list 'compact' style has been dropped and is now a list option
-  (use `options="compact"` in attribute lists).
-- AsciiDoc version 6 sytnax no longer supported.
-- Linuxdoc been removed from the distribution.
-- The unsupported experimental 'latex' backend has not been tested on
-  this release.
-- The introduction of single-quote quoting requires that double-quote
-  quoting is escaped with two backslashes.
-
-
-Version 8.2.7 (2008-07-04)
---------------------------
-.Additions and changes
-- Added `dvi`, `ps` and `tex` output format options to a2x(1).
-- Added `--dblatex` option to a2x(1) so `dblatex(1)` can be used to
-  generate PDFs.
-- Added custom `dblatex(1)` configuration files (in distribution
-  `./dblatex` directory) that are used by a2x(1).
-- `dblatex(1)` is now used to generate the distributed PDF version of
-  the AsciiDoc User Guide.
-- If you don't need a customized the link caption you can enter the
-  'http', 'https', 'ftp', 'file' URLs and email addresses without any
-  special macro syntax -- you get the links by just cutting and
-  pasting URLs and emails addresses. This also makes it easier to open
-  links directly form AsciiDoc source ( most editors allow you to open
-  URLs directly).  The Vim syntax highlighter has been updated to
-  reflect these changes.
-- Highlighted source code paragraphs have been implemented -- it's a
-  much more convenient way to enter short code examples (see
-  http://www.methods.co.nz/asciidoc/source-highlight-filter.html[the
-  online docs]).
-- The source highlighter and music filter syntax has changed -- they
-  now used the ListingBlock syntax customized with 'source' and
-  'music' style attribute values. This follows the Paragraph styling
-  convention introduced by the source paragraph (previous item) and is
-  easier to read. The old syntax still works but has been deprecated.
-- QuoteBlocks now have a 'verse' style -- you no longer have to nest a
-  'verse' LiteralBlock inside a QuoteBlock for verses.  The 'verse'
-  style on the LiteralBlock has been deprecated (still works though)
-  and the 'style' attribute is positional attribute 1, pushing
-  'attribution' and 'citetitle' attributes to the right (you'll need
-  to insert a 'quote' attribute into your existing QuoteBlocks).
-- It is no up to the DocBook processor to highlight source code syntax
-  in `<programlisting>` elements rather than GNU Highlighter -- this
-  is the correct way to handle it, plus `dblatex(1)` makes a much
-  better job.
-- 'scaledwidth' and 'align' attributes have been added to the 'image'
-  macro. They apply to DocBook outputs (specifically for PDF
-  documents). 'scaledwidth' sets the image size as a percent of the
-  available page width; 'align' applies 'left', 'center' or 'right'
-  horizontal image justification.
-- Added a2x(1) `--fop-opts=FOP_OPTS` option (patch submitted by Miklos
-  Vajna).
-- Added a2x(1) `--dblatex-opts=DBLATEX_OPTS` option.
-- Added Mikhail Yakshin's FOP 0.95 patch which fixes a long-standing
-  `fo.xsl` problem and allows PDF's to be generated with FOP 0.95
-  (previously had to use FOP 0.20.5).
-- The User Guide has been updated and outdated FOP configuration and
-  installation sections removed.
-
-.Bug fixes
-- Fixed `stylesheets/xhtml11-manpage.css` not being included when
-  'linkcss' attribute was used.
-- Configuration file `*-style` attributes are now dumped correctly.
-- Fixed 'FAILED: malformed section entry' LaTeX backend error.
-
-See the also the https://sharesource.org/hg/asciidoc/[AsciiDoc
-repository changelog].
-
-
-Version 8.2.6 (2008-04-29)
---------------------------
-.Additions and changes
-- Enhancements to the Vim AsciiDoc syntax highlighter, for example,
-  quoted text is now highlighted in titles and macro captions.
-- If you define the `data-uri` intrinsic attribute images referenced
-  by 'image' macros will be embedded in XHTML using the
-  http://en.wikipedia.org/wiki/Data:_URI_scheme[data: URI scheme].
-  *NOTE*: Microsoft browser support for the 'data: URI scheme' is
-  currently limited to MSIE 8 beta 1.
-- Added `toc-title` attribute to allow custom table of contents
-  titles.
-- Added references to Alex Efros's AsciiDoc Cheatsheet to AsciiDoc
-  website.
-- `asciidoc(1)` and `a2x(1)` man pages formatted to conform to
-  `man-pages(7)` recommendations.
-- Old code-filter syntax (pre-8.1.0) is no longer recognized so that
-  malformed two-line level 2 titles are no longer confused with
-  'code-filter' block delimiters.
-- Added -> <- => <= arrow replacements from the Arrows block of
-  Unicode.
-- Added DocBook refentry lang attribute -- patch contributed by
-  VMiklos.
-- AttributeEntry names can now be numeric (``named macro targets'').
-- Hide Table of Contents title if Table of Contents empty -- patch
-  contributed by Alex Efros.
-- Various XHTML CSS tweaks.
-- Code cleanup:
-  * Replaced `realpath()` with Python 2.2 `os.path.realpath()` library
-    function.
-  * Replaced old string library functions with string methods.
-  * Use file generators instead of `readlines()`.
-  * Renamed entities that shadowed builtins.
-  * Standardized string quoting.
-  * Dropped `readlines()` function.
-
-.Bug fixes
-- Fixed broken CSS for decimal ordered lists nested in alpha ordered
-  list, thanks to Alex Efros.
-- A missing closing block delimiter now reports the opening delimiter
-  line number instead of the end of file line number.
-- Fixed an error generated by the asciidoc `-e` option when there are
-  no block definitions -- patch contributed by Alejandro Mery.
-- Handle both `\r\n` (as well as `\n`) line separators that may be
-  returned by `{sys}` attribute evaluation.
-- Numbered attribute names no longer interfere with positional
-  attribute list values.
-
-
-Version 8.2.5 (2007-11-18)
---------------------------
-.Additions and changes
-
-.Bug fixes
-- Fixed exception thrown by illegal command-line arguments.
-- Rolled back the 'with' warning bug fix introduced in 8.2.4 -- it was
-  incompatible with Python <2.5.
-
-
-Version 8.2.4 (2007-11-10)
---------------------------
-.Additions and changes
-- You can now use the `lang` attribute to set the DocBook language
-  attribute.
-- Attribute values can now contain attribute references.
-- If the `lang` attribute is defined then configuration files named
-  like `lang-<lang>.conf` will be loaded automatically.
-- The help file name `help-<lang>.conf` is based on the AsciiDoc
-  `lang` attribute, defaults to `help.conf` (English).
-- Admonition, figure and table captions have been factored into a
-  predefined set of `caption_*` attributes.  They only apply to
-  directly generated (X)HTML outputs (DocBook stylesheets generate
-  their own language specific captions based on the `lang` attribute).
-- Dropped platform dependent `doc/asciidoc.chm` file from
-  distribution documentation formats.
-
-.Bug fixes
-- The spurious warning 'with will become a reserved keyword
-  in Python 2.6' has been suppressed.
-
-
-Version 8.2.3 (2007-09-12)
---------------------------
-.Additions and changes
-- Added VMiklos's 'permalink' patch for auto-generated section IDs
-  (enabled by default by the `sectids` attribute).
-- Added http://www.methods.co.nz/asciidoc/faq.html[FAQ] to website.
-- Changed format of \{localdate} attribute to ISO 8601 (`%Y-%m-%d`).
-- Added `abc2ly --beams=None` option to make `music2png.py` conform to
-  ABC's notion of beams.
-- XHTML level 2 section headings are now styled with an underlining
-  border.
-- XHTML links to AsciiDoc title elements are now implemented with
-  title ID attributes (previously separate `<a>` element targets were
-  generated.
-- Multi-word first, middle and last names can be entered in the header
-  author line using the underscore as a word separator.
-- The nested inline macros restriction has now been lifted, for
-  example you can now include links and inline images inside
-  footnotes.
-- Help topic names can be shortened (so long as they are not
-  ambiguous). For example `asciidoc -hm` will print the AsciiDoc man
-  page.
-- Added `{two_colons}` and `{two_semicolons}` attributes for
-  escaping labeled list ambiguity.
-- If quirks mode is disabled the XHTML Mime Type is set to the
-  recommended `application/xhtml+xml` (rather than `text/html`).
-
-.Bug fixes
-- Author information is now correctly set when using attribute entries
-  in the header instead of an author line (previously the 'author'
-  attribute was not being calculated correctly and there were
-  attribute substitution problems).
-
-
-Version 8.2.2 (2007-07-22)
---------------------------
-.Additions and changes
-- http://www.maths.nottingham.ac.uk/personal/drw/lm.html[LaTeXMathML]
-  capability has been added for users who are more familiar with or
-  prefer LaTeX math formulas to the
-  http://www.methods.co.nz/asciidoc/asciimathml.html[ASCIIMathML]
-  notation (thanks to Arthur Sakellariou for the patch).
-- The 'source highlight' and 'code' filters now process embedded
-  callouts.
-- Added an `--attribute=ATTRIBUTE` option to `a2x(1)` for passing
-  attribute values to asciidoc(1) (a shortcut for `--asciidoc-opts="-a
-  ATTRIBUTE"`).
-- Image block and inline macros prepend optional `{imagesdir}`
-  attribute to image link targets.
-
-
-.Bug fixes
-- Fixed an assertion error that occurred when a configuration file
-  containing an `include::[]` macro was loaded using the
-  `--conf-file` option and the configuration file name did not
-  include an explicit directory path -- patch submitted by Dmitry
-  Potapov.
-- Asciidoc titles are only converted to lower case if all characters
-  are upper case otherwise case is left unchanged -- patch submitted
-  by Dmitry Potapov.
-- Added a missing check that input is not stdin before loading
-  configuration files from the document directory -- patch submitted
-  by Dmitry Potapov.
-- Attribute list items must evaluate to strings, numbers or None
-  (previously it was possible to evaluate to other object types which
-  resulted in surprising attribute values).
-- If an AsciiDoc document has no title an empty XHTML 1.1 'title'
-  element is created -- previously the 'title' element was dropped
-  which resulted in invalid XHTML 1.1.
-- The Vim syntax file no longer highlights escaped callouts.
-- The Vim syntax highlighter now correctly highlights Double-dollar
-  passthroughs when they enclose dollar delimited ASCIIMathML and
-  LaTeXMathML formulas.
-
-
-Version 8.2.1 (2007-04-06)
---------------------------
-.Additions and changes
-- A number of improvements have been made to the Vim syntax
-  highlighter, for example the word C++ is no longer mistaken for the
-  start of an unconstrained monospace quote.
-- Labeled list definitions have been tightened -- a list label can no
-  longer containing trailing spaces. The following example is no
-  longer recognized as a valid list label:
-
-  Lorum ipsum ::
-+
-This change implements the originally intended behavior (as per the
-AsciiDoc documentation and examples) so there should be very few
-compatibility issues.
-
-.Bug fixes
-
-
-Version 8.2.0 (2007-04-04)
---------------------------
-.Additions and changes
-- A Vim syntax file is now included in the AsciiDoc distribution
-  (inspired by Felix Obenhuber's `asciidoc.vim` script). You can find
-  it (along with a Vim filetype detection script in the distribution
-  `./vim/` directory (the scripts are installed automatically by the
-  AsciiDoc installer `./install.sh`). See 'Appendix J' of the
-  'AsciiDoc User Guide' for details.
-- Added 'toclevel' attribute (1..4) which sets the number of title
-  levels reported in the table of contents.  Defaults to 2 and must be
-  used with the 'toc' attribute. Example usage:
-
-  $ asciidoc -a toc -a toclevels=3 doc/asciidoc.txt
-
-- Added a `listindex` attribute which is the current list item index
-  (1..). If this attribute appears outside a list its value is the
-  number of items in the most recently closed list.
-- The single line titles syntax now accepts trailing suffixes -- this
-  syntax matches the title line syntax of a number of popular Wiki
-  markups.
-- If a QuoteBlock has no attribution or citetitle then the DocBook
-  `<attribution>` element is not generated (previously generated empty
-  `<attribution>` element).
-- If the text of a labeled list item is blank then no `texttag` is
-  written.
-- An end of line backslash performs line continuation for horizontal
-  labeled list items.
-- The Revision line now accommodates Subversion `$Id` markers (in
-  addition to CVS and RCS markers). Thanks to Tiago Sturmer Daitx for
-  this patch.
-- Implemented `a2x(1)` option `--skip-asciidoc` which allows `a2x(1)`
-  to convert DocBook XML files not derived from AsciiDoc sources.
-- If `a2x(1) --doctype` option is not specified it defaults to
-  `manpage` if `--format=manpage` else defaults to `article`
-  (previously `--doctype` always defaulted to `article`).
-- Added an 'External Resources' section to the
-  http://www.methods.co.nz/asciidoc/index.html[AsciiDoc home page].
-
-.Bug fixes
-
-
-Version 8.1.0 (2006-10-22)
---------------------------
-.Additions and changes
-- AsciiDoc generated XHTML documents now display a table of contents
-  if the 'toc' attribute is defined (JavaScript needs to be enabled
-  for this to work).  Thanks to Troy Hanson who contributed this
-  feature based on a JavaScript by Mihai Bazon. I've simplified things
-  somewhat to match Docbook XSL Stylesheets style, see Troy's
-  http://tpl.sourceforge.net/userguide.html[tpl User Guide] for a
-  fancier layout. Use the `-a toc -a numbered` command-line options to
-  produce a number table of contents.
-- A http://www.methods.co.nz/asciidoc/music-filter.html[music filter]
-  is included in the distribution `./filters/` directory.  It
-  translates music in http://lilypond.org/[LilyPond] or
-  http://abcnotation.org.uk/[ABC] notation to standard classical
-  notation in the form of a trimmed PNG image which is inserted into
-  the AsciiDoc output document.
-- Incorporated Paul Melis's Win32 filter patch.  This workaround
-  allows AsciiDoc to run filters under Windows.
-- Added `uninstall.sh` script.
-- Rather than proliferate a confusing number of filter block
-  delimiters the following convention has been adopted: delimiters
-  belonging to DelimitedBlock filters distributed with AsciiDoc will
-  consist of a word (normally a noun identifying the block content)
-  followed by four or more tilde characters.  This has necessitated
-  changing existing filter delimiters (the old delimiters still work
-  but may be deprecated in future versions):
-
-  * The example code filter block delimiter is now the word `code`
-    followed by four or more tilde characters.
-  * The source highlight filter block delimiter is now the word
-    `source` followed by four or more tilde characters.
-
-- Conditionally redefined subscript and superscripting so they use the
-  old replacements mechanism when asciidoc7compatible is defined
-  rather than the asciidoc 8 default unconstrained quoting (patch for
-  affected files attached).
-- Moved the source highlight filter from `./examples/` to `./filter/`.
-- Added `{verbose}` intrinsic attribute (useful for passing verbose
-  flag to filters).
-- Added `{outdir}` intrinsic attribute.
-- Renamed `{docdir}` intrinsic attribute to unambiguous `{indir}`
-  (`{docdir}` still works but may be removed in future release).
-- If `asciidoc(1)` outputs to stdout then intrinsic attribute
-  `{docname}` is extracted from the input file name.
-
-
-Version 8.0.0 (2006-08-27)
---------------------------
-*********************************************************************
-This is a major release because changes to quoting and index entry
-handling may break existing documents (see 'Additions and changes'
-below and 'Appendix A: Migration Notes' in the AsciiDoc User Guide).
-
-Please report any problems you encounter.
-
-mailto:srackham at gmail.com['Stuart Rackham']
-*********************************************************************
-
-.Additions and changes
-- Quoting can can occur within words (based on patch submitted by
-  Benjamin Klum). See the 'Unconstrained Quotes' sub-section in the
-  User Guide.
-
-- The underline and plus characters can be used as alternatives to the
-  existing apostrophe and backtick quote characters. They are arguably
-  better choices than the apostrophe and backtick as they are not
-  confused with punctuation.
-
-- The syntax for index entry macros have have been deprecated from
-  `+...+` and `++...++` to `((...))` and `(((...)))` respectively.
-  Rationale:
-  * Bracketing is consistent other with `[[...]]` and `<<...>>`
-    reference macros.
-  * To easily confused with triple plus passthroughs.
-  * To make way for the new monospace quoting.
-
-- Superscripts and subscripts are implemented as constrained quotes so
-  they can now be escaped with a leading backslash and prefixed with
-  with an attribute list.
-
-- An experimental LaTeX backend has been written by Benjamin Klum (a
-  number additions in this release are to accommodate the LaTeX
-  backend).
-- `include` macro file names now expand environment variables and
-  tilde expansions.
-- A configuration file `[quotes]` entry can be undefined by setting to
-  a blank value.
-- Added `callto` inline macro for Skype 'callto' links.
-- Added `colnumber` attribute for table data markup.
-- A leading comment block or comment lines are now skipped (previously
-  a document had to start with either attribute entries or a document
-  Title).
-- Experimental `rows` attribute (number of source lines in table)
-  available in table markup templates (used by experimental LaTeX
-  backend).
-- Included install shell script written by mailto:jlm at ofb.net[Jacob
-  Mandelson] for installing the tarball distribution.
-- Added INSTALL documentation file.
-- Added 'replacements2' substitution options -- a second replacements
-  section.
-- Added the ability to redefine 'normal' and 'verbatim' substitutions
-  with `subsnormal` and `subsverbatim` entries in configuration file
-  `[miscellaneous]` section.
-- By default `AttributeEntry` values are substituted for
-  `specialcharacters` and `attributes`, if you want a different
-  AttributeEntry substitution set the `attributeentry-subs` attribute.
-- The `name` in `name=value` configuration file entries can now end
-  with a backslash, just escape the trailing backslash with a
-  backslash. For example:
-
-  abc\\=xyz
-+
-Results in `name=abc\` and `value=xyz` --  previously this would have
-escaped the `=` character.
-
-- A blank configuration file section deletes any preceding section
-  with the same name (applies to non-markup template sections).
-- A command-line attribute value with a `@` suffix does not override
-  existing document and configuration file attributes (normally
-  command-line attributes have precedence over document and
-  configuration file attributes).
-- `localtime` attribute is now encoded from the native system encoding
-  to the output encoding. Patch submitted by
-  mailto:m_pupil at yahoo.com.cn[FKtPp] -- here's his description of the
-  problem:
-+
-``I am a Chinese user of AsciiDoc and I find that when I use UTF-8
-(the default encoding) to write asciidoc documents in Windows platform
-the resulting html footer line will get screwed. It was caused by a
-localized tzname that was always encoded in the windows native
-encoding, which in my case is 'cp936'.''
-
-- a2x(1) can generate Open Document Text files using
-  http://open.comsultia.com/docbook2odf/[docbook2odf]. Currently
-  `docbook2odf(1)` only processes a subset of DocBook, unimplemented
-  elements are skipped.
-- The a2x(1) format option defaults to `xhtml` (previously a format
-  had to be specified explicitly).
-- The `-d, \--doctype=DOCTYPE` option has been added to a2x(1) which
-  is a shortcut for `--asciidoc-options="--doctype=DOCTYPE"`.
-- Replaced a2x(1) `--no-icons` and `--no-copy` options with their
-  negated equivalents: `--icons` and `--copy` respectively. The
-  default behavior has also changed: copying and use of icons is
-  disabled by default. Rationale:
-  * To make the default behavior more consistent since use of icons
-    and CSS stylesheets does not apply to all formats.
-  * To make the default behavior less surprising (the creation of icon
-    and stylesheet output files must now be explicit).
-
-- a2x(1) has been bumped from version 0.1.1 to version 1.0.0.
-
-
-.Bug fixes
-- Removed duplicate `./doc/a2x.1.txt` from distribution tarball.
-- Documentation errata.
-- Attribute replacement is no longer performed twice in Titles and
-  AttributeEntrys.
-- a2x(1) skipped asciidoc(1) execution when rerun with different
-  `--asciidoc-options` options, it now always executes asciidoc(1).
-  The problem was that previously asciidoc(1) was executed only if the
-  output file was missing or older than the source file.
-
-
-Version 7.1.2 (2006-03-07)
---------------------------
-.Additions and changes
-- Support for
-  http://www1.chapman.edu/~jipsen/mathml/asciimath.html[ASCIIMathML]
-  has been added. See 'Appendix I: ASCIIMathML Support' in the User
-  Guide and the examples at
-  http://www.methods.co.nz/asciidoc/asciimath.html.
-- You can now prefix quoted text with inline attributes lists.  You
-  can use this to set font size and color (XHTML and HTML outputs).
-- Added `##...##` quoting -- it does nothing -- it's purpose is to
-  allow inline attributes to be applied to normal text.
-- An 'inline passthrough' mechanism has been implemented.
-- Configuration file comment lines can be escaped with a backslash --
-  this is to allows the inclusion of configuration lines that start
-  with a hash character.
-- The `scriptsdir` attribute can be used to specify the name of the
-  directory containing linked JavaScripts (see the
-  link:userguide.html#X33[User Guide] for details.
-- The BackendBlock has been renamed PassthroughBlock for consistency
-  with the new inline passthrough naming.
-- `a2x(1)` now works with the older `bash(1)` version 2.05b. Patch
-  submitted by mailto:francis at daoine.org[Francis Daly].
-- Content included by the `include1::[]` system macro is no longer
-  subject to attribute substitution so that ambiguities no longer
-  arise when used to include CSS or JavaScript files.
-
-
-Version 7.1.1 (2006-02-24)
---------------------------
-.Additions and changes
-- The `caption` attribute can be used to customize admonition captions
-  as well as image, table and example block element title prefixes
-  (`xhtml11` and `html4` backends).
-- You can now override the default icon image using the `icon`
-  attribute to specify the path of the linked image (xhtml11 and html4
-  backends only).
-- The deprecated `imagesdir` attribute is no longer recognized (use
-  `iconsdir` instead).
-- Added 'Appendix H: Using AsciiDoc with non-English Languages' to the
-  AsciiDoc User Guide.
-- Added 'Admonition Icons and Captions' subsection to the User Guide
-  explaining how to customize Admonition elements.
-
-.Bug fixes
-- `a2x(1)` failed when configuration files were installed in the
-  global `/etc/asciidoc/` directory -- it was only searching the
-  directory containing the asciidoc executable (thanks to Christian
-  Wiese for finding and submitting a patch this bug).
-- The html4 backend admonition caption now correctly displays the
-  admonition `caption` attribute (previously displayed the `style`
-  attribute).
-
-
-Version 7.1.0 (2006-01-13)
---------------------------
-.Additions and changes
-- `a2x(1)` toolchain wrapper utility.  This overcomes the biggest
-  hurdle for new users which seems to be assembling and using a
-  working DocBook XML toolchain. With `a2x(1)` you can generate XHTML
-  (chunked and unchunked), PDF, man page, HTML Help and text file
-  outputs from an AsciiDoc input file with a single command.  All you
-  need to install (in addition to AsciiDoc) is xsltproc(1), DocBook XSL
-  Stylesheets and optionally FOP (if you want PDF) or lynx(1) (if you
-  want text).
-- Block titles can now start with any non-space character (previously
-  where not allowed to start with `.~-_` characters).
-- `./stylesheets/docbook.css` renamed to
-  `./stylesheets/docbook-xsl.css` to clarify its function.
-- Renamed `./docbook-xsl/manpages.xsl` to `./docbook-xsl/manpage.xsl`
-  for consistency.
-- Admonition and navigation icons moved to `./images/icons/` to
-  clarify usage and conform with a2x(1) usage.
-- Renamed xhtml11 intrinsic attribute `imagesdir` to `iconsdir` to
-  keep vocab consistent and changed default value to `./images/icons`
-  (previously `./images`). `imagesdir` attribute still accepted but
-  deprecated.
-- Unused image files have been weeded out of the distribution.
-- Packager notes (appendix B) have been updated to reflect the needs
-  of `a2x(1)`.
-
-IMPORTANT: The renaming of the xhtml11 backend `imagesdir` intrinsic
-attribute and it's new default value introduces a backward
-compatibility issue: if you use the `icons` attribute you will need to
-either move your icons to the new default `./images/icons` location or
-include an `--attribute{nbsp}iconsdir="your_icons_path"` option in
-your asciidoc commands.
-
-.Bug fixes
-- Backslash line continuation is now observed in verbatim paragraphs.
-- Fixed errors generated by example
-  `./examples/website/build-website.sh` script.
-
-
-Version 7.0.4 (2005-12-08)
---------------------------
-.Additions and changes
-- Added ternary conditional attributes
-  `{<name>@<regexp>:<value1>[:<value2>]}` and
-  `{<name>$<regexp>:<value1>[:<value2>]}`.
-- Safety violations now generate errors (they previously generated
-  warnings).
-- asciidoc(1) now defaults to safe mode, consequently the
-  `[miscellaneous]` safe mode entry and `--safe` command-line option
-  are no longer necessary (though for backward compatibility
-  asciidoc(1) still accepts the `--safe` option).
-- Backend Blocks are now flagged unsafe (they could be used to include
-  arbitrary and hence potentially unsafe output content).
-- Filters are no longer considered unsafe. There's not much point in
-  insisting on filter safety since the installation of an unsafe
-  filter would require the introduction of new or modified
-  configuration files -- if your application configurations can be
-  compromised you're in all sorts of trouble (safe mode protects
-  against unsafe input files not unsafe configuration).  As with all
-  filters, before installing, you should verify that they can't be
-  coerced into generating malicious output or exposing sensitive
-  information.
-
-.Bug fixes
-- Fixed a lot of glaring grammatical and factual errors in the User
-  Guide.
-
-
-Version 7.0.3 (2005-12-01)
---------------------------
-.Additions and changes
-- Added `--safe` and `--unsafe` command-line options -- AsciiDoc can
-  now be executed in a 'safe mode' which disallows the execution of
-  arbitrary code or the inclusion of arbitrary files (see
-  link:userguide.html#X39[Appendix C in the AsciiDoc User Guide]).
-- Included link:source-highlight-filter.html[source-highlight filter]
-  in the distribution `./examples/source-highlight-filter/` directory
-  (based on filter submitted by mailto:trolocsis at gmail.com[Ryan
-  Phillips]).
-- Included the DocBook XSL Stylesheets 1.69.1 customizations used to
-  generate the distributed AsciiDoc documentation (read the
-  `asciidoc-docbook-xsl.txt` file in the distribution `./docbook-xsl/`
-  directory).
-- AsciiDoc DocBook XSL Stylesheet drivers moved from `./doc/` to
-  `./docbook-xsl/`.
-- Modified `./doc/manpages.xsl` so only URL content is displayed in
-  manpages.
-
-.Bug fixes
-- Explicitly set table CSS border style (`xhtml11` backend) to `solid`
-  because default border styles vary from browser to browser.
-
-
-Version 7.0.2 (2005-08-28)
---------------------------
-.Additions and changes
-- There are now long versions of all AsciiDoc options.
-- If the `--backend` is not specified it defaults to `xhtml11`.
-- Added CSS simulated frames layout to the examples website (see
-  `./examples/website/layout2/README-website.txt`). This layout does
-  not work with IE6 and the original tables based layout is still the
-  default.
-- Support page added to AsciiDoc website.
-
-.Bug fixes
-- Invalid options are now trapped gracefully.
-- Documentation errata.
-
-
-Version 7.0.1 (2005-06-24)
---------------------------
-.Additions and changes
-- Reverted to use of `strong`, `em`, `tt` XHTML tags -- they're more
-  obvious and no less correct than `span` tags, besides, the generated
-  file sizes are smaller (the 'User Guide' was 11% smaller).
-- Table title rendered with `caption` tag rather than a separate
-  `div`.
-- The AsciiDoc 'stylesdir' attribute (if specified) is now recognized
-  when searching for embedded stylesheets (previously only searched
-  default `./stylesheets` directory).
-- Default charset encoding changed from ISO-8859-1 to UTF-8 -- it's
-  less language specific and displays most common languages.
-- `template::[]` macros now expand in all configuration file sections
-  previously only in markup template sections.
-- Cleaned up example website layout CSS and configuration
-  (presentation has not been changed).
-- Refactored `xhtml11.conf` configuration file.
-- Set consistent and sensible permissions on distributed files.
-- White space is now stripped from DSV formatted table cell data.
-- `class="tableblock"` attribute added to tables generated by
-  `xhtml-deprecated-css.conf` to assist CSS.
-
-.Bug fixes
-- Illegal character set encoder (specified by the AsciiDoc `encoding`
-  attribute) and character data are trapped gracefully.
-- AsciiDoc table 'format' attribute in table attribute lists were not
-  recognized.
-- The nested horizontal labeled list example in the 'AsciiDoc User
-  Guide' has been dropped -- it generated invalid DocBook markup.
-
-
-Version 7.0.0 (2005-06-06)
---------------------------
-***************************************************
-This is a major release with many code and
-documentation changes.
-Please report any problems you encounter.
-
-mailto:srackham at gmail.com['Stuart Rackham']
-***************************************************
-
-.Additions and changes
-- A new 'xhtml11' backend generates XHTML 1.1 with integrated CSS2
-  replacing the previous 'xhtml', 'css', and 'css-embedded' backends.
-- The CSS stylesheets have finally been rewritten.
-- The asciidoc(1) command help now includes user
-  link:userguide.html#X36[customizable help] topics. When asciidoc is
-  invoked with the `--help` option the command argument is
-  interpreted as a help topic.
-- The previous example website has been replaced by the actual
-  AsciiDoc website (see `./examples/website/`.
-- XHTML generation options now controlled by the following attributes:
-  'badges', 'linkcss', 'icons', 'numbered', 'quirks', 'theme',
-  'stylesdir', 'imagesdir' (see the link:userguide.html#X33[User
-  Guide] for details.
-- By default HTML and XHTML are output as stand-alone documents (no
-  embedded CSS and no linked admonition icon images).
-- Documents encoded with the UTF-8 Unicode character set are now
-  processed thanks to a patch supplied by
-  mailto:viktor at rbg.informatik.tu-darmstadt.de[Viktor Vasilev].
-- The `-a ^name` command-line syntax to undefine an attribute has been
-  deprecated in favor of the `-a name!` syntax.
-- AttributeEntry syntax addition: `:name!:` to undefine `name` attribute.
-- Added `template` system block macro to allow the inclusion of one
-  configuration file template section within another.
-- A 'verse' style attribute can now be applied to literal paragraphs
-  and blocks to reproduce line breaks and white space from the source
-  document.
-- Replacements and Special Words can now be escaped with leading
-  backslashes.
-- Replacements are now processed in configuration file order (previous
-  ordering was indeterminate).
-- System macros can now be used in the base `asciidoc.conf`
-  configuration file.
-- Deprecated features that emitted warnings in prior versions are no
-  longer tolerated.
-- The `eval` system attribute expression evaluates to `False` the
-  attribute is undefined, if it evaluates to `True` the result is an
-  empty string.
-- The Paragraph and DelimitedBlock 'presubs' parameter can be aliased
-  as 'subs'.
-- Added 'verbatim' substitutions option.
-- Renamed 'List Continuation Block' to 'List Block' and renamed the
-  'listcontinuation' option to 'list'.
-- Deprecated 'default' substitutions option (use 'normal' instead).
-- The 'section-numbers' section numbering attribute has be renamed
-  'numbered'.
-- Dropped the '\#UNDER CONSTRUCTION#' block macro.
-- Rewrote Paragraph and DelimitedBlock handlers adding a
-  link:userguide.html#X23[styles] configuration entry.
-
-.Bug fixes
-- Included files are no longer read inside conditionally excluded
-  content.
-- Manpage command names containing dashes (in the manpage NAME
-  section) were misinterpreted as the spaced dash command name/purpose
-  separator.  Bug report and patch supplied by
-  mailto:david at dgreaves.com[David Greaves].
-- Unexpected error following malformed author line error.
-
-
-Version 6.0.3 (2005-04-20)
---------------------------
-.Additions and changes
-- Special characters are now substituted in AttributeEntry element
-  values.
-- Spaced and unspaced em dashes are now recognized (previously only
-  spaced em dashes were recognized).
-- Replaced the table 'noborders' option with richer 'frame' and 'grid'
-  attributes.
-- The `duplicate macro` warning message now only occurs when the
-  verbose (`-v`) option is enabled.
-- Single lines starting with two forward slashes hard up against the
-  left margin are treated as comments and are not processed.
-- Renamed 'section' delimited block option to 'sectionbody' to more
-  accurately reflect it's role.
-- Added a List Continuation block -- a specialized delimited block
-  that is functionally equivalent to the List Item Continuation
-  feature except that the list contained within the block does not
-  require explicit '+' list item continuation lines.
-- Dropped deprecated `<u>` tags from generated HTML.
-- Literal Block delimiters must now consist of at least four points
-  (previously three) to avoid lone ellipsis ambiguity.
-
-.Bug fixes
-- Some system attribute evaluation failures caused unexpected
-  exceptions to occur.
-
-
-Version 6.0.2 (2005-03-30)
---------------------------
-.Additions and changes
-- Three new 'system' block macros have been added -- `eval`, `sys` and
-  `sys2` which are the block macro equivalents to the same named
-  system attributes.
-- 'Intrinsic' macros have been renamed 'system' macros along with
-  'action' attributes which have been renamed 'system' attributes:
-  * To reflect their common (though contextually different) behavior.
-  * To avoid confusion with 'intrinsic attributes'.
-
-.Bug fixes
-- Asciidoc now searches in `/etc/asciidoc/filters` for filters.
-
-
-Version 6.0.1 (2005-03-06)
---------------------------
-.Additions and changes
-- A global configuration file location `/etc/asciidoc` has been added
-  and is now processed before all other locations (patch supplied by
-  mailto:stone at debian.org[Fredrik Steen]).
-- Recoded `tempfile.mktemp()` and other artifacts that are no longer
-  necessary or desirable (patches supplied by
-  mailto:stone at debian.org[Fredrik Steen]).
-- Added BUGS file to the distribution.
-
-.Bug fixes
-- Illegal comment syntax in `css-embedded-stylesheet.conf` resulted in
-  illegal CSS in files generated by the `css-embedded` backend.
-
-
-Version 6.0.0 (2005-01-28)
---------------------------
-***************************************************
-This release has had some fairly major code and
-documentation changes. Please report any problems
-you encounter.
-
-mailto:srackham at gmail.com['Stuart Rackham']
-***************************************************
-
-A lot of new stuff. A new major version number -- some regression
-incompatibility (hopefully mitigated by 'deprecated' warnings).
-
-Went mad trying to rein in the current feature anarchy -- established
-a unified notion of document attributes. Attempted to introduce a
-consistent vocabulary -- renamed many poorly or inconsistently named
-entities.
-
-Actually, deprecated syntax is still processed correctly in almost all
-cases. One source of incompatibility that may arise if you have
-customized CSS stylesheets is the change of AsciiDoc CSS class names
-(see below). I guess the moral is if you've done a lot of
-configuration file customization and are happy with version 5 then you
-may want to stay put.
-
-NOTE: This version requires Python 2.3 or better to run.
-
-.Additions and changes
-- 'Glossary entries' have been renamed 'attributes'. This eliminates
-  confusion with the accepted meaning of glossary.
-- An `AttributeEntry` block element has been added so that document
-  attributes can be assigned from within an AsciiDoc document.
-- The `AttributeList` block element has been added which is a more
-  general solution than the (now deprecated) DelimitedBlock arguments.
-- An BlockId element has been added for setting block element anchor
-  (link target) IDs.
-- Quoted text can now span multiple lines (thanks to James Bowlin for
-  this patch).
-- Inline macros can now span multiple lines.
-- \``double backtick / apostrophe'' quotes generate ``curly quotes''.
-- A warning is now emitted for out of order list item (applies to
-  explicitly enumerated numbered list items).
-- Added `include` action attribute.
-- A line of three or more apostrophes generates an HTML horizontal
-  ruler (`<hr/>` tag). You will get a warning if processed with
-  non-HTML backend.
-- An `{imagesdir}` attribute specifies image file location for images
-  referenced in configuration files when generating HTML (the default
-  location is `images`).
-- An `{stylesdir}` attribute specifies the location of CSS
-  stylesheets when generating styled HTML (the default location for
-  configured markup is `.`).
-- The use of the (often inappropriately named) `{caption}` attribute
-  list entry has been deprecated, use `{0}` instead.
-- New 'ExampleBlock' delimited block along with associated variants
-  Note, Tip, Warning, Caution and Important.
-- The `docbook.conf` file now facilitates the optional inclusion of a
-  DocBook revision history file.
-- To better reflect their purpose the following block elements have
-  been renamed: `VerbatimBlock` to `ListingBlock`; `IndentedBlock` to
-  `LiteralBlock`; `IndentedParagraph` to `LiteralParagraph`;
-  `CustomBlock` to `BackendBlock`; `SimpleSection` to `SectionBody`.
-  Any corresponding CSS class names have also been changed which could
-  result in backward incompatibility in customized stylesheets.
-- Swapped plain DocBook admonition icons for Jimmac's DocBook icons
-  (http://jimmac.musichall.cz/ikony.php3). The original plain icons
-  have been moved to `./images/plain`.
-- Renamed `html` backend to `xhtml` to better reflect it's function
-  (former `html-4` backend renamed to `html`).
-- A new inline anchor macro syntax `[[[<id>]]]` is available, it
-  displays `[<id>]` at the anchor location and is for anchoring
-  bibliography list entries.
-- An optional 'single-line titles' syntax can be used.
-- Tweaks to distributed CSS stylesheets and FOP `fo.xsl` customization
-  file.
-- 'List Item Continuation' has been implemented which allows
-  additional block elements to be included in list items by separating
-  them from the preceding list item element with a line containing a
-  single plus character.
-- A new 'Horizontal Labeled List' list type has been added. Generates
-  two column list -- the first column contains the list element
-  labels, the second contains the element text. Same syntax as
-  `Vertical Labeled Lists` except the double colon label suffix is
-  followed by the start of the list item text.
-
-.Bug fixes
-- Fixed broken backslash line continuation.
-- Labeled list end tags were not undergoing attribute substitution.
-- Documents without any author information now generate legitimate
-  DocBook (previously if the author line was not included in the
-  document header then an empty (illegal) DocBook `author` element was
-  generated).
-- Multiple spaces in filter command arguments were replaced by a
-  single space. The `./examples/asciidoc2text/asciidoc2text.sh` script
-  now indents text correctly.
-
-
-Version 5.1.1 (2004-10-10)
---------------------------
-*15-December-2004: Interim update:* Updated `asciidoc.py` to fix
-broken `join_lines` function -- no other changes.
-
-- PDF documentation is now produced from DocBook XML using XSLTLib and
-  FOP. Previously we processed DocBook SGML with `jw(1)` (which used
-  Dvips to convert DVI files to PDF). FOP has come a long way in the
-  last 12 months and produces very acceptable PDF under both Linux and
-  Windows.
-- Sections detailing how to install and use the DocBook XSL
-  Stylesheets, xsltproc, FOP toolchain and the AsciiDoc XSLT drivers
-  have been added to the User Guide.
-- The PDF output from the he example article template has been
-  included in the distribution (`./doc/article.pdf`).
-- Special characters are emitted using decimal Unicode character codes
-  (previously used named character entities which cannot be assumed
-  included in non-HTML documents).
-- Added registered trademark (R) to `[replacements]`.
-- CSS stylesheet tweaks.
-- Admonitions (Note, Tip, Important, Warning, Caution) include icons
-  when generating css output.
-
-
-Version 5.1.0 (2004-09-18)
---------------------------
-- Callouts have been implemented (see the 'Callouts' section of the
-  AsciiDoc User Guide for details).
-- Added XSL drivers for generating XHTML, chunked XHTML and HTML Help
-  from DocBook XML using XSL stylesheets and xsltproc(1).
-- Added CSS stylesheet for HTML generated from DocBook XML using XSL
-  stylesheets.
-- Distribution contains HTML Help formatted User Guide
-  (`./doc/asciidoc.chm`), the User Guide tells you how it's generated.
-- Images referred to by distributed stylesheets are now located in the
-  `./images` subdirectory (previously located in `.`).
-- Filters path names are now handled properly under Cygwin.
-- The usual documentation and examples additions, updates and
-  polishing.
-
-
-Version 5.0.9 (2004-09-09)
---------------------------
-- The convention of using a `.asc` file extension for AsciiDoc files
-  has been dropped in favor of the familiar `.txt` extension. It makes
-  more sense in that AsciiDoc is a text presentation format and
-  because `.asc` clashed with the same extension used by other
-  applications.  It's only a naming convention -- you don't have to
-  switch if you don't want to.
-- Changed the subscript formatting character from underline to tilde
-  since underscores in file names are reasonably common (especially in
-  link and image macros).
-- An alternative syntax for the index term inline macro has been
-  added: `++<primary>,<secondary>,<tertiary>++`.
-- Index terms that have secondary and tertiary entries now
-  additionally generate separate index terms for the secondary and
-  tertiary entries.
-- A `+<primary>+` index term inline macro has been added which
-  displays the term in the primary text flow.
-- Added alternative variable list definition using double semi-colon
-  terminator as opposed to the standard double colon terminator so
-  variable lists can be nested to two levels.
-- Footnotes now appear on a separate line in HTML and Linuxdoc
-  outputs.
-- Python version compatibility is checked at startup.
-- Preface and appendix section titles in multi-part Book documents are
-  meant to be out of sequence -- warnings are no longer emitted when
-  outputting HTML.
-- Empty section warnings have been replaced by error messages and are
-  emitted only if invalid markup would result.
-- Missing macro sections or invalid macro name warnings are only
-  generated at startup if the `-v` (verbose) option is set. Otherwise
-  they are deferred until a matching macro is encountered in the input
-  file.
-- Missing or invalid table definition warnings are only generated at
-  startup if the `-v` (verbose) option is set. Otherwise they are
-  deferred until a matching table is encountered in the input file.
-- AsciiDoc now makes more of an effort to continue in the face of
-  errors.
-- Fixed broken `./examples/website/main.aap` script.
-- Converted distribution text files DOS text format as a sop to
-  Windows users with challenged text editors.
-- Documentation additions and corrections.
-
-
-Version 5.0.8 (2004-05-15)
---------------------------
-- Spurious 'out of sequence' level 2 warnings no longer appear when
-  processing 'book' document multi-part book top level Preface and
-  Appendix sub-sections since they are (correctly) out of sequence.
-- A warning is no longer emitted for empty Index sections since this
-  is normal when generating DocBook outputs.
-- Fixed: `[quotes]` configuration file entries where not being
-  overridden by downstream configuration file entries.
-- Footnote text is now output enclosed in square brackets in HTML
-  documents.
-- Added superscripts and subscripts to the standard PRS configuration
-  files.
-- Adjusted CSS stylesheets so list titles don't have so much space
-  between title and first list item (broken in IE6 due to poor CSS
-  compliance). Lessened sidebar title top margin.
-
-
-Version 5.0.7 (2004-04-22)
---------------------------
-- The version 5.0.6 README incorrectly stated that AsciiDoc would run
-  under Python 2.0, in fact it requires Python 2.1 or better. The
-  README has been corrected.
-- Documented techniques for combining and splitting AsciiDoc documents
-  and processing the combined and split parts (see the 'Tips and
-  Tricks' section of the User Guide).
-- An example of marking up superscripts and subscripts is documented
-  in the 'Tips and Tricks' section of the User Guide (the example
-  configuration file is in the AsciiDoc `examples` directory).
-- Added ellipsis to shipped `[replacements]`; three periods output an
-  ellipsis entity.
-- Removed unused 'SectionClose' class.
-- The AsciiDoc 'Preamble' element is output as a DocBook 'Preface'
-  when processed as a 'book' document type (in older AsciiDoc versions
-  a warning was issued and processing stopped).
-- Fixed a quoting anomaly: quoted text can no longer begin or end with
-  with white space.
-
-
-Version 5.0.6 (2004-03-07)
---------------------------
-- New 'image' macro implements optional image scaling and linking and
-  works in both inline and block contexts. The 'image' macro obsolesces
-  the existing 'graphic' block macro and 'icon' inline macro.
-- Macro substitution section names now have `-inlinemacro` and
-  `-blockmacro` suffixes to resolve context ambiguity, make their
-  purpose clearer and relieve section namespace congestion.
-- Header derived glossary entries can now be overridden from the
-  command-line.
-- Special character substitution is now performed on AuthorLine
-  derived author names.
-- A macro or block argument called 'options' can be used as a shortcut
-  for a list named arguments with zero length string values.
-- Tables can be output without borders using the `options="noborders"`
-  argument.
-- Table data lines that do not immediately follow a table section
-  underline can now be blank. This allows CSV data with embedded blank
-  lines to be processed correctly.
-- Blank DSV format table data lines are silently skipped.
-- Tightened up on enforcement of configuration file section names to
-  reduce the possibility of section content being seen as a section
-  header line.
-- Section titles can be optionally suffixed with title arguments
-  enclosed in double square brackets.
-- A replacement has been added to `asciidoc.conf` to replace inline
-  double dashes with the `—` entity.
-- Changed the `.UNDER-CONSTRUCTION.` macro syntax to
-  `#UNDER-CONSTRUCTION#` so it is not mistaken for a BlockTitle.
-  Similarly changed the `.NEW.` replacement with
-  `#NEW#`.
-- `#NEW#` and `#UNDER-CONSTRUCTION#` macros are now
-  included in the DocBook backend.
-- Replaced shipped `smallnew.gif` with `smallnew.png`.
-- Documentation tidy ups.
-
-
-Version 5.0.5 (2004-02-25)
---------------------------
-- Fixed the disappearing paragraph titles problem that was caused by
-  Inline macros (incorrectly) processing BlockTitles.
-- Tightened AuthorLine validation.  Previously invalid email addresses
-  and embedded special characters in the AuthorLine resulted in
-  invalid output markup.
-
-
-Version 5.0.4 (2004-02-09)
---------------------------
-- Reinstated missing `infile`, `outfile`, `filetype` and
-  `filetype-<filetype>` glossary entries.
-- As of version 5.0.3 asciidoc(1) now requires Python 2.0 or greater,
-  this has now been documented.
-
-
-Version 5.0.3 (2004-01-23)
---------------------------
-- Fixed problem that caused any filters directory file containing
-  `.conf` (not just those with the `.conf` extension) from being
-  loaded.
-- All `[miscellaneous]` configuration file entries can now be
-  referenced like glossary entries (they are now processed internally
-  as glossary entries).
-- The output file line terminator (previously hardwired to `\r\n` is
-  now set using the `newline` entry in the configuration file
-  `[miscellaneous]` section.
-- The misspelt `blocktitles` configuration file entry name has been
-  corrected (to `blocktitle`).
-- An `{empty}` glossary entry has been added to the default
-  configuration which is useful for outputting trailing blank lines
-  from configuration file substitution sections.
-
-
-Version 5.0.2 (2003-12-18)
---------------------------
-- New (alternative) 'anchor' and 'xref' macro syntax (old syntax still
-  valid).
-- DocBook `mediaobject` and `inlinemediaobject` tags are generated in
-  place of `graphic` and `inlinegraphic` tags by the AsciiDoc
-  `graphic` and `icon` macros. If a macro argument is specified it is
-  the alternative text output if the target document format does not
-  support the specified graphic file format.
-- Dropped the LinuxDoc left and right square bracket special character
-  substitutions as they interfered with macro substitution.
-- Documentation updates and corrections.
-
-
-Version 5.0.1 (2003-12-09)
---------------------------
-- Fixed problem with anchor tag when generating CSS styled HTML.
-
-
-Version 5.0 (2003-12-08)
-------------------------
-***************************************************
-This release has had some fairly major code and
-documentation changes. Please report any problems
-you encounter.
-
-mailto:srackham at gmail.com['Stuart Rackham']
-***************************************************
-
-- AsciiDoc can now produce a full-blown multi-part DocBook book
-  including dedication, abstract, preface, colophon, glossary,
-  appendix, bibliography and book part elements using the new
-  `specialsections` configuration file section.
-- All Section element children (Paragraph, DelimitedBlock, List,
-  Table, BlockMacro) can now be titled using the BlockTitle element.
-  A BlockTitle element is a single line containing a title and
-  beginning with a period.
-- The `index` and `backmatter` macros have been dropped, superseded by
-  `specialsections`.
-- The AsciiDoc 'Preface' element has been renamed 'Preamble' (to avoid
-  confusion with the DocBook book preface element).
-- Out of sequence titles are now tolerated with a warning. This allows
-  book document level 0 sections to be processed.
-- An 'anchor' inline macro has been added for document link target
-  creation.
-- 'Note', 'Tip', 'Important' and 'Warning' paragraph types have been
-  added to support the corresponding DocBook elements.
-- Title substitution is now performed in SidebarBlock titles.
-- DocBook graphics now output as `figure` and `informalfigure`
-  elements rather than `mediaobjects`. This ensures numbered figures
-  and a lists of figures are produced by the DocBook toolchain.
-- You can now escape block argument lines by appending a backslash.
-  Alternatively, if you embed arguments in the delimiter line AsciiDoc
-  does not check for an arguments line.
-- The default DocBook backend file extension has been changed from
-  `.docbook` to `.xml` (`.sgml` for the 'docbook-sgml' backend).
-- Warnings are output by default (previously they only printed when
-  verbose option enabled).
-- A Question and Answer variable list definition has been added to the
-  shipped configuration files, primarily to create DocBook `qanda`
-  DocBook elements.
-- Fixed broken code-filter `-b linuxdoc` option. The asciidoc.asc User
-  Guide can now be processed by linuxdoc(1) (although tables are
-  dropped because LinuxDoc does not implement tables).
-
-.Compatibility issues:
-1. Table titles are no longer in the arguments line, use the new
-   BlockTitles.
-2. Graphic titles are no longer in the 'graphic' block macro caption,
-   use the new BlockTitles.
-3. The code-filter title must be placed in a preceding BlockTitle.
-4. SidebarBlock titles must be placed in a preceding BlockTitle.
-5. The DelimitedBlock option 'sidebar' has been renamed to 'section'.
-6. The default DocBook backend file extension has been changed from
-`.docbook` to `.xml` (`.sgml` for the 'docbook-sgml' backend).
-
-
-Version 4.2 (2003-11-26)
-------------------------
-- The default HTML output is now XHTML 1.0 markup. To output the
-  former HTML 4 markup specify the `html-4` backend.
-- The default DocBook output is now DocBook XML. To output the former
-  DocBook SGML specify the `docbook-sgml` backend. The associated
-  `docbook-sgml.conf` file illustrates how to support minor DTD
-  variations. Examples of using the `xmlto(1)` command for DocBook
-  conversion have been added to the User Guide.
-- Glossary entries set using the command-line -g option can now be
-  referenced in configuration files.
-- Configuration dumps (`-c` command-line option) no longer output
-  redundant undefined glossary entries.
-- DelimitedBlock arguments can now be specified in a separate arguments
-  line immediately following the leading delimiter line, This is in
-  preference to the existing delimiter embedded arguments. Reasons:
-  * The syntax is in keeping with the Tables arguments syntax.
-  * It's easier to enter and implements line continuation.
-- A new QuoteBlock DelimitedBlock definition has been added to the
-  distribution configuration files.
-- The table arguments lines can be continued using the backslash line
-  continuation character.
-- Added new calculated glossary reference type `{<name>%<value>}`.
-- Double-quote characters can now appear in unquoted positional
-  arguments.
-
-
-Version 4.1 (2003-11-13)
-------------------------
-- Added DSV (Delimiter Separated Values) tables format.
-- `{eval:<expr>}` glossary references drop the containing line if
-  `<expr>` evaluates to `None`.
-- Block, Table and Macro arguments can now be positional (quoted or
-  unquoted).
-- Vocabulary change: DelimitedBlock, Table and Macro 'attributes' are
-  now referred to as 'arguments'. This makes more sense in light of the
-  extended syntax and avoids confusion with backend markup tag
-  attributes.
-- 'tablewidth' table ruler parameter can now be expressed in percent
-  units (0..100). If between 0 and 1 then the original fractional unit
-  measure is applied.
-- The use of quoting for generating footnotes and index entries has
-  been dropped in favor of 'footnote' and 'indexterm' inline macros.
-- 'backmatter' inline macro included in distribution.
-- Fixed: CSS styled HTML tables are now fully XHTML 1.0 conformant.
-- Fixed: 'tablewidth' was processed incorrectly when passed as table
-  argument.
-- Fixed: Glossary references like `{x=\{y}}` were one character off
-  if \{x] was defined and `{y}` was not.
-
-
-Version 4.0 (2003-11-08)
-------------------------
-***************************************************
-This release has had some fairly major code and
-documentation changes. Please report any problems
-you encounter.
-
-'Stuart Rackham'
-***************************************************
-
-- Added tables to AsciiDoc.
-- Added two special 'subs' options: 'default' specifies the default
-  substitution options and 'none' specifies no substitution.  These
-  options can only appear singly.
-- Line continuation using a trailing backslash character is available
-  in Paragraphs, ListItems, Tables.
-- The left and right quotes for quoted text can now be specified
-  separately.
-- Shipped configuration files implement footnotes (only useful for
-  DocBook output) using \[[]] quoting.
-- Shipped configuration files implement index terms (only useful for
-  DocBook and LinuxDoc output) using \(()) quoting.
-- The shipped 'html' backend configuration now emits valid 'HTML 4.01
-  Transitional'.
-- Added new calculated glossary reference types `{<name>!<value>}`
-  and `{<name>#<value>}`.
-- The DelimitedBlock 'params' option has been dropped in favor of the
-  new 'block attributes' mechanism. If you have customized block
-  params options you may need to adjust source files to use the
-  'block attributes' syntax. The example code filter has been updated
-  to reflect these changes.
-- The code filter now has a `-t tabsize` option.
-- Replaced `-w` option with `-v` (verbose) option. The warnings option
-  was just to confusing.
-- Named attributes can now be specified in macro calls.
-- The 'tabsize' attribute is recognized in the built-in `include`
-  macros. A tabsize of zero suppresses tab expansion.
-- The configuration file `[options]` section has been split into
-  `[miscellaneous]` and `[titles]`. If you have customized any of
-  these settings you will need to adjust the affected configuration
-  files.
-- Configuration file `[miscellaneous]` entries can now also be set
-  using the command-line `-g` option.
-- Fixed: error that occurred when attempting to use zero length
-  configuration and source files.
-- Fixed: blocking filter halt problem.
-- Fixed: inline macro escape prefix problem.
-- Fixed: missing macros from configuration dump problem.
-- Fixed: named macros were dumped incorrectly.
-- Many documentation changes/additions/corrections.
-
-
-Version 3.2.2 (2003-10-26)
---------------------------
-- Added `-n` option (synonym for `-g section-numbers`).
-- Dropped the processing commentary (hey, this is Unix).
-- Added new calculated glossary reference type `{<name>?<value>}`.
-  `<name>` is the glossary entry name and `<value>` is the text
-  substituted if the glossary entry is defined. `<value>` can only
-  contain literal text (no glossary references allowed).
-- Added `asciidoc2text` to distribution `examples/asciidoc2text`
-  directory (converts AsciiDoc source to text file with section
-  numbering).
-- Fixed incorrect nesting of Simple lists inside Variable lists.
-- List definitions have been modified so that list items can be
-  indented. This allows a more intuitive indentation of nested lists
-  in AsciiDoc source.
-- Lists must be separated from preceding paragraphs by a blank line.
-  This is to avoid paragraph lines being mistaken for list items.
-- Corrected asciidoc man page documentation error: the`-f` option does
-  *not* search relative to source document directory for the
-  configuration file.
-- Minor updates to various distribution `.conf` files.
-- Included `badges.conf` in `examples` directory.
-- `css-embedded-stylesheet.conf` now supports footer badges.
-- The default in-line element processing order has been changed:
-  Glossary References are now processed before Inline Macros. This
-  allows glossary expansions to occur inside macro references.
-- Glossary entries are now allowed in Author and Revision lines.
-- Default List `subs` options and Paragraph `presubs` options are
-  assigned the following default value if not specified:
-
-  specialcharacters,quotes,specialwords,replacements,glossary,macros
-
-- Documentation changes/additions/corrections.
-
-
-Version 3.2 (2003-05-26)
-------------------------
-- Added a `-s` command-line option to suppress the output of
-  `[header]` and `[footer]` sections.
-- Article document headers are no longer mandatory: this allows
-  AsciiDoc to process arbitrary chunks of text. When used in
-  conjunction with the new `-s` command-line option corresponding
-  chunks of backend markup can be generated.
-- AsciiDoc now emits a warning message and continues when an out of
-  sequence section title is detected (previously it failed and
-  halted). This allows document sections to be processed separately.
-- Optional 'presubs' and 'postsubs' entries have been added to
-  'DelimitedBlock' and 'Paragraph' definitions. As a consequence
-  substitution options are no longer legal in 'options' entries.
-- 'presubs' and 'postsubs' substitutions are processed in the order
-  the options are specified (rather than the fixed 'options' order of
-  previous versions).
-- ./filters subdirectories are automatically searched for filter
-  commands.
-- A 'title-subs' configuration option specifies the substitutions
-  performed on document Header and Section titles.
-- A 'subs' entry in now included in List configuration file
-  definitions that specified substitutions performed on list entry
-  text.
-- Configuration files are auto-loaded from ./filters subdirectories.
-- Added example code filter (see ./examples/filters).
-- Bug fix: if section was empty you may have got erroneous 'missing
-  tag "paragraph"' error.
-- Internal code tidy up.
-
-
-Version 3.1 (2003-05-18)
-------------------------
-- In version 3.0 a `[macros]` section entry of the form 'name' was
-  equivalent to 'name='. An entry of the form 'name' now undefines the
-  entry (to bring it in line with the behavior of other special
-  sections).
-- Paragraphs have now been generalized (in the same way as Lists and
-  DelimitedBlocks).
-- The 'indentsize' option has been dropped as as consequence of
-  paragraph generalization.
-- Pipe | characters can be included in substituted tag and
-  substitution section text using the \{brvbar} (broken vertical bar)
-  glossary reference.
-- Removed the restriction requiring substitution section text
-  placeholders | to be on a separate line.
-- Added an `-e` asciidoc(1) command option that excludes implicit
-  configuration files (used in conjunction with `-c` generated
-  configuration files).
-- Version 3.0 documentation has undergone a considerable cleanup.
-- The dumping of quoted section entries (see `-c` option) now works
-  correctly.
-- The format of special section entries has been made consistent:
-  `name` undefines the entry; `name=` sets the entry value to a blank
-  string; `name=value` sets the entry value to `value`.
-- As a consequence of the previous change the caret prefix is no
-  longer used in glossary configuration file entries (although it is
-  still used when undefining an entry using the `-g` command-line
-  option).
-
-
-Version 3.0 (2003-05-13)
-------------------------
-This version is the culmination of work begun in the 2.x releases
-whereby fixed policy has been replaced by extensible mechanisms.
-
-- Added `-c` command-line option to dump a composite asciidoc(1)
-  configuration file to stdout.
-- Lists and Delimited Blocks are now defined by a set of configuration
-  file parameter sections.  The user can modify the default
-  definitions or add new ones.
-- Block content can now be processed through external filters.
-- The default behavior for Custom Blocks is to perform glossary
-  substitution (previously there was no substitution inside Custom
-  Blocks).
-- The old 2.x style macros have been reimplemented; as with Lists and
-  Delimited Blocks there syntax and behavior can be configured by the
-  user. The default macro syntax remains the same but the semantics
-  are now (hopefully) a bit more intelligible.
-- Block and Builtin macros use :: delimiter instead of the 2.x single
-  colon delimit (to distinguish them from inline macros). The 2.x
-  syntax is still supported for backward compatibility.
-- Nested lists are now supported and IndentedParagraphs can be
-  included in list items.
-- Conditional source inclusion can be specified using built in `ifdef`,
-  `ifndef` and `endif` macros.
-- The new conditional source inclusion feature has been used to reduce
-  the number of default configuration files down to one per backend.
-- A change of name: 2.x 'Substitutions' are now called 'Replacements'
-  and the 2.x `[substitutions]` configuration file section is now
-  called `[replacements]` (the old name is still recognized for
-  backward compatibility).
-- The line break is now implemented as a 'Replacements' substitution.
-- Inline 'icon' macro for inline images has been added to default
-  configuration files.
-
-Version 2.2 (2003-04-07)
-------------------------
-- The `master.conf` configuration file name has been deprecated in
-  favor of `asciidoc.conf`.
-- The standard configuration files set is now loaded from the
-  `.asciidoc` folder in the users home directory (if it exists) and
-  then from the source document directory. Configuration files that
-  don't exist are silently skipped.
-- Configuration files named like the source file will be automatically
-  loaded if they are found in the source file directory. For example
-  if the source file is `mydoc.asc` and the `-b html` option is used
-  then asciidoc(1) will look for `mydoc.conf` and `mydoc-html.conf` in
-  that order.
-- The characters used to quote formatted text can be configured and
-  extended by the user (see the master.conf [quotes] section).
-- Quoted text can now be escaped by prefixing a backslash character to
-  the leading quote.
-- The double single-quote '' strong text quote has been deprecated in
-  favor of an asterisk * character.
-- Added \{eval:expression}, \{sys:command} and \{sys2:command}
-  glossary reference actions.
-- Trailing brace characters `}` are now allowed inside glossary
-  references provided they are escaped with a backslash character.
-- Glossary entries can now be escaped by prefixing a backslash
-  character to the leading brace character (use this in preference to
-  placing the backslash inside the brace).
-- The output macro has been deprecated (use the new include1 macro
-  inside a CustomBlock).
-- The default document type is `article` (asciidoc no longer attempts
-  to guess).
-- Files included within DelimitedBlocks are not searched for block
-  termination underlines. This ensures the entire file is part of the
-  DelimitedBlock.
-- `include` macros can now be used in configuration files.
-- Corrected \{infile} and \{outfile} glossary entry documentation.
-- File inclusion is now limited to a depth of 5 to catch recursion
-  loops.
-- Inline tags have been deprecated, they're not necessary and they
-  immediately make the source document backend specific. Use
-  CustomBlocks or Substitutions instead.
-
-Version 2.1 (2003-03-17)
-------------------------
-- Added section auto numbering `{sectnum}` glossary entry
-  (auto-numbering function contributed by Ludovico Magnocavallo).
-- asciidoc(1) now correctly returns non-zero exit status if an error
-  occurs.
-- An AsciiDoc example website has been included in the AsciiDoc
-  distribution `examples/website` directory.
-- NOTE: The `asciidoc` wrapper script included in the 2.0 distribution
-  has been dropped, if you've symlinked or aliased to `asciidoc` you'll
-  need to change them to point directly to `asciidoc.py` instead.
-- An RCS $Id$ marker can be used as the  document header revision line
-  (based on a patch submitted by Ludovico Magnocavallo).
-- In addition to the `name=value` glossary entry format two new ones
-  have been introduced: `name` (the default value is set to an empty
-  string) and `^name` (the glossary entry is undefined).
-- The `-q` command-line option has been deprecated and the `-w level`
-  command-line option added. +
-  NOTE: By default skipped substitution warnings are now suppressed.
-- If a configuration file specified with the `-f` command-line option
-  is not found relative to the current working directory then the
-  search is repeated relative to the asciidoc(1) directory. This
-  allows global configuration files to be used.
-- Added `{infile}`, `{outfile}` predefined glossary entries.
-- Added `under-construction` macro to HTML article configuration
-  files.
-- Deprecated `{asciidoc_version}` glossary entry in favor of
-  `{asciidoc-version}` (to it consistent with other entries).
-
-Version 2.0 (2003-02-24)
-------------------------
-- The emphasized, strong and monospaced words options have been
-  generalized with the introduction of macro based 'special words'
-  lists.
-- Glossary references can now appear in both the document and macro
-  bodies.
-- All output files use `crlf` line termination (previously used UNIX
-  `lf` (newline) termination).
-- Added [substitutions] section which implements arbitrary regular
-  expression based substitutions.
-- An optional `master.conf` configuration file can be used for entries
-  that are not backend or document type specific.
-- Special character definitions moved from the code to the new
-  [special_characters] configuration file section.
-- Configuration file glossary added.
-- Command-line -g glossary entry added.
-- A new 'book' document type has been implemented for the 'docbook'
-  backend. It outputs DocBook 'book' documents.
-- A major internal change has been the implementation of parametrized
-  user definable 'macros'. Internally most document elements are now
-  processed as macros.
-- Configuration file macro variables can be specified with default
-  values (literals or other macro variables).
-- An attempt has been made to tighten up the vocabulary used to
-  describe the AsciiDoc document syntax.
-- The term abstract has been replaced by the more general term
-  'preface' and a new preface section introduced into article
-  configuration files (replacing the synopsis sections).
-- Any section elements can now be put in the document preface
-  (previous versions only allowed paragraphs).
-- AsciiDoc Blocks have been unified and their behavior can be user
-  defined and parametrized.
-- An 'output' inclusion allows an external file to be written directly
-  to the backend output file.
-- A new CustomBlock has been added. Default behavior is to insert the
-  enveloped AsciiDoc source lines directly into the output file.
-- A 'line break' tag can be inserted by terminating a line with a '+'
-  character (only really useful for HTML backends).
-- An fourth section level has been introduced.
-- The SidebarBlock delimiter line characters have been changed. The
-  deprecated underline is still accepted.
-- Levels 2 and 3 title underline characters have been changed.  The
-  deprecated underlines are still accepted.
-- Lines with backend specific inline tags can be inserted into
-  AsciiDoc source files.
-- Single words enveloped by underscores are no longer emphasized. This
-  feature was deprecated as it is redundant (use single quotes
-  instead) and was being applied to file names with underscores.
-- A `-q` quiet option has been added to suppress warning messages.
-- Badge images sourced locally.
-- Added 'author' and 'author-mail' meta tags to HTML configuration
-  files.
-
-Version 1.5 (2003-01-08)
-------------------------
-- Implemented sidebar document elements.
-- Explicit checks for user specified configuration files and input
-  file (rather than throwing exception).
-
-Version 1.4 (2003-01-04)
-------------------------
-- New configuration file options 'emphasizedwords' and 'strongwords'.
-  These allow the definition of words that will always be emphasized
-  or rendered in a strong font without inline formatting.
-- Document and section titles are no long subject to inline
-  formatting.
-- Multiple configuration files can be overlaid in a single command.
-- Configuration file tags and options entries can now be overridden on
-  an entry by entry basis (previously the entire section was
-  overloaded).
-- Configuration file tags and options entries are now cached this has
-  resulted in around 37% performance improvement over version 1.3.
-- Variable lists can now contain multiple terms per list item.
-- Placeholder paragraph eliminated from empty sections that contain
-  subsections.
-- Added \{asciidoc_version} substitution variable.
-- More documentation additions and tidy ups.
-
-Version 1.3 (2003-01-01)
-------------------------
-- A new 'strong' text formatting convention has been implemented:
-  Word phrases enclosed in pairs of single quote characters (acute
-  accents) are rendered in a strong font (usually bold).
-- Paragraphs can now be followed immediately by Simple lists and
-  Ordered lists without an intervening blank line.
-- A user specified configuration file (`asciidoc(1)` -f option)
-  overlays the default configuration file rather than replacing it.
-  Custom configuration files need only contain those sections
-  that have been customized.
-- Comment Block delimiters have been relaxed slightly. They must start
-  with three forward slashes /// but the remainder can contain any
-  characters, this allows comments to be embedded in the delimiter line.
-- Leading non-digit characters preceding revision number are now
-  ignored.
-- Set default indentsize [option] from 2 to documented default value
-  of zero in HTML backend html-article.conf and html-manpage.conf
-  files.
-- Fixed error that occurred when taking input from stdin without
-  explicitly specifying a document type.
-- Restored file name and line number error message information.
-- Changed deprecated -t option to -d in asciidoc --help and usage
-  command output.
-- CSS styles tweaking.
-- Code, configuration file and documentation tidy ups.
-
-Version 1.2 (2002-12-28)
-------------------------
-- Implemented 'include' URL to allow file inclusion.
-- `fileextension` configuration file [option] renamed to more sensible
-  `outfilesuffix` (`fileextension` still accepted by this version but
-  will be dropped in future).
-- Improved error reporting.
-- CSS backends generate valid XHTML.
-- New `css-embedded` backend generates HTML with embedded stylesheets
-  (use the `css` backend for linked stylesheets). The css-embedded
-  backend output contains no linked images so the generated html files
-  are completely self contained.
-- Bug fixes.
-
-Version 1.1 (2002-12-03)
-------------------------
-- Added css (cascading style sheets) backend
-- Implemented IndentedBlock document element.
-- Tabsize command-line option has been deprecated in
-  favor of configuration file.
-- Default indent width changed to zero.
-- Added \{localdate} and \{localtime} substitution variables.
-- Added optional [options] configuration file section with
-  fileextension, tabsize and indentsize options.
-- Implemented \{authorinitials} substitution variable.
-- Added https link type.
-- Corrected [graphic] substitution from \{title} to \{caption}
-  in linuxdoc-article.conf configuration file.
-- Fixed error that occurred when '==' title underline was
-  used.
-
-Version 1.0 (2002-11-25)
-------------------------
-First AsciiDoc public release along with AsciiDoc web site
-(http://www.methods.co.nz/asciidoc/) and SourceForge.net project registration
-(https://sourceforge.net/projects/asciidoc/[]).
-
-// vim: set syntax=asciidoc:
diff --git a/source-builder/sb/asciidoc/COPYING b/source-builder/sb/asciidoc/COPYING
deleted file mode 100644
index a43ea21..0000000
--- a/source-builder/sb/asciidoc/COPYING
+++ /dev/null
@@ -1,339 +0,0 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                          675 Mass Ave, Cambridge, MA 02139, USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-	Appendix: How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) 19yy  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) 19yy name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/source-builder/sb/asciidoc/COPYRIGHT b/source-builder/sb/asciidoc/COPYRIGHT
deleted file mode 100644
index 13273f3..0000000
--- a/source-builder/sb/asciidoc/COPYRIGHT
+++ /dev/null
@@ -1,18 +0,0 @@
-Copyright (C) 2000-2007 Stuart Rackham
-
-Email: srackham at gmail.com
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at
-your option) any later version.
-
-This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
-USA.
diff --git a/source-builder/sb/asciidoc/INSTALL b/source-builder/sb/asciidoc/INSTALL
deleted file mode 100644
index cfca794..0000000
--- a/source-builder/sb/asciidoc/INSTALL
+++ /dev/null
@@ -1,235 +0,0 @@
-                             AsciiDoc Installation
-
-   version 8.6.8, 17 July 2012
-
-   Note
-       The current version of AsciiDoc requires Python 2.4 or newer to run. If
-       you don’t already have an up-to-date version of Python installed it can
-       be downloaded from the official Python website
-       [1]http://www.python.org/.
-     __________________________________________________________________
-
-1. Prerequisites
-
-   See the [2]README page.
-     __________________________________________________________________
-
-2. Installing from the Mercurial repository
-
-   The AsciiDoc [3]Mercurial repository is hosted by [4]Google Code. To
-   browse the repository go to
-   [5]http://code.google.com/p/asciidoc/source/browse/. You can install
-   AsciiDoc from the repository if you don’t have an up to date packaged
-   version or want to get the latest version from the trunk:
-     * Make sure you have [6]Mercurial installed, you can check with:
-  $ hg --version
-     * Go to the directory you want to install AsciiDoc into and download
-       the repository. This example gets the 8.6.8 tagged release:
-  $ cd ~/bin
-  $ hg clone -r 8.6.8 https://asciidoc.googlecode.com/hg/ asciidoc-8.6.8
-
-   You now have two choices: you can run asciidoc locally from your
-   repository or you can use autoconf(1) and make(1) to perform a
-   system-wide install.
-
-  2.1. Running asciidoc from your local copy
-
-   Create a symlink to the AsciiDoc script in a search PATH directory so
-   it’s easy to execute asciidoc from the command-line, for example:
-  $ ln -s ~/bin/asciidoc-8.6.8/asciidoc.py ~/bin/asciidoc
-  $ ln -s ~/bin/asciidoc-8.6.8/a2x.py ~/bin/a2x
-
-   Use the Mercurial pull command to update your local AsciiDoc
-   repository.
-
-  2.2. Installing asciidoc for all users
-
-   Create configure using autoconf(1); use configure to create the
-   Makefile; run make(1); build the man pages; install:
-
-     $ autoconf
-     $ ./configure
-     $ make
-     $ sudo make install
-
-   To uninstall:
-
-     $ sudo make uninstall
-     __________________________________________________________________
-
-3. Distribution tarball installation
-
-   The distribution source tarballs can be downloaded from the SourceForge
-   [7]http://sourceforge.net/projects/asciidoc/.
-
-   Note
-       Unless you are [8]installing on Microsoft Windows you should use the
-       tarball and not the zip file to install the the distribution (the
-       tarball contains symlinks).
-
-   If your flavor or UNIX or Linux does not have a packaged AsciiDoc
-   distribution or if you prefer to install the latest AsciiDoc version
-   from source use the configure shell script in the tarball root
-   directory.
-
-   The autoconf(1) generated configure script creates a make file that is
-   tailored for your system. To install:
-  $ tar -xzf asciidoc-8.6.8.tar.gz
-  $ cd asciidoc-8.6.8
-  $ ./configure
-  $ sudo make install
-
-   To install the documentation:
-  $ sudo make docs
-
-   To uninstall AsciiDoc:
-  $ sudo make uninstall
-
-   If Vim is installed on your system the AsciiDoc Vim syntax highlighter
-   and filetype detection scripts will be install in the global Vim
-   configuration file directory (asciidoc.vim in the syntax directory and
-   asciidoc_filetype.vim in the ftdetect directory).
-     __________________________________________________________________
-
-4. Microsoft Windows installation
-
-   AsciiDoc is developed and tested on Linux but there seem to be quite a
-   few people using it on Windows. To install AsciiDoc on Windows unzip
-   the distribution Zip file contents:
-  $ unzip asciidoc-8.6.8.zip
-
-   This will create the folder asciidoc-8.6.8 containing the asciidoc.py
-   and a2x.py executables along with configuration files and
-   documentation.
-
-   To generate DocBook based outputs (e.g. PDFs) you will also need a
-   working DocBook toolchain. Installing and configuring a DocBook
-   toolchain on Windows can be a challenge — this blog post explains
-   [9]How to Create Handsome PDF Documents Without Frustration using
-   [10]Cygwin, [11]dblatex and AsciiDoc.
-     __________________________________________________________________
-
-5. Testing your installation
-
-   Test out asciidoc by changing to the AsciiDoc application directory and
-   convert the User Guide document (./doc/asciidoc.txt) to XHTML
-   (./doc/asciidoc.html):
-  $ python asciidoc.py doc/asciidoc.txt
-
-   [12]testasciidoc offers a more extensive set of conformance tests,
-   though you do need to create the test data before running the tests
-   (this in itself is a good post-install test):
-  $ python ./tests/testasciidoc.py update
-
-   Now you can run the tests by executing this command:
-  $ python ./tests/testasciidoc.py run
-
-   A full battery of tests can be run from the main.aap script in the
-   distribution root directory:
-  $ aap test
-     __________________________________________________________________
-
-6. Building the distribution
-
-   The AsciiDoc distribution is built using [13]A-A-P (a software build
-   system written by Bram Moolenaar). The AsciiDoc A-A-P scripts are:
-
-   ./main.aap
-          Builds the distribution tarball and zip files, documentation and
-          example website.
-
-   ./doc/main.aap
-          Builds distribution documentation.
-
-   ./examples/website/main.aap
-          Builds AsciiDoc website.
-
-   ./common.aap
-          Included in all scripts.
-
-   To build the distribution tarball and zip files, documentation and
-   example website run A-A-P from the distribution root directory:
-  $ aap
-     __________________________________________________________________
-
-7. Prepackaged AsciiDoc installation
-
-   The following platform specific AsciiDoc packages are available:
-
-   Debian GNU/Linux
-          If you use Debian or a Debian based distribution there’s an
-          [14]AsciiDoc Debian package available. Thanks to [15]Fredrik
-          Steen who built and maintains the Debian AsciiDoc package.
-
-   Gentoo Linux
-          If you use Gentoo Linux there’s a [16]Gentoo AsciiDoc package
-          available. Thanks to [17]Brandon Philips for writing the ebuild.
-
-   Fedora Linux
-          With help from Terje Røsten, Chris Wright added asciidoc to
-          Fedora Extras which is available in the default installation. To
-          install asciidoc execute the following command:
-
-  $ yum install asciidoc
-
-   Slackware Linux
-          John Calixto has created a Slackware package for AsciiDoc which
-          can be downloaded from [18]http://linuxpackages.net/.
-
-   Ark Linux
-          [19]Bernhard Rosenkraenzer added AsciiDoc to Ark Linux — the
-          package is available from the Ark Linux repository at
-          [20]http://arklinux.osuosl.org/dockyard-devel/, so Ark Linux
-          users should just run apt-get install asciidoc.
-
-   T2 Linux
-          [21]Christian Wiese added AsciiDoc to the [22]T2 Linux
-          repository at
-          [23]http://svn.exactcode.de/t2/trunk/package/textproc/asciidoc/.
-          To build and install the package on a T2 system, run
-          ./scripts/Emerge-Pkg asciidoc from within your T2 source
-          directory (default: /usr/src/t2-src).
-
-   Red Hat Enterprise Linux, Fedora and CentOS packages
-          Dag Wieers has built AsciiDoc RPMs for a number of Red Hat based
-          distributions, they can be downloaded from
-          [24]http://dag.wieers.com/rpm/packages/asciidoc/.
-
-   CSW Package for Sun Solaris
-          Ben Walton has created a CSW package for AsciiDoc, you can find
-          it here: [25]http://opencsw.org/packages/asciidoc.
-
-   See also [26]Packager Notes in the AsciiDoc User Guide.
-     __________________________________________________________________
-
-   Version 8.6.8
-   Last updated 2010-11-15 08:44:54 NZDT
-
-References
-
-   1. http://www.python.org/
-   2. file://localhost/tmp/lynxXXXXr4pa6e/README.html
-   3. http://www.selenic.com/mercurial/
-   4. http://code.google.com/
-   5. http://code.google.com/p/asciidoc/source/browse/
-   6. http://www.selenic.com/mercurial/
-   7. http://sourceforge.net/projects/asciidoc/
-   8. file://localhost/tmp/lynxXXXXr4pa6e/L12440-2561TMP.html#X3
-   9. http://blog.rainwebs.net/2010/02/25/how-to-create-handsome-pdf-documents-without-frustration/
-  10. http://www.cygwin.com/
-  11. http://dblatex.sourceforge.net/
-  12. file://localhost/tmp/lynxXXXXr4pa6e/testasciidoc.html
-  13. http://www.a-a-p.org/
-  14. http://packages.debian.org/asciidoc
-  15. mailto:stone at debian.org
-  16. http://packages.gentoo.org/package/app-text/asciidoc
-  17. mailto:brandon at ifup.org
-  18. http://linuxpackages.net/
-  19. mailto:bero at arklinux.org
-  20. http://arklinux.osuosl.org/dockyard-devel/
-  21. mailto:cw at ixplanet.de
-  22. http://www.t2-project.org/
-  23. http://svn.exactcode.de/t2/trunk/package/textproc/asciidoc/
-  24. http://dag.wieers.com/rpm/packages/asciidoc/
-  25. http://opencsw.org/packages/asciidoc
-  26. file://localhost/tmp/lynxXXXXr4pa6e/userguide.html#X38
diff --git a/source-builder/sb/asciidoc/INSTALL.txt b/source-builder/sb/asciidoc/INSTALL.txt
deleted file mode 100644
index eb07ddd..0000000
--- a/source-builder/sb/asciidoc/INSTALL.txt
+++ /dev/null
@@ -1,227 +0,0 @@
-AsciiDoc Installation
-=====================
-
-NOTE: The current version of AsciiDoc requires *Python 2.4 or newer*
-to run.  If you don't already have an up-to-date version of Python
-installed it can be downloaded from the official Python website
-http://www.python.org/.
-
-
-Prerequisites
--------------
-See the link:README.html[README] page.
-
-
-Installing from the Mercurial repository
-----------------------------------------
-The AsciiDoc http://www.selenic.com/mercurial/[Mercurial] repository
-is hosted by http://code.google.com/[Google Code].
-To browse the repository go to
-http://code.google.com/p/asciidoc/source/browse/.
-You can install AsciiDoc from the repository if you don't have an up to
-date packaged version or want to get the latest version from the trunk:
-
-- Make sure you have http://www.selenic.com/mercurial/[Mercurial]
-  installed, you can check with:
-
-  $ hg --version
-
-- Go to the directory you want to install AsciiDoc into and download
-  the repository.  This example gets the {revnumber} tagged release:
-
-[subs="attributes"]
-  $ cd ~/bin
-  $ hg clone -r {revnumber} https://asciidoc.googlecode.com/hg/ asciidoc-{revnumber}
-
-You now have two choices: you can run asciidoc locally from your
-repository or you can use 'autoconf(1)' and 'make(1)' to perform a
-system-wide install.
-
-Running asciidoc from your local copy
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Create a symlink to the AsciiDoc script in a search `PATH` directory
-so it's easy to execute `asciidoc` from the command-line, for example:
-
-[subs="attributes"]
-  $ ln -s ~/bin/asciidoc-{revnumber}/asciidoc.py ~/bin/asciidoc
-  $ ln -s ~/bin/asciidoc-{revnumber}/a2x.py ~/bin/a2x
-
-Use the Mercurial `pull` command to update your local AsciiDoc repository.
-
-Installing asciidoc for all users
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Create `configure` using 'autoconf(1)'; use `configure` to create the
-`Makefile`; run 'make(1)'; build the man pages; install:
-
----------------------------------------------
-$ autoconf
-$ ./configure
-$ make
-$ sudo make install
----------------------------------------------
-
-To uninstall:
-
----------------------------------------------
-$ sudo make uninstall
----------------------------------------------
-
-
-[[X1]]
-Distribution tarball installation
----------------------------------
-The distribution source tarballs can be downloaded from the
-SourceForge http://sourceforge.net/projects/asciidoc/.
-
-NOTE: Unless you are <<X3,installing on Microsoft Windows>> you should
-use the tarball and not the zip file to install the the distribution
-(the tarball contains symlinks).
-
-If your flavor or UNIX or Linux does not have a packaged AsciiDoc
-distribution or if you prefer to install the latest AsciiDoc version
-from source use the `configure` shell script in the tarball root
-directory.
-
-The `autoconf(1)` generated `configure` script creates a make file
-that is tailored for your system. To install:
-
-[subs="attributes"]
-  $ tar -xzf asciidoc-{revnumber}.tar.gz
-  $ cd asciidoc-{revnumber}
-  $ ./configure
-  $ sudo make install
-
-To install the documentation:
-
-  $ sudo make docs
-
-To uninstall AsciiDoc:
-
-  $ sudo make uninstall
-
-If Vim is installed on your system the AsciiDoc Vim syntax highlighter
-and filetype detection scripts will be install in the global Vim
-configuration file directory (`asciidoc.vim` in the `syntax` directory
-and `asciidoc_filetype.vim` in the `ftdetect` directory).
-
-
-[[X3]]
-Microsoft Windows installation
-------------------------------
-AsciiDoc is developed and tested on Linux but there seem to be quite a
-few people using it on Windows.  To install AsciiDoc on Windows unzip
-the distribution Zip file contents:
-
-[subs="attributes"]
-  $ unzip asciidoc-{revnumber}.zip
-
-This will create the folder +asciidoc-{revnumber}+ containing the
-`asciidoc.py` and `a2x.py` executables along with configuration files
-and documentation.
-
-To generate DocBook based outputs (e.g. PDFs) you will also need a
-working DocBook toolchain. Installing and configuring a DocBook
-toolchain on Windows can be a challenge -- this blog post explains
-http://blog.rainwebs.net/2010/02/25/how-to-create-handsome-pdf-documents-without-frustration/[How
-to Create Handsome PDF Documents Without Frustration] using
-http://www.cygwin.com/[Cygwin],
-http://dblatex.sourceforge.net/[dblatex] and AsciiDoc.
-
-
-Testing your installation
--------------------------
-Test out asciidoc by changing to the AsciiDoc application directory
-and convert the User Guide document (`./doc/asciidoc.txt`) to XHTML
-(`./doc/asciidoc.html`):
-
-  $ python asciidoc.py doc/asciidoc.txt
-
-link:testasciidoc.html[testasciidoc] offers a more extensive set of
-conformance tests, though you do need to create the test data before
-running the tests (this in itself is a good post-install test):
-
-  $ python ./tests/testasciidoc.py update
-
-Now you can run the tests by executing this command:
-
-  $ python ./tests/testasciidoc.py run
-
-A full battery of tests can be run from the `main.aap` script in the
-distribution root directory:
-
-  $ aap test
-
-
-Building the distribution
--------------------------
-The AsciiDoc distribution is built using http://www.a-a-p.org/[A-A-P]
-(a software build system written by Bram Moolenaar). The AsciiDoc
-A-A-P scripts are:
-
-`./main.aap`:: Builds the distribution tarball and zip files,
-documentation and example website.
-`./doc/main.aap`:: Builds distribution documentation.
-`./examples/website/main.aap`:: Builds AsciiDoc website.
-`./common.aap`:: Included in all scripts.
-
-To build the distribution tarball and zip files, documentation and
-example website run A-A-P from the distribution root directory:
-
-  $ aap
-
-
-[[X2]]
-Prepackaged AsciiDoc installation
----------------------------------
-The following platform specific AsciiDoc packages are available:
-
-*Debian GNU/Linux*::
-  If you use Debian or a Debian based distribution there's an
-  http://packages.debian.org/asciidoc[AsciiDoc Debian package]
-  available.  Thanks to mailto:stone at debian.org[Fredrik Steen] who
-  built and maintains the Debian AsciiDoc package.
-
-*Gentoo Linux*::
-  If you use Gentoo Linux there's a
-  http://packages.gentoo.org/package/app-text/asciidoc[Gentoo AsciiDoc
-  package] available. Thanks to mailto:brandon at ifup.org[Brandon
-  Philips] for writing the ebuild.
-
-*Fedora Linux*::
-  With help from Terje Røsten, Chris Wright added asciidoc to Fedora
-  Extras which is available in the default installation. To install
-  asciidoc execute the following command:
-
-  $ yum install asciidoc
-
-*Slackware Linux*::
-  John Calixto has created a Slackware package for AsciiDoc which can
-  be downloaded from http://linuxpackages.net/.
-
-*Ark Linux*::
-  mailto:bero at arklinux.org[Bernhard Rosenkraenzer] added AsciiDoc to
-  Ark Linux -- the package is available from the Ark Linux repository
-  at http://arklinux.osuosl.org/dockyard-devel/, so Ark Linux users
-  should just run `apt-get install asciidoc`.
-
-*T2 Linux*::
-  mailto:cw at ixplanet.de[Christian Wiese] added AsciiDoc to the
-  http://www.t2-project.org/[T2 Linux] repository at
-  http://svn.exactcode.de/t2/trunk/package/textproc/asciidoc/. To
-  build and install the package on a T2 system, run
-  `./scripts/Emerge-Pkg asciidoc` from within your T2 source directory
-  (default: `/usr/src/t2-src`).
-
-*Red Hat Enterprise Linux, Fedora and CentOS packages*::
-  Dag Wieers has built AsciiDoc RPMs for a number of Red Hat based
-  distributions, they can be downloaded from
-  http://dag.wieers.com/rpm/packages/asciidoc/.
-
-*CSW Package for Sun Solaris*::
-  Ben Walton has created a CSW package for AsciiDoc, you can find it
-  here: http://opencsw.org/packages/asciidoc.
-
-See also link:userguide.html#X38[Packager Notes] in the 'AsciiDoc User
-Guide'.
-
-
diff --git a/source-builder/sb/asciidoc/MANIFEST b/source-builder/sb/asciidoc/MANIFEST
deleted file mode 100644
index 68eebb4..0000000
--- a/source-builder/sb/asciidoc/MANIFEST
+++ /dev/null
@@ -1,90 +0,0 @@
-a2x.py
-asciidoc.py
-asciidocapi.py
-BUGS
-BUGS.txt
-MANIFEST
-main.aap
-common.aap
-CHANGELOG
-CHANGELOG.txt
-asciidoc.conf
-docbook45.conf
-help.conf
-html4.conf
-html5.conf
-lang-*.conf
-latex.conf
-slidy.conf
-text.conf
-wordpress.conf
-xhtml11.conf
-xhtml11-quirks.conf
-COPYING
-COPYRIGHT
-dblatex/asciidoc-dblatex.sty
-dblatex/asciidoc-dblatex.xsl
-dblatex/dblatex-readme.txt
-doc/a2x.1
-doc/book.epub
-doc/asciidoc.1
-doc/asciidoc.conf
-doc/article-docinfo.xml
-doc/customers.csv
-doc/images/
-doc/main.aap
-doc/article.pdf
-doc/latex-filter.pdf
-doc/music-filter.pdf
-doc/source-highlight-filter.pdf
-doc/*.txt
-doc/asciidoc.dict
-docbook-xsl/*.txt
-docbook-xsl/*.xsl
-examples/website/main.aap
-examples/website/build-website.sh
-examples/website/*.css
-examples/website/*.js
-examples/website/customers.csv
-examples/website/images/
-examples/website/layout?.conf
-examples/website/*.txt
-filters/code/code-filter.conf
-filters/code/code-filter.py
-filters/code/code-filter-readme.txt
-filters/code/code-filter-test.txt
-filters/latex/latex2png.py
-filters/latex/latex-filter.conf
-filters/music/music-filter.conf
-filters/music/music2png.py
-filters/music/music-filter-test.txt
-filters/source/source-highlight-filter.conf
-filters/source/source-highlight-filter-test.txt
-filters/graphviz/graphviz-filter.conf
-filters/graphviz/graphviz2png.py
-filters/graphviz/asciidoc-graphviz-sample.txt
-images/icons/callouts/*.png
-images/icons/*.png
-images/icons/README
-images/smallnew.png
-images/tiger.png
-images/highlighter.png
-INSTALL
-INSTALL.txt
-configure
-configure.ac
-Makefile.in
-install-sh
-javascripts/*.js
-README
-README.txt
-stylesheets/*.css
-tests/testasciidoc.py
-tests/testasciidoc.conf
-tests/asciidocapi.py
-tests/data/*.conf
-tests/data/*.txt
-themes/flask/*.css
-themes/volnitsky/*.css
-vim/syntax/asciidoc.vim
-vim/ftdetect/asciidoc_filetype.vim
diff --git a/source-builder/sb/asciidoc/Makefile.in b/source-builder/sb/asciidoc/Makefile.in
deleted file mode 100644
index d8672c3..0000000
--- a/source-builder/sb/asciidoc/Makefile.in
+++ /dev/null
@@ -1,185 +0,0 @@
-#
-# Make file to install/uninstall AsciiDoc
-#
-
-.NOTPARALLEL:
-
-INSTALL = @INSTALL@
-INSTALL_PROG = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-SED = @SED@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-bindir = @bindir@
-datadir = @datadir@
-docdir = @docdir@
-sysconfdir = @sysconfdir@
-datarootdir = @datarootdir@
-mandir=@mandir@
-srcdir = @srcdir@
-
-VPATH = @srcdir@
-
-ASCIIDOCCONF = $(sysconfdir)/asciidoc
-
-prog = asciidoc.py a2x.py
-progdir = $(bindir)
-
-vimdir = @sysconfdir@/vim
-
-manp = $(patsubst %1.txt,%1,$(wildcard doc/*.1.txt))
-manpdir = $(mandir)/man1
-
-conf = $(wildcard *.conf)
-confdir = $(ASCIIDOCCONF)
-
-filtersdir = $(ASCIIDOCCONF)/filters
-
-codefilter = filters/code/code-filter.py
-codefilterdir = $(filtersdir)/code
-codefilterconf = filters/code/code-filter.conf
-codefilterconfdir = $(filtersdir)/code
-
-graphvizfilter = filters/graphviz/graphviz2png.py
-graphvizfilterdir = $(filtersdir)/graphviz
-graphvizfilterconf = filters/graphviz/graphviz-filter.conf
-graphvizfilterconfdir = $(filtersdir)/graphviz
-
-musicfilter = filters/music/music2png.py
-musicfilterdir = $(filtersdir)/music
-musicfilterconf = filters/music/music-filter.conf
-musicfilterconfdir = $(filtersdir)/music
-
-sourcefilterconf = filters/source/source-highlight-filter.conf
-sourcefilterconfdir = $(filtersdir)/source
-
-latexfilter = filters/latex/latex2png.py
-latexfilterdir = $(filtersdir)/latex
-latexfilterconf = filters/latex/latex-filter.conf
-latexfilterconfdir = $(filtersdir)/latex
-
-themesdir = $(ASCIIDOCCONF)/themes
-
-flasktheme = themes/flask/flask.css
-flaskthemedir = $(themesdir)/flask
-
-volnitskytheme = themes/volnitsky/volnitsky.css
-volnitskythemedir = $(themesdir)/volnitsky
-
-docbook = $(wildcard docbook-xsl/*.xsl)
-docbookdir = $(ASCIIDOCCONF)/docbook-xsl
-
-dblatex = $(wildcard dblatex/*.xsl) $(wildcard dblatex/*.sty)
-dblatexdir = $(ASCIIDOCCONF)/dblatex
-
-css = $(wildcard stylesheets/*.css)
-cssdir = $(ASCIIDOCCONF)/stylesheets
-
-js = $(wildcard javascripts/*.js)
-jsdir = $(ASCIIDOCCONF)/javascripts
-
-callouts = $(wildcard images/icons/callouts/*)
-calloutsdir = $(ASCIIDOCCONF)/images/icons/callouts
-
-icons = $(wildcard images/icons/*.png) images/icons/README
-iconsdir = $(ASCIIDOCCONF)/images/icons
-
-doc = $(wildcard README*) $(wildcard BUGS*) $(wildcard INSTALL*) $(wildcard CHANGELOG*)
-
-DATATARGETS = manp conf docbook dblatex css js callouts icons codefilterconf musicfilterconf sourcefilterconf graphvizfilterconf latexfilterconf flasktheme volnitskytheme
-PROGTARGETS = prog codefilter musicfilter graphvizfilter latexfilter
-TARGETS = $(DATATARGETS) $(PROGTARGETS) doc
-
-INSTDIRS = $(TARGETS:%=%dir)
-
-.PHONY: $(TARGETS)
-
-all: build
-
-# create directories used during the install
-$(INSTDIRS):
-	$(INSTALL) -d $(DESTDIR)/$($@)
-
-$(PROGTARGETS): % : %dir
-	$(INSTALL_PROG) $($@) $(DESTDIR)/$($<)/
-
-$(DATATARGETS): % : %dir
-	$(INSTALL_DATA) $($@) $(DESTDIR)/$($<)/
-
-$(manp): %.1 : %.1.txt
-	python a2x.py -f manpage $<
-
-docs:
-	$(INSTALL) -d $(DESTDIR)/$(docdir)
-	$(INSTALL_DATA) $(doc) $(DESTDIR)/$(docdir)
-	$(INSTALL) -d $(DESTDIR)/$(docdir)/docbook-xsl
-	$(INSTALL_DATA) docbook-xsl/asciidoc-docbook-xsl.txt $(DESTDIR)/$(docdir)/docbook-xsl
-	$(INSTALL) -d $(DESTDIR)/$(docdir)/dblatex
-	$(INSTALL_DATA) dblatex/dblatex-readme.txt $(DESTDIR)/$(docdir)/dblatex
-	$(INSTALL) -d $(DESTDIR)/$(docdir)/stylesheets
-	$(INSTALL_DATA) $(css) $(DESTDIR)/$(docdir)/stylesheets
-	$(INSTALL) -d $(DESTDIR)/$(docdir)/javascripts
-	$(INSTALL_DATA) $(js) $(DESTDIR)/$(docdir)/javascripts
-	$(INSTALL) -d $(DESTDIR)/$(docdir)/images
-	( cd images && \
-		cp -R * $(DESTDIR)/$(docdir)/images )
-	$(INSTALL) -d $(DESTDIR)/$(docdir)/doc
-	( cd doc && \
-		cp -R * $(DESTDIR)/$(docdir)/doc )
-	$(INSTALL) -d $(DESTDIR)/$(docdir)/examples/website
-	( cd examples/website && \
-		cp -R * $(DESTDIR)/$(docdir)/examples/website )
-
-progsymlink:
-	(cd $(DESTDIR)/$(progdir); ln -sf asciidoc.py asciidoc)
-	(cd $(DESTDIR)/$(progdir); ln -sf a2x.py a2x)
-
-fixconfpath:
-	@for f in $(prog); do \
-		echo "Fixing CONF_DIR in $$f"; \
-		$(SED) "s#^CONF_DIR = '.*'#CONF_DIR = '$(ASCIIDOCCONF)'#" $$f > $$f.out; \
-		mv $$f.out $$f; \
-		chmod +x $$f; \
-	done
-
-install-vim:
-	@for d in $(DESTDIR)/$(vimdir) /etc/vim; do \
-		if ! test -d $$d; then continue; fi ; \
-		echo "installing Vim files in $$d" ; \
-		$(INSTALL) -d $$d/syntax ; \
-		$(INSTALL_DATA) vim/syntax/asciidoc.vim $$d/syntax ; \
-		$(INSTALL) -d $$d/ftdetect ; \
-		$(INSTALL_DATA) vim/ftdetect/asciidoc_filetype.vim $$d/ftdetect ; \
-	done
-
-uninstall-vim:
-	@for d in $(DESTDIR)/$(vimdir) /etc/vim; do \
-		if ! test -d $$d; then continue; fi ; \
-		echo "uninstalling Vim files in $$d" ; \
-		rm -f $$d/syntax/asciidoc.vim ; \
-		rm -f $$d/ftdetect/asciidoc_filetype.vim ; \
-	done
-
-
-build: fixconfpath $(manp)
-
-
-install: all $(PROGTARGETS) $(DATATARGETS) progsymlink install-vim
-
-uninstall: uninstall-vim
-	rm -f $(DESTDIR)/$(progdir)/asciidoc
-	rm -f $(DESTDIR)/$(progdir)/asciidoc.py
-	rm -f $(DESTDIR)/$(progdir)/a2x
-	rm -f $(DESTDIR)/$(progdir)/a2x.py
-	rm -f $(DESTDIR)/$(manpdir)/asciidoc.1
-	rm -f $(DESTDIR)/$(manpdir)/a2x.1
-	rm -rf $(DESTDIR)/$(confdir)
-	rm -rf $(DESTDIR)/$(docdir)
-
-clean:
-	rm -f $(manp)
-
-test:
-	@echo "Nothing to see here...Move along."
diff --git a/source-builder/sb/asciidoc/README b/source-builder/sb/asciidoc/README
deleted file mode 100644
index 9e5857b..0000000
--- a/source-builder/sb/asciidoc/README
+++ /dev/null
@@ -1,45 +0,0 @@
-                              AsciiDoc README File
-
-   version 8.6.8, 17 July 2012
-     __________________________________________________________________
-
-1. Prerequisites
-
-   AsciiDoc is written in Python so you need a Python interpreter (version
-   2.4 or later) to execute asciidoc(1). Python is installed by default in
-   most Linux distributions. You can download Python from the official
-   Python website [1]http://www.python.org.
-     __________________________________________________________________
-
-2. Obtaining AsciiDoc
-
-   Documentation and installation instructions are on the AsciiDoc website
-   [2]http://www.methods.co.nz/asciidoc/
-     __________________________________________________________________
-
-3. Tools
-
-   Current AsciiDoc version tested on Xubuntu Linux 10.04 with:
-     * Python 2.6.5
-     * DocBook XSL Stylesheets 1.76.1
-     * xsltproc (libxml 20706, libxslt 10126 and libexslt 815).
-     * w3m 0.5.2
-     * dblatex 0.3
-     * FOP 0.95
-     * A-A-P 1.091
-     __________________________________________________________________
-
-4. Copying
-
-   Copyright © 2002-2011 Stuart Rackham. Free use of this software is
-   granted under the terms of the GNU General Public License version 2
-   (GPLv2).
-     __________________________________________________________________
-
-   Version 8.6.8
-   Last updated 2011-05-04 18:47:58 NZST
-
-References
-
-   1. http://www.python.org/
-   2. http://www.methods.co.nz/asciidoc/
diff --git a/source-builder/sb/asciidoc/README.txt b/source-builder/sb/asciidoc/README.txt
deleted file mode 100644
index b53c714..0000000
--- a/source-builder/sb/asciidoc/README.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-AsciiDoc README File
-====================
-
-Prerequisites
--------------
-AsciiDoc is written in Python so you need a Python interpreter
-(version 2.4 or later) to execute asciidoc(1). Python is installed by
-default in most Linux distributions.  You can download Python from the
-official Python website http://www.python.org.
-
-
-Obtaining AsciiDoc
-------------------
-Documentation and installation instructions are on the AsciiDoc
-website http://www.methods.co.nz/asciidoc/
-
-
-Tools
------
-Current AsciiDoc version tested on Xubuntu Linux 10.04 with:
-
-- Python 2.6.5
-- DocBook XSL Stylesheets 1.76.1
-- xsltproc (libxml 20706, libxslt 10126 and libexslt 815).
-- w3m 0.5.2
-- dblatex 0.3
-- FOP 0.95
-- A-A-P 1.091
-
-
-Copying
--------
-Copyright (C) 2002-2011 Stuart Rackham. Free use of this software is
-granted under the terms of the GNU General Public License version 2
-(GPLv2).
diff --git a/source-builder/sb/asciidoc/a2x.py b/source-builder/sb/asciidoc/a2x.py
deleted file mode 100755
index 1b192a2..0000000
--- a/source-builder/sb/asciidoc/a2x.py
+++ /dev/null
@@ -1,960 +0,0 @@
-#!/usr/bin/env python
-'''
-a2x - A toolchain manager for AsciiDoc (converts Asciidoc text files to other
-      file formats)
-
-Copyright: Stuart Rackham (c) 2009
-License:   MIT
-Email:     srackham at gmail.com
-
-'''
-
-import os
-import fnmatch
-import HTMLParser
-import re
-import shutil
-import subprocess
-import sys
-import traceback
-import urlparse
-import zipfile
-import xml.dom.minidom
-import mimetypes
-
-PROG = os.path.basename(os.path.splitext(__file__)[0])
-VERSION = '8.6.8'
-
-# AsciiDoc global configuration file directory.
-# NOTE: CONF_DIR is "fixed up" by Makefile -- don't rename or change syntax.
-CONF_DIR = '/etc/asciidoc'
-
-
-######################################################################
-# Default configuration file parameters.
-######################################################################
-
-# Optional environment variable dictionary passed to
-# executing programs. If set to None the existing
-# environment is used.
-ENV = None
-
-# External executables.
-ASCIIDOC = 'asciidoc'
-XSLTPROC = 'xsltproc'
-DBLATEX = 'dblatex'         # pdf generation.
-FOP = 'fop'                 # pdf generation (--fop option).
-W3M = 'w3m'                 # text generation.
-LYNX = 'lynx'               # text generation (if no w3m).
-XMLLINT = 'xmllint'         # Set to '' to disable.
-EPUBCHECK = 'epubcheck'     # Set to '' to disable.
-# External executable default options.
-ASCIIDOC_OPTS = ''
-DBLATEX_OPTS = ''
-FOP_OPTS = ''
-XSLTPROC_OPTS = ''
-BACKEND_OPTS = ''
-
-######################################################################
-# End of configuration file parameters.
-######################################################################
-
-
-#####################################################################
-# Utility functions
-#####################################################################
-
-OPTIONS = None  # These functions read verbose and dry_run command options.
-
-def errmsg(msg):
-    sys.stderr.write('%s: %s\n' % (PROG,msg))
-
-def warning(msg):
-    errmsg('WARNING: %s' % msg)
-
-def infomsg(msg):
-    print '%s: %s' % (PROG,msg)
-
-def die(msg, exit_code=1):
-    errmsg('ERROR: %s' % msg)
-    sys.exit(exit_code)
-
-def trace():
-    """Print traceback to stderr."""
-    errmsg('-'*60)
-    traceback.print_exc(file=sys.stderr)
-    errmsg('-'*60)
-
-def verbose(msg):
-    if OPTIONS.verbose or OPTIONS.dry_run:
-        infomsg(msg)
-
-class AttrDict(dict):
-    """
-    Like a dictionary except values can be accessed as attributes i.e. obj.foo
-    can be used in addition to obj['foo'].
-    If self._default has been set then it will be returned if a non-existant
-    attribute is accessed (instead of raising an AttributeError).
-    """
-    def __getattr__(self, key):
-        try:
-            return self[key]
-        except KeyError, k:
-            if self.has_key('_default'):
-                return self['_default']
-            else:
-                raise AttributeError, k
-    def __setattr__(self, key, value):
-        self[key] = value
-    def __delattr__(self, key):
-        try: del self[key]
-        except KeyError, k: raise AttributeError, k
-    def __repr__(self):
-        return '<AttrDict ' + dict.__repr__(self) + '>'
-    def __getstate__(self):
-        return dict(self)
-    def __setstate__(self,value):
-        for k,v in value.items(): self[k]=v
-
-def isexecutable(file_name):
-    return os.path.isfile(file_name) and os.access(file_name, os.X_OK)
-
-def find_executable(file_name):
-    '''
-    Search for executable file_name in the system PATH.
-    Return full path name or None if not found.
-    '''
-    def _find_executable(file_name):
-        if os.path.split(file_name)[0] != '':
-            # file_name includes directory so don't search path.
-            if not isexecutable(file_name):
-                return None
-            else:
-                return file_name
-        for p in os.environ.get('PATH', os.defpath).split(os.pathsep):
-            f = os.path.join(p, file_name)
-            if isexecutable(f):
-                return os.path.realpath(f)
-        return None
-    if os.name == 'nt' and os.path.splitext(file_name)[1] == '':
-        for ext in ('.cmd','.bat','.exe'):
-            result = _find_executable(file_name + ext)
-            if result: break
-    else:
-        result = _find_executable(file_name)
-    return result
-
-def write_file(filename, data, mode='w'):
-    f = open(filename, mode)
-    try:
-        f.write(data)
-    finally:
-        f.close()
-
-def read_file(filename, mode='r'):
-    f = open(filename, mode)
-    try:
-        return f.read()
-    finally:
-        f.close()
-
-def shell_cd(path):
-    verbose('chdir %s' % path)
-    if not OPTIONS.dry_run:
-        os.chdir(path)
-
-def shell_makedirs(path):
-    if os.path.isdir(path):
-        return
-    verbose('creating %s' % path)
-    if not OPTIONS.dry_run:
-        os.makedirs(path)
-
-def shell_copy(src, dst):
-    verbose('copying "%s" to "%s"' % (src,dst))
-    if not OPTIONS.dry_run:
-        shutil.copy(src, dst)
-
-def shell_rm(path):
-    if not os.path.exists(path):
-        return
-    verbose('deleting %s' % path)
-    if not OPTIONS.dry_run:
-        os.unlink(path)
-
-def shell_rmtree(path):
-    if not os.path.isdir(path):
-        return
-    verbose('deleting %s' % path)
-    if not OPTIONS.dry_run:
-        shutil.rmtree(path)
-
-def shell(cmd, raise_error=True):
-    '''
-    Execute command cmd in shell and return tuple
-    (stdoutdata, stderrdata, returncode).
-    If raise_error is True then a non-zero return terminates the application.
-    '''
-    if os.name == 'nt':
-        # TODO: this is probably unnecessary, see:
-        # http://groups.google.com/group/asciidoc/browse_frm/thread/9442ee0c419f1242
-        # Windows doesn't like running scripts directly so explicitly
-        # specify python interpreter.
-        # Extract first (quoted or unquoted) argument.
-        mo = re.match(r'^\s*"\s*(?P<arg0>[^"]+)\s*"', cmd)
-        if not mo:
-            mo = re.match(r'^\s*(?P<arg0>[^ ]+)', cmd)
-        if mo.group('arg0').endswith('.py'):
-            cmd = 'python ' + cmd
-        # Remove redundant quoting -- this is not just cosmetic,
-        # quoting seems to dramatically decrease the allowed command
-        # length in Windows XP.
-        cmd = re.sub(r'"([^ ]+?)"', r'\1', cmd)
-    verbose('executing: %s' % cmd)
-    if OPTIONS.dry_run:
-        return
-    stdout = stderr = subprocess.PIPE
-    try:
-        popen = subprocess.Popen(cmd, stdout=stdout, stderr=stderr,
-                shell=True, env=ENV)
-    except OSError, e:
-        die('failed: %s: %s' % (cmd, e))
-    stdoutdata, stderrdata = popen.communicate()
-    if OPTIONS.verbose:
-        print stdoutdata
-        print stderrdata
-    if popen.returncode != 0 and raise_error:
-        die('%s returned non-zero exit status %d' % (cmd, popen.returncode))
-    return (stdoutdata, stderrdata, popen.returncode)
-
-def find_resources(files, tagname, attrname, filter=None):
-    '''
-    Search all files and return a list of local URIs from attrname attribute
-    values in tagname tags.
-    Handles HTML open and XHTML closed tags.
-    Non-local URIs are skipped.
-    files can be a file name or a list of file names.
-    The filter function takes a dictionary of tag attributes and returns True if
-    the URI is to be included.
-    '''
-    class FindResources(HTMLParser.HTMLParser):
-        # Nested parser class shares locals with enclosing function.
-        def handle_startendtag(self, tag, attrs):
-            self.handle_starttag(tag, attrs)
-        def handle_starttag(self, tag, attrs):
-            attrs = dict(attrs)
-            if tag == tagname and (filter is None or filter(attrs)):
-                # Accept only local URIs.
-                uri = urlparse.urlparse(attrs[attrname])
-                if uri[0] in ('','file') and not uri[1] and uri[2]:
-                    result.append(uri[2])
-    if isinstance(files, str):
-        files = [files]
-    result = []
-    for filename in files:
-        verbose('finding resources in: %s' % filename)
-        if OPTIONS.dry_run:
-            continue
-        parser = FindResources()
-        # HTMLParser has problems with non-ASCII strings.
-        # See http://bugs.python.org/issue3932
-        contents = read_file(filename)
-        mo = re.search(r'\A<\?xml.* encoding="(.*?)"', contents)
-        if mo:
-            encoding = mo.group(1)
-            parser.feed(contents.decode(encoding))
-        else:
-            parser.feed(contents)
-        parser.close()
-    result = list(set(result))   # Drop duplicate values.
-    result.sort()
-    return result
-
-# NOT USED.
-def copy_files(files, src_dir, dst_dir):
-    '''
-    Copy list of relative file names from src_dir to dst_dir.
-    '''
-    for filename in files:
-        filename = os.path.normpath(filename)
-        if os.path.isabs(filename):
-            continue
-        src = os.path.join(src_dir, filename)
-        dst = os.path.join(dst_dir, filename)
-        if not os.path.exists(dst):
-            if not os.path.isfile(src):
-                warning('missing file: %s' % src)
-                continue
-            dstdir = os.path.dirname(dst)
-            shell_makedirs(dstdir)
-            shell_copy(src, dst)
-
-def find_files(path, pattern):
-    '''
-    Return list of file names matching pattern in directory path.
-    '''
-    result = []
-    for (p,dirs,files) in os.walk(path):
-        for f in files:
-            if fnmatch.fnmatch(f, pattern):
-                result.append(os.path.normpath(os.path.join(p,f)))
-    return result
-
-def exec_xsltproc(xsl_file, xml_file, dst_dir, opts = ''):
-    cwd = os.getcwd()
-    shell_cd(dst_dir)
-    try:
-        shell('"%s" %s "%s" "%s"' % (XSLTPROC, opts, xsl_file, xml_file))
-    finally:
-        shell_cd(cwd)
-
-def get_source_options(asciidoc_file):
-    '''
-    Look for a2x command options in AsciiDoc source file.
-    Limitation: options cannot contain double-quote characters.
-    '''
-    def parse_options():
-        # Parse options to result sequence.
-        inquotes = False
-        opt = ''
-        for c in options:
-            if c == '"':
-                if inquotes:
-                    result.append(opt)
-                    opt = ''
-                    inquotes = False
-                else:
-                    inquotes = True
-            elif c == ' ':
-                if inquotes:
-                    opt += c
-                elif opt:
-                    result.append(opt)
-                    opt = ''
-            else:
-                opt += c
-        if opt:
-            result.append(opt)
-
-    result = []
-    if os.path.isfile(asciidoc_file):
-        options = ''
-        f = open(asciidoc_file)
-        try:
-            for line in f:
-                mo = re.search(r'^//\s*a2x:', line)
-                if mo:
-                    options += ' ' + line[mo.end():].strip()
-        finally:
-            f.close()
-        parse_options()
-    return result
-
-
-#####################################################################
-# Application class
-#####################################################################
-
-class A2X(AttrDict):
-    '''
-    a2x options and conversion functions.
-    '''
-
-    def execute(self):
-        '''
-        Process a2x command.
-        '''
-        self.process_options()
-        # Append configuration file options.
-        self.asciidoc_opts += ' ' + ASCIIDOC_OPTS
-        self.dblatex_opts  += ' ' + DBLATEX_OPTS
-        self.fop_opts      += ' ' + FOP_OPTS
-        self.xsltproc_opts += ' ' + XSLTPROC_OPTS
-        self.backend_opts  += ' ' + BACKEND_OPTS
-        # Execute to_* functions.
-        if self.backend:
-            self.to_backend()
-        else:
-            self.__getattribute__('to_'+self.format)()
-        if not (self.keep_artifacts or self.format == 'docbook' or self.skip_asciidoc):
-            shell_rm(self.dst_path('.xml'))
-
-    def load_conf(self):
-        '''
-        Load a2x configuration file from default locations and --conf-file
-        option.
-        '''
-        global ASCIIDOC
-        CONF_FILE = 'a2x.conf'
-        a2xdir = os.path.dirname(os.path.realpath(__file__))
-        conf_files = []
-        # From a2x.py directory.
-        conf_files.append(os.path.join(a2xdir, CONF_FILE))
-        # If the asciidoc executable and conf files are in the a2x directory
-        # then use the local copy of asciidoc and skip the global a2x conf.
-        asciidoc = os.path.join(a2xdir, 'asciidoc.py')
-        asciidoc_conf = os.path.join(a2xdir, 'asciidoc.conf')
-        if os.path.isfile(asciidoc) and os.path.isfile(asciidoc_conf):
-            self.asciidoc = asciidoc
-        else:
-            self.asciidoc = None
-            # From global conf directory.
-            conf_files.append(os.path.join(CONF_DIR, CONF_FILE))
-        # From $HOME directory.
-        home_dir = os.environ.get('HOME')
-        if home_dir is not None:
-            conf_files.append(os.path.join(home_dir, '.asciidoc', CONF_FILE))
-        # If asciidoc is not local to a2x then search the PATH.
-        if not self.asciidoc:
-            self.asciidoc = find_executable(ASCIIDOC)
-            if not self.asciidoc:
-                die('unable to find asciidoc: %s' % ASCIIDOC)
-        # From backend plugin directory.
-        if self.backend is not None:
-            stdout = shell(self.asciidoc + ' --backend list')[0]
-            backends = [(i, os.path.split(i)[1]) for i in stdout.splitlines()]
-            backend_dir = [i[0] for i in backends if i[1] == self.backend]
-            if len(backend_dir) == 0:
-                die('missing %s backend' % self.backend)
-            if len(backend_dir) > 1:
-                die('more than one %s backend' % self.backend)
-            verbose('found %s backend directory: %s' %
-                    (self.backend, backend_dir[0]))
-            conf_files.append(os.path.join(backend_dir[0], 'a2x-backend.py'))
-        # From --conf-file option.
-        if self.conf_file is not None:
-            if not os.path.isfile(self.conf_file):
-                die('missing configuration file: %s' % self.conf_file)
-            conf_files.append(self.conf_file)
-        # From --xsl-file option.
-        if self.xsl_file is not None:
-            if not os.path.isfile(self.xsl_file):
-                die('missing XSL file: %s' % self.xsl_file)
-            self.xsl_file = os.path.abspath(self.xsl_file)
-        # Load ordered files.
-        for f in conf_files:
-            if os.path.isfile(f):
-                verbose('loading configuration file: %s' % f)
-                execfile(f, globals())
-
-    def process_options(self):
-        '''
-        Validate and command options and set defaults.
-        '''
-        if not os.path.isfile(self.asciidoc_file):
-            die('missing SOURCE_FILE: %s' % self.asciidoc_file)
-        self.asciidoc_file = os.path.abspath(self.asciidoc_file)
-        if not self.destination_dir:
-            self.destination_dir = os.path.dirname(self.asciidoc_file)
-        else:
-            if not os.path.isdir(self.destination_dir):
-                die('missing --destination-dir: %s' % self.destination_dir)
-            self.destination_dir = os.path.abspath(self.destination_dir)
-        self.resource_dirs = []
-        self.resource_files = []
-        if self.resource_manifest:
-            if not os.path.isfile(self.resource_manifest):
-                die('missing --resource-manifest: %s' % self.resource_manifest)
-            f = open(self.resource_manifest)
-            try:
-                for r in f:
-                    self.resources.append(r.strip())
-            finally:
-                f.close()
-        for r in self.resources:
-            r = os.path.expanduser(r)
-            r = os.path.expandvars(r)
-            if r.endswith('/') or r.endswith('\\'):
-                if  os.path.isdir(r):
-                    self.resource_dirs.append(r)
-                else:
-                    die('missing resource directory: %s' % r)
-            elif os.path.isdir(r):
-                self.resource_dirs.append(r)
-            elif r.startswith('.') and '=' in r:
-                ext, mimetype = r.split('=')
-                mimetypes.add_type(mimetype, ext)
-            else:
-                self.resource_files.append(r)
-        for p in (os.path.dirname(self.asciidoc), CONF_DIR):
-            for d in ('images','stylesheets'):
-                d = os.path.join(p,d)
-                if os.path.isdir(d):
-                    self.resource_dirs.append(d)
-        verbose('resource files: %s' % self.resource_files)
-        verbose('resource directories: %s' % self.resource_dirs)
-        if not self.doctype and self.format == 'manpage':
-            self.doctype = 'manpage'
-        if self.doctype:
-            self.asciidoc_opts += ' --doctype %s' % self.doctype
-        for attr in self.attributes:
-            self.asciidoc_opts += ' --attribute "%s"' % attr
-#        self.xsltproc_opts += ' --nonet'
-        if self.verbose:
-            self.asciidoc_opts += ' --verbose'
-            self.dblatex_opts += ' -V'
-        if self.icons or self.icons_dir:
-            params = [
-                'callout.graphics 1',
-                'navig.graphics 1',
-                'admon.textlabel 0',
-                'admon.graphics 1',
-            ]
-            if self.icons_dir:
-                params += [
-                    'admon.graphics.path "%s/"' % self.icons_dir,
-                    'callout.graphics.path "%s/callouts/"' % self.icons_dir,
-                    'navig.graphics.path "%s/"' % self.icons_dir,
-                ]
-        else:
-            params = [
-                'callout.graphics 0',
-                'navig.graphics 0',
-                'admon.textlabel 1',
-                'admon.graphics 0',
-            ]
-        if self.stylesheet:
-            params += ['html.stylesheet "%s"' % self.stylesheet]
-        if self.format == 'htmlhelp':
-            params += ['htmlhelp.chm "%s"' % self.basename('.chm'),
-                       'htmlhelp.hhp "%s"' % self.basename('.hhp'),
-                       'htmlhelp.hhk "%s"' % self.basename('.hhk'),
-                       'htmlhelp.hhc "%s"' % self.basename('.hhc')]
-        if self.doctype == 'book':
-            params += ['toc.section.depth 1']
-            # Books are chunked at chapter level.
-            params += ['chunk.section.depth 0']
-        for o in params:
-            if o.split()[0]+' ' not in self.xsltproc_opts:
-                self.xsltproc_opts += ' --stringparam ' + o
-        if self.fop_opts:
-            self.fop = True
-        if os.path.splitext(self.asciidoc_file)[1].lower() == '.xml':
-            self.skip_asciidoc = True
-        else:
-            self.skip_asciidoc = False
-
-    def dst_path(self, ext):
-        '''
-        Return name of file or directory in the destination directory with
-        the same name as the asciidoc source file but with extension ext.
-        '''
-        return os.path.join(self.destination_dir, self.basename(ext))
-
-    def basename(self, ext):
-        '''
-        Return the base name of the asciidoc source file but with extension
-        ext.
-        '''
-        return os.path.basename(os.path.splitext(self.asciidoc_file)[0]) + ext
-
-    def asciidoc_conf_file(self, path):
-        '''
-        Return full path name of file in asciidoc configuration files directory.
-        Search first the directory containing the asciidoc executable then
-        the global configuration file directory.
-        '''
-        f = os.path.join(os.path.dirname(self.asciidoc), path)
-        if not os.path.isfile(f):
-            f = os.path.join(CONF_DIR, path)
-            if not os.path.isfile(f):
-                die('missing configuration file: %s' % f)
-        return os.path.normpath(f)
-
-    def xsl_stylesheet(self, file_name=None):
-        '''
-        Return full path name of file in asciidoc docbook-xsl configuration
-        directory.
-        If an XSL file was specified with the --xsl-file option then it is
-        returned.
-        '''
-        if self.xsl_file is not None:
-            return self.xsl_file
-        if not file_name:
-            file_name = self.format + '.xsl'
-        return self.asciidoc_conf_file(os.path.join('docbook-xsl', file_name))
-
-    def copy_resources(self, html_files, src_dir, dst_dir, resources=[]):
-        '''
-        Search html_files for images and CSS resource URIs (html_files can be a
-        list of file names or a single file name).
-        Copy them from the src_dir to the dst_dir.
-        If not found in src_dir then recursively search all specified
-        resource directories.
-        Optional additional resources files can be passed in the resources list.
-        '''
-        resources = resources[:]
-        resources += find_resources(html_files, 'link', 'href',
-                        lambda attrs: attrs.get('type') == 'text/css')
-        resources += find_resources(html_files, 'img', 'src')
-        resources += self.resource_files
-        resources = list(set(resources))    # Drop duplicates.
-        resources.sort()
-        for f in resources:
-            if '=' in f:
-                src, dst = f.split('=')
-                if not dst:
-                    dst = src
-            else:
-                src = dst = f
-            src = os.path.normpath(src)
-            dst = os.path.normpath(dst)
-            if os.path.isabs(dst):
-                die('absolute resource file name: %s' % dst)
-            if dst.startswith(os.pardir):
-                die('resource file outside destination directory: %s' % dst)
-            src = os.path.join(src_dir, src)
-            dst = os.path.join(dst_dir, dst)
-            if not os.path.isfile(src):
-                for d in self.resource_dirs:
-                    d = os.path.join(src_dir, d)
-                    found = find_files(d, os.path.basename(src))
-                    if found:
-                        src = found[0]
-                        break
-                else:
-                    if not os.path.isfile(dst):
-                        die('missing resource: %s' % src)
-                    continue
-            # Arrive here if resource file has been found.
-            if os.path.normpath(src) != os.path.normpath(dst):
-                dstdir = os.path.dirname(dst)
-                shell_makedirs(dstdir)
-                shell_copy(src, dst)
-
-    def to_backend(self):
-        '''
-        Convert AsciiDoc source file to a backend output file using the global
-        'to_<backend name>' function (loaded from backend plugin a2x-backend.py
-        file).
-        Executes the global function in an A2X class instance context.
-        '''
-        eval('to_%s(self)' % self.backend)
-
-    def to_docbook(self):
-        '''
-        Use asciidoc to convert asciidoc_file to DocBook.
-        args is a string containing additional asciidoc arguments.
-        '''
-        docbook_file = self.dst_path('.xml')
-        if self.skip_asciidoc:
-            if not os.path.isfile(docbook_file):
-                die('missing docbook file: %s' % docbook_file)
-            return
-        shell('"%s" --backend docbook -a "a2x-format=%s" %s --out-file "%s" "%s"' %
-             (self.asciidoc, self.format, self.asciidoc_opts, docbook_file, self.asciidoc_file))
-        if not self.no_xmllint and XMLLINT:
-            shell('"%s" --nonet --noout --valid "%s"' % (XMLLINT, docbook_file))
-
-    def to_xhtml(self):
-        self.to_docbook()
-        docbook_file = self.dst_path('.xml')
-        xhtml_file = self.dst_path('.html')
-        opts = '%s --output "%s"' % (self.xsltproc_opts, xhtml_file)
-        exec_xsltproc(self.xsl_stylesheet(), docbook_file, self.destination_dir, opts)
-        src_dir = os.path.dirname(self.asciidoc_file)
-        self.copy_resources(xhtml_file, src_dir, self.destination_dir)
-
-    def to_manpage(self):
-        self.to_docbook()
-        docbook_file = self.dst_path('.xml')
-        opts = self.xsltproc_opts
-        exec_xsltproc(self.xsl_stylesheet(), docbook_file, self.destination_dir, opts)
-
-    def to_pdf(self):
-        if self.fop:
-            self.exec_fop()
-        else:
-            self.exec_dblatex()
-
-    def exec_fop(self):
-        self.to_docbook()
-        docbook_file = self.dst_path('.xml')
-        xsl = self.xsl_stylesheet('fo.xsl')
-        fo = self.dst_path('.fo')
-        pdf = self.dst_path('.pdf')
-        opts = '%s --output "%s"' % (self.xsltproc_opts, fo)
-        exec_xsltproc(xsl, docbook_file, self.destination_dir, opts)
-        shell('"%s" %s -fo "%s" -pdf "%s"' % (FOP, self.fop_opts, fo, pdf))
-        if not self.keep_artifacts:
-            shell_rm(fo)
-
-    def exec_dblatex(self):
-        self.to_docbook()
-        docbook_file = self.dst_path('.xml')
-        xsl = self.asciidoc_conf_file(os.path.join('dblatex','asciidoc-dblatex.xsl'))
-        sty = self.asciidoc_conf_file(os.path.join('dblatex','asciidoc-dblatex.sty'))
-        shell('"%s" -t %s -p "%s" -s "%s" %s "%s"' %
-             (DBLATEX, self.format, xsl, sty, self.dblatex_opts, docbook_file))
-
-    def to_dvi(self):
-        self.exec_dblatex()
-
-    def to_ps(self):
-        self.exec_dblatex()
-
-    def to_tex(self):
-        self.exec_dblatex()
-
-    def to_htmlhelp(self):
-        self.to_chunked()
-
-    def to_chunked(self):
-        self.to_docbook()
-        docbook_file = self.dst_path('.xml')
-        opts = self.xsltproc_opts
-        xsl_file = self.xsl_stylesheet()
-        if self.format == 'chunked':
-            dst_dir = self.dst_path('.chunked')
-        elif self.format == 'htmlhelp':
-            dst_dir = self.dst_path('.htmlhelp')
-        if not 'base.dir ' in opts:
-            opts += ' --stringparam base.dir "%s/"' % os.path.basename(dst_dir)
-        # Create content.
-        shell_rmtree(dst_dir)
-        shell_makedirs(dst_dir)
-        exec_xsltproc(xsl_file, docbook_file, self.destination_dir, opts)
-        html_files = find_files(dst_dir, '*.html')
-        src_dir = os.path.dirname(self.asciidoc_file)
-        self.copy_resources(html_files, src_dir, dst_dir)
-
-    def update_epub_manifest(self, opf_file):
-        '''
-        Scan the OEBPS directory for any files that have not been registered in
-        the OPF manifest then add them to the manifest.
-        '''
-        opf_dir = os.path.dirname(opf_file)
-        resource_files = []
-        for (p,dirs,files) in os.walk(os.path.dirname(opf_file)):
-            for f in files:
-                f = os.path.join(p,f)
-                if os.path.isfile(f):
-                    assert f.startswith(opf_dir)
-                    f = '.' + f[len(opf_dir):]
-                    f = os.path.normpath(f)
-                    if f not in ['content.opf']:
-                        resource_files.append(f)
-        opf = xml.dom.minidom.parseString(read_file(opf_file))
-        manifest_files = []
-        manifest = opf.getElementsByTagName('manifest')[0]
-        for el in manifest.getElementsByTagName('item'):
-            f = el.getAttribute('href')
-            f = os.path.normpath(f)
-            manifest_files.append(f)
-        count = 0
-        for f in resource_files:
-            if f not in manifest_files:
-                count += 1
-                verbose('adding to manifest: %s' % f)
-                item = opf.createElement('item')
-                item.setAttribute('href', f.replace(os.path.sep, '/'))
-                item.setAttribute('id', 'a2x-%d' % count)
-                mimetype = mimetypes.guess_type(f)[0]
-                if mimetype is None:
-                    die('unknown mimetype: %s' % f)
-                item.setAttribute('media-type', mimetype)
-                manifest.appendChild(item)
-        if count > 0:
-            write_file(opf_file, opf.toxml())
-
-    def to_epub(self):
-        self.to_docbook()
-        xsl_file = self.xsl_stylesheet()
-        docbook_file = self.dst_path('.xml')
-        epub_file = self.dst_path('.epub')
-        build_dir = epub_file + '.d'
-        shell_rmtree(build_dir)
-        shell_makedirs(build_dir)
-        # Create content.
-        exec_xsltproc(xsl_file, docbook_file, build_dir, self.xsltproc_opts)
-        # Copy resources referenced in the OPF and resources referenced by the
-        # generated HTML (in theory DocBook XSL should ensure they are
-        # identical but this is not always the case).
-        src_dir = os.path.dirname(self.asciidoc_file)
-        dst_dir = os.path.join(build_dir, 'OEBPS')
-        opf_file = os.path.join(dst_dir, 'content.opf')
-        opf_resources = find_resources(opf_file, 'item', 'href')
-        html_files = find_files(dst_dir, '*.html')
-        self.copy_resources(html_files, src_dir, dst_dir, opf_resources)
-        # Register any unregistered resources.
-        self.update_epub_manifest(opf_file)
-        # Build epub archive.
-        cwd = os.getcwd()
-        shell_cd(build_dir)
-        try:
-            if not self.dry_run:
-                zip = zipfile.ZipFile(epub_file, 'w')
-                try:
-                    # Create and add uncompressed mimetype file.
-                    verbose('archiving: mimetype')
-                    write_file('mimetype', 'application/epub+zip')
-                    zip.write('mimetype', compress_type=zipfile.ZIP_STORED)
-                    # Compress all remaining files.
-                    for (p,dirs,files) in os.walk('.'):
-                        for f in files:
-                            f = os.path.normpath(os.path.join(p,f))
-                            if f != 'mimetype':
-                                verbose('archiving: %s' % f)
-                                zip.write(f, compress_type=zipfile.ZIP_DEFLATED)
-                finally:
-                    zip.close()
-            verbose('created archive: %s' % epub_file)
-        finally:
-            shell_cd(cwd)
-        if not self.keep_artifacts:
-            shell_rmtree(build_dir)
-        if self.epubcheck and EPUBCHECK:
-            if not find_executable(EPUBCHECK):
-                warning('epubcheck skipped: unable to find executable: %s' % EPUBCHECK)
-            else:
-                shell('"%s" "%s"' % (EPUBCHECK, epub_file))
-
-    def to_text(self):
-        text_file = self.dst_path('.text')
-        html_file = self.dst_path('.text.html')
-        if self.lynx:
-            shell('"%s" %s --conf-file "%s" -b html4 -a "a2x-format=%s" -o "%s" "%s"' %
-                 (self.asciidoc, self.asciidoc_opts, self.asciidoc_conf_file('text.conf'),
-                  self.format, html_file, self.asciidoc_file))
-            shell('"%s" -dump "%s" > "%s"' %
-                 (LYNX, html_file, text_file))
-        else:
-            # Use w3m(1).
-            self.to_docbook()
-            docbook_file = self.dst_path('.xml')
-            opts = '%s --output "%s"' % (self.xsltproc_opts, html_file)
-            exec_xsltproc(self.xsl_stylesheet(), docbook_file,
-                    self.destination_dir, opts)
-            shell('"%s" -cols 70 -dump -T text/html -no-graph "%s" > "%s"' %
-                 (W3M, html_file, text_file))
-        if not self.keep_artifacts:
-            shell_rm(html_file)
-
-
-#####################################################################
-# Script main line.
-#####################################################################
-
-if __name__ == '__main__':
-    description = '''A toolchain manager for AsciiDoc (converts Asciidoc text files to other file formats)'''
-    from optparse import OptionParser
-    parser = OptionParser(usage='usage: %prog [OPTIONS] SOURCE_FILE',
-        version='%s %s' % (PROG,VERSION),
-        description=description)
-    parser.add_option('-a', '--attribute',
-        action='append', dest='attributes', default=[], metavar='ATTRIBUTE',
-        help='set asciidoc attribute value')
-    parser.add_option('--asciidoc-opts',
-        action='append', dest='asciidoc_opts', default=[],
-        metavar='ASCIIDOC_OPTS', help='asciidoc options')
-    #DEPRECATED
-    parser.add_option('--copy',
-        action='store_true', dest='copy', default=False,
-        help='DEPRECATED: does nothing')
-    parser.add_option('--conf-file',
-        dest='conf_file', default=None, metavar='CONF_FILE',
-        help='configuration file')
-    parser.add_option('-D', '--destination-dir',
-        action='store', dest='destination_dir', default=None, metavar='PATH',
-        help='output directory (defaults to SOURCE_FILE directory)')
-    parser.add_option('-d','--doctype',
-        action='store', dest='doctype', metavar='DOCTYPE',
-        choices=('article','manpage','book'),
-        help='article, manpage, book')
-    parser.add_option('-b','--backend',
-        action='store', dest='backend', metavar='BACKEND',
-        help='name of backend plugin')
-    parser.add_option('--epubcheck',
-        action='store_true', dest='epubcheck', default=False,
-        help='check EPUB output with epubcheck')
-    parser.add_option('-f','--format',
-        action='store', dest='format', metavar='FORMAT', default = 'pdf',
-        choices=('chunked','epub','htmlhelp','manpage','pdf', 'text',
-                 'xhtml','dvi','ps','tex','docbook'),
-        help='chunked, epub, htmlhelp, manpage, pdf, text, xhtml, dvi, ps, tex, docbook')
-    parser.add_option('--icons',
-        action='store_true', dest='icons', default=False,
-        help='use admonition, callout and navigation icons')
-    parser.add_option('--icons-dir',
-        action='store', dest='icons_dir',
-        default=None, metavar='PATH',
-        help='admonition and navigation icon directory')
-    parser.add_option('-k', '--keep-artifacts',
-        action='store_true', dest='keep_artifacts', default=False,
-        help='do not delete temporary build files')
-    parser.add_option('--lynx',
-        action='store_true', dest='lynx', default=False,
-        help='use lynx to generate text files')
-    parser.add_option('-L', '--no-xmllint',
-        action='store_true', dest='no_xmllint', default=False,
-        help='do not check asciidoc output with xmllint')
-    parser.add_option('-n','--dry-run',
-        action='store_true', dest='dry_run', default=False,
-        help='just print the commands that would have been executed')
-    parser.add_option('-r','--resource',
-        action='append', dest='resources', default=[],
-        metavar='PATH',
-        help='resource file or directory containing resource files')
-    parser.add_option('-m', '--resource-manifest',
-        action='store', dest='resource_manifest', default=None, metavar='FILE',
-        help='read resources from FILE')
-    #DEPRECATED
-    parser.add_option('--resource-dir',
-        action='append', dest='resources', default=[],
-        metavar='PATH',
-        help='DEPRECATED: use --resource')
-    #DEPRECATED
-    parser.add_option('-s','--skip-asciidoc',
-        action='store_true', dest='skip_asciidoc', default=False,
-        help='DEPRECATED: redundant')
-    parser.add_option('--stylesheet',
-        action='store', dest='stylesheet', default=None,
-        metavar='STYLESHEET',
-        help='HTML CSS stylesheet file name')
-    #DEPRECATED
-    parser.add_option('--safe',
-        action='store_true', dest='safe', default=False,
-        help='DEPRECATED: does nothing')
-    parser.add_option('--dblatex-opts',
-        action='append', dest='dblatex_opts', default=[],
-        metavar='DBLATEX_OPTS', help='dblatex options')
-    parser.add_option('--backend-opts',
-        action='append', dest='backend_opts', default=[],
-        metavar='BACKEND_OPTS', help='backend plugin options')
-    parser.add_option('--fop',
-        action='store_true', dest='fop', default=False,
-        help='use FOP to generate PDF files')
-    parser.add_option('--fop-opts',
-        action='append', dest='fop_opts', default=[],
-        metavar='FOP_OPTS', help='options for FOP pdf generation')
-    parser.add_option('--xsltproc-opts',
-        action='append', dest='xsltproc_opts', default=[],
-        metavar='XSLTPROC_OPTS', help='xsltproc options for XSL stylesheets')
-    parser.add_option('--xsl-file',
-        action='store', dest='xsl_file', metavar='XSL_FILE',
-        help='custom XSL stylesheet')
-    parser.add_option('-v', '--verbose',
-        action='count', dest='verbose', default=0,
-        help='increase verbosity')
-    if len(sys.argv) == 1:
-        parser.parse_args(['--help'])
-    source_options = get_source_options(sys.argv[-1])
-    argv = source_options + sys.argv[1:]
-    opts, args = parser.parse_args(argv)
-    if len(args) != 1:
-        parser.error('incorrect number of arguments')
-    opts.asciidoc_opts = ' '.join(opts.asciidoc_opts)
-    opts.dblatex_opts = ' '.join(opts.dblatex_opts)
-    opts.fop_opts = ' '.join(opts.fop_opts)
-    opts.xsltproc_opts = ' '.join(opts.xsltproc_opts)
-    opts.backend_opts = ' '.join(opts.backend_opts)
-    opts = eval(str(opts))  # Convert optparse.Values to dict.
-    a2x = A2X(opts)
-    OPTIONS = a2x           # verbose and dry_run used by utility functions.
-    verbose('args: %r' % argv)
-    a2x.asciidoc_file = args[0]
-    try:
-        a2x.load_conf()
-        a2x.execute()
-    except KeyboardInterrupt:
-        exit(1)
diff --git a/source-builder/sb/asciidoc/asciidoc.conf b/source-builder/sb/asciidoc/asciidoc.conf
deleted file mode 100644
index fab1a22..0000000
--- a/source-builder/sb/asciidoc/asciidoc.conf
+++ /dev/null
@@ -1,647 +0,0 @@
-#
-# asciidoc.conf
-#
-# Asciidoc global configuration file.
-# Contains backend independent configuration settings that are applied to all
-# AsciiDoc documents.
-#
-
-[miscellaneous]
-tabsize=8
-textwidth=70
-newline=\r\n
-
-[attributes]
-backend-alias-html=xhtml11
-backend-alias-docbook=docbook45
-toclevels=2
-toc-placement=auto
-sectids=
-iconsdir=./images/icons
-encoding=UTF-8
-# Uncomment to use xhtml11 quirks mode CSS.
-#quirks=
-# HTML source code highlighter (source-highlight, pygments or highlight).
-source-highlighter=source-highlight
-# Uncomment to use deprecated quote attributes.
-#deprecated-quotes=
-empty=
-sp=" "
-# Attribute and AttributeList element patterns.
-attributeentry-pattern=^:(?P<attrname>\w[^.]*?)(\.(?P<attrname2>.*?))?:(\s+(?P<attrvalue>.*))?$
-attributelist-pattern=(?u)(^\[\[(?P<id>[\w_:][\w_:.-]*)(,(?P<reftext>.*?))?\]\]$)|(^\[(?P<attrlist>.*)\]$)
-# Substitution attributes for escaping AsciiDoc processing.
-amp=&
-lt=<
-gt=>
-brvbar=|
-nbsp= 
-zwsp=​
-wj=⁠
-deg=°
-backslash=\
-two-colons=::
-two-semicolons=;;
-# DEPRECATED: underscore attribute names.
-two_colons=::
-two_semicolons=;;
-# Left and right single and double quote characters.
-# See http://en.wikipedia.org/wiki/Non-English_usage_of_quotation_marks
-lsquo=‘
-rsquo=’
-ldquo=“
-rdquo=”
-
-[titles]
-subs=specialcharacters,quotes,replacements,macros,attributes,replacements2
-# Double-line title pattern and underlines.
-sectiontitle=^(?P<title>.*?)$
-underlines="==","--","~~","^^","++"
-# Single-line title patterns.
-sect0=^= +(?P<title>[\S].*?)( +=)?$
-sect1=^== +(?P<title>[\S].*?)( +==)?$
-sect2=^=== +(?P<title>[\S].*?)( +===)?$
-sect3=^==== +(?P<title>[\S].*?)( +====)?$
-sect4=^===== +(?P<title>[\S].*?)( +=====)?$
-blocktitle=^\.(?P<title>([^.\s].*)|(\.[^.\s].*))$
-
-[specialcharacters]
-&=&
-<=<
->=>
-
-[quotes]
-# The order is important, quotes are processed in conf file order.
-**=#strong
-*=strong
-``|''=doublequoted
-'=emphasis
-`|'=singlequoted
-ifdef::no-inline-literal[]
-`=monospaced
-endif::no-inline-literal[]
-# +++ and $$ quoting is applied to the +++ and $$ inline passthrough
-# macros to allow quoted attributes to be used.
-# This trick only works with inline passthrough macros.
-+++=#unquoted
-$$=#unquoted
-++=#monospaced
-+=monospaced
-__=#emphasis
-_=emphasis
-\##=#unquoted
-\#=unquoted
-^=#superscript
-~=#subscript
-
-[specialwords]
-emphasizedwords=
-strongwords=
-monospacedwords=
-
-[replacements]
-# Replacements performed in order of configuration file entry.  The first entry
-# of each replacement pair performs the (non-escaped) replacement, the second
-# strips the backslash from the escaped replacement.
-
-# (C) Copyright (entity reference ©)
-(?<!\\)\(C\)=©
-\\\(C\)=(C)
-
-# (R) registered trade mark (entity reference ®
-(?<!\\)\(R\)=®
-\\\(R\)=(R)
-
-# (TM) Trademark (entity reference ™)
-(?<!\\)\(TM\)=™
-\\\(TM\)=(TM)
-
-# -- Spaced and unspaced em dashes (entity reference —).
-# Space on both sides is translated to thin space characters.
-(^-- )=— 
-(\n-- )|( -- )|( --\n)= — 
-(\w)--(\w)=\1—\2
-\\--(?!-)=--
-
-# Replace vertical typewriter apostrophe with punctuation apostrophe.
-(\w)'(\w)=\1’\2
-(\w)\\'(\w)=\1'\2
-
-# ... Ellipsis (entity reference …)
-(?<!\\)\.\.\.=…
-\\\.\.\.=...
-
-# Arrows from the Arrows block of Unicode.
-# -> right arrow
-(?<!\\)->=→
-\\->=->
-# => right double arrow
-(?<!\\)\=>=⇒
-\\\=>==>
-# <- left arrow
-(?<!\\)<-=←
-\\<-=<-
-# <= left double arrow
-(?<!\\)<\==⇐
-\\<\==<=
-
-# Arbitrary entity references.
-(?<!\\)&([:_#a-zA-Z][:_.\-\w]*?;)=&\1
-\\(&[:_#a-zA-Z][:_.\-\w]*?;)=\1
-
-#-----------
-# Paragraphs
-#-----------
-[paradef-default]
-delimiter=(?s)(?P<text>\S.*)
-posattrs=style
-style=normal
-template::[paragraph-styles]
-
-[paradef-literal]
-delimiter=(?s)(?P<text>\s+.*)
-options=listelement
-posattrs=style
-style=literal
-template::[paragraph-styles]
-
-[paradef-admonition]
-delimiter=(?s)^\s*(?P<style>NOTE|TIP|IMPORTANT|WARNING|CAUTION):\s+(?P<text>.+)
-template::[paragraph-styles]
-
-[paragraph-styles]
-normal-style=template="paragraph"
-comment-style=template="paragraph",options=('skip',)
-verse-style=template="verseparagraph",posattrs=("style","attribution","citetitle")
-quote-style=template="quoteparagraph",posattrs=("style","attribution","citetitle")
-literal-style=template="literalparagraph",subs=("verbatim",)
-listing-style=template="listingparagraph",subs=("verbatim",)
-example-style=template="exampleparagraph"
-sidebar-style=template="sidebarparagraph"
-abstract-style=template="abstractparagraph"
-partintro-style=template="partintroparagraph"
-NOTE-style=template="admonitionparagraph",name="note",caption="{note-caption}"
-TIP-style=template="admonitionparagraph",name="tip",caption="{tip-caption}"
-IMPORTANT-style=template="admonitionparagraph",name="important",caption="{important-caption}"
-WARNING-style=template="admonitionparagraph",name="warning",caption="{warning-caption}"
-CAUTION-style=template="admonitionparagraph",name="caution",caption="{caution-caption}"
-
-[literalparagraph]
-template::[literalblock]
-
-[verseparagraph]
-template::[verseblock]
-
-[quoteparagraph]
-template::[quoteblock]
-
-[listingparagraph]
-template::[listingblock]
-
-[exampleparagraph]
-template::[exampleblock]
-
-[sidebarparagraph]
-template::[sidebarblock]
-
-[abstractparagraph]
-template::[abstractblock]
-
-[partintroparagraph]
-template::[partintroblock]
-
-
-[macros]
-#--------------
-# Inline macros
-#--------------
-# Backslash prefix required for escape processing.
-# (?s) re flag for line spanning.
-
-# Macros using default syntax.
-(?su)(?<!\w)[\\]?(?P<name>http|https|ftp|file|irc|mailto|callto|image|link|anchor|xref|indexterm):(?P<target>\S*?)\[(?P<attrlist>.*?)(?<!\\)\]=
-
-# These URL types don't require any special attribute list formatting.
-(?su)(?<!\S)[\\]?(?P<name>http|https|ftp|file|irc):(?P<target>//[^\s<>]*[\w/])=
-# Allow a leading parenthesis and square bracket.
-(?su)(?<\=[([])[\\]?(?P<name>http|https|ftp|file|irc):(?P<target>//[^\s<>]*[\w/])=
-# Allow <> brackets.
-(?su)[\\]?<(?P<name>http|https|ftp|file|irc):(?P<target>//[^\s<>]*[\w/])>=
-
-# Email addresses don't require special attribute list formatting.
-# The before ">: and after "< character exclusions stop multiple substitution.
-(?su)(?<![">:\w._/-])[\\]?(?P<target>\w[\w._-]*@[\w._-]*\w)(?!["<\w_-])=mailto
-
-# Allow footnote macros hard up against the preceding word so the footnote mark
-# can be placed against the noted text without an intervening space
-# (http://groups.google.com/group/asciidoc/browse_frm/thread/e1dcb7ee0efc17b5).
-(?su)[\\]?(?P<name>footnote|footnoteref):(?P<target>\S*?)\[(?P<attrlist>.*?)(?<!\\)\]=
-
-# Anchor: [[[id]]]. Bibliographic anchor.
-(?su)[\\]?\[\[\[(?P<attrlist>[\w_:][\w_:.-]*?)\]\]\]=anchor3
-# Anchor: [[id,xreflabel]]
-(?su)[\\]?\[\[(?P<attrlist>[\w"_:].*?)\]\]=anchor2
-# Link: <<id,text>>
-(?su)[\\]?<<(?P<attrlist>[\w"_:].*?)>>=xref2
-
-ifdef::asciidoc7compatible[]
-# Index term: ++primary,secondary,tertiary++
-(?su)(?<!\S)[\\]?\+\+(?P<attrlist>[^+].*?)\+\+(?!\+)=indexterm
-# Index term: +primary+
-# Follows ++...++ macro otherwise it will match them.
-(?<!\S)[\\]?\+(?P<attrlist>[^\s\+][^+].*?)\+(?!\+)=indexterm2
-endif::asciidoc7compatible[]
-
-ifndef::asciidoc7compatible[]
-# Index term: (((primary,secondary,tertiary)))
-(?su)(?<!\()[\\]?\(\(\((?P<attrlist>[^(].*?)\)\)\)(?!\))=indexterm
-# Index term: ((primary))
-# Follows (((...))) macro otherwise it will match them.
-(?<!\()[\\]?\(\((?P<attrlist>[^\s\(][^(].*?)\)\)(?!\))=indexterm2
-endif::asciidoc7compatible[]
-
-# Callout
-[\\]?<(?P<index>\d+)>=callout
-
-# Passthrough macros.
-(?su)[\\]?(?P<name>pass):(?P<subslist>\S*?)\[(?P<passtext>.*?)(?<!\\)\]=[]
-
-# Triple-plus and double-dollar inline passthroughs.
-(?su)[\\]?\+\+\+(?P<passtext>.*?)\+\+\+=pass[]
-(?su)[\\]?\$\$(?P<passtext>.*?)\$\$=pass[specialcharacters]
-
-# Inline literal.
-ifndef::no-inline-literal[]
-(?su)(?<![`\w])([\\]?`(?P<passtext>[^`\s]|[^`\s].*?\S)`)(?![`\w])=literal[specialcharacters]
-endif::no-inline-literal[]
-
-# Inline comment.
-(?mu)^[\\]?//(?P<passtext>[^/].*|)$=comment[specialcharacters]
-
-# Default (catchall) inline macro is not implemented so there is no ambiguity
-# with previous definition that could result in double substitution of escaped
-# references.
-#(?su)[\\]?(?P<name>\w(\w|-)*?):(?P<target>\S*?)\[(?P<passtext>.*?)(?<!\\)\]=
-
-#-------------
-# Block macros
-#-------------
-# Macros using default syntax.
-(?u)^(?P<name>image|unfloat|toc)::(?P<target>\S*?)(\[(?P<attrlist>.*?)\])$=#
-
-# Passthrough macros.
-(?u)^(?P<name>pass)::(?P<subslist>\S*?)(\[(?P<passtext>.*?)\])$=#
-
-^'{3,}$=#ruler
-^<{3,}$=#pagebreak
-^//(?P<passtext>[^/].*|)$=#comment[specialcharacters]
-
-# Implemented in HTML backends.
-[unfloat-blockmacro]
-[toc-blockmacro]
-
-#-----------------
-# Delimited blocks
-#-----------------
-[blockdef-comment]
-delimiter=^/{4,}$
-options=skip
-posattrs=style
-
-[blockdef-sidebar]
-delimiter=^\*{4,}$
-template=sidebarblock
-options=sectionbody
-posattrs=style
-# DEPRECATED: Use Openblock instead.
-abstract-style=template="abstractblock"
-
-[blockdef-open]
-# A block without opening or closing tags.
-delimiter=^--$
-posattrs=style
-style=default
-default-style=template="openblock",options=("sectionbody",)
-comment-style=template="openblock",options=("skip",)
-abstract-style=template="abstractblock",options=("sectionbody",)
-partintro-style=template="partintroblock",options=("sectionbody",)
-example-style=template="exampleblock",options=("sectionbody",)
-sidebar-style=template="sidebarblock",options=("sectionbody",)
-verse-style=template="verseblock",posattrs=("style","attribution","citetitle")
-quote-style=template="quoteblock",posattrs=("style","attribution","citetitle"),options=("sectionbody",)
-literal-style=template="literalparagraph",subs=("verbatim",)
-listing-style=template="listingparagraph",subs=("verbatim",)
-NOTE-style=template="admonitionblock",name="note",caption="{note-caption}",options=("sectionbody",)
-TIP-style=template="admonitionblock",name="tip",caption="{tip-caption}",options=("sectionbody",)
-IMPORTANT-style=template="admonitionblock",name="important",caption="{important-caption}",options=("sectionbody",)
-WARNING-style=template="admonitionblock",name="warning",caption="{warning-caption}",options=("sectionbody",)
-CAUTION-style=template="admonitionblock",name="caution",caption="{caution-caption}",options=("sectionbody",)
-
-[blockdef-pass]
-delimiter=^\+{4,}$
-template=passblock
-# Default subs choosen for backward compatibility.
-subs=attributes,macros
-posattrs=style
-pass-style=template="passblock",subs=()
-
-[blockdef-listing]
-delimiter=^-{4,}$
-template=listingblock
-subs=verbatim
-posattrs=style
-
-[blockdef-literal]
-delimiter=^\.{4,}$
-template=literalblock
-subs=verbatim
-posattrs=style
-listing-style=template="listingblock"
-# DEPRECATED: Use verse style on quote blocks instead.
-verse-style=template="verseblock",subs="normal"
-
-[blockdef-quote]
-delimiter=^_{4,}$
-subs=normal
-style=quote
-posattrs=style,attribution,citetitle
-quote-style=template="quoteblock",options=("sectionbody",)
-verse-style=template="verseblock"
-
-[blockdef-example]
-delimiter=^={4,}$
-template=exampleblock
-options=sectionbody
-posattrs=style
-NOTE-style=template="admonitionblock",name="note",caption="{note-caption}"
-TIP-style=template="admonitionblock",name="tip",caption="{tip-caption}"
-IMPORTANT-style=template="admonitionblock",name="important",caption="{important-caption}"
-WARNING-style=template="admonitionblock",name="warning",caption="{warning-caption}"
-CAUTION-style=template="admonitionblock",name="caution",caption="{caution-caption}"
-
-# For use by custom filters.
-# DEPRECATED: No longer used, a styled listing block (blockdef-listing) is preferable.
-[blockdef-filter]
-delimiter=^~{4,}$
-template=listingblock
-subs=none
-posattrs=style
-
-#-------
-# Lists
-#-------
-[listdef-bulleted]
-# - bullets.
-delimiter=^\s*- +(?P<text>.+)$
-posattrs=style
-type=bulleted
-tags=bulleted
-callout-style=tags="callout"
-bibliography-style=tags="bibliography"
-
-[listdef-bulleted1]
-# * bullets.
-template::[listdef-bulleted]
-delimiter=^\s*\* +(?P<text>.+)$
-
-[listdef-bulleted2]
-# ** bullets.
-template::[listdef-bulleted]
-delimiter=^\s*\*{2} +(?P<text>.+)$
-
-[listdef-bulleted3]
-# *** bullets.
-template::[listdef-bulleted]
-delimiter=^\s*\*{3} +(?P<text>.+)$
-
-[listdef-bulleted4]
-# **** bullets.
-template::[listdef-bulleted]
-delimiter=^\s*\*{4} +(?P<text>.+)$
-
-[listdef-bulleted5]
-# ***** bullets.
-template::[listdef-bulleted]
-delimiter=^\s*\*{5} +(?P<text>.+)$
-
-[listdef-arabic]
-# Arabic numbering.
-delimiter=^\s*(?P<index>\d+\.) +(?P<text>.+)$
-posattrs=style
-type=numbered
-tags=numbered
-style=arabic
-
-[listdef-loweralpha]
-# Lower alpha numbering.
-template::[listdef-arabic]
-delimiter=^\s*(?P<index>[a-z]\.) +(?P<text>.+)$
-style=loweralpha
-
-[listdef-upperalpha]
-# Upper alpha numbering.
-template::[listdef-arabic]
-delimiter=^\s*(?P<index>[A-Z]\.) +(?P<text>.+)$
-style=upperalpha
-
-[listdef-lowerroman]
-# Lower roman numbering.
-template::[listdef-arabic]
-delimiter=^\s*(?P<index>[ivx]+\)) +(?P<text>.+)$
-style=lowerroman
-
-[listdef-upperroman]
-# Upper roman numbering.
-template::[listdef-arabic]
-delimiter=^\s*(?P<index>[IVX]+\)) +(?P<text>.+)$
-style=upperroman
-
-[listdef-numbered1]
-# . numbering.
-template::[listdef-arabic]
-delimiter=^\s*\. +(?P<text>.+)$
-
-[listdef-numbered2]
-# .. numbering.
-template::[listdef-loweralpha]
-delimiter=^\s*\.{2} +(?P<text>.+)$
-
-[listdef-numbered3]
-# ... numbering.
-template::[listdef-lowerroman]
-delimiter=^\s*\.{3} +(?P<text>.+)$
-
-[listdef-numbered4]
-# .... numbering.
-template::[listdef-upperalpha]
-delimiter=^\s*\.{4} +(?P<text>.+)$
-
-[listdef-numbered5]
-# ..... numbering.
-template::[listdef-upperroman]
-delimiter=^\s*\.{5} +(?P<text>.+)$
-
-[listdef-labeled]
-# label:: item.
-delimiter=^\s*(?P<label>.*[^:])::(\s+(?P<text>.+))?$
-posattrs=style
-type=labeled
-tags=labeled
-vertical-style=tags="labeled"
-horizontal-style=tags="horizontal"
-glossary-style=tags="glossary"
-qanda-style=tags="qanda"
-
-[listdef-labeled2]
-# label;; item.
-template::[listdef-labeled]
-delimiter=^\s*(?P<label>.*[^;]);;(\s+(?P<text>.+))?$
-
-[listdef-labeled3]
-# label::: item.
-template::[listdef-labeled]
-delimiter=^\s*(?P<label>.*[^:]):{3}(\s+(?P<text>.+))?$
-
-[listdef-labeled4]
-# label:::: item.
-template::[listdef-labeled]
-delimiter=^\s*(?P<label>.*[^:]):{4}(\s+(?P<text>.+))?$
-
-[listdef-callout]
-posattrs=style
-delimiter=^<?(?P<index>\d*>) +(?P<text>.+)$
-type=callout
-tags=callout
-style=arabic
-
-# DEPRECATED: Old list syntax.
-[listdef-qanda]
-posattrs=style
-delimiter=^\s*(?P<label>.*\S)\?\?$
-type=labeled
-tags=qanda
-
-# DEPRECATED: Old list syntax.
-[listdef-bibliography]
-posattrs=style
-delimiter=^\+ +(?P<text>.+)$
-type=bulleted
-tags=bibliography
-
-# DEPRECATED: Old list syntax.
-[listdef-glossary]
-delimiter=^(?P<label>.*\S):-$
-posattrs=style
-type=labeled
-tags=glossary
-
-#-------
-# Tables
-#-------
-[tabledef-default]
-delimiter=^\|={3,}$
-posattrs=style
-template=table
-default-style=tags="default"
-verse-style=tags="verse"
-literal-style=tags="literal",subs=("specialcharacters",)
-emphasis-style=tags="emphasis"
-strong-style=tags="strong"
-monospaced-style=tags="monospaced"
-header-style=tags="header"
-asciidoc-style=tags="asciidoc",subs=(),filter='"{python}" "{asciidoc-file}" -b {backend} {asciidoc-args}{lang? -a "lang={lang}@"}{icons? -a icons -a "iconsdir={iconsdir}"}{imagesdir? -a "imagesdir={imagesdir}"}{data-uri? -a data-uri} -a "indir={indir}"{trace? -a "trace={trace}"}{blockname? -a "blockname={blockname}"} -s -'
-
-[tabledef-nested]
-# Same as [tabledef-default] but with different delimiter and separator.
-delimiter=^!={3,}$
-separator=((?<!\S)((?P<span>[\d.]+)(?P<op>[*+]))?(?P<align>[<\^>.]{,3})?(?P<style>[a-z])?)?!
-posattrs=style
-template=table
-verse-style=tags="verse"
-literal-style=tags="literal",subs=("specialcharacters",)
-emphasis-style=tags="emphasis"
-strong-style=tags="strong"
-monospaced-style=tags="monospaced"
-header-style=tags="header"
-asciidoc-style=tags="asciidoc",subs=(),filter='"{python}" "{asciidoc-file}" -b {backend} {asciidoc-args}{lang? -a "lang={lang}@"}{icons? -a icons -a "iconsdir={iconsdir}"}{imagesdir? -a "imagesdir={imagesdir}"}{data-uri? -a data-uri} -a "indir={indir}"{trace? -a "trace={trace}"}{blockname? -a "blockname={blockname}"} -s -'
-
-#----------------------------------------
-# Common block and macro markup templates
-#----------------------------------------
-[comment-inlinemacro]
-# Outputs nothing.
-
-[comment-blockmacro]
-# Outputs nothing.
-
-[pass-blockmacro]
-{passtext}
-
-[pass-inlinemacro]
-template::[pass-blockmacro]
-
-[passblock]
-|
-
-[filter-image-blockmacro]
-# Synthesize missing target attribute for filter generated file names.
-# The tag split | ensures missing target file names are auto-generated
-# before the filter is executed, the remainder (the [image-blockmacro])
-# is excuted after the filter to ensure data URI encoding comes after
-# the image is created.
-{target%}{counter2:target-number}
-{target%}{set2:target:{docname}__{target-number}.png}
-|
-template::[image-blockmacro]
-
-[+docinfo]
-# Blank section to suppress missing template warning.
-
-#----------------------------------
-# Default special section templates
-#----------------------------------
-[abstract]
-template::[sect1]
-
-[colophon]
-template::[sect1]
-
-[dedication]
-template::[sect1]
-
-[preface]
-template::[sect1]
-
-[appendix]
-template::[sect1]
-
-[glossary]
-template::[sect1]
-
-[bibliography]
-template::[sect1]
-
-[index]
-template::[sect1]
-
-[synopsis]
-template::[sect1]
-
-#--------------------------------------------------------------------
-# Deprecated old table definitions.
-#
-
-[old_tabledef-default]
-fillchar=-
-format=fixed
-
-[old_tabledef-csv]
-fillchar=~
-format=csv
-
-[old_tabledef-dsv]
-fillchar=_
-format=dsv
-
-# End of deprecated old table definitions.
-#--------------------------------------------------------------------
diff --git a/source-builder/sb/asciidoc/asciidoc.py b/source-builder/sb/asciidoc/asciidoc.py
deleted file mode 100755
index 8c68895..0000000
--- a/source-builder/sb/asciidoc/asciidoc.py
+++ /dev/null
@@ -1,6260 +0,0 @@
-#!/usr/bin/env python
-"""
-asciidoc - converts an AsciiDoc text file to HTML or DocBook
-
-Copyright (C) 2002-2010 Stuart Rackham. Free use of this software is granted
-under the terms of the GNU General Public License (GPL).
-"""
-
-import sys, os, re, time, traceback, tempfile, subprocess, codecs, locale, unicodedata, copy
-
-### Used by asciidocapi.py ###
-VERSION = '8.6.8'           # See CHANGLOG file for version history.
-
-MIN_PYTHON_VERSION = '2.4'  # Require this version of Python or better.
-
-#---------------------------------------------------------------------------
-# Program constants.
-#---------------------------------------------------------------------------
-DEFAULT_BACKEND = 'html'
-DEFAULT_DOCTYPE = 'article'
-# Allowed substitution options for List, Paragraph and DelimitedBlock
-# definition subs entry.
-SUBS_OPTIONS = ('specialcharacters','quotes','specialwords',
-    'replacements', 'attributes','macros','callouts','normal','verbatim',
-    'none','replacements2','replacements3')
-# Default value for unspecified subs and presubs configuration file entries.
-SUBS_NORMAL = ('specialcharacters','quotes','attributes',
-    'specialwords','replacements','macros','replacements2')
-SUBS_VERBATIM = ('specialcharacters','callouts')
-
-NAME_RE = r'(?u)[^\W\d][-\w]*'  # Valid section or attribute name.
-OR, AND = ',', '+'              # Attribute list separators.
-
-
-#---------------------------------------------------------------------------
-# Utility functions and classes.
-#---------------------------------------------------------------------------
-
-class EAsciiDoc(Exception): pass
-
-class OrderedDict(dict):
-    """
-    Dictionary ordered by insertion order.
-    Python Cookbook: Ordered Dictionary, Submitter: David Benjamin.
-    http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/107747
-    """
-    def __init__(self, d=None, **kwargs):
-        self._keys = []
-        if d is None: d = kwargs
-        dict.__init__(self, d)
-    def __delitem__(self, key):
-        dict.__delitem__(self, key)
-        self._keys.remove(key)
-    def __setitem__(self, key, item):
-        dict.__setitem__(self, key, item)
-        if key not in self._keys: self._keys.append(key)
-    def clear(self):
-        dict.clear(self)
-        self._keys = []
-    def copy(self):
-        d = dict.copy(self)
-        d._keys = self._keys[:]
-        return d
-    def items(self):
-        return zip(self._keys, self.values())
-    def keys(self):
-        return self._keys
-    def popitem(self):
-        try:
-            key = self._keys[-1]
-        except IndexError:
-            raise KeyError('dictionary is empty')
-        val = self[key]
-        del self[key]
-        return (key, val)
-    def setdefault(self, key, failobj = None):
-        dict.setdefault(self, key, failobj)
-        if key not in self._keys: self._keys.append(key)
-    def update(self, d=None, **kwargs):
-        if d is None:
-            d = kwargs
-        dict.update(self, d)
-        for key in d.keys():
-            if key not in self._keys: self._keys.append(key)
-    def values(self):
-        return map(self.get, self._keys)
-
-class AttrDict(dict):
-    """
-    Like a dictionary except values can be accessed as attributes i.e. obj.foo
-    can be used in addition to obj['foo'].
-    If an item is not present None is returned.
-    """
-    def __getattr__(self, key):
-        try: return self[key]
-        except KeyError: return None
-    def __setattr__(self, key, value):
-        self[key] = value
-    def __delattr__(self, key):
-        try: del self[key]
-        except KeyError, k: raise AttributeError, k
-    def __repr__(self):
-        return '<AttrDict ' + dict.__repr__(self) + '>'
-    def __getstate__(self):
-        return dict(self)
-    def __setstate__(self,value):
-        for k,v in value.items(): self[k]=v
-
-class InsensitiveDict(dict):
-    """
-    Like a dictionary except key access is case insensitive.
-    Keys are stored in lower case.
-    """
-    def __getitem__(self, key):
-        return dict.__getitem__(self, key.lower())
-    def __setitem__(self, key, value):
-        dict.__setitem__(self, key.lower(), value)
-    def has_key(self, key):
-        return dict.has_key(self,key.lower())
-    def get(self, key, default=None):
-        return dict.get(self, key.lower(), default)
-    def update(self, dict):
-        for k,v in dict.items():
-            self[k] = v
-    def setdefault(self, key, default = None):
-        return dict.setdefault(self, key.lower(), default)
-
-
-class Trace(object):
-    """
-    Used in conjunction with the 'trace' attribute to generate diagnostic
-    output. There is a single global instance of this class named trace.
-    """
-    SUBS_NAMES = ('specialcharacters','quotes','specialwords',
-                  'replacements', 'attributes','macros','callouts',
-                  'replacements2','replacements3')
-    def __init__(self):
-        self.name_re = ''        # Regexp pattern to match trace names.
-        self.linenos = True
-        self.offset = 0
-    def __call__(self, name, before, after=None):
-        """
-        Print trace message if tracing is on and the trace 'name' matches the
-        document 'trace' attribute (treated as a regexp).
-        'before' is the source text before substitution; 'after' text is the
-        source text after substitutuion.
-        The 'before' and 'after' messages are only printed if they differ.
-        """
-        name_re = document.attributes.get('trace')
-        if name_re == 'subs':    # Alias for all the inline substitutions.
-            name_re = '|'.join(self.SUBS_NAMES)
-        self.name_re = name_re
-        if self.name_re is not None:
-            msg = message.format(name, 'TRACE: ', self.linenos, offset=self.offset)
-            if before != after and re.match(self.name_re,name):
-                if is_array(before):
-                    before = '\n'.join(before)
-                if after is None:
-                    msg += '\n%s\n' % before
-                else:
-                    if is_array(after):
-                        after = '\n'.join(after)
-                    msg += '\n<<<\n%s\n>>>\n%s\n' % (before,after)
-                message.stderr(msg)
-
-class Message:
-    """
-    Message functions.
-    """
-    PROG = os.path.basename(os.path.splitext(__file__)[0])
-
-    def __init__(self):
-        # Set to True or False to globally override line numbers method
-        # argument. Has no effect when set to None.
-        self.linenos = None
-        self.messages = []
-        self.prev_msg = ''
-
-    def stdout(self,msg):
-        print msg
-
-    def stderr(self,msg=''):
-        if msg == self.prev_msg:  # Suppress repeated messages.
-            return
-        self.messages.append(msg)
-        if __name__ == '__main__':
-            sys.stderr.write('%s: %s%s' % (self.PROG, msg, os.linesep))
-        self.prev_msg = msg
-
-    def verbose(self, msg,linenos=True):
-        if config.verbose:
-            msg = self.format(msg,linenos=linenos)
-            self.stderr(msg)
-
-    def warning(self, msg,linenos=True,offset=0):
-        msg = self.format(msg,'WARNING: ',linenos,offset=offset)
-        document.has_warnings = True
-        self.stderr(msg)
-
-    def deprecated(self, msg, linenos=True):
-        msg = self.format(msg, 'DEPRECATED: ', linenos)
-        self.stderr(msg)
-
-    def format(self, msg, prefix='', linenos=True, cursor=None, offset=0):
-        """Return formatted message string."""
-        if self.linenos is not False and ((linenos or self.linenos) and reader.cursor):
-            if cursor is None:
-                cursor = reader.cursor
-            prefix += '%s: line %d: ' % (os.path.basename(cursor[0]),cursor[1]+offset)
-        return prefix + msg
-
-    def error(self, msg, cursor=None, halt=False):
-        """
-        Report fatal error.
-        If halt=True raise EAsciiDoc exception.
-        If halt=False don't exit application, continue in the hope of reporting
-        all fatal errors finishing with a non-zero exit code.
-        """
-        if halt:
-            raise EAsciiDoc, self.format(msg,linenos=False,cursor=cursor)
-        else:
-            msg = self.format(msg,'ERROR: ',cursor=cursor)
-            self.stderr(msg)
-            document.has_errors = True
-
-    def unsafe(self, msg):
-        self.error('unsafe: '+msg)
-
-
-def userdir():
-    """
-    Return user's home directory or None if it is not defined.
-    """
-    result = os.path.expanduser('~')
-    if result == '~':
-        result = None
-    return result
-
-def localapp():
-    """
-    Return True if we are not executing the system wide version
-    i.e. the configuration is in the executable's directory.
-    """
-    return os.path.isfile(os.path.join(APP_DIR, 'asciidoc.conf'))
-
-def file_in(fname, directory):
-    """Return True if file fname resides inside directory."""
-    assert os.path.isfile(fname)
-    # Empty directory (not to be confused with None) is the current directory.
-    if directory == '':
-        directory = os.getcwd()
-    else:
-        assert os.path.isdir(directory)
-        directory = os.path.realpath(directory)
-    fname = os.path.realpath(fname)
-    return os.path.commonprefix((directory, fname)) == directory
-
-def safe():
-    return document.safe
-
-def is_safe_file(fname, directory=None):
-    # A safe file must reside in 'directory' (defaults to the source
-    # file directory).
-    if directory is None:
-        if document.infile == '<stdin>':
-           return not safe()
-        directory = os.path.dirname(document.infile)
-    elif directory == '':
-        directory = '.'
-    return (
-        not safe()
-        or file_in(fname, directory)
-        or file_in(fname, APP_DIR)
-        or file_in(fname, CONF_DIR)
-    )
-
-def safe_filename(fname, parentdir):
-    """
-    Return file name which must reside in the parent file directory.
-    Return None if file is not safe.
-    """
-    if not os.path.isabs(fname):
-        # Include files are relative to parent document
-        # directory.
-        fname = os.path.normpath(os.path.join(parentdir,fname))
-    if not is_safe_file(fname, parentdir):
-        message.unsafe('include file: %s' % fname)
-        return None
-    return fname
-
-def assign(dst,src):
-    """Assign all attributes from 'src' object to 'dst' object."""
-    for a,v in src.__dict__.items():
-        setattr(dst,a,v)
-
-def strip_quotes(s):
-    """Trim white space and, if necessary, quote characters from s."""
-    s = s.strip()
-    # Strip quotation mark characters from quoted strings.
-    if len(s) >= 3 and s[0] == '"' and s[-1] == '"':
-        s = s[1:-1]
-    return s
-
-def is_re(s):
-    """Return True if s is a valid regular expression else return False."""
-    try: re.compile(s)
-    except: return False
-    else: return True
-
-def re_join(relist):
-    """Join list of regular expressions re1,re2,... to single regular
-    expression (re1)|(re2)|..."""
-    if len(relist) == 0:
-        return None
-    result = []
-    # Delete named groups to avoid ambiguity.
-    for s in relist:
-        result.append(re.sub(r'\?P<\S+?>','',s))
-    result = ')|('.join(result)
-    result = '('+result+')'
-    return result
-
-def lstrip_list(s):
-    """
-    Return list with empty items from start of list removed.
-    """
-    for i in range(len(s)):
-        if s[i]: break
-    else:
-        return []
-    return s[i:]
-
-def rstrip_list(s):
-    """
-    Return list with empty items from end of list removed.
-    """
-    for i in range(len(s)-1,-1,-1):
-        if s[i]: break
-    else:
-        return []
-    return s[:i+1]
-
-def strip_list(s):
-    """
-    Return list with empty items from start and end of list removed.
-    """
-    s = lstrip_list(s)
-    s = rstrip_list(s)
-    return s
-
-def is_array(obj):
-    """
-    Return True if object is list or tuple type.
-    """
-    return isinstance(obj,list) or isinstance(obj,tuple)
-
-def dovetail(lines1, lines2):
-    """
-    Append list or tuple of strings 'lines2' to list 'lines1'.  Join the last
-    non-blank item in 'lines1' with the first non-blank item in 'lines2' into a
-    single string.
-    """
-    assert is_array(lines1)
-    assert is_array(lines2)
-    lines1 = strip_list(lines1)
-    lines2 = strip_list(lines2)
-    if not lines1 or not lines2:
-        return list(lines1) + list(lines2)
-    result = list(lines1[:-1])
-    result.append(lines1[-1] + lines2[0])
-    result += list(lines2[1:])
-    return result
-
-def dovetail_tags(stag,content,etag):
-    """Merge the end tag with the first content line and the last
-    content line with the end tag. This ensures verbatim elements don't
-    include extraneous opening and closing line breaks."""
-    return dovetail(dovetail(stag,content), etag)
-
-# The following functions are so we don't have to use the dangerous
-# built-in eval() function.
-if float(sys.version[:3]) >= 2.6 or sys.platform[:4] == 'java':
-    # Use AST module if CPython >= 2.6 or Jython.
-    import ast
-    from ast import literal_eval
-
-    def get_args(val):
-        d = {}
-        args = ast.parse("d(" + val + ")", mode='eval').body.args
-        i = 1
-        for arg in args:
-            if isinstance(arg, ast.Name):
-                d[str(i)] = literal_eval(arg.id)
-            else:
-                d[str(i)] = literal_eval(arg)
-            i += 1
-        return d
-
-    def get_kwargs(val):
-        d = {}
-        args = ast.parse("d(" + val + ")", mode='eval').body.keywords
-        for arg in args:
-            d[arg.arg] = literal_eval(arg.value)
-        return d
-
-    def parse_to_list(val):
-        values = ast.parse("[" + val + "]", mode='eval').body.elts
-        return [literal_eval(v) for v in values]
-
-else:   # Use deprecated CPython compiler module.
-    import compiler
-    from compiler.ast import Const, Dict, Expression, Name, Tuple, UnarySub, Keyword
-
-    # Code from:
-    # http://mail.python.org/pipermail/python-list/2009-September/1219992.html
-    # Modified to use compiler.ast.List as this module has a List
-    def literal_eval(node_or_string):
-        """
-        Safely evaluate an expression node or a string containing a Python
-        expression.  The string or node provided may only consist of the
-        following Python literal structures: strings, numbers, tuples,
-        lists, dicts, booleans, and None.
-        """
-        _safe_names = {'None': None, 'True': True, 'False': False}
-        if isinstance(node_or_string, basestring):
-            node_or_string = compiler.parse(node_or_string, mode='eval')
-        if isinstance(node_or_string, Expression):
-            node_or_string = node_or_string.node
-        def _convert(node):
-            if isinstance(node, Const) and isinstance(node.value,
-                    (basestring, int, float, long, complex)):
-                 return node.value
-            elif isinstance(node, Tuple):
-                return tuple(map(_convert, node.nodes))
-            elif isinstance(node, compiler.ast.List):
-                return list(map(_convert, node.nodes))
-            elif isinstance(node, Dict):
-                return dict((_convert(k), _convert(v)) for k, v
-                            in node.items)
-            elif isinstance(node, Name):
-                if node.name in _safe_names:
-                    return _safe_names[node.name]
-            elif isinstance(node, UnarySub):
-                return -_convert(node.expr)
-            raise ValueError('malformed string')
-        return _convert(node_or_string)
-
-    def get_args(val):
-        d = {}
-        args = compiler.parse("d(" + val + ")", mode='eval').node.args
-        i = 1
-        for arg in args:
-            if isinstance(arg, Keyword):
-                break
-            d[str(i)] = literal_eval(arg)
-            i = i + 1
-        return d
-
-    def get_kwargs(val):
-        d = {}
-        args = compiler.parse("d(" + val + ")", mode='eval').node.args
-        i = 0
-        for arg in args:
-            if isinstance(arg, Keyword):
-                break
-            i += 1
-        args = args[i:]
-        for arg in args:
-            d[str(arg.name)] = literal_eval(arg.expr)
-        return d
-
-    def parse_to_list(val):
-        values = compiler.parse("[" + val + "]", mode='eval').node.asList()
-        return [literal_eval(v) for v in values]
-
-def parse_attributes(attrs,dict):
-    """Update a dictionary with name/value attributes from the attrs string.
-    The attrs string is a comma separated list of values and keyword name=value
-    pairs. Values must preceed keywords and are named '1','2'... The entire
-    attributes list is named '0'. If keywords are specified string values must
-    be quoted. Examples:
-
-    attrs: ''
-    dict: {}
-
-    attrs: 'hello,world'
-    dict: {'2': 'world', '0': 'hello,world', '1': 'hello'}
-
-    attrs: '"hello", planet="earth"'
-    dict: {'planet': 'earth', '0': '"hello",planet="earth"', '1': 'hello'}
-    """
-    def f(*args,**keywords):
-        # Name and add aguments '1','2'... to keywords.
-        for i in range(len(args)):
-            if not str(i+1) in keywords:
-                keywords[str(i+1)] = args[i]
-        return keywords
-
-    if not attrs:
-        return
-    dict['0'] = attrs
-    # Replace line separators with spaces so line spanning works.
-    s = re.sub(r'\s', ' ', attrs)
-    d = {}
-    try:
-        d.update(get_args(s))
-        d.update(get_kwargs(s))
-        for v in d.values():
-            if not (isinstance(v,str) or isinstance(v,int) or isinstance(v,float) or v is None):
-                raise Exception
-    except Exception:
-        s = s.replace('"','\\"')
-        s = s.split(',')
-        s = map(lambda x: '"' + x.strip() + '"', s)
-        s = ','.join(s)
-        try:
-            d = {}
-            d.update(get_args(s))
-            d.update(get_kwargs(s))
-        except Exception:
-            return  # If there's a syntax error leave with {0}=attrs.
-        for k in d.keys():  # Drop any empty positional arguments.
-            if d[k] == '': del d[k]
-    dict.update(d)
-    assert len(d) > 0
-
-def parse_named_attributes(s,attrs):
-    """Update a attrs dictionary with name="value" attributes from the s string.
-    Returns False if invalid syntax.
-    Example:
-    attrs: 'star="sun",planet="earth"'
-    dict: {'planet':'earth', 'star':'sun'}
-    """
-    def f(**keywords): return keywords
-
-    try:
-        d = {}
-        d = get_kwargs(s)
-        attrs.update(d)
-        return True
-    except Exception:
-        return False
-
-def parse_list(s):
-    """Parse comma separated string of Python literals. Return a tuple of of
-    parsed values."""
-    try:
-        result = tuple(parse_to_list(s))
-    except Exception:
-        raise EAsciiDoc,'malformed list: '+s
-    return result
-
-def parse_options(options,allowed,errmsg):
-    """Parse comma separated string of unquoted option names and return as a
-    tuple of valid options. 'allowed' is a list of allowed option values.
-    If allowed=() then all legitimate names are allowed.
-    'errmsg' is an error message prefix if an illegal option error is thrown."""
-    result = []
-    if options:
-        for s in re.split(r'\s*,\s*',options):
-            if (allowed and s not in allowed) or not is_name(s):
-                raise EAsciiDoc,'%s: %s' % (errmsg,s)
-            result.append(s)
-    return tuple(result)
-
-def symbolize(s):
-    """Drop non-symbol characters and convert to lowercase."""
-    return re.sub(r'(?u)[^\w\-_]', '', s).lower()
-
-def is_name(s):
-    """Return True if s is valid attribute, macro or tag name
-    (starts with alpha containing alphanumeric and dashes only)."""
-    return re.match(r'^'+NAME_RE+r'$',s) is not None
-
-def subs_quotes(text):
-    """Quoted text is marked up and the resulting text is
-    returned."""
-    keys = config.quotes.keys()
-    for q in keys:
-        i = q.find('|')
-        if i != -1 and q != '|' and q != '||':
-            lq = q[:i]      # Left quote.
-            rq = q[i+1:]    # Right quote.
-        else:
-            lq = rq = q
-        tag = config.quotes[q]
-        if not tag: continue
-        # Unconstrained quotes prefix the tag name with a hash.
-        if tag[0] == '#':
-            tag = tag[1:]
-            # Unconstrained quotes can appear anywhere.
-            reo = re.compile(r'(?msu)(^|.)(\[(?P<attrlist>[^[\]]+?)\])?' \
-                    + r'(?:' + re.escape(lq) + r')' \
-                    + r'(?P<content>.+?)(?:'+re.escape(rq)+r')')
-        else:
-            # The text within constrained quotes must be bounded by white space.
-            # Non-word (\W) characters are allowed at boundaries to accomodate
-            # enveloping quotes and punctuation e.g. a='x', ('x'), 'x', ['x'].
-            reo = re.compile(r'(?msu)(^|[^\w;:}])(\[(?P<attrlist>[^[\]]+?)\])?' \
-                + r'(?:' + re.escape(lq) + r')' \
-                + r'(?P<content>\S|\S.*?\S)(?:'+re.escape(rq)+r')(?=\W|$)')
-        pos = 0
-        while True:
-            mo = reo.search(text,pos)
-            if not mo: break
-            if text[mo.start()] == '\\':
-                # Delete leading backslash.
-                text = text[:mo.start()] + text[mo.start()+1:]
-                # Skip past start of match.
-                pos = mo.start() + 1
-            else:
-                attrlist = {}
-                parse_attributes(mo.group('attrlist'), attrlist)
-                stag,etag = config.tag(tag, attrlist)
-                s = mo.group(1) + stag + mo.group('content') + etag
-                text = text[:mo.start()] + s + text[mo.end():]
-                pos = mo.start() + len(s)
-    return text
-
-def subs_tag(tag,dict={}):
-    """Perform attribute substitution and split tag string returning start, end
-    tag tuple (c.f. Config.tag())."""
-    if not tag:
-        return [None,None]
-    s = subs_attrs(tag,dict)
-    if not s:
-        message.warning('tag \'%s\' dropped: contains undefined attribute' % tag)
-        return [None,None]
-    result = s.split('|')
-    if len(result) == 1:
-        return result+[None]
-    elif len(result) == 2:
-        return result
-    else:
-        raise EAsciiDoc,'malformed tag: %s' % tag
-
-def parse_entry(entry, dict=None, unquote=False, unique_values=False,
-        allow_name_only=False, escape_delimiter=True):
-    """Parse name=value entry to dictionary 'dict'. Return tuple (name,value)
-    or None if illegal entry.
-    If name= then value is set to ''.
-    If name and allow_name_only=True then value is set to ''.
-    If name! and allow_name_only=True then value is set to None.
-    Leading and trailing white space is striped from 'name' and 'value'.
-    'name' can contain any printable characters.
-    If the '=' delimiter character is allowed in  the 'name' then
-    it must be escaped with a backslash and escape_delimiter must be True.
-    If 'unquote' is True leading and trailing double-quotes are stripped from
-    'name' and 'value'.
-    If unique_values' is True then dictionary entries with the same value are
-    removed before the parsed entry is added."""
-    if escape_delimiter:
-        mo = re.search(r'(?:[^\\](=))',entry)
-    else:
-        mo = re.search(r'(=)',entry)
-    if mo:  # name=value entry.
-        if mo.group(1):
-            name = entry[:mo.start(1)]
-            if escape_delimiter:
-                name = name.replace(r'\=','=')  # Unescape \= in name.
-            value = entry[mo.end(1):]
-    elif allow_name_only and entry:         # name or name! entry.
-        name = entry
-        if name[-1] == '!':
-            name = name[:-1]
-            value = None
-        else:
-            value = ''
-    else:
-        return None
-    if unquote:
-        name = strip_quotes(name)
-        if value is not None:
-            value = strip_quotes(value)
-    else:
-        name = name.strip()
-        if value is not None:
-            value = value.strip()
-    if not name:
-        return None
-    if dict is not None:
-        if unique_values:
-            for k,v in dict.items():
-                if v == value: del dict[k]
-        dict[name] = value
-    return name,value
-
-def parse_entries(entries, dict, unquote=False, unique_values=False,
-        allow_name_only=False,escape_delimiter=True):
-    """Parse name=value entries from  from lines of text in 'entries' into
-    dictionary 'dict'. Blank lines are skipped."""
-    entries = config.expand_templates(entries)
-    for entry in entries:
-        if entry and not parse_entry(entry, dict, unquote, unique_values,
-                allow_name_only, escape_delimiter):
-            raise EAsciiDoc,'malformed section entry: %s' % entry
-
-def dump_section(name,dict,f=sys.stdout):
-    """Write parameters in 'dict' as in configuration file section format with
-    section 'name'."""
-    f.write('[%s]%s' % (name,writer.newline))
-    for k,v in dict.items():
-        k = str(k)
-        k = k.replace('=',r'\=')    # Escape = in name.
-        # Quote if necessary.
-        if len(k) != len(k.strip()):
-            k = '"'+k+'"'
-        if v and len(v) != len(v.strip()):
-            v = '"'+v+'"'
-        if v is None:
-            # Don't dump undefined attributes.
-            continue
-        else:
-            s = k+'='+v
-        if s[0] == '#':
-            s = '\\' + s    # Escape so not treated as comment lines.
-        f.write('%s%s' % (s,writer.newline))
-    f.write(writer.newline)
-
-def update_attrs(attrs,dict):
-    """Update 'attrs' dictionary with parsed attributes in dictionary 'dict'."""
-    for k,v in dict.items():
-        if not is_name(k):
-            raise EAsciiDoc,'illegal attribute name: %s' % k
-        attrs[k] = v
-
-def is_attr_defined(attrs,dic):
-    """
-    Check if the sequence of attributes is defined in dictionary 'dic'.
-    Valid 'attrs' sequence syntax:
-    <attr> Return True if single attrbiute is defined.
-    <attr1>,<attr2>,... Return True if one or more attributes are defined.
-    <attr1>+<attr2>+... Return True if all the attributes are defined.
-    """
-    if OR in attrs:
-        for a in attrs.split(OR):
-            if dic.get(a.strip()) is not None:
-                return True
-        else: return False
-    elif AND in attrs:
-        for a in attrs.split(AND):
-            if dic.get(a.strip()) is None:
-                return False
-        else: return True
-    else:
-        return dic.get(attrs.strip()) is not None
-
-def filter_lines(filter_cmd, lines, attrs={}):
-    """
-    Run 'lines' through the 'filter_cmd' shell command and return the result.
-    The 'attrs' dictionary contains additional filter attributes.
-    """
-    def findfilter(name,dir,filter):
-        """Find filter file 'fname' with style name 'name' in directory
-        'dir'. Return found file path or None if not found."""
-        if name:
-            result = os.path.join(dir,'filters',name,filter)
-            if os.path.isfile(result):
-                return result
-        result = os.path.join(dir,'filters',filter)
-        if os.path.isfile(result):
-            return result
-        return None
-
-    # Return input lines if there's not filter.
-    if not filter_cmd or not filter_cmd.strip():
-        return lines
-    # Perform attributes substitution on the filter command.
-    s = subs_attrs(filter_cmd, attrs)
-    if not s:
-        message.error('undefined filter attribute in command: %s' % filter_cmd)
-        return []
-    filter_cmd = s.strip()
-    # Parse for quoted and unquoted command and command tail.
-    # Double quoted.
-    mo = re.match(r'^"(?P<cmd>[^"]+)"(?P<tail>.*)$', filter_cmd)
-    if not mo:
-        # Single quoted.
-        mo = re.match(r"^'(?P<cmd>[^']+)'(?P<tail>.*)$", filter_cmd)
-        if not mo:
-            # Unquoted catch all.
-            mo = re.match(r'^(?P<cmd>\S+)(?P<tail>.*)$', filter_cmd)
-    cmd = mo.group('cmd').strip()
-    found = None
-    if not os.path.dirname(cmd):
-        # Filter command has no directory path so search filter directories.
-        filtername = attrs.get('style')
-        d = document.attributes.get('docdir')
-        if d:
-            found = findfilter(filtername, d, cmd)
-        if not found:
-            if USER_DIR:
-                found = findfilter(filtername, USER_DIR, cmd)
-            if not found:
-                if localapp():
-                    found = findfilter(filtername, APP_DIR, cmd)
-                else:
-                    found = findfilter(filtername, CONF_DIR, cmd)
-    else:
-        if os.path.isfile(cmd):
-            found = cmd
-        else:
-            message.warning('filter not found: %s' % cmd)
-    if found:
-        filter_cmd = '"' + found + '"' + mo.group('tail')
-    if found:
-        if cmd.endswith('.py'):
-            filter_cmd = '"%s" %s' % (document.attributes['python'],
-                filter_cmd)
-        elif cmd.endswith('.rb'):
-            filter_cmd = 'ruby ' + filter_cmd
-
-    message.verbose('filtering: ' + filter_cmd)
-    if os.name == 'nt':
-        # Remove redundant quoting -- this is not just
-        # cosmetic, unnecessary quoting appears to cause
-        # command line truncation.
-        filter_cmd = re.sub(r'"([^ ]+?)"', r'\1', filter_cmd)
-    try:
-        p = subprocess.Popen(filter_cmd, shell=True,
-                stdin=subprocess.PIPE, stdout=subprocess.PIPE)
-        output = p.communicate(os.linesep.join(lines))[0]
-    except Exception:
-        raise EAsciiDoc,'filter error: %s: %s' % (filter_cmd, sys.exc_info()[1])
-    if output:
-        result = [s.rstrip() for s in output.split(os.linesep)]
-    else:
-        result = []
-    filter_status = p.wait()
-    if filter_status:
-        message.warning('filter non-zero exit code: %s: returned %d' %
-               (filter_cmd, filter_status))
-    if lines and not result:
-        message.warning('no output from filter: %s' % filter_cmd)
-    return result
-
-def system(name, args, is_macro=False, attrs=None):
-    """
-    Evaluate a system attribute ({name:args}) or system block macro
-    (name::[args]).
-    If is_macro is True then we are processing a system block macro otherwise
-    it's a system attribute.
-    The attrs dictionary is updated by the counter and set system attributes.
-    NOTE: The include1 attribute is used internally by the include1::[] macro
-    and is not for public use.
-    """
-    if is_macro:
-        syntax = '%s::[%s]' % (name,args)
-        separator = '\n'
-    else:
-        syntax = '{%s:%s}' % (name,args)
-        separator = writer.newline
-    if name not in ('eval','eval3','sys','sys2','sys3','include','include1','counter','counter2','set','set2','template'):
-        if is_macro:
-            msg = 'illegal system macro name: %s' % name
-        else:
-            msg = 'illegal system attribute name: %s' % name
-        message.warning(msg)
-        return None
-    if is_macro:
-        s = subs_attrs(args)
-        if s is None:
-            message.warning('skipped %s: undefined attribute in: %s' % (name,args))
-            return None
-        args = s
-    if name != 'include1':
-        message.verbose('evaluating: %s' % syntax)
-    if safe() and name not in ('include','include1'):
-        message.unsafe(syntax)
-        return None
-    result = None
-    if name in ('eval','eval3'):
-        try:
-            result = eval(args)
-            if result is True:
-                result = ''
-            elif result is False:
-                result = None
-            elif result is not None:
-                result = str(result)
-        except Exception:
-            message.warning('%s: evaluation error' % syntax)
-    elif name in ('sys','sys2','sys3'):
-        result = ''
-        fd,tmp = tempfile.mkstemp()
-        os.close(fd)
-        try:
-            cmd = args
-            cmd = cmd + (' > "%s"' % tmp)
-            if name == 'sys2':
-                cmd = cmd + ' 2>&1'
-            if os.name == 'nt':
-                # Remove redundant quoting -- this is not just
-                # cosmetic, unnecessary quoting appears to cause
-                # command line truncation.
-                cmd = re.sub(r'"([^ ]+?)"', r'\1', cmd)
-            message.verbose('shelling: %s' % cmd)
-            if os.system(cmd):
-                message.warning('%s: non-zero exit status' % syntax)
-            try:
-                if os.path.isfile(tmp):
-                    f = open(tmp)
-                    try:
-                        lines = [s.rstrip() for s in f]
-                    finally:
-                        f.close()
-                else:
-                    lines = []
-            except Exception:
-                raise EAsciiDoc,'%s: temp file read error' % syntax
-            result = separator.join(lines)
-        finally:
-            if os.path.isfile(tmp):
-                os.remove(tmp)
-    elif name in ('counter','counter2'):
-        mo = re.match(r'^(?P<attr>[^:]*?)(:(?P<seed>.*))?$', args)
-        attr = mo.group('attr')
-        seed = mo.group('seed')
-        if seed and (not re.match(r'^\d+$', seed) and len(seed) > 1):
-            message.warning('%s: illegal counter seed: %s' % (syntax,seed))
-            return None
-        if not is_name(attr):
-            message.warning('%s: illegal attribute name' % syntax)
-            return None
-        value = document.attributes.get(attr)
-        if value:
-            if not re.match(r'^\d+$', value) and len(value) > 1:
-                message.warning('%s: illegal counter value: %s'
-                                % (syntax,value))
-                return None
-            if re.match(r'^\d+$', value):
-                expr = value + '+1'
-            else:
-                expr = 'chr(ord("%s")+1)' % value
-            try:
-                result = str(eval(expr))
-            except Exception:
-                message.warning('%s: evaluation error: %s' % (syntax, expr))
-        else:
-            if seed:
-                result = seed
-            else:
-                result = '1'
-        document.attributes[attr] = result
-        if attrs is not None:
-            attrs[attr] = result
-        if name == 'counter2':
-            result = ''
-    elif name in ('set','set2'):
-        mo = re.match(r'^(?P<attr>[^:]*?)(:(?P<value>.*))?$', args)
-        attr = mo.group('attr')
-        value = mo.group('value')
-        if value is None:
-            value = ''
-        if attr.endswith('!'):
-            attr = attr[:-1]
-            value = None
-        if not is_name(attr):
-            message.warning('%s: illegal attribute name' % syntax)
-        else:
-            if attrs is not None:
-                attrs[attr] = value
-            if name != 'set2':  # set2 only updates local attributes.
-                document.attributes[attr] = value
-        if value is None:
-            result = None
-        else:
-            result = ''
-    elif name == 'include':
-        if not os.path.exists(args):
-            message.warning('%s: file does not exist' % syntax)
-        elif not is_safe_file(args):
-            message.unsafe(syntax)
-        else:
-            f = open(args)
-            try:
-                result = [s.rstrip() for s in f]
-            finally:
-                f.close()
-            if result:
-                result = subs_attrs(result)
-                result = separator.join(result)
-                result = result.expandtabs(reader.tabsize)
-            else:
-                result = ''
-    elif name == 'include1':
-        result = separator.join(config.include1[args])
-    elif name == 'template':
-        if not args in config.sections:
-            message.warning('%s: template does not exist' % syntax)
-        else:
-            result = []
-            for line in  config.sections[args]:
-                line = subs_attrs(line)
-                if line is not None:
-                    result.append(line)
-            result = '\n'.join(result)
-    else:
-        assert False
-    if result and name in ('eval3','sys3'):
-        macros.passthroughs.append(result)
-        result = '\x07' + str(len(macros.passthroughs)-1) + '\x07'
-    return result
-
-def subs_attrs(lines, dictionary=None):
-    """Substitute 'lines' of text with attributes from the global
-    document.attributes dictionary and from 'dictionary' ('dictionary'
-    entries take precedence). Return a tuple of the substituted lines.  'lines'
-    containing undefined attributes are deleted. If 'lines' is a string then
-    return a string.
-
-    - Attribute references are substituted in the following order: simple,
-      conditional, system.
-    - Attribute references inside 'dictionary' entry values are substituted.
-    """
-
-    def end_brace(text,start):
-        """Return index following end brace that matches brace at start in
-        text."""
-        assert text[start] == '{'
-        n = 0
-        result = start
-        for c in text[start:]:
-            # Skip braces that are followed by a backslash.
-            if result == len(text)-1 or text[result+1] != '\\':
-                if c == '{': n = n + 1
-                elif c == '}': n = n - 1
-            result = result + 1
-            if n == 0: break
-        return result
-
-    if type(lines) == str:
-        string_result = True
-        lines = [lines]
-    else:
-        string_result = False
-    if dictionary is None:
-        attrs = document.attributes
-    else:
-        # Remove numbered document attributes so they don't clash with
-        # attribute list positional attributes.
-        attrs = {}
-        for k,v in document.attributes.items():
-            if not re.match(r'^\d+$', k):
-                attrs[k] = v
-        # Substitute attribute references inside dictionary values.
-        for k,v in dictionary.items():
-            if v is None:
-                del dictionary[k]
-            else:
-                v = subs_attrs(str(v))
-                if v is None:
-                    del dictionary[k]
-                else:
-                    dictionary[k] = v
-        attrs.update(dictionary)
-    # Substitute all attributes in all lines.
-    result = []
-    for line in lines:
-        # Make it easier for regular expressions.
-        line = line.replace('\\{','{\\')
-        line = line.replace('\\}','}\\')
-        # Expand simple attributes ({name}).
-        # Nested attributes not allowed.
-        reo = re.compile(r'(?su)\{(?P<name>[^\\\W][-\w]*?)\}(?!\\)')
-        pos = 0
-        while True:
-            mo = reo.search(line,pos)
-            if not mo: break
-            s =  attrs.get(mo.group('name'))
-            if s is None:
-                pos = mo.end()
-            else:
-                s = str(s)
-                line = line[:mo.start()] + s + line[mo.end():]
-                pos = mo.start() + len(s)
-        # Expand conditional attributes.
-        # Single name -- higher precedence.
-        reo1 = re.compile(r'(?su)\{(?P<name>[^\\\W][-\w]*?)' \
-                          r'(?P<op>\=|\?|!|#|%|@|\$)' \
-                          r'(?P<value>.*?)\}(?!\\)')
-        # Multiple names (n1,n2,... or n1+n2+...) -- lower precedence.
-        reo2 = re.compile(r'(?su)\{(?P<name>[^\\\W][-\w'+OR+AND+r']*?)' \
-                          r'(?P<op>\=|\?|!|#|%|@|\$)' \
-                          r'(?P<value>.*?)\}(?!\\)')
-        for reo in [reo1,reo2]:
-            pos = 0
-            while True:
-                mo = reo.search(line,pos)
-                if not mo: break
-                attr = mo.group()
-                name =  mo.group('name')
-                if reo == reo2:
-                    if OR in name:
-                        sep = OR
-                    else:
-                        sep = AND
-                    names = [s.strip() for s in name.split(sep) if s.strip() ]
-                    for n in names:
-                        if not re.match(r'^[^\\\W][-\w]*$',n):
-                            message.error('illegal attribute syntax: %s' % attr)
-                    if sep == OR:
-                        # Process OR name expression: n1,n2,...
-                        for n in names:
-                            if attrs.get(n) is not None:
-                                lval = ''
-                                break
-                        else:
-                            lval = None
-                    else:
-                        # Process AND name expression: n1+n2+...
-                        for n in names:
-                            if attrs.get(n) is None:
-                                lval = None
-                                break
-                        else:
-                            lval = ''
-                else:
-                    lval =  attrs.get(name)
-                op = mo.group('op')
-                # mo.end() not good enough because '{x={y}}' matches '{x={y}'.
-                end = end_brace(line,mo.start())
-                rval = line[mo.start('value'):end-1]
-                UNDEFINED = '{zzzzz}'
-                if lval is None:
-                    if op == '=': s = rval
-                    elif op == '?': s = ''
-                    elif op == '!': s = rval
-                    elif op == '#': s = UNDEFINED   # So the line is dropped.
-                    elif op == '%': s = rval
-                    elif op in ('@','$'):
-                        s = UNDEFINED               # So the line is dropped.
-                    else:
-                        assert False, 'illegal attribute: %s' % attr
-                else:
-                    if op == '=': s = lval
-                    elif op == '?': s = rval
-                    elif op == '!': s = ''
-                    elif op == '#': s = rval
-                    elif op == '%': s = UNDEFINED   # So the line is dropped.
-                    elif op in ('@','$'):
-                        v = re.split(r'(?<!\\):',rval)
-                        if len(v) not in (2,3):
-                            message.error('illegal attribute syntax: %s' % attr)
-                            s = ''
-                        elif not is_re('^'+v[0]+'$'):
-                            message.error('illegal attribute regexp: %s' % attr)
-                            s = ''
-                        else:
-                            v = [s.replace('\\:',':') for s in v]
-                            re_mo = re.match('^'+v[0]+'$',lval)
-                            if op == '@':
-                                if re_mo:
-                                    s = v[1]         # {<name>@<re>:<v1>[:<v2>]}
-                                else:
-                                    if len(v) == 3:   # {<name>@<re>:<v1>:<v2>}
-                                        s = v[2]
-                                    else:             # {<name>@<re>:<v1>}
-                                        s = ''
-                            else:
-                                if re_mo:
-                                    if len(v) == 2:   # {<name>$<re>:<v1>}
-                                        s = v[1]
-                                    elif v[1] == '':  # {<name>$<re>::<v2>}
-                                        s = UNDEFINED # So the line is dropped.
-                                    else:             # {<name>$<re>:<v1>:<v2>}
-                                        s = v[1]
-                                else:
-                                    if len(v) == 2:   # {<name>$<re>:<v1>}
-                                        s = UNDEFINED # So the line is dropped.
-                                    else:             # {<name>$<re>:<v1>:<v2>}
-                                        s = v[2]
-                    else:
-                        assert False, 'illegal attribute: %s' % attr
-                s = str(s)
-                line = line[:mo.start()] + s + line[end:]
-                pos = mo.start() + len(s)
-        # Drop line if it contains  unsubstituted {name} references.
-        skipped = re.search(r'(?su)\{[^\\\W][-\w]*?\}(?!\\)', line)
-        if skipped:
-            trace('dropped line', line)
-            continue;
-        # Expand system attributes (eval has precedence).
-        reos = [
-            re.compile(r'(?su)\{(?P<action>eval):(?P<expr>.*?)\}(?!\\)'),
-            re.compile(r'(?su)\{(?P<action>[^\\\W][-\w]*?):(?P<expr>.*?)\}(?!\\)'),
-        ]
-        skipped = False
-        for reo in reos:
-            pos = 0
-            while True:
-                mo = reo.search(line,pos)
-                if not mo: break
-                expr = mo.group('expr')
-                action = mo.group('action')
-                expr = expr.replace('{\\','{')
-                expr = expr.replace('}\\','}')
-                s = system(action, expr, attrs=dictionary)
-                if dictionary is not None and action in ('counter','counter2','set','set2'):
-                    # These actions create and update attributes.
-                    attrs.update(dictionary)
-                if s is None:
-                    # Drop line if the action returns None.
-                    skipped = True
-                    break
-                line = line[:mo.start()] + s + line[mo.end():]
-                pos = mo.start() + len(s)
-            if skipped:
-                break
-        if not skipped:
-            # Remove backslash from escaped entries.
-            line = line.replace('{\\','{')
-            line = line.replace('}\\','}')
-            result.append(line)
-    if string_result:
-        if result:
-            return '\n'.join(result)
-        else:
-            return None
-    else:
-        return tuple(result)
-
-def char_encoding():
-    encoding = document.attributes.get('encoding')
-    if encoding:
-        try:
-            codecs.lookup(encoding)
-        except LookupError,e:
-            raise EAsciiDoc,str(e)
-    return encoding
-
-def char_len(s):
-    return len(char_decode(s))
-
-east_asian_widths = {'W': 2,   # Wide
-                     'F': 2,   # Full-width (wide)
-                     'Na': 1,  # Narrow
-                     'H': 1,   # Half-width (narrow)
-                     'N': 1,   # Neutral (not East Asian, treated as narrow)
-                     'A': 1}   # Ambiguous (s/b wide in East Asian context,
-                               # narrow otherwise, but that doesn't work)
-"""Mapping of result codes from `unicodedata.east_asian_width()` to character
-column widths."""
-
-def column_width(s):
-    text = char_decode(s)
-    if isinstance(text, unicode):
-        width = 0
-        for c in text:
-            width += east_asian_widths[unicodedata.east_asian_width(c)]
-        return width
-    else:
-        return len(text)
-
-def char_decode(s):
-    if char_encoding():
-        try:
-            return s.decode(char_encoding())
-        except Exception:
-            raise EAsciiDoc, \
-                "'%s' codec can't decode \"%s\"" % (char_encoding(), s)
-    else:
-        return s
-
-def char_encode(s):
-    if char_encoding():
-        return s.encode(char_encoding())
-    else:
-        return s
-
-def time_str(t):
-    """Convert seconds since the Epoch to formatted local time string."""
-    t = time.localtime(t)
-    s = time.strftime('%H:%M:%S',t)
-    if time.daylight and t.tm_isdst == 1:
-        result = s + ' ' + time.tzname[1]
-    else:
-        result = s + ' ' + time.tzname[0]
-    # Attempt to convert the localtime to the output encoding.
-    try:
-        result = char_encode(result.decode(locale.getdefaultlocale()[1]))
-    except Exception:
-        pass
-    return result
-
-def date_str(t):
-    """Convert seconds since the Epoch to formatted local date string."""
-    t = time.localtime(t)
-    return time.strftime('%Y-%m-%d',t)
-
-
-class Lex:
-    """Lexical analysis routines. Static methods and attributes only."""
-    prev_element = None
-    prev_cursor = None
-    def __init__(self):
-        raise AssertionError,'no class instances allowed'
-    @staticmethod
-    def next():
-        """Returns class of next element on the input (None if EOF).  The
-        reader is assumed to be at the first line following a previous element,
-        end of file or line one.  Exits with the reader pointing to the first
-        line of the next element or EOF (leading blank lines are skipped)."""
-        reader.skip_blank_lines()
-        if reader.eof(): return None
-        # Optimization: If we've already checked for an element at this
-        # position return the element.
-        if Lex.prev_element and Lex.prev_cursor == reader.cursor:
-            return Lex.prev_element
-        if AttributeEntry.isnext():
-            result = AttributeEntry
-        elif AttributeList.isnext():
-            result = AttributeList
-        elif BlockTitle.isnext() and not tables_OLD.isnext():
-            result = BlockTitle
-        elif Title.isnext():
-            if AttributeList.style() == 'float':
-                result = FloatingTitle
-            else:
-                result = Title
-        elif macros.isnext():
-            result = macros.current
-        elif lists.isnext():
-            result = lists.current
-        elif blocks.isnext():
-            result = blocks.current
-        elif tables_OLD.isnext():
-            result = tables_OLD.current
-        elif tables.isnext():
-            result = tables.current
-        else:
-            if not paragraphs.isnext():
-                raise EAsciiDoc,'paragraph expected'
-            result = paragraphs.current
-        # Optimization: Cache answer.
-        Lex.prev_cursor = reader.cursor
-        Lex.prev_element = result
-        return result
-
-    @staticmethod
-    def canonical_subs(options):
-        """Translate composite subs values."""
-        if len(options) == 1:
-            if options[0] == 'none':
-                options = ()
-            elif options[0] == 'normal':
-                options = config.subsnormal
-            elif options[0] == 'verbatim':
-                options = config.subsverbatim
-        return options
-
-    @staticmethod
-    def subs_1(s,options):
-        """Perform substitution specified in 'options' (in 'options' order)."""
-        if not s:
-            return s
-        if document.attributes.get('plaintext') is not None:
-            options = ('specialcharacters',)
-        result = s
-        options = Lex.canonical_subs(options)
-        for o in options:
-            if o == 'specialcharacters':
-                result = config.subs_specialchars(result)
-            elif o == 'attributes':
-                result = subs_attrs(result)
-            elif o == 'quotes':
-                result = subs_quotes(result)
-            elif o == 'specialwords':
-                result = config.subs_specialwords(result)
-            elif o in ('replacements','replacements2','replacements3'):
-                result = config.subs_replacements(result,o)
-            elif o == 'macros':
-                result = macros.subs(result)
-            elif o == 'callouts':
-                result = macros.subs(result,callouts=True)
-            else:
-                raise EAsciiDoc,'illegal substitution option: %s' % o
-            trace(o, s, result)
-            if not result:
-                break
-        return result
-
-    @staticmethod
-    def subs(lines,options):
-        """Perform inline processing specified by 'options' (in 'options'
-        order) on sequence of 'lines'."""
-        if not lines or not options:
-            return lines
-        options = Lex.canonical_subs(options)
-        # Join lines so quoting can span multiple lines.
-        para = '\n'.join(lines)
-        if 'macros' in options:
-            para = macros.extract_passthroughs(para)
-        for o in options:
-            if o == 'attributes':
-                # If we don't substitute attributes line-by-line then a single
-                # undefined attribute will drop the entire paragraph.
-                lines = subs_attrs(para.split('\n'))
-                para = '\n'.join(lines)
-            else:
-                para = Lex.subs_1(para,(o,))
-        if 'macros' in options:
-            para = macros.restore_passthroughs(para)
-        return para.splitlines()
-
-    @staticmethod
-    def set_margin(lines, margin=0):
-        """Utility routine that sets the left margin to 'margin' space in a
-        block of non-blank lines."""
-        # Calculate width of block margin.
-        lines = list(lines)
-        width = len(lines[0])
-        for s in lines:
-            i = re.search(r'\S',s).start()
-            if i < width: width = i
-        # Strip margin width from all lines.
-        for i in range(len(lines)):
-            lines[i] = ' '*margin + lines[i][width:]
-        return lines
-
-#---------------------------------------------------------------------------
-# Document element classes parse AsciiDoc reader input and write DocBook writer
-# output.
-#---------------------------------------------------------------------------
-class Document(object):
-
-    # doctype property.
-    def getdoctype(self):
-        return self.attributes.get('doctype')
-    def setdoctype(self,doctype):
-        self.attributes['doctype'] = doctype
-    doctype = property(getdoctype,setdoctype)
-
-    # backend property.
-    def getbackend(self):
-        return self.attributes.get('backend')
-    def setbackend(self,backend):
-        if backend:
-            backend = self.attributes.get('backend-alias-' + backend, backend)
-        self.attributes['backend'] = backend
-    backend = property(getbackend,setbackend)
-
-    def __init__(self):
-        self.infile = None      # Source file name.
-        self.outfile = None     # Output file name.
-        self.attributes = InsensitiveDict()
-        self.level = 0          # 0 => front matter. 1,2,3 => sect1,2,3.
-        self.has_errors = False # Set true if processing errors were flagged.
-        self.has_warnings = False # Set true if warnings were flagged.
-        self.safe = False       # Default safe mode.
-    def update_attributes(self,attrs=None):
-        """
-        Set implicit attributes and attributes in 'attrs'.
-        """
-        t = time.time()
-        self.attributes['localtime'] = time_str(t)
-        self.attributes['localdate'] = date_str(t)
-        self.attributes['asciidoc-version'] = VERSION
-        self.attributes['asciidoc-file'] = APP_FILE
-        self.attributes['asciidoc-dir'] = APP_DIR
-        if localapp():
-            self.attributes['asciidoc-confdir'] = APP_DIR
-        else:
-            self.attributes['asciidoc-confdir'] = CONF_DIR
-        self.attributes['user-dir'] = USER_DIR
-        if config.verbose:
-            self.attributes['verbose'] = ''
-        # Update with configuration file attributes.
-        if attrs:
-            self.attributes.update(attrs)
-        # Update with command-line attributes.
-        self.attributes.update(config.cmd_attrs)
-        # Extract miscellaneous configuration section entries from attributes.
-        if attrs:
-            config.load_miscellaneous(attrs)
-        config.load_miscellaneous(config.cmd_attrs)
-        self.attributes['newline'] = config.newline
-        # File name related attributes can't be overridden.
-        if self.infile is not None:
-            if self.infile and os.path.exists(self.infile):
-                t = os.path.getmtime(self.infile)
-            elif self.infile == '<stdin>':
-                t = time.time()
-            else:
-                t = None
-            if t:
-                self.attributes['doctime'] = time_str(t)
-                self.attributes['docdate'] = date_str(t)
-            if self.infile != '<stdin>':
-                self.attributes['infile'] = self.infile
-                self.attributes['indir'] = os.path.dirname(self.infile)
-                self.attributes['docfile'] = self.infile
-                self.attributes['docdir'] = os.path.dirname(self.infile)
-                self.attributes['docname'] = os.path.splitext(
-                        os.path.basename(self.infile))[0]
-        if self.outfile:
-            if self.outfile != '<stdout>':
-                self.attributes['outfile'] = self.outfile
-                self.attributes['outdir'] = os.path.dirname(self.outfile)
-                if self.infile == '<stdin>':
-                    self.attributes['docname'] = os.path.splitext(
-                            os.path.basename(self.outfile))[0]
-                ext = os.path.splitext(self.outfile)[1][1:]
-            elif config.outfilesuffix:
-                ext = config.outfilesuffix[1:]
-            else:
-                ext = ''
-            if ext:
-                self.attributes['filetype'] = ext
-                self.attributes['filetype-'+ext] = ''
-    def load_lang(self):
-        """
-        Load language configuration file.
-        """
-        lang = self.attributes.get('lang')
-        if lang is None:
-            filename = 'lang-en.conf'   # Default language file.
-        else:
-            filename = 'lang-' + lang + '.conf'
-        if config.load_from_dirs(filename):
-            self.attributes['lang'] = lang  # Reinstate new lang attribute.
-        else:
-            if lang is None:
-                # The default language file must exist.
-                message.error('missing conf file: %s' % filename, halt=True)
-            else:
-                message.warning('missing language conf file: %s' % filename)
-    def set_deprecated_attribute(self,old,new):
-        """
-        Ensures the 'old' name of an attribute that was renamed to 'new' is
-        still honored.
-        """
-        if self.attributes.get(new) is None:
-            if self.attributes.get(old) is not None:
-                self.attributes[new] = self.attributes[old]
-        else:
-            self.attributes[old] = self.attributes[new]
-    def consume_attributes_and_comments(self,comments_only=False,noblanks=False):
-        """
-        Returns True if one or more attributes or comments were consumed.
-        If 'noblanks' is True then consumation halts if a blank line is
-        encountered.
-        """
-        result = False
-        finished = False
-        while not finished:
-            finished = True
-            if noblanks and not reader.read_next(): return result
-            if blocks.isnext() and 'skip' in blocks.current.options:
-                result = True
-                finished = False
-                blocks.current.translate()
-            if noblanks and not reader.read_next(): return result
-            if macros.isnext() and macros.current.name == 'comment':
-                result = True
-                finished = False
-                macros.current.translate()
-            if not comments_only:
-                if AttributeEntry.isnext():
-                    result = True
-                    finished = False
-                    AttributeEntry.translate()
-                if AttributeList.isnext():
-                    result = True
-                    finished = False
-                    AttributeList.translate()
-        return result
-    def parse_header(self,doctype,backend):
-        """
-        Parses header, sets corresponding document attributes and finalizes
-        document doctype and backend properties.
-        Returns False if the document does not have a header.
-        'doctype' and 'backend' are the doctype and backend option values
-        passed on the command-line, None if no command-line option was not
-        specified.
-        """
-        assert self.level == 0
-        # Skip comments and attribute entries that preceed the header.
-        self.consume_attributes_and_comments()
-        if doctype is not None:
-            # Command-line overrides header.
-            self.doctype = doctype
-        elif self.doctype is None:
-            # Was not set on command-line or in document header.
-            self.doctype = DEFAULT_DOCTYPE
-        # Process document header.
-        has_header = (Title.isnext() and Title.level == 0
-                      and AttributeList.style() != 'float')
-        if self.doctype == 'manpage' and not has_header:
-            message.error('manpage document title is mandatory',halt=True)
-        if has_header:
-            Header.parse()
-        # Command-line entries override header derived entries.
-        self.attributes.update(config.cmd_attrs)
-        # DEPRECATED: revision renamed to revnumber.
-        self.set_deprecated_attribute('revision','revnumber')
-        # DEPRECATED: date renamed to revdate.
-        self.set_deprecated_attribute('date','revdate')
-        if doctype is not None:
-            # Command-line overrides header.
-            self.doctype = doctype
-        if backend is not None:
-            # Command-line overrides header.
-            self.backend = backend
-        elif self.backend is None:
-            # Was not set on command-line or in document header.
-            self.backend = DEFAULT_BACKEND
-        else:
-            # Has been set in document header.
-            self.backend = self.backend # Translate alias in header.
-        assert self.doctype in ('article','manpage','book'), 'illegal document type'
-        return has_header
-    def translate(self,has_header):
-        if self.doctype == 'manpage':
-            # Translate mandatory NAME section.
-            if Lex.next() is not Title:
-                message.error('name section expected')
-            else:
-                Title.translate()
-                if Title.level != 1:
-                    message.error('name section title must be at level 1')
-                if not isinstance(Lex.next(),Paragraph):
-                    message.error('malformed name section body')
-                lines = reader.read_until(r'^$')
-                s = ' '.join(lines)
-                mo = re.match(r'^(?P<manname>.*?)\s+-\s+(?P<manpurpose>.*)$',s)
-                if not mo:
-                    message.error('malformed name section body')
-                self.attributes['manname'] = mo.group('manname').strip()
-                self.attributes['manpurpose'] = mo.group('manpurpose').strip()
-                names = [s.strip() for s in self.attributes['manname'].split(',')]
-                if len(names) > 9:
-                    message.warning('too many manpage names')
-                for i,name in enumerate(names):
-                    self.attributes['manname%d' % (i+1)] = name
-        if has_header:
-            # Do postponed substitutions (backend confs have been loaded).
-            self.attributes['doctitle'] = Title.dosubs(self.attributes['doctitle'])
-            if config.header_footer:
-                hdr = config.subs_section('header',{})
-                writer.write(hdr,trace='header')
-            if 'title' in self.attributes:
-                del self.attributes['title']
-            self.consume_attributes_and_comments()
-            if self.doctype in ('article','book'):
-                # Translate 'preamble' (untitled elements between header
-                # and first section title).
-                if Lex.next() is not Title:
-                    stag,etag = config.section2tags('preamble')
-                    writer.write(stag,trace='preamble open')
-                    Section.translate_body()
-                    writer.write(etag,trace='preamble close')
-            elif self.doctype == 'manpage' and 'name' in config.sections:
-                writer.write(config.subs_section('name',{}), trace='name')
-        else:
-            self.process_author_names()
-            if config.header_footer:
-                hdr = config.subs_section('header',{})
-                writer.write(hdr,trace='header')
-            if Lex.next() is not Title:
-                Section.translate_body()
-        # Process remaining sections.
-        while not reader.eof():
-            if Lex.next() is not Title:
-                raise EAsciiDoc,'section title expected'
-            Section.translate()
-        Section.setlevel(0) # Write remaining unwritten section close tags.
-        # Substitute document parameters and write document footer.
-        if config.header_footer:
-            ftr = config.subs_section('footer',{})
-            writer.write(ftr,trace='footer')
-    def parse_author(self,s):
-        """ Return False if the author is malformed."""
-        attrs = self.attributes # Alias for readability.
-        s = s.strip()
-        mo = re.match(r'^(?P<name1>[^<>\s]+)'
-                '(\s+(?P<name2>[^<>\s]+))?'
-                '(\s+(?P<name3>[^<>\s]+))?'
-                '(\s+<(?P<email>\S+)>)?$',s)
-        if not mo:
-            # Names that don't match the formal specification.
-            if s:
-                attrs['firstname'] = s
-            return
-        firstname = mo.group('name1')
-        if mo.group('name3'):
-            middlename = mo.group('name2')
-            lastname = mo.group('name3')
-        else:
-            middlename = None
-            lastname = mo.group('name2')
-        firstname = firstname.replace('_',' ')
-        if middlename:
-            middlename = middlename.replace('_',' ')
-        if lastname:
-            lastname = lastname.replace('_',' ')
-        email = mo.group('email')
-        if firstname:
-            attrs['firstname'] = firstname
-        if middlename:
-            attrs['middlename'] = middlename
-        if lastname:
-            attrs['lastname'] = lastname
-        if email:
-            attrs['email'] = email
-        return
-    def process_author_names(self):
-        """ Calculate any missing author related attributes."""
-        attrs = self.attributes # Alias for readability.
-        firstname = attrs.get('firstname','')
-        middlename = attrs.get('middlename','')
-        lastname = attrs.get('lastname','')
-        author = attrs.get('author')
-        initials = attrs.get('authorinitials')
-        if author and not (firstname or middlename or lastname):
-            self.parse_author(author)
-            attrs['author'] = author.replace('_',' ')
-            self.process_author_names()
-            return
-        if not author:
-            author = '%s %s %s' % (firstname, middlename, lastname)
-            author = author.strip()
-            author = re.sub(r'\s+',' ', author)
-        if not initials:
-            initials = (char_decode(firstname)[:1] +
-                       char_decode(middlename)[:1] + char_decode(lastname)[:1])
-            initials = char_encode(initials).upper()
-        names = [firstname,middlename,lastname,author,initials]
-        for i,v in enumerate(names):
-            v = config.subs_specialchars(v)
-            v = subs_attrs(v)
-            names[i] = v
-        firstname,middlename,lastname,author,initials = names
-        if firstname:
-            attrs['firstname'] = firstname
-        if middlename:
-            attrs['middlename'] = middlename
-        if lastname:
-            attrs['lastname'] = lastname
-        if author:
-            attrs['author'] = author
-        if initials:
-            attrs['authorinitials'] = initials
-        if author:
-            attrs['authored'] = ''
-
-
-class Header:
-    """Static methods and attributes only."""
-    REV_LINE_RE = r'^(\D*(?P<revnumber>.*?),)?(?P<revdate>.*?)(:\s*(?P<revremark>.*))?$'
-    RCS_ID_RE = r'^\$Id: \S+ (?P<revnumber>\S+) (?P<revdate>\S+) \S+ (?P<author>\S+) (\S+ )?\$$'
-    def __init__(self):
-        raise AssertionError,'no class instances allowed'
-    @staticmethod
-    def parse():
-        assert Lex.next() is Title and Title.level == 0
-        attrs = document.attributes # Alias for readability.
-        # Postpone title subs until backend conf files have been loaded.
-        Title.translate(skipsubs=True)
-        attrs['doctitle'] = Title.attributes['title']
-        document.consume_attributes_and_comments(noblanks=True)
-        s = reader.read_next()
-        mo = None
-        if s:
-            # Process first header line after the title that is not a comment
-            # or an attribute entry.
-            s = reader.read()
-            mo = re.match(Header.RCS_ID_RE,s)
-            if not mo:
-                document.parse_author(s)
-                document.consume_attributes_and_comments(noblanks=True)
-                if reader.read_next():
-                    # Process second header line after the title that is not a
-                    # comment or an attribute entry.
-                    s = reader.read()
-                    s = subs_attrs(s)
-                    if s:
-                        mo = re.match(Header.RCS_ID_RE,s)
-                        if not mo:
-                            mo = re.match(Header.REV_LINE_RE,s)
-            document.consume_attributes_and_comments(noblanks=True)
-        s = attrs.get('revnumber')
-        if s:
-            mo = re.match(Header.RCS_ID_RE,s)
-        if mo:
-            revnumber = mo.group('revnumber')
-            if revnumber:
-                attrs['revnumber'] = revnumber.strip()
-            author = mo.groupdict().get('author')
-            if author and 'firstname' not in attrs:
-                document.parse_author(author)
-            revremark = mo.groupdict().get('revremark')
-            if revremark is not None:
-                revremark = [revremark]
-                # Revision remarks can continue on following lines.
-                while reader.read_next():
-                    if document.consume_attributes_and_comments(noblanks=True):
-                        break
-                    revremark.append(reader.read())
-                revremark = Lex.subs(revremark,['normal'])
-                revremark = '\n'.join(revremark).strip()
-                attrs['revremark'] = revremark
-            revdate = mo.group('revdate')
-            if revdate:
-                attrs['revdate'] = revdate.strip()
-            elif revnumber or revremark:
-                # Set revision date to ensure valid DocBook revision.
-                attrs['revdate'] = attrs['docdate']
-        document.process_author_names()
-        if document.doctype == 'manpage':
-            # manpage title formatted like mantitle(manvolnum).
-            mo = re.match(r'^(?P<mantitle>.*)\((?P<manvolnum>.*)\)$',
-                          attrs['doctitle'])
-            if not mo:
-                message.error('malformed manpage title')
-            else:
-                mantitle = mo.group('mantitle').strip()
-                mantitle = subs_attrs(mantitle)
-                if mantitle is None:
-                    message.error('undefined attribute in manpage title')
-                # mantitle is lowered only if in ALL CAPS
-                if mantitle == mantitle.upper():
-                    mantitle = mantitle.lower()
-                attrs['mantitle'] = mantitle;
-                attrs['manvolnum'] = mo.group('manvolnum').strip()
-
-class AttributeEntry:
-    """Static methods and attributes only."""
-    pattern = None
-    subs = None
-    name = None
-    name2 = None
-    value = None
-    attributes = {}     # Accumulates all the parsed attribute entries.
-    def __init__(self):
-        raise AssertionError,'no class instances allowed'
-    @staticmethod
-    def isnext():
-        result = False  # Assume not next.
-        if not AttributeEntry.pattern:
-            pat = document.attributes.get('attributeentry-pattern')
-            if not pat:
-                message.error("[attributes] missing 'attributeentry-pattern' entry")
-            AttributeEntry.pattern = pat
-        line = reader.read_next()
-        if line:
-            # Attribute entry formatted like :<name>[.<name2>]:[ <value>]
-            mo = re.match(AttributeEntry.pattern,line)
-            if mo:
-                AttributeEntry.name = mo.group('attrname')
-                AttributeEntry.name2 = mo.group('attrname2')
-                AttributeEntry.value = mo.group('attrvalue') or ''
-                AttributeEntry.value = AttributeEntry.value.strip()
-                result = True
-        return result
-    @staticmethod
-    def translate():
-        assert Lex.next() is AttributeEntry
-        attr = AttributeEntry    # Alias for brevity.
-        reader.read()            # Discard attribute entry from reader.
-        while attr.value.endswith(' +'):
-            if not reader.read_next(): break
-            attr.value = attr.value[:-1] + reader.read().strip()
-        if attr.name2 is not None:
-            # Configuration file attribute.
-            if attr.name2 != '':
-                # Section entry attribute.
-                section = {}
-                # Some sections can have name! syntax.
-                if attr.name in ('attributes','miscellaneous') and attr.name2[-1] == '!':
-                    section[attr.name] = [attr.name2]
-                else:
-                   section[attr.name] = ['%s=%s' % (attr.name2,attr.value)]
-                config.load_sections(section)
-                config.load_miscellaneous(config.conf_attrs)
-            else:
-                # Markup template section attribute.
-                config.sections[attr.name] = [attr.value]
-        else:
-            # Normal attribute.
-            if attr.name[-1] == '!':
-                # Names like name! undefine the attribute.
-                attr.name = attr.name[:-1]
-                attr.value = None
-            # Strip white space and illegal name chars.
-            attr.name = re.sub(r'(?u)[^\w\-_]', '', attr.name).lower()
-            # Don't override most command-line attributes.
-            if attr.name in config.cmd_attrs \
-                    and attr.name not in ('trace','numbered'):
-                return
-            # Update document attributes with attribute value.
-            if attr.value is not None:
-                mo = re.match(r'^pass:(?P<attrs>.*)\[(?P<value>.*)\]$', attr.value)
-                if mo:
-                    # Inline passthrough syntax.
-                    attr.subs = mo.group('attrs')
-                    attr.value = mo.group('value')  # Passthrough.
-                else:
-                    # Default substitution.
-                    # DEPRECATED: attributeentry-subs
-                    attr.subs = document.attributes.get('attributeentry-subs',
-                                'specialcharacters,attributes')
-                attr.subs = parse_options(attr.subs, SUBS_OPTIONS,
-                            'illegal substitution option')
-                attr.value = Lex.subs((attr.value,), attr.subs)
-                attr.value = writer.newline.join(attr.value)
-                document.attributes[attr.name] = attr.value
-            elif attr.name in document.attributes:
-                del document.attributes[attr.name]
-            attr.attributes[attr.name] = attr.value
-
-class AttributeList:
-    """Static methods and attributes only."""
-    pattern = None
-    match = None
-    attrs = {}
-    def __init__(self):
-        raise AssertionError,'no class instances allowed'
-    @staticmethod
-    def initialize():
-        if not 'attributelist-pattern' in document.attributes:
-            message.error("[attributes] missing 'attributelist-pattern' entry")
-        AttributeList.pattern = document.attributes['attributelist-pattern']
-    @staticmethod
-    def isnext():
-        result = False  # Assume not next.
-        line = reader.read_next()
-        if line:
-            mo = re.match(AttributeList.pattern, line)
-            if mo:
-                AttributeList.match = mo
-                result = True
-        return result
-    @staticmethod
-    def translate():
-        assert Lex.next() is AttributeList
-        reader.read()   # Discard attribute list from reader.
-        attrs = {}
-        d = AttributeList.match.groupdict()
-        for k,v in d.items():
-            if v is not None:
-                if k == 'attrlist':
-                    v = subs_attrs(v)
-                    if v:
-                        parse_attributes(v, attrs)
-                else:
-                    AttributeList.attrs[k] = v
-        AttributeList.subs(attrs)
-        AttributeList.attrs.update(attrs)
-    @staticmethod
-    def subs(attrs):
-        '''Substitute single quoted attribute values normally.'''
-        reo = re.compile(r"^'.*'$")
-        for k,v in attrs.items():
-            if reo.match(str(v)):
-                attrs[k] = Lex.subs_1(v[1:-1], config.subsnormal)
-    @staticmethod
-    def style():
-        return AttributeList.attrs.get('style') or AttributeList.attrs.get('1')
-    @staticmethod
-    def consume(d={}):
-        """Add attribute list to the dictionary 'd' and reset the list."""
-        if AttributeList.attrs:
-            d.update(AttributeList.attrs)
-            AttributeList.attrs = {}
-            # Generate option attributes.
-            if 'options' in d:
-                options = parse_options(d['options'], (), 'illegal option name')
-                for option in options:
-                    d[option+'-option'] = ''
-
-class BlockTitle:
-    """Static methods and attributes only."""
-    title = None
-    pattern = None
-    def __init__(self):
-        raise AssertionError,'no class instances allowed'
-    @staticmethod
-    def isnext():
-        result = False  # Assume not next.
-        line = reader.read_next()
-        if line:
-            mo = re.match(BlockTitle.pattern,line)
-            if mo:
-                BlockTitle.title = mo.group('title')
-                result = True
-        return result
-    @staticmethod
-    def translate():
-        assert Lex.next() is BlockTitle
-        reader.read()   # Discard title from reader.
-        # Perform title substitutions.
-        if not Title.subs:
-            Title.subs = config.subsnormal
-        s = Lex.subs((BlockTitle.title,), Title.subs)
-        s = writer.newline.join(s)
-        if not s:
-            message.warning('blank block title')
-        BlockTitle.title = s
-    @staticmethod
-    def consume(d={}):
-        """If there is a title add it to dictionary 'd' then reset title."""
-        if BlockTitle.title:
-            d['title'] = BlockTitle.title
-            BlockTitle.title = None
-
-class Title:
-    """Processes Header and Section titles. Static methods and attributes
-    only."""
-    # Class variables
-    underlines = ('==','--','~~','^^','++') # Levels 0,1,2,3,4.
-    subs = ()
-    pattern = None
-    level = 0
-    attributes = {}
-    sectname = None
-    section_numbers = [0]*len(underlines)
-    dump_dict = {}
-    linecount = None    # Number of lines in title (1 or 2).
-    def __init__(self):
-        raise AssertionError,'no class instances allowed'
-    @staticmethod
-    def translate(skipsubs=False):
-        """Parse the Title.attributes and Title.level from the reader. The
-        real work has already been done by parse()."""
-        assert Lex.next() in (Title,FloatingTitle)
-        # Discard title from reader.
-        for i in range(Title.linecount):
-            reader.read()
-        Title.setsectname()
-        if not skipsubs:
-            Title.attributes['title'] = Title.dosubs(Title.attributes['title'])
-    @staticmethod
-    def dosubs(title):
-        """
-        Perform title substitutions.
-        """
-        if not Title.subs:
-            Title.subs = config.subsnormal
-        title = Lex.subs((title,), Title.subs)
-        title = writer.newline.join(title)
-        if not title:
-            message.warning('blank section title')
-        return title
-    @staticmethod
-    def isnext():
-        lines = reader.read_ahead(2)
-        return Title.parse(lines)
-    @staticmethod
-    def parse(lines):
-        """Parse title at start of lines tuple."""
-        if len(lines) == 0: return False
-        if len(lines[0]) == 0: return False # Title can't be blank.
-        # Check for single-line titles.
-        result = False
-        for level in range(len(Title.underlines)):
-            k = 'sect%s' % level
-            if k in Title.dump_dict:
-                mo = re.match(Title.dump_dict[k], lines[0])
-                if mo:
-                    Title.attributes = mo.groupdict()
-                    Title.level = level
-                    Title.linecount = 1
-                    result = True
-                    break
-        if not result:
-            # Check for double-line titles.
-            if not Title.pattern: return False  # Single-line titles only.
-            if len(lines) < 2: return False
-            title,ul = lines[:2]
-            title_len = column_width(title)
-            ul_len = char_len(ul)
-            if ul_len < 2: return False
-            # Fast elimination check.
-            if ul[:2] not in Title.underlines: return False
-            # Length of underline must be within +-3 of title.
-            if not ((ul_len-3 < title_len < ul_len+3)
-                    # Next test for backward compatibility.
-                    or (ul_len-3 < char_len(title) < ul_len+3)):
-                return False
-            # Check for valid repetition of underline character pairs.
-            s = ul[:2]*((ul_len+1)/2)
-            if ul != s[:ul_len]: return False
-            # Don't be fooled by back-to-back delimited blocks, require at
-            # least one alphanumeric character in title.
-            if not re.search(r'(?u)\w',title): return False
-            mo = re.match(Title.pattern, title)
-            if mo:
-                Title.attributes = mo.groupdict()
-                Title.level = list(Title.underlines).index(ul[:2])
-                Title.linecount = 2
-                result = True
-        # Check for expected pattern match groups.
-        if result:
-            if not 'title' in Title.attributes:
-                message.warning('[titles] entry has no <title> group')
-                Title.attributes['title'] = lines[0]
-            for k,v in Title.attributes.items():
-                if v is None: del Title.attributes[k]
-        try:
-            Title.level += int(document.attributes.get('leveloffset','0'))
-        except:
-            pass
-        Title.attributes['level'] = str(Title.level)
-        return result
-    @staticmethod
-    def load(entries):
-        """Load and validate [titles] section entries dictionary."""
-        if 'underlines' in entries:
-            errmsg = 'malformed [titles] underlines entry'
-            try:
-                underlines = parse_list(entries['underlines'])
-            except Exception:
-                raise EAsciiDoc,errmsg
-            if len(underlines) != len(Title.underlines):
-                raise EAsciiDoc,errmsg
-            for s in underlines:
-                if len(s) !=2:
-                    raise EAsciiDoc,errmsg
-            Title.underlines = tuple(underlines)
-            Title.dump_dict['underlines'] = entries['underlines']
-        if 'subs' in entries:
-            Title.subs = parse_options(entries['subs'], SUBS_OPTIONS,
-                'illegal [titles] subs entry')
-            Title.dump_dict['subs'] = entries['subs']
-        if 'sectiontitle' in entries:
-            pat = entries['sectiontitle']
-            if not pat or not is_re(pat):
-                raise EAsciiDoc,'malformed [titles] sectiontitle entry'
-            Title.pattern = pat
-            Title.dump_dict['sectiontitle'] = pat
-        if 'blocktitle' in entries:
-            pat = entries['blocktitle']
-            if not pat or not is_re(pat):
-                raise EAsciiDoc,'malformed [titles] blocktitle entry'
-            BlockTitle.pattern = pat
-            Title.dump_dict['blocktitle'] = pat
-        # Load single-line title patterns.
-        for k in ('sect0','sect1','sect2','sect3','sect4'):
-            if k in entries:
-                pat = entries[k]
-                if not pat or not is_re(pat):
-                    raise EAsciiDoc,'malformed [titles] %s entry' % k
-                Title.dump_dict[k] = pat
-        # TODO: Check we have either a Title.pattern or at least one
-        # single-line title pattern -- can this be done here or do we need
-        # check routine like the other block checkers?
-    @staticmethod
-    def dump():
-        dump_section('titles',Title.dump_dict)
-    @staticmethod
-    def setsectname():
-        """
-        Set Title section name:
-        If the first positional or 'template' attribute is set use it,
-        next search for section title in [specialsections],
-        if not found use default 'sect<level>' name.
-        """
-        sectname = AttributeList.attrs.get('1')
-        if sectname and sectname != 'float':
-            Title.sectname = sectname
-        elif 'template' in AttributeList.attrs:
-            Title.sectname = AttributeList.attrs['template']
-        else:
-            for pat,sect in config.specialsections.items():
-                mo = re.match(pat,Title.attributes['title'])
-                if mo:
-                    title = mo.groupdict().get('title')
-                    if title is not None:
-                        Title.attributes['title'] = title.strip()
-                    else:
-                        Title.attributes['title'] = mo.group().strip()
-                    Title.sectname = sect
-                    break
-            else:
-                Title.sectname = 'sect%d' % Title.level
-    @staticmethod
-    def getnumber(level):
-        """Return next section number at section 'level' formatted like
-        1.2.3.4."""
-        number = ''
-        for l in range(len(Title.section_numbers)):
-            n = Title.section_numbers[l]
-            if l == 0:
-                continue
-            elif l < level:
-                number = '%s%d.' % (number, n)
-            elif l == level:
-                number = '%s%d.' % (number, n + 1)
-                Title.section_numbers[l] = n + 1
-            elif l > level:
-                # Reset unprocessed section levels.
-                Title.section_numbers[l] = 0
-        return number
-
-
-class FloatingTitle(Title):
-    '''Floated titles are translated differently.'''
-    @staticmethod
-    def isnext():
-        return Title.isnext() and AttributeList.style() == 'float'
-    @staticmethod
-    def translate():
-        assert Lex.next() is FloatingTitle
-        Title.translate()
-        Section.set_id()
-        AttributeList.consume(Title.attributes)
-        template = 'floatingtitle'
-        if template in config.sections:
-            stag,etag = config.section2tags(template,Title.attributes)
-            writer.write(stag,trace='floating title')
-        else:
-            message.warning('missing template section: [%s]' % template)
-
-
-class Section:
-    """Static methods and attributes only."""
-    endtags = []  # Stack of currently open section (level,endtag) tuples.
-    ids = []      # List of already used ids.
-    def __init__(self):
-        raise AssertionError,'no class instances allowed'
-    @staticmethod
-    def savetag(level,etag):
-        """Save section end."""
-        Section.endtags.append((level,etag))
-    @staticmethod
-    def setlevel(level):
-        """Set document level and write open section close tags up to level."""
-        while Section.endtags and Section.endtags[-1][0] >= level:
-            writer.write(Section.endtags.pop()[1],trace='section close')
-        document.level = level
-    @staticmethod
-    def gen_id(title):
-        """
-        The normalized value of the id attribute is an NCName according to
-        the 'Namespaces in XML' Recommendation:
-        NCName          ::=     NCNameStartChar NCNameChar*
-        NCNameChar      ::=     NameChar - ':'
-        NCNameStartChar ::=     Letter | '_'
-        NameChar        ::=     Letter | Digit | '.' | '-' | '_' | ':'
-        """
-        # Replace non-alpha numeric characters in title with underscores and
-        # convert to lower case.
-        base_id = re.sub(r'(?u)\W+', '_', char_decode(title)).strip('_').lower()
-        if 'ascii-ids' in document.attributes:
-            # Replace non-ASCII characters with ASCII equivalents.
-            import unicodedata
-            base_id = unicodedata.normalize('NFKD', base_id).encode('ascii','ignore')
-        base_id = char_encode(base_id)
-        # Prefix the ID name with idprefix attribute or underscore if not
-        # defined. Prefix ensures the ID does not clash with existing IDs.
-        idprefix = document.attributes.get('idprefix','_')
-        base_id = idprefix + base_id
-        i = 1
-        while True:
-            if i == 1:
-                id = base_id
-            else:
-                id = '%s_%d' % (base_id, i)
-            if id not in Section.ids:
-                Section.ids.append(id)
-                return id
-            else:
-                id = base_id
-            i += 1
-    @staticmethod
-    def set_id():
-        if not document.attributes.get('sectids') is None \
-                and 'id' not in AttributeList.attrs:
-            # Generate ids for sections.
-            AttributeList.attrs['id'] = Section.gen_id(Title.attributes['title'])
-    @staticmethod
-    def translate():
-        assert Lex.next() is Title
-        prev_sectname = Title.sectname
-        Title.translate()
-        if Title.level == 0 and document.doctype != 'book':
-            message.error('only book doctypes can contain level 0 sections')
-        if Title.level > document.level \
-                and 'basebackend-docbook' in document.attributes \
-                and prev_sectname in ('colophon','abstract', \
-                    'dedication','glossary','bibliography'):
-            message.error('%s section cannot contain sub-sections' % prev_sectname)
-        if Title.level > document.level+1:
-            # Sub-sections of multi-part book level zero Preface and Appendices
-            # are meant to be out of sequence.
-            if document.doctype == 'book' \
-                    and document.level == 0 \
-                    and Title.level == 2 \
-                    and prev_sectname in ('preface','appendix'):
-                pass
-            else:
-                message.warning('section title out of sequence: '
-                    'expected level %d, got level %d'
-                    % (document.level+1, Title.level))
-        Section.set_id()
-        Section.setlevel(Title.level)
-        if 'numbered' in document.attributes:
-            Title.attributes['sectnum'] = Title.getnumber(document.level)
-        else:
-            Title.attributes['sectnum'] = ''
-        AttributeList.consume(Title.attributes)
-        stag,etag = config.section2tags(Title.sectname,Title.attributes)
-        Section.savetag(Title.level,etag)
-        writer.write(stag,trace='section open: level %d: %s' %
-                (Title.level, Title.attributes['title']))
-        Section.translate_body()
-    @staticmethod
-    def translate_body(terminator=Title):
-        isempty = True
-        next = Lex.next()
-        while next and next is not terminator:
-            if isinstance(terminator,DelimitedBlock) and next is Title:
-                message.error('section title not permitted in delimited block')
-            next.translate()
-            next = Lex.next()
-            isempty = False
-        # The section is not empty if contains a subsection.
-        if next and isempty and Title.level > document.level:
-            isempty = False
-        # Report empty sections if invalid markup will result.
-        if isempty:
-            if document.backend == 'docbook' and Title.sectname != 'index':
-                message.error('empty section is not valid')
-
-class AbstractBlock:
-
-    blocknames = [] # Global stack of names for push_blockname() and pop_blockname().
-
-    def __init__(self):
-        # Configuration parameter names common to all blocks.
-        self.CONF_ENTRIES = ('delimiter','options','subs','presubs','postsubs',
-                             'posattrs','style','.*-style','template','filter')
-        self.start = None   # File reader cursor at start delimiter.
-        self.defname=None   # Configuration file block definition section name.
-        # Configuration parameters.
-        self.delimiter=None # Regular expression matching block delimiter.
-        self.delimiter_reo=None # Compiled delimiter.
-        self.template=None  # template section entry.
-        self.options=()     # options entry list.
-        self.presubs=None   # presubs/subs entry list.
-        self.postsubs=()    # postsubs entry list.
-        self.filter=None    # filter entry.
-        self.posattrs=()    # posattrs entry list.
-        self.style=None     # Default style.
-        self.styles=OrderedDict() # Each entry is a styles dictionary.
-        # Before a block is processed it's attributes (from it's
-        # attributes list) are merged with the block configuration parameters
-        # (by self.merge_attributes()) resulting in the template substitution
-        # dictionary (self.attributes) and the block's processing parameters
-        # (self.parameters).
-        self.attributes={}
-        # The names of block parameters.
-        self.PARAM_NAMES=('template','options','presubs','postsubs','filter')
-        self.parameters=None
-        # Leading delimiter match object.
-        self.mo=None
-    def short_name(self):
-        """ Return the text following the first dash in the section name."""
-        i = self.defname.find('-')
-        if i == -1:
-            return self.defname
-        else:
-            return self.defname[i+1:]
-    def error(self, msg, cursor=None, halt=False):
-        message.error('[%s] %s' % (self.defname,msg), cursor, halt)
-    def is_conf_entry(self,param):
-        """Return True if param matches an allowed configuration file entry
-        name."""
-        for s in self.CONF_ENTRIES:
-            if re.match('^'+s+'$',param):
-                return True
-        return False
-    def load(self,defname,entries):
-        """Update block definition from section 'entries' dictionary."""
-        self.defname = defname
-        self.update_parameters(entries, self, all=True)
-    def update_parameters(self, src, dst=None, all=False):
-        """
-        Parse processing parameters from src dictionary to dst object.
-        dst defaults to self.parameters.
-        If all is True then copy src entries that aren't parameter names.
-        """
-        dst = dst or self.parameters
-        msg = '[%s] malformed entry %%s: %%s' % self.defname
-        def copy(obj,k,v):
-            if isinstance(obj,dict):
-                obj[k] = v
-            else:
-                setattr(obj,k,v)
-        for k,v in src.items():
-            if not re.match(r'\d+',k) and not is_name(k):
-                raise EAsciiDoc, msg % (k,v)
-            if k == 'template':
-                if not is_name(v):
-                    raise EAsciiDoc, msg % (k,v)
-                copy(dst,k,v)
-            elif k == 'filter':
-                copy(dst,k,v)
-            elif k == 'options':
-                if isinstance(v,str):
-                    v = parse_options(v, (), msg % (k,v))
-                    # Merge with existing options.
-                    v = tuple(set(dst.options).union(set(v)))
-                copy(dst,k,v)
-            elif k in ('subs','presubs','postsubs'):
-                # Subs is an alias for presubs.
-                if k == 'subs': k = 'presubs'
-                if isinstance(v,str):
-                    v = parse_options(v, SUBS_OPTIONS, msg % (k,v))
-                copy(dst,k,v)
-            elif k == 'delimiter':
-                if v and is_re(v):
-                    copy(dst,k,v)
-                else:
-                    raise EAsciiDoc, msg % (k,v)
-            elif k == 'style':
-                if is_name(v):
-                    copy(dst,k,v)
-                else:
-                    raise EAsciiDoc, msg % (k,v)
-            elif k == 'posattrs':
-                v = parse_options(v, (), msg % (k,v))
-                copy(dst,k,v)
-            else:
-                mo = re.match(r'^(?P<style>.*)-style$',k)
-                if mo:
-                    if not v:
-                        raise EAsciiDoc, msg % (k,v)
-                    style = mo.group('style')
-                    if not is_name(style):
-                        raise EAsciiDoc, msg % (k,v)
-                    d = {}
-                    if not parse_named_attributes(v,d):
-                        raise EAsciiDoc, msg % (k,v)
-                    if 'subs' in d:
-                        # Subs is an alias for presubs.
-                        d['presubs'] = d['subs']
-                        del d['subs']
-                    self.styles[style] = d
-                elif all or k in self.PARAM_NAMES:
-                    copy(dst,k,v) # Derived class specific entries.
-    def get_param(self,name,params=None):
-        """
-        Return named processing parameter from params dictionary.
-        If the parameter is not in params look in self.parameters.
-        """
-        if params and name in params:
-            return params[name]
-        elif name in self.parameters:
-            return self.parameters[name]
-        else:
-            return None
-    def get_subs(self,params=None):
-        """
-        Return (presubs,postsubs) tuple.
-        """
-        presubs = self.get_param('presubs',params)
-        postsubs = self.get_param('postsubs',params)
-        return (presubs,postsubs)
-    def dump(self):
-        """Write block definition to stdout."""
-        write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline))
-        write('['+self.defname+']')
-        if self.is_conf_entry('delimiter'):
-            write('delimiter='+self.delimiter)
-        if self.template:
-            write('template='+self.template)
-        if self.options:
-            write('options='+','.join(self.options))
-        if self.presubs:
-            if self.postsubs:
-                write('presubs='+','.join(self.presubs))
-            else:
-                write('subs='+','.join(self.presubs))
-        if self.postsubs:
-            write('postsubs='+','.join(self.postsubs))
-        if self.filter:
-            write('filter='+self.filter)
-        if self.posattrs:
-            write('posattrs='+','.join(self.posattrs))
-        if self.style:
-            write('style='+self.style)
-        if self.styles:
-            for style,d in self.styles.items():
-                s = ''
-                for k,v in d.items(): s += '%s=%r,' % (k,v)
-                write('%s-style=%s' % (style,s[:-1]))
-    def validate(self):
-        """Validate block after the complete configuration has been loaded."""
-        if self.is_conf_entry('delimiter') and not self.delimiter:
-            raise EAsciiDoc,'[%s] missing delimiter' % self.defname
-        if self.style:
-            if not is_name(self.style):
-                raise EAsciiDoc, 'illegal style name: %s' % self.style
-            if not self.style in self.styles:
-                if not isinstance(self,List):   # Lists don't have templates.
-                    message.warning('[%s] \'%s\' style not in %s' % (
-                        self.defname,self.style,self.styles.keys()))
-        # Check all styles for missing templates.
-        all_styles_have_template = True
-        for k,v in self.styles.items():
-            t = v.get('template')
-            if t and not t in config.sections:
-                # Defer check if template name contains attributes.
-                if not re.search(r'{.+}',t):
-                    message.warning('missing template section: [%s]' % t)
-            if not t:
-                all_styles_have_template = False
-        # Check we have a valid template entry or alternatively that all the
-        # styles have templates.
-        if self.is_conf_entry('template') and not 'skip' in self.options:
-            if self.template:
-                if not self.template in config.sections:
-                    # Defer check if template name contains attributes.
-                    if not re.search(r'{.+}',self.template):
-                        message.warning('missing template section: [%s]'
-                                        % self.template)
-            elif not all_styles_have_template:
-                if not isinstance(self,List): # Lists don't have templates.
-                    message.warning('missing styles templates: [%s]' % self.defname)
-    def isnext(self):
-        """Check if this block is next in document reader."""
-        result = False
-        reader.skip_blank_lines()
-        if reader.read_next():
-            if not self.delimiter_reo:
-                # Cache compiled delimiter optimization.
-                self.delimiter_reo = re.compile(self.delimiter)
-            mo = self.delimiter_reo.match(reader.read_next())
-            if mo:
-                self.mo = mo
-                result = True
-        return result
-    def translate(self):
-        """Translate block from document reader."""
-        if not self.presubs:
-            self.presubs = config.subsnormal
-        if reader.cursor:
-            self.start = reader.cursor[:]
-    def push_blockname(self, blockname=None):
-        '''
-        On block entry set the 'blockname' attribute.
-        Only applies to delimited blocks, lists and tables.
-        '''
-        if blockname is None:
-            blockname = self.attributes.get('style', self.short_name()).lower()
-        trace('push blockname', blockname)
-        self.blocknames.append(blockname)
-        document.attributes['blockname'] = blockname
-    def pop_blockname(self):
-        '''
-        On block exits restore previous (parent) 'blockname' attribute or
-        undefine it if we're no longer inside a block.
-        '''
-        assert len(self.blocknames) > 0
-        blockname = self.blocknames.pop()
-        trace('pop blockname', blockname)
-        if len(self.blocknames) == 0:
-            document.attributes['blockname'] = None
-        else:
-            document.attributes['blockname'] = self.blocknames[-1]
-    def merge_attributes(self,attrs,params=[]):
-        """
-        Use the current block's attribute list (attrs dictionary) to build a
-        dictionary of block processing parameters (self.parameters) and tag
-        substitution attributes (self.attributes).
-
-        1. Copy the default parameters (self.*) to self.parameters.
-        self.parameters are used internally to render the current block.
-        Optional params array of additional parameters.
-
-        2. Copy attrs to self.attributes. self.attributes are used for template
-        and tag substitution in the current block.
-
-        3. If a style attribute was specified update self.parameters with the
-        corresponding style parameters; if there are any style parameters
-        remaining add them to self.attributes (existing attribute list entries
-        take precedence).
-
-        4. Set named positional attributes in self.attributes if self.posattrs
-        was specified.
-
-        5. Finally self.parameters is updated with any corresponding parameters
-        specified in attrs.
-
-        """
-
-        def check_array_parameter(param):
-            # Check the parameter is a sequence type.
-            if not is_array(self.parameters[param]):
-                message.error('malformed %s parameter: %s' %
-                        (param, self.parameters[param]))
-                # Revert to default value.
-                self.parameters[param] = getattr(self,param)
-
-        params = list(self.PARAM_NAMES) + params
-        self.attributes = {}
-        if self.style:
-            # If a default style is defined make it available in the template.
-            self.attributes['style'] = self.style
-        self.attributes.update(attrs)
-        # Calculate dynamic block parameters.
-        # Start with configuration file defaults.
-        self.parameters = AttrDict()
-        for name in params:
-            self.parameters[name] = getattr(self,name)
-        # Load the selected style attributes.
-        posattrs = self.posattrs
-        if posattrs and posattrs[0] == 'style':
-            # Positional attribute style has highest precedence.
-            style = self.attributes.get('1')
-        else:
-            style = None
-        if not style:
-            # Use explicit style attribute, fall back to default style.
-            style = self.attributes.get('style',self.style)
-        if style:
-            if not is_name(style):
-                message.error('illegal style name: %s' % style)
-                style = self.style
-            # Lists have implicit styles and do their own style checks.
-            elif style not in self.styles and not isinstance(self,List):
-                message.warning('missing style: [%s]: %s' % (self.defname,style))
-                style = self.style
-            if style in self.styles:
-                self.attributes['style'] = style
-                for k,v in self.styles[style].items():
-                    if k == 'posattrs':
-                        posattrs = v
-                    elif k in params:
-                        self.parameters[k] = v
-                    elif not k in self.attributes:
-                        # Style attributes don't take precedence over explicit.
-                        self.attributes[k] = v
-        # Set named positional attributes.
-        for i,v in enumerate(posattrs):
-            if str(i+1) in self.attributes:
-                self.attributes[v] = self.attributes[str(i+1)]
-        # Override config and style attributes with attribute list attributes.
-        self.update_parameters(attrs)
-        check_array_parameter('options')
-        check_array_parameter('presubs')
-        check_array_parameter('postsubs')
-
-class AbstractBlocks:
-    """List of block definitions."""
-    PREFIX = ''         # Conf file section name prefix set in derived classes.
-    BLOCK_TYPE = None   # Block type set in derived classes.
-    def __init__(self):
-        self.current=None
-        self.blocks = []        # List of Block objects.
-        self.default = None     # Default Block.
-        self.delimiters = None  # Combined delimiters regular expression.
-    def load(self,sections):
-        """Load block definition from 'sections' dictionary."""
-        for k in sections.keys():
-            if re.match(r'^'+ self.PREFIX + r'.+$',k):
-                d = {}
-                parse_entries(sections.get(k,()),d)
-                for b in self.blocks:
-                    if b.defname == k:
-                        break
-                else:
-                    b = self.BLOCK_TYPE()
-                    self.blocks.append(b)
-                try:
-                    b.load(k,d)
-                except EAsciiDoc,e:
-                    raise EAsciiDoc,'[%s] %s' % (k,str(e))
-    def dump(self):
-        for b in self.blocks:
-            b.dump()
-    def isnext(self):
-        for b in self.blocks:
-            if b.isnext():
-                self.current = b
-                return True;
-        return False
-    def validate(self):
-        """Validate the block definitions."""
-        # Validate delimiters and build combined lists delimiter pattern.
-        delimiters = []
-        for b in self.blocks:
-            assert b.__class__ is self.BLOCK_TYPE
-            b.validate()
-            if b.delimiter:
-                delimiters.append(b.delimiter)
-        self.delimiters = re_join(delimiters)
-
-class Paragraph(AbstractBlock):
-    def __init__(self):
-        AbstractBlock.__init__(self)
-        self.text=None          # Text in first line of paragraph.
-    def load(self,name,entries):
-        AbstractBlock.load(self,name,entries)
-    def dump(self):
-        AbstractBlock.dump(self)
-        write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline))
-        write('')
-    def isnext(self):
-        result = AbstractBlock.isnext(self)
-        if result:
-            self.text = self.mo.groupdict().get('text')
-        return result
-    def translate(self):
-        AbstractBlock.translate(self)
-        attrs = self.mo.groupdict().copy()
-        if 'text' in attrs: del attrs['text']
-        BlockTitle.consume(attrs)
-        AttributeList.consume(attrs)
-        self.merge_attributes(attrs)
-        reader.read()   # Discard (already parsed item first line).
-        body = reader.read_until(paragraphs.terminators)
-        if 'skip' in self.parameters.options:
-            return
-        body = [self.text] + list(body)
-        presubs = self.parameters.presubs
-        postsubs = self.parameters.postsubs
-        if document.attributes.get('plaintext') is None:
-            body = Lex.set_margin(body) # Move body to left margin.
-        body = Lex.subs(body,presubs)
-        template = self.parameters.template
-        template = subs_attrs(template,attrs)
-        stag = config.section2tags(template, self.attributes,skipend=True)[0]
-        if self.parameters.filter:
-            body = filter_lines(self.parameters.filter,body,self.attributes)
-        body = Lex.subs(body,postsubs)
-        etag = config.section2tags(template, self.attributes,skipstart=True)[1]
-        # Write start tag, content, end tag.
-        writer.write(dovetail_tags(stag,body,etag),trace='paragraph')
-
-class Paragraphs(AbstractBlocks):
-    """List of paragraph definitions."""
-    BLOCK_TYPE = Paragraph
-    PREFIX = 'paradef-'
-    def __init__(self):
-        AbstractBlocks.__init__(self)
-        self.terminators=None    # List of compiled re's.
-    def initialize(self):
-        self.terminators = [
-                re.compile(r'^\+$|^$'),
-                re.compile(AttributeList.pattern),
-                re.compile(blocks.delimiters),
-                re.compile(tables.delimiters),
-                re.compile(tables_OLD.delimiters),
-            ]
-    def load(self,sections):
-        AbstractBlocks.load(self,sections)
-    def validate(self):
-        AbstractBlocks.validate(self)
-        # Check we have a default paragraph definition, put it last in list.
-        for b in self.blocks:
-            if b.defname == 'paradef-default':
-                self.blocks.append(b)
-                self.default = b
-                self.blocks.remove(b)
-                break
-        else:
-            raise EAsciiDoc,'missing section: [paradef-default]'
-
-class List(AbstractBlock):
-    NUMBER_STYLES= ('arabic','loweralpha','upperalpha','lowerroman',
-                    'upperroman')
-    def __init__(self):
-        AbstractBlock.__init__(self)
-        self.CONF_ENTRIES += ('type','tags')
-        self.PARAM_NAMES += ('tags',)
-        # listdef conf file parameters.
-        self.type=None
-        self.tags=None      # Name of listtags-<tags> conf section.
-        # Calculated parameters.
-        self.tag=None       # Current tags AttrDict.
-        self.label=None     # List item label (labeled lists).
-        self.text=None      # Text in first line of list item.
-        self.index=None     # Matched delimiter 'index' group (numbered lists).
-        self.type=None      # List type ('numbered','bulleted','labeled').
-        self.ordinal=None   # Current list item ordinal number (1..)
-        self.number_style=None # Current numbered list style ('arabic'..)
-    def load(self,name,entries):
-        AbstractBlock.load(self,name,entries)
-    def dump(self):
-        AbstractBlock.dump(self)
-        write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline))
-        write('type='+self.type)
-        write('tags='+self.tags)
-        write('')
-    def validate(self):
-        AbstractBlock.validate(self)
-        tags = [self.tags]
-        tags += [s['tags'] for s in self.styles.values() if 'tags' in s]
-        for t in tags:
-            if t not in lists.tags:
-                self.error('missing section: [listtags-%s]' % t,halt=True)
-    def isnext(self):
-        result = AbstractBlock.isnext(self)
-        if result:
-            self.label = self.mo.groupdict().get('label')
-            self.text = self.mo.groupdict().get('text')
-            self.index = self.mo.groupdict().get('index')
-        return result
-    def translate_entry(self):
-        assert self.type == 'labeled'
-        entrytag = subs_tag(self.tag.entry, self.attributes)
-        labeltag = subs_tag(self.tag.label, self.attributes)
-        writer.write(entrytag[0],trace='list entry open')
-        writer.write(labeltag[0],trace='list label open')
-        # Write labels.
-        while Lex.next() is self:
-            reader.read()   # Discard (already parsed item first line).
-            writer.write_tag(self.tag.term, [self.label],
-                             self.presubs, self.attributes,trace='list term')
-            if self.text: break
-        writer.write(labeltag[1],trace='list label close')
-        # Write item text.
-        self.translate_item()
-        writer.write(entrytag[1],trace='list entry close')
-    def translate_item(self):
-        if self.type == 'callout':
-            self.attributes['coids'] = calloutmap.calloutids(self.ordinal)
-        itemtag = subs_tag(self.tag.item, self.attributes)
-        writer.write(itemtag[0],trace='list item open')
-        # Write ItemText.
-        text = reader.read_until(lists.terminators)
-        if self.text:
-            text = [self.text] + list(text)
-        if text:
-            writer.write_tag(self.tag.text, text, self.presubs, self.attributes,trace='list text')
-        # Process explicit and implicit list item continuations.
-        while True:
-            continuation = reader.read_next() == '+'
-            if continuation: reader.read()  # Discard continuation line.
-            while Lex.next() in (BlockTitle,AttributeList):
-                # Consume continued element title and attributes.
-                Lex.next().translate()
-            if not continuation and BlockTitle.title:
-                # Titled elements terminate the list.
-                break
-            next = Lex.next()
-            if next in lists.open:
-                break
-            elif isinstance(next,List):
-                next.translate()
-            elif isinstance(next,Paragraph) and 'listelement' in next.options:
-                next.translate()
-            elif continuation:
-                # This is where continued elements are processed.
-                if next is Title:
-                    message.error('section title not allowed in list item',halt=True)
-                next.translate()
-            else:
-                break
-        writer.write(itemtag[1],trace='list item close')
-
-    @staticmethod
-    def calc_style(index):
-        """Return the numbered list style ('arabic'...) of the list item index.
-        Return None if unrecognized style."""
-        if re.match(r'^\d+[\.>]$', index):
-            style = 'arabic'
-        elif re.match(r'^[ivx]+\)$', index):
-            style = 'lowerroman'
-        elif re.match(r'^[IVX]+\)$', index):
-            style = 'upperroman'
-        elif re.match(r'^[a-z]\.$', index):
-            style = 'loweralpha'
-        elif re.match(r'^[A-Z]\.$', index):
-            style = 'upperalpha'
-        else:
-            assert False
-        return style
-
-    @staticmethod
-    def calc_index(index,style):
-        """Return the ordinal number of (1...) of the list item index
-        for the given list style."""
-        def roman_to_int(roman):
-            roman = roman.lower()
-            digits = {'i':1,'v':5,'x':10}
-            result = 0
-            for i in range(len(roman)):
-                digit = digits[roman[i]]
-                # If next digit is larger this digit is negative.
-                if i+1 < len(roman) and digits[roman[i+1]] > digit:
-                    result -= digit
-                else:
-                    result += digit
-            return result
-        index = index[:-1]
-        if style == 'arabic':
-            ordinal = int(index)
-        elif style == 'lowerroman':
-            ordinal = roman_to_int(index)
-        elif style == 'upperroman':
-            ordinal = roman_to_int(index)
-        elif style == 'loweralpha':
-            ordinal = ord(index) - ord('a') + 1
-        elif style == 'upperalpha':
-            ordinal = ord(index) - ord('A') + 1
-        else:
-            assert False
-        return ordinal
-
-    def check_index(self):
-        """Check calculated self.ordinal (1,2,...) against the item number
-        in the document (self.index) and check the number style is the same as
-        the first item (self.number_style)."""
-        assert self.type in ('numbered','callout')
-        if self.index:
-            style = self.calc_style(self.index)
-            if style != self.number_style:
-                message.warning('list item style: expected %s got %s' %
-                        (self.number_style,style), offset=1)
-            ordinal = self.calc_index(self.index,style)
-            if ordinal != self.ordinal:
-                message.warning('list item index: expected %s got %s' %
-                        (self.ordinal,ordinal), offset=1)
-
-    def check_tags(self):
-        """ Check that all necessary tags are present. """
-        tags = set(Lists.TAGS)
-        if self.type != 'labeled':
-            tags = tags.difference(['entry','label','term'])
-        missing = tags.difference(self.tag.keys())
-        if missing:
-            self.error('missing tag(s): %s' % ','.join(missing), halt=True)
-    def translate(self):
-        AbstractBlock.translate(self)
-        if self.short_name() in ('bibliography','glossary','qanda'):
-            message.deprecated('old %s list syntax' % self.short_name())
-        lists.open.append(self)
-        attrs = self.mo.groupdict().copy()
-        for k in ('label','text','index'):
-            if k in attrs: del attrs[k]
-        if self.index:
-            # Set the numbering style from first list item.
-            attrs['style'] = self.calc_style(self.index)
-        BlockTitle.consume(attrs)
-        AttributeList.consume(attrs)
-        self.merge_attributes(attrs,['tags'])
-        self.push_blockname()
-        if self.type in ('numbered','callout'):
-            self.number_style = self.attributes.get('style')
-            if self.number_style not in self.NUMBER_STYLES:
-                message.error('illegal numbered list style: %s' % self.number_style)
-                # Fall back to default style.
-                self.attributes['style'] = self.number_style = self.style
-        self.tag = lists.tags[self.parameters.tags]
-        self.check_tags()
-        if 'width' in self.attributes:
-            # Set horizontal list 'labelwidth' and 'itemwidth' attributes.
-            v = str(self.attributes['width'])
-            mo = re.match(r'^(\d{1,2})%?$',v)
-            if mo:
-                labelwidth = int(mo.group(1))
-                self.attributes['labelwidth'] = str(labelwidth)
-                self.attributes['itemwidth'] = str(100-labelwidth)
-            else:
-                self.error('illegal attribute value: width="%s"' % v)
-        stag,etag = subs_tag(self.tag.list, self.attributes)
-        if stag:
-            writer.write(stag,trace='list open')
-        self.ordinal = 0
-        # Process list till list syntax changes or there is a new title.
-        while Lex.next() is self and not BlockTitle.title:
-            self.ordinal += 1
-            document.attributes['listindex'] = str(self.ordinal)
-            if self.type in ('numbered','callout'):
-                self.check_index()
-            if self.type in ('bulleted','numbered','callout'):
-                reader.read()   # Discard (already parsed item first line).
-                self.translate_item()
-            elif self.type == 'labeled':
-                self.translate_entry()
-            else:
-                raise AssertionError,'illegal [%s] list type' % self.defname
-        if etag:
-            writer.write(etag,trace='list close')
-        if self.type == 'callout':
-            calloutmap.validate(self.ordinal)
-            calloutmap.listclose()
-        lists.open.pop()
-        if len(lists.open):
-            document.attributes['listindex'] = str(lists.open[-1].ordinal)
-        self.pop_blockname()
-
-class Lists(AbstractBlocks):
-    """List of List objects."""
-    BLOCK_TYPE = List
-    PREFIX = 'listdef-'
-    TYPES = ('bulleted','numbered','labeled','callout')
-    TAGS = ('list', 'entry','item','text', 'label','term')
-    def __init__(self):
-        AbstractBlocks.__init__(self)
-        self.open = []  # A stack of the current and parent lists.
-        self.tags={}    # List tags dictionary. Each entry is a tags AttrDict.
-        self.terminators=None    # List of compiled re's.
-    def initialize(self):
-        self.terminators = [
-                re.compile(r'^\+$|^$'),
-                re.compile(AttributeList.pattern),
-                re.compile(lists.delimiters),
-                re.compile(blocks.delimiters),
-                re.compile(tables.delimiters),
-                re.compile(tables_OLD.delimiters),
-            ]
-    def load(self,sections):
-        AbstractBlocks.load(self,sections)
-        self.load_tags(sections)
-    def load_tags(self,sections):
-        """
-        Load listtags-* conf file sections to self.tags.
-        """
-        for section in sections.keys():
-            mo = re.match(r'^listtags-(?P<name>\w+)$',section)
-            if mo:
-                name = mo.group('name')
-                if name in self.tags:
-                    d = self.tags[name]
-                else:
-                    d = AttrDict()
-                parse_entries(sections.get(section,()),d)
-                for k in d.keys():
-                    if k not in self.TAGS:
-                        message.warning('[%s] contains illegal list tag: %s' %
-                                (section,k))
-                self.tags[name] = d
-    def validate(self):
-        AbstractBlocks.validate(self)
-        for b in self.blocks:
-            # Check list has valid type.
-            if not b.type in Lists.TYPES:
-                raise EAsciiDoc,'[%s] illegal type' % b.defname
-            b.validate()
-    def dump(self):
-        AbstractBlocks.dump(self)
-        for k,v in self.tags.items():
-            dump_section('listtags-'+k, v)
-
-
-class DelimitedBlock(AbstractBlock):
-    def __init__(self):
-        AbstractBlock.__init__(self)
-    def load(self,name,entries):
-        AbstractBlock.load(self,name,entries)
-    def dump(self):
-        AbstractBlock.dump(self)
-        write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline))
-        write('')
-    def isnext(self):
-        return AbstractBlock.isnext(self)
-    def translate(self):
-        AbstractBlock.translate(self)
-        reader.read()   # Discard delimiter.
-        self.merge_attributes(AttributeList.attrs)
-        if not 'skip' in self.parameters.options:
-            BlockTitle.consume(self.attributes)
-            AttributeList.consume()
-        self.push_blockname()
-        options = self.parameters.options
-        if 'skip' in options:
-            reader.read_until(self.delimiter,same_file=True)
-        elif safe() and self.defname == 'blockdef-backend':
-            message.unsafe('Backend Block')
-            reader.read_until(self.delimiter,same_file=True)
-        else:
-            template = self.parameters.template
-            template = subs_attrs(template,self.attributes)
-            name = self.short_name()+' block'
-            if 'sectionbody' in options:
-                # The body is treated like a section body.
-                stag,etag = config.section2tags(template,self.attributes)
-                writer.write(stag,trace=name+' open')
-                Section.translate_body(self)
-                writer.write(etag,trace=name+' close')
-            else:
-                stag = config.section2tags(template,self.attributes,skipend=True)[0]
-                body = reader.read_until(self.delimiter,same_file=True)
-                presubs = self.parameters.presubs
-                postsubs = self.parameters.postsubs
-                body = Lex.subs(body,presubs)
-                if self.parameters.filter:
-                    body = filter_lines(self.parameters.filter,body,self.attributes)
-                body = Lex.subs(body,postsubs)
-                # Write start tag, content, end tag.
-                etag = config.section2tags(template,self.attributes,skipstart=True)[1]
-                writer.write(dovetail_tags(stag,body,etag),trace=name)
-            trace(self.short_name()+' block close',etag)
-        if reader.eof():
-            self.error('missing closing delimiter',self.start)
-        else:
-            delimiter = reader.read()   # Discard delimiter line.
-            assert re.match(self.delimiter,delimiter)
-        self.pop_blockname()
-
-class DelimitedBlocks(AbstractBlocks):
-    """List of delimited blocks."""
-    BLOCK_TYPE = DelimitedBlock
-    PREFIX = 'blockdef-'
-    def __init__(self):
-        AbstractBlocks.__init__(self)
-    def load(self,sections):
-        """Update blocks defined in 'sections' dictionary."""
-        AbstractBlocks.load(self,sections)
-    def validate(self):
-        AbstractBlocks.validate(self)
-
-class Column:
-    """Table column."""
-    def __init__(self, width=None, align_spec=None, style=None):
-        self.width = width or '1'
-        self.halign, self.valign = Table.parse_align_spec(align_spec)
-        self.style = style      # Style name or None.
-        # Calculated attribute values.
-        self.abswidth = None    # 1..   (page units).
-        self.pcwidth = None     # 1..99 (percentage).
-
-class Cell:
-    def __init__(self, data, span_spec=None, align_spec=None, style=None):
-        self.data = data
-        self.span, self.vspan = Table.parse_span_spec(span_spec)
-        self.halign, self.valign = Table.parse_align_spec(align_spec)
-        self.style = style
-        self.reserved = False
-    def __repr__(self):
-        return '<Cell: %d.%d %s.%s %s "%s">' % (
-                self.span, self.vspan,
-                self.halign, self.valign,
-                self.style or '',
-                self.data)
-    def clone_reserve(self):
-        """Return a clone of self to reserve vertically spanned cell."""
-        result = copy.copy(self)
-        result.vspan = 1
-        result.reserved = True
-        return result
-
-class Table(AbstractBlock):
-    ALIGN = {'<':'left', '>':'right', '^':'center'}
-    VALIGN = {'<':'top', '>':'bottom', '^':'middle'}
-    FORMATS = ('psv','csv','dsv')
-    SEPARATORS = dict(
-        csv=',',
-        dsv=r':|\n',
-        # The count and align group matches are not exact.
-        psv=r'((?<!\S)((?P<span>[\d.]+)(?P<op>[*+]))?(?P<align>[<\^>.]{,3})?(?P<style>[a-z])?)?\|'
-    )
-    def __init__(self):
-        AbstractBlock.__init__(self)
-        self.CONF_ENTRIES += ('format','tags','separator')
-        # tabledef conf file parameters.
-        self.format='psv'
-        self.separator=None
-        self.tags=None          # Name of tabletags-<tags> conf section.
-        # Calculated parameters.
-        self.abswidth=None      # 1..   (page units).
-        self.pcwidth = None     # 1..99 (percentage).
-        self.rows=[]            # Parsed rows, each row is a list of Cells.
-        self.columns=[]         # List of Columns.
-    @staticmethod
-    def parse_align_spec(align_spec):
-        """
-        Parse AsciiDoc cell alignment specifier and return 2-tuple with
-        horizonatal and vertical alignment names. Unspecified alignments
-        set to None.
-        """
-        result = (None, None)
-        if align_spec:
-            mo = re.match(r'^([<\^>])?(\.([<\^>]))?$', align_spec)
-            if mo:
-                result = (Table.ALIGN.get(mo.group(1)),
-                          Table.VALIGN.get(mo.group(3)))
-        return result
-    @staticmethod
-    def parse_span_spec(span_spec):
-        """
-        Parse AsciiDoc cell span specifier and return 2-tuple with horizonatal
-        and vertical span counts. Set default values (1,1) if not
-        specified.
-        """
-        result = (None, None)
-        if span_spec:
-            mo = re.match(r'^(\d+)?(\.(\d+))?$', span_spec)
-            if mo:
-                result = (mo.group(1) and int(mo.group(1)),
-                          mo.group(3) and int(mo.group(3)))
-        return (result[0] or 1, result[1] or 1)
-    def load(self,name,entries):
-        AbstractBlock.load(self,name,entries)
-    def dump(self):
-        AbstractBlock.dump(self)
-        write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline))
-        write('format='+self.format)
-        write('')
-    def validate(self):
-        AbstractBlock.validate(self)
-        if self.format not in Table.FORMATS:
-            self.error('illegal format=%s' % self.format,halt=True)
-        self.tags = self.tags or 'default'
-        tags = [self.tags]
-        tags += [s['tags'] for s in self.styles.values() if 'tags' in s]
-        for t in tags:
-            if t not in tables.tags:
-                self.error('missing section: [tabletags-%s]' % t,halt=True)
-        if self.separator:
-            # Evaluate escape characters.
-            self.separator = literal_eval('"'+self.separator+'"')
-        #TODO: Move to class Tables
-        # Check global table parameters.
-        elif config.pagewidth is None:
-            self.error('missing [miscellaneous] entry: pagewidth')
-        elif config.pageunits is None:
-            self.error('missing [miscellaneous] entry: pageunits')
-    def validate_attributes(self):
-        """Validate and parse table attributes."""
-        # Set defaults.
-        format = self.format
-        tags = self.tags
-        separator = self.separator
-        abswidth = float(config.pagewidth)
-        pcwidth = 100.0
-        for k,v in self.attributes.items():
-            if k == 'format':
-                if v not in self.FORMATS:
-                    self.error('illegal %s=%s' % (k,v))
-                else:
-                    format = v
-            elif k == 'tags':
-                if v not in tables.tags:
-                    self.error('illegal %s=%s' % (k,v))
-                else:
-                    tags = v
-            elif k == 'separator':
-                separator = v
-            elif k == 'width':
-                if not re.match(r'^\d{1,3}%$',v) or int(v[:-1]) > 100:
-                    self.error('illegal %s=%s' % (k,v))
-                else:
-                    abswidth = float(v[:-1])/100 * config.pagewidth
-                    pcwidth = float(v[:-1])
-        # Calculate separator if it has not been specified.
-        if not separator:
-            separator = Table.SEPARATORS[format]
-        if format == 'csv':
-            if len(separator) > 1:
-                self.error('illegal csv separator=%s' % separator)
-                separator = ','
-        else:
-            if not is_re(separator):
-                self.error('illegal regular expression: separator=%s' %
-                        separator)
-        self.parameters.format = format
-        self.parameters.tags = tags
-        self.parameters.separator = separator
-        self.abswidth = abswidth
-        self.pcwidth = pcwidth
-    def get_tags(self,params):
-        tags = self.get_param('tags',params)
-        assert(tags and tags in tables.tags)
-        return tables.tags[tags]
-    def get_style(self,prefix):
-        """
-        Return the style dictionary whose name starts with 'prefix'.
-        """
-        if prefix is None:
-            return None
-        names = self.styles.keys()
-        names.sort()
-        for name in names:
-            if name.startswith(prefix):
-                return self.styles[name]
-        else:
-            self.error('missing style: %s*' % prefix)
-            return None
-    def parse_cols(self, cols, halign, valign):
-        """
-        Build list of column objects from table 'cols', 'halign' and 'valign'
-        attributes.
-        """
-        # [<multiplier>*][<align>][<width>][<style>]
-        COLS_RE1 = r'^((?P<count>\d+)\*)?(?P<align>[<\^>.]{,3})?(?P<width>\d+%?)?(?P<style>[a-z]\w*)?$'
-        # [<multiplier>*][<width>][<align>][<style>]
-        COLS_RE2 = r'^((?P<count>\d+)\*)?(?P<width>\d+%?)?(?P<align>[<\^>.]{,3})?(?P<style>[a-z]\w*)?$'
-        reo1 = re.compile(COLS_RE1)
-        reo2 = re.compile(COLS_RE2)
-        cols = str(cols)
-        if re.match(r'^\d+$',cols):
-            for i in range(int(cols)):
-                self.columns.append(Column())
-        else:
-            for col in re.split(r'\s*,\s*',cols):
-                mo = reo1.match(col)
-                if not mo:
-                    mo = reo2.match(col)
-                if mo:
-                    count = int(mo.groupdict().get('count') or 1)
-                    for i in range(count):
-                        self.columns.append(
-                            Column(mo.group('width'), mo.group('align'),
-                                   self.get_style(mo.group('style')))
-                        )
-                else:
-                    self.error('illegal column spec: %s' % col,self.start)
-        # Set column (and indirectly cell) default alignments.
-        for col in self.columns:
-            col.halign = col.halign or halign or document.attributes.get('halign') or 'left'
-            col.valign = col.valign or valign or document.attributes.get('valign') or 'top'
-        # Validate widths and calculate missing widths.
-        n = 0; percents = 0; props = 0
-        for col in self.columns:
-            if col.width:
-                if col.width[-1] == '%': percents += int(col.width[:-1])
-                else: props += int(col.width)
-                n += 1
-        if percents > 0 and props > 0:
-            self.error('mixed percent and proportional widths: %s'
-                    % cols,self.start)
-        pcunits = percents > 0
-        # Fill in missing widths.
-        if n < len(self.columns) and percents < 100:
-            if pcunits:
-                width = float(100 - percents)/float(len(self.columns) - n)
-            else:
-                width = 1
-            for col in self.columns:
-                if not col.width:
-                    if pcunits:
-                        col.width = str(int(width))+'%'
-                        percents += width
-                    else:
-                        col.width = str(width)
-                        props += width
-        # Calculate column alignment and absolute and percent width values.
-        percents = 0
-        for col in self.columns:
-            if pcunits:
-                col.pcwidth = float(col.width[:-1])
-            else:
-                col.pcwidth = (float(col.width)/props)*100
-            col.abswidth = self.abswidth * (col.pcwidth/100)
-            if config.pageunits in ('cm','mm','in','em'):
-                col.abswidth = '%.2f' % round(col.abswidth,2)
-            else:
-                col.abswidth = '%d' % round(col.abswidth)
-            percents += col.pcwidth
-            col.pcwidth = int(col.pcwidth)
-        if round(percents) > 100:
-            self.error('total width exceeds 100%%: %s' % cols,self.start)
-        elif round(percents) < 100:
-            self.error('total width less than 100%%: %s' % cols,self.start)
-    def build_colspecs(self):
-        """
-        Generate column related substitution attributes.
-        """
-        cols = []
-        i = 1
-        for col in self.columns:
-            colspec = self.get_tags(col.style).colspec
-            if colspec:
-                self.attributes['halign'] = col.halign
-                self.attributes['valign'] = col.valign
-                self.attributes['colabswidth'] = col.abswidth
-                self.attributes['colpcwidth'] = col.pcwidth
-                self.attributes['colnumber'] = str(i)
-                s = subs_attrs(colspec, self.attributes)
-                if not s:
-                    message.warning('colspec dropped: contains undefined attribute')
-                else:
-                    cols.append(s)
-            i += 1
-        if cols:
-            self.attributes['colspecs'] = writer.newline.join(cols)
-    def parse_rows(self, text):
-        """
-        Parse the table source text into self.rows (a list of rows, each row
-        is a list of Cells.
-        """
-        reserved = {}  # Reserved cells generated by rowspans.
-        if self.parameters.format in ('psv','dsv'):
-            colcount = len(self.columns)
-            parsed_cells = self.parse_psv_dsv(text)
-            ri = 0  # Current row index 0..
-            ci = 0  # Column counter 0..colcount
-            row = []
-            i = 0
-            while True:
-                resv = reserved.get(ri) and reserved[ri].get(ci)
-                if resv:
-                    # We have a cell generated by a previous row span so
-                    # process it before continuing with the current parsed
-                    # cell.
-                    cell = resv
-                else:
-                    if i >= len(parsed_cells):
-                        break   # No more parsed or reserved cells.
-                    cell = parsed_cells[i]
-                    i += 1
-                    if cell.vspan > 1:
-                        # Generate ensuing reserved cells spanned vertically by
-                        # the current cell.
-                        for j in range(1, cell.vspan):
-                            if not ri+j in reserved:
-                                reserved[ri+j] = {}
-                            reserved[ri+j][ci] = cell.clone_reserve()
-                ci += cell.span
-                if ci <= colcount:
-                    row.append(cell)
-                if ci >= colcount:
-                    self.rows.append(row)
-                    ri += 1
-                    row = []
-                    ci = 0
-        elif self.parameters.format == 'csv':
-            self.rows = self.parse_csv(text)
-        else:
-            assert True,'illegal table format'
-        # Check for empty rows containing only reserved (spanned) cells.
-        for ri,row in enumerate(self.rows):
-            empty = True
-            for cell in row:
-                if not cell.reserved:
-                    empty = False
-                    break
-            if empty:
-                message.warning('table row %d: empty spanned row' % (ri+1))
-        # Check that all row spans match.
-        for ri,row in enumerate(self.rows):
-            row_span = 0
-            for cell in row:
-                row_span += cell.span
-            if ri == 0:
-                header_span = row_span
-            if row_span < header_span:
-                message.warning('table row %d: does not span all columns' % (ri+1))
-            if row_span > header_span:
-                message.warning('table row %d: exceeds columns span' % (ri+1))
-    def subs_rows(self, rows, rowtype='body'):
-        """
-        Return a string of output markup from a list of rows, each row
-        is a list of raw data text.
-        """
-        tags = tables.tags[self.parameters.tags]
-        if rowtype == 'header':
-            rtag = tags.headrow
-        elif rowtype == 'footer':
-            rtag = tags.footrow
-        else:
-            rtag = tags.bodyrow
-        result = []
-        stag,etag = subs_tag(rtag,self.attributes)
-        for row in rows:
-            result.append(stag)
-            result += self.subs_row(row,rowtype)
-            result.append(etag)
-        return writer.newline.join(result)
-    def subs_row(self, row, rowtype):
-        """
-        Substitute the list of Cells using the data tag.
-        Returns a list of marked up table cell elements.
-        """
-        result = []
-        i = 0
-        for cell in row:
-            if cell.reserved:
-                # Skip vertically spanned placeholders.
-                i += cell.span
-                continue
-            if i >= len(self.columns):
-                break   # Skip cells outside the header width.
-            col = self.columns[i]
-            self.attributes['halign'] = cell.halign or col.halign
-            self.attributes['valign'] = cell.valign or  col.valign
-            self.attributes['colabswidth'] = col.abswidth
-            self.attributes['colpcwidth'] = col.pcwidth
-            self.attributes['colnumber'] = str(i+1)
-            self.attributes['colspan'] = str(cell.span)
-            self.attributes['colstart'] = self.attributes['colnumber']
-            self.attributes['colend'] = str(i+cell.span)
-            self.attributes['rowspan'] = str(cell.vspan)
-            self.attributes['morerows'] = str(cell.vspan-1)
-            # Fill missing column data with blanks.
-            if i > len(self.columns) - 1:
-                data = ''
-            else:
-                data = cell.data
-            if rowtype == 'header':
-                # Use table style unless overriden by cell style.
-                colstyle = cell.style
-            else:
-                # If the cell style is not defined use the column style.
-                colstyle = cell.style or col.style
-            tags = self.get_tags(colstyle)
-            presubs,postsubs = self.get_subs(colstyle)
-            data = [data]
-            data = Lex.subs(data, presubs)
-            data = filter_lines(self.get_param('filter',colstyle),
-                                data, self.attributes)
-            data = Lex.subs(data, postsubs)
-            if rowtype != 'header':
-                ptag = tags.paragraph
-                if ptag:
-                    stag,etag = subs_tag(ptag,self.attributes)
-                    text = '\n'.join(data).strip()
-                    data = []
-                    for para in re.split(r'\n{2,}',text):
-                        data += dovetail_tags([stag],para.split('\n'),[etag])
-            if rowtype == 'header':
-                dtag = tags.headdata
-            elif rowtype == 'footer':
-                dtag = tags.footdata
-            else:
-                dtag = tags.bodydata
-            stag,etag = subs_tag(dtag,self.attributes)
-            result = result + dovetail_tags([stag],data,[etag])
-            i += cell.span
-        return result
-    def parse_csv(self,text):
-        """
-        Parse the table source text and return a list of rows, each row
-        is a list of Cells.
-        """
-        import StringIO
-        import csv
-        rows = []
-        rdr = csv.reader(StringIO.StringIO('\r\n'.join(text)),
-                     delimiter=self.parameters.separator, skipinitialspace=True)
-        try:
-            for row in rdr:
-                rows.append([Cell(data) for data in row])
-        except Exception:
-            self.error('csv parse error: %s' % row)
-        return rows
-    def parse_psv_dsv(self,text):
-        """
-        Parse list of PSV or DSV table source text lines and return a list of
-        Cells.
-        """
-        def append_cell(data, span_spec, op, align_spec, style):
-            op = op or '+'
-            if op == '*':   # Cell multiplier.
-                span = Table.parse_span_spec(span_spec)[0]
-                for i in range(span):
-                    cells.append(Cell(data, '1', align_spec, style))
-            elif op == '+': # Column spanner.
-                cells.append(Cell(data, span_spec, align_spec, style))
-            else:
-                self.error('illegal table cell operator')
-        text = '\n'.join(text)
-        separator = '(?msu)'+self.parameters.separator
-        format = self.parameters.format
-        start = 0
-        span = None
-        op = None
-        align = None
-        style = None
-        cells = []
-        data = ''
-        for mo in re.finditer(separator,text):
-            data += text[start:mo.start()]
-            if data.endswith('\\'):
-                data = data[:-1]+mo.group() # Reinstate escaped separators.
-            else:
-                append_cell(data, span, op, align, style)
-                span = mo.groupdict().get('span')
-                op = mo.groupdict().get('op')
-                align = mo.groupdict().get('align')
-                style = mo.groupdict().get('style')
-                if style:
-                    style = self.get_style(style)
-                data = ''
-            start = mo.end()
-        # Last cell follows final separator.
-        data += text[start:]
-        append_cell(data, span, op, align, style)
-        # We expect a dummy blank item preceeding first PSV cell.
-        if format == 'psv':
-            if cells[0].data.strip() != '':
-                self.error('missing leading separator: %s' % separator,
-                        self.start)
-            else:
-                cells.pop(0)
-        return cells
-    def translate(self):
-        AbstractBlock.translate(self)
-        reader.read()   # Discard delimiter.
-        # Reset instance specific properties.
-        self.columns = []
-        self.rows = []
-        attrs = {}
-        BlockTitle.consume(attrs)
-        # Mix in document attribute list.
-        AttributeList.consume(attrs)
-        self.merge_attributes(attrs)
-        self.validate_attributes()
-        # Add global and calculated configuration parameters.
-        self.attributes['pagewidth'] = config.pagewidth
-        self.attributes['pageunits'] = config.pageunits
-        self.attributes['tableabswidth'] = int(self.abswidth)
-        self.attributes['tablepcwidth'] = int(self.pcwidth)
-        # Read the entire table.
-        text = reader.read_until(self.delimiter)
-        if reader.eof():
-            self.error('missing closing delimiter',self.start)
-        else:
-            delimiter = reader.read()   # Discard closing delimiter.
-            assert re.match(self.delimiter,delimiter)
-        if len(text) == 0:
-            message.warning('[%s] table is empty' % self.defname)
-            return
-        self.push_blockname('table')
-        cols = attrs.get('cols')
-        if not cols:
-            # Calculate column count from number of items in first line.
-            if self.parameters.format == 'csv':
-                cols = text[0].count(self.parameters.separator) + 1
-            else:
-                cols = 0
-                for cell in self.parse_psv_dsv(text[:1]):
-                    cols += cell.span
-        self.parse_cols(cols, attrs.get('halign'), attrs.get('valign'))
-        # Set calculated attributes.
-        self.attributes['colcount'] = len(self.columns)
-        self.build_colspecs()
-        self.parse_rows(text)
-        # The 'rowcount' attribute is used by the experimental LaTeX backend.
-        self.attributes['rowcount'] = str(len(self.rows))
-        # Generate headrows, footrows, bodyrows.
-        # Headrow, footrow and bodyrow data replaces same named attributes in
-        # the table markup template. In order to ensure this data does not get
-        # a second attribute substitution (which would interfere with any
-        # already substituted inline passthroughs) unique placeholders are used
-        # (the tab character does not appear elsewhere since it is expanded on
-        # input) which are replaced after template attribute substitution.
-        headrows = footrows = bodyrows = None
-        if self.rows and 'header' in self.parameters.options:
-            headrows = self.subs_rows(self.rows[0:1],'header')
-            self.attributes['headrows'] = '\x07headrows\x07'
-            self.rows = self.rows[1:]
-        if self.rows and 'footer' in self.parameters.options:
-            footrows = self.subs_rows( self.rows[-1:], 'footer')
-            self.attributes['footrows'] = '\x07footrows\x07'
-            self.rows = self.rows[:-1]
-        if self.rows:
-            bodyrows = self.subs_rows(self.rows)
-            self.attributes['bodyrows'] = '\x07bodyrows\x07'
-        table = subs_attrs(config.sections[self.parameters.template],
-                           self.attributes)
-        table = writer.newline.join(table)
-        # Before we finish replace the table head, foot and body place holders
-        # with the real data.
-        if headrows:
-            table = table.replace('\x07headrows\x07', headrows, 1)
-        if footrows:
-            table = table.replace('\x07footrows\x07', footrows, 1)
-        if bodyrows:
-            table = table.replace('\x07bodyrows\x07', bodyrows, 1)
-        writer.write(table,trace='table')
-        self.pop_blockname()
-
-class Tables(AbstractBlocks):
-    """List of tables."""
-    BLOCK_TYPE = Table
-    PREFIX = 'tabledef-'
-    TAGS = ('colspec', 'headrow','footrow','bodyrow',
-            'headdata','footdata', 'bodydata','paragraph')
-    def __init__(self):
-        AbstractBlocks.__init__(self)
-        # Table tags dictionary. Each entry is a tags dictionary.
-        self.tags={}
-    def load(self,sections):
-        AbstractBlocks.load(self,sections)
-        self.load_tags(sections)
-    def load_tags(self,sections):
-        """
-        Load tabletags-* conf file sections to self.tags.
-        """
-        for section in sections.keys():
-            mo = re.match(r'^tabletags-(?P<name>\w+)$',section)
-            if mo:
-                name = mo.group('name')
-                if name in self.tags:
-                    d = self.tags[name]
-                else:
-                    d = AttrDict()
-                parse_entries(sections.get(section,()),d)
-                for k in d.keys():
-                    if k not in self.TAGS:
-                        message.warning('[%s] contains illegal table tag: %s' %
-                                (section,k))
-                self.tags[name] = d
-    def validate(self):
-        AbstractBlocks.validate(self)
-        # Check we have a default table definition,
-        for i in range(len(self.blocks)):
-            if self.blocks[i].defname == 'tabledef-default':
-                default = self.blocks[i]
-                break
-        else:
-            raise EAsciiDoc,'missing section: [tabledef-default]'
-        # Propagate defaults to unspecified table parameters.
-        for b in self.blocks:
-            if b is not default:
-                if b.format is None: b.format = default.format
-                if b.template is None: b.template = default.template
-        # Check tags and propagate default tags.
-        if not 'default' in self.tags:
-            raise EAsciiDoc,'missing section: [tabletags-default]'
-        default = self.tags['default']
-        for tag in ('bodyrow','bodydata','paragraph'): # Mandatory default tags.
-            if tag not in default:
-                raise EAsciiDoc,'missing [tabletags-default] entry: %s' % tag
-        for t in self.tags.values():
-            if t is not default:
-                if t.colspec is None: t.colspec = default.colspec
-                if t.headrow is None: t.headrow = default.headrow
-                if t.footrow is None: t.footrow = default.footrow
-                if t.bodyrow is None: t.bodyrow = default.bodyrow
-                if t.headdata is None: t.headdata = default.headdata
-                if t.footdata is None: t.footdata = default.footdata
-                if t.bodydata is None: t.bodydata = default.bodydata
-                if t.paragraph is None: t.paragraph = default.paragraph
-        # Use body tags if header and footer tags are not specified.
-        for t in self.tags.values():
-            if not t.headrow: t.headrow = t.bodyrow
-            if not t.footrow: t.footrow = t.bodyrow
-            if not t.headdata: t.headdata = t.bodydata
-            if not t.footdata: t.footdata = t.bodydata
-        # Check table definitions are valid.
-        for b in self.blocks:
-            b.validate()
-    def dump(self):
-        AbstractBlocks.dump(self)
-        for k,v in self.tags.items():
-            dump_section('tabletags-'+k, v)
-
-class Macros:
-    # Default system macro syntax.
-    SYS_RE = r'(?u)^(?P<name>[\\]?\w(\w|-)*?)::(?P<target>\S*?)' + \
-             r'(\[(?P<attrlist>.*?)\])$'
-    def __init__(self):
-        self.macros = []        # List of Macros.
-        self.current = None     # The last matched block macro.
-        self.passthroughs = []
-        # Initialize default system macro.
-        m = Macro()
-        m.pattern = self.SYS_RE
-        m.prefix = '+'
-        m.reo = re.compile(m.pattern)
-        self.macros.append(m)
-    def load(self,entries):
-        for entry in entries:
-            m = Macro()
-            m.load(entry)
-            if m.name is None:
-                # Delete undefined macro.
-                for i,m2 in enumerate(self.macros):
-                    if m2.pattern == m.pattern:
-                        del self.macros[i]
-                        break
-                else:
-                    message.warning('unable to delete missing macro: %s' % m.pattern)
-            else:
-                # Check for duplicates.
-                for m2 in self.macros:
-                    if m2.pattern == m.pattern:
-                        message.verbose('macro redefinition: %s%s' % (m.prefix,m.name))
-                        break
-                else:
-                    self.macros.append(m)
-    def dump(self):
-        write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline))
-        write('[macros]')
-        # Dump all macros except the first (built-in system) macro.
-        for m in self.macros[1:]:
-            # Escape = in pattern.
-            macro = '%s=%s%s' % (m.pattern.replace('=',r'\='), m.prefix, m.name)
-            if m.subslist is not None:
-                macro += '[' + ','.join(m.subslist) + ']'
-            write(macro)
-        write('')
-    def validate(self):
-        # Check all named sections exist.
-        if config.verbose:
-            for m in self.macros:
-                if m.name and m.prefix != '+':
-                    m.section_name()
-    def subs(self,text,prefix='',callouts=False):
-        # If callouts is True then only callout macros are processed, if False
-        # then all non-callout macros are processed.
-        result = text
-        for m in self.macros:
-            if m.prefix == prefix:
-                if callouts ^ (m.name != 'callout'):
-                    result = m.subs(result)
-        return result
-    def isnext(self):
-        """Return matching macro if block macro is next on reader."""
-        reader.skip_blank_lines()
-        line = reader.read_next()
-        if line:
-            for m in self.macros:
-                if m.prefix == '#':
-                    if m.reo.match(line):
-                        self.current = m
-                        return m
-        return False
-    def match(self,prefix,name,text):
-        """Return re match object matching 'text' with macro type 'prefix',
-        macro name 'name'."""
-        for m in self.macros:
-            if m.prefix == prefix:
-                mo = m.reo.match(text)
-                if mo:
-                    if m.name == name:
-                        return mo
-                    if re.match(name, mo.group('name')):
-                        return mo
-        return None
-    def extract_passthroughs(self,text,prefix=''):
-        """ Extract the passthrough text and replace with temporary
-        placeholders."""
-        self.passthroughs = []
-        for m in self.macros:
-            if m.has_passthrough() and m.prefix == prefix:
-                text = m.subs_passthroughs(text, self.passthroughs)
-        return text
-    def restore_passthroughs(self,text):
-        """ Replace passthough placeholders with the original passthrough
-        text."""
-        for i,v in enumerate(self.passthroughs):
-            text = text.replace('\x07'+str(i)+'\x07', self.passthroughs[i])
-        return text
-
-class Macro:
-    def __init__(self):
-        self.pattern = None     # Matching regular expression.
-        self.name = ''          # Conf file macro name (None if implicit).
-        self.prefix = ''        # '' if inline, '+' if system, '#' if block.
-        self.reo = None         # Compiled pattern re object.
-        self.subslist = []      # Default subs for macros passtext group.
-    def has_passthrough(self):
-        return self.pattern.find(r'(?P<passtext>') >= 0
-    def section_name(self,name=None):
-        """Return macro markup template section name based on macro name and
-        prefix.  Return None section not found."""
-        assert self.prefix != '+'
-        if not name:
-            assert self.name
-            name = self.name
-        if self.prefix == '#':
-            suffix = '-blockmacro'
-        else:
-            suffix = '-inlinemacro'
-        if name+suffix in config.sections:
-            return name+suffix
-        else:
-            message.warning('missing macro section: [%s]' % (name+suffix))
-            return None
-    def load(self,entry):
-        e = parse_entry(entry)
-        if e is None:
-            # Only the macro pattern was specified, mark for deletion.
-            self.name = None
-            self.pattern = entry
-            return
-        if not is_re(e[0]):
-            raise EAsciiDoc,'illegal macro regular expression: %s' % e[0]
-        pattern, name = e
-        if name and name[0] in ('+','#'):
-            prefix, name = name[0], name[1:]
-        else:
-            prefix = ''
-        # Parse passthrough subslist.
-        mo = re.match(r'^(?P<name>[^[]*)(\[(?P<subslist>.*)\])?$', name)
-        name = mo.group('name')
-        if name and not is_name(name):
-            raise EAsciiDoc,'illegal section name in macro entry: %s' % entry
-        subslist = mo.group('subslist')
-        if subslist is not None:
-            # Parse and validate passthrough subs.
-            subslist = parse_options(subslist, SUBS_OPTIONS,
-                                 'illegal subs in macro entry: %s' % entry)
-        self.pattern = pattern
-        self.reo = re.compile(pattern)
-        self.prefix = prefix
-        self.name = name
-        self.subslist = subslist or []
-
-    def subs(self,text):
-        def subs_func(mo):
-            """Function called to perform macro substitution.
-            Uses matched macro regular expression object and returns string
-            containing the substituted macro body."""
-            # Check if macro reference is escaped.
-            if mo.group()[0] == '\\':
-                return mo.group()[1:]   # Strip leading backslash.
-            d = mo.groupdict()
-            # Delete groups that didn't participate in match.
-            for k,v in d.items():
-                if v is None: del d[k]
-            if self.name:
-                name = self.name
-            else:
-                if not 'name' in d:
-                    message.warning('missing macro name group: %s' % mo.re.pattern)
-                    return ''
-                name = d['name']
-            section_name = self.section_name(name)
-            if not section_name:
-                return ''
-            # If we're dealing with a block macro get optional block ID and
-            # block title.
-            if self.prefix == '#' and self.name != 'comment':
-                AttributeList.consume(d)
-                BlockTitle.consume(d)
-            # Parse macro attributes.
-            if 'attrlist' in d:
-                if d['attrlist'] in (None,''):
-                    del d['attrlist']
-                else:
-                    if self.prefix == '':
-                        # Unescape ] characters in inline macros.
-                        d['attrlist'] = d['attrlist'].replace('\\]',']')
-                    parse_attributes(d['attrlist'],d)
-                    # Generate option attributes.
-                    if 'options' in d:
-                        options = parse_options(d['options'], (),
-                                '%s: illegal option name' % name)
-                        for option in options:
-                            d[option+'-option'] = ''
-                    # Substitute single quoted attribute values in block macros.
-                    if self.prefix == '#':
-                        AttributeList.subs(d)
-            if name == 'callout':
-                listindex =int(d['index'])
-                d['coid'] = calloutmap.add(listindex)
-            # The alt attribute is the first image macro positional attribute.
-            if name == 'image' and '1' in d:
-                d['alt'] = d['1']
-            # Unescape special characters in LaTeX target file names.
-            if document.backend == 'latex' and 'target' in d and d['target']:
-                if not '0' in d:
-                    d['0'] = d['target']
-                d['target']= config.subs_specialchars_reverse(d['target'])
-            # BUG: We've already done attribute substitution on the macro which
-            # means that any escaped attribute references are now unescaped and
-            # will be substituted by config.subs_section() below. As a partial
-            # fix have withheld {0} from substitution but this kludge doesn't
-            # fix it for other attributes containing unescaped references.
-            # Passthrough macros don't have this problem.
-            a0 = d.get('0')
-            if a0:
-                d['0'] = chr(0)  # Replace temporarily with unused character.
-            body = config.subs_section(section_name,d)
-            if len(body) == 0:
-                result = ''
-            elif len(body) == 1:
-                result = body[0]
-            else:
-                if self.prefix == '#':
-                    result = writer.newline.join(body)
-                else:
-                    # Internally processed inline macros use UNIX line
-                    # separator.
-                    result = '\n'.join(body)
-            if a0:
-                result = result.replace(chr(0), a0)
-            return result
-
-        return self.reo.sub(subs_func, text)
-
-    def translate(self):
-        """ Block macro translation."""
-        assert self.prefix == '#'
-        s = reader.read()
-        before = s
-        if self.has_passthrough():
-            s = macros.extract_passthroughs(s,'#')
-        s = subs_attrs(s)
-        if s:
-            s = self.subs(s)
-            if self.has_passthrough():
-                s = macros.restore_passthroughs(s)
-            if s:
-                trace('macro block',before,s)
-                writer.write(s)
-
-    def subs_passthroughs(self, text, passthroughs):
-        """ Replace macro attribute lists in text with placeholders.
-        Substitute and append the passthrough attribute lists to the
-        passthroughs list."""
-        def subs_func(mo):
-            """Function called to perform inline macro substitution.
-            Uses matched macro regular expression object and returns string
-            containing the substituted macro body."""
-            # Don't process escaped macro references.
-            if mo.group()[0] == '\\':
-                return mo.group()
-            d = mo.groupdict()
-            if not 'passtext' in d:
-                message.warning('passthrough macro %s: missing passtext group' %
-                        d.get('name',''))
-                return mo.group()
-            passtext = d['passtext']
-            if re.search('\x07\\d+\x07', passtext):
-                message.warning('nested inline passthrough')
-                return mo.group()
-            if d.get('subslist'):
-                if d['subslist'].startswith(':'):
-                    message.error('block macro cannot occur here: %s' % mo.group(),
-                          halt=True)
-                subslist = parse_options(d['subslist'], SUBS_OPTIONS,
-                          'illegal passthrough macro subs option')
-            else:
-                subslist = self.subslist
-            passtext = Lex.subs_1(passtext,subslist)
-            if passtext is None: passtext = ''
-            if self.prefix == '':
-                # Unescape ] characters in inline macros.
-                passtext = passtext.replace('\\]',']')
-            passthroughs.append(passtext)
-            # Tabs guarantee the placeholders are unambiguous.
-            result = (
-                text[mo.start():mo.start('passtext')] +
-                '\x07' + str(len(passthroughs)-1) + '\x07' +
-                text[mo.end('passtext'):mo.end()]
-            )
-            return result
-
-        return self.reo.sub(subs_func, text)
-
-
-class CalloutMap:
-    def __init__(self):
-        self.comap = {}         # key = list index, value = callouts list.
-        self.calloutindex = 0   # Current callout index number.
-        self.listnumber = 1     # Current callout list number.
-    def listclose(self):
-        # Called when callout list is closed.
-        self.listnumber += 1
-        self.calloutindex = 0
-        self.comap = {}
-    def add(self,listindex):
-        # Add next callout index to listindex map entry. Return the callout id.
-        self.calloutindex += 1
-        # Append the coindex to a list in the comap dictionary.
-        if not listindex in self.comap:
-            self.comap[listindex] = [self.calloutindex]
-        else:
-            self.comap[listindex].append(self.calloutindex)
-        return self.calloutid(self.listnumber, self.calloutindex)
-    @staticmethod
-    def calloutid(listnumber,calloutindex):
-        return 'CO%d-%d' % (listnumber,calloutindex)
-    def calloutids(self,listindex):
-        # Retieve list of callout indexes that refer to listindex.
-        if listindex in self.comap:
-            result = ''
-            for coindex in self.comap[listindex]:
-                result += ' ' + self.calloutid(self.listnumber,coindex)
-            return result.strip()
-        else:
-            message.warning('no callouts refer to list item '+str(listindex))
-            return ''
-    def validate(self,maxlistindex):
-        # Check that all list indexes referenced by callouts exist.
-        for listindex in self.comap.keys():
-            if listindex > maxlistindex:
-                message.warning('callout refers to non-existent list item '
-                        + str(listindex))
-
-#---------------------------------------------------------------------------
-# Input stream Reader and output stream writer classes.
-#---------------------------------------------------------------------------
-
-UTF8_BOM = '\xef\xbb\xbf'
-
-class Reader1:
-    """Line oriented AsciiDoc input file reader. Processes include and
-    conditional inclusion system macros. Tabs are expanded and lines are right
-    trimmed."""
-    # This class is not used directly, use Reader class instead.
-    READ_BUFFER_MIN = 10        # Read buffer low level.
-    def __init__(self):
-        self.f = None           # Input file object.
-        self.fname = None       # Input file name.
-        self.next = []          # Read ahead buffer containing
-                                # [filename,linenumber,linetext] lists.
-        self.cursor = None      # Last read() [filename,linenumber,linetext].
-        self.tabsize = 8        # Tab expansion number of spaces.
-        self.parent = None      # Included reader's parent reader.
-        self._lineno = 0        # The last line read from file object f.
-        self.current_depth = 0  # Current include depth.
-        self.max_depth = 10     # Initial maxiumum allowed include depth.
-        self.bom = None         # Byte order mark (BOM).
-        self.infile = None      # Saved document 'infile' attribute.
-        self.indir = None       # Saved document 'indir' attribute.
-    def open(self,fname):
-        self.fname = fname
-        message.verbose('reading: '+fname)
-        if fname == '<stdin>':
-            self.f = sys.stdin
-            self.infile = None
-            self.indir = None
-        else:
-            self.f = open(fname,'rb')
-            self.infile = fname
-            self.indir = os.path.dirname(fname)
-        document.attributes['infile'] = self.infile
-        document.attributes['indir'] = self.indir
-        self._lineno = 0            # The last line read from file object f.
-        self.next = []
-        # Prefill buffer by reading the first line and then pushing it back.
-        if Reader1.read(self):
-            if self.cursor[2].startswith(UTF8_BOM):
-                self.cursor[2] = self.cursor[2][len(UTF8_BOM):]
-                self.bom = UTF8_BOM
-            self.unread(self.cursor)
-            self.cursor = None
-    def closefile(self):
-        """Used by class methods to close nested include files."""
-        self.f.close()
-        self.next = []
-    def close(self):
-        self.closefile()
-        self.__init__()
-    def read(self, skip=False):
-        """Read next line. Return None if EOF. Expand tabs. Strip trailing
-        white space. Maintain self.next read ahead buffer. If skip=True then
-        conditional exclusion is active (ifdef and ifndef macros)."""
-        # Top up buffer.
-        if len(self.next) <= self.READ_BUFFER_MIN:
-            s = self.f.readline()
-            if s:
-                self._lineno = self._lineno + 1
-            while s:
-                if self.tabsize != 0:
-                    s = s.expandtabs(self.tabsize)
-                s = s.rstrip()
-                self.next.append([self.fname,self._lineno,s])
-                if len(self.next) > self.READ_BUFFER_MIN:
-                    break
-                s = self.f.readline()
-                if s:
-                    self._lineno = self._lineno + 1
-        # Return first (oldest) buffer entry.
-        if len(self.next) > 0:
-            self.cursor = self.next[0]
-            del self.next[0]
-            result = self.cursor[2]
-            # Check for include macro.
-            mo = macros.match('+',r'^include[1]?$',result)
-            if mo and not skip:
-                # Parse include macro attributes.
-                attrs = {}
-                parse_attributes(mo.group('attrlist'),attrs)
-                warnings = attrs.get('warnings', True)
-                # Don't process include macro once the maximum depth is reached.
-                if self.current_depth >= self.max_depth:
-                    message.warning('maximum include depth exceeded')
-                    return result
-                # Perform attribute substitution on include macro file name.
-                fname = subs_attrs(mo.group('target'))
-                if not fname:
-                    return Reader1.read(self)   # Return next input line.
-                if self.fname != '<stdin>':
-                    fname = os.path.expandvars(os.path.expanduser(fname))
-                    fname = safe_filename(fname, os.path.dirname(self.fname))
-                    if not fname:
-                        return Reader1.read(self)   # Return next input line.
-                    if not os.path.isfile(fname):
-                        if warnings:
-                            message.warning('include file not found: %s' % fname)
-                        return Reader1.read(self)   # Return next input line.
-                    if mo.group('name') == 'include1':
-                        if not config.dumping:
-                            if fname not in config.include1:
-                                message.verbose('include1: ' + fname, linenos=False)
-                                # Store the include file in memory for later
-                                # retrieval by the {include1:} system attribute.
-                                f = open(fname)
-                                try:
-                                    config.include1[fname] = [
-                                        s.rstrip() for s in f]
-                                finally:
-                                    f.close()
-                            return '{include1:%s}' % fname
-                        else:
-                            # This is a configuration dump, just pass the macro
-                            # call through.
-                            return result
-                # Clone self and set as parent (self assumes the role of child).
-                parent = Reader1()
-                assign(parent,self)
-                self.parent = parent
-                # Set attributes in child.
-                if 'tabsize' in attrs:
-                    try:
-                        val = int(attrs['tabsize'])
-                        if not val >= 0:
-                            raise ValueError, 'not >= 0'
-                        self.tabsize = val
-                    except ValueError:
-                        raise EAsciiDoc, 'illegal include macro tabsize argument'
-                else:
-                    self.tabsize = config.tabsize
-                if 'depth' in attrs:
-                    try:
-                        val = int(attrs['depth'])
-                        if not val >= 1:
-                            raise ValueError, 'not >= 1'
-                        self.max_depth = self.current_depth + val
-                    except ValueError:
-                        raise EAsciiDoc, "include macro: illegal 'depth' argument"
-                # Process included file.
-                message.verbose('include: ' + fname, linenos=False)
-                self.open(fname)
-                self.current_depth = self.current_depth + 1
-                result = Reader1.read(self)
-        else:
-            if not Reader1.eof(self):
-                result = Reader1.read(self)
-            else:
-                result = None
-        return result
-    def eof(self):
-        """Returns True if all lines have been read."""
-        if len(self.next) == 0:
-            # End of current file.
-            if self.parent:
-                self.closefile()
-                assign(self,self.parent)    # Restore parent reader.
-                document.attributes['infile'] = self.infile
-                document.attributes['indir'] = self.indir
-                return Reader1.eof(self)
-            else:
-                return True
-        else:
-            return False
-    def read_next(self):
-        """Like read() but does not advance file pointer."""
-        if Reader1.eof(self):
-            return None
-        else:
-            return self.next[0][2]
-    def unread(self,cursor):
-        """Push the line (filename,linenumber,linetext) tuple back into the read
-        buffer. Note that it's up to the caller to restore the previous
-        cursor."""
-        assert cursor
-        self.next.insert(0,cursor)
-
-class Reader(Reader1):
-    """ Wraps (well, sought of) Reader1 class and implements conditional text
-    inclusion."""
-    def __init__(self):
-        Reader1.__init__(self)
-        self.depth = 0          # if nesting depth.
-        self.skip = False       # true if we're skipping ifdef...endif.
-        self.skipname = ''      # Name of current endif macro target.
-        self.skipto = -1        # The depth at which skipping is reenabled.
-    def read_super(self):
-        result = Reader1.read(self,self.skip)
-        if result is None and self.skip:
-            raise EAsciiDoc,'missing endif::%s[]' % self.skipname
-        return result
-    def read(self):
-        result = self.read_super()
-        if result is None:
-            return None
-        while self.skip:
-            mo = macros.match('+',r'ifdef|ifndef|ifeval|endif',result)
-            if mo:
-                name = mo.group('name')
-                target = mo.group('target')
-                attrlist = mo.group('attrlist')
-                if name == 'endif':
-                    self.depth -= 1
-                    if self.depth < 0:
-                        raise EAsciiDoc,'mismatched macro: %s' % result
-                    if self.depth == self.skipto:
-                        self.skip = False
-                        if target and self.skipname != target:
-                            raise EAsciiDoc,'mismatched macro: %s' % result
-                else:
-                    if name in ('ifdef','ifndef'):
-                        if not target:
-                            raise EAsciiDoc,'missing macro target: %s' % result
-                        if not attrlist:
-                            self.depth += 1
-                    elif name == 'ifeval':
-                        if not attrlist:
-                            raise EAsciiDoc,'missing ifeval condition: %s' % result
-                        self.depth += 1
-            result = self.read_super()
-            if result is None:
-                return None
-        mo = macros.match('+',r'ifdef|ifndef|ifeval|endif',result)
-        if mo:
-            name = mo.group('name')
-            target = mo.group('target')
-            attrlist = mo.group('attrlist')
-            if name == 'endif':
-                self.depth = self.depth-1
-            else:
-                if not target and name in ('ifdef','ifndef'):
-                    raise EAsciiDoc,'missing macro target: %s' % result
-                defined = is_attr_defined(target, document.attributes)
-                if name == 'ifdef':
-                    if attrlist:
-                        if defined: return attrlist
-                    else:
-                        self.skip = not defined
-                elif name == 'ifndef':
-                    if attrlist:
-                        if not defined: return attrlist
-                    else:
-                        self.skip = defined
-                elif name == 'ifeval':
-                    if safe():
-                        message.unsafe('ifeval invalid')
-                        raise EAsciiDoc,'ifeval invalid safe document'
-                    if not attrlist:
-                        raise EAsciiDoc,'missing ifeval condition: %s' % result
-                    cond = False
-                    attrlist = subs_attrs(attrlist)
-                    if attrlist:
-                        try:
-                            cond = eval(attrlist)
-                        except Exception,e:
-                            raise EAsciiDoc,'error evaluating ifeval condition: %s: %s' % (result, str(e))
-                        message.verbose('ifeval: %s: %r' % (attrlist, cond))
-                    self.skip = not cond
-                if not attrlist or name == 'ifeval':
-                    if self.skip:
-                        self.skipto = self.depth
-                        self.skipname = target
-                    self.depth = self.depth+1
-            result = self.read()
-        if result:
-            # Expand executable block macros.
-            mo = macros.match('+',r'eval|sys|sys2',result)
-            if mo:
-                action = mo.group('name')
-                cmd = mo.group('attrlist')
-                result = system(action, cmd, is_macro=True)
-                self.cursor[2] = result  # So we don't re-evaluate.
-        if result:
-            # Unescape escaped system macros.
-            if macros.match('+',r'\\eval|\\sys|\\sys2|\\ifdef|\\ifndef|\\endif|\\include|\\include1',result):
-                result = result[1:]
-        return result
-    def eof(self):
-        return self.read_next() is None
-    def read_next(self):
-        save_cursor = self.cursor
-        result = self.read()
-        if result is not None:
-            self.unread(self.cursor)
-            self.cursor = save_cursor
-        return result
-    def read_lines(self,count=1):
-        """Return tuple containing count lines."""
-        result = []
-        i = 0
-        while i < count and not self.eof():
-            result.append(self.read())
-        return tuple(result)
-    def read_ahead(self,count=1):
-        """Same as read_lines() but does not advance the file pointer."""
-        result = []
-        putback = []
-        save_cursor = self.cursor
-        try:
-            i = 0
-            while i < count and not self.eof():
-                result.append(self.read())
-                putback.append(self.cursor)
-                i = i+1
-            while putback:
-                self.unread(putback.pop())
-        finally:
-            self.cursor = save_cursor
-        return tuple(result)
-    def skip_blank_lines(self):
-        reader.read_until(r'\s*\S+')
-    def read_until(self,terminators,same_file=False):
-        """Like read() but reads lines up to (but not including) the first line
-        that matches the terminator regular expression, regular expression
-        object or list of regular expression objects. If same_file is True then
-        the terminating pattern must occur in the file the was being read when
-        the routine was called."""
-        if same_file:
-            fname = self.cursor[0]
-        result = []
-        if not isinstance(terminators,list):
-            if isinstance(terminators,basestring):
-                terminators = [re.compile(terminators)]
-            else:
-                terminators = [terminators]
-        while not self.eof():
-            save_cursor = self.cursor
-            s = self.read()
-            if not same_file or fname == self.cursor[0]:
-                for reo in terminators:
-                    if reo.match(s):
-                        self.unread(self.cursor)
-                        self.cursor = save_cursor
-                        return tuple(result)
-            result.append(s)
-        return tuple(result)
-
-class Writer:
-    """Writes lines to output file."""
-    def __init__(self):
-        self.newline = '\r\n'            # End of line terminator.
-        self.f = None                    # Output file object.
-        self.fname = None                # Output file name.
-        self.lines_out = 0               # Number of lines written.
-        self.skip_blank_lines = False    # If True don't output blank lines.
-    def open(self,fname,bom=None):
-        '''
-        bom is optional byte order mark.
-        http://en.wikipedia.org/wiki/Byte-order_mark
-        '''
-        self.fname = fname
-        if fname == '<stdout>':
-            self.f = sys.stdout
-        else:
-            self.f = open(fname,'wb+')
-        message.verbose('writing: '+writer.fname,False)
-        if bom:
-            self.f.write(bom)
-        self.lines_out = 0
-    def close(self):
-        if self.fname != '<stdout>':
-            self.f.close()
-    def write_line(self, line=None):
-        if not (self.skip_blank_lines and (not line or not line.strip())):
-            self.f.write((line or '') + self.newline)
-            self.lines_out = self.lines_out + 1
-    def write(self,*args,**kwargs):
-        """Iterates arguments, writes tuple and list arguments one line per
-        element, else writes argument as single line. If no arguments writes
-        blank line. If argument is None nothing is written. self.newline is
-        appended to each line."""
-        if 'trace' in kwargs and len(args) > 0:
-            trace(kwargs['trace'],args[0])
-        if len(args) == 0:
-            self.write_line()
-            self.lines_out = self.lines_out + 1
-        else:
-            for arg in args:
-                if is_array(arg):
-                    for s in arg:
-                        self.write_line(s)
-                elif arg is not None:
-                    self.write_line(arg)
-    def write_tag(self,tag,content,subs=None,d=None,**kwargs):
-        """Write content enveloped by tag.
-        Substitutions specified in the 'subs' list are perform on the
-        'content'."""
-        if subs is None:
-            subs = config.subsnormal
-        stag,etag = subs_tag(tag,d)
-        content = Lex.subs(content,subs)
-        if 'trace' in kwargs:
-            trace(kwargs['trace'],[stag]+content+[etag])
-        if stag:
-            self.write(stag)
-        if content:
-            self.write(content)
-        if etag:
-            self.write(etag)
-
-#---------------------------------------------------------------------------
-# Configuration file processing.
-#---------------------------------------------------------------------------
-def _subs_specialwords(mo):
-    """Special word substitution function called by
-    Config.subs_specialwords()."""
-    word = mo.re.pattern                    # The special word.
-    template = config.specialwords[word]    # The corresponding markup template.
-    if not template in config.sections:
-        raise EAsciiDoc,'missing special word template [%s]' % template
-    if mo.group()[0] == '\\':
-        return mo.group()[1:]   # Return escaped word.
-    args = {}
-    args['words'] = mo.group()  # The full match string is argument 'words'.
-    args.update(mo.groupdict()) # Add other named match groups to the arguments.
-    # Delete groups that didn't participate in match.
-    for k,v in args.items():
-        if v is None: del args[k]
-    lines = subs_attrs(config.sections[template],args)
-    if len(lines) == 0:
-        result = ''
-    elif len(lines) == 1:
-        result = lines[0]
-    else:
-        result = writer.newline.join(lines)
-    return result
-
-class Config:
-    """Methods to process configuration files."""
-    # Non-template section name regexp's.
-    ENTRIES_SECTIONS= ('tags','miscellaneous','attributes','specialcharacters',
-            'specialwords','macros','replacements','quotes','titles',
-            r'paradef-.+',r'listdef-.+',r'blockdef-.+',r'tabledef-.+',
-            r'tabletags-.+',r'listtags-.+','replacements[23]',
-            r'old_tabledef-.+')
-    def __init__(self):
-        self.sections = OrderedDict()   # Keyed by section name containing
-                                        # lists of section lines.
-        # Command-line options.
-        self.verbose = False
-        self.header_footer = True       # -s, --no-header-footer option.
-        # [miscellaneous] section.
-        self.tabsize = 8
-        self.textwidth = 70             # DEPRECATED: Old tables only.
-        self.newline = '\r\n'
-        self.pagewidth = None
-        self.pageunits = None
-        self.outfilesuffix = ''
-        self.subsnormal = SUBS_NORMAL
-        self.subsverbatim = SUBS_VERBATIM
-
-        self.tags = {}          # Values contain (stag,etag) tuples.
-        self.specialchars = {}  # Values of special character substitutions.
-        self.specialwords = {}  # Name is special word pattern, value is macro.
-        self.replacements = OrderedDict()   # Key is find pattern, value is
-                                            #replace pattern.
-        self.replacements2 = OrderedDict()
-        self.replacements3 = OrderedDict()
-        self.specialsections = {} # Name is special section name pattern, value
-                                  # is corresponding section name.
-        self.quotes = OrderedDict()    # Values contain corresponding tag name.
-        self.fname = ''         # Most recently loaded configuration file name.
-        self.conf_attrs = {}    # Attributes entries from conf files.
-        self.cmd_attrs = {}     # Attributes from command-line -a options.
-        self.loaded = []        # Loaded conf files.
-        self.include1 = {}      # Holds include1::[] files for {include1:}.
-        self.dumping = False    # True if asciidoc -c option specified.
-        self.filters = []       # Filter names specified by --filter option.
-
-    def init(self, cmd):
-        """
-        Check Python version and locate the executable and configuration files
-        directory.
-        cmd is the asciidoc command or asciidoc.py path.
-        """
-        if float(sys.version[:3]) < float(MIN_PYTHON_VERSION):
-            message.stderr('FAILED: Python %s or better required' %
-                    MIN_PYTHON_VERSION)
-            sys.exit(1)
-        if not os.path.exists(cmd):
-            message.stderr('FAILED: Missing asciidoc command: %s' % cmd)
-            sys.exit(1)
-        global APP_FILE
-        APP_FILE = os.path.realpath(cmd)
-        global APP_DIR
-        APP_DIR = os.path.dirname(APP_FILE)
-        global USER_DIR
-        USER_DIR = userdir()
-        if USER_DIR is not None:
-            USER_DIR = os.path.join(USER_DIR,'.asciidoc')
-            if not os.path.isdir(USER_DIR):
-                USER_DIR = None
-
-    def load_file(self, fname, dir=None, include=[], exclude=[]):
-        """
-        Loads sections dictionary with sections from file fname.
-        Existing sections are overlaid.
-        The 'include' list contains the section names to be loaded.
-        The 'exclude' list contains section names not to be loaded.
-        Return False if no file was found in any of the locations.
-        """
-        def update_section(section):
-            """ Update section in sections with contents. """
-            if section and contents:
-                if section in sections and self.entries_section(section):
-                    if ''.join(contents):
-                        # Merge entries.
-                        sections[section] += contents
-                    else:
-                        del sections[section]
-                else:
-                    if section.startswith('+'):
-                        # Append section.
-                        if section in sections:
-                            sections[section] += contents
-                        else:
-                            sections[section] = contents
-                    else:
-                        # Replace section.
-                        sections[section] = contents
-        if dir:
-            fname = os.path.join(dir, fname)
-        # Sliently skip missing configuration file.
-        if not os.path.isfile(fname):
-            return False
-        # Don't load conf files twice (local and application conf files are the
-        # same if the source file is in the application directory).
-        if os.path.realpath(fname) in self.loaded:
-            return True
-        rdr = Reader()  # Reader processes system macros.
-        message.linenos = False         # Disable document line numbers.
-        rdr.open(fname)
-        message.linenos = None
-        self.fname = fname
-        reo = re.compile(r'(?u)^\[(?P<section>\+?[^\W\d][\w-]*)\]\s*$')
-        sections = OrderedDict()
-        section,contents = '',[]
-        while not rdr.eof():
-            s = rdr.read()
-            if s and s[0] == '#':       # Skip comment lines.
-                continue
-            if s[:2] == '\\#':          # Unescape lines starting with '#'.
-                s = s[1:]
-            s = s.rstrip()
-            found = reo.findall(s)
-            if found:
-                update_section(section) # Store previous section.
-                section = found[0].lower()
-                contents = []
-            else:
-                contents.append(s)
-        update_section(section)         # Store last section.
-        rdr.close()
-        if include:
-            for s in set(sections) - set(include):
-                del sections[s]
-        if exclude:
-            for s in set(sections) & set(exclude):
-                del sections[s]
-        attrs = {}
-        self.load_sections(sections,attrs)
-        if not include:
-            # If all sections are loaded mark this file as loaded.
-            self.loaded.append(os.path.realpath(fname))
-        document.update_attributes(attrs) # So they are available immediately.
-        return True
-
-    def load_sections(self,sections,attrs=None):
-        """
-        Loads sections dictionary. Each dictionary entry contains a
-        list of lines.
-        Updates 'attrs' with parsed [attributes] section entries.
-        """
-        # Delete trailing blank lines from sections.
-        for k in sections.keys():
-            for i in range(len(sections[k])-1,-1,-1):
-                if not sections[k][i]:
-                    del sections[k][i]
-                elif not self.entries_section(k):
-                    break
-        # Update new sections.
-        for k,v in sections.items():
-            if k.startswith('+'):
-                # Append section.
-                k = k[1:]
-                if k in self.sections:
-                    self.sections[k] += v
-                else:
-                    self.sections[k] = v
-            else:
-                # Replace section.
-                self.sections[k] = v
-        self.parse_tags()
-        # Internally [miscellaneous] section entries are just attributes.
-        d = {}
-        parse_entries(sections.get('miscellaneous',()), d, unquote=True,
-                allow_name_only=True)
-        parse_entries(sections.get('attributes',()), d, unquote=True,
-                allow_name_only=True)
-        update_attrs(self.conf_attrs,d)
-        if attrs is not None:
-            attrs.update(d)
-        d = {}
-        parse_entries(sections.get('titles',()),d)
-        Title.load(d)
-        parse_entries(sections.get('specialcharacters',()),self.specialchars,escape_delimiter=False)
-        parse_entries(sections.get('quotes',()),self.quotes)
-        self.parse_specialwords()
-        self.parse_replacements()
-        self.parse_replacements('replacements2')
-        self.parse_replacements('replacements3')
-        self.parse_specialsections()
-        paragraphs.load(sections)
-        lists.load(sections)
-        blocks.load(sections)
-        tables_OLD.load(sections)
-        tables.load(sections)
-        macros.load(sections.get('macros',()))
-
-    def get_load_dirs(self):
-        """
-        Return list of well known paths with conf files.
-        """
-        result = []
-        if localapp():
-            # Load from folders in asciidoc executable directory.
-            result.append(APP_DIR)
-        else:
-            # Load from global configuration directory.
-            result.append(CONF_DIR)
-        # Load configuration files from ~/.asciidoc if it exists.
-        if USER_DIR is not None:
-            result.append(USER_DIR)
-        return result
-
-    def find_in_dirs(self, filename, dirs=None):
-        """
-        Find conf files from dirs list.
-        Return list of found file paths.
-        Return empty list if not found in any of the locations.
-        """
-        result = []
-        if dirs is None:
-            dirs = self.get_load_dirs()
-        for d in dirs:
-            f = os.path.join(d,filename)
-            if os.path.isfile(f):
-                result.append(f)
-        return result
-
-    def load_from_dirs(self, filename, dirs=None, include=[]):
-        """
-        Load conf file from dirs list.
-        If dirs not specified try all the well known locations.
-        Return False if no file was sucessfully loaded.
-        """
-        count = 0
-        for f in self.find_in_dirs(filename,dirs):
-            if self.load_file(f, include=include):
-                count += 1
-        return count != 0
-
-    def load_backend(self, dirs=None):
-        """
-        Load the backend configuration files from dirs list.
-        If dirs not specified try all the well known locations.
-        If a <backend>.conf file was found return it's full path name,
-        if not found return None.
-        """
-        result = None
-        if dirs is None:
-            dirs = self.get_load_dirs()
-        conf = document.backend + '.conf'
-        conf2 = document.backend + '-' + document.doctype + '.conf'
-        # First search for filter backends.
-        for d in [os.path.join(d, 'backends', document.backend) for d in dirs]:
-            if self.load_file(conf,d):
-                result = os.path.join(d, conf)
-            self.load_file(conf2,d)
-        if not result:
-            # Search in the normal locations.
-            for d in dirs:
-                if self.load_file(conf,d):
-                    result = os.path.join(d, conf)
-                self.load_file(conf2,d)
-        return result
-
-    def load_filters(self, dirs=None):
-        """
-        Load filter configuration files from 'filters' directory in dirs list.
-        If dirs not specified try all the well known locations.  Suppress
-        loading if a file named __noautoload__ is in same directory as the conf
-        file unless the filter has been specified with the --filter
-        command-line option (in which case it is loaded unconditionally).
-        """
-        if dirs is None:
-            dirs = self.get_load_dirs()
-        for d in dirs:
-            # Load filter .conf files.
-            filtersdir = os.path.join(d,'filters')
-            for dirpath,dirnames,filenames in os.walk(filtersdir):
-                subdirs = dirpath[len(filtersdir):].split(os.path.sep)
-                # True if processing a filter specified by a --filter option.
-                filter_opt = len(subdirs) > 1 and subdirs[1] in self.filters
-                if '__noautoload__' not in filenames or filter_opt:
-                    for f in filenames:
-                        if re.match(r'^.+\.conf$',f):
-                            self.load_file(f,dirpath)
-
-    def find_config_dir(self, *dirnames):
-        """
-        Return path of configuration directory.
-        Try all the well known locations.
-        Return None if directory not found.
-        """
-        for d in [os.path.join(d, *dirnames) for d in self.get_load_dirs()]:
-            if os.path.isdir(d):
-                return d
-        return None
-
-    def set_theme_attributes(self):
-        theme = document.attributes.get('theme')
-        if theme and 'themedir' not in document.attributes:
-            themedir = self.find_config_dir('themes', theme)
-            if themedir:
-                document.attributes['themedir'] = themedir
-                iconsdir = os.path.join(themedir, 'icons')
-                if 'data-uri' in document.attributes and os.path.isdir(iconsdir):
-                    document.attributes['iconsdir'] = iconsdir
-            else:
-                message.warning('missing theme: %s' % theme, linenos=False)
-
-    def load_miscellaneous(self,d):
-        """Set miscellaneous configuration entries from dictionary 'd'."""
-        def set_if_int_gt_zero(name, d):
-            if name in d:
-                try:
-                    val = int(d[name])
-                    if not val > 0:
-                        raise ValueError, "not > 0"
-                    if val > 0:
-                        setattr(self, name, val)
-                except ValueError:
-                    raise EAsciiDoc, 'illegal [miscellaneous] %s entry' % name
-        set_if_int_gt_zero('tabsize', d)
-        set_if_int_gt_zero('textwidth', d) # DEPRECATED: Old tables only.
-
-        if 'pagewidth' in d:
-            try:
-                val = float(d['pagewidth'])
-                self.pagewidth = val
-            except ValueError:
-                raise EAsciiDoc, 'illegal [miscellaneous] pagewidth entry'
-
-        if 'pageunits' in d:
-            self.pageunits = d['pageunits']
-        if 'outfilesuffix' in d:
-            self.outfilesuffix = d['outfilesuffix']
-        if 'newline' in d:
-            # Convert escape sequences to their character values.
-            self.newline = literal_eval('"'+d['newline']+'"')
-        if 'subsnormal' in d:
-            self.subsnormal = parse_options(d['subsnormal'],SUBS_OPTIONS,
-                    'illegal [%s] %s: %s' %
-                    ('miscellaneous','subsnormal',d['subsnormal']))
-        if 'subsverbatim' in d:
-            self.subsverbatim = parse_options(d['subsverbatim'],SUBS_OPTIONS,
-                    'illegal [%s] %s: %s' %
-                    ('miscellaneous','subsverbatim',d['subsverbatim']))
-
-    def validate(self):
-        """Check the configuration for internal consistancy. Called after all
-        configuration files have been loaded."""
-        message.linenos = False     # Disable document line numbers.
-        # Heuristic to validate that at least one configuration file was loaded.
-        if not self.specialchars or not self.tags or not lists:
-            raise EAsciiDoc,'incomplete configuration files'
-        # Check special characters are only one character long.
-        for k in self.specialchars.keys():
-            if len(k) != 1:
-                raise EAsciiDoc,'[specialcharacters] ' \
-                                'must be a single character: %s' % k
-        # Check all special words have a corresponding inline macro body.
-        for macro in self.specialwords.values():
-            if not is_name(macro):
-                raise EAsciiDoc,'illegal special word name: %s' % macro
-            if not macro in self.sections:
-                message.warning('missing special word macro: [%s]' % macro)
-        # Check all text quotes have a corresponding tag.
-        for q in self.quotes.keys()[:]:
-            tag = self.quotes[q]
-            if not tag:
-                del self.quotes[q]  # Undefine quote.
-            else:
-                if tag[0] == '#':
-                    tag = tag[1:]
-                if not tag in self.tags:
-                    message.warning('[quotes] %s missing tag definition: %s' % (q,tag))
-        # Check all specialsections section names exist.
-        for k,v in self.specialsections.items():
-            if not v:
-                del self.specialsections[k]
-            elif not v in self.sections:
-                message.warning('missing specialsections section: [%s]' % v)
-        paragraphs.validate()
-        lists.validate()
-        blocks.validate()
-        tables_OLD.validate()
-        tables.validate()
-        macros.validate()
-        message.linenos = None
-
-    def entries_section(self,section_name):
-        """
-        Return True if conf file section contains entries, not a markup
-        template.
-        """
-        for name in self.ENTRIES_SECTIONS:
-            if re.match(name,section_name):
-                return True
-        return False
-
-    def dump(self):
-        """Dump configuration to stdout."""
-        # Header.
-        hdr = ''
-        hdr = hdr + '#' + writer.newline
-        hdr = hdr + '# Generated by AsciiDoc %s for %s %s.%s' % \
-            (VERSION,document.backend,document.doctype,writer.newline)
-        t = time.asctime(time.localtime(time.time()))
-        hdr = hdr + '# %s%s' % (t,writer.newline)
-        hdr = hdr + '#' + writer.newline
-        sys.stdout.write(hdr)
-        # Dump special sections.
-        # Dump only the configuration file and command-line attributes.
-        # [miscellanous] entries are dumped as part of the [attributes].
-        d = {}
-        d.update(self.conf_attrs)
-        d.update(self.cmd_attrs)
-        dump_section('attributes',d)
-        Title.dump()
-        dump_section('quotes',self.quotes)
-        dump_section('specialcharacters',self.specialchars)
-        d = {}
-        for k,v in self.specialwords.items():
-            if v in d:
-                d[v] = '%s "%s"' % (d[v],k)   # Append word list.
-            else:
-                d[v] = '"%s"' % k
-        dump_section('specialwords',d)
-        dump_section('replacements',self.replacements)
-        dump_section('replacements2',self.replacements2)
-        dump_section('replacements3',self.replacements3)
-        dump_section('specialsections',self.specialsections)
-        d = {}
-        for k,v in self.tags.items():
-            d[k] = '%s|%s' % v
-        dump_section('tags',d)
-        paragraphs.dump()
-        lists.dump()
-        blocks.dump()
-        tables_OLD.dump()
-        tables.dump()
-        macros.dump()
-        # Dump remaining sections.
-        for k in self.sections.keys():
-            if not self.entries_section(k):
-                sys.stdout.write('[%s]%s' % (k,writer.newline))
-                for line in self.sections[k]:
-                    sys.stdout.write('%s%s' % (line,writer.newline))
-                sys.stdout.write(writer.newline)
-
-    def subs_section(self,section,d):
-        """Section attribute substitution using attributes from
-        document.attributes and 'd'.  Lines containing undefinded
-        attributes are deleted."""
-        if section in self.sections:
-            return subs_attrs(self.sections[section],d)
-        else:
-            message.warning('missing section: [%s]' % section)
-            return ()
-
-    def parse_tags(self):
-        """Parse [tags] section entries into self.tags dictionary."""
-        d = {}
-        parse_entries(self.sections.get('tags',()),d)
-        for k,v in d.items():
-            if v is None:
-                if k in self.tags:
-                    del self.tags[k]
-            elif v == '':
-                self.tags[k] = (None,None)
-            else:
-                mo = re.match(r'(?P<stag>.*)\|(?P<etag>.*)',v)
-                if mo:
-                    self.tags[k] = (mo.group('stag'), mo.group('etag'))
-                else:
-                    raise EAsciiDoc,'[tag] %s value malformed' % k
-
-    def tag(self, name, d=None):
-        """Returns (starttag,endtag) tuple named name from configuration file
-        [tags] section. Raise error if not found. If a dictionary 'd' is
-        passed then merge with document attributes and perform attribute
-        substitution on tags."""
-        if not name in self.tags:
-            raise EAsciiDoc, 'missing tag: %s' % name
-        stag,etag = self.tags[name]
-        if d is not None:
-            # TODO: Should we warn if substitution drops a tag?
-            if stag:
-                stag = subs_attrs(stag,d)
-            if etag:
-                etag = subs_attrs(etag,d)
-        if stag is None: stag = ''
-        if etag is None: etag = ''
-        return (stag,etag)
-
-    def parse_specialsections(self):
-        """Parse specialsections section to self.specialsections dictionary."""
-        # TODO: This is virtually the same as parse_replacements() and should
-        # be factored to single routine.
-        d = {}
-        parse_entries(self.sections.get('specialsections',()),d,unquote=True)
-        for pat,sectname in d.items():
-            pat = strip_quotes(pat)
-            if not is_re(pat):
-                raise EAsciiDoc,'[specialsections] entry ' \
-                                'is not a valid regular expression: %s' % pat
-            if sectname is None:
-                if pat in self.specialsections:
-                    del self.specialsections[pat]
-            else:
-                self.specialsections[pat] = sectname
-
-    def parse_replacements(self,sect='replacements'):
-        """Parse replacements section into self.replacements dictionary."""
-        d = OrderedDict()
-        parse_entries(self.sections.get(sect,()), d, unquote=True)
-        for pat,rep in d.items():
-            if not self.set_replacement(pat, rep, getattr(self,sect)):
-                raise EAsciiDoc,'[%s] entry in %s is not a valid' \
-                    ' regular expression: %s' % (sect,self.fname,pat)
-
-    @staticmethod
-    def set_replacement(pat, rep, replacements):
-        """Add pattern and replacement to replacements dictionary."""
-        pat = strip_quotes(pat)
-        if not is_re(pat):
-            return False
-        if rep is None:
-            if pat in replacements:
-                del replacements[pat]
-        else:
-            replacements[pat] = strip_quotes(rep)
-        return True
-
-    def subs_replacements(self,s,sect='replacements'):
-        """Substitute patterns from self.replacements in 's'."""
-        result = s
-        for pat,rep in getattr(self,sect).items():
-            result = re.sub(pat, rep, result)
-        return result
-
-    def parse_specialwords(self):
-        """Parse special words section into self.specialwords dictionary."""
-        reo = re.compile(r'(?:\s|^)(".+?"|[^"\s]+)(?=\s|$)')
-        for line in self.sections.get('specialwords',()):
-            e = parse_entry(line)
-            if not e:
-                raise EAsciiDoc,'[specialwords] entry in %s is malformed: %s' \
-                    % (self.fname,line)
-            name,wordlist = e
-            if not is_name(name):
-                raise EAsciiDoc,'[specialwords] name in %s is illegal: %s' \
-                    % (self.fname,name)
-            if wordlist is None:
-                # Undefine all words associated with 'name'.
-                for k,v in self.specialwords.items():
-                    if v == name:
-                        del self.specialwords[k]
-            else:
-                words = reo.findall(wordlist)
-                for word in words:
-                    word = strip_quotes(word)
-                    if not is_re(word):
-                        raise EAsciiDoc,'[specialwords] entry in %s ' \
-                            'is not a valid regular expression: %s' \
-                            % (self.fname,word)
-                    self.specialwords[word] = name
-
-    def subs_specialchars(self,s):
-        """Perform special character substitution on string 's'."""
-        """It may seem like a good idea to escape special characters with a '\'
-        character, the reason we don't is because the escape character itself
-        then has to be escaped and this makes including code listings
-        problematic. Use the predefined {amp},{lt},{gt} attributes instead."""
-        result = ''
-        for ch in s:
-            result = result + self.specialchars.get(ch,ch)
-        return result
-
-    def subs_specialchars_reverse(self,s):
-        """Perform reverse special character substitution on string 's'."""
-        result = s
-        for k,v in self.specialchars.items():
-            result = result.replace(v, k)
-        return result
-
-    def subs_specialwords(self,s):
-        """Search for word patterns from self.specialwords in 's' and
-        substitute using corresponding macro."""
-        result = s
-        for word in self.specialwords.keys():
-            result = re.sub(word, _subs_specialwords, result)
-        return result
-
-    def expand_templates(self,entries):
-        """Expand any template::[] macros in a list of section entries."""
-        result = []
-        for line in entries:
-            mo = macros.match('+',r'template',line)
-            if mo:
-                s = mo.group('attrlist')
-                if s in self.sections:
-                    result += self.expand_templates(self.sections[s])
-                else:
-                    message.warning('missing section: [%s]' % s)
-                    result.append(line)
-            else:
-                result.append(line)
-        return result
-
-    def expand_all_templates(self):
-        for k,v in self.sections.items():
-            self.sections[k] = self.expand_templates(v)
-
-    def section2tags(self, section, d={}, skipstart=False, skipend=False):
-        """Perform attribute substitution on 'section' using document
-        attributes plus 'd' attributes. Return tuple (stag,etag) containing
-        pre and post | placeholder tags. 'skipstart' and 'skipend' are
-        used to suppress substitution."""
-        assert section is not None
-        if section in self.sections:
-            body = self.sections[section]
-        else:
-            message.warning('missing section: [%s]' % section)
-            body = ()
-        # Split macro body into start and end tag lists.
-        stag = []
-        etag = []
-        in_stag = True
-        for s in body:
-            if in_stag:
-                mo = re.match(r'(?P<stag>.*)\|(?P<etag>.*)',s)
-                if mo:
-                    if mo.group('stag'):
-                        stag.append(mo.group('stag'))
-                    if mo.group('etag'):
-                        etag.append(mo.group('etag'))
-                    in_stag = False
-                else:
-                    stag.append(s)
-            else:
-                etag.append(s)
-        # Do attribute substitution last so {brkbar} can be used to escape |.
-        # But don't do attribute substitution on title -- we've already done it.
-        title = d.get('title')
-        if title:
-            d['title'] = chr(0)  # Replace with unused character.
-        if not skipstart:
-            stag = subs_attrs(stag, d)
-        if not skipend:
-            etag = subs_attrs(etag, d)
-        # Put the {title} back.
-        if title:
-            stag = map(lambda x: x.replace(chr(0), title), stag)
-            etag = map(lambda x: x.replace(chr(0), title), etag)
-            d['title'] = title
-        return (stag,etag)
-
-
-#---------------------------------------------------------------------------
-# Deprecated old table classes follow.
-# Naming convention is an _OLD name suffix.
-# These will be removed from future versions of AsciiDoc
-
-def join_lines_OLD(lines):
-    """Return a list in which lines terminated with the backslash line
-    continuation character are joined."""
-    result = []
-    s = ''
-    continuation = False
-    for line in lines:
-        if line and line[-1] == '\\':
-            s = s + line[:-1]
-            continuation = True
-            continue
-        if continuation:
-            result.append(s+line)
-            s = ''
-            continuation = False
-        else:
-            result.append(line)
-    if continuation:
-        result.append(s)
-    return result
-
-class Column_OLD:
-    """Table column."""
-    def __init__(self):
-        self.colalign = None    # 'left','right','center'
-        self.rulerwidth = None
-        self.colwidth = None    # Output width in page units.
-
-class Table_OLD(AbstractBlock):
-    COL_STOP = r"(`|'|\.)"  # RE.
-    ALIGNMENTS = {'`':'left', "'":'right', '.':'center'}
-    FORMATS = ('fixed','csv','dsv')
-    def __init__(self):
-        AbstractBlock.__init__(self)
-        self.CONF_ENTRIES += ('template','fillchar','format','colspec',
-                              'headrow','footrow','bodyrow','headdata',
-                              'footdata', 'bodydata')
-        # Configuration parameters.
-        self.fillchar=None
-        self.format=None    # 'fixed','csv','dsv'
-        self.colspec=None
-        self.headrow=None
-        self.footrow=None
-        self.bodyrow=None
-        self.headdata=None
-        self.footdata=None
-        self.bodydata=None
-        # Calculated parameters.
-        self.underline=None     # RE matching current table underline.
-        self.isnumeric=False    # True if numeric ruler.
-        self.tablewidth=None    # Optional table width scale factor.
-        self.columns=[]         # List of Columns.
-        # Other.
-        self.check_msg=''       # Message set by previous self.validate() call.
-    def load(self,name,entries):
-        AbstractBlock.load(self,name,entries)
-        """Update table definition from section entries in 'entries'."""
-        for k,v in entries.items():
-            if k == 'fillchar':
-                if v and len(v) == 1:
-                    self.fillchar = v
-                else:
-                    raise EAsciiDoc,'malformed table fillchar: %s' % v
-            elif k == 'format':
-                if v in Table_OLD.FORMATS:
-                    self.format = v
-                else:
-                    raise EAsciiDoc,'illegal table format: %s' % v
-            elif k == 'colspec':
-                self.colspec = v
-            elif k == 'headrow':
-                self.headrow = v
-            elif k == 'footrow':
-                self.footrow = v
-            elif k == 'bodyrow':
-                self.bodyrow = v
-            elif k == 'headdata':
-                self.headdata = v
-            elif k == 'footdata':
-                self.footdata = v
-            elif k == 'bodydata':
-                self.bodydata = v
-    def dump(self):
-        AbstractBlock.dump(self)
-        write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline))
-        write('fillchar='+self.fillchar)
-        write('format='+self.format)
-        if self.colspec:
-            write('colspec='+self.colspec)
-        if self.headrow:
-            write('headrow='+self.headrow)
-        if self.footrow:
-            write('footrow='+self.footrow)
-        write('bodyrow='+self.bodyrow)
-        if self.headdata:
-            write('headdata='+self.headdata)
-        if self.footdata:
-            write('footdata='+self.footdata)
-        write('bodydata='+self.bodydata)
-        write('')
-    def validate(self):
-        AbstractBlock.validate(self)
-        """Check table definition and set self.check_msg if invalid else set
-        self.check_msg to blank string."""
-        # Check global table parameters.
-        if config.textwidth is None:
-            self.check_msg = 'missing [miscellaneous] textwidth entry'
-        elif config.pagewidth is None:
-            self.check_msg = 'missing [miscellaneous] pagewidth entry'
-        elif config.pageunits is None:
-            self.check_msg = 'missing [miscellaneous] pageunits entry'
-        elif self.headrow is None:
-            self.check_msg = 'missing headrow entry'
-        elif self.footrow is None:
-            self.check_msg = 'missing footrow entry'
-        elif self.bodyrow is None:
-            self.check_msg = 'missing bodyrow entry'
-        elif self.headdata is None:
-            self.check_msg = 'missing headdata entry'
-        elif self.footdata is None:
-            self.check_msg = 'missing footdata entry'
-        elif self.bodydata is None:
-            self.check_msg = 'missing bodydata entry'
-        else:
-            # No errors.
-            self.check_msg = ''
-    def isnext(self):
-        return AbstractBlock.isnext(self)
-    def parse_ruler(self,ruler):
-        """Parse ruler calculating underline and ruler column widths."""
-        fc = re.escape(self.fillchar)
-        # Strip and save optional tablewidth from end of ruler.
-        mo = re.match(r'^(.*'+fc+r'+)([\d\.]+)$',ruler)
-        if mo:
-            ruler = mo.group(1)
-            self.tablewidth = float(mo.group(2))
-            self.attributes['tablewidth'] = str(float(self.tablewidth))
-        else:
-            self.tablewidth = None
-            self.attributes['tablewidth'] = '100.0'
-        # Guess whether column widths are specified numerically or not.
-        if ruler[1] != self.fillchar:
-            # If the first column does not start with a fillchar then numeric.
-            self.isnumeric = True
-        elif ruler[1:] == self.fillchar*len(ruler[1:]):
-            # The case of one column followed by fillchars is numeric.
-            self.isnumeric = True
-        else:
-            self.isnumeric = False
-        # Underlines must be 3 or more fillchars.
-        self.underline = r'^' + fc + r'{3,}$'
-        splits = re.split(self.COL_STOP,ruler)[1:]
-        # Build self.columns.
-        for i in range(0,len(splits),2):
-            c = Column_OLD()
-            c.colalign = self.ALIGNMENTS[splits[i]]
-            s = splits[i+1]
-            if self.isnumeric:
-                # Strip trailing fillchars.
-                s = re.sub(fc+r'+$','',s)
-                if s == '':
-                    c.rulerwidth = None
-                else:
-                    try:
-                        val = int(s)
-                        if not val > 0:
-                            raise ValueError, 'not > 0'
-                        c.rulerwidth = val
-                    except ValueError:
-                        raise EAsciiDoc, 'malformed ruler: bad width'
-            else:   # Calculate column width from inter-fillchar intervals.
-                if not re.match(r'^'+fc+r'+$',s):
-                    raise EAsciiDoc,'malformed ruler: illegal fillchars'
-                c.rulerwidth = len(s)+1
-            self.columns.append(c)
-        # Fill in unspecified ruler widths.
-        if self.isnumeric:
-            if self.columns[0].rulerwidth is None:
-                prevwidth = 1
-            for c in self.columns:
-                if c.rulerwidth is None:
-                    c.rulerwidth = prevwidth
-                prevwidth = c.rulerwidth
-    def build_colspecs(self):
-        """Generate colwidths and colspecs. This can only be done after the
-        table arguments have been parsed since we use the table format."""
-        self.attributes['cols'] = len(self.columns)
-        # Calculate total ruler width.
-        totalwidth = 0
-        for c in self.columns:
-            totalwidth = totalwidth + c.rulerwidth
-        if totalwidth <= 0:
-            raise EAsciiDoc,'zero width table'
-        # Calculate marked up colwidths from rulerwidths.
-        for c in self.columns:
-            # Convert ruler width to output page width.
-            width = float(c.rulerwidth)
-            if self.format == 'fixed':
-                if self.tablewidth is None:
-                    # Size proportional to ruler width.
-                    colfraction = width/config.textwidth
-                else:
-                    # Size proportional to page width.
-                    colfraction = width/totalwidth
-            else:
-                    # Size proportional to page width.
-                colfraction = width/totalwidth
-            c.colwidth = colfraction * config.pagewidth # To page units.
-            if self.tablewidth is not None:
-                c.colwidth = c.colwidth * self.tablewidth   # Scale factor.
-                if self.tablewidth > 1:
-                    c.colwidth = c.colwidth/100 # tablewidth is in percent.
-        # Build colspecs.
-        if self.colspec:
-            cols = []
-            i = 0
-            for c in self.columns:
-                i += 1
-                self.attributes['colalign'] = c.colalign
-                self.attributes['colwidth'] = str(int(c.colwidth))
-                self.attributes['colnumber'] = str(i + 1)
-                s = subs_attrs(self.colspec,self.attributes)
-                if not s:
-                    message.warning('colspec dropped: contains undefined attribute')
-                else:
-                    cols.append(s)
-            self.attributes['colspecs'] = writer.newline.join(cols)
-    def split_rows(self,rows):
-        """Return a two item tuple containing a list of lines up to but not
-        including the next underline (continued lines are joined ) and the
-        tuple of all lines after the underline."""
-        reo = re.compile(self.underline)
-        i = 0
-        while not reo.match(rows[i]):
-            i = i+1
-        if i == 0:
-            raise EAsciiDoc,'missing table rows'
-        if i >= len(rows):
-            raise EAsciiDoc,'closing [%s] underline expected' % self.defname
-        return (join_lines_OLD(rows[:i]), rows[i+1:])
-    def parse_rows(self, rows, rtag, dtag):
-        """Parse rows list using the row and data tags. Returns a substituted
-        list of output lines."""
-        result = []
-        # Source rows are parsed as single block, rather than line by line, to
-        # allow the CSV reader to handle multi-line rows.
-        if self.format == 'fixed':
-            rows = self.parse_fixed(rows)
-        elif self.format == 'csv':
-            rows = self.parse_csv(rows)
-        elif self.format == 'dsv':
-            rows = self.parse_dsv(rows)
-        else:
-            assert True,'illegal table format'
-        # Substitute and indent all data in all rows.
-        stag,etag = subs_tag(rtag,self.attributes)
-        for row in rows:
-            result.append('  '+stag)
-            for data in self.subs_row(row,dtag):
-                result.append('    '+data)
-            result.append('  '+etag)
-        return result
-    def subs_row(self, data, dtag):
-        """Substitute the list of source row data elements using the data tag.
-        Returns a substituted list of output table data items."""
-        result = []
-        if len(data) < len(self.columns):
-            message.warning('fewer row data items then table columns')
-        if len(data) > len(self.columns):
-            message.warning('more row data items than table columns')
-        for i in range(len(self.columns)):
-            if i > len(data) - 1:
-                d = ''  # Fill missing column data with blanks.
-            else:
-                d = data[i]
-            c = self.columns[i]
-            self.attributes['colalign'] = c.colalign
-            self.attributes['colwidth'] = str(int(c.colwidth))
-            self.attributes['colnumber'] = str(i + 1)
-            stag,etag = subs_tag(dtag,self.attributes)
-            # Insert AsciiDoc line break (' +') where row data has newlines
-            # ('\n').  This is really only useful when the table format is csv
-            # and the output markup is HTML. It's also a bit dubious in that it
-            # assumes the user has not modified the shipped line break pattern.
-            subs = self.get_subs()[0]
-            if 'replacements2' in subs:
-                # Insert line breaks in cell data.
-                d = re.sub(r'(?m)\n',r' +\n',d)
-                d = d.split('\n')    # So writer.newline is written.
-            else:
-                d = [d]
-            result = result + [stag] + Lex.subs(d,subs) + [etag]
-        return result
-    def parse_fixed(self,rows):
-        """Parse the list of source table rows. Each row item in the returned
-        list contains a list of cell data elements."""
-        result = []
-        for row in rows:
-            data = []
-            start = 0
-            # build an encoded representation
-            row = char_decode(row)
-            for c in self.columns:
-                end = start + c.rulerwidth
-                if c is self.columns[-1]:
-                    # Text in last column can continue forever.
-                    # Use the encoded string to slice, but convert back
-                    # to plain string before further processing
-                    data.append(char_encode(row[start:]).strip())
-                else:
-                    data.append(char_encode(row[start:end]).strip())
-                start = end
-            result.append(data)
-        return result
-    def parse_csv(self,rows):
-        """Parse the list of source table rows. Each row item in the returned
-        list contains a list of cell data elements."""
-        import StringIO
-        import csv
-        result = []
-        rdr = csv.reader(StringIO.StringIO('\r\n'.join(rows)),
-            skipinitialspace=True)
-        try:
-            for row in rdr:
-                result.append(row)
-        except Exception:
-            raise EAsciiDoc,'csv parse error: %s' % row
-        return result
-    def parse_dsv(self,rows):
-        """Parse the list of source table rows. Each row item in the returned
-        list contains a list of cell data elements."""
-        separator = self.attributes.get('separator',':')
-        separator = literal_eval('"'+separator+'"')
-        if len(separator) != 1:
-            raise EAsciiDoc,'malformed dsv separator: %s' % separator
-        # TODO If separator is preceeded by an odd number of backslashes then
-        # it is escaped and should not delimit.
-        result = []
-        for row in rows:
-            # Skip blank lines
-            if row == '': continue
-            # Unescape escaped characters.
-            row = literal_eval('"'+row.replace('"','\\"')+'"')
-            data = row.split(separator)
-            data = [s.strip() for s in data]
-            result.append(data)
-        return result
-    def translate(self):
-        message.deprecated('old tables syntax')
-        AbstractBlock.translate(self)
-        # Reset instance specific properties.
-        self.underline = None
-        self.columns = []
-        attrs = {}
-        BlockTitle.consume(attrs)
-        # Add relevant globals to table substitutions.
-        attrs['pagewidth'] = str(config.pagewidth)
-        attrs['pageunits'] = config.pageunits
-        # Mix in document attribute list.
-        AttributeList.consume(attrs)
-        # Validate overridable attributes.
-        for k,v in attrs.items():
-            if k == 'format':
-                if v not in self.FORMATS:
-                    raise EAsciiDoc, 'illegal [%s] %s: %s' % (self.defname,k,v)
-                self.format = v
-            elif k == 'tablewidth':
-                try:
-                    self.tablewidth = float(attrs['tablewidth'])
-                except Exception:
-                    raise EAsciiDoc, 'illegal [%s] %s: %s' % (self.defname,k,v)
-        self.merge_attributes(attrs)
-        # Parse table ruler.
-        ruler = reader.read()
-        assert re.match(self.delimiter,ruler)
-        self.parse_ruler(ruler)
-        # Read the entire table.
-        table = []
-        while True:
-            line = reader.read_next()
-            # Table terminated by underline followed by a blank line or EOF.
-            if len(table) > 0 and re.match(self.underline,table[-1]):
-                if line in ('',None):
-                    break;
-            if line is None:
-                raise EAsciiDoc,'closing [%s] underline expected' % self.defname
-            table.append(reader.read())
-        # EXPERIMENTAL: The number of lines in the table, requested by Benjamin Klum.
-        self.attributes['rows'] = str(len(table))
-        if self.check_msg:  # Skip if table definition was marked invalid.
-            message.warning('skipping [%s] table: %s' % (self.defname,self.check_msg))
-            return
-        self.push_blockname('table')
-        # Generate colwidths and colspecs.
-        self.build_colspecs()
-        # Generate headrows, footrows, bodyrows.
-        # Headrow, footrow and bodyrow data replaces same named attributes in
-        # the table markup template. In order to ensure this data does not get
-        # a second attribute substitution (which would interfere with any
-        # already substituted inline passthroughs) unique placeholders are used
-        # (the tab character does not appear elsewhere since it is expanded on
-        # input) which are replaced after template attribute substitution.
-        headrows = footrows = []
-        bodyrows,table = self.split_rows(table)
-        if table:
-            headrows = bodyrows
-            bodyrows,table = self.split_rows(table)
-            if table:
-                footrows,table = self.split_rows(table)
-        if headrows:
-            headrows = self.parse_rows(headrows, self.headrow, self.headdata)
-            headrows = writer.newline.join(headrows)
-            self.attributes['headrows'] = '\x07headrows\x07'
-        if footrows:
-            footrows = self.parse_rows(footrows, self.footrow, self.footdata)
-            footrows = writer.newline.join(footrows)
-            self.attributes['footrows'] = '\x07footrows\x07'
-        bodyrows = self.parse_rows(bodyrows, self.bodyrow, self.bodydata)
-        bodyrows = writer.newline.join(bodyrows)
-        self.attributes['bodyrows'] = '\x07bodyrows\x07'
-        table = subs_attrs(config.sections[self.template],self.attributes)
-        table = writer.newline.join(table)
-        # Before we finish replace the table head, foot and body place holders
-        # with the real data.
-        if headrows:
-            table = table.replace('\x07headrows\x07', headrows, 1)
-        if footrows:
-            table = table.replace('\x07footrows\x07', footrows, 1)
-        table = table.replace('\x07bodyrows\x07', bodyrows, 1)
-        writer.write(table,trace='table')
-        self.pop_blockname()
-
-class Tables_OLD(AbstractBlocks):
-    """List of tables."""
-    BLOCK_TYPE = Table_OLD
-    PREFIX = 'old_tabledef-'
-    def __init__(self):
-        AbstractBlocks.__init__(self)
-    def load(self,sections):
-        AbstractBlocks.load(self,sections)
-    def validate(self):
-        # Does not call AbstractBlocks.validate().
-        # Check we have a default table definition,
-        for i in range(len(self.blocks)):
-            if self.blocks[i].defname == 'old_tabledef-default':
-                default = self.blocks[i]
-                break
-        else:
-            raise EAsciiDoc,'missing section: [OLD_tabledef-default]'
-        # Set default table defaults.
-        if default.format is None: default.subs = 'fixed'
-        # Propagate defaults to unspecified table parameters.
-        for b in self.blocks:
-            if b is not default:
-                if b.fillchar is None: b.fillchar = default.fillchar
-                if b.format is None: b.format = default.format
-                if b.template is None: b.template = default.template
-                if b.colspec is None: b.colspec = default.colspec
-                if b.headrow is None: b.headrow = default.headrow
-                if b.footrow is None: b.footrow = default.footrow
-                if b.bodyrow is None: b.bodyrow = default.bodyrow
-                if b.headdata is None: b.headdata = default.headdata
-                if b.footdata is None: b.footdata = default.footdata
-                if b.bodydata is None: b.bodydata = default.bodydata
-        # Check all tables have valid fill character.
-        for b in self.blocks:
-            if not b.fillchar or len(b.fillchar) != 1:
-                raise EAsciiDoc,'[%s] missing or illegal fillchar' % b.defname
-        # Build combined tables delimiter patterns and assign defaults.
-        delimiters = []
-        for b in self.blocks:
-            # Ruler is:
-            #   (ColStop,(ColWidth,FillChar+)?)+, FillChar+, TableWidth?
-            b.delimiter = r'^(' + Table_OLD.COL_STOP \
-                + r'(\d*|' + re.escape(b.fillchar) + r'*)' \
-                + r')+' \
-                + re.escape(b.fillchar) + r'+' \
-                + '([\d\.]*)$'
-            delimiters.append(b.delimiter)
-            if not b.headrow:
-                b.headrow = b.bodyrow
-            if not b.footrow:
-                b.footrow = b.bodyrow
-            if not b.headdata:
-                b.headdata = b.bodydata
-            if not b.footdata:
-                b.footdata = b.bodydata
-        self.delimiters = re_join(delimiters)
-        # Check table definitions are valid.
-        for b in self.blocks:
-            b.validate()
-            if config.verbose:
-                if b.check_msg:
-                    message.warning('[%s] table definition: %s' % (b.defname,b.check_msg))
-
-# End of deprecated old table classes.
-#---------------------------------------------------------------------------
-
-#---------------------------------------------------------------------------
-# filter and theme plugin commands.
-#---------------------------------------------------------------------------
-import shutil, zipfile
-
-def die(msg):
-    message.stderr(msg)
-    sys.exit(1)
-
-def extract_zip(zip_file, destdir):
-    """
-    Unzip Zip file to destination directory.
-    Throws exception if error occurs.
-    """
-    zipo = zipfile.ZipFile(zip_file, 'r')
-    try:
-        for zi in zipo.infolist():
-            outfile = zi.filename
-            if not outfile.endswith('/'):
-                d, outfile = os.path.split(outfile)
-                directory = os.path.normpath(os.path.join(destdir, d))
-                if not os.path.isdir(directory):
-                    os.makedirs(directory)
-                outfile = os.path.join(directory, outfile)
-                perms = (zi.external_attr >> 16) & 0777
-                message.verbose('extracting: %s' % outfile)
-                flags = os.O_CREAT | os.O_WRONLY
-                if sys.platform == 'win32':
-                    flags |= os.O_BINARY
-                if perms == 0:
-                    # Zip files created under Windows do not include permissions.
-                    fh = os.open(outfile, flags)
-                else:
-                    fh = os.open(outfile, flags, perms)
-                try:
-                    os.write(fh, zipo.read(zi.filename))
-                finally:
-                    os.close(fh)
-    finally:
-        zipo.close()
-
-def create_zip(zip_file, src, skip_hidden=False):
-    """
-    Create Zip file. If src is a directory archive all contained files and
-    subdirectories, if src is a file archive the src file.
-    Files and directories names starting with . are skipped
-    if skip_hidden is True.
-    Throws exception if error occurs.
-    """
-    zipo = zipfile.ZipFile(zip_file, 'w')
-    try:
-        if os.path.isfile(src):
-            arcname = os.path.basename(src)
-            message.verbose('archiving: %s' % arcname)
-            zipo.write(src, arcname, zipfile.ZIP_DEFLATED)
-        elif os.path.isdir(src):
-            srcdir = os.path.abspath(src)
-            if srcdir[-1] != os.path.sep:
-                srcdir += os.path.sep
-            for root, dirs, files in os.walk(srcdir):
-                arcroot = os.path.abspath(root)[len(srcdir):]
-                if skip_hidden:
-                    for d in dirs[:]:
-                        if d.startswith('.'):
-                            message.verbose('skipping: %s' % os.path.join(arcroot, d))
-                            del dirs[dirs.index(d)]
-                for f in files:
-                    filename = os.path.join(root,f)
-                    arcname = os.path.join(arcroot, f)
-                    if skip_hidden and f.startswith('.'):
-                        message.verbose('skipping: %s' % arcname)
-                        continue
-                    message.verbose('archiving: %s' % arcname)
-                    zipo.write(filename, arcname, zipfile.ZIP_DEFLATED)
-        else:
-            raise ValueError,'src must specify directory or file: %s' % src
-    finally:
-        zipo.close()
-
-class Plugin:
-    """
-    --filter and --theme option commands.
-    """
-    CMDS = ('install','remove','list','build')
-
-    type = None     # 'backend', 'filter' or 'theme'.
-
-    @staticmethod
-    def get_dir():
-        """
-        Return plugins path (.asciidoc/filters or .asciidoc/themes) in user's
-        home direcory or None if user home not defined.
-        """
-        result = userdir()
-        if result:
-            result = os.path.join(result, '.asciidoc', Plugin.type+'s')
-        return result
-
-    @staticmethod
-    def install(args):
-        """
-        Install plugin Zip file.
-        args[0] is plugin zip file path.
-        args[1] is optional destination plugins directory.
-        """
-        if len(args) not in (1,2):
-            die('invalid number of arguments: --%s install %s'
-                    % (Plugin.type, ' '.join(args)))
-        zip_file = args[0]
-        if not os.path.isfile(zip_file):
-            die('file not found: %s' % zip_file)
-        reo = re.match(r'^\w+',os.path.split(zip_file)[1])
-        if not reo:
-            die('file name does not start with legal %s name: %s'
-                    % (Plugin.type, zip_file))
-        plugin_name = reo.group()
-        if len(args) == 2:
-            plugins_dir = args[1]
-            if not os.path.isdir(plugins_dir):
-                die('directory not found: %s' % plugins_dir)
-        else:
-            plugins_dir = Plugin.get_dir()
-            if not plugins_dir:
-                die('user home directory is not defined')
-        plugin_dir = os.path.join(plugins_dir, plugin_name)
-        if os.path.exists(plugin_dir):
-            die('%s is already installed: %s' % (Plugin.type, plugin_dir))
-        try:
-            os.makedirs(plugin_dir)
-        except Exception,e:
-            die('failed to create %s directory: %s' % (Plugin.type, str(e)))
-        try:
-            extract_zip(zip_file, plugin_dir)
-        except Exception,e:
-            if os.path.isdir(plugin_dir):
-                shutil.rmtree(plugin_dir)
-            die('failed to extract %s: %s' % (Plugin.type, str(e)))
-
-    @staticmethod
-    def remove(args):
-        """
-        Delete plugin directory.
-        args[0] is plugin name.
-        args[1] is optional plugin directory (defaults to ~/.asciidoc/<plugin_name>).
-        """
-        if len(args) not in (1,2):
-            die('invalid number of arguments: --%s remove %s'
-                    % (Plugin.type, ' '.join(args)))
-        plugin_name = args[0]
-        if not re.match(r'^\w+$',plugin_name):
-            die('illegal %s name: %s' % (Plugin.type, plugin_name))
-        if len(args) == 2:
-            d = args[1]
-            if not os.path.isdir(d):
-                die('directory not found: %s' % d)
-        else:
-            d = Plugin.get_dir()
-            if not d:
-                die('user directory is not defined')
-        plugin_dir = os.path.join(d, plugin_name)
-        if not os.path.isdir(plugin_dir):
-            die('cannot find %s: %s' % (Plugin.type, plugin_dir))
-        try:
-            message.verbose('removing: %s' % plugin_dir)
-            shutil.rmtree(plugin_dir)
-        except Exception,e:
-            die('failed to delete %s: %s' % (Plugin.type, str(e)))
-
-    @staticmethod
-    def list(args):
-        """
-        List all plugin directories (global and local).
-        """
-        for d in [os.path.join(d, Plugin.type+'s') for d in config.get_load_dirs()]:
-            if os.path.isdir(d):
-                for f in os.walk(d).next()[1]:
-                    message.stdout(os.path.join(d,f))
-
-    @staticmethod
-    def build(args):
-        """
-        Create plugin Zip file.
-        args[0] is Zip file name.
-        args[1] is plugin directory.
-        """
-        if len(args) != 2:
-            die('invalid number of arguments: --%s build %s'
-                    % (Plugin.type, ' '.join(args)))
-        zip_file = args[0]
-        plugin_source = args[1]
-        if not (os.path.isdir(plugin_source) or os.path.isfile(plugin_source)):
-            die('plugin source not found: %s' % plugin_source)
-        try:
-            create_zip(zip_file, plugin_source, skip_hidden=True)
-        except Exception,e:
-            die('failed to create %s: %s' % (zip_file, str(e)))
-
-
-#---------------------------------------------------------------------------
-# Application code.
-#---------------------------------------------------------------------------
-# Constants
-# ---------
-APP_FILE = None             # This file's full path.
-APP_DIR = None              # This file's directory.
-USER_DIR = None             # ~/.asciidoc
-# Global configuration files directory (set by Makefile build target).
-CONF_DIR = '/etc/asciidoc'
-HELP_FILE = 'help.conf'     # Default (English) help file.
-
-# Globals
-# -------
-document = Document()       # The document being processed.
-config = Config()           # Configuration file reader.
-reader = Reader()           # Input stream line reader.
-writer = Writer()           # Output stream line writer.
-message = Message()         # Message functions.
-paragraphs = Paragraphs()   # Paragraph definitions.
-lists = Lists()             # List definitions.
-blocks = DelimitedBlocks()  # DelimitedBlock definitions.
-tables_OLD = Tables_OLD()   # Table_OLD definitions.
-tables = Tables()           # Table definitions.
-macros = Macros()           # Macro definitions.
-calloutmap = CalloutMap()   # Coordinates callouts and callout list.
-trace = Trace()             # Implements trace attribute processing.
-
-### Used by asciidocapi.py ###
-# List of message strings written to stderr.
-messages = message.messages
-
-
-def asciidoc(backend, doctype, confiles, infile, outfile, options):
-    """Convert AsciiDoc document to DocBook document of type doctype
-    The AsciiDoc document is read from file object src the translated
-    DocBook file written to file object dst."""
-    def load_conffiles(include=[], exclude=[]):
-        # Load conf files specified on the command-line and by the conf-files attribute.
-        files = document.attributes.get('conf-files','')
-        files = [f.strip() for f in files.split('|') if f.strip()]
-        files += confiles
-        if files:
-            for f in files:
-                if os.path.isfile(f):
-                    config.load_file(f, include=include, exclude=exclude)
-                else:
-                    raise EAsciiDoc,'missing configuration file: %s' % f
-    try:
-        document.attributes['python'] = sys.executable
-        for f in config.filters:
-            if not config.find_config_dir('filters', f):
-                raise EAsciiDoc,'missing filter: %s' % f
-        if doctype not in (None,'article','manpage','book'):
-            raise EAsciiDoc,'illegal document type'
-        # Set processing options.
-        for o in options:
-            if o == '-c': config.dumping = True
-            if o == '-s': config.header_footer = False
-            if o == '-v': config.verbose = True
-        document.update_attributes()
-        if '-e' not in options:
-            # Load asciidoc.conf files in two passes: the first for attributes
-            # the second for everything. This is so that locally set attributes
-            # available are in the global asciidoc.conf
-            if not config.load_from_dirs('asciidoc.conf',include=['attributes']):
-                raise EAsciiDoc,'configuration file asciidoc.conf missing'
-            load_conffiles(include=['attributes'])
-            config.load_from_dirs('asciidoc.conf')
-            if infile != '<stdin>':
-                indir = os.path.dirname(infile)
-                config.load_file('asciidoc.conf', indir,
-                                include=['attributes','titles','specialchars'])
-        else:
-            load_conffiles(include=['attributes','titles','specialchars'])
-        document.update_attributes()
-        # Check the infile exists.
-        if infile != '<stdin>':
-            if not os.path.isfile(infile):
-                raise EAsciiDoc,'input file %s missing' % infile
-        document.infile = infile
-        AttributeList.initialize()
-        # Open input file and parse document header.
-        reader.tabsize = config.tabsize
-        reader.open(infile)
-        has_header = document.parse_header(doctype,backend)
-        # doctype is now finalized.
-        document.attributes['doctype-'+document.doctype] = ''
-        config.set_theme_attributes()
-        # Load backend configuration files.
-        if '-e' not in options:
-            f = document.backend + '.conf'
-            conffile = config.load_backend()
-            if not conffile:
-                raise EAsciiDoc,'missing backend conf file: %s' % f
-            document.attributes['backend-confdir'] = os.path.dirname(conffile)
-        # backend is now known.
-        document.attributes['backend-'+document.backend] = ''
-        document.attributes[document.backend+'-'+document.doctype] = ''
-        doc_conffiles = []
-        if '-e' not in options:
-            # Load filters and language file.
-            config.load_filters()
-            document.load_lang()
-            if infile != '<stdin>':
-                # Load local conf files (files in the source file directory).
-                config.load_file('asciidoc.conf', indir)
-                config.load_backend([indir])
-                config.load_filters([indir])
-                # Load document specific configuration files.
-                f = os.path.splitext(infile)[0]
-                doc_conffiles = [
-                        f for f in (f+'.conf', f+'-'+document.backend+'.conf')
-                        if os.path.isfile(f) ]
-                for f in doc_conffiles:
-                    config.load_file(f)
-        load_conffiles()
-        # Build asciidoc-args attribute.
-        args = ''
-        # Add custom conf file arguments.
-        for f in doc_conffiles + confiles:
-            args += ' --conf-file "%s"' % f
-        # Add command-line and header attributes.
-        attrs = {}
-        attrs.update(AttributeEntry.attributes)
-        attrs.update(config.cmd_attrs)
-        if 'title' in attrs:    # Don't pass the header title.
-            del attrs['title']
-        for k,v in attrs.items():
-            if v:
-                args += ' --attribute "%s=%s"' % (k,v)
-            else:
-                args += ' --attribute "%s"' % k
-        document.attributes['asciidoc-args'] = args
-        # Build outfile name.
-        if outfile is None:
-            outfile = os.path.splitext(infile)[0] + '.' + document.backend
-            if config.outfilesuffix:
-                # Change file extension.
-                outfile = os.path.splitext(outfile)[0] + config.outfilesuffix
-        document.outfile = outfile
-        # Document header attributes override conf file attributes.
-        document.attributes.update(AttributeEntry.attributes)
-        document.update_attributes()
-        # Configuration is fully loaded.
-        config.expand_all_templates()
-        # Check configuration for consistency.
-        config.validate()
-        # Initialize top level block name.
-        if document.attributes.get('blockname'):
-            AbstractBlock.blocknames.append(document.attributes['blockname'])
-        paragraphs.initialize()
-        lists.initialize()
-        if config.dumping:
-            config.dump()
-        else:
-            writer.newline = config.newline
-            try:
-                writer.open(outfile, reader.bom)
-                try:
-                    document.translate(has_header) # Generate the output.
-                finally:
-                    writer.close()
-            finally:
-                reader.closefile()
-    except KeyboardInterrupt:
-        raise
-    except Exception,e:
-        # Cleanup.
-        if outfile and outfile != '<stdout>' and os.path.isfile(outfile):
-            os.unlink(outfile)
-        # Build and print error description.
-        msg = 'FAILED: '
-        if reader.cursor:
-            msg = message.format('', msg)
-        if isinstance(e, EAsciiDoc):
-            message.stderr('%s%s' % (msg,str(e)))
-        else:
-            if __name__ == '__main__':
-                message.stderr(msg+'unexpected error:')
-                message.stderr('-'*60)
-                traceback.print_exc(file=sys.stderr)
-                message.stderr('-'*60)
-            else:
-                message.stderr('%sunexpected error: %s' % (msg,str(e)))
-        sys.exit(1)
-
-def usage(msg=''):
-    if msg:
-        message.stderr(msg)
-    show_help('default', sys.stderr)
-
-def show_help(topic, f=None):
-    """Print help topic to file object f."""
-    if f is None:
-        f = sys.stdout
-    # Select help file.
-    lang = config.cmd_attrs.get('lang')
-    if lang and lang != 'en':
-        help_file = 'help-' + lang + '.conf'
-    else:
-        help_file = HELP_FILE
-    # Print [topic] section from help file.
-    config.load_from_dirs(help_file)
-    if len(config.sections) == 0:
-        # Default to English if specified language help files not found.
-        help_file = HELP_FILE
-        config.load_from_dirs(help_file)
-    if len(config.sections) == 0:
-        message.stderr('no help topics found')
-        sys.exit(1)
-    n = 0
-    for k in config.sections:
-        if re.match(re.escape(topic), k):
-            n += 1
-            lines = config.sections[k]
-    if n == 0:
-        if topic != 'topics':
-            message.stderr('help topic not found: [%s] in %s' % (topic, help_file))
-        message.stderr('available help topics: %s' % ', '.join(config.sections.keys()))
-        sys.exit(1)
-    elif n > 1:
-        message.stderr('ambiguous help topic: %s' % topic)
-    else:
-        for line in lines:
-            print >>f, line
-
-### Used by asciidocapi.py ###
-def execute(cmd,opts,args):
-    """
-    Execute asciidoc with command-line options and arguments.
-    cmd is asciidoc command or asciidoc.py path.
-    opts and args conform to values returned by getopt.getopt().
-    Raises SystemExit if an error occurs.
-
-    Doctests:
-
-    1. Check execution:
-
-       >>> import StringIO
-       >>> infile = StringIO.StringIO('Hello *{author}*')
-       >>> outfile = StringIO.StringIO()
-       >>> opts = []
-       >>> opts.append(('--backend','html4'))
-       >>> opts.append(('--no-header-footer',None))
-       >>> opts.append(('--attribute','author=Joe Bloggs'))
-       >>> opts.append(('--out-file',outfile))
-       >>> execute(__file__, opts, [infile])
-       >>> print outfile.getvalue()
-       <p>Hello <strong>Joe Bloggs</strong></p>
-
-       >>>
-
-    """
-    config.init(cmd)
-    if len(args) > 1:
-        usage('Too many arguments')
-        sys.exit(1)
-    backend = None
-    doctype = None
-    confiles = []
-    outfile = None
-    options = []
-    help_option = False
-    for o,v in opts:
-        if o in ('--help','-h'):
-            help_option = True
-        #DEPRECATED: --unsafe option.
-        if o == '--unsafe':
-            document.safe = False
-        if o == '--safe':
-            document.safe = True
-        if o == '--version':
-            print('asciidoc %s' % VERSION)
-            sys.exit(0)
-        if o in ('-b','--backend'):
-            backend = v
-        if o in ('-c','--dump-conf'):
-            options.append('-c')
-        if o in ('-d','--doctype'):
-            doctype = v
-        if o in ('-e','--no-conf'):
-            options.append('-e')
-        if o in ('-f','--conf-file'):
-            confiles.append(v)
-        if o == '--filter':
-            config.filters.append(v)
-        if o in ('-n','--section-numbers'):
-            o = '-a'
-            v = 'numbered'
-        if o == '--theme':
-            o = '-a'
-            v = 'theme='+v
-        if o in ('-a','--attribute'):
-            e = parse_entry(v, allow_name_only=True)
-            if not e:
-                usage('Illegal -a option: %s' % v)
-                sys.exit(1)
-            k,v = e
-            # A @ suffix denotes don't override existing document attributes.
-            if v and v[-1] == '@':
-                document.attributes[k] = v[:-1]
-            else:
-                config.cmd_attrs[k] = v
-        if o in ('-o','--out-file'):
-            outfile = v
-        if o in ('-s','--no-header-footer'):
-            options.append('-s')
-        if o in ('-v','--verbose'):
-            options.append('-v')
-    if help_option:
-        if len(args) == 0:
-            show_help('default')
-        else:
-            show_help(args[-1])
-        sys.exit(0)
-    if len(args) == 0 and len(opts) == 0:
-        usage()
-        sys.exit(0)
-    if len(args) == 0:
-        usage('No source file specified')
-        sys.exit(1)
-    stdin,stdout = sys.stdin,sys.stdout
-    try:
-        infile = args[0]
-        if infile == '-':
-            infile = '<stdin>'
-        elif isinstance(infile, str):
-            infile = os.path.abspath(infile)
-        else:   # Input file is file object from API call.
-            sys.stdin = infile
-            infile = '<stdin>'
-        if outfile == '-':
-            outfile = '<stdout>'
-        elif isinstance(outfile, str):
-            outfile = os.path.abspath(outfile)
-        elif outfile is None:
-            if infile == '<stdin>':
-                outfile = '<stdout>'
-        else:   # Output file is file object from API call.
-            sys.stdout = outfile
-            outfile = '<stdout>'
-        # Do the work.
-        asciidoc(backend, doctype, confiles, infile, outfile, options)
-        if document.has_errors:
-            sys.exit(1)
-    finally:
-        sys.stdin,sys.stdout = stdin,stdout
-
-if __name__ == '__main__':
-    # Process command line options.
-    import getopt
-    try:
-        #DEPRECATED: --unsafe option.
-        opts,args = getopt.getopt(sys.argv[1:],
-            'a:b:cd:ef:hno:svw:',
-            ['attribute=','backend=','conf-file=','doctype=','dump-conf',
-            'help','no-conf','no-header-footer','out-file=',
-            'section-numbers','verbose','version','safe','unsafe',
-            'doctest','filter=','theme='])
-    except getopt.GetoptError:
-        message.stderr('illegal command options')
-        sys.exit(1)
-    opt_names = [opt[0] for opt in opts]
-    if '--doctest' in opt_names:
-        # Run module doctests.
-        import doctest
-        options = doctest.NORMALIZE_WHITESPACE + doctest.ELLIPSIS
-        failures,tries = doctest.testmod(optionflags=options)
-        if failures == 0:
-            message.stderr('All doctests passed')
-            sys.exit(0)
-        else:
-            sys.exit(1)
-    # Look for plugin management commands.
-    count = 0
-    for o,v in opts:
-        if o in ('-b','--backend','--filter','--theme'):
-            if o == '-b':
-                o = '--backend'
-            plugin = o[2:]
-            cmd = v
-            if cmd not in Plugin.CMDS:
-                continue
-            count += 1
-    if count > 1:
-        die('--backend, --filter and --theme options are mutually exclusive')
-    if count == 1:
-        # Execute plugin management commands.
-        if not cmd:
-            die('missing --%s command' % plugin)
-        if cmd not in Plugin.CMDS:
-            die('illegal --%s command: %s' % (plugin, cmd))
-        Plugin.type = plugin
-        config.init(sys.argv[0])
-        config.verbose = bool(set(['-v','--verbose']) & set(opt_names))
-        getattr(Plugin,cmd)(args)
-    else:
-        # Execute asciidoc.
-        try:
-            execute(sys.argv[0],opts,args)
-        except KeyboardInterrupt:
-            sys.exit(1)
diff --git a/source-builder/sb/asciidoc/asciidocapi.py b/source-builder/sb/asciidoc/asciidocapi.py
deleted file mode 100644
index dcdf262..0000000
--- a/source-builder/sb/asciidoc/asciidocapi.py
+++ /dev/null
@@ -1,257 +0,0 @@
-#!/usr/bin/env python
-"""
-asciidocapi - AsciiDoc API wrapper class.
-
-The AsciiDocAPI class provides an API for executing asciidoc. Minimal example
-compiles `mydoc.txt` to `mydoc.html`:
-
-  import asciidocapi
-  asciidoc = asciidocapi.AsciiDocAPI()
-  asciidoc.execute('mydoc.txt')
-
-- Full documentation in asciidocapi.txt.
-- See the doctests below for more examples.
-
-Doctests:
-
-1. Check execution:
-
-   >>> import StringIO
-   >>> infile = StringIO.StringIO('Hello *{author}*')
-   >>> outfile = StringIO.StringIO()
-   >>> asciidoc = AsciiDocAPI()
-   >>> asciidoc.options('--no-header-footer')
-   >>> asciidoc.attributes['author'] = 'Joe Bloggs'
-   >>> asciidoc.execute(infile, outfile, backend='html4')
-   >>> print outfile.getvalue()
-   <p>Hello <strong>Joe Bloggs</strong></p>
-
-   >>> asciidoc.attributes['author'] = 'Bill Smith'
-   >>> infile = StringIO.StringIO('Hello _{author}_')
-   >>> outfile = StringIO.StringIO()
-   >>> asciidoc.execute(infile, outfile, backend='docbook')
-   >>> print outfile.getvalue()
-   <simpara>Hello <emphasis>Bill Smith</emphasis></simpara>
-
-2. Check error handling:
-
-   >>> import StringIO
-   >>> asciidoc = AsciiDocAPI()
-   >>> infile = StringIO.StringIO('---------')
-   >>> outfile = StringIO.StringIO()
-   >>> asciidoc.execute(infile, outfile)
-   Traceback (most recent call last):
-     File "<stdin>", line 1, in <module>
-     File "asciidocapi.py", line 189, in execute
-       raise AsciiDocError(self.messages[-1])
-   AsciiDocError: ERROR: <stdin>: line 1: [blockdef-listing] missing closing delimiter
-
-
-Copyright (C) 2009 Stuart Rackham. Free use of this software is granted
-under the terms of the GNU General Public License (GPL).
-
-"""
-
-import sys,os,re,imp
-
-API_VERSION = '0.1.2'
-MIN_ASCIIDOC_VERSION = '8.4.1'  # Minimum acceptable AsciiDoc version.
-
-
-def find_in_path(fname, path=None):
-    """
-    Find file fname in paths. Return None if not found.
-    """
-    if path is None:
-        path = os.environ.get('PATH', '')
-    for dir in path.split(os.pathsep):
-        fpath = os.path.join(dir, fname)
-        if os.path.isfile(fpath):
-            return fpath
-    else:
-        return None
-
-
-class AsciiDocError(Exception):
-    pass
-
-
-class Options(object):
-    """
-    Stores asciidoc(1) command options.
-    """
-    def __init__(self, values=[]):
-        self.values = values[:]
-    def __call__(self, name, value=None):
-        """Shortcut for append method."""
-        self.append(name, value)
-    def append(self, name, value=None):
-        if type(value) in (int,float):
-            value = str(value)
-        self.values.append((name,value))
-
-
-class Version(object):
-    """
-    Parse and compare AsciiDoc version numbers. Instance attributes:
-
-    string: String version number '<major>.<minor>[.<micro>][suffix]'.
-    major:  Integer major version number.
-    minor:  Integer minor version number.
-    micro:  Integer micro version number.
-    suffix: Suffix (begins with non-numeric character) is ignored when
-            comparing.
-
-    Doctest examples:
-
-    >>> Version('8.2.5') < Version('8.3 beta 1')
-    True
-    >>> Version('8.3.0') == Version('8.3. beta 1')
-    True
-    >>> Version('8.2.0') < Version('8.20')
-    True
-    >>> Version('8.20').major
-    8
-    >>> Version('8.20').minor
-    20
-    >>> Version('8.20').micro
-    0
-    >>> Version('8.20').suffix
-    ''
-    >>> Version('8.20 beta 1').suffix
-    'beta 1'
-
-    """
-    def __init__(self, version):
-        self.string = version
-        reo = re.match(r'^(\d+)\.(\d+)(\.(\d+))?\s*(.*?)\s*$', self.string)
-        if not reo:
-            raise ValueError('invalid version number: %s' % self.string)
-        groups = reo.groups()
-        self.major = int(groups[0])
-        self.minor = int(groups[1])
-        self.micro = int(groups[3] or '0')
-        self.suffix = groups[4] or ''
-    def __cmp__(self, other):
-        result = cmp(self.major, other.major)
-        if result == 0:
-            result = cmp(self.minor, other.minor)
-            if result == 0:
-                result = cmp(self.micro, other.micro)
-        return result
-
-
-class AsciiDocAPI(object):
-    """
-    AsciiDoc API class.
-    """
-    def __init__(self, asciidoc_py=None):
-        """
-        Locate and import asciidoc.py.
-        Initialize instance attributes.
-        """
-        self.options = Options()
-        self.attributes = {}
-        self.messages = []
-        # Search for the asciidoc command file.
-        # Try ASCIIDOC_PY environment variable first.
-        cmd = os.environ.get('ASCIIDOC_PY')
-        if cmd:
-            if not os.path.isfile(cmd):
-                raise AsciiDocError('missing ASCIIDOC_PY file: %s' % cmd)
-        elif asciidoc_py:
-            # Next try path specified by caller.
-            cmd = asciidoc_py
-            if not os.path.isfile(cmd):
-                raise AsciiDocError('missing file: %s' % cmd)
-        else:
-            # Try shell search paths.
-            for fname in ['asciidoc.py','asciidoc.pyc','asciidoc']:
-                cmd = find_in_path(fname)
-                if cmd: break
-            else:
-                # Finally try current working directory.
-                for cmd in ['asciidoc.py','asciidoc.pyc','asciidoc']:
-                    if os.path.isfile(cmd): break
-                else:
-                    raise AsciiDocError('failed to locate asciidoc')
-        self.cmd = os.path.realpath(cmd)
-        self.__import_asciidoc()
-
-    def __import_asciidoc(self, reload=False):
-        '''
-        Import asciidoc module (script or compiled .pyc).
-        See
-        http://groups.google.com/group/asciidoc/browse_frm/thread/66e7b59d12cd2f91
-        for an explanation of why a seemingly straight-forward job turned out
-        quite complicated.
-        '''
-        if os.path.splitext(self.cmd)[1] in ['.py','.pyc']:
-            sys.path.insert(0, os.path.dirname(self.cmd))
-            try:
-                try:
-                    if reload:
-                        import __builtin__  # Because reload() is shadowed.
-                        __builtin__.reload(self.asciidoc)
-                    else:
-                        import asciidoc
-                        self.asciidoc = asciidoc
-                except ImportError:
-                    raise AsciiDocError('failed to import ' + self.cmd)
-            finally:
-                del sys.path[0]
-        else:
-            # The import statement can only handle .py or .pyc files, have to
-            # use imp.load_source() for scripts with other names.
-            try:
-                imp.load_source('asciidoc', self.cmd)
-                import asciidoc
-                self.asciidoc = asciidoc
-            except ImportError:
-                raise AsciiDocError('failed to import ' + self.cmd)
-        if Version(self.asciidoc.VERSION) < Version(MIN_ASCIIDOC_VERSION):
-            raise AsciiDocError(
-                'asciidocapi %s requires asciidoc %s or better'
-                % (API_VERSION, MIN_ASCIIDOC_VERSION))
-
-    def execute(self, infile, outfile=None, backend=None):
-        """
-        Compile infile to outfile using backend format.
-        infile can outfile can be file path strings or file like objects.
-        """
-        self.messages = []
-        opts = Options(self.options.values)
-        if outfile is not None:
-            opts('--out-file', outfile)
-        if backend is not None:
-            opts('--backend', backend)
-        for k,v in self.attributes.items():
-            if v == '' or k[-1] in '!@':
-                s = k
-            elif v is None: # A None value undefines the attribute.
-                s = k + '!'
-            else:
-                s = '%s=%s' % (k,v)
-            opts('--attribute', s)
-        args = [infile]
-        # The AsciiDoc command was designed to process source text then
-        # exit, there are globals and statics in asciidoc.py that have
-        # to be reinitialized before each run -- hence the reload.
-        self.__import_asciidoc(reload=True)
-        try:
-            try:
-                self.asciidoc.execute(self.cmd, opts.values, args)
-            finally:
-                self.messages = self.asciidoc.messages[:]
-        except SystemExit, e:
-            if e.code:
-                raise AsciiDocError(self.messages[-1])
-
-
-if __name__ == "__main__":
-    """
-    Run module doctests.
-    """
-    import doctest
-    options = doctest.NORMALIZE_WHITESPACE + doctest.ELLIPSIS
-    doctest.testmod(optionflags=options)
diff --git a/source-builder/sb/asciidoc/common.aap b/source-builder/sb/asciidoc/common.aap
deleted file mode 100644
index 233d190..0000000
--- a/source-builder/sb/asciidoc/common.aap
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# Executed by all main.aap's before anything else.
-#
-
-_parent.VERS = 8.6.8
-_parent.DATE = 17 July 2012
-
-all:
-    :pass
diff --git a/source-builder/sb/asciidoc/configure b/source-builder/sb/asciidoc/configure
deleted file mode 100755
index 4c61b21..0000000
--- a/source-builder/sb/asciidoc/configure
+++ /dev/null
@@ -1,3033 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for asciidoc 8.6.8.
-#
-#
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
-# Foundation, Inc.
-#
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-	expr "X$arg" : "X\\(.*\\)$as_nl";
-	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""	$as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
-  *[\\/]* ) as_myself=$0 ;;
-  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
-IFS=$as_save_IFS
-
-     ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
-  as_myself=$0
-fi
-if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test "x$CONFIG_SHELL" = x; then
-  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '\${1+\"\$@\"}'='\"\$@\"'
-  setopt NO_GLOB_SUBST
-else
-  case \`(set -o) 2>/dev/null\` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-"
-  as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
-  exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1"
-  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
-  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
-  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
-  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1"
-  if (eval "$as_required") 2>/dev/null; then :
-  as_have_required=yes
-else
-  as_have_required=no
-fi
-  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  as_found=:
-  case $as_dir in #(
-	 /*)
-	   for as_base in sh bash ksh sh5; do
-	     # Try only shells that exist, to save several forks.
-	     as_shell=$as_dir/$as_base
-	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
-		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
-  CONFIG_SHELL=$as_shell as_have_required=yes
-		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
-  break 2
-fi
-fi
-	   done;;
-       esac
-  as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
-	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
-  CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
-      if test "x$CONFIG_SHELL" != x; then :
-  # We cannot yet assume a decent shell, so we have to provide a
-	# neutralization value for shells without unset; and this also
-	# works around shells that cannot unset nonexistent variables.
-	# Preserve -v and -x to the replacement shell.
-	BASH_ENV=/dev/null
-	ENV=/dev/null
-	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-	export CONFIG_SHELL
-	case $- in # ((((
-	  *v*x* | *x*v* ) as_opts=-vx ;;
-	  *v* ) as_opts=-v ;;
-	  *x* ) as_opts=-x ;;
-	  * ) as_opts= ;;
-	esac
-	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
-fi
-
-    if test x$as_have_required = xno; then :
-  $as_echo "$0: This script requires a shell more modern than all"
-  $as_echo "$0: the shells that I found on your system."
-  if test x${ZSH_VERSION+set} = xset ; then
-    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
-    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
-  else
-    $as_echo "$0: Please tell bug-autoconf at gnu.org about your system,
-$0: including any error possibly output before this
-$0: message. Then install a modern shell, or manually run
-$0: the script under such a shell if you do have one."
-  fi
-  exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$1; test $as_status -eq 0 && as_status=1
-  if test "$4"; then
-    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
-  fi
-  $as_echo "$as_me: error: $2" >&2
-  as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-
-  as_lineno_1=$LINENO as_lineno_1a=$LINENO
-  as_lineno_2=$LINENO as_lineno_2a=$LINENO
-  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
-  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
-  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
-  sed -n '
-    p
-    /[$]LINENO/=
-  ' <$as_myself |
-    sed '
-      s/[$]LINENO.*/&-/
-      t lineno
-      b
-      :lineno
-      N
-      :loop
-      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
-      t loop
-      s/-\n.*//
-    ' >$as_me.lineno &&
-  chmod +x "$as_me.lineno" ||
-    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensitive to this).
-  . "./$as_me.lineno"
-  # Exit status is that of the last command.
-  exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='	';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
-  rm -f conf$$.dir/conf$$.file
-else
-  rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
-    as_ln_s='cp -p'
-  fi
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-	test -d "$1/.";
-      else
-	case $1 in #(
-	-*)set "./$1";;
-	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-	???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME='asciidoc'
-PACKAGE_TARNAME='asciidoc'
-PACKAGE_VERSION='8.6.8'
-PACKAGE_STRING='asciidoc 8.6.8'
-PACKAGE_BUGREPORT=''
-PACKAGE_URL=''
-
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-LN_S
-SED
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-'
-      ac_precious_vars='build_alias
-host_alias
-target_alias'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
-  # If the previous option needs an argument, assign it.
-  if test -n "$ac_prev"; then
-    eval $ac_prev=\$ac_option
-    ac_prev=
-    continue
-  fi
-
-  case $ac_option in
-  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
-  *=)   ac_optarg= ;;
-  *)    ac_optarg=yes ;;
-  esac
-
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
-  case $ac_dashdash$ac_option in
-  --)
-    ac_dashdash=yes ;;
-
-  -bindir | --bindir | --bindi | --bind | --bin | --bi)
-    ac_prev=bindir ;;
-  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-    bindir=$ac_optarg ;;
-
-  -build | --build | --buil | --bui | --bu)
-    ac_prev=build_alias ;;
-  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
-    build_alias=$ac_optarg ;;
-
-  -cache-file | --cache-file | --cache-fil | --cache-fi \
-  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-    ac_prev=cache_file ;;
-  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-    cache_file=$ac_optarg ;;
-
-  --config-cache | -C)
-    cache_file=config.cache ;;
-
-  -datadir | --datadir | --datadi | --datad)
-    ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=*)
-    datadir=$ac_optarg ;;
-
-  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
-  | --dataroo | --dataro | --datar)
-    ac_prev=datarootdir ;;
-  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
-  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
-    datarootdir=$ac_optarg ;;
-
-  -disable-* | --disable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=no ;;
-
-  -docdir | --docdir | --docdi | --doc | --do)
-    ac_prev=docdir ;;
-  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
-    docdir=$ac_optarg ;;
-
-  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
-    ac_prev=dvidir ;;
-  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
-    dvidir=$ac_optarg ;;
-
-  -enable-* | --enable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=\$ac_optarg ;;
-
-  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
-  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-  | --exec | --exe | --ex)
-    ac_prev=exec_prefix ;;
-  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
-  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
-  | --exec=* | --exe=* | --ex=*)
-    exec_prefix=$ac_optarg ;;
-
-  -gas | --gas | --ga | --g)
-    # Obsolete; use --with-gas.
-    with_gas=yes ;;
-
-  -help | --help | --hel | --he | -h)
-    ac_init_help=long ;;
-  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
-    ac_init_help=recursive ;;
-  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
-    ac_init_help=short ;;
-
-  -host | --host | --hos | --ho)
-    ac_prev=host_alias ;;
-  -host=* | --host=* | --hos=* | --ho=*)
-    host_alias=$ac_optarg ;;
-
-  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
-    ac_prev=htmldir ;;
-  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
-  | --ht=*)
-    htmldir=$ac_optarg ;;
-
-  -includedir | --includedir | --includedi | --included | --include \
-  | --includ | --inclu | --incl | --inc)
-    ac_prev=includedir ;;
-  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
-  | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir=$ac_optarg ;;
-
-  -infodir | --infodir | --infodi | --infod | --info | --inf)
-    ac_prev=infodir ;;
-  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir=$ac_optarg ;;
-
-  -libdir | --libdir | --libdi | --libd)
-    ac_prev=libdir ;;
-  -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir=$ac_optarg ;;
-
-  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
-  | --libexe | --libex | --libe)
-    ac_prev=libexecdir ;;
-  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
-  | --libexe=* | --libex=* | --libe=*)
-    libexecdir=$ac_optarg ;;
-
-  -localedir | --localedir | --localedi | --localed | --locale)
-    ac_prev=localedir ;;
-  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
-    localedir=$ac_optarg ;;
-
-  -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst | --locals)
-    ac_prev=localstatedir ;;
-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
-    localstatedir=$ac_optarg ;;
-
-  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
-    ac_prev=mandir ;;
-  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir=$ac_optarg ;;
-
-  -nfp | --nfp | --nf)
-    # Obsolete; use --without-fp.
-    with_fp=no ;;
-
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c | -n)
-    no_create=yes ;;
-
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
-    no_recursion=yes ;;
-
-  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
-  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
-  | --oldin | --oldi | --old | --ol | --o)
-    ac_prev=oldincludedir ;;
-  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
-  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
-  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-    oldincludedir=$ac_optarg ;;
-
-  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-    ac_prev=prefix ;;
-  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix=$ac_optarg ;;
-
-  -program-prefix | --program-prefix | --program-prefi | --program-pref \
-  | --program-pre | --program-pr | --program-p)
-    ac_prev=program_prefix ;;
-  -program-prefix=* | --program-prefix=* | --program-prefi=* \
-  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-    program_prefix=$ac_optarg ;;
-
-  -program-suffix | --program-suffix | --program-suffi | --program-suff \
-  | --program-suf | --program-su | --program-s)
-    ac_prev=program_suffix ;;
-  -program-suffix=* | --program-suffix=* | --program-suffi=* \
-  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-    program_suffix=$ac_optarg ;;
-
-  -program-transform-name | --program-transform-name \
-  | --program-transform-nam | --program-transform-na \
-  | --program-transform-n | --program-transform- \
-  | --program-transform | --program-transfor \
-  | --program-transfo | --program-transf \
-  | --program-trans | --program-tran \
-  | --progr-tra | --program-tr | --program-t)
-    ac_prev=program_transform_name ;;
-  -program-transform-name=* | --program-transform-name=* \
-  | --program-transform-nam=* | --program-transform-na=* \
-  | --program-transform-n=* | --program-transform-=* \
-  | --program-transform=* | --program-transfor=* \
-  | --program-transfo=* | --program-transf=* \
-  | --program-trans=* | --program-tran=* \
-  | --progr-tra=* | --program-tr=* | --program-t=*)
-    program_transform_name=$ac_optarg ;;
-
-  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
-    ac_prev=pdfdir ;;
-  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
-    pdfdir=$ac_optarg ;;
-
-  -psdir | --psdir | --psdi | --psd | --ps)
-    ac_prev=psdir ;;
-  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
-    psdir=$ac_optarg ;;
-
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil)
-    silent=yes ;;
-
-  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-    ac_prev=sbindir ;;
-  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-  | --sbi=* | --sb=*)
-    sbindir=$ac_optarg ;;
-
-  -sharedstatedir | --sharedstatedir | --sharedstatedi \
-  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
-  | --sharedst | --shareds | --shared | --share | --shar \
-  | --sha | --sh)
-    ac_prev=sharedstatedir ;;
-  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
-  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
-  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
-  | --sha=* | --sh=*)
-    sharedstatedir=$ac_optarg ;;
-
-  -site | --site | --sit)
-    ac_prev=site ;;
-  -site=* | --site=* | --sit=*)
-    site=$ac_optarg ;;
-
-  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-    ac_prev=srcdir ;;
-  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-    srcdir=$ac_optarg ;;
-
-  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
-  | --syscon | --sysco | --sysc | --sys | --sy)
-    ac_prev=sysconfdir ;;
-  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
-  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir=$ac_optarg ;;
-
-  -target | --target | --targe | --targ | --tar | --ta | --t)
-    ac_prev=target_alias ;;
-  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-    target_alias=$ac_optarg ;;
-
-  -v | -verbose | --verbose | --verbos | --verbo | --verb)
-    verbose=yes ;;
-
-  -version | --version | --versio | --versi | --vers | -V)
-    ac_init_version=: ;;
-
-  -with-* | --with-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=\$ac_optarg ;;
-
-  -without-* | --without-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=no ;;
-
-  --x)
-    # Obsolete; use --with-x.
-    with_x=yes ;;
-
-  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
-  | --x-incl | --x-inc | --x-in | --x-i)
-    ac_prev=x_includes ;;
-  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
-  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
-    x_includes=$ac_optarg ;;
-
-  -x-libraries | --x-libraries | --x-librarie | --x-librari \
-  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
-    ac_prev=x_libraries ;;
-  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
-  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
-    x_libraries=$ac_optarg ;;
-
-  -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
-    ;;
-
-  *=*)
-    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
-    # Reject names that are not valid shell variable names.
-    case $ac_envvar in #(
-      '' | [0-9]* | *[!_$as_cr_alnum]* )
-      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
-    esac
-    eval $ac_envvar=\$ac_optarg
-    export $ac_envvar ;;
-
-  *)
-    # FIXME: should be removed in autoconf 3.0.
-    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
-    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
-    ;;
-
-  esac
-done
-
-if test -n "$ac_prev"; then
-  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
-  case $enable_option_checking in
-    no) ;;
-    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
-    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
-  esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
-		datadir sysconfdir sharedstatedir localstatedir includedir \
-		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-		libdir localedir mandir
-do
-  eval ac_val=\$$ac_var
-  # Remove trailing slashes.
-  case $ac_val in
-    */ )
-      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
-      eval $ac_var=\$ac_val;;
-  esac
-  # Be sure to have absolute directory names.
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* )  continue;;
-    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
-  esac
-  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
-  if test "x$build_alias" = x; then
-    cross_compiling=maybe
-    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used" >&2
-  elif test "x$build_alias" != "x$host_alias"; then
-    cross_compiling=yes
-  fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  as_fn_error $? "pwd does not report name of working directory"
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
-  ac_srcdir_defaulted=yes
-  # Try the directory containing this script, then the parent directory.
-  ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_myself" : 'X\(//\)[^/]' \| \
-	 X"$as_myself" : 'X\(//\)$' \| \
-	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-  srcdir=$ac_confdir
-  if test ! -r "$srcdir/$ac_unique_file"; then
-    srcdir=..
-  fi
-else
-  ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
-  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
-	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
-	pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
-  srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
-  eval ac_env_${ac_var}_set=\${${ac_var}+set}
-  eval ac_env_${ac_var}_value=\$${ac_var}
-  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
-  eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
-  # Omit some internal or obsolete options to make the list less imposing.
-  # This message is too long to be a string in the A/UX 3.1 sh.
-  cat <<_ACEOF
-\`configure' configures asciidoc 8.6.8 to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE.  See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
-  -h, --help              display this help and exit
-      --help=short        display options specific to this package
-      --help=recursive    display the short help of all the included packages
-  -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking ...' messages
-      --cache-file=FILE   cache test results in FILE [disabled]
-  -C, --config-cache      alias for \`--cache-file=config.cache'
-  -n, --no-create         do not create output files
-      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
-
-Installation directories:
-  --prefix=PREFIX         install architecture-independent files in PREFIX
-                          [$ac_default_prefix]
-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                          [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
-  --bindir=DIR            user executables [EPREFIX/bin]
-  --sbindir=DIR           system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR        program executables [EPREFIX/libexec]
-  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
-  --libdir=DIR            object code libraries [EPREFIX/lib]
-  --includedir=DIR        C header files [PREFIX/include]
-  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
-  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
-  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
-  --infodir=DIR           info documentation [DATAROOTDIR/info]
-  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
-  --mandir=DIR            man documentation [DATAROOTDIR/man]
-  --docdir=DIR            documentation root [DATAROOTDIR/doc/asciidoc]
-  --htmldir=DIR           html documentation [DOCDIR]
-  --dvidir=DIR            dvi documentation [DOCDIR]
-  --pdfdir=DIR            pdf documentation [DOCDIR]
-  --psdir=DIR             ps documentation [DOCDIR]
-_ACEOF
-
-  cat <<\_ACEOF
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-  case $ac_init_help in
-     short | recursive ) echo "Configuration of asciidoc 8.6.8:";;
-   esac
-  cat <<\_ACEOF
-
-Report bugs to the package provider.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
-  # If there are subdirs, report their specific --help.
-  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d "$ac_dir" ||
-      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
-      continue
-    ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-    cd "$ac_dir" || { ac_status=$?; continue; }
-    # Check for guested configure.
-    if test -f "$ac_srcdir/configure.gnu"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
-    elif test -f "$ac_srcdir/configure"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure" --help=recursive
-    else
-      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-    fi || ac_status=$?
-    cd "$ac_pwd" || { ac_status=$?; break; }
-  done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
-  cat <<\_ACEOF
-asciidoc configure 8.6.8
-generated by GNU Autoconf 2.68
-
-Copyright (C) 2010 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
-  exit
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by asciidoc $as_me 8.6.8, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
-
-  $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
-
-/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
-/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
-/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    $as_echo "PATH: $as_dir"
-  done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
-  for ac_arg
-  do
-    case $ac_arg in
-    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
-    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-    | -silent | --silent | --silen | --sile | --sil)
-      continue ;;
-    *\'*)
-      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    case $ac_pass in
-    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
-    2)
-      as_fn_append ac_configure_args1 " '$ac_arg'"
-      if test $ac_must_keep_next = true; then
-	ac_must_keep_next=false # Got value, back to normal.
-      else
-	case $ac_arg in
-	  *=* | --config-cache | -C | -disable-* | --disable-* \
-	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
-	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
-	  | -with-* | --with-* | -without-* | --without-* | --x)
-	    case "$ac_configure_args0 " in
-	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
-	    esac
-	    ;;
-	  -* ) ac_must_keep_next=true ;;
-	esac
-      fi
-      as_fn_append ac_configure_args " '$ac_arg'"
-      ;;
-    esac
-  done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset ac_configure_args1;}
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log.  We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
-  # Save into config.log some information that might help in debugging.
-  {
-    echo
-
-    $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
-    echo
-    # The following way of writing the cache mishandles newlines in values,
-(
-  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
-  (set) 2>&1 |
-    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      sed -n \
-	"s/'\''/'\''\\\\'\'''\''/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
-      ;; #(
-    *)
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-)
-    echo
-
-    $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
-    echo
-    for ac_var in $ac_subst_vars
-    do
-      eval ac_val=\$$ac_var
-      case $ac_val in
-      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-      esac
-      $as_echo "$ac_var='\''$ac_val'\''"
-    done | sort
-    echo
-
-    if test -n "$ac_subst_files"; then
-      $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
-      echo
-      for ac_var in $ac_subst_files
-      do
-	eval ac_val=\$$ac_var
-	case $ac_val in
-	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-	esac
-	$as_echo "$ac_var='\''$ac_val'\''"
-      done | sort
-      echo
-    fi
-
-    if test -s confdefs.h; then
-      $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
-      echo
-      cat confdefs.h
-      echo
-    fi
-    test "$ac_signal" != 0 &&
-      $as_echo "$as_me: caught signal $ac_signal"
-    $as_echo "$as_me: exit $exit_status"
-  } >&5
-  rm -f core *.core core.conftest.* &&
-    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
-    exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
-  # We do not want a PATH search for config.site.
-  case $CONFIG_SITE in #((
-    -*)  ac_site_file1=./$CONFIG_SITE;;
-    */*) ac_site_file1=$CONFIG_SITE;;
-    *)   ac_site_file1=./$CONFIG_SITE;;
-  esac
-elif test "x$prefix" != xNONE; then
-  ac_site_file1=$prefix/share/config.site
-  ac_site_file2=$prefix/etc/config.site
-else
-  ac_site_file1=$ac_default_prefix/share/config.site
-  ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
-  test "x$ac_site_file" = xNONE && continue
-  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
-    sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file" \
-      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
-  fi
-done
-
-if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special files
-  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
-  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
-    case $cache_file in
-      [\\/]* | ?:[\\/]* ) . "$cache_file";;
-      *)                      . "./$cache_file";;
-    esac
-  fi
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
-  >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
-  eval ac_old_set=\$ac_cv_env_${ac_var}_set
-  eval ac_new_set=\$ac_env_${ac_var}_set
-  eval ac_old_val=\$ac_cv_env_${ac_var}_value
-  eval ac_new_val=\$ac_env_${ac_var}_value
-  case $ac_old_set,$ac_new_set in
-    set,)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,set)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,);;
-    *)
-      if test "x$ac_old_val" != "x$ac_new_val"; then
-	# differences in whitespace do not lead to failure.
-	ac_old_val_w=`echo x $ac_old_val`
-	ac_new_val_w=`echo x $ac_new_val`
-	if test "$ac_old_val_w" != "$ac_new_val_w"; then
-	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-	  ac_cache_corrupted=:
-	else
-	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
-	  eval $ac_var=\$ac_old_val
-	fi
-	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
-$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
-	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
-$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
-      fi;;
-  esac
-  # Pass precious variables to config.status.
-  if test "$ac_new_set" = set; then
-    case $ac_new_val in
-    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
-    *) ac_arg=$ac_var=$ac_new_val ;;
-    esac
-    case " $ac_configure_args " in
-      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
-    esac
-  fi
-done
-if $ac_cache_corrupted; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-ac_config_files="$ac_config_files Makefile"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
-$as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if ${ac_cv_path_SED+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
-     for ac_i in 1 2 3 4 5 6 7; do
-       ac_script="$ac_script$as_nl$ac_script"
-     done
-     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
-     { ac_script=; unset ac_script;}
-     if test -z "$SED"; then
-  ac_path_SED_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in sed gsed; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
-# Check for GNU ac_path_SED and select it if it is found.
-  # Check for GNU $ac_path_SED
-case `"$ac_path_SED" --version 2>&1` in
-*GNU*)
-  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo '' >> "conftest.nl"
-    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_SED_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_SED="$ac_path_SED"
-      ac_path_SED_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_SED_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_SED"; then
-    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
-  fi
-else
-  ac_cv_path_SED=$SED
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
-$as_echo "$ac_cv_path_SED" >&6; }
- SED="$ac_cv_path_SED"
-  rm -f conftest.sed
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
-$as_echo_n "checking whether ln -s works... " >&6; }
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
-fi
-
-
-ac_aux_dir=
-for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
-  if test -f "$ac_dir/install-sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f "$ac_dir/install.sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f "$ac_dir/shtool"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
-    break
-  fi
-done
-if test -z "$ac_aux_dir"; then
-  as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
-
-
-# Find a good install program.  We prefer a C program (faster),
-# so one script is as good as another.  But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems.  If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
-  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
-
-  (set) 2>&1 |
-    case $as_nl`(ac_space=' '; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      # `set' does not quote correctly, so add quotes: double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \.
-      sed -n \
-	"s/'/'\\\\''/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
-      ;; #(
-    *)
-      # `set' quotes correctly as required by POSIX, so do not add quotes.
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-) |
-  sed '
-     /^ac_cv_env_/b end
-     t clear
-     :clear
-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
-     t end
-     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-     :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
-  if test -w "$cache_file"; then
-    if test "x$cache_file" != "x/dev/null"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
-      if test ! -f "$cache_file" || test -h "$cache_file"; then
-	cat confcache >"$cache_file"
-      else
-        case $cache_file in #(
-        */* | ?:*)
-	  mv -f confcache "$cache_file"$$ &&
-	  mv -f "$cache_file"$$ "$cache_file" ;; #(
-        *)
-	  mv -f confcache "$cache_file" ;;
-	esac
-      fi
-    fi
-  else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
-  fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# Transform confdefs.h into DEFS.
-# Protect against shell expansion while executing Makefile rules.
-# Protect against Makefile macro expansion.
-#
-# If the first sed substitution is executed (which looks for macros that
-# take arguments), then branch to the quote section.  Otherwise,
-# look for a macro that doesn't take arguments.
-ac_script='
-:mline
-/\\$/{
- N
- s,\\\n,,
- b mline
-}
-t clear
-:clear
-s/^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*([^)]*)\)[	 ]*\(.*\)/-D\1=\2/g
-t quote
-s/^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)/-D\1=\2/g
-t quote
-b any
-:quote
-s/[	 `~#$^&*(){}\\|;'\''"<>?]/\\&/g
-s/\[/\\&/g
-s/\]/\\&/g
-s/\$/$$/g
-H
-:any
-${
-	g
-	s/^\n//
-	s/\n/ /g
-	p
-}
-'
-DEFS=`sed -n "$ac_script" confdefs.h`
-
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-  # 1. Remove the extension, and $U if already installed.
-  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
-  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
-  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
-  #    will be set to the directory where LIBOBJS objects are built.
-  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
-  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-
-SHELL=\${CONFIG_SHELL-$SHELL}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-	expr "X$arg" : "X\\(.*\\)$as_nl";
-	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""	$as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
-  *[\\/]* ) as_myself=$0 ;;
-  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
-IFS=$as_save_IFS
-
-     ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
-  as_myself=$0
-fi
-if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$1; test $as_status -eq 0 && as_status=1
-  if test "$4"; then
-    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
-  fi
-  $as_echo "$as_me: error: $2" >&2
-  as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='	';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
-  rm -f conf$$.dir/conf$$.file
-else
-  rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
-    as_ln_s='cp -p'
-  fi
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-	test -d "$1/.";
-      else
-	case $1 in #(
-	-*)set "./$1";;
-	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-	???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by asciidoc $as_me 8.6.8, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
-
-  CONFIG_FILES    = $CONFIG_FILES
-  CONFIG_HEADERS  = $CONFIG_HEADERS
-  CONFIG_LINKS    = $CONFIG_LINKS
-  CONFIG_COMMANDS = $CONFIG_COMMANDS
-  $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration.  Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
-  -h, --help       print this help, then exit
-  -V, --version    print version number and configuration settings, then exit
-      --config     print configuration, then exit
-  -q, --quiet, --silent
-                   do not print progress messages
-  -d, --debug      don't remove temporary files
-      --recheck    update $as_me by reconfiguring in the same conditions
-      --file=FILE[:TEMPLATE]
-                   instantiate the configuration file FILE
-
-Configuration files:
-$config_files
-
-Report bugs to the package provider."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-asciidoc config.status 8.6.8
-configured by $0, generated by GNU Autoconf 2.68,
-  with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2010 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
-  case $1 in
-  --*=?*)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
-    ac_shift=:
-    ;;
-  --*=)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=
-    ac_shift=:
-    ;;
-  *)
-    ac_option=$1
-    ac_optarg=$2
-    ac_shift=shift
-    ;;
-  esac
-
-  case $ac_option in
-  # Handling of the options.
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    ac_cs_recheck=: ;;
-  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
-    $as_echo "$ac_cs_version"; exit ;;
-  --config | --confi | --conf | --con | --co | --c )
-    $as_echo "$ac_cs_config"; exit ;;
-  --debug | --debu | --deb | --de | --d | -d )
-    debug=: ;;
-  --file | --fil | --fi | --f )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    '') as_fn_error $? "missing file argument" ;;
-    esac
-    as_fn_append CONFIG_FILES " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --he | --h |  --help | --hel | -h )
-    $as_echo "$ac_cs_usage"; exit ;;
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil | --si | --s)
-    ac_cs_silent=: ;;
-
-  # This is an error.
-  -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
-  *) as_fn_append ac_config_targets " $1"
-     ac_need_defaults=false ;;
-
-  esac
-  shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
-  exec 6>/dev/null
-  ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
-  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-  shift
-  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
-  CONFIG_SHELL='$SHELL'
-  export CONFIG_SHELL
-  exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-  $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
-  case $ac_config_target in
-    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-
-  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
-  esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used.  Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-fi
-
-# Have a temporary directory for convenience.  Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
-  tmp= ac_tmp=
-  trap 'exit_status=$?
-  : "${ac_tmp:=$tmp}"
-  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
-  trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
-  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -d "$tmp"
-}  ||
-{
-  tmp=./conf$$-$RANDOM
-  (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
-  eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\\r'
-else
-  ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
-  echo "cat >conf$$subs.awk <<_ACEOF" &&
-  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
-  echo "_ACEOF"
-} >conf$$subs.sh ||
-  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
-  . ./conf$$subs.sh ||
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
-  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
-  if test $ac_delim_n = $ac_delim_num; then
-    break
-  elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
-  N
-  s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
-  for (key in S) S_is_set[key] = 1
-  FS = ""
-
-}
-{
-  line = $ 0
-  nfields = split(line, field, "@")
-  substed = 0
-  len = length(field[1])
-  for (i = 2; i < nfields; i++) {
-    key = field[i]
-    keylen = length(key)
-    if (S_is_set[key]) {
-      value = S[key]
-      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
-      len += length(value) + length(field[++i])
-      substed = 1
-    } else
-      len += 1 + keylen
-  }
-
-  print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
-  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
-  cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
-  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
-h
-s///
-s/^/:/
-s/[	 ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[	 ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[	 ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-
-eval set X "  :F $CONFIG_FILES      "
-shift
-for ac_tag
-do
-  case $ac_tag in
-  :[FHLC]) ac_mode=$ac_tag; continue;;
-  esac
-  case $ac_mode$ac_tag in
-  :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
-  :[FH]-) ac_tag=-:-;;
-  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
-  esac
-  ac_save_IFS=$IFS
-  IFS=:
-  set x $ac_tag
-  IFS=$ac_save_IFS
-  shift
-  ac_file=$1
-  shift
-
-  case $ac_mode in
-  :L) ac_source=$1;;
-  :[FH])
-    ac_file_inputs=
-    for ac_f
-    do
-      case $ac_f in
-      -) ac_f="$ac_tmp/stdin";;
-      *) # Look for the file first in the build tree, then in the source tree
-	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
-	 # because $ac_f cannot contain `:'.
-	 test -f "$ac_f" ||
-	   case $ac_f in
-	   [\\/$]*) false;;
-	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
-	   esac ||
-	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
-      esac
-      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
-      as_fn_append ac_file_inputs " '$ac_f'"
-    done
-
-    # Let's still pretend it is `configure' which instantiates (i.e., don't
-    # use $as_me), people would be surprised to read:
-    #    /* config.h.  Generated by config.status.  */
-    configure_input='Generated from '`
-	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
-	`' by configure.'
-    if test x"$ac_file" != x-; then
-      configure_input="$ac_file.  $configure_input"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
-    fi
-    # Neutralize special characters interpreted by sed in replacement strings.
-    case $configure_input in #(
-    *\&* | *\|* | *\\* )
-       ac_sed_conf_input=`$as_echo "$configure_input" |
-       sed 's/[\\\\&|]/\\\\&/g'`;; #(
-    *) ac_sed_conf_input=$configure_input;;
-    esac
-
-    case $ac_tag in
-    *:-:* | *:-) cat >"$ac_tmp/stdin" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
-    esac
-    ;;
-  esac
-
-  ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_file" : 'X\(//\)[^/]' \| \
-	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-  as_dir="$ac_dir"; as_fn_mkdir_p
-  ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
-  case $ac_mode in
-  :F)
-  #
-  # CONFIG_FILE
-  #
-
-  case $INSTALL in
-  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
-  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
-  esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
-  p
-  q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  ac_datarootdir_hack='
-  s&@datadir@&$datadir&g
-  s&@docdir@&$docdir&g
-  s&@infodir@&$infodir&g
-  s&@localedir@&$localedir&g
-  s&@mandir@&$mandir&g
-  s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
-  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
-      "$ac_tmp/out"`; test -z "$ac_out"; } &&
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&2;}
-
-  rm -f "$ac_tmp/stdin"
-  case $ac_file in
-  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
-  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
-  esac \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
-
-
-
-  esac
-
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
-  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded.  So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status.  When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
-  ac_cs_success=:
-  ac_config_status_args=
-  test "$silent" = yes &&
-    ac_config_status_args="$ac_config_status_args --quiet"
-  exec 5>/dev/null
-  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
-  exec 5>>config.log
-  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
-  # would make configure fail if this is the last instruction.
-  $ac_cs_success || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff --git a/source-builder/sb/asciidoc/configure.ac b/source-builder/sb/asciidoc/configure.ac
deleted file mode 100644
index 3061ff6..0000000
--- a/source-builder/sb/asciidoc/configure.ac
+++ /dev/null
@@ -1,11 +0,0 @@
-AC_INIT(asciidoc, 8.6.8)
-
-AC_CONFIG_FILES(Makefile)
-
-AC_PROG_SED
-
-AC_PROG_LN_S
-
-AC_PROG_INSTALL
-
-AC_OUTPUT
diff --git a/source-builder/sb/asciidoc/dblatex/asciidoc-dblatex.sty b/source-builder/sb/asciidoc/dblatex/asciidoc-dblatex.sty
deleted file mode 100644
index 9d89839..0000000
--- a/source-builder/sb/asciidoc/dblatex/asciidoc-dblatex.sty
+++ /dev/null
@@ -1,20 +0,0 @@
-%%
-%% This style is derived from the docbook one.
-%%
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{asciidoc}[2008/06/05 AsciiDoc DocBook Style]
-%% Just use the original package and pass the options.
-\RequirePackageWithOptions{docbook}
-
-% Sidebar is a boxed minipage that can contain verbatim.
-% Changed shadow box to double box.
-\renewenvironment{sidebar}[1][0.95\textwidth]{
-  \hspace{0mm}\newline%
-  \noindent\begin{Sbox}\begin{minipage}{#1}%
-  \setlength\parskip{\medskipamount}%
-}{
-  \end{minipage}\end{Sbox}\doublebox{\TheSbox}%
-}
-
-% For DocBook literallayout elements, see `./dblatex/dblatex-readme.txt`.
-\usepackage{alltt}
diff --git a/source-builder/sb/asciidoc/dblatex/asciidoc-dblatex.xsl b/source-builder/sb/asciidoc/dblatex/asciidoc-dblatex.xsl
deleted file mode 100644
index 3df2d2e..0000000
--- a/source-builder/sb/asciidoc/dblatex/asciidoc-dblatex.xsl
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-dblatex(1) XSL user stylesheet for asciidoc(1).
-See dblatex(1) -p option.
--->
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-
-  <!-- TOC links in the titles, and in blue. -->
-  <xsl:param name="latex.hyperparam">colorlinks,linkcolor=blue,pdfstartview=FitH</xsl:param>
-  <xsl:param name="doc.publisher.show">1</xsl:param>
-  <xsl:param name="doc.lot.show"></xsl:param>
-  <xsl:param name="term.breakline">1</xsl:param>
-  <xsl:param name="doc.collab.show">0</xsl:param>
-  <xsl:param name="doc.section.depth">3</xsl:param>
-  <xsl:param name="table.in.float">0</xsl:param>
-  <xsl:param name="monoseq.hyphenation">0</xsl:param>
-  <xsl:param name="latex.output.revhistory">1</xsl:param>
-
-  <!-- This doesn't work, don't know why, see:
-  http://dblatex.sourceforge.net/html/manual/apas03.html
-  ./docbook-xsl/common.xsl
-  -->
-  <!--
-  <xsl:param name="doc.toc.show">
-    <xsl:choose>
-      <xsl:when test="/processing-instruction('asciidoc-toc')">
-1
-      </xsl:when>
-      <xsl:otherwise>
-0
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:param>
-  <xsl:param name="doc.lot.show">
-    <xsl:choose>
-      <xsl:when test="/book">
-figure,table,equation,example
-      </xsl:when>
-    </xsl:choose>
-  </xsl:param>
-  -->
-  <xsl:param name="doc.toc.show">1</xsl:param>
-
-  <!--
-    Override default literallayout template.
-    See `./dblatex/dblatex-readme.txt`.
-  -->
-  <xsl:template match="address|literallayout[@class!='monospaced']">
-    <xsl:text>\begin{alltt}</xsl:text>
-    <xsl:text>
\normalfont{}
</xsl:text>
-    <xsl:apply-templates/>
-    <xsl:text>
\end{alltt}</xsl:text>
-  </xsl:template>
-
-  <xsl:template match="processing-instruction('asciidoc-pagebreak')">
-    <!-- force hard pagebreak, varies from 0(low) to 4(high) -->
-    <xsl:text>\pagebreak[4] </xsl:text>
-    <xsl:apply-templates />
-    <xsl:text>
</xsl:text>
-  </xsl:template>
-
-  <xsl:template match="processing-instruction('asciidoc-br')">
-    <xsl:text>\newline
</xsl:text>
-  </xsl:template>
-
-  <xsl:template match="processing-instruction('asciidoc-hr')">
-    <!-- draw a 444 pt line (centered) -->
-    <xsl:text>\begin{center}
 </xsl:text>
-    <xsl:text>\line(1,0){444}
 </xsl:text>
-    <xsl:text>\end{center}
 </xsl:text>
-  </xsl:template>
-
-</xsl:stylesheet>
-
diff --git a/source-builder/sb/asciidoc/dblatex/dblatex-readme.txt b/source-builder/sb/asciidoc/dblatex/dblatex-readme.txt
deleted file mode 100644
index 39bb437..0000000
--- a/source-builder/sb/asciidoc/dblatex/dblatex-readme.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-AsciiDoc dblatex README
-=======================
-
-Customization
--------------
-The `./dblatex` directory contains:
-
-`./dblatex/asciidoc-dblatex.xsl`:: Optional dblatex XSL parameter
-customization.
-
-`./dblatex/asciidoc-dblatex.sty`:: Optional customized LaTeX styles.
-
-Use these files with dblatex(1) `-p` and `-s` options, for example:
-
-  dblatex -p ../dblatex/asciidoc-dblatex.xsl \
-          -s ../dblatex/asciidoc-dblatex.sty article.xml
-
-
-Limitations
------------
-Observed in dblatex 0.2.8.
-
-- dblatex doesn't seem to process the DocBook 'literallayout' element
-  correctly: it is rendered in a monospaced font and no inline
-  elements are processed. By default the normal font should be used
-  and almost all DocBook inline elements should be processed
-  (http://www.docbook.org/tdg/en/html/literallayout.html).  I almost
-  fixed this by overriding the default dblatex literallayout template
-  (in `./dblatex/asciidoc-dblatex.xsl`) and using the LaTeX 'alltt'
-  package, but there are remaining problems:
-
-  * Blank lines are replaced by a single space.
-  * The 'literallayout' element incorrectly wraps text when rendered
-    inside a table.
-
-- Callouts do not work inside DocBook 'literallayout' elements which
-  means callouts are not displayed inside AsciiDoc literal blocks.  A
-  workaround is to change the AsciiDoc literal block to a listing
-  block.
diff --git a/source-builder/sb/asciidoc/doc/a2x.1 b/source-builder/sb/asciidoc/doc/a2x.1
deleted file mode 100644
index dba224a..0000000
--- a/source-builder/sb/asciidoc/doc/a2x.1
+++ /dev/null
@@ -1,744 +0,0 @@
-'\" t
-.\"     Title: a2x
-.\"    Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
-.\"      Date: 17 July 2012
-.\"    Manual: \ \&
-.\"    Source: \ \& 8.6.8
-.\"  Language: English
-.\"
-.TH "A2X" "1" "17 July 2012" "\ \& 8\&.6\&.8" "\ \&"
-.\" -----------------------------------------------------------------
-.\" * Define some portability stuff
-.\" -----------------------------------------------------------------
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.\" http://bugs.debian.org/507673
-.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.ie \n(.g .ds Aq \(aq
-.el       .ds Aq '
-.\" -----------------------------------------------------------------
-.\" * set default formatting
-.\" -----------------------------------------------------------------
-.\" disable hyphenation
-.nh
-.\" disable justification (adjust text to left margin only)
-.ad l
-.\" -----------------------------------------------------------------
-.\" * MAIN CONTENT STARTS HERE *
-.\" -----------------------------------------------------------------
-.SH "NAME"
-a2x \- A toolchain manager for AsciiDoc (converts Asciidoc text files to other file formats)
-.SH "SYNOPSIS"
-.sp
-\fBa2x\fR [\fIOPTIONS\fR] \fISOURCE_FILE\fR
-.SH "DESCRIPTION"
-.sp
-A DocBook toolchain manager that translates an AsciiDoc text file \fISOURCE_FILE\fR to PDF, EPUB, DVI, PS, LaTeX, XHTML (single page or chunked), man page, HTML Help or plain text formats using \fIasciidoc(1)\fR and other applications (see REQUISITES section)\&. \fISOURCE_FILE\fR can also be a DocBook file with an \&.xml extension\&.
-.SH "OPTIONS"
-.PP
-\fB\-a, \-\-attribute\fR=\fIATTRIBUTE\fR
-.RS 4
-Set asciidoc(1) attribute value (shortcut for
-\fB\-\-asciidoc\-opts\fR=\fI"\-a ATTRIBUTE"\fR
-option)\&. This option may be specified more than once\&.
-.RE
-.PP
-\fB\-\-asciidoc\-opts\fR=\fIASCIIDOC_OPTS\fR
-.RS 4
-Additional
-\fIasciidoc(1)\fR
-options\&. This option may be specified more than once\&.
-.RE
-.PP
-\fB\-\-conf\-file\fR=\fICONF_FILE\fR
-.RS 4
-Load configuration file\&. See
-CONF FILES section\&.
-.RE
-.PP
-\fB\-D, \-\-destination\-dir\fR=\fIDESTINATION_DIR\fR
-.RS 4
-Output directory\&. Defaults to
-\fISOURCE_FILE\fR
-directory\&.
-.RE
-.PP
-\fB\-d, \-\-doctype\fR=\fIDOCTYPE\fR
-.RS 4
-DocBook document type:
-\fIarticle\fR,
-\fImanpage\fR
-or
-\fIbook\fR\&. Default document type is
-\fIarticle\fR
-unless the format is
-\fImanpage\fR
-(in which case it defaults to
-\fImanpage\fR)\&.
-.RE
-.PP
-\fB\-b, \-\-backend\fR=\fIBACKEND\fR
-.RS 4
-
-\fIBACKEND\fR
-is the name of an installed backend plugin\&. When this option is specified
-\fIa2x\fR
-attempts load a file name
-\fIa2x\-backend\&.py\fR
-from the
-\fIBACKEND\fR
-plugin directory It then converts the
-\fISOURCE_FILE\fR
-to a
-\fIBACKEND\fR
-formatted output file using a global function defined in
-\fIa2x\-backend\&.py\fR
-called
-\fIto_BACKEND\fR\&.
-.RE
-.PP
-\fB\-f, \-\-format\fR=\fIFORMAT\fR
-.RS 4
-Output formats:
-\fIchunked\fR,
-\fIdocbook\fR,
-\fIdvi\fR,
-\fIepub\fR,
-\fIhtmlhelp\fR,
-\fImanpage\fR,
-\fIpdf\fR
-(default),
-\fIps\fR,
-\fItex\fR,
-\fItext\fR,
-\fIxhtml\fR\&. The AsciiDoc
-\fIa2x\-format\fR
-attribute value is set to
-\fIFORMAT\fR\&.
-.RE
-.PP
-\fB\-h, \-\-help\fR
-.RS 4
-Print command\-line syntax and program options to stdout\&.
-.RE
-.PP
-\fB\-\-icons\fR
-.RS 4
-Use admonition or navigation icon images in output documents\&. The default behavior is to use text in place of icons\&.
-.RE
-.PP
-\fB\-\-icons\-dir\fR=\fIPATH\fR
-.RS 4
-A path (relative to output files) containing admonition and navigation icons\&. Defaults to
-images/icons\&. The
-\fI\-\-icons\fR
-option is implicit if this option is used\&.
-.RE
-.PP
-\fB\-k, \-\-keep\-artifacts\fR
-.RS 4
-Do not delete temporary build files\&.
-.RE
-.PP
-\fB\-\-lynx\fR
-.RS 4
-Use
-\fIlynx(1)\fR
-to generate text formatted output\&. The default behavior is to use
-\fIw3m(1)\fR\&.
-.RE
-.PP
-\fB\-L, \-\-no\-xmllint\fR
-.RS 4
-Do not check asciidoc output with
-\fIxmllint(1)\fR\&.
-.RE
-.PP
-\fB\-\-\-epubcheck\fR
-.RS 4
-Check EPUB output with
-\fIepubcheck(1)\fR\&.
-.RE
-.PP
-\fB\-n, \-\-dry\-run\fR
-.RS 4
-Do not do anything just print what would have been done\&.
-.RE
-.PP
-\fB\-r, \-\-resource\fR=\fIRESOURCE_SPEC\fR
-.RS 4
-Specify a resource\&. This option may be specified more than once\&. See the
-\fBRESOURCES\fR
-section for more details\&.
-.RE
-.PP
-\fB\-m, \-\-resource\-manifest\fR=\fIFILE\fR
-.RS 4
-
-\fIFILE\fR
-contains a list resources (one per line)\&. Manifest
-\fIFILE\fR
-entries are formatted just like
-\fB\-\-resource\fR
-option arguments\&. Environment variables and tilde home directories are allowed\&.
-.RE
-.PP
-\fB\-\-stylesheet\fR=\fISTYLESHEET\fR
-.RS 4
-A space delimited list of one or more CSS stylesheet file names that are used to style HTML output generated by DocBook XSL Stylesheets\&. Defaults to
-\fIdocbook\-xsl\&.css\fR\&. The stylesheets are processed in list order\&. The stylesheets must reside in a valid
-resource file
-location\&. Applies to HTML formats:
-\fIxhtml\fR,
-\fIepub\fR,
-\fIchunked\fR,
-\fIhtmlhelp\fR
-formats\&.
-.RE
-.PP
-\fB\-v, \-\-verbose\fR
-.RS 4
-Print operational details to stderr\&. A second
-\fB\-v\fR
-option applies the verbose option to toolchain commands\&.
-.RE
-.PP
-\fB\-\-version\fR
-.RS 4
-Print program version to stdout\&.
-.RE
-.PP
-\fB\-\-xsltproc\-opts\fR=\fIXSLTPROC_OPTS\fR
-.RS 4
-Additional
-\fIxsltproc(1)\fR
-options\&. This option may be specified more than once\&.
-.RE
-.PP
-\fB\-\-xsl\-file\fR=\fIXSL_FILE\fR
-.RS 4
-Override the built\-in XSL stylesheet with the custom XSL stylesheet
-\fIXSL_FILE\fR\&.
-.RE
-.PP
-\fB\-\-fop\fR
-.RS 4
-Use FOP to generate PDFs\&. The default behavior is to use
-\fIdblatex(1)\fR\&. The
-\fI\-\-fop\fR
-option is implicit if this option is used\&.
-.RE
-.PP
-\fB\-\-fop\-opts\fR=\fIFOP_OPTS\fR
-.RS 4
-Additional
-\fIfop(1)\fR
-options\&. If this option is specified FOP is used to generate PDFs\&. This option may be specified more than once\&.
-.RE
-.PP
-\fB\-\-dblatex\-opts\fR=\fIDBLATEX_OPTS\fR
-.RS 4
-Additional
-\fIdblatex(1)\fR
-options\&. This option may be specified more than once\&.
-.RE
-.PP
-\fB\-\-backend\-opts\fR=\fIBACKEND_OPTS\fR
-.RS 4
-Options for the backend plugin specified by the
-\fI\-\-backend\fR
-option\&. This option may be specified more than once\&.
-.RE
-.sp
-Options can also be set in the AsciiDoc source file\&. If \fISOURCE_FILE\fR contains a comment line beginning with \fB// a2x:\fR then the remainder of the line will be treated as \fIa2x\fR command\-line options\&. For example:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-// a2x default options\&.
-//    a2x: \-dbook \-\-epubcheck
-// Suppress revision history in dblatex outputs\&.
-//    a2x: \-\-dblatex\-opts "\-P latex\&.output\&.revhistory=0"
-.fi
-.if n \{\
-.RE
-.\}
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Options spanning multiple such comment lines will be concatenated\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Zero or more white space characters can appear between the leading
-\fB//\fR
-and
-\fBa2x:\fR\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-Command\-line options take precedence over options set in the source file\&.
-.RE
-.SH "OUTPUT FILES"
-.sp
-Output files are written to the directory specified by the \fB\-\-destination\-dir\fR option\&. If no \fB\-\-destination\-dir\fR option is set output files are written to the \fISOURCE_FILE\fR directory\&.
-.sp
-Output files have the same name as the \fISOURCE_FILE\fR but with an appropriate file name extension: \&.html for \fIxhtml\fR; \&.epub for \fIepub\fR; \&.hhp for \fIhtmlhelp\fR; \&.pdf for \fIpdf\fR; \&.text for \fItext\fR, \&.xml for \fIdocbook\fR\&. By convention manpages have no \&.man extension (man page section number only)\&. Chunked HTML directory names have a \&.chunked extension; chunked HTML Help directory names have a \&.htmlhelp extension\&.
-.sp
-Same named existing files are overwritten\&.
-.sp
-In addition to generating HTML files the \fIxhtml\fR, \fIepub\fR, \fIchunked\fR and \fIhtmlhelp\fR formats ensure resource files are copied to their correct destination directory locations\&.
-.SH "RESOURCES"
-.sp
-Resources are files (typically CSS and images) that are required by HTML based outputs (\fIxhtml\fR, \fIepub\fR, \fIchunked\fR, \fIhtmlhelp\fR formats)\&. \fIa2x\fR scans the generated HTML files and builds a list of required CSS and image files\&. Additional resource files can be specified explicitly using the \fB\-\-resource\fR option\&.
-.sp
-\fIa2x\fR searches for resource files in the following locations in the following order:
-.sp
-.RS 4
-.ie n \{\
-\h'-04' 1.\h'+01'\c
-.\}
-.el \{\
-.sp -1
-.IP "  1." 4.2
-.\}
-The
-\fISOURCE_FILE\fR
-directory\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04' 2.\h'+01'\c
-.\}
-.el \{\
-.sp -1
-.IP "  2." 4.2
-.\}
-Resource directories specified by the
-\fB\-\-resource\fR
-option (searched recursively)\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04' 3.\h'+01'\c
-.\}
-.el \{\
-.sp -1
-.IP "  3." 4.2
-.\}
-Resource directories specified by the
-\fB\-\-resource\-manifest\fR
-option (searched recursively in the order they appear in the manifest file)\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04' 4.\h'+01'\c
-.\}
-.el \{\
-.sp -1
-.IP "  4." 4.2
-.\}
-The stock
-images
-and
-stylesheets
-directories in the
-\fIasciidoc(1)\fR
-configuration files directories (searched recursively)\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04' 5.\h'+01'\c
-.\}
-.el \{\
-.sp -1
-.IP "  5." 4.2
-.\}
-The destination directory\&.
-.RE
-.sp
-When a resource file is found it is copied to the correct relative destination directory\&. Missing destination sub\-directories are created automatically\&.
-.sp
-There are two distinct mechanisms for specifying additional resources:
-.sp
-.RS 4
-.ie n \{\
-\h'-04' 1.\h'+01'\c
-.\}
-.el \{\
-.sp -1
-.IP "  1." 4.2
-.\}
-A resource directory which will be searched recursively for missing resource files\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04' 2.\h'+01'\c
-.\}
-.el \{\
-.sp -1
-.IP "  2." 4.2
-.\}
-A resource file which will be copied to the output destination directory\&.
-.RE
-.sp
-Resources are specified with \fB\-\-resource\fR option values which can be one of the following formats:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-<resource_dir>
-<resource_file>[=<destination_file>]
-\&.<ext>=<mimetype>
-.fi
-.if n \{\
-.RE
-.\}
-.sp
-Where:
-.PP
-<resource_dir>
-.RS 4
-Specifies a directory (absolute or relative to the
-\fISOURCE_FILE\fR) which is searched recursively for missing resource files\&. To eliminate ambiguity the
-<resource_dir>
-name should end with a directory separator character\&.
-.RE
-.PP
-<resource_file>
-.RS 4
-Specifies a resource file (absolute or relative to the
-\fISOURCE_FILE\fR) which will be copied to
-<destination_file>\&. If
-<destination_file>
-is not specified then it is the same as the
-<resource_file>\&.
-.RE
-.PP
-<destination_file>
-.RS 4
-Specifies the destination of the copied source file\&. The
-<destination_file>
-path is relative to the destination directory (absolute paths are not allowed)\&. The location of the destination directory depends on the output
-\fIFORMAT\fR
-(see the
-\fBOUTPUT FILES\fR
-section for details):
-.PP
-chunked, htmlhelp
-.RS 4
-The chunked output directory\&.
-.RE
-.PP
-epub
-.RS 4
-The archived
-OEBPS
-directory\&.
-.RE
-.PP
-xhtml
-.RS 4
-The output
-\fBDESTINATION_DIR\fR\&.
-.RE
-.RE
-.PP
-\&.<ext>=<mimetype>
-.RS 4
-When adding resources to EPUB files the mimetype is inferred from the
-<destination file>
-extension, if the mimetype cannot be guessed an error occurs\&. The
-\&.<ext>=<mimetype>
-resource syntax can be used to explicitly set mimetypes\&.
-<ext>
-is the file name extension,
-<mimetype>
-is the corresponding MIME type\&.
-.RE
-.sp
-Resource option examples:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-\-\-resource \&.\&./images/
-\-\-resource doc/README\&.txt=README\&.txt
-\-\-resource ~/images/tiger\&.png=images/tiger\&.png
-\-\-resource \&.ttf=application/x\-font\-ttf
-.fi
-.if n \{\
-.RE
-.\}
-.SH "EXAMPLES"
-.PP
-a2x \-f pdf doc/source\-highlight\-filter\&.txt
-.RS 4
-Generates
-doc/source\-highlight\-filter\&.pdf
-file\&.
-.RE
-.PP
-a2x \-f xhtml \-D \&.\&./doc \-\-icons \-r \&.\&./images/ team\&.txt
-.RS 4
-Creates HTML file
-\&.\&./doc/team\&.html, uses admonition icons and recursively searches the
-\&.\&./images/
-directory for any missing resources\&.
-.RE
-.PP
-a2x \-f manpage doc/asciidoc\&.1\&.txt
-.RS 4
-Generate
-doc/asciidoc\&.1
-manpage\&.
-.RE
-.SH "REQUISITES"
-.sp
-\fIa2x\fR uses the following programs:
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBAsciidoc\fR:
-http://www\&.methods\&.co\&.nz/asciidoc/
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBxsltproc\fR: (all formats except text):
-http://xmlsoft\&.org/XSLT/
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBDocBook XSL Stylesheets\fR
-(all formats except text):
-http://docbook\&.sourceforge\&.net/projects/xsl/
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBdblatex\fR
-(pdf, dvi, ps, tex formats):
-http://dblatex\&.sourceforge\&.net/
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBFOP\fR
-(pdf format \(em alternative PDF file generator):
-http://xmlgraphics\&.apache\&.org/fop/
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBw3m\fR
-(text format):
-http://w3m\&.sourceforge\&.net/index\&.en\&.html
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBLynx\fR
-(text format \(em alternative text file generator):
-http://lynx\&.isc\&.org/
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBepubcheck\fR
-(epub format \(em EPUB file validator):
-http://code\&.google\&.com/p/epubcheck/
-.RE
-.sp
-See also the latest README file\&.
-.SH "CONF FILES"
-.sp
-A configuration file contains executable Python code that overrides the global configuration parameters in a2x\&.py\&. Optional configuration files are loaded in the following order:
-.sp
-.RS 4
-.ie n \{\
-\h'-04' 1.\h'+01'\c
-.\}
-.el \{\
-.sp -1
-.IP "  1." 4.2
-.\}
-
-a2x\&.conf
-from the directory containing the
-\fIa2x\&.py\fR
-executable\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04' 2.\h'+01'\c
-.\}
-.el \{\
-.sp -1
-.IP "  2." 4.2
-.\}
-
-a2x\&.conf
-from the AsciiDoc global configuration directory\&. Skip this step if we are executing a locally installed (non system wide) copy\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04' 3.\h'+01'\c
-.\}
-.el \{\
-.sp -1
-.IP "  3." 4.2
-.\}
-
-a2x\&.conf
-from the AsciiDoc
-$HOME/\&.asciidoc
-configuration directory\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04' 4.\h'+01'\c
-.\}
-.el \{\
-.sp -1
-.IP "  4." 4.2
-.\}
-The
-\fICONF_FILE\fR
-specified in the
-\fI\-\-conf\-file\fR
-option\&.
-.RE
-.sp
-Here are the default configuration file option values:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-# Optional environment variable dictionary passed to
-# executing programs\&. If set to None the existing
-# environment is used\&.
-ENV = None
-
-# External executables\&.
-ASCIIDOC = \*(Aqasciidoc\*(Aq
-XSLTPROC = \*(Aqxsltproc\*(Aq
-DBLATEX = \*(Aqdblatex\*(Aq         # pdf generation\&.
-FOP = \*(Aqfop\*(Aq                 # pdf generation (\-\-fop option)\&.
-W3M = \*(Aqw3m\*(Aq                 # text generation\&.
-LYNX = \*(Aqlynx\*(Aq               # text generation (if no w3m)\&.
-XMLLINT = \*(Aqxmllint\*(Aq         # Set to \*(Aq\*(Aq to disable\&.
-EPUBCHECK = \*(Aqepubcheck\*(Aq     # Set to \*(Aq\*(Aq to disable\&.
-# External executable default options\&.
-ASCIIDOC_OPTS = \*(Aq\*(Aq
-DBLATEX_OPTS = \*(Aq\*(Aq
-FOP_OPTS = \*(Aq\*(Aq
-XSLTPROC_OPTS = \*(Aq\*(Aq
-.fi
-.if n \{\
-.RE
-.\}
-.SH "BUGS"
-.sp
-See the AsciiDoc distribution BUGS file\&.
-.SH "AUTHOR"
-.sp
-a2x was originally written by Stuart Rackham\&. Many people have contributed to it\&.
-.SH "RESOURCES"
-.sp
-SourceForge: http://sourceforge\&.net/projects/asciidoc/
-.sp
-Main web site: http://www\&.methods\&.co\&.nz/asciidoc/
-.SH "COPYING"
-.sp
-Copyright (C) 2002\-2011 Stuart Rackham\&. Free use of this software is granted under the terms of the MIT license\&.
diff --git a/source-builder/sb/asciidoc/doc/a2x.1.txt b/source-builder/sb/asciidoc/doc/a2x.1.txt
deleted file mode 100644
index 56cc956..0000000
--- a/source-builder/sb/asciidoc/doc/a2x.1.txt
+++ /dev/null
@@ -1,358 +0,0 @@
-A2X(1)
-======
-:doctype: manpage
-
-
-NAME
-----
-a2x - A toolchain manager for AsciiDoc (converts Asciidoc text files to other
-      file formats)
-
-
-SYNOPSIS
---------
-*a2x* ['OPTIONS'] 'SOURCE_FILE'
-
-
-DESCRIPTION
------------
-A DocBook toolchain manager that translates an AsciiDoc text file
-'SOURCE_FILE' to PDF, EPUB, DVI, PS, LaTeX, XHTML (single page or
-chunked), man page, HTML Help or plain text formats using
-'asciidoc(1)' and other applications (see <<X1,REQUISITES section>>).
-'SOURCE_FILE' can also be a DocBook file with an .xml extension.
-
-
-OPTIONS
--------
-*-a, --attribute*='ATTRIBUTE'::
-  Set asciidoc(1) attribute value (shortcut for *--asciidoc-opts*='"-a
-  ATTRIBUTE"' option).
-  This option may be specified more than once.
-
-*--asciidoc-opts*='ASCIIDOC_OPTS'::
-  Additional 'asciidoc(1)' options.
-  This option may be specified more than once.
-
-*--conf-file*='CONF_FILE'::
-  Load configuration file. See <<X2,CONF FILES section>>.
-
-*-D, --destination-dir*='DESTINATION_DIR'::
-  Output directory. Defaults to 'SOURCE_FILE' directory.
-
-*-d, --doctype*='DOCTYPE'::
-  DocBook document type: 'article', 'manpage' or 'book'.  Default
-  document type is 'article' unless the format is 'manpage' (in which
-  case it defaults to 'manpage').
-
-*-b, --backend*='BACKEND'::
-  'BACKEND' is the name of an installed backend plugin. When this
-  option is specified 'a2x' attempts load a file name 'a2x-backend.py'
-  from the 'BACKEND' plugin directory It then converts the
-  'SOURCE_FILE' to a 'BACKEND' formatted output file using a global
-  function defined in 'a2x-backend.py' called 'to_BACKEND'.
-
-*-f, --format*='FORMAT'::
-  Output formats: 'chunked', 'docbook', 'dvi', 'epub', 'htmlhelp',
-  'manpage', 'pdf' (default), 'ps', 'tex', 'text', 'xhtml'.
-  The AsciiDoc 'a2x-format' attribute value is set to 'FORMAT'.
-
-*-h, --help*::
-  Print command-line syntax and program options to stdout.
-
-*--icons*::
-  Use admonition or navigation icon images in output documents. The
-  default behavior is to use text in place of icons.
-
-*--icons-dir*='PATH'::
-  A path (relative to output files) containing admonition
-  and navigation icons. Defaults to `images/icons`.
-  The '--icons' option is implicit if this option is used.
-
-*-k, --keep-artifacts*::
-  Do not delete temporary build files.
-
-*--lynx*::
-  Use 'lynx(1)' to generate text formatted output. The default
-  behavior is to use 'w3m(1)'.
-
-*-L, --no-xmllint*::
-  Do not check asciidoc output with 'xmllint(1)'.
-
-*---epubcheck*::
-  Check EPUB output with 'epubcheck(1)'.
-
-*-n, --dry-run*::
-  Do not do anything just print what would have been done.
-
-*-r, --resource*='RESOURCE_SPEC'::
-  Specify a resource.  This option may be specified more than once.
-  See the <<X3,*RESOURCES*>> section for more details.
-
-*-m, --resource-manifest*='FILE'::
-  'FILE' contains a list resources (one per line). Manifest 'FILE'
-  entries are formatted just like *--resource* option arguments.
-  Environment variables and tilde home directories are allowed.
-
-*--stylesheet*='STYLESHEET'::
-  A space delimited list of one or more CSS stylesheet file names that
-  are used to style HTML output generated by DocBook XSL Stylesheets.
-  Defaults to 'docbook-xsl.css'.  The stylesheets are processed in
-  list order. The stylesheets must reside in a valid <<X3, resource
-  file>> location.  Applies to HTML formats: 'xhtml', 'epub',
-  'chunked', 'htmlhelp' formats.
-
-*-v, --verbose*::
-  Print operational details to stderr.
-  A second *-v* option applies the verbose option to toolchain commands.
-
-*--version*::
-  Print program version to stdout.
-
-*--xsltproc-opts*='XSLTPROC_OPTS'::
-  Additional 'xsltproc(1)' options.
-  This option may be specified more than once.
-
-*--xsl-file*='XSL_FILE'::
-  Override the built-in XSL stylesheet with the custom XSL stylesheet
-  'XSL_FILE'.
-
-*--fop*::
-  Use FOP to generate PDFs. The default behavior is to use
-  'dblatex(1)'.  The '--fop' option is implicit if this option is
-  used.
-
-*--fop-opts*='FOP_OPTS'::
-  Additional 'fop(1)' options. If this option is specified FOP is used
-  to generate PDFs.
-  This option may be specified more than once.
-
-*--dblatex-opts*='DBLATEX_OPTS'::
-  Additional 'dblatex(1)' options.
-  This option may be specified more than once.
-
-*--backend-opts*='BACKEND_OPTS'::
-  Options for the backend plugin specified by the '--backend' option.
-  This option may be specified more than once.
-
-Options can also be set in the AsciiDoc source file. If 'SOURCE_FILE'
-contains a comment line beginning with *// a2x:* then the remainder of
-the line will be treated as 'a2x' command-line options. For example:
-
-  // a2x default options.
-  //    a2x: -dbook --epubcheck
-  // Suppress revision history in dblatex outputs.
-  //    a2x: --dblatex-opts "-P latex.output.revhistory=0"
-
-- Options spanning multiple such comment lines will be concatenated.
-- Zero or more white space characters can appear between the leading
-  *//* and *a2x:*.
-- Command-line options take precedence over options set in the source
-  file.
-
-
-[[X4]]
-OUTPUT FILES
-------------
-Output files are written to the directory specified by the
-*--destination-dir* option. If no *--destination-dir* option is set
-output files are written to the 'SOURCE_FILE' directory.
-
-Output files have the same name as the 'SOURCE_FILE' but with an
-appropriate file name extension: `.html` for 'xhtml'; `.epub` for
-'epub'; `.hhp` for 'htmlhelp'; `.pdf` for 'pdf'; `.text` for 'text',
-`.xml` for 'docbook'. By convention manpages have no `.man` extension
-(man page section number only).  Chunked HTML directory names have a
-`.chunked` extension; chunked HTML Help directory names have a
-`.htmlhelp` extension.
-
-Same named existing files are overwritten.
-
-In addition to generating HTML files the 'xhtml', 'epub', 'chunked'
-and 'htmlhelp' formats ensure <<X3,resource files>> are copied to
-their correct destination directory locations.
-
-
-[[X3]]
-RESOURCES
----------
-Resources are files (typically CSS and images) that are required by
-HTML based outputs ('xhtml', 'epub', 'chunked', 'htmlhelp' formats).
-'a2x' scans the generated HTML files and builds a list of required CSS
-and image files. Additional resource files can be specified explicitly
-using the *--resource* option.
-
-'a2x' searches for resource files in the following locations in the
-following order:
-
-. The 'SOURCE_FILE' directory.
-. Resource directories specified by the *--resource* option (searched
-  recursively).
-. Resource directories specified by the *--resource-manifest* option
-  (searched recursively in the order they appear in the manifest
-  file).
-. The stock `images` and `stylesheets` directories in the
-  'asciidoc(1)' configuration files directories (searched
-  recursively).
-. The destination directory.
-
-When a resource file is found it is copied to the correct relative
-destination directory. Missing destination sub-directories are created
-automatically.
-
-There are two distinct mechanisms for specifying additional resources:
-
-. A resource directory which will be searched recursively for missing
-  resource files.
-. A resource file which will be copied to the output destination
-  directory.
-
-Resources are specified with *--resource* option values which can be
-one of the following formats:
-
-  <resource_dir>
-  <resource_file>[=<destination_file>]
-  .<ext>=<mimetype>
-
-Where:
-
-`<resource_dir>`::
-  Specifies a directory (absolute or relative to the 'SOURCE_FILE')
-  which is searched recursively for missing resource files.  To
-  eliminate ambiguity the `<resource_dir>` name should end with a
-  directory separator character.
-
-`<resource_file>`::
-  Specifies a resource file (absolute or relative to the
-  'SOURCE_FILE') which will be copied to `<destination_file>`. If
-  `<destination_file>` is not specified then it is the same as the
-  `<resource_file>`.
-
-`<destination_file>`::
-  Specifies the destination of the copied source file. The
-  `<destination_file>` path is relative to the destination directory
-  (absolute paths are not allowed). The location of the destination
-  directory depends on the output 'FORMAT' (see the <<X4,*OUTPUT
-  FILES*>> section for details):
-
-  chunked, htmlhelp;; The chunked output directory.
-  epub;;              The archived `OEBPS` directory.
-  xhtml;;             The output *DESTINATION_DIR*.
-
-`.<ext>=<mimetype>`::
-  When adding resources to EPUB files the mimetype is inferred from
-  the `<destination file>` extension, if the mimetype cannot be
-  guessed an error occurs. The `.<ext>=<mimetype>` resource syntax can
-  be used to explicitly set mimetypes. `<ext>` is the file name
-  extension, `<mimetype>` is the corresponding MIME type.
-
-Resource option examples:
-
-  --resource ../images/
-  --resource doc/README.txt=README.txt
-  --resource ~/images/tiger.png=images/tiger.png
-  --resource .ttf=application/x-font-ttf
-
-
-EXAMPLES
---------
-`a2x -f pdf doc/source-highlight-filter.txt`::
-  Generates `doc/source-highlight-filter.pdf` file.
-
-`a2x -f xhtml -D ../doc --icons -r ../images/ team.txt`::
-  Creates HTML file `../doc/team.html`, uses admonition icons and
-  recursively searches the `../images/` directory for any missing
-  resources.
-
-`a2x -f manpage doc/asciidoc.1.txt`::
-  Generate `doc/asciidoc.1` manpage.
-
-
-[[X1]]
-REQUISITES
-----------
-'a2x' uses the following programs:
-
-- *Asciidoc*:
-  http://www.methods.co.nz/asciidoc/
-- *xsltproc*: (all formats except text):
-  http://xmlsoft.org/XSLT/
-- *DocBook XSL Stylesheets* (all formats except text):
-  http://docbook.sourceforge.net/projects/xsl/
-- *dblatex* (pdf, dvi, ps, tex formats):
-  http://dblatex.sourceforge.net/
-- *FOP* (pdf format -- alternative PDF file generator):
-  http://xmlgraphics.apache.org/fop/
-- *w3m* (text format):
-  http://w3m.sourceforge.net/index.en.html
-- *Lynx* (text format -- alternative text file generator):
-  http://lynx.isc.org/
-- *epubcheck* (epub format -- EPUB file validator):
-  http://code.google.com/p/epubcheck/
-
-See also the latest README file.
-
-
-[[X2]]
-CONF FILES
-----------
-A configuration file contains executable Python code that overrides
-the global configuration parameters in `a2x.py`.  Optional configuration
-files are loaded in the following order:
-
-. `a2x.conf` from the directory containing the 'a2x.py' executable.
-. `a2x.conf` from the AsciiDoc global configuration directory.  Skip
-  this step if we are executing a locally installed (non system wide)
-  copy.
-. `a2x.conf` from the AsciiDoc `$HOME/.asciidoc` configuration
-  directory.
-. The 'CONF_FILE' specified in the '--conf-file' option.
-
-Here are the default configuration file option values:
-
----------------------------------------------------------------------
-# Optional environment variable dictionary passed to
-# executing programs. If set to None the existing
-# environment is used.
-ENV = None
-
-# External executables.
-ASCIIDOC = 'asciidoc'
-XSLTPROC = 'xsltproc'
-DBLATEX = 'dblatex'         # pdf generation.
-FOP = 'fop'                 # pdf generation (--fop option).
-W3M = 'w3m'                 # text generation.
-LYNX = 'lynx'               # text generation (if no w3m).
-XMLLINT = 'xmllint'         # Set to '' to disable.
-EPUBCHECK = 'epubcheck'     # Set to '' to disable.
-# External executable default options.
-ASCIIDOC_OPTS = ''
-DBLATEX_OPTS = ''
-FOP_OPTS = ''
-XSLTPROC_OPTS = ''
----------------------------------------------------------------------
-
-
-BUGS
-----
-See the AsciiDoc distribution BUGS file.
-
-
-AUTHOR
-------
-a2x was originally written by Stuart Rackham. Many people have
-contributed to it.
-
-
-RESOURCES
----------
-SourceForge: http://sourceforge.net/projects/asciidoc/
-
-Main web site: http://www.methods.co.nz/asciidoc/
-
-
-COPYING
--------
-Copyright \(C) 2002-2011 Stuart Rackham. Free use of this software is
-granted under the terms of the MIT license.
-
diff --git a/source-builder/sb/asciidoc/doc/article-docinfo.xml b/source-builder/sb/asciidoc/doc/article-docinfo.xml
deleted file mode 100644
index 25174fc..0000000
--- a/source-builder/sb/asciidoc/doc/article-docinfo.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<!--
-  article-docinfo.xml
-  Example DocBook document information file for article.txt.
--->
-
-<authorgroup>
-  <author>
-    <honorific>Dr</honorific>
-    <firstname>Lois</firstname>
-    <surname>Common-Demoninator</surname>
-    <affiliation>
-      <shortaffil>Director, M. Behn School of Coop. Eng.</shortaffil>
-      <jobtitle>Director of Cooperative Efforts</jobtitle>
-      <orgname>The Marguerite Behn International School of
-               Cooperative Engineering</orgname>
-    </affiliation>
-  </author>
-
-  <author>
-    <honorific>Mr</honorific>
-    <firstname>Steven</firstname>
-    <surname>Norman</surname>
-    <othername role='mi'>T</othername>
-    <affiliation>
-      <shortaffil>ATI</shortaffil>
-      <jobtitle>Senior Application Analyst</jobtitle>
-      <orgname>Foobar, Inc.</orgname>
-      <orgdiv>Application Development</orgdiv>
-    </affiliation>
-  </author>
-
-  <editor>
-    <firstname>Peter</firstname>
-    <surname>Pan</surname>
-    <lineage>Sr.</lineage>
-    <othername>Spiderman</othername>
-    <authorblurb>
-      <para>
-      Peter's a super hero in his spare time.
-      </para>
-    </authorblurb>
-  </editor>
-</authorgroup>
-
-<copyright>
-  <year>2009</year>
-  <holder>Behn International</holder>
-</copyright>
-
-<legalnotice>
-  <simpara>
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-  </simpara>
-  <simpara>
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-  </simpara>
-  <simpara>
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-  </simpara>
-</legalnotice>
-
-<revhistory>
-  <revision>
-    <revnumber>1.1</revnumber>
-    <date>May 2009</date>
-    <authorinitials>PP</authorinitials>
-    <revremark>
-      Updates.
-    </revremark>
-  </revision>
-  <revision>
-    <revnumber>1.0</revnumber>
-    <date>October 2003</date>
-    <authorinitials>PP</authorinitials>
-    <revremark>
-      First release.
-    </revremark>
-  </revision>
-</revhistory>
diff --git a/source-builder/sb/asciidoc/doc/article.pdf b/source-builder/sb/asciidoc/doc/article.pdf
deleted file mode 100644
index 0406eb1..0000000
Binary files a/source-builder/sb/asciidoc/doc/article.pdf and /dev/null differ
diff --git a/source-builder/sb/asciidoc/doc/article.txt b/source-builder/sb/asciidoc/doc/article.txt
deleted file mode 100644
index 9a9cc50..0000000
--- a/source-builder/sb/asciidoc/doc/article.txt
+++ /dev/null
@@ -1,139 +0,0 @@
-The Article Title
-=================
-Author's Name <authors at email.address>
-v1.0, 2003-12
-
-
-This is the optional preamble (an untitled section body). Useful for
-writing simple sectionless documents consisting only of a preamble.
-
-NOTE: The abstract, preface, appendix, bibliography, glossary and
-index section titles are significant ('specialsections').
-
-
-:numbered!:
-[abstract]
-Example Abstract
-----------------
-The optional abstract (one or more paragraphs) goes here.
-
-This document is an AsciiDoc article skeleton containing briefly
-annotated element placeholders plus a couple of example index entries
-and footnotes.
-
-:numbered:
-
-The First Section
------------------
-Article sections start at level 1 and can be nested up to four levels
-deep.
-footnote:[An example footnote.]
-indexterm:[Example index entry]
-
-And now for something completely different: ((monkeys)), lions and
-tigers (Bengal and Siberian) using the alternative syntax index
-entries.
-(((Big cats,Lions)))
-(((Big cats,Tigers,Bengal Tiger)))
-(((Big cats,Tigers,Siberian Tiger)))
-Note that multi-entry terms generate separate index entries.
-
-Here are a couple of image examples: an image:images/smallnew.png[]
-example inline image followed by an example block image:
-
-.Tiger block image
-image::images/tiger.png[Tiger image]
-
-Followed by an example table:
-
-.An example table
-[width="60%",options="header"]
-|==============================================
-| Option          | Description
-| -a 'USER GROUP' | Add 'USER' to 'GROUP'.
-| -R 'GROUP'      | Disables access to 'GROUP'.
-|==============================================
-
-.An example example
-===============================================
-Lorum ipum...
-===============================================
-
-[[X1]]
-Sub-section with Anchor
-~~~~~~~~~~~~~~~~~~~~~~~
-Sub-section at level 2.
-
-A Nested Sub-section
-^^^^^^^^^^^^^^^^^^^^
-Sub-section at level 3.
-
-Yet another nested Sub-section
-++++++++++++++++++++++++++++++
-Sub-section at level 4.
-
-This is the maximum sub-section depth supported by the distributed
-AsciiDoc configuration.
-footnote:[A second example footnote.]
-
-
-The Second Section
-------------------
-Article sections are at level 1 and can contain sub-sections nested up
-to four deep.
-
-An example link to anchor at start of the <<X1,first sub-section>>.
-indexterm:[Second example index entry]
-
-An example link to a bibliography entry <<taoup>>.
-
-
-:numbered!:
-
-[appendix]
-Example Appendix
-----------------
-AsciiDoc article appendices are just just article sections with
-'specialsection' titles.
-
-Appendix Sub-section
-~~~~~~~~~~~~~~~~~~~~
-Appendix sub-section at level 2.
-
-
-[bibliography]
-Example Bibliography
---------------------
-The bibliography list is a style of AsciiDoc bulleted list.
-
-[bibliography]
-- [[[taoup]]] Eric Steven Raymond. 'The Art of Unix
-  Programming'. Addison-Wesley. ISBN 0-13-142901-9.
-- [[[walsh-muellner]]] Norman Walsh & Leonard Muellner.
-  'DocBook - The Definitive Guide'. O'Reilly & Associates. 1999.
-  ISBN 1-56592-580-7.
-
-
-[glossary]
-Example Glossary
-----------------
-Glossaries are optional. Glossaries entries are an example of a style
-of AsciiDoc labeled lists.
-
-[glossary]
-A glossary term::
-  The corresponding (indented) definition.
-
-A second glossary term::
-  The corresponding (indented) definition.
-
-
-ifdef::backend-docbook[]
-[index]
-Example Index
--------------
-////////////////////////////////////////////////////////////////
-The index is normally left completely empty, it's contents being
-generated automatically by the DocBook toolchain.
-////////////////////////////////////////////////////////////////
-endif::backend-docbook[]
diff --git a/source-builder/sb/asciidoc/doc/asciidoc.1 b/source-builder/sb/asciidoc/doc/asciidoc.1
deleted file mode 100644
index 09db244..0000000
--- a/source-builder/sb/asciidoc/doc/asciidoc.1
+++ /dev/null
@@ -1,310 +0,0 @@
-'\" t
-.\"     Title: asciidoc
-.\"    Author: [see the "AUTHOR" section]
-.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
-.\"      Date: 17 July 2012
-.\"    Manual: \ \&
-.\"    Source: \ \& 8.6.8
-.\"  Language: English
-.\"
-.TH "ASCIIDOC" "1" "17 July 2012" "\ \& 8\&.6\&.8" "\ \&"
-.\" -----------------------------------------------------------------
-.\" * Define some portability stuff
-.\" -----------------------------------------------------------------
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.\" http://bugs.debian.org/507673
-.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.ie \n(.g .ds Aq \(aq
-.el       .ds Aq '
-.\" -----------------------------------------------------------------
-.\" * set default formatting
-.\" -----------------------------------------------------------------
-.\" disable hyphenation
-.nh
-.\" disable justification (adjust text to left margin only)
-.ad l
-.\" -----------------------------------------------------------------
-.\" * MAIN CONTENT STARTS HERE *
-.\" -----------------------------------------------------------------
-.SH "NAME"
-asciidoc \- converts an AsciiDoc text file to HTML or DocBook
-.SH "SYNOPSIS"
-.sp
-\fBasciidoc\fR [\fIOPTIONS\fR] \fIFILE\fR
-.SH "DESCRIPTION"
-.sp
-The asciidoc(1) command translates the AsciiDoc text file \fIFILE\fR to DocBook or HTML\&. If \fIFILE\fR is \fI\-\fR then the standard input is used\&.
-.SH "OPTIONS"
-.PP
-\fB\-a, \-\-attribute\fR=\fIATTRIBUTE\fR
-.RS 4
-Define or delete document attribute\&.
-\fIATTRIBUTE\fR
-is formatted like
-\fINAME=VALUE\fR\&. Command\-line attributes take precedence over document and configuration file attributes\&. Alternate acceptable forms are
-\fINAME\fR
-(the
-\fIVALUE\fR
-defaults to an empty string);
-\fINAME!\fR
-(delete the
-\fINAME\fR
-attribute);
-\fINAME=VALUE@\fR
-(do not override document or configuration file attributes)\&. Values containing spaces should be enclosed in double\-quote characters\&. This option may be specified more than once\&. A special attribute named
-\fItrace\fR
-controls the output of diagnostic information\&.
-.RE
-.PP
-\fB\-b, \-\-backend\fR=\fIBACKEND\fR
-.RS 4
-Backend output file format:
-\fIdocbook45\fR,
-\fIxhtml11\fR,
-\fIhtml4\fR,
-\fIhtml5\fR,
-\fIslidy\fR,
-\fIwordpress\fR
-or
-\fIlatex\fR
-(the
-\fIlatex\fR
-backend is experimental)\&. You can also use the backend alias names
-\fIhtml\fR
-(aliased to
-\fIxhtml11\fR) or
-\fIdocbook\fR
-(aliased to
-\fIdocbook45\fR)\&. Defaults to
-\fIhtml\fR\&. The
-\fB\-\-backend\fR
-option is also used to manage backend plugins (see
-\fBPLUGIN COMMANDS\fR)\&.
-.RE
-.PP
-\fB\-f, \-\-conf\-file\fR=\fICONF_FILE\fR
-.RS 4
-Use configuration file
-\fICONF_FILE\fR\&.Configuration files processed in command\-line order (after implicit configuration files)\&. This option may be specified more than once\&.
-.RE
-.PP
-\fB\-\-doctest\fR
-.RS 4
-Run Python doctests in
-\fIasciidoc\fR
-module\&.
-.RE
-.PP
-\fB\-d, \-\-doctype\fR=\fIDOCTYPE\fR
-.RS 4
-Document type:
-\fIarticle\fR,
-\fImanpage\fR
-or
-\fIbook\fR\&. The
-\fIbook\fR
-document type is only supported by the
-\fIdocbook\fR
-backend\&. Default document type is
-\fIarticle\fR\&.
-.RE
-.PP
-\fB\-c, \-\-dump\-conf\fR
-.RS 4
-Dump configuration to stdout\&.
-.RE
-.PP
-\fB\-\-filter\fR=\fIFILTER\fR
-.RS 4
-Specify the name of a filter to be loaded (used to load filters that are not auto\-loaded)\&. This option may be specified more than once\&. The
-\fB\-\-filter\fR
-option is also used to manage filter plugins (see
-\fBPLUGIN COMMANDS\fR)\&.
-.RE
-.PP
-\fB\-h, \-\-help\fR [\fITOPIC\fR]
-.RS 4
-Print help TOPIC\&.
-\fB\-\-help\fR
-\fItopics\fR
-will print a list of help topics,
-\fB\-\-help\fR
-\fIsyntax\fR
-summarizes AsciiDoc syntax,
-\fB\-\-help\fR
-\fImanpage\fR
-prints the AsciiDoc manpage\&.
-.RE
-.PP
-\fB\-e, \-\-no\-conf\fR
-.RS 4
-Exclude implicitly loaded configuration files except for those named like the input file (\fIinfile\&.conf\fR
-and
-\fIinfile\-backend\&.conf\fR)\&.
-.RE
-.PP
-\fB\-s, \-\-no\-header\-footer\fR
-.RS 4
-Suppress document header and footer output\&.
-.RE
-.PP
-\fB\-o, \-\-out\-file\fR=\fIOUT_FILE\fR
-.RS 4
-Write output to file
-\fIOUT_FILE\fR\&. Defaults to the base name of input file with
-\fIbackend\fR
-extension\&. If the input is stdin then the outfile defaults to stdout\&. If
-\fIOUT_FILE\fR
-is
-\fI\-\fR
-then the standard output is used\&.
-.RE
-.PP
-\fB\-n, \-\-section\-numbers\fR
-.RS 4
-Auto\-number HTML article section titles\&. Synonym for
-\fB\-\-attribute numbered\fR\&.
-.RE
-.PP
-\fB\-\-safe\fR
-.RS 4
-Enable safe mode\&. Safe mode is disabled by default\&. AsciiDoc
-\fIsafe mode\fR
-skips potentially dangerous scripted sections in AsciiDoc source files\&.
-.RE
-.PP
-\fB\-\-theme\fR=\fITHEME\fR
-.RS 4
-Specify a theme name\&. Synonym for
-\fB\-\-attribute theme\fR=\fITHEME\fR\&. The
-\fB\-\-theme\fR
-option is also used to manage theme plugins (see
-\fBPLUGIN COMMANDS\fR)\&.
-.RE
-.PP
-\fB\-v, \-\-verbose\fR
-.RS 4
-Verbosely print processing information and configuration file checks to stderr\&.
-.RE
-.PP
-\fB\-\-version\fR
-.RS 4
-Print program version number\&.
-.RE
-.SH "PLUGIN COMMANDS"
-.sp
-The asciidoc(1) \fB\-\-filter\fR, \fB\-\-backend\fR and \fB\-\-theme\fR options are used to install, remove and list AsciiDoc filter, backend and theme plugins\&. Syntax:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-asciidoc OPTION install ZIP_FILE [PLUGINS_DIR]
-asciidoc OPTION remove PLUGIN_NAME [PLUGINS_DIR]
-asciidoc OPTION list
-asciidoc OPTION build ZIP_FILE PLUGIN_SOURCE
-.fi
-.if n \{\
-.RE
-.\}
-.sp
-Where:
-.PP
-\fBOPTION\fR
-.RS 4
-asciidoc(1)
-\fB\-\-filter\fR,
-\fB\-\-backend\fR
-or
-\fB\-\-theme\fR
-option specifying the type of plugin\&.
-.RE
-.PP
-\fBPLUGIN_NAME\fR
-.RS 4
-A unique plugin name containing only alphanumeric or underscore characters\&.
-.RE
-.PP
-\fBZIP_FILE\fR
-.RS 4
-A Zip file containing plugin resources, the name must start with the plugin name e\&.g\&.
-my_filter\-1\&.0\&.zip
-packages filter
-my_filter\&.
-.RE
-.PP
-\fBPLUGINS_DIR\fR
-.RS 4
-The directory containing installed plugins\&. Each plugin is contained in its own separate subdirectory which has the same name as the plugin\&.
-\fBPLUGINS_DIR\fR
-defaults to the
-$HOME/\&.asciidoc/filters
-(for filter plugins) or
-$HOME/\&.asciidoc/backends
-(for backend plugins) or
-$HOME/\&.asciidoc/themes
-(for theme plugins)\&.
-.RE
-.PP
-\fBPLUGIN_SOURCE\fR
-.RS 4
-The name of a directory containing the plugin source files or the name of a single source file\&.
-.RE
-.sp
-The plugin commands perform as follows:
-.PP
-\fBinstall\fR
-.RS 4
-Create a subdirectory in
-\fBPLUGINS_DIR\fR
-with the same name as the plugin then extract the
-\fBZIP_FILE\fR
-into it\&.
-.RE
-.PP
-\fBremove\fR
-.RS 4
-Delete the
-\fBPLUGIN_NAME\fR
-plugin subdirectory and all its contents from the
-\fBPLUGINS_DIR\fR\&.
-.RE
-.PP
-\fBlist\fR
-.RS 4
-List the names and locations of all installed filter or theme plugins (including standard plugins installed in the global configuration directory)\&.
-.RE
-.PP
-\fBbuild\fR
-.RS 4
-Create a plugin file named
-\fBZIP_FILE\fR
-containing the files and subdirectories specified by
-\fBPLUGIN_SOURCE\fR\&. File and directory names starting with a period are skipped\&.
-.RE
-.SH "EXIT STATUS"
-.PP
-\fB0\fR
-.RS 4
-Success
-.RE
-.PP
-\fB1\fR
-.RS 4
-Failure (syntax or usage error; configuration error; document processing failure; unexpected error)\&.
-.RE
-.SH "BUGS"
-.sp
-See the AsciiDoc distribution BUGS file\&.
-.SH "AUTHOR"
-.sp
-AsciiDoc was originally written by Stuart Rackham\&. Many people have contributed to it\&.
-.SH "RESOURCES"
-.sp
-SourceForge: http://sourceforge\&.net/projects/asciidoc/
-.sp
-Main web site: http://www\&.methods\&.co\&.nz/asciidoc/
-.SH "COPYING"
-.sp
-Copyright (C) 2002\-2011 Stuart Rackham\&. Free use of this software is granted under the terms of the GNU General Public License (GPL)\&.
diff --git a/source-builder/sb/asciidoc/doc/asciidoc.1.txt b/source-builder/sb/asciidoc/doc/asciidoc.1.txt
deleted file mode 100644
index 87a86f3..0000000
--- a/source-builder/sb/asciidoc/doc/asciidoc.1.txt
+++ /dev/null
@@ -1,197 +0,0 @@
-ASCIIDOC(1)
-===========
-:doctype: manpage
-
-
-NAME
-----
-asciidoc - converts an AsciiDoc text file to HTML or DocBook
-
-
-SYNOPSIS
---------
-*asciidoc* ['OPTIONS'] 'FILE'
-
-
-DESCRIPTION
------------
-The asciidoc(1) command translates the AsciiDoc text file 'FILE' to
-DocBook or HTML.  If 'FILE' is '-' then the standard input is used.
-
-
-OPTIONS
--------
-*-a, --attribute*='ATTRIBUTE'::
-    Define or delete document attribute. 'ATTRIBUTE' is formatted like
-    'NAME=VALUE'. Command-line attributes take precedence over
-    document and configuration file attributes.  Alternate acceptable
-    forms are 'NAME' (the 'VALUE' defaults to an empty string);
-    'NAME!' (delete the 'NAME' attribute); 'NAME=VALUE@' (do not override
-    document or configuration file attributes).  Values containing
-    spaces should be enclosed in double-quote characters. This option
-    may be specified more than once.  A special attribute named
-    'trace' controls the output of diagnostic information.
-
-*-b, --backend*='BACKEND'::
-    Backend output file format: 'docbook45', 'xhtml11', 'html4',
-    'html5', 'slidy', 'wordpress' or 'latex' (the 'latex' backend is
-    experimental).  You can also use the backend alias names 'html'
-    (aliased to 'xhtml11') or 'docbook' (aliased to 'docbook45').
-    Defaults to 'html'.  The *--backend* option is also used to manage
-    backend plugins (see <<X1,*PLUGIN COMMANDS*>>).
-
-*-f, --conf-file*='CONF_FILE'::
-    Use configuration file 'CONF_FILE'.Configuration files processed
-    in command-line order (after implicit configuration files).  This
-    option may be specified more than once.
-
-*--doctest*::
-    Run Python doctests in 'asciidoc' module.
-
-*-d, --doctype*='DOCTYPE'::
-    Document type: 'article', 'manpage' or 'book'. The 'book' document
-    type is only supported by the 'docbook' backend.  Default document
-    type is 'article'.
-
-*-c, --dump-conf*::
-    Dump configuration to stdout.
-
-*--filter*='FILTER'::
-    Specify the name of a filter to be loaded (used to load filters
-    that are not auto-loaded).  This option may be specified more than
-    once. The *--filter* option is also used to manage filter plugins
-    (see <<X1,*PLUGIN COMMANDS*>>).
-
-*-h, --help* ['TOPIC']::
-    Print help TOPIC. *--help* 'topics' will print a list of help
-    topics, *--help* 'syntax' summarizes AsciiDoc syntax,
-    *--help* 'manpage' prints the AsciiDoc manpage.
-
-*-e, --no-conf*::
-    Exclude implicitly loaded configuration files except for those
-    named like the input file ('infile.conf' and
-    'infile-backend.conf').
-
-*-s, --no-header-footer*::
-    Suppress document header and footer output.
-
-*-o, --out-file*='OUT_FILE'::
-    Write output to file 'OUT_FILE'. Defaults to the base name of
-    input file with 'backend' extension. If the input is stdin then
-    the outfile defaults to stdout. If 'OUT_FILE' is '-' then the
-    standard output is used.
-
-*-n, --section-numbers*::
-    Auto-number HTML article section titles.  Synonym for
-    *--attribute numbered*.
-
-*--safe*::
-    Enable safe mode. Safe mode is disabled by default.  AsciiDoc
-    'safe mode' skips potentially dangerous scripted sections in
-    AsciiDoc source files.
-
-*--theme*='THEME'::
-    Specify a theme name.  Synonym for *--attribute theme*='THEME'.
-    The *--theme* option is also used to manage theme plugins (see
-    <<X1,*PLUGIN COMMANDS*>>).
-
-*-v, --verbose*::
-    Verbosely print processing information and configuration file
-    checks to stderr.
-
-*--version*::
-    Print program version number.
-
-
-[[X1]]
-PLUGIN COMMANDS
----------------
-The asciidoc(1) *--filter*, *--backend* and *--theme* options are used
-to install, remove and list AsciiDoc filter, backend and theme
-plugins. Syntax:
-
-  asciidoc OPTION install ZIP_FILE [PLUGINS_DIR]
-  asciidoc OPTION remove PLUGIN_NAME [PLUGINS_DIR]
-  asciidoc OPTION list
-  asciidoc OPTION build ZIP_FILE PLUGIN_SOURCE
-
-Where:
-
-*OPTION*::
-  asciidoc(1) *--filter*, *--backend* or *--theme* option specifying
-  the type of plugin.
-
-*PLUGIN_NAME*::
-  A unique plugin name containing only alphanumeric or underscore
-  characters.
-
-*ZIP_FILE*::
-  A Zip file containing plugin resources, the name must start with the
-  plugin name e.g.  `my_filter-1.0.zip` packages filter `my_filter`.
-
-*PLUGINS_DIR*::
-  The directory containing installed plugins. Each plugin is contained
-  in its own separate subdirectory which has the same name as the
-  plugin.
-  *PLUGINS_DIR* defaults to the `$HOME/.asciidoc/filters` (for
-  filter plugins) or `$HOME/.asciidoc/backends` (for backend plugins) or
-  `$HOME/.asciidoc/themes` (for theme plugins).
-
-*PLUGIN_SOURCE*::
-  The name of a directory containing the plugin source files or the
-  name of a single source file.
-
-The plugin commands perform as follows:
-
-*install*::
-  Create a subdirectory in *PLUGINS_DIR* with the same name as the
-  plugin then extract the *ZIP_FILE* into it.
-
-*remove*::
-  Delete the *PLUGIN_NAME* plugin subdirectory and all its contents
-  from the *PLUGINS_DIR*.
-
-*list*::
-  List the names and locations of all installed filter or theme
-  plugins (including standard plugins installed in the global
-  configuration directory).
-
-*build*::
-  Create a plugin file named *ZIP_FILE* containing the files and
-  subdirectories specified by *PLUGIN_SOURCE*. File and directory
-  names starting with a period are skipped.
-
-
-EXIT STATUS
------------
-*0*::
-    Success
-
-*1*::
-    Failure (syntax or usage error; configuration error; document
-    processing failure; unexpected error).
-
-
-BUGS
-----
-See the AsciiDoc distribution BUGS file.
-
-
-AUTHOR
-------
-AsciiDoc was originally written by Stuart Rackham. Many people have
-contributed to it.
-
-
-RESOURCES
----------
-SourceForge: <http://sourceforge.net/projects/asciidoc/>
-
-Main web site: <http://www.methods.co.nz/asciidoc/>
-
-
-COPYING
--------
-Copyright \(C) 2002-2011 Stuart Rackham. Free use of this software is
-granted under the terms of the GNU General Public License (GPL).
-
diff --git a/source-builder/sb/asciidoc/doc/asciidoc.conf b/source-builder/sb/asciidoc/doc/asciidoc.conf
deleted file mode 100644
index e073341..0000000
--- a/source-builder/sb/asciidoc/doc/asciidoc.conf
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# Customization for AsciiDoc documentation.
-#
-[specialwords]
-ifndef::doctype-manpage[]
-monospacedwords=(?u)\\?\basciidoc\(1\) (?u)\\?\ba2x\(1\)
-endif::doctype-manpage[]
diff --git a/source-builder/sb/asciidoc/doc/asciidoc.dict b/source-builder/sb/asciidoc/doc/asciidoc.dict
deleted file mode 100644
index 2abb0f5..0000000
--- a/source-builder/sb/asciidoc/doc/asciidoc.dict
+++ /dev/null
@@ -1,1085 +0,0 @@
-personal_ws-1.1 en 1084 
-mandoc
-colspecs
-API
-testcases
-BSBEV
-dblatex
-dapibus
-mycss
-attributelist
-AttributeList
-Blondel
-permalink
-Chunking
-unescapes
-frontmatter
-libxslt
-asc
-XSLT
-stdin
-convallis
-AttributeEntrys
-Steen
-BOTTM
-CACTU
-IndentedBlock
-passtext
-ZapfDingbats
-CALS
-LiteralParagraph
-del
-BOM
-Bon
-ungenerated
-zipP
-des
-cmd
-ListItems
-dev
-vulputate
-Odio
-doctest
-comspecs
-MacDermid
-amet
-Oleksandr
-ExampleBlock
-faf
-luptatum
-dir
-Lorum
-superceded
-inlinegraphic
-specialcharacters
-cpp
-RevisionLine
-TitleName
-Fusce
-ralink
-scaledwidth
-FooParser
-VMiklos
-Trotman
-DelimitedBlocks
-css
-preconfigured
-Magnocavallo
-csv
-Mandelson
-GCC
-CSW
-Potapov
-nisl
-Gao
-nullam
-LibreOffice
-Moolenaar
-Habitasse
-mimetypes
-dtb
-doctime
-CVS
-DTD
-Gbs
-graphviz
-toclevel
-plaintext
-hyperlinks
-dui
-dsv
-ENV
-dvi
-stderr
-SimpleSection
-gif
-eBook
-prepend
-RevisionNumber
-CommentBlocks
-consequat
-fmt
-Amade
-inline
-monospacedwords
-informaltable
-realpath
-validator
-colwidth
-hhc
-Chai
-strongwords
-setlocal
-ListingBlock
-listingblock
-formalpara
-Posuere
-exe
-AuthorInfo
-hhk
-vsides
-rewriteSystem
-taoup
-paracounter
-hhp
-listelement
-AttributeLists
-magna
-xreflabel
-PDF's
-PDFs
-pygmentize
-MSIE
-pede
-permalinks
-Boscombe
-Daly
-arcu
-GPL
-codec
-MSHR
-listcontinuation
-ListContinuation
-apos
-ShareSource
-epubtest
-projectname
-hoc
-ispum
-Maier
-args
-TableFooter
-LiberationSerif
-blog
-passthroughs
-gui
-ile
-sgmlfmt
-formulae
-dbkview
-AsciiDoc's
-BackendBlock
-tbody
-DSSSL
-jim
-valign
-ldquo
-Makefile
-munere
-Raggett's
-citetitle
-Lai
-guimenuitem
-IRC
-plugin
-starttags
-tgroup
-Miklos
-porttitor
-Maecenas
-systemIdStartString
-footnoteref
-joe
-velit
-truecolor
-père
-pere
-purus
-iso
-ItemLabel
-jpg
-adipiscing
-filetype
-listnumber
-SourceForge
-groff
-McCurry
-mansource
-JRE
-verear
-Lex
-mea
-jqs
-PassthroughBlocks
-blockdef
-JavaScript
-javascript
-nam
-OEBPS
-symlinks
-confdir
-optionname
-sollicitudin
-companyname
-pageunits
-nec
-loc
-latexmath
-articleinfo
-auctor
-refname
-mim
-Paillotin
-Farhat
-uninstall
-localdate
-ncx
-ListEntry
-textwidth
-ItemTerm
-backquotes
-ImageMagick
-subscripted
-lpr
-autoplay
-Delikatessen
-mydocument
-odf
-brvbar
-tabletags
-morerows
-ListItem
-coids
-nocontrols
-shiftwidth
-nulla
-endDocument
-odt
-Cygwin
-ogg
-ultrices
-indentedparagraph
-IndentedParagraph
-ltr
-doctests
-AsciiDocAPI
-asciidocapi
-itemtag
-Dvips
-Jython
-tincidunt
-Solaris
-pdf
-ogv
-authorgroup
-manpages
-ItemText
-dignissim
-cdata
-autoconf
-ANDed
-devnull
-autocmd
-readlines
-pageunit
-coid
-noborders
-facto
-ListParagraphs
-nunc
-opf
-orci
-CustomBlocks
-refentryinfo
-informalfigure
-ORed
-pygments
-yyyy
-online
-LIBDIR
-docinfo
-BlockId
-png
-lobortis
-Broberg
-Bowlin
-navPoint
-asciimathml
-AsciiMathML
-ASCIIMathML
-conf
-RCS
-lowriter
-UnicodeDecodeError
-CalloutList
-SidebarBlocks
-idprefix
-TableRow
-stdout
-monospaced
-walsh
-pre
-facilisis
-tzname
-ListParagraph
-partintro
-Windtrainer
-hgignore
-eget
-sed
-userguide
-cras
-zwsp
-keeptogether
-bweb
-PRS
-Sturmer
-sem
-BufNewFile
-SEO
-mdash
-filename
-psv
-inlinemacro
-bgcolor
-Lavruschenko
-pts
-Buenos
-myslidy
-feugiat
-colend
-sprintf
-pyc
-EPUBs
-Zullinger
-AuthorLine
-specialsections
-subsverbatim
-adolescens
-qui
-htmltoc
-SJR
-noautoload
-biggy
-pgwide
-RevisionDate
-crlf
-tex
-Bólido
-Bolido
-tabsize
-colpcwidth
-Orry
-Nascetur
-onload
-RTF
-Suraj
-quickstart
-fillchar
-bloggs
-tis
-listdef
-Tsawassen
-Aenean
-postsubs
-src
-LastName
-lastname
-OpenBlocks
-toc
-tmp
-Knisley
-massa
-vel
-colstart
-volutpat
-stringparam
-showcomments
-SVN
-Tps
-vih
-prepended
-ttf
-resx
-startup
-admonitionblock
-coord
-Blackdown
-mainmatter
-Slackware
-tableabswidth
-BackendBlocks
-VMiklos's
-sys
-doctype
-retrive
-Pavlovitch
-uri
-wnone
-xhtml
-url
-utf
-footrow
-usr
-conubia
-Hausmann
-TitleBlock
-txt
-lsquo
-addEventListener
-elit
-Efros's
-sectiontitle
-CommentLines
-subprocess
-outfile
-blandit
-revisionhistory
-EPUBReader
-Xin
-params
-undefines
-Andrés
-yellowback
-Quisque
-Fabrice
-htmlhelp
-HTMLHelp
-cellspacing
-Citeaux
-themedir
-srackham
-Lulea
-Luleå
-Ubuntu
-xml
-XSLTLib
-headrow
-enim
-haad
-staticfree
-Morbi
-Blauer
-footdata
-al
-bg
-cb
-cd
-xsl
-backmatter
-ar
-fils
-linenumbering
-de
-backend's
-backends
-eb
-br
-Gutenburg
-cp
-fb
-fermentum
-fi
-cellcount
-et
-fo
-eu
-hg
-guimenu
-fugiat
-toclevels
-xzf
-gq
-JB
-refactored
-sgml
-backcolor
-AsciiDoc
-asciidoc
-subslist
-hs
-hu
-testblock
-Vijay
-xyz
-simpara
-lf
-defacto
-resized
-mb
-IndentedBlocks
-md
-js
-erat
-blogpost
-xsltproc
-jw
-ln
-nd
-ne
-oa
-Terje
-lt
-Helvetica
-endtags
-thead
-ly
-mv
-stylesheets
-roff
-YYY
-regex
-os
-config
-slidy
-tabstop
-indentsize
-sb
-ps
-runtime
-tcqn
-ePub
-epub
-px
-td
-vivamus
-py
-Helleu
-getElementById
-addon
-th
-sp
-ru
-docname
-ifeval
-su
-uk
-expandtab
-autolabel
-LinuxDoc
-linuxdoc
-tt
-Hackett
-VM
-Frédérique
-SidebarBlock
-wj
-ut
-Efros
-param
-Movet
-hcol
-manpurpose
-ebooks
-eBooks
-colalign
-debian
-Iaculis
-quis
-eval's
-stylename
-tooltip
-fpdf
-Tiago
-BLAUS
-endtag
-glossdiv
-Lebihan
-ListTerms
-colsep
-indir
-Hajage
-sherlock
-texttag
-ctags
-RPMs
-arabic
-dolorum
-posttype
-eval
-termtag
-passthrough
-BlockTitle
-blocktitle
-blocktitles
-BlockTitles
-Iisaka
-tfoot
-Iisaka's
-misevaluations
-frac
-pagewidth
-AUTOEXEC
-rowcount
-ExampleBlocks
-linux
-commodo
-Fernandes
-pretium
-notitle
-manvolnum
-homero
-validators
-listindex
-testasciidoc
-imagedata
-HotSpot
-vimrc
-O'Reilly
-literallayout
-doctitle
-holmes
-Dmitry
-backtick
-Bouchers
-strikethrough
-indexterm
-Daitx
-vestibulum
-quote's
-noteblock
-refentry
-Xubuntu
-captionless
-orgname
-OpenOffice
-asciidocEmphasized
-Dostoyevsky
-chapt
-necessitatibus
-unformatted
-revremark
-Thiago
-listtag
-HTMLParser
-docdir
-Gogh
-Jipsen
-JimiProClasses
-sgmlformat
-LilyPond
-CommentBlock
-xmllint
-tuples
-headdata
-infty
-presubs
-Tascii
-MathML
-nobis
-LOCALCLASSPATH
-Cheatsheet
-mktemp
-Xandros
-rdquo
-Yakshin's
-revhistory
-colnumber
-MEPIS
-bibendum
-Melis's
-expr
-tempfile
-ponderum
-outfilesuffix
-libxml
-tablepcwidth
-chunked
-filesystem
-Martín
-popen
-iconsdir
-toolchains
-listchars
-fileext
-emphasizedwords
-smallnew
-linkcss
-colspan
-localtime
-Ruderich
-noincsearch
-Stas
-colspec
-GPLv
-uriStartString
-Hongli
-infile
-suspendisse
-TOCs
-todo
-mimetype
-ridiculus
-volnitsky
-setlevel
-Rosenkraenzer
-bodydata
-java
-Sakellariou
-postulant
-Vasilev
-barchart
-Calixto
-sudo
-coverpage
-starttag
-whitespace
-DelimitedBlock
-foofoo
-retab
-xmlns
-changelog
-ChangeLog
-symlink
-ascii
-ListLabel
-Kleber
-Kléber
-popup
-Cerrito
-DocBook's
-fprintf
-mediaobject
-gizmo
-outdir
-getvalue
-callouts
-mollis
-autowidth
-karamazov
-labitur
-xmlto
-Fyodor
-HMTL
-CentOS
-Skype
-POSIX
-builtins
-ByteInterleavedRaster
-blockname
-bulleted
-Google
-globals
-Garnett
-porta
-OpenBlock
-colabswidth
-bibliodiv
-Bushuev
-Inguaggiato
-SectionClose
-overline
-paradef
-QuoteBlocks
-undefine
-docdate
-Kurapati
-Zolochevskiy
-lacus
-felis
-backend
-webm
-ListBlock
-literalblock
-LiteralBlock
-href
-metus
-Mozilla
-unstyled
-pagebreak
-VariableList
-LiteralBlocks
-Donec
-BLONP
-dbook
-asciimath
-interesset
-pellentesque
-formatlistpat
-IMGs
-AttributeEntry
-attributeentry
-Zuckschwerdt
-autoindent
-sectids
-manname
-PostScript
-jbloggs
-epubcheck
-README
-colstop
-LiteralParagraphs
-tableblock
-slideshows
-primis
-tuple
-Rackham
-admonitionparagraph
-mantitle
-init
-VerbatimBlocks
-imperdiet
-refsynopsisdiv
-emacs
-consetetur
-JIMI
-newtables
-docbook
-DocBook
-callout
-fileextension
-programlisting
-outlang
-QuoteBlock
-chmod
-posattrs
-subdirectories
-RevisionRemark
-TableHeader
-slideshow
-Mihai
-KeyboardInterrupt
-justo
-hexdump
-SectionBody
-sectionbody
-nnoremap
-verbatimblock
-VerbatimBlock
-BulletedList
-html
-unchunked
-Gouichi
-Alexey
-StringIO
-wordpress
-nonet
-tagname
-gzip
-corpname
-precompiled
-rewriteURI
-colcount
-fringilla
-Gentoo
-mattis
-printf
-hsides
-imagesdir
-callto
-URIs
-lang
-basebackend
-urna
-rowsep
-checksums
-BlockMacro
-blockmacro
-mailto
-Sagittis
-plugins
-http
-pychart
-fepub
-Wiki
-euismod
-arounds
-WINA
-superscripted
-PassthroughBlock
-footrows
-configfile
-misspelt
-namespace
-reftext
-formatoptions
-halign
-rsquo
-AROUT
-Wiese
-bodyrow
-navMap
-listtags
-mauris
-Dourmousoglou
-Wiers
-ListingBlocks
-TableUnderline
-bookinfo
-Vajna
-upperalpha
-xmldecl
-tellus
-EmailAddress
-qanda
-hyperlink
-screenshot
-noout
-Wieers
-Artem
-startDocument
-ifdef
-Shanahan's
-manmanual
-Konqueror
-FirstName
-firstname
-LaTeXMathML
-latexmathml
-sectnum
-BlockMacros
-cceeff
-unfloat
-snabbköp
-snabbkop
-NumberedList
-everti
-multi
-cubilia
-manpage
-conformant
-AttributeEntries
-tablewidth
-LabeledList
-monospace
-AsciiDocError
-olink
-softtabstop
-Ghostscript
-https
-dbtimestamp
-ebuild
-rewritePrefix
-BOLID
-PUBReader
-inlinemediaobject
-nochunks
-newlists
-mediaobjects
-endif
-natively
-mkdir
-sodales
-BONAP
-ItemContinuation
-tyger
-upperroman
-RevisionInfo
-Berglunds
-egestas
-nabc
-autoloaded
-symlinked
-Sommer
-Klum
-Obenhuber's
-revdate
-stylesheet
-eleifend
-ListTerm
-augue
-loweralpha
-subdirectory
-consectetuer
-bookmarked
-Gómez
-Kubuntu
-LaTeX
-litora
-FreeBSD
-Araquil
-setuptools
-bfoobar
-lacinia
-entrytag
-muellner
-ifndef
-latin
-Woodall
-revnumber
-labeltag
-toolchain
-cellpadding
-entrytbl
-Ornare
-authorinitials
-javascripts
-JavaScripts
-undefining
-viewport
-leveloffset
-CustomBlock
-Krämer
-BufRead
-specialwords
-libexslt
-subsnormal
-fxhtml
-Builtin
-hardcoded
-Mery
-utils
-subclassify
-stylesdir
-unsets
-ipsum
-namespaced
-FilterBlocks
-Julien
-tempor
-WINNT
-boolean
-TableData
-pagefile
-docfile
-libboost
-Praesent
-else's
-preparadas
-scriptsdir
-syntaxes
-Røsten
-rowspan
-headrows
-charset
-burtoogle
-Changjian
-Ashworth
-nbsp
-lowerroman
-FOPException
-Freshmeat
-dbhtml
-manversion
-TableBody
-Loïc
-abc
-aliquam
-llevar
-aap
-unspaced
-attrlist
-Bazon
-attrname
-Forsterstr
-Rhoncus
-Rutrum
-Redhat
-datadir
-Kumar
-IndentedParagraphs
-Berguvsvagen
-Berguvsvägen
-executables
-tabledef
-ftdetect
-Greaves
-SimpleList
-superscripting
-baz
-lorem
-Comidas
-bodyrows
-Fyodorovitch
-topbot
-greek
-comspec
-refmiscinfo
-firefox
-lectus
-JavaHelp
-unescaped
-mydoc
-middlename
-MiddleName
-Jimmac's
diff --git a/source-builder/sb/asciidoc/doc/asciidoc.txt b/source-builder/sb/asciidoc/doc/asciidoc.txt
deleted file mode 100644
index b7a98f0..0000000
--- a/source-builder/sb/asciidoc/doc/asciidoc.txt
+++ /dev/null
@@ -1,6038 +0,0 @@
-AsciiDoc User Guide
-===================
-Stuart Rackham <srackham at gmail.com>
-:Author Initials: SJR
-:toc:
-:icons:
-:numbered:
-:website: http://www.methods.co.nz/asciidoc/
-
-AsciiDoc is a text document format for writing notes, documentation,
-articles, books, ebooks, slideshows, web pages, blogs and UNIX man
-pages.  AsciiDoc files can be translated to many formats including
-HTML, PDF, EPUB, man page.  AsciiDoc is highly configurable: both the
-AsciiDoc source file syntax and the backend output markups (which can
-be almost any type of SGML/XML markup) can be customized and extended
-by the user.
-
-.This document
-**********************************************************************
-This is an overly large document, it probably needs to be refactored
-into a Tutorial, Quick Reference and Formal Reference.
-
-If you're new to AsciiDoc read this section and the <<X6,Getting
-Started>> section and take a look at the example AsciiDoc (`*.txt`)
-source files in the distribution `doc` directory.
-**********************************************************************
-
-
-Introduction
-------------
-AsciiDoc is a plain text human readable/writable document format that
-can be translated to DocBook or HTML using the asciidoc(1) command.
-You can then either use asciidoc(1) generated HTML directly or run
-asciidoc(1) DocBook output through your favorite DocBook toolchain or
-use the AsciiDoc a2x(1) toolchain wrapper to produce PDF, EPUB, DVI,
-LaTeX, PostScript, man page, HTML and text formats.
-
-The AsciiDoc format is a useful presentation format in its own right:
-AsciiDoc markup is simple, intuitive and as such is easily proofed and
-edited.
-
-AsciiDoc is light weight: it consists of a single Python script and a
-bunch of configuration files. Apart from asciidoc(1) and a Python
-interpreter, no other programs are required to convert AsciiDoc text
-files to DocBook or HTML. See <<X11,Example AsciiDoc Documents>>
-below.
-
-Text markup conventions tend to be a matter of (often strong) personal
-preference: if the default syntax is not to your liking you can define
-your own by editing the text based asciidoc(1) configuration files.
-You can also create configuration files to translate AsciiDoc
-documents to almost any SGML/XML markup.
-
-asciidoc(1) comes with a set of configuration files to translate
-AsciiDoc articles, books and man pages to HTML or DocBook backend
-formats.
-
-.My AsciiDoc Itch
-**********************************************************************
-DocBook has emerged as the de facto standard Open Source documentation
-format. But DocBook is a complex language, the markup is difficult to
-read and even more difficult to write directly -- I found I was
-spending more time typing markup tags, consulting reference manuals
-and fixing syntax errors, than I was writing the documentation.
-**********************************************************************
-
-
-[[X6]]
-Getting Started
----------------
-Installing AsciiDoc
-~~~~~~~~~~~~~~~~~~~
-See the `README` and `INSTALL` files for install prerequisites and
-procedures. Packagers take a look at <<X38,Packager Notes>>.
-
-[[X11]]
-Example AsciiDoc Documents
-~~~~~~~~~~~~~~~~~~~~~~~~~~
-The best way to quickly get a feel for AsciiDoc is to view the
-AsciiDoc web site and/or distributed examples:
-
-- Take a look at the linked examples on the AsciiDoc web site home
-  page {website}.  Press the 'Page Source' sidebar menu item to view
-  corresponding AsciiDoc source.
-- Read the `*.txt` source files in the distribution `./doc` directory
-  along with the corresponding HTML and DocBook XML files.
-
-
-AsciiDoc Document Types
------------------------
-There are three types of AsciiDoc documents: article, book and
-manpage. All document types share the same AsciiDoc format with some
-minor variations. If you are familiar with DocBook you will have
-noticed that AsciiDoc document types correspond to the same-named
-DocBook document types.
-
-Use the asciidoc(1) `-d` (`--doctype`) option to specify the AsciiDoc
-document type -- the default document type is 'article'.
-
-By convention the `.txt` file extension is used for AsciiDoc document
-source files.
-
-article
-~~~~~~~
-Used for short documents, articles and general documentation.  See the
-AsciiDoc distribution `./doc/article.txt` example.
-
-AsciiDoc defines standard DocBook article frontmatter and backmatter
-<<X93,section markup templates>> (appendix, abstract, bibliography,
-glossary, index).
-
-book
-~~~~
-Books share the same format as articles, with the following
-differences:
-
-- The part titles in multi-part books are <<X17,top level titles>>
-  (same level as book title).
-- Some sections are book specific e.g. preface and colophon.
-
-Book documents will normally be used to produce DocBook output since
-DocBook processors can automatically generate footnotes, table of
-contents, list of tables, list of figures, list of examples and
-indexes.
-
-AsciiDoc defines standard DocBook book frontmatter and backmatter
-<<X93,section markup templates>> (appendix, dedication, preface,
-bibliography, glossary, index, colophon).
-
-.Example book documents
-Book::
-  The `./doc/book.txt` file in the AsciiDoc distribution.
-
-Multi-part book::
-  The `./doc/book-multi.txt` file in the AsciiDoc distribution.
-
-manpage
-~~~~~~~
-Used to generate roff format UNIX manual pages.  AsciiDoc manpage
-documents observe special header title and section naming conventions
--- see the <<X1,Manpage Documents>> section for details.
-
-AsciiDoc defines the 'synopsis' <<X93,section markup template>> to
-generate the DocBook `refsynopsisdiv` section.
-
-See also the asciidoc(1) man page source (`./doc/asciidoc.1.txt`) from
-the AsciiDoc distribution.
-
-
-[[X5]]
-AsciiDoc Backends
------------------
-The asciidoc(1) command translates an AsciiDoc formatted file to the
-backend format specified by the `-b` (`--backend`) command-line
-option. asciidoc(1) itself has little intrinsic knowledge of backend
-formats, all translation rules are contained in customizable cascading
-configuration files. Backend specific attributes are listed in the
-<<X88,Backend Attributes>> section.
-
-docbook45::
-  Outputs DocBook XML 4.5 markup.
-
-html4::
-  This backend generates plain HTML 4.01 Transitional markup.
-
-xhtml11::
-  This backend generates XHTML 1.1 markup styled with CSS2. Output
-  files have an `.html` extension.
-
-html5::
-  This backend generates HTML 5 markup, apart from the inclusion of
-  <<X98,audio and video block macros>> it is functionally identical to
-  the 'xhtml11' backend.
-
-slidy::
-  Use this backend to generate self-contained
-  http://www.w3.org/Talks/Tools/Slidy2/[Slidy] HTML slideshows for
-  your web browser from AsciiDoc documents. The Slidy backend is
-  documented in the distribution `doc/slidy.txt` file and
-  {website}slidy.html[online].
-
-wordpress::
-  A minor variant of the 'html4' backend to support
-  http://srackham.wordpress.com/blogpost1/[blogpost].
-
-latex::
-  Experimental LaTeX backend.
-
-Backend Aliases
-~~~~~~~~~~~~~~~
-Backend aliases are alternative names for AsciiDoc backends.  AsciiDoc
-comes with two backend aliases: 'html' (aliased to 'xhtml11') and
-'docbook' (aliased to 'docbook45').
-
-You can assign (or reassign) backend aliases by setting an AsciiDoc
-attribute named like `backend-alias-<alias>` to an AsciiDoc backend
-name. For example, the following backend alias attribute definitions
-appear in the `[attributes]` section of the global `asciidoc.conf`
-configuration file:
-
-  backend-alias-html=xhtml11
-  backend-alias-docbook=docbook45
-
-[[X100]]
-Backend Plugins
-~~~~~~~~~~~~~~~
-The asciidoc(1) `--backend` option is also used to install and manage
-backend <<X101,plugins>>.
-
-- A backend plugin is used just like the built-in backends.
-- Backend plugins <<X27,take precedence>> over built-in backends with
-  the same name.
-- You can use the `{asciidoc-confdir}` <<X60, intrinsic attribute>> to
-  refer to the built-in backend configuration file location from
-  backend plugin configuration files.
-- You can use the `{backend-confdir}` <<X60, intrinsic attribute>> to
-  refer to the backend plugin configuration file location.
-- By default backends plugins are installed in
-  `$HOME/.asciidoc/backends/<backend>` where `<backend>` is the
-  backend name.
-
-
-DocBook
--------
-AsciiDoc generates 'article', 'book' and 'refentry'
-http://www.docbook.org/[DocBook] documents (corresponding to the
-AsciiDoc 'article', 'book' and 'manpage' document types).
-
-Most Linux distributions come with conversion tools (collectively
-called a toolchain) for <<X12,converting DocBook files>> to
-presentation formats such as Postscript, HTML, PDF, EPUB, DVI,
-PostScript, LaTeX, roff (the native man page format), HTMLHelp,
-JavaHelp and text.  There are also programs that allow you to view
-DocBook files directly, for example http://live.gnome.org/Yelp[Yelp]
-(the GNOME help viewer).
-
-[[X12]]
-Converting DocBook to other file formats
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-DocBook files are validated, parsed and translated various
-presentation file formats using a combination of applications
-collectively called a DocBook 'tool chain'. The function of a tool
-chain is to read the DocBook markup (produced by AsciiDoc) and
-transform it to a presentation format (for example HTML, PDF, HTML
-Help, EPUB, DVI, PostScript, LaTeX).
-
-A wide range of user output format requirements coupled with a choice
-of available tools and stylesheets results in many valid tool chain
-combinations.
-
-[[X43]]
-a2x Toolchain Wrapper
-~~~~~~~~~~~~~~~~~~~~~
-One of the biggest hurdles for new users is installing, configuring
-and using a DocBook XML toolchain. `a2x(1)` can help -- it's a
-toolchain wrapper command that will generate XHTML (chunked and
-unchunked), PDF, EPUB, DVI, PS, LaTeX, man page, HTML Help and text
-file outputs from an AsciiDoc text file.  `a2x(1)` does all the grunt
-work associated with generating and sequencing the toolchain commands
-and managing intermediate and output files.  `a2x(1)` also optionally
-deploys admonition and navigation icons and a CSS stylesheet. See the
-`a2x(1)` man page for more details. In addition to `asciidoc(1)` you
-also need <<X40,xsltproc(1)>>, <<X13,DocBook XSL Stylesheets>> and
-optionally: <<X31,dblatex>> or <<X14,FOP>> (to generate PDF);
-`w3m(1)` or `lynx(1)` (to generate text).
-
-The following examples generate `doc/source-highlight-filter.pdf` from
-the AsciiDoc `doc/source-highlight-filter.txt` source file. The first
-example uses `dblatex(1)` (the default PDF generator) the second
-example forces FOP to be used:
-
-  $ a2x -f pdf doc/source-highlight-filter.txt
-  $ a2x -f pdf --fop doc/source-highlight-filter.txt
-
-See the `a2x(1)` man page for details.
-
-TIP: Use the `--verbose` command-line option to view executed
-toolchain commands.
-
-HTML generation
-~~~~~~~~~~~~~~~
-AsciiDoc produces nicely styled HTML directly without requiring a
-DocBook toolchain but there are also advantages in going the DocBook
-route:
-
-- HTML from DocBook can optionally include automatically generated
-  indexes, tables of contents, footnotes, lists of figures and tables.
-- DocBook toolchains can also (optionally) generate separate (chunked)
-  linked HTML pages for each document section.
-- Toolchain processing performs link and document validity checks.
-- If the DocBook 'lang' attribute is set then things like table of
-  contents, figure and table captions and admonition captions will be
-  output in the specified language (setting the AsciiDoc 'lang'
-  attribute sets the DocBook 'lang' attribute).
-
-On the other hand, HTML output directly from AsciiDoc is much faster,
-is easily customized and can be used in situations where there is no
-suitable DocBook toolchain (for example, see the {website}[AsciiDoc
-website]).
-
-PDF generation
-~~~~~~~~~~~~~~
-There are two commonly used tools to generate PDFs from DocBook,
-<<X31,dblatex>> and <<X14,FOP>>.
-
-.dblatex or FOP?
-- 'dblatex' is easier to install, there's zero configuration
-  required and no Java VM to install -- it just works out of the box.
-- 'dblatex' source code highlighting and numbering is superb.
-- 'dblatex' is easier to use as it converts DocBook directly to PDF
-  whereas before using 'FOP' you have to convert DocBook to XML-FO
-  using <<X13,DocBook XSL Stylesheets>>.
-- 'FOP' is more feature complete (for example, callouts are processed
-  inside literal layouts) and arguably produces nicer looking output.
-
-HTML Help generation
-~~~~~~~~~~~~~~~~~~~~
-. Convert DocBook XML documents to HTML Help compiler source files
-  using <<X13,DocBook XSL Stylesheets>> and <<X40,xsltproc(1)>>.
-. Convert the HTML Help source (`.hhp` and `.html`) files to HTML Help
-  (`.chm`) files using the <<X67,Microsoft HTML Help Compiler>>.
-
-Toolchain components summary
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-AsciiDoc::
-    Converts AsciiDoc (`.txt`) files to DocBook XML (`.xml`) files.
-
-[[X13]]http://docbook.sourceforge.net/projects/xsl/[DocBook XSL Stylesheets]::
-  These are a set of XSL stylesheets containing rules for converting
-  DocBook XML documents to HTML, XSL-FO, manpage and HTML Help files.
-  The stylesheets are used in conjunction with an XML parser such as
-  <<X40,xsltproc(1)>>.
-
-[[X40]]http://www.xmlsoft.org[xsltproc]::
-  An XML parser for applying XSLT stylesheets (in our case the
-  <<X13,DocBook XSL Stylesheets>>) to XML documents.
-
-[[X31]]http://dblatex.sourceforge.net/[dblatex]::
-  Generates PDF, DVI, PostScript and LaTeX formats directly from
-  DocBook source via the intermediate LaTeX typesetting language --
-  uses <<X13,DocBook XSL Stylesheets>>, <<X40,xsltproc(1)>> and
-  `latex(1)`.
-
-[[X14]]http://xml.apache.org/fop/[FOP]::
-  The Apache Formatting Objects Processor converts XSL-FO (`.fo`)
-  files to PDF files.  The XSL-FO files are generated from DocBook
-  source files using <<X13,DocBook XSL Stylesheets>> and
-  <<X40,xsltproc(1)>>.
-
-[[X67]]Microsoft Help Compiler::
-  The Microsoft HTML Help Compiler (`hhc.exe`) is a command-line tool
-  that converts HTML Help source files to a single HTML Help (`.chm`)
-  file. It runs on MS Windows platforms and can be downloaded from
-  http://www.microsoft.com.
-
-AsciiDoc dblatex configuration files
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-The AsciiDoc distribution `./dblatex` directory contains
-`asciidoc-dblatex.xsl` (customized XSL parameter settings) and
-`asciidoc-dblatex.sty` (customized LaTeX settings). These are examples
-of optional <<X31,dblatex>> output customization and are used by
-<<X43,a2x(1)>>.
-
-AsciiDoc DocBook XSL Stylesheets drivers
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-You will have noticed that the distributed HTML and HTML Help
-documentation files (for example `./doc/asciidoc.html`) are not the
-plain outputs produced using the default 'DocBook XSL Stylesheets'
-configuration.  This is because they have been processed using
-customized DocBook XSL Stylesheets along with (in the case of HTML
-outputs) the custom `./stylesheets/docbook-xsl.css` CSS stylesheet.
-
-You'll find the customized DocBook XSL drivers along with additional
-documentation in the distribution `./docbook-xsl` directory. The
-examples that follow are executed from the distribution documentation
-(`./doc`) directory. These drivers are also used by <<X43,a2x(1)>>.
-
-`common.xsl`::
-    Shared driver parameters.  This file is not used directly but is
-    included in all the following drivers.
-
-`chunked.xsl`::
-    Generate chunked XHTML (separate HTML pages for each document
-    section) in the `./doc/chunked` directory. For example:
-
-    $ python ../asciidoc.py -b docbook asciidoc.txt
-    $ xsltproc --nonet ../docbook-xsl/chunked.xsl asciidoc.xml
-
-`epub.xsl`::
-    Used by <<X43,a2x(1)>> to generate EPUB formatted documents.
-
-`fo.xsl`::
-    Generate XSL Formatting Object (`.fo`) files for subsequent PDF
-    file generation using FOP. For example:
-
-    $ python ../asciidoc.py -b docbook article.txt
-    $ xsltproc --nonet ../docbook-xsl/fo.xsl article.xml > article.fo
-    $ fop article.fo article.pdf
-
-`htmlhelp.xsl`::
-    Generate Microsoft HTML Help source files for the MS HTML Help
-    Compiler in the `./doc/htmlhelp` directory. This example is run on
-    MS Windows from a Cygwin shell prompt:
-
-    $ python ../asciidoc.py -b docbook asciidoc.txt
-    $ xsltproc --nonet ../docbook-xsl/htmlhelp.xsl asciidoc.xml
-    $ c:/Program\ Files/HTML\ Help\ Workshop/hhc.exe htmlhelp.hhp
-
-`manpage.xsl`::
-    Generate a `roff(1)` format UNIX man page from a DocBook XML
-    'refentry' document. This example generates an `asciidoc.1` man
-    page file:
-
-    $ python ../asciidoc.py -d manpage -b docbook asciidoc.1.txt
-    $ xsltproc --nonet ../docbook-xsl/manpage.xsl asciidoc.1.xml
-
-`xhtml.xsl`::
-    Convert a DocBook XML file to a single XHTML file. For example:
-
-    $ python ../asciidoc.py -b docbook asciidoc.txt
-    $ xsltproc --nonet ../docbook-xsl/xhtml.xsl asciidoc.xml > asciidoc.html
-
-If you want to see how the complete documentation set is processed
-take a look at the A-A-P script `./doc/main.aap`.
-
-
-Generating Plain Text Files
----------------------------
-AsciiDoc does not have a text backend (for most purposes AsciiDoc
-source text is fine), however you can convert AsciiDoc text files to
-formatted text using the AsciiDoc <<X43,a2x(1)>> toolchain wrapper
-utility.
-
-
-[[X35]]
-HTML5 and XHTML 1.1
--------------------
-The 'xhtml11' and 'html5' backends embed or link CSS and JavaScript
-files in their outputs, there is also a <<X99,themes>> plugin
-framework.
-
-- If the AsciiDoc 'linkcss' attribute is defined then CSS and
-  JavaScript files are linked to the output document, otherwise they
-  are embedded (the default behavior).
-- The default locations for CSS and JavaScript files can be changed by
-  setting the AsciiDoc 'stylesdir' and 'scriptsdir' attributes
-  respectively.
-- The default locations for embedded and linked files differ and are
-  calculated at different times -- embedded files are loaded when
-  asciidoc(1) generates the output document, linked files are loaded
-  by the browser when the user views the output document.
-- Embedded files are automatically inserted in the output files but
-  you need to manually copy linked CSS and Javascript files from
-  AsciiDoc <<X27,configuration directories>> to the correct location
-  relative to the output document.
-
-.Stylesheet file locations
-[cols="3*",frame="topbot",options="header"]
-|====================================================================
-|'stylesdir' attribute
-|Linked location ('linkcss' attribute defined)
-|Embedded location ('linkcss' attribute undefined)
-
-|Undefined (default).
-|Same directory as the output document.
-|`stylesheets` subdirectory in the AsciiDoc configuration directory
-(the directory containing the backend conf file).
-
-|Absolute or relative directory name.
-|Absolute or relative to the output document.
-|Absolute or relative to the AsciiDoc configuration directory (the
-directory containing the backend conf file).
-
-|====================================================================
-
-.JavaScript file locations
-[cols="3*",frame="topbot",options="header"]
-|====================================================================
-|'scriptsdir' attribute
-|Linked location ('linkcss' attribute defined)
-|Embedded location ('linkcss' attribute undefined)
-
-|Undefined (default).
-|Same directory as the output document.
-|`javascripts` subdirectory in the AsciiDoc configuration directory
-(the directory containing the backend conf file).
-
-|Absolute or relative directory name.
-|Absolute or relative to the output document.
-|Absolute or relative to the AsciiDoc configuration directory (the
-directory containing the backend conf file).
-
-|====================================================================
-
-[[X99]]
-Themes
-~~~~~~
-The AsciiDoc 'theme' attribute is used to select an alternative CSS
-stylesheet and to optionally include additional JavaScript code.
-
-- Theme files reside in an AsciiDoc <<X27,configuration directory>>
-  named `themes/<theme>/` (where `<theme>` is the the theme name set
-  by the 'theme' attribute). asciidoc(1) sets the 'themedir' attribute
-  to the theme directory path name.
-- The 'theme' attribute can also be set using the asciidoc(1)
-  `--theme` option, the `--theme` option can also be used to manage
-  theme <<X101,plugins>>.
-- AsciiDoc ships with two themes: 'flask' and 'volnitsky'.
-- The `<theme>.css` file replaces the default `asciidoc.css` CSS file.
-- The `<theme>.js` file is included in addition to the default
-  `asciidoc.js` JavaScript file.
-- If the <<X66,data-uri>> attribute is defined then icons are loaded
-  from the theme `icons` sub-directory if it exists (i.e.  the
-  'iconsdir' attribute is set to theme `icons` sub-directory path).
-- Embedded theme files are automatically inserted in the output files
-  but you need to manually copy linked CSS and Javascript files to the
-  location of the output documents.
-- Linked CSS and JavaScript theme files are linked to the same linked
-  locations as <<X35,other CSS and JavaScript files>>.
-
-For example, the command-line option `--theme foo` (or `--attribute
-theme=foo`) will cause asciidoc(1) to search <<"X27","configuration
-file locations 1, 2 and 3">> for a sub-directory called `themes/foo`
-containing the stylesheet `foo.css` and optionally a JavaScript file
-name `foo.js`.
-
-
-Document Structure
-------------------
-An AsciiDoc document consists of a series of <<X8,block elements>>
-starting with an optional document Header, followed by an optional
-Preamble, followed by zero or more document Sections.
-
-Almost any combination of zero or more elements constitutes a valid
-AsciiDoc document: documents can range from a single sentence to a
-multi-part book.
-
-Block Elements
-~~~~~~~~~~~~~~
-Block elements consist of one or more lines of text and may contain
-other block elements.
-
-The AsciiDoc block structure can be informally summarized as follows
-footnote:[This is a rough structural guide, not a rigorous syntax
-definition]:
-
-  Document      ::= (Header?,Preamble?,Section*)
-  Header        ::= (Title,(AuthorInfo,RevisionInfo?)?)
-  AuthorInfo    ::= (FirstName,(MiddleName?,LastName)?,EmailAddress?)
-  RevisionInfo  ::= (RevisionNumber?,RevisionDate,RevisionRemark?)
-  Preamble      ::= (SectionBody)
-  Section       ::= (Title,SectionBody?,(Section)*)
-  SectionBody   ::= ((BlockTitle?,Block)|BlockMacro)+
-  Block         ::= (Paragraph|DelimitedBlock|List|Table)
-  List          ::= (BulletedList|NumberedList|LabeledList|CalloutList)
-  BulletedList  ::= (ListItem)+
-  NumberedList  ::= (ListItem)+
-  CalloutList   ::= (ListItem)+
-  LabeledList   ::= (ListEntry)+
-  ListEntry     ::= (ListLabel,ListItem)
-  ListLabel     ::= (ListTerm+)
-  ListItem      ::= (ItemText,(List|ListParagraph|ListContinuation)*)
-
-Where:
-
-- '?' implies zero or one occurrence, '+' implies one or more
-  occurrences, '*' implies zero or more occurrences.
-- All block elements are separated by line boundaries.
-- `BlockId`, `AttributeEntry` and `AttributeList` block elements (not
-  shown) can occur almost anywhere.
-- There are a number of document type and backend specific
-  restrictions imposed on the block syntax.
-- The following elements cannot contain blank lines: Header, Title,
-  Paragraph, ItemText.
-- A ListParagraph is a Paragraph with its 'listelement' option set.
-- A ListContinuation is a <<X15,list continuation element>>.
-
-[[X95]]
-Header
-~~~~~~
-The Header contains document meta-data, typically title plus optional
-authorship and revision information:
-
-- The Header is optional, but if it is used it must start with a
-  document <<X17,title>>.
-- Optional Author and Revision information immediately follows the
-  header title.
-- The document header must be separated from the remainder of the
-  document by one or more blank lines and cannot contain blank lines.
-- The header can include comments.
-- The header can include <<X18,attribute entries>>, typically
-  'doctype', 'lang', 'encoding', 'icons', 'data-uri', 'toc',
-  'numbered'.
-- Header attributes are overridden by command-line attributes.
-- If the header contains non-UTF-8 characters then the 'encoding' must
-  precede the header (either in the document or on the command-line).
-
-Here's an example AsciiDoc document header:
-
-  Writing Documentation using AsciiDoc
-  ====================================
-  Joe Bloggs <jbloggs at mymail.com>
-  v2.0, February 2003:
-  Rewritten for version 2 release.
-
-The author information line contains the author's name optionally
-followed by the author's email address. The author's name is formatted
-like:
-
-  firstname[ [middlename ]lastname][ <email>]]
-
-i.e. a first name followed by optional middle and last names followed
-by an email address in that order.  Multi-word first, middle and last
-names can be entered using the underscore as a word separator.  The
-email address comes last and must be enclosed in angle <> brackets.
-Here a some examples of author information lines:
-
-  Joe Bloggs <jbloggs at mymail.com>
-  Joe Bloggs
-  Vincent Willem van_Gogh
-
-If the author line does not match the above specification then the
-entire author line is treated as the first name.
-
-The optional revision information line follows the author information
-line. The revision information can be one of two formats:
-
-. An optional document revision number followed by an optional
-  revision date followed by an optional revision remark:
-+
---
-  * If the revision number is specified it must be followed by a
-    comma.
-  * The revision number must contain at least one numeric character.
-  * Any non-numeric characters preceding the first numeric character
-    will be dropped.
-  * If a revision remark is specified it must be preceded by a colon.
-    The revision remark extends from the colon up to the next blank
-    line, attribute entry or comment and is subject to normal text
-    substitutions.
-  * If a revision number or remark has been set but the revision date
-    has not been set then the revision date is set to the value of the
-    'docdate' attribute.
-
-Examples:
-
-  v2.0, February 2003
-  February 2003
-  v2.0,
-  v2.0, February 2003: Rewritten for version 2 release.
-  February 2003: Rewritten for version 2 release.
-  v2.0,: Rewritten for version 2 release.
-  :Rewritten for version 2 release.
---
-
-. The revision information line can also be an RCS/CVS/SVN $Id$
-  marker:
-+
---
-  * AsciiDoc extracts the 'revnumber', 'revdate', and 'author'
-    attributes from the $Id$ revision marker and displays them in the
-    document header.
-  * If an $Id$ revision marker is used the header author line can be
-    omitted.
-
-Example:
-
-  $Id: mydoc.txt,v 1.5 2009/05/17 17:58:44 jbloggs Exp $
---
-
-You can override or set header parameters by passing 'revnumber',
-'revremark', 'revdate', 'email', 'author', 'authorinitials',
-'firstname' and 'lastname' attributes using the asciidoc(1) `-a`
-(`--attribute`) command-line option. For example:
-
-  $ asciidoc -a revdate=2004/07/27 article.txt
-
-Attribute entries can also be added to the header for substitution in
-the header template with <<X18,Attribute Entry>> elements.
-
-The 'title' element in HTML outputs is set to the AsciiDoc document
-title, you can set it to a different value by including a 'title'
-attribute entry in the document header.
-
-[[X87]]
-Additional document header information
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-AsciiDoc has two mechanisms for optionally including additional
-meta-data in the header of the output document:
-
-'docinfo' configuration file sections::
-If a <<X7,configuration file>> section named 'docinfo' has been loaded
-then it will be included in the document header. Typically the
-'docinfo' section name will be prefixed with a '+' character so that it
-is appended to (rather than replace) other 'docinfo' sections.
-
-'docinfo' files::
-Two docinfo files are recognized: one named `docinfo` and a second
-named like the AsciiDoc source file with a `-docinfo` suffix.  For
-example, if the source document is called `mydoc.txt` then the
-document information files would be `docinfo.xml` and
-`mydoc-docinfo.xml` (for DocBook outputs) and `docinfo.html` and
-`mydoc-docinfo.html` (for HTML outputs).  The <<X97,docinfo, docinfo1
-and docinfo2>> attributes control which docinfo files are included in
-the output files.
-
-The contents docinfo templates and files is dependent on the type of
-output:
-
-HTML::
-  Valid 'head' child elements. Typically 'style' and 'script' elements
-  for CSS and JavaScript inclusion.
-
-DocBook::
-  Valid 'articleinfo' or 'bookinfo' child elements.  DocBook defines
-  numerous elements for document meta-data, for example: copyrights,
-  document history and authorship information.  See the DocBook
-  `./doc/article-docinfo.xml` example that comes with the AsciiDoc
-  distribution.  The rendering of meta-data elements (or not) is
-  DocBook processor dependent.
-
-
-[[X86]]
-Preamble
-~~~~~~~~
-The Preamble is an optional untitled section body between the document
-Header and the first Section title.
-
-Sections
-~~~~~~~~
-In addition to the document title (level 0), AsciiDoc supports four
-section levels: 1 (top) to 4 (bottom).  Section levels are delimited
-by section <<X17,titles>>.  Sections are translated using
-configuration file <<X93,section markup templates>>. AsciiDoc
-generates the following <<X60,intrinsic attributes>> specifically for
-use in section markup templates:
-
-level::
-The `level` attribute is the section level number, it is normally just
-the <<X17,title>> level number (1..4). However, if the `leveloffset`
-attribute is defined it will be added to the `level` attribute. The
-`leveloffset` attribute is useful for <<X90,combining documents>>.
-
-sectnum::
-The `-n` (`--section-numbers`) command-line option generates the
-`sectnum` (section number) attribute.  The `sectnum` attribute is used
-for section numbers in HTML outputs (DocBook section numbering are
-handled automatically by the DocBook toolchain commands).
-
-[[X93]]
-Section markup templates
-^^^^^^^^^^^^^^^^^^^^^^^^
-Section markup templates specify output markup and are defined in
-AsciiDoc configuration files.  Section markup template names are
-derived as follows (in order of precedence):
-
-1. From the title's first positional attribute or 'template'
-   attribute. For example, the following three section titles are
-   functionally equivalent:
-+
-.....................................................................
-[[terms]]
-[glossary]
-List of Terms
--------------
-
-["glossary",id="terms"]
-List of Terms
--------------
-
-[template="glossary",id="terms"]
-List of Terms
--------------
-.....................................................................
-
-2. When the title text matches a configuration file
-   <<X16,`[specialsections]`>> entry.
-3. If neither of the above the default `sect<level>` template is used
-   (where `<level>` is a number from 1 to 4).
-
-In addition to the normal section template names ('sect1', 'sect2',
-'sect3', 'sect4') AsciiDoc has the following templates for
-frontmatter, backmatter and other special sections: 'abstract',
-'preface', 'colophon', 'dedication', 'glossary', 'bibliography',
-'synopsis', 'appendix', 'index'.  These special section templates
-generate the corresponding Docbook elements; for HTML outputs they
-default to the 'sect1' section template.
-
-Section IDs
-^^^^^^^^^^^
-If no explicit section ID is specified an ID will be synthesised from
-the section title.  The primary purpose of this feature is to ensure
-persistence of table of contents links (permalinks): the missing
-section IDs are generated dynamically by the JavaScript TOC generator
-*after* the page is loaded. If you link to a dynamically generated TOC
-address the page will load but the browser will ignore the (as yet
-ungenerated) section ID.
-
-The IDs are generated by the following algorithm:
-
-- Replace all non-alphanumeric title characters with underscores.
-- Strip leading or trailing underscores.
-- Convert to lowercase.
-- Prepend the `idprefix` attribute (so there's no possibility of name
-  clashes with existing document IDs). Prepend an underscore if the
-  `idprefix` attribute is not defined.
-- A numbered suffix (`_2`, `_3` ...) is added if a same named
-  auto-generated section ID exists.
-- If the `ascii-ids` attribute is defined then non-ASCII characters
-  are replaced with ASCII equivalents. This attribute may be
-  deprecated in future releases and *should be avoided*, it's sole
-  purpose is to accommodate deficient downstream applications that
-  cannot process non-ASCII ID attributes.
-
-Example: the title 'Jim's House' would generate the ID `_jim_s_house`.
-
-Section ID synthesis can be disabled by undefining the `sectids`
-attribute.
-
-[[X16]]
-Special Section Titles
-^^^^^^^^^^^^^^^^^^^^^^
-AsciiDoc has a mechanism for mapping predefined section titles
-auto-magically to specific markup templates. For example a title
-'Appendix A: Code Reference' will automatically use the 'appendix'
-<<X93,section markup template>>. The mappings from title to template
-name are specified in `[specialsections]` sections in the Asciidoc
-language configuration files (`lang-*.conf`).  Section entries are
-formatted like:
-
-  <title>=<template>
-
-`<title>` is a Python regular expression and `<template>` is the name
-of a configuration file markup template section. If the `<title>`
-matches an AsciiDoc document section title then the backend output is
-marked up using the `<template>` markup template (instead of the
-default `sect<level>` section template). The `{title}` attribute value
-is set to the value of the matched regular expression group named
-'title', if there is no 'title' group `{title}` defaults to the whole
-of the AsciiDoc section title. If `<template>` is blank then any
-existing entry with the same `<title>` will be deleted.
-
-.Special section titles vs. explicit template names
-*********************************************************************
-AsciiDoc has two mechanisms for specifying non-default section markup
-templates: you can specify the template name explicitly (using the
-'template' attribute) or indirectly (using 'special section titles').
-Specifying a <<X93,section template>> attribute explicitly is
-preferred.  Auto-magical 'special section titles' have the following
-drawbacks:
-
-- They are non-obvious, you have to know the exact matching
-  title for each special section on a language by language basis.
-- Section titles are predefined and can only be customised with a
-  configuration change.
-- The implementation is complicated by multiple languages: every
-  special section title has to be defined for each language (in each
-  of the `lang-*.conf` files).
-
-Specifying special section template names explicitly does add more
-noise to the source document (the 'template' attribute declaration),
-but the intention is obvious and the syntax is consistent with other
-AsciiDoc elements c.f.  bibliographic, Q&A and glossary lists.
-
-Special section titles have been deprecated but are retained for
-backward compatibility.
-
-*********************************************************************
-
-Inline Elements
-~~~~~~~~~~~~~~~
-<<X34,Inline document elements>> are used to format text and to
-perform various types of text substitution. Inline elements and inline
-element syntax is defined in the asciidoc(1) configuration files.
-
-Here is a list of AsciiDoc inline elements in the (default) order in
-which they are processed:
-
-Special characters::
-        These character sequences escape special characters used by
-        the backend markup (typically `<`, `>`, and `&` characters).
-        See `[specialcharacters]` configuration file sections.
-
-Quotes::
-        Elements that markup words and phrases; usually for character
-        formatting. See `[quotes]` configuration file sections.
-
-Special Words::
-        Word or word phrase patterns singled out for markup without
-        the need for further annotation.  See `[specialwords]`
-        configuration file sections.
-
-Replacements::
-        Each replacement defines a word or word phrase pattern to
-        search for along with corresponding replacement text. See
-        `[replacements]` configuration file sections.
-
-Attribute references::
-        Document attribute names enclosed in braces are replaced by
-        the corresponding attribute value.
-
-Inline Macros::
-        Inline macros are replaced by the contents of parametrized
-        configuration file sections.
-
-
-Document Processing
--------------------
-The AsciiDoc source document is read and processed as follows:
-
-1. The document 'Header' is parsed, header parameter values are
-   substituted into the configuration file `[header]` template section
-   which is then written to the output file.
-2. Each document 'Section' is processed and its constituent elements
-   translated to the output file.
-3. The configuration file `[footer]` template section is substituted
-   and written to the output file.
-
-When a block element is encountered asciidoc(1) determines the type of
-block by checking in the following order (first to last): (section)
-Titles, BlockMacros, Lists, DelimitedBlocks, Tables, AttributeEntrys,
-AttributeLists, BlockTitles, Paragraphs.
-
-The default paragraph definition `[paradef-default]` is last element
-to be checked.
-
-Knowing the parsing order will help you devise unambiguous macro, list
-and block syntax rules.
-
-Inline substitutions within block elements are performed in the
-following default order:
-
-1. Special characters
-2. Quotes
-3. Special words
-4. Replacements
-5. Attributes
-6. Inline Macros
-7. Replacements2
-
-The substitutions and substitution order performed on
-Title, Paragraph and DelimitedBlock elements is determined by
-configuration file parameters.
-
-
-Text Formatting
----------------
-[[X51]]
-Quoted Text
-~~~~~~~~~~~
-Words and phrases can be formatted by enclosing inline text with
-quote characters:
-
-_Emphasized text_::
-        Word phrases \'enclosed in single quote characters' (acute
-        accents) or \_underline characters_ are emphasized.
-
-*Strong text*::
-        Word phrases \*enclosed in asterisk characters* are rendered
-        in a strong font (usually bold).
-
-[[X81]]+Monospaced text+::
-        Word phrases \+enclosed in plus characters+ are rendered in a
-        monospaced font. Word phrases \`enclosed in backtick
-        characters` (grave accents) are also rendered in a monospaced
-        font but in this case the enclosed text is rendered literally
-        and is not subject to further expansion (see <<X80,inline
-        literal passthrough>>).
-
-`Single quoted text'::
-        Phrases enclosed with a \`single grave accent to the left and
-        a single acute accent to the right' are rendered in single
-        quotation marks.
-
-``Double quoted text''::
-        Phrases enclosed with \\``two grave accents to the left and
-        two acute accents to the right'' are rendered in quotation
-        marks.
-
-#Unquoted text#::
-        Placing \#hashes around text# does nothing, it is a mechanism
-        to allow inline attributes to be applied to otherwise
-        unformatted text.
-
-New quote types can be defined by editing asciidoc(1) configuration
-files. See the <<X7,Configuration Files>> section for details.
-
-.Quoted text behavior
-- Quoting cannot be overlapped.
-- Different quoting types can be nested.
-- To suppress quoted text formatting place a backslash character
-  immediately in front of the leading quote character(s). In the case
-  of ambiguity between escaped and non-escaped text you will need to
-  escape both leading and trailing quotes, in the case of
-  multi-character quotes you may even need to escape individual
-  characters.
-
-[[X96]]
-Quoted text attributes
-^^^^^^^^^^^^^^^^^^^^^^
-Quoted text can be prefixed with an <<X21,attribute list>>.  The first
-positional attribute ('role' attribute) is translated by AsciiDoc to
-an HTML 'span' element 'class' attribute or a DocBook 'phrase' element
-'role' attribute.
-
-DocBook XSL Stylesheets translate DocBook 'phrase' elements with
-'role' attributes to corresponding HTML 'span' elements with the same
-'class' attributes; CSS can then be used
-http://www.sagehill.net/docbookxsl/UsingCSS.html[to style the
-generated HTML].  Thus CSS styling can be applied to both DocBook and
-AsciiDoc generated HTML outputs.  You can also specify multiple class
-names separated by spaces.
-
-CSS rules for text color, text background color, text size and text
-decorators are included in the distributed AsciiDoc CSS files and are
-used in conjunction with AsciiDoc 'xhtml11', 'html5' and 'docbook'
-outputs. The CSS class names are:
-
-- '<color>' (text foreground color).
-- '<color>-background' (text background color).
-- 'big' and 'small' (text size).
-- 'underline', 'overline' and 'line-through' (strike through) text
-  decorators.
-
-Where '<color>' can be any of the
-http://en.wikipedia.org/wiki/Web_colors#HTML_color_names[sixteen HTML
-color names].  Examples:
-
-  [red]#Obvious# and [big red yellow-background]*very obvious*.
-
-  [underline]#Underline text#, [overline]#overline text# and
-  [blue line-through]*bold blue and line-through*.
-
-is rendered as:
-
-[red]#Obvious# and [big red yellow-background]*very obvious*.
-
-[underline]#Underline text#, [overline]#overline text# and
-[bold blue line-through]*bold blue and line-through*.
-
-NOTE: Color and text decorator attributes are rendered for XHTML and
-HTML 5 outputs using CSS stylesheets.  The mechanism to implement
-color and text decorator attributes is provided for DocBook toolchains
-via the DocBook 'phrase' element 'role' attribute, but the actual
-rendering is toolchain specific and is not part of the AsciiDoc
-distribution.
-
-[[X52]]
-Constrained and Unconstrained Quotes
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-There are actually two types of quotes:
-
-Constrained quotes
-++++++++++++++++++
-Quoted must be bounded by white space or commonly adjoining
-punctuation characters. These are the most commonly used type of
-quote.
-
-Unconstrained quotes
-++++++++++++++++++++
-Unconstrained quotes have no boundary constraints and can be placed
-anywhere within inline text. For consistency and to make them easier
-to remember unconstrained quotes are double-ups of the `_`, `*`, `+`
-and `#` constrained quotes:
-
-  __unconstrained emphasized text__
-  **unconstrained strong text**
-  ++unconstrained monospaced text++
-  ##unconstrained unquoted text##
-
-The following example emboldens the letter F:
-
-  **F**ile Open...
-
-Superscripts and Subscripts
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Put \^carets on either^ side of the text to be superscripted, put
-\~tildes on either side~ of text to be subscripted.  For example, the
-following line:
-
-  e^πi^+1 = 0. H~2~O and x^10^. Some ^super text^
-  and ~some sub text~
-
-Is rendered like:
-
-e^πi^+1 = 0. H~2~O and x^10^. Some ^super text^
-and ~some sub text~
-
-Superscripts and subscripts are implemented as <<X52,unconstrained
-quotes>> and they can be escaped with a leading backslash and prefixed
-with with an attribute list.
-
-Line Breaks
-~~~~~~~~~~~
-A plus character preceded by at least one space character at the end
-of a non-blank line forces a line break. It generates a line break
-(`br`) tag for HTML outputs and a custom XML `asciidoc-br` processing
-instruction for DocBook outputs. The `asciidoc-br` processing
-instruction is handled by <<X43,a2x(1)>>.
-
-Page Breaks
-~~~~~~~~~~~
-A line of three or more less-than (`<<<`) characters will generate a
-hard page break in DocBook and printed HTML outputs.  It uses the CSS
-`page-break-after` property for HTML outputs and a custom XML
-`asciidoc-pagebreak` processing instruction for DocBook outputs. The
-`asciidoc-pagebreak` processing instruction is handled by
-<<X43,a2x(1)>>. Hard page breaks are sometimes handy but as a general
-rule you should let your page processor generate page breaks for you.
-
-Rulers
-~~~~~~
-A line of three or more apostrophe characters will generate a ruler
-line.  It generates a ruler (`hr`) tag for HTML outputs and a custom
-XML `asciidoc-hr` processing instruction for DocBook outputs. The
-`asciidoc-hr` processing instruction is handled by <<X43,a2x(1)>>.
-
-Tabs
-~~~~
-By default tab characters input files will translated to 8 spaces. Tab
-expansion is set with the 'tabsize' entry in the configuration file
-`[miscellaneous]` section and can be overridden in included files by
-setting a 'tabsize' attribute in the `include` macro's attribute list.
-For example:
-
-  include::addendum.txt[tabsize=2]
-
-The tab size can also be set using the attribute command-line option,
-for example `--attribute tabsize=4`
-
-Replacements
-~~~~~~~~~~~~
-The following replacements are defined in the default AsciiDoc
-configuration:
-
-  (C) copyright, (TM) trademark, (R) registered trademark,
-  -- em dash, ... ellipsis, -> right arrow, <- left arrow, => right
-  double arrow, <= left double arrow.
-
-Which are rendered as:
-
-(C) copyright, (TM) trademark, (R) registered trademark,
--- em dash, ... ellipsis, -> right arrow, <- left arrow, => right
-double arrow, <= left double arrow.
-
-You can also include arbitrary entity references in the AsciiDoc
-source. Examples:
-
-  &#x278a; ¶
-
-renders:
-
-&#x278a; ¶
-
-To render a replacement literally escape it with a leading back-slash.
-
-The <<X7,Configuration Files>> section explains how to configure your
-own replacements.
-
-Special Words
-~~~~~~~~~~~~~
-Words defined in `[specialwords]` configuration file sections are
-automatically marked up without having to be explicitly notated.
-
-The <<X7,Configuration Files>> section explains how to add and replace
-special words.
-
-
-[[X17]]
-Titles
-------
-Document and section titles can be in either of two formats:
-
-Two line titles
-~~~~~~~~~~~~~~~
-A two line title consists of a title line, starting hard against the
-left margin, and an underline. Section underlines consist a repeated
-character pairs spanning the width of the preceding title (give or
-take up to two characters):
-
-The default title underlines for each of the document levels are:
-
-
-  Level 0 (top level):     ======================
-  Level 1:                 ----------------------
-  Level 2:                 ~~~~~~~~~~~~~~~~~~~~~~
-  Level 3:                 ^^^^^^^^^^^^^^^^^^^^^^
-  Level 4 (bottom level):  ++++++++++++++++++++++
-
-Examples:
-
-  Level One Section Title
-  -----------------------
-
-  Level 2 Subsection Title
-  ~~~~~~~~~~~~~~~~~~~~~~~~
-
-[[X46]]
-One line titles
-~~~~~~~~~~~~~~~
-One line titles consist of a single line delimited on either side by
-one or more equals characters (the number of equals characters
-corresponds to the section level minus one).  Here are some examples:
-
-  = Document Title (level 0) =
-  == Section title (level 1) ==
-  === Section title (level 2) ===
-  ==== Section title (level 3) ====
-  ===== Section title (level 4) =====
-
-[NOTE]
-=====================================================================
-- One or more spaces must fall between the title and the delimiters.
-- The trailing title delimiter is optional.
-- The one-line title syntax can be changed by editing the
-  configuration file `[titles]` section `sect0`...`sect4` entries.
-=====================================================================
-
-Floating titles
-~~~~~~~~~~~~~~~
-Setting the title's first positional attribute or 'style' attribute to
-'float' generates a free-floating title. A free-floating title is
-rendered just like a normal section title but is not formally
-associated with a text body and is not part of the regular section
-hierarchy so the normal ordering rules do not apply. Floating titles
-can also be used in contexts where section titles are illegal: for
-example sidebar and admonition blocks.  Example:
-
-  [float]
-  The second day
-  ~~~~~~~~~~~~~~
-
-Floating titles do not appear in a document's table of contents.
-
-
-[[X42]]
-Block Titles
-------------
-A 'BlockTitle' element is a single line beginning with a period
-followed by the title text. A BlockTitle is applied to the immediately
-following Paragraph, DelimitedBlock, List, Table or BlockMacro. For
-example:
-
-........................
-.Notes
-- Note 1.
-- Note 2.
-........................
-
-is rendered as:
-
-.Notes
-- Note 1.
-- Note 2.
-
-
-[[X41]]
-BlockId Element
----------------
-A 'BlockId' is a single line block element containing a unique
-identifier enclosed in double square brackets. It is used to assign an
-identifier to the ensuing block element. For example:
-
-  [[chapter-titles]]
-  Chapter titles can be ...
-
-The preceding example identifies the ensuing paragraph so it can be
-referenced from other locations, for example with
-`<<chapter-titles,chapter titles>>`.
-
-'BlockId' elements can be applied to Title, Paragraph, List,
-DelimitedBlock, Table and BlockMacro elements.  The BlockId element
-sets the `{id}` attribute for substitution in the subsequent block's
-markup template. If a second positional argument is supplied it sets
-the `{reftext}` attribute which is used to set the DocBook `xreflabel`
-attribute.
-
-The 'BlockId' element has the same syntax and serves the same function
-to the <<X30,anchor inline macro>>.
-
-[[X79]]
-AttributeList Element
----------------------
-An 'AttributeList' block element is an <<X21,attribute list>> on a
-line by itself:
-
-- 'AttributeList' attributes are only applied to the immediately
-  following block element -- the attributes are made available to the
-  block's markup template.
-- Multiple contiguous 'AttributeList' elements are additively combined
-  in the order they appear..
-- The first positional attribute in the list is often used to specify
-  the ensuing element's <<X23,style>>.
-
-Attribute value substitution
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-By default, only substitutions that take place inside attribute list
-values are attribute references, this is because not all attributes
-are destined to be marked up and rendered as text (for example the
-table 'cols' attribute). To perform normal inline text substitutions
-(special characters, quotes, macros, replacements) on an attribute
-value you need to enclose it in single quotes. In the following quote
-block the second attribute value in the AttributeList is quoted to
-ensure the 'http' macro is expanded to a hyperlink.
-
----------------------------------------------------------------------
-[quote,'http://en.wikipedia.org/wiki/Samuel_Johnson[Samuel Johnson]']
-_____________________________________________________________________
-Sir, a woman's preaching is like a dog's walking on his hind legs. It
-is not done well; but you are surprised to find it done at all.
-_____________________________________________________________________
----------------------------------------------------------------------
-
-Common attributes
-~~~~~~~~~~~~~~~~~
-Most block elements support the following attributes:
-
-[cols="1e,1,5a",frame="topbot",options="header"]
-|====================================================================
-|Name |Backends |Description
-
-|id |html4, html5, xhtml11, docbook |
-Unique identifier typically serve as link targets.
-Can also be set by the 'BlockId' element.
-
-|role |html4, html5, xhtml11, docbook |
-Role contains a string used to classify or subclassify an element and
-can be applied to AsciiDoc block elements.  The AsciiDoc 'role'
-attribute is translated to the 'role' attribute in DocBook outputs and
-is included in the 'class' attribute in HTML outputs, in this respect
-it behaves like the <<X96,quoted text role attribute>>.
-
-DocBook XSL Stylesheets translate DocBook 'role' attributes to HTML
-'class' attributes; CSS can then be used
-http://www.sagehill.net/docbookxsl/UsingCSS.html[to style the
-generated HTML].
-
-|reftext |docbook |
-'reftext' is used to set the DocBook 'xreflabel' attribute.
-The 'reftext' attribute can an also be set by the 'BlockId' element.
-
-|====================================================================
-
-
-Paragraphs
-----------
-Paragraphs are blocks of text terminated by a blank line, the end of
-file, or the start of a delimited block or a list.  There are three
-paragraph syntaxes: normal, indented (literal) and admonition which
-are rendered, by default, with the corresponding paragraph style.
-
-Each syntax has a default style, but you can explicitly apply any
-paragraph style to any paragraph syntax. You can also apply
-<<X104,delimited block>> styles to single paragraphs.
-
-The built-in paragraph styles are: 'normal', 'literal', 'verse',
-'quote', 'listing', 'TIP', 'NOTE', 'IMPORTANT', 'WARNING', 'CAUTION',
-'abstract', 'partintro', 'comment', 'example', 'sidebar', 'source',
-'music', 'latex', 'graphviz'.
-
-normal paragraph syntax
-~~~~~~~~~~~~~~~~~~~~~~~
-Normal paragraph syntax consists of one or more non-blank lines of
-text. The first line must start hard against the left margin (no
-intervening white space). The default processing expectation is that
-of a normal paragraph of text.
-
-[[X85]]
-literal paragraph syntax
-~~~~~~~~~~~~~~~~~~~~~~~~
-Literal paragraphs are rendered verbatim in a monospaced font without
-any distinguishing background or border.  By default there is no text
-formatting or substitutions within Literal paragraphs apart from
-Special Characters and Callouts.
-
-The 'literal' style is applied implicitly to indented paragraphs i.e.
-where the first line of the paragraph is indented by one or more space
-or tab characters.  For example:
-
----------------------------------------------------------------------
-  Consul *necessitatibus* per id,
-  consetetur, eu pro everti postulant
-  homero verear ea mea, qui.
----------------------------------------------------------------------
-
-Renders:
-
-  Consul *necessitatibus* per id,
-  consetetur, eu pro everti postulant
-  homero verear ea mea, qui.
-
-NOTE: Because <<X64,lists>> can be indented it's possible for your
-indented paragraph to be misinterpreted as a list -- in situations
-like this apply the 'literal' style to a normal paragraph.
-
-Instead of using a paragraph indent you could apply the 'literal'
-style explicitly, for example:
-
----------------------------------------------------------------------
-[literal]
-Consul *necessitatibus* per id,
-consetetur, eu pro everti postulant
-homero verear ea mea, qui.
----------------------------------------------------------------------
-
-Renders:
-
-[literal]
-Consul *necessitatibus* per id,
-consetetur, eu pro everti postulant
-homero verear ea mea, qui.
-
-[[X94]]
-quote and verse paragraph styles
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-The optional 'attribution' and 'citetitle' attributes (positional
-attributes 2 and 3) specify the author and source respectively.
-
-The 'verse' style retains the line breaks, for example:
-
----------------------------------------------------------------------
-[verse, William Blake, from Auguries of Innocence]
-To see a world in a grain of sand,
-And a heaven in a wild flower,
-Hold infinity in the palm of your hand,
-And eternity in an hour.
----------------------------------------------------------------------
-
-Which is rendered as:
-
-[verse, William Blake, from Auguries of Innocence]
-To see a world in a grain of sand,
-And a heaven in a wild flower,
-Hold infinity in the palm of your hand,
-And eternity in an hour.
-
-The 'quote' style flows the text at left and right margins, for
-example:
-
----------------------------------------------------------------------
-[quote, Bertrand Russell, The World of Mathematics (1956)]
-A good notation has subtlety and suggestiveness which at times makes
-it almost seem like a live teacher.
----------------------------------------------------------------------
-
-Which is rendered as:
-
-[quote, Bertrand Russell, The World of Mathematics (1956)]
-A good notation has subtlety and suggestiveness which at times makes
-it almost seem like a live teacher.
-
-[[X28]]
-Admonition Paragraphs
-~~~~~~~~~~~~~~~~~~~~~
-'TIP', 'NOTE', 'IMPORTANT', 'WARNING' and 'CAUTION' admonishment
-paragraph styles are generated by placing `NOTE:`, `TIP:`,
-`IMPORTANT:`, `WARNING:` or `CAUTION:` as the first word of the
-paragraph. For example:
-
-  NOTE: This is an example note.
-
-Alternatively, you can specify the paragraph admonition style
-explicitly using an <<X79,AttributeList element>>. For example:
-
-  [NOTE]
-  This is an example note.
-
-Renders:
-
-NOTE: This is an example note.
-
-TIP: If your admonition requires more than a single paragraph use an
-<<X22,admonition block>> instead.
-
-[[X47]]
-Admonition Icons and Captions
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-NOTE: Admonition customization with `icons`, `iconsdir`, `icon` and
-`caption` attributes does not apply when generating DocBook output. If
-you are going the DocBook route then the <<X43,a2x(1)>> `--no-icons`
-and `--icons-dir` options can be used to set the appropriate XSL
-Stylesheets parameters.
-
-By default the asciidoc(1) HTML backends generate text captions
-instead of admonition icon image links. To generate links to icon
-images define the <<X45,`icons`>> attribute, for example using the `-a
-icons` command-line option.
-
-The <<X44,`iconsdir`>> attribute sets the location of linked icon
-images.
-
-You can override the default icon image using the `icon` attribute to
-specify the path of the linked image. For example:
-
-  [icon="./images/icons/wink.png"]
-  NOTE: What lovely war.
-
-Use the `caption` attribute to customize the admonition captions (not
-applicable to `docbook` backend). The following example suppresses the
-icon image and customizes the caption of a 'NOTE' admonition
-(undefining the `icons` attribute with `icons=None` is only necessary
-if <<X45,admonition icons>> have been enabled):
-
-  [icons=None, caption="My Special Note"]
-  NOTE: This is my special note.
-
-This subsection also applies to <<X22,Admonition Blocks>>.
-
-
-[[X104]]
-Delimited Blocks
-----------------
-Delimited blocks are blocks of text enveloped by leading and trailing
-delimiter lines (normally a series of four or more repeated
-characters). The behavior of Delimited Blocks is specified by entries
-in configuration file `[blockdef-*]` sections.
-
-Predefined Delimited Blocks
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
-AsciiDoc ships with a number of predefined DelimitedBlocks (see the
-`asciidoc.conf` configuration file in the asciidoc(1) program
-directory):
-
-Predefined delimited block underlines:
-
-  CommentBlock:     //////////////////////////
-  PassthroughBlock: ++++++++++++++++++++++++++
-  ListingBlock:     --------------------------
-  LiteralBlock:     ..........................
-  SidebarBlock:     **************************
-  QuoteBlock:       __________________________
-  ExampleBlock:     ==========================
-  OpenBlock:        --
-
-.Default DelimitedBlock substitutions
-[cols="2e,7*^",frame="topbot",options="header,autowidth"]
-|=====================================================
-| |Attributes |Callouts |Macros | Quotes |Replacements
-|Special chars |Special words
-
-|PassthroughBlock |Yes |No  |Yes |No  |No  |No  |No
-|ListingBlock     |No  |Yes |No  |No  |No  |Yes |No
-|LiteralBlock     |No  |Yes |No  |No  |No  |Yes |No
-|SidebarBlock     |Yes |No  |Yes |Yes |Yes |Yes |Yes
-|QuoteBlock       |Yes |No  |Yes |Yes |Yes |Yes |Yes
-|ExampleBlock     |Yes |No  |Yes |Yes |Yes |Yes |Yes
-|OpenBlock        |Yes |No  |Yes |Yes |Yes |Yes |Yes
-|=====================================================
-
-Listing Blocks
-~~~~~~~~~~~~~~
-'ListingBlocks' are rendered verbatim in a monospaced font, they
-retain line and whitespace formatting and are often distinguished by a
-background or border. There is no text formatting or substitutions
-within Listing blocks apart from Special Characters and Callouts.
-Listing blocks are often used for computer output and file listings.
-
-Here's an example:
-
-[listing]
-......................................
---------------------------------------
-#include <stdio.h>
-
-int main() {
-   printf("Hello World!\n");
-   exit(0);
-}
---------------------------------------
-......................................
-
-Which will be rendered like:
-
---------------------------------------
-#include <stdio.h>
-
-int main() {
-    printf("Hello World!\n");
-    exit(0);
-}
---------------------------------------
-
-By convention <<X59,filter blocks>> use the listing block syntax and
-are implemented as distinct listing block styles.
-
-[[X65]]
-Literal Blocks
-~~~~~~~~~~~~~~
-'LiteralBlocks' are rendered just like <<X85,literal paragraphs>>.
-Example:
-
----------------------------------------------------------------------
-...................................
-Consul *necessitatibus* per id,
-consetetur, eu pro everti postulant
-homero verear ea mea, qui.
-...................................
----------------------------------------------------------------------
-
-Renders:
-...................................
-Consul *necessitatibus* per id,
-consetetur, eu pro everti postulant
-homero verear ea mea, qui.
-...................................
-
-If the 'listing' style is applied to a LiteralBlock it will be
-rendered as a ListingBlock (this is handy if you have a listing
-containing a ListingBlock).
-
-Sidebar Blocks
-~~~~~~~~~~~~~~
-A sidebar is a short piece of text presented outside the narrative
-flow of the main text. The sidebar is normally presented inside a
-bordered box to set it apart from the main text.
-
-The sidebar body is treated like a normal section body.
-
-Here's an example:
-
----------------------------------------------------------------------
-.An Example Sidebar
-************************************************
-Any AsciiDoc SectionBody element (apart from
-SidebarBlocks) can be placed inside a sidebar.
-************************************************
----------------------------------------------------------------------
-
-Which will be rendered like:
-
-.An Example Sidebar
-************************************************
-Any AsciiDoc SectionBody element (apart from
-SidebarBlocks) can be placed inside a sidebar.
-************************************************
-
-[[X26]]
-Comment Blocks
-~~~~~~~~~~~~~~
-The contents of 'CommentBlocks' are not processed; they are useful for
-annotations and for excluding new or outdated content that you don't
-want displayed. CommentBlocks are never written to output files.
-Example:
-
----------------------------------------------------------------------
-//////////////////////////////////////////
-CommentBlock contents are not processed by
-asciidoc(1).
-//////////////////////////////////////////
----------------------------------------------------------------------
-
-See also <<X25,Comment Lines>>.
-
-NOTE: System macros are executed inside comment blocks.
-
-[[X76]]
-Passthrough Blocks
-~~~~~~~~~~~~~~~~~~
-By default the block contents is subject only to 'attributes' and
-'macros' substitutions (use an explicit 'subs' attribute to apply
-different substitutions).  PassthroughBlock content will often be
-backend specific. Here's an example:
-
----------------------------------------------------------------------
-[subs="quotes"]
-++++++++++++++++++++++++++++++++++++++
-<table border="1"><tr>
-  <td>*Cell 1*</td>
-  <td>*Cell 2*</td>
-</tr></table>
-++++++++++++++++++++++++++++++++++++++
----------------------------------------------------------------------
-
-The following styles can be applied to passthrough blocks:
-
-pass::
-  No substitutions are performed. This is equivalent to `subs="none"`.
-
-asciimath, latexmath::
-  By default no substitutions are performed, the contents are rendered
-  as <<X78,mathematical formulas>>.
-
-Quote Blocks
-~~~~~~~~~~~~
-'QuoteBlocks' are used for quoted passages of text. There are two
-styles: 'quote' and 'verse'. The style behavior is identical to
-<<X94,quote and verse paragraphs>> except that blocks can contain
-multiple paragraphs and, in the case of the 'quote' style, other
-section elements.  The first positional attribute sets the style, if
-no attributes are specified the 'quote' style is used.  The optional
-'attribution' and 'citetitle' attributes (positional attributes 2 and
-3) specify the quote's author and source. For example:
-
----------------------------------------------------------------------
-[quote, Sir Arthur Conan Doyle, The Adventures of Sherlock Holmes]
-____________________________________________________________________
-As he spoke there was the sharp sound of horses' hoofs and
-grating wheels against the curb, followed by a sharp pull at the
-bell. Holmes whistled.
-
-"A pair, by the sound," said he. "Yes," he continued, glancing
-out of the window. "A nice little brougham and a pair of
-beauties. A hundred and fifty guineas apiece. There's money in
-this case, Watson, if there is nothing else."
-____________________________________________________________________
----------------------------------------------------------------------
-
-Which is rendered as:
-
-[quote, Sir Arthur Conan Doyle, The Adventures of Sherlock Holmes]
-____________________________________________________________________
-As he spoke there was the sharp sound of horses' hoofs and
-grating wheels against the curb, followed by a sharp pull at the
-bell. Holmes whistled.
-
-"A pair, by the sound," said he. "Yes," he continued, glancing
-out of the window. "A nice little brougham and a pair of
-beauties. A hundred and fifty guineas apiece. There's money in
-this case, Watson, if there is nothing else."
-____________________________________________________________________
-
-[[X48]]
-Example Blocks
-~~~~~~~~~~~~~~
-'ExampleBlocks' encapsulate the DocBook Example element and are used
-for, well, examples.  Example blocks can be titled by preceding them
-with a 'BlockTitle'.  DocBook toolchains will normally automatically
-number examples and generate a 'List of Examples' backmatter section.
-
-Example blocks are delimited by lines of equals characters and can
-contain any block elements apart from Titles, BlockTitles and
-Sidebars) inside an example block. For example:
-
----------------------------------------------------------------------
-.An example
-=====================================================================
-Qui in magna commodo, est labitur dolorum an. Est ne magna primis
-adolescens.
-=====================================================================
----------------------------------------------------------------------
-
-Renders:
-
-.An example
-=====================================================================
-Qui in magna commodo, est labitur dolorum an. Est ne magna primis
-adolescens.
-=====================================================================
-
-A title prefix that can be inserted with the `caption` attribute
-(HTML backends). For example:
-
----------------------------------------------------------------------
-[caption="Example 1: "]
-.An example with a custom caption
-=====================================================================
-Qui in magna commodo, est labitur dolorum an. Est ne magna primis
-adolescens.
-=====================================================================
----------------------------------------------------------------------
-
-[[X22]]
-Admonition Blocks
-~~~~~~~~~~~~~~~~~
-The 'ExampleBlock' definition includes a set of admonition
-<<X23,styles>> ('NOTE', 'TIP', 'IMPORTANT', 'WARNING', 'CAUTION') for
-generating admonition blocks (admonitions containing more than a
-<<X28,single paragraph>>).  Just precede the 'ExampleBlock' with an
-attribute list specifying the admonition style name. For example:
-
----------------------------------------------------------------------
-[NOTE]
-.A NOTE admonition block
-=====================================================================
-Qui in magna commodo, est labitur dolorum an. Est ne magna primis
-adolescens.
-
-. Fusce euismod commodo velit.
-. Vivamus fringilla mi eu lacus.
-  .. Fusce euismod commodo velit.
-  .. Vivamus fringilla mi eu lacus.
-. Donec eget arcu bibendum
-  nunc consequat lobortis.
-=====================================================================
----------------------------------------------------------------------
-
-Renders:
-
-[NOTE]
-.A NOTE admonition block
-=====================================================================
-Qui in magna commodo, est labitur dolorum an. Est ne magna primis
-adolescens.
-
-. Fusce euismod commodo velit.
-. Vivamus fringilla mi eu lacus.
-  .. Fusce euismod commodo velit.
-  .. Vivamus fringilla mi eu lacus.
-. Donec eget arcu bibendum
-  nunc consequat lobortis.
-=====================================================================
-
-See also <<X47,Admonition Icons and Captions>>.
-
-[[X29]]
-Open Blocks
-~~~~~~~~~~~
-Open blocks are special:
-
-- The open block delimiter is line containing two hyphen characters
-  (instead of four or more repeated characters).
-
-- They can be used to group block elements for <<X15,List item
-  continuation>>.
-
-- Open blocks can be styled to behave like any other type of delimited
-  block.  The  following built-in styles can be applied to open
-  blocks: 'literal', 'verse', 'quote', 'listing', 'TIP', 'NOTE',
-  'IMPORTANT', 'WARNING', 'CAUTION', 'abstract', 'partintro',
-  'comment', 'example', 'sidebar', 'source', 'music', 'latex',
-  'graphviz'. For example, the following open block and listing block
-  are functionally identical:
-
-  [listing]
-  --
-  Lorum ipsum ...
-  --
-
-  ---------------
-  Lorum ipsum ...
-  ---------------
-
-- An unstyled open block groups section elements but otherwise does
-  nothing.
-
-Open blocks are used to generate document abstracts and book part
-introductions:
-
-- Apply the 'abstract' style to generate an abstract, for example:
-
-  [abstract]
-  --
-  In this paper we will ...
-  --
-
-. Apply the 'partintro' style to generate a book part introduction for
-  a multi-part book, for example:
-
-  [partintro]
-  .Optional part introduction title
-  --
-  Optional part introduction goes here.
-  --
-
-
-[[X64]]
-Lists
------
-.List types
-- Bulleted lists. Also known as itemized or unordered lists.
-- Numbered lists. Also called ordered lists.
-- Labeled lists. Sometimes called variable or definition lists.
-- Callout lists (a list of callout annotations).
-
-.List behavior
-- List item indentation is optional and does not determine nesting,
-  indentation does however make the source more readable.
-- Another list or a literal paragraph immediately following a list
-  item will be implicitly included in the list item; use <<X15, list
-  item continuation>> to explicitly append other block elements to a
-  list item.
-- A comment block or a comment line block macro element will terminate
-  a list -- use inline comment lines to put comments inside lists.
-- The `listindex` <<X60,intrinsic attribute>> is the current list item
-  index (1..). If this attribute is used outside a list then it's value
-  is the number of items in the most recently closed list. Useful for
-  displaying the number of items in a list.
-
-Bulleted Lists
-~~~~~~~~~~~~~~
-Bulleted list items start with a single dash or one to five asterisks
-followed by some white space then some text. Bulleted list syntaxes
-are:
-
-...................
-- List item.
-* List item.
-** List item.
-*** List item.
-**** List item.
-***** List item.
-...................
-
-Numbered Lists
-~~~~~~~~~~~~~~
-List item numbers are explicit or implicit.
-
-.Explicit numbering
-List items begin with a number followed by some white space then the
-item text. The numbers can be decimal (arabic), roman (upper or lower
-case) or alpha (upper or lower case). Decimal and alpha numbers are
-terminated with a period, roman numbers are terminated with a closing
-parenthesis. The different terminators are necessary to ensure 'i',
-'v' and 'x' roman numbers are are distinguishable from 'x', 'v' and
-'x' alpha numbers. Examples:
-
-.....................................................................
-1.   Arabic (decimal) numbered list item.
-a.   Lower case alpha (letter) numbered list item.
-F.   Upper case alpha (letter) numbered list item.
-iii) Lower case roman numbered list item.
-IX)  Upper case roman numbered list item.
-.....................................................................
-
-.Implicit numbering
-List items begin one to five period characters, followed by some white
-space then the item text. Examples:
-
-.....................................................................
-. Arabic (decimal) numbered list item.
-.. Lower case alpha (letter) numbered list item.
-... Lower case roman numbered list item.
-.... Upper case alpha (letter) numbered list item.
-..... Upper case roman numbered list item.
-.....................................................................
-
-You can use the 'style' attribute (also the first positional
-attribute) to specify an alternative numbering style.  The numbered
-list style can be one of the following values: 'arabic', 'loweralpha',
-'upperalpha', 'lowerroman', 'upperroman'.
-
-Here are some examples of bulleted and numbered lists:
-
----------------------------------------------------------------------
-- Praesent eget purus quis magna eleifend eleifend.
-  1. Fusce euismod commodo velit.
-    a. Fusce euismod commodo velit.
-    b. Vivamus fringilla mi eu lacus.
-    c. Donec eget arcu bibendum nunc consequat lobortis.
-  2. Vivamus fringilla mi eu lacus.
-    i)  Fusce euismod commodo velit.
-    ii) Vivamus fringilla mi eu lacus.
-  3. Donec eget arcu bibendum nunc consequat lobortis.
-  4. Nam fermentum mattis ante.
-- Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
-  * Fusce euismod commodo velit.
-  ** Qui in magna commodo, est labitur dolorum an. Est ne magna primis
-     adolescens. Sit munere ponderum dignissim et. Minim luptatum et
-     vel.
-  ** Vivamus fringilla mi eu lacus.
-  * Donec eget arcu bibendum nunc consequat lobortis.
-- Nulla porttitor vulputate libero.
-  . Fusce euismod commodo velit.
-  . Vivamus fringilla mi eu lacus.
-[upperroman]
-    .. Fusce euismod commodo velit.
-    .. Vivamus fringilla mi eu lacus.
-  . Donec eget arcu bibendum nunc consequat lobortis.
----------------------------------------------------------------------
-
-Which render as:
-
-- Praesent eget purus quis magna eleifend eleifend.
-  1. Fusce euismod commodo velit.
-    a. Fusce euismod commodo velit.
-    b. Vivamus fringilla mi eu lacus.
-    c. Donec eget arcu bibendum nunc consequat lobortis.
-  2. Vivamus fringilla mi eu lacus.
-    i)  Fusce euismod commodo velit.
-    ii) Vivamus fringilla mi eu lacus.
-  3. Donec eget arcu bibendum nunc consequat lobortis.
-  4. Nam fermentum mattis ante.
-- Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
-  * Fusce euismod commodo velit.
-  ** Qui in magna commodo, est labitur dolorum an. Est ne magna primis
-     adolescens. Sit munere ponderum dignissim et. Minim luptatum et
-     vel.
-  ** Vivamus fringilla mi eu lacus.
-  * Donec eget arcu bibendum nunc consequat lobortis.
-- Nulla porttitor vulputate libero.
-  . Fusce euismod commodo velit.
-  . Vivamus fringilla mi eu lacus.
-[upperroman]
-    .. Fusce euismod commodo velit.
-    .. Vivamus fringilla mi eu lacus.
-  . Donec eget arcu bibendum nunc consequat lobortis.
-
-A predefined 'compact' option is available to bulleted and numbered
-lists -- this translates to the DocBook 'spacing="compact"' lists
-attribute which may or may not be processed by the DocBook toolchain.
-Example:
-
-  [options="compact"]
-  - Compact list item.
-  - Another compact list item.
-
-TIP: To apply the 'compact' option globally define a document-wide
-'compact-option' attribute, e.g. using the `-a compact-option`
-command-line option.
-
-You can set the list start number using the 'start' attribute (works
-for HTML outputs and DocBook outputs processed by DocBook XSL
-Stylesheets). Example:
-
-  [start=7]
-  . List item 7.
-  . List item 8.
-
-Labeled Lists
-~~~~~~~~~~~~~
-Labeled list items consist of one or more text labels followed by the
-text of the list item.
-
-An item label begins a line with an alphanumeric character hard
-against the left margin and ends with two, three or four colons or two
-semi-colons. A list item can have multiple labels, one per line.
-
-The list item text consists of one or more lines of text starting
-after the last label (either on the same line or a new line) and can
-be followed by nested List or ListParagraph elements. Item text can be
-optionally indented.
-
-Here are some examples:
-
----------------------------------------------------------------------
-In::
-Lorem::
-  Fusce euismod commodo velit.
-
-  Fusce euismod commodo velit.
-
-Ipsum:: Vivamus fringilla mi eu lacus.
-  * Vivamus fringilla mi eu lacus.
-  * Donec eget arcu bibendum nunc consequat lobortis.
-Dolor::
-  Donec eget arcu bibendum nunc consequat lobortis.
-  Suspendisse;;
-    A massa id sem aliquam auctor.
-  Morbi;;
-    Pretium nulla vel lorem.
-  In;;
-    Dictum mauris in urna.
-    Vivamus::: Fringilla mi eu lacus.
-    Donec:::   Eget arcu bibendum nunc consequat lobortis.
----------------------------------------------------------------------
-
-Which render as:
-
-In::
-Lorem::
-  Fusce euismod commodo velit.
-
-  Fusce euismod commodo velit.
-
-Ipsum:: Vivamus fringilla mi eu lacus.
-  * Vivamus fringilla mi eu lacus.
-  * Donec eget arcu bibendum nunc consequat lobortis.
-Dolor::
-  Donec eget arcu bibendum nunc consequat lobortis.
-  Suspendisse;;
-    A massa id sem aliquam auctor.
-  Morbi;;
-    Pretium nulla vel lorem.
-  In;;
-    Dictum mauris in urna.
-    Vivamus::: Fringilla mi eu lacus.
-    Donec:::   Eget arcu bibendum nunc consequat lobortis.
-
-Horizontal labeled list style
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-The 'horizontal' labeled list style (also the first positional
-attribute) places the list text side-by-side with the label instead of
-under the label. Here is an example:
-
----------------------------------------------------------------------
-[horizontal]
-*Lorem*:: Fusce euismod commodo velit.  Qui in magna commodo, est
-labitur dolorum an. Est ne magna primis adolescens.
-
-  Fusce euismod commodo velit.
-
-*Ipsum*:: Vivamus fringilla mi eu lacus.
-- Vivamus fringilla mi eu lacus.
-- Donec eget arcu bibendum nunc consequat lobortis.
-
-*Dolor*::
-  - Vivamus fringilla mi eu lacus.
-  - Donec eget arcu bibendum nunc consequat lobortis.
-
----------------------------------------------------------------------
-
-Which render as:
-
-[horizontal]
-*Lorem*:: Fusce euismod commodo velit.  Qui in magna commodo, est
-labitur dolorum an. Est ne magna primis adolescens.
-
-  Fusce euismod commodo velit.
-
-*Ipsum*:: Vivamus fringilla mi eu lacus.
-- Vivamus fringilla mi eu lacus.
-- Donec eget arcu bibendum nunc consequat lobortis.
-
-*Dolor*::
-  - Vivamus fringilla mi eu lacus.
-  - Donec eget arcu bibendum nunc consequat lobortis.
-
-[NOTE]
-=====================================================================
-- Current PDF toolchains do not make a good job of determining
-  the relative column widths for horizontal labeled lists.
-- Nested horizontal labeled lists will generate DocBook validation
-  errors because the 'DocBook XML V4.2' DTD does not permit nested
-  informal tables (although <<X13,DocBook XSL Stylesheets>> and
-  <<X31,dblatex>> process them correctly).
-- The label width can be set as a percentage of the total width by
-  setting the 'width' attribute e.g. `width="10%"`
-=====================================================================
-
-Question and Answer Lists
-~~~~~~~~~~~~~~~~~~~~~~~~~
-AsciiDoc comes pre-configured with a 'qanda' style labeled list for generating
-DocBook question and answer (Q&A) lists. Example:
-
----------------------------------------------------------------------
-[qanda]
-Question one::
-        Answer one.
-Question two::
-        Answer two.
----------------------------------------------------------------------
-
-Renders:
-
-[qanda]
-Question one::
-        Answer one.
-Question two::
-        Answer two.
-
-Glossary Lists
-~~~~~~~~~~~~~~
-AsciiDoc comes pre-configured with a 'glossary' style labeled list for
-generating DocBook glossary lists. Example:
-
----------------------------------------------------------------------
-[glossary]
-A glossary term::
-    The corresponding definition.
-A second glossary term::
-    The corresponding definition.
----------------------------------------------------------------------
-
-For working examples see the `article.txt` and `book.txt` documents in
-the AsciiDoc `./doc` distribution directory.
-
-NOTE: To generate valid DocBook output glossary lists must be located
-in a section that uses the 'glossary' <<X93,section markup template>>.
-
-Bibliography Lists
-~~~~~~~~~~~~~~~~~~
-AsciiDoc comes with a predefined 'bibliography' bulleted list style
-generating DocBook bibliography entries. Example:
-
----------------------------------------------------------------------
-[bibliography]
-.Optional list title
-- [[[taoup]]] Eric Steven Raymond. 'The Art of UNIX
-  Programming'. Addison-Wesley. ISBN 0-13-142901-9.
-- [[[walsh-muellner]]] Norman Walsh & Leonard Muellner.
-  'DocBook - The Definitive Guide'. O'Reilly & Associates.
-  1999. ISBN 1-56592-580-7.
----------------------------------------------------------------------
-
-The `[[[<reference>]]]` syntax is a bibliography entry anchor, it
-generates an anchor named `<reference>` and additionally displays
-`[<reference>]` at the anchor position. For example `[[[taoup]]]`
-generates an anchor named `taoup` that displays `[taoup]` at the
-anchor position. Cite the reference from elsewhere your document using
-`<<taoup>>`, this displays a hyperlink (`[taoup]`) to the
-corresponding bibliography entry anchor.
-
-For working examples see the `article.txt` and `book.txt` documents in
-the AsciiDoc `./doc` distribution directory.
-
-NOTE: To generate valid DocBook output bibliography lists must be
-located in a <<X93,bibliography section>>.
-
-[[X15]]
-List Item Continuation
-~~~~~~~~~~~~~~~~~~~~~~
-Another list or a literal paragraph immediately following a list item
-is implicitly appended to the list item; to append other block
-elements to a list item you need to explicitly join them to the list
-item with a 'list continuation' (a separator line containing a