--- 9e52f8578d891beaef25730a92a6e723596ddbd07bfe0d2a56486fcf63a0b983_asciidoc-8.6.10.tar.gz +++ asciidoc-8.6.10.tar.gz │ --- 9e52f8578d891beaef25730a92a6e723596ddbd07bfe0d2a56486fcf63a0b983_asciidoc-8.6.10.tar ├── +++ asciidoc-8.6.10.tar │ ├── file list │ │ @@ -1,251 +1,251 @@ │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/ │ │ --rw-rw-r-- 0 root (0) root (0) 174 2017-09-29 01:10:02.000000 asciidoc-8.6.10/.gitignore │ │ --rw-rw-r-- 0 root (0) root (0) 529 2017-09-29 01:10:02.000000 asciidoc-8.6.10/.travis.yml │ │ --rw-rw-r-- 0 root (0) root (0) 620 2017-09-29 01:10:02.000000 asciidoc-8.6.10/BUGS.txt │ │ --rw-rw-r-- 0 root (0) root (0) 153592 2017-09-29 01:10:02.000000 asciidoc-8.6.10/CHANGELOG.txt │ │ --rw-rw-r-- 0 root (0) root (0) 17982 2017-09-29 01:10:02.000000 asciidoc-8.6.10/COPYING │ │ --rw-rw-r-- 0 root (0) root (0) 745 2017-09-29 01:10:02.000000 asciidoc-8.6.10/COPYRIGHT │ │ --rw-rw-r-- 0 root (0) root (0) 7585 2017-09-29 01:10:02.000000 asciidoc-8.6.10/INSTALL.txt │ │ --rw-rw-r-- 0 root (0) root (0) 1744 2017-09-29 01:10:02.000000 asciidoc-8.6.10/MANIFEST │ │ --rw-rw-r-- 0 root (0) root (0) 4546 2017-09-29 01:10:02.000000 asciidoc-8.6.10/Makefile.in │ │ --rw-rw-r-- 0 root (0) root (0) 1502 2017-09-29 01:10:02.000000 asciidoc-8.6.10/README.asciidoc │ │ --rwxrwxr-x 0 root (0) root (0) 37150 2017-09-29 01:10:02.000000 asciidoc-8.6.10/a2x.py │ │ --rw-rw-r-- 0 root (0) root (0) 17757 2017-09-29 01:10:02.000000 asciidoc-8.6.10/asciidoc.conf │ │ --rwxrwxr-x 0 root (0) root (0) 254321 2017-09-29 01:10:02.000000 asciidoc-8.6.10/asciidoc.py │ │ --rw-rw-r-- 0 root (0) root (0) 8498 2017-09-29 01:10:02.000000 asciidoc-8.6.10/asciidocapi.py │ │ --rw-rw-r-- 0 root (0) root (0) 127 2017-09-29 01:10:02.000000 asciidoc-8.6.10/common.aap │ │ --rw-rw-r-- 0 root (0) root (0) 108 2017-09-29 01:10:02.000000 asciidoc-8.6.10/configure.ac │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/dblatex/ │ │ --rw-rw-r-- 0 root (0) root (0) 696 2017-09-29 01:10:02.000000 asciidoc-8.6.10/dblatex/asciidoc-dblatex.sty │ │ --rw-rw-r-- 0 root (0) root (0) 2335 2017-09-29 01:10:02.000000 asciidoc-8.6.10/dblatex/asciidoc-dblatex.xsl │ │ --rw-rw-r-- 0 root (0) root (0) 1360 2017-09-29 01:10:02.000000 asciidoc-8.6.10/dblatex/dblatex-readme.txt │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/ │ │ --rw-rw-r-- 0 root (0) root (0) 12611 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/a2x.1.txt │ │ --rw-rw-r-- 0 root (0) root (0) 2422 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/article-docinfo.xml │ │ --rw-rw-r-- 0 root (0) root (0) 3593 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/article.txt │ │ --rw-rw-r-- 0 root (0) root (0) 7080 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/asciidoc.1.txt │ │ --rw-rw-r-- 0 root (0) root (0) 171 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/asciidoc.conf │ │ --rw-rw-r-- 0 root (0) root (0) 9211 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/asciidoc.dict │ │ --rw-rw-r-- 0 root (0) root (0) 225247 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/asciidoc.txt │ │ --rw-rw-r-- 0 root (0) root (0) 6371 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/asciidocapi.txt │ │ --rw-rw-r-- 0 root (0) root (0) 2384 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/asciimathml.txt │ │ --rw-rw-r-- 0 root (0) root (0) 4628 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/book-multi.txt │ │ --rw-rw-r-- 0 root (0) root (0) 3708 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/book.txt │ │ --rw-rw-r-- 0 root (0) root (0) 819 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/customers.csv │ │ --rw-rw-r-- 0 root (0) root (0) 7173 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/epub-notes.txt │ │ --rw-rw-r-- 0 root (0) root (0) 47516 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/faq.txt │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/images -> ../images │ │ --rw-rw-r-- 0 root (0) root (0) 11540 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/latex-backend.txt │ │ --rw-rw-r-- 0 root (0) root (0) 4256 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/latex-bugs.txt │ │ --rw-rw-r-- 0 root (0) root (0) 7726 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/latex-filter.txt │ │ --rw-rw-r-- 0 root (0) root (0) 3744 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/latexmath.txt │ │ --rw-rw-r-- 0 root (0) root (0) 1341 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/latexmathml.txt │ │ --rw-rw-r-- 0 root (0) root (0) 8647 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/main.aap │ │ --rw-rw-r-- 0 root (0) root (0) 5129 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/music-filter.txt │ │ --rw-rw-r-- 0 root (0) root (0) 13748 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/publishing-ebooks-with-asciidoc.txt │ │ --rw-rw-r-- 0 root (0) root (0) 4006 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/slidy-example.txt │ │ --rw-rw-r-- 0 root (0) root (0) 4083 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/slidy.txt │ │ --rw-rw-r-- 0 root (0) root (0) 7825 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/source-highlight-filter.txt │ │ --rw-rw-r-- 0 root (0) root (0) 8131 2017-09-29 01:10:02.000000 asciidoc-8.6.10/doc/testasciidoc.txt │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/docbook-xsl/ │ │ --rw-rw-r-- 0 root (0) root (0) 2440 2017-09-29 01:10:02.000000 asciidoc-8.6.10/docbook-xsl/asciidoc-docbook-xsl.txt │ │ --rw-rw-r-- 0 root (0) root (0) 851 2017-09-29 01:10:02.000000 asciidoc-8.6.10/docbook-xsl/chunked.xsl │ │ --rw-rw-r-- 0 root (0) root (0) 3716 2017-09-29 01:10:02.000000 asciidoc-8.6.10/docbook-xsl/common.xsl │ │ --rw-rw-r-- 0 root (0) root (0) 1077 2017-09-29 01:10:02.000000 asciidoc-8.6.10/docbook-xsl/epub.xsl │ │ --rw-rw-r-- 0 root (0) root (0) 5568 2017-09-29 01:10:02.000000 asciidoc-8.6.10/docbook-xsl/fo.xsl │ │ --rw-rw-r-- 0 root (0) root (0) 998 2017-09-29 01:10:02.000000 asciidoc-8.6.10/docbook-xsl/htmlhelp.xsl │ │ --rw-rw-r-- 0 root (0) root (0) 1100 2017-09-29 01:10:02.000000 asciidoc-8.6.10/docbook-xsl/manpage.xsl │ │ --rw-rw-r-- 0 root (0) root (0) 1738 2017-09-29 01:10:02.000000 asciidoc-8.6.10/docbook-xsl/text.xsl │ │ --rw-rw-r-- 0 root (0) root (0) 647 2017-09-29 01:10:02.000000 asciidoc-8.6.10/docbook-xsl/xhtml.xsl │ │ --rw-rw-r-- 0 root (0) root (0) 23553 2017-09-29 01:10:02.000000 asciidoc-8.6.10/docbook45.conf │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/ │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/ │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/ASCIIMathML.js -> ../../javascripts/ASCIIMathML.js │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/CHANGELOG.txt -> ../../CHANGELOG.txt │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/INSTALL.txt -> ../../INSTALL.txt │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/LaTeXMathML.js -> ../../javascripts/LaTeXMathML.js │ │ --rw-rw-r-- 0 root (0) root (0) 1035 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/README-website.txt │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/README.txt -> ../../README.asciidoc │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/a2x.1.txt -> ../../doc/a2x.1.txt │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/asciidoc-docbook-xsl.txt -> ../../docbook-xsl/asciidoc-docbook-xsl.txt │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/asciidoc-graphviz-sample.txt -> ../../filters/graphviz/asciidoc-graphviz-sample.txt │ │ --rw-rw-r-- 0 root (0) root (0) 1887 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/asciidoc-website.dict │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/asciidoc.css -> ../../stylesheets/asciidoc.css │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/asciidoc.js -> ../../javascripts/asciidoc.js │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/asciidocapi.txt -> ../../doc/asciidocapi.txt │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/asciimathml.txt -> ../../doc/asciimathml.txt │ │ --rwxrwxr-x 0 root (0) root (0) 838 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/build-website.sh │ │ --rw-rw-r-- 0 root (0) root (0) 819 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/customers.csv │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/epub-notes.txt -> ../../doc/epub-notes.txt │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/faq.txt -> ../../doc/faq.txt │ │ --rw-rw-r-- 0 root (0) root (0) 1150 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/favicon.ico │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/images -> ../../images │ │ --rw-rw-r-- 0 root (0) root (0) 22897 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/index.txt │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/latex-backend.txt -> ../../doc/latex-backend.txt │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/latex-bugs.txt -> ../../doc/latex-bugs.txt │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/latex-filter.txt -> ../../doc/latex-filter.txt │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/latexmathml.txt -> ../../doc/latexmathml.txt │ │ --rw-rw-r-- 0 root (0) root (0) 5292 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/layout1.conf │ │ --rw-rw-r-- 0 root (0) root (0) 1135 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/layout1.css │ │ --rw-rw-r-- 0 root (0) root (0) 5373 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/layout2.conf │ │ --rw-rw-r-- 0 root (0) root (0) 1443 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/layout2.css │ │ --rw-rw-r-- 0 root (0) root (0) 4508 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/main.aap │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/manpage.txt -> ../../doc/asciidoc.1.txt │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/music-filter.txt -> ../../doc/music-filter.txt │ │ --rw-rw-r-- 0 root (0) root (0) 1662 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/newlists.txt │ │ --rw-rw-r-- 0 root (0) root (0) 19480 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/newtables.txt │ │ --rw-rw-r-- 0 root (0) root (0) 2760 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/plugins.txt │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/publishing-ebooks-with-asciidoc.txt -> ../../doc/publishing-ebooks-with-asciidoc.txt │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/slidy-example.txt -> ../../doc/slidy-example.txt │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/slidy.txt -> ../../doc/slidy.txt │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/source-highlight-filter.txt -> ../../doc/source-highlight-filter.txt │ │ --rw-rw-r-- 0 root (0) root (0) 138 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/support.txt │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/testasciidoc.txt -> ../../doc/testasciidoc.txt │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/userguide.txt -> ../../doc/asciidoc.txt │ │ --rw-rw-r-- 0 root (0) root (0) 1683 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/version83.txt │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/examples/website/xhtml11-quirks.css -> ../../stylesheets/xhtml11-quirks.css │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/filters/ │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/filters/code/ │ │ --rw-rw-r-- 0 root (0) root (0) 869 2017-09-29 01:10:02.000000 asciidoc-8.6.10/filters/code/code-filter-readme.txt │ │ --rw-rw-r-- 0 root (0) root (0) 393 2017-09-29 01:10:02.000000 asciidoc-8.6.10/filters/code/code-filter-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 262 2017-09-29 01:10:02.000000 asciidoc-8.6.10/filters/code/code-filter.conf │ │ --rwxrwxr-x 0 root (0) root (0) 7657 2017-09-29 01:10:02.000000 asciidoc-8.6.10/filters/code/code-filter.py │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/filters/graphviz/ │ │ --rw-rw-r-- 0 root (0) root (0) 6051 2017-09-29 01:10:02.000000 asciidoc-8.6.10/filters/graphviz/asciidoc-graphviz-sample.txt │ │ --rw-rw-r-- 0 root (0) root (0) 1765 2017-09-29 01:10:02.000000 asciidoc-8.6.10/filters/graphviz/graphviz-filter.conf │ │ --rwxrwxr-x 0 root (0) root (0) 5485 2017-09-29 01:10:02.000000 asciidoc-8.6.10/filters/graphviz/graphviz2png.py │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/filters/latex/ │ │ --rw-rw-r-- 0 root (0) root (0) 1611 2017-09-29 01:10:02.000000 asciidoc-8.6.10/filters/latex/latex-filter.conf │ │ --rwxrwxr-x 0 root (0) root (0) 7442 2017-09-29 01:10:02.000000 asciidoc-8.6.10/filters/latex/latex2img.py │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/filters/music/ │ │ --rw-rw-r-- 0 root (0) root (0) 1127 2017-09-29 01:10:02.000000 asciidoc-8.6.10/filters/music/music-filter-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 1233 2017-09-29 01:10:02.000000 asciidoc-8.6.10/filters/music/music-filter.conf │ │ --rwxrwxr-x 0 root (0) root (0) 6475 2017-09-29 01:10:02.000000 asciidoc-8.6.10/filters/music/music2png.py │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/filters/source/ │ │ --rw-rw-r-- 0 root (0) root (0) 527 2017-09-29 01:10:02.000000 asciidoc-8.6.10/filters/source/source-highlight-filter-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 5405 2017-09-29 01:10:02.000000 asciidoc-8.6.10/filters/source/source-highlight-filter.conf │ │ --rwxrwxr-x 0 root (0) root (0) 460 2017-09-29 01:10:02.000000 asciidoc-8.6.10/filters/unwraplatex.py │ │ --rw-rw-r-- 0 root (0) root (0) 10796 2017-09-29 01:10:02.000000 asciidoc-8.6.10/help.conf │ │ --rw-rw-r-- 0 root (0) root (0) 15442 2017-09-29 01:10:02.000000 asciidoc-8.6.10/html4.conf │ │ --rw-rw-r-- 0 root (0) root (0) 23167 2017-09-29 01:10:02.000000 asciidoc-8.6.10/html5.conf │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/ │ │ --rw-rw-r-- 0 root (0) root (0) 128142 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/highlighter.png │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/ │ │ --rw-rw-r-- 0 root (0) root (0) 226 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/README │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/callouts/ │ │ --rw-rw-r-- 0 root (0) root (0) 329 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/callouts/1.png │ │ --rw-rw-r-- 0 root (0) root (0) 361 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/callouts/10.png │ │ --rw-rw-r-- 0 root (0) root (0) 565 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/callouts/11.png │ │ --rw-rw-r-- 0 root (0) root (0) 617 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/callouts/12.png │ │ --rw-rw-r-- 0 root (0) root (0) 623 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/callouts/13.png │ │ --rw-rw-r-- 0 root (0) root (0) 411 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/callouts/14.png │ │ --rw-rw-r-- 0 root (0) root (0) 640 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/callouts/15.png │ │ --rw-rw-r-- 0 root (0) root (0) 353 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/callouts/2.png │ │ --rw-rw-r-- 0 root (0) root (0) 350 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/callouts/3.png │ │ --rw-rw-r-- 0 root (0) root (0) 345 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/callouts/4.png │ │ --rw-rw-r-- 0 root (0) root (0) 348 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/callouts/5.png │ │ --rw-rw-r-- 0 root (0) root (0) 355 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/callouts/6.png │ │ --rw-rw-r-- 0 root (0) root (0) 344 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/callouts/7.png │ │ --rw-rw-r-- 0 root (0) root (0) 357 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/callouts/8.png │ │ --rw-rw-r-- 0 root (0) root (0) 357 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/callouts/9.png │ │ --rw-rw-r-- 0 root (0) root (0) 2734 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/caution.png │ │ --rw-rw-r-- 0 root (0) root (0) 2599 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/example.png │ │ --rw-rw-r-- 0 root (0) root (0) 1340 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/home.png │ │ --rw-rw-r-- 0 root (0) root (0) 2980 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/important.png │ │ --rw-rw-r-- 0 root (0) root (0) 1302 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/next.png │ │ --rw-rw-r-- 0 root (0) root (0) 2494 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/note.png │ │ --rw-rw-r-- 0 root (0) root (0) 1348 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/prev.png │ │ --rw-rw-r-- 0 root (0) root (0) 2718 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/tip.png │ │ --rw-rw-r-- 0 root (0) root (0) 1320 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/up.png │ │ --rw-rw-r-- 0 root (0) root (0) 3214 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/icons/warning.png │ │ --rw-rw-r-- 0 root (0) root (0) 292 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/smallnew.png │ │ --rw-rw-r-- 0 root (0) root (0) 6515 2017-09-29 01:10:02.000000 asciidoc-8.6.10/images/tiger.png │ │ --rwxrwxr-x 0 root (0) root (0) 13998 2017-09-29 01:10:02.000000 asciidoc-8.6.10/install-sh │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/javascripts/ │ │ --rw-rw-r-- 0 root (0) root (0) 42470 2017-09-29 01:10:02.000000 asciidoc-8.6.10/javascripts/ASCIIMathML.js │ │ --rw-rw-r-- 0 root (0) root (0) 55545 2017-09-29 01:10:02.000000 asciidoc-8.6.10/javascripts/LaTeXMathML.js │ │ --rw-rw-r-- 0 root (0) root (0) 5826 2017-09-29 01:10:02.000000 asciidoc-8.6.10/javascripts/asciidoc.js │ │ --rw-rw-r-- 0 root (0) root (0) 77332 2017-09-29 01:10:02.000000 asciidoc-8.6.10/javascripts/slidy.js │ │ --rw-rw-r-- 0 root (0) root (0) 2366 2017-09-29 01:10:02.000000 asciidoc-8.6.10/javascripts/toc.js │ │ --rw-rw-r-- 0 root (0) root (0) 1288 2017-09-29 01:10:02.000000 asciidoc-8.6.10/lang-cs.conf │ │ --rw-rw-r-- 0 root (0) root (0) 1325 2017-09-29 01:10:02.000000 asciidoc-8.6.10/lang-de.conf │ │ --rw-rw-r-- 0 root (0) root (0) 1443 2017-09-29 01:10:02.000000 asciidoc-8.6.10/lang-el.conf │ │ --rw-rw-r-- 0 root (0) root (0) 1153 2017-09-29 01:10:02.000000 asciidoc-8.6.10/lang-en.conf │ │ --rw-rw-r-- 0 root (0) root (0) 1297 2017-09-29 01:10:02.000000 asciidoc-8.6.10/lang-es.conf │ │ --rw-rw-r-- 0 root (0) root (0) 1189 2017-09-29 01:10:02.000000 asciidoc-8.6.10/lang-fi.conf │ │ --rw-rw-r-- 0 root (0) root (0) 1306 2017-09-29 01:10:02.000000 asciidoc-8.6.10/lang-fr.conf │ │ --rw-rw-r-- 0 root (0) root (0) 1290 2017-09-29 01:10:02.000000 asciidoc-8.6.10/lang-hu.conf │ │ --rw-rw-r-- 0 root (0) root (0) 1166 2017-09-29 01:10:02.000000 asciidoc-8.6.10/lang-id.conf │ │ --rw-rw-r-- 0 root (0) root (0) 1230 2017-09-29 01:10:02.000000 asciidoc-8.6.10/lang-it.conf │ │ --rw-rw-r-- 0 root (0) root (0) 1294 2017-09-29 01:10:02.000000 asciidoc-8.6.10/lang-ja.conf │ │ --rw-rw-r-- 0 root (0) root (0) 1341 2017-09-29 01:10:02.000000 asciidoc-8.6.10/lang-nl.conf │ │ --rw-rw-r-- 0 root (0) root (0) 1313 2017-09-29 01:10:02.000000 asciidoc-8.6.10/lang-pl.conf │ │ --rw-rw-r-- 0 root (0) root (0) 1280 2017-09-29 01:10:02.000000 asciidoc-8.6.10/lang-pt-BR.conf │ │ --rw-rw-r-- 0 root (0) root (0) 1252 2017-09-29 01:10:02.000000 asciidoc-8.6.10/lang-ro.conf │ │ --rw-rw-r-- 0 root (0) root (0) 1520 2017-09-29 01:10:02.000000 asciidoc-8.6.10/lang-ru.conf │ │ --rw-rw-r-- 0 root (0) root (0) 1212 2017-09-29 01:10:02.000000 asciidoc-8.6.10/lang-sv.conf │ │ --rw-rw-r-- 0 root (0) root (0) 1487 2017-09-29 01:10:02.000000 asciidoc-8.6.10/lang-uk.conf │ │ --rw-rw-r-- 0 root (0) root (0) 20348 2017-09-29 01:10:02.000000 asciidoc-8.6.10/latex.conf │ │ --rw-rw-r-- 0 root (0) root (0) 2745 2017-09-29 01:10:02.000000 asciidoc-8.6.10/main.aap │ │ --rw-rw-r-- 0 root (0) root (0) 4866 2017-09-29 01:10:02.000000 asciidoc-8.6.10/slidy.conf │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/stylesheets/ │ │ --rw-rw-r-- 0 root (0) root (0) 9246 2017-09-29 01:10:02.000000 asciidoc-8.6.10/stylesheets/asciidoc.css │ │ --rw-rw-r-- 0 root (0) root (0) 5738 2017-09-29 01:10:02.000000 asciidoc-8.6.10/stylesheets/docbook-xsl.css │ │ --rw-rw-r-- 0 root (0) root (0) 3906 2017-09-29 01:10:02.000000 asciidoc-8.6.10/stylesheets/pygments.css │ │ --rw-rw-r-- 0 root (0) root (0) 9293 2017-09-29 01:10:02.000000 asciidoc-8.6.10/stylesheets/slidy.css │ │ --rw-rw-r-- 0 root (0) root (0) 537 2017-09-29 01:10:02.000000 asciidoc-8.6.10/stylesheets/toc2.css │ │ --rw-rw-r-- 0 root (0) root (0) 859 2017-09-29 01:10:02.000000 asciidoc-8.6.10/stylesheets/xhtml11-quirks.css │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/ │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/asciidocapi.py -> ../asciidocapi.py │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/ │ │ --rw-rw-r-- 0 root (0) root (0) 171 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/barchart.py │ │ --rw-rw-r-- 0 root (0) root (0) 365 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/deprecated-quotes.txt │ │ --rw-rw-r-- 0 root (0) root (0) 2492 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/filters-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 378 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-cs-man-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 2010 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-cs-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 383 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-de-man-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 2056 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-de-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 380 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-en-man-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 2168 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-en-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 380 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-es-man-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 2013 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-es-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 380 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-fr-man-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 2010 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-fr-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 386 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-hu-man-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 2010 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-hu-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 378 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-it-man-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 2010 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-it-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 406 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-ja-man-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 1891 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-ja-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 380 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-nl-man-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 1935 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-nl-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 384 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-pt-BR-man-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 2021 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-pt-BR-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 378 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-ro-man-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 2010 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-ro-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 379 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-ru-man-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 2150 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-ru-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 381 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-sv-man-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 2185 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-sv-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 379 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-uk-man-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 2129 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/lang-uk-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 1784 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/oldtables.txt │ │ --rw-rw-r-- 0 root (0) root (0) 1432 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/open-block-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 114 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/rcs-id-marker-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 192 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/testcases.conf │ │ --rw-rw-r-- 0 root (0) root (0) 17369 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/testcases.txt │ │ --rw-rw-r-- 0 root (0) root (0) 128 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/utf8-bom-test.txt │ │ --rw-rw-r-- 0 root (0) root (0) 13360 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/data/utf8-examples.txt │ │ --rw-rw-r-- 0 root (0) root (0) 14415 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/testasciidoc.conf │ │ --rwxrwxr-x 0 root (0) root (0) 14731 2017-09-29 01:10:02.000000 asciidoc-8.6.10/tests/testasciidoc.py │ │ --rw-rw-r-- 0 root (0) root (0) 438 2017-09-29 01:10:02.000000 asciidoc-8.6.10/text.conf │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/themes/ │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/themes/flask/ │ │ --rw-rw-r-- 0 root (0) root (0) 11240 2017-09-29 01:10:02.000000 asciidoc-8.6.10/themes/flask/flask.css │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/themes/volnitsky/ │ │ --rw-rw-r-- 0 root (0) root (0) 8042 2017-09-29 01:10:02.000000 asciidoc-8.6.10/themes/volnitsky/volnitsky.css │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/vim/ │ │ -drwxrwxr-x 0 root (0) root (0) 0 2017-09-29 01:10:02.000000 asciidoc-8.6.10/vim/syntax/ │ │ --rw-rw-r-- 0 root (0) root (0) 10858 2017-09-29 01:10:02.000000 asciidoc-8.6.10/vim/syntax/asciidoc.vim │ │ --rw-rw-r-- 0 root (0) root (0) 1940 2017-09-29 01:10:02.000000 asciidoc-8.6.10/xhtml11-quirks.conf │ │ --rw-rw-r-- 0 root (0) root (0) 22931 2017-09-29 01:10:02.000000 asciidoc-8.6.10/xhtml11.conf │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/ │ │ +-rw-rw-r-- 0 root (0) root (0) 174 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/.gitignore │ │ +-rw-rw-r-- 0 root (0) root (0) 537 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/.travis.yml │ │ +-rw-rw-r-- 0 root (0) root (0) 620 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/BUGS.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 153592 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/CHANGELOG.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 17982 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/COPYING │ │ +-rw-rw-r-- 0 root (0) root (0) 745 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/COPYRIGHT │ │ +-rw-rw-r-- 0 root (0) root (0) 7585 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/INSTALL.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 1744 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/MANIFEST │ │ +-rw-rw-r-- 0 root (0) root (0) 4546 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/Makefile.in │ │ +-rw-rw-r-- 0 root (0) root (0) 1502 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/README.asciidoc │ │ +-rwxrwxr-x 0 root (0) root (0) 37150 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/a2x.py │ │ +-rw-rw-r-- 0 root (0) root (0) 17757 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/asciidoc.conf │ │ +-rwxrwxr-x 0 root (0) root (0) 253937 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/asciidoc.py │ │ +-rw-rw-r-- 0 root (0) root (0) 9090 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/asciidocapi.py │ │ +-rw-rw-r-- 0 root (0) root (0) 127 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/common.aap │ │ +-rw-rw-r-- 0 root (0) root (0) 108 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/configure.ac │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/dblatex/ │ │ +-rw-rw-r-- 0 root (0) root (0) 696 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/dblatex/asciidoc-dblatex.sty │ │ +-rw-rw-r-- 0 root (0) root (0) 2335 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/dblatex/asciidoc-dblatex.xsl │ │ +-rw-rw-r-- 0 root (0) root (0) 1360 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/dblatex/dblatex-readme.txt │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/ │ │ +-rw-rw-r-- 0 root (0) root (0) 12611 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/a2x.1.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 2422 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/article-docinfo.xml │ │ +-rw-rw-r-- 0 root (0) root (0) 3593 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/article.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 7080 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/asciidoc.1.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 171 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/asciidoc.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 9211 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/asciidoc.dict │ │ +-rw-rw-r-- 0 root (0) root (0) 225247 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/asciidoc.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 6371 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/asciidocapi.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 2384 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/asciimathml.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 4628 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/book-multi.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 3708 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/book.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 819 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/customers.csv │ │ +-rw-rw-r-- 0 root (0) root (0) 7173 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/epub-notes.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 47516 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/faq.txt │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/images -> ../images │ │ +-rw-rw-r-- 0 root (0) root (0) 11540 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/latex-backend.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 4256 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/latex-bugs.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 7726 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/latex-filter.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 3744 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/latexmath.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 1341 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/latexmathml.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 8647 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/main.aap │ │ +-rw-rw-r-- 0 root (0) root (0) 5129 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/music-filter.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 13748 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/publishing-ebooks-with-asciidoc.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 4006 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/slidy-example.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 4083 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/slidy.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 7825 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/source-highlight-filter.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 8131 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/doc/testasciidoc.txt │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/docbook-xsl/ │ │ +-rw-rw-r-- 0 root (0) root (0) 2440 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/docbook-xsl/asciidoc-docbook-xsl.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 851 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/docbook-xsl/chunked.xsl │ │ +-rw-rw-r-- 0 root (0) root (0) 3716 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/docbook-xsl/common.xsl │ │ +-rw-rw-r-- 0 root (0) root (0) 1077 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/docbook-xsl/epub.xsl │ │ +-rw-rw-r-- 0 root (0) root (0) 5568 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/docbook-xsl/fo.xsl │ │ +-rw-rw-r-- 0 root (0) root (0) 998 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/docbook-xsl/htmlhelp.xsl │ │ +-rw-rw-r-- 0 root (0) root (0) 1100 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/docbook-xsl/manpage.xsl │ │ +-rw-rw-r-- 0 root (0) root (0) 1738 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/docbook-xsl/text.xsl │ │ +-rw-rw-r-- 0 root (0) root (0) 647 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/docbook-xsl/xhtml.xsl │ │ +-rw-rw-r-- 0 root (0) root (0) 23553 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/docbook45.conf │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/ │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/ │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/ASCIIMathML.js -> ../../javascripts/ASCIIMathML.js │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/CHANGELOG.txt -> ../../CHANGELOG.txt │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/INSTALL.txt -> ../../INSTALL.txt │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/LaTeXMathML.js -> ../../javascripts/LaTeXMathML.js │ │ +-rw-rw-r-- 0 root (0) root (0) 1035 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/README-website.txt │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/README.txt -> ../../README.asciidoc │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/a2x.1.txt -> ../../doc/a2x.1.txt │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/asciidoc-docbook-xsl.txt -> ../../docbook-xsl/asciidoc-docbook-xsl.txt │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/asciidoc-graphviz-sample.txt -> ../../filters/graphviz/asciidoc-graphviz-sample.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 1887 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/asciidoc-website.dict │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/asciidoc.css -> ../../stylesheets/asciidoc.css │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/asciidoc.js -> ../../javascripts/asciidoc.js │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/asciidocapi.txt -> ../../doc/asciidocapi.txt │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/asciimathml.txt -> ../../doc/asciimathml.txt │ │ +-rwxrwxr-x 0 root (0) root (0) 838 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/build-website.sh │ │ +-rw-rw-r-- 0 root (0) root (0) 819 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/customers.csv │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/epub-notes.txt -> ../../doc/epub-notes.txt │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/faq.txt -> ../../doc/faq.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 1150 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/favicon.ico │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/images -> ../../images │ │ +-rw-rw-r-- 0 root (0) root (0) 22897 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/index.txt │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/latex-backend.txt -> ../../doc/latex-backend.txt │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/latex-bugs.txt -> ../../doc/latex-bugs.txt │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/latex-filter.txt -> ../../doc/latex-filter.txt │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/latexmathml.txt -> ../../doc/latexmathml.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 5292 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/layout1.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 1135 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/layout1.css │ │ +-rw-rw-r-- 0 root (0) root (0) 5373 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/layout2.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 1443 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/layout2.css │ │ +-rw-rw-r-- 0 root (0) root (0) 4508 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/main.aap │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/manpage.txt -> ../../doc/asciidoc.1.txt │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/music-filter.txt -> ../../doc/music-filter.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 1662 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/newlists.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 19480 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/newtables.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 2760 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/plugins.txt │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/publishing-ebooks-with-asciidoc.txt -> ../../doc/publishing-ebooks-with-asciidoc.txt │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/slidy-example.txt -> ../../doc/slidy-example.txt │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/slidy.txt -> ../../doc/slidy.txt │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/source-highlight-filter.txt -> ../../doc/source-highlight-filter.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 138 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/support.txt │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/testasciidoc.txt -> ../../doc/testasciidoc.txt │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/userguide.txt -> ../../doc/asciidoc.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 1683 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/version83.txt │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/examples/website/xhtml11-quirks.css -> ../../stylesheets/xhtml11-quirks.css │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/filters/ │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/filters/code/ │ │ +-rw-rw-r-- 0 root (0) root (0) 869 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/filters/code/code-filter-readme.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 393 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/filters/code/code-filter-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 262 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/filters/code/code-filter.conf │ │ +-rwxrwxr-x 0 root (0) root (0) 7591 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/filters/code/code-filter.py │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/filters/graphviz/ │ │ +-rw-rw-r-- 0 root (0) root (0) 6051 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/filters/graphviz/asciidoc-graphviz-sample.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 1765 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/filters/graphviz/graphviz-filter.conf │ │ +-rwxrwxr-x 0 root (0) root (0) 5492 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/filters/graphviz/graphviz2png.py │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/filters/latex/ │ │ +-rw-rw-r-- 0 root (0) root (0) 1611 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/filters/latex/latex-filter.conf │ │ +-rwxrwxr-x 0 root (0) root (0) 7340 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/filters/latex/latex2img.py │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/filters/music/ │ │ +-rw-rw-r-- 0 root (0) root (0) 1127 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/filters/music/music-filter-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 1233 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/filters/music/music-filter.conf │ │ +-rwxrwxr-x 0 root (0) root (0) 6371 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/filters/music/music2png.py │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/filters/source/ │ │ +-rw-rw-r-- 0 root (0) root (0) 527 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/filters/source/source-highlight-filter-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 5405 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/filters/source/source-highlight-filter.conf │ │ +-rwxrwxr-x 0 root (0) root (0) 460 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/filters/unwraplatex.py │ │ +-rw-rw-r-- 0 root (0) root (0) 10796 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/help.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 15488 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/html4.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 23213 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/html5.conf │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/ │ │ +-rw-rw-r-- 0 root (0) root (0) 128142 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/highlighter.png │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/ │ │ +-rw-rw-r-- 0 root (0) root (0) 226 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/README │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/callouts/ │ │ +-rw-rw-r-- 0 root (0) root (0) 329 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/callouts/1.png │ │ +-rw-rw-r-- 0 root (0) root (0) 361 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/callouts/10.png │ │ +-rw-rw-r-- 0 root (0) root (0) 565 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/callouts/11.png │ │ +-rw-rw-r-- 0 root (0) root (0) 617 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/callouts/12.png │ │ +-rw-rw-r-- 0 root (0) root (0) 623 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/callouts/13.png │ │ +-rw-rw-r-- 0 root (0) root (0) 411 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/callouts/14.png │ │ +-rw-rw-r-- 0 root (0) root (0) 640 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/callouts/15.png │ │ +-rw-rw-r-- 0 root (0) root (0) 353 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/callouts/2.png │ │ +-rw-rw-r-- 0 root (0) root (0) 350 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/callouts/3.png │ │ +-rw-rw-r-- 0 root (0) root (0) 345 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/callouts/4.png │ │ +-rw-rw-r-- 0 root (0) root (0) 348 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/callouts/5.png │ │ +-rw-rw-r-- 0 root (0) root (0) 355 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/callouts/6.png │ │ +-rw-rw-r-- 0 root (0) root (0) 344 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/callouts/7.png │ │ +-rw-rw-r-- 0 root (0) root (0) 357 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/callouts/8.png │ │ +-rw-rw-r-- 0 root (0) root (0) 357 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/callouts/9.png │ │ +-rw-rw-r-- 0 root (0) root (0) 2734 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/caution.png │ │ +-rw-rw-r-- 0 root (0) root (0) 2599 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/example.png │ │ +-rw-rw-r-- 0 root (0) root (0) 1340 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/home.png │ │ +-rw-rw-r-- 0 root (0) root (0) 2980 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/important.png │ │ +-rw-rw-r-- 0 root (0) root (0) 1302 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/next.png │ │ +-rw-rw-r-- 0 root (0) root (0) 2494 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/note.png │ │ +-rw-rw-r-- 0 root (0) root (0) 1348 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/prev.png │ │ +-rw-rw-r-- 0 root (0) root (0) 2718 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/tip.png │ │ +-rw-rw-r-- 0 root (0) root (0) 1320 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/up.png │ │ +-rw-rw-r-- 0 root (0) root (0) 3214 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/icons/warning.png │ │ +-rw-rw-r-- 0 root (0) root (0) 292 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/smallnew.png │ │ +-rw-rw-r-- 0 root (0) root (0) 6515 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/images/tiger.png │ │ +-rwxrwxr-x 0 root (0) root (0) 13998 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/install-sh │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/javascripts/ │ │ +-rw-rw-r-- 0 root (0) root (0) 42470 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/javascripts/ASCIIMathML.js │ │ +-rw-rw-r-- 0 root (0) root (0) 55545 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/javascripts/LaTeXMathML.js │ │ +-rw-rw-r-- 0 root (0) root (0) 5826 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/javascripts/asciidoc.js │ │ +-rw-rw-r-- 0 root (0) root (0) 77332 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/javascripts/slidy.js │ │ +-rw-rw-r-- 0 root (0) root (0) 2366 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/javascripts/toc.js │ │ +-rw-rw-r-- 0 root (0) root (0) 1288 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/lang-cs.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 1325 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/lang-de.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 1443 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/lang-el.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 1153 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/lang-en.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 1297 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/lang-es.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 1189 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/lang-fi.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 1306 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/lang-fr.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 1290 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/lang-hu.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 1166 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/lang-id.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 1230 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/lang-it.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 1294 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/lang-ja.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 1341 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/lang-nl.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 1313 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/lang-pl.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 1280 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/lang-pt-BR.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 1252 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/lang-ro.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 1520 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/lang-ru.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 1212 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/lang-sv.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 1487 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/lang-uk.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 20348 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/latex.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 2745 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/main.aap │ │ +-rw-rw-r-- 0 root (0) root (0) 4866 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/slidy.conf │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/stylesheets/ │ │ +-rw-rw-r-- 0 root (0) root (0) 9246 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/stylesheets/asciidoc.css │ │ +-rw-rw-r-- 0 root (0) root (0) 5738 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/stylesheets/docbook-xsl.css │ │ +-rw-rw-r-- 0 root (0) root (0) 3906 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/stylesheets/pygments.css │ │ +-rw-rw-r-- 0 root (0) root (0) 9293 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/stylesheets/slidy.css │ │ +-rw-rw-r-- 0 root (0) root (0) 537 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/stylesheets/toc2.css │ │ +-rw-rw-r-- 0 root (0) root (0) 859 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/stylesheets/xhtml11-quirks.css │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/ │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/asciidocapi.py -> ../asciidocapi.py │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/ │ │ +-rw-rw-r-- 0 root (0) root (0) 171 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/barchart.py │ │ +-rw-rw-r-- 0 root (0) root (0) 365 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/deprecated-quotes.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 2492 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/filters-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 378 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-cs-man-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 2010 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-cs-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 383 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-de-man-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 2056 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-de-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 380 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-en-man-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 2168 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-en-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 380 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-es-man-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 2013 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-es-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 380 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-fr-man-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 2010 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-fr-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 386 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-hu-man-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 2010 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-hu-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 378 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-it-man-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 2010 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-it-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 406 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-ja-man-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 1891 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-ja-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 380 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-nl-man-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 1935 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-nl-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 384 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-pt-BR-man-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 2021 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-pt-BR-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 378 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-ro-man-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 2010 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-ro-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 379 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-ru-man-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 2150 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-ru-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 381 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-sv-man-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 2185 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-sv-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 379 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-uk-man-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 2129 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/lang-uk-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 1784 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/oldtables.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 1432 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/open-block-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 114 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/rcs-id-marker-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 192 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/testcases.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 17369 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/testcases.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 128 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/utf8-bom-test.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 13360 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/data/utf8-examples.txt │ │ +-rw-rw-r-- 0 root (0) root (0) 14415 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/testasciidoc.conf │ │ +-rwxrwxr-x 0 root (0) root (0) 14662 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/tests/testasciidoc.py │ │ +-rw-rw-r-- 0 root (0) root (0) 438 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/text.conf │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/themes/ │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/themes/flask/ │ │ +-rw-rw-r-- 0 root (0) root (0) 11240 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/themes/flask/flask.css │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/themes/volnitsky/ │ │ +-rw-rw-r-- 0 root (0) root (0) 8042 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/themes/volnitsky/volnitsky.css │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/vim/ │ │ +drwxrwxr-x 0 root (0) root (0) 0 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/vim/syntax/ │ │ +-rw-rw-r-- 0 root (0) root (0) 10858 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/vim/syntax/asciidoc.vim │ │ +-rw-rw-r-- 0 root (0) root (0) 1940 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/xhtml11-quirks.conf │ │ +-rw-rw-r-- 0 root (0) root (0) 22957 2018-05-26 01:08:44.000000 asciidoc-py-8.6.10/xhtml11.conf │ │ --- asciidoc-8.6.10/.travis.yml │ ├── +++ asciidoc-py-8.6.10/.travis.yml │ │┄ Files 3% similar despite different names │ │ @@ -1,11 +1,12 @@ │ │ language: python │ │ python: │ │ - - 2.6 │ │ - - 2.7 │ │ + - 3.4 │ │ + - 3.5 │ │ + - 3.6 │ │ install: │ │ # 12.04 LTS ships an outdated texlive https://launchpad.net/bugs/712521 │ │ - sudo add-apt-repository --yes ppa:texlive-backports/ppa │ │ - sudo apt-get update -yq2 │ │ - sudo apt-get install -yq2 --no-install-recommends dvipng graphviz imagemagick lilypond source-highlight texlive-latex-base │ │ script: │ │ - time python tests/testasciidoc.py update │ │ --- asciidoc-8.6.10/BUGS.txt │ ├── +++ asciidoc-py-8.6.10/BUGS.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/CHANGELOG.txt │ ├── +++ asciidoc-py-8.6.10/CHANGELOG.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/COPYING │ ├── +++ asciidoc-py-8.6.10/COPYING │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/COPYRIGHT │ ├── +++ asciidoc-py-8.6.10/COPYRIGHT │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/INSTALL.txt │ ├── +++ asciidoc-py-8.6.10/INSTALL.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/MANIFEST │ ├── +++ asciidoc-py-8.6.10/MANIFEST │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/Makefile.in │ ├── +++ asciidoc-py-8.6.10/Makefile.in │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/README.asciidoc │ ├── +++ asciidoc-py-8.6.10/README.asciidoc │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/a2x.py │ ├── +++ asciidoc-py-8.6.10/a2x.py │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/asciidoc.conf │ ├── +++ asciidoc-py-8.6.10/asciidoc.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/asciidoc.py │ ├── +++ asciidoc-py-8.6.10/asciidoc.py │ │┄ Files 2% similar despite different names │ │ @@ -1,8 +1,8 @@ │ │ -#!/usr/bin/env python2 │ │ +#!/usr/bin/env python3 │ │ """ │ │ 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). │ │ """ │ │ │ │ @@ -58,15 +58,15 @@ │ │ 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()) │ │ + return list(zip(self._keys, list(self.values()))) │ │ def keys(self): │ │ return self._keys │ │ def popitem(self): │ │ try: │ │ key = self._keys[-1] │ │ except IndexError: │ │ raise KeyError('dictionary is empty') │ │ @@ -76,39 +76,39 @@ │ │ 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(): │ │ + for key in list(d.keys()): │ │ if key not in self._keys: self._keys.append(key) │ │ def values(self): │ │ - return map(self.get, self._keys) │ │ + return list(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 │ │ + except KeyError as k: raise AttributeError(k) │ │ def __repr__(self): │ │ return '' │ │ def __getstate__(self): │ │ return dict(self) │ │ def __setstate__(self,value): │ │ - for k,v in value.items(): self[k]=v │ │ + for k,v in list(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): │ │ @@ -116,15 +116,15 @@ │ │ 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(): │ │ + for k,v in list(dict.items()): │ │ self[k] = v │ │ def setdefault(self, key, default = None): │ │ return dict.setdefault(self, key.lower(), default) │ │ │ │ │ │ class Trace(object): │ │ """ │ │ @@ -173,15 +173,15 @@ │ │ # 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 │ │ + 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)) │ │ @@ -213,15 +213,15 @@ │ │ """ │ │ 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) │ │ + 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) │ │ @@ -286,15 +286,15 @@ │ │ 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(): │ │ + for a,v in list(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] == '"': │ │ @@ -418,21 +418,21 @@ │ │ """ │ │ 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): │ │ + if isinstance(node_or_string, str): │ │ 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)): │ │ + (str, int, float, 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 │ │ @@ -501,29 +501,29 @@ │ │ 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(): │ │ + for v in list(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 = ['"' + x.strip() + '"' for x in 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. │ │ + for k in list(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. │ │ @@ -543,27 +543,27 @@ │ │ │ │ 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 │ │ + 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) │ │ + 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() │ │ │ │ @@ -571,15 +571,15 @@ │ │ """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() │ │ + keys = list(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 │ │ @@ -628,15 +628,15 @@ │ │ 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 │ │ + 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 ''. │ │ @@ -676,34 +676,34 @@ │ │ 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(): │ │ + for k,v in list(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 │ │ + 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(): │ │ + for k,v in list(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+'"' │ │ @@ -715,17 +715,17 @@ │ │ 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(): │ │ + for k,v in list(dict.items()): │ │ if not is_name(k): │ │ - raise EAsciiDoc,'illegal attribute name: %s' % 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: │ │ Return True if single attrbiute is defined. │ │ @@ -815,17 +815,17 @@ │ │ # 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] │ │ + output = str(p.communicate(os.linesep.join(lines).encode("utf-8"))[0]) │ │ except Exception: │ │ - raise EAsciiDoc,'filter error: %s: %s' % (filter_cmd, sys.exc_info()[1]) │ │ + 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' % │ │ @@ -903,15 +903,15 @@ │ │ try: │ │ lines = [s.rstrip() for s in f] │ │ finally: │ │ f.close() │ │ else: │ │ lines = [] │ │ except Exception: │ │ - raise EAsciiDoc,'%s: temp file read error' % syntax │ │ + 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[^:]*?)(:(?P.*))?$', args) │ │ attr = mo.group('attr') │ │ @@ -1036,19 +1036,19 @@ │ │ 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(): │ │ + for k,v in list(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(): │ │ + for k,v in list(dictionary.items()): │ │ if v is None: │ │ del dictionary[k] │ │ else: │ │ v = subs_attrs(str(v)) │ │ if v is None: │ │ del dictionary[k] │ │ else: │ │ @@ -1216,61 +1216,29 @@ │ │ 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 │ │ + width = 0 │ │ + for c in s: │ │ + width += east_asian_widths[unicodedata.east_asian_width(c)] │ │ + return width │ │ │ │ def date_time_str(t): │ │ """Convert seconds since the Epoch to formatted local date and time strings.""" │ │ source_date_epoch = os.environ.get('SOURCE_DATE_EPOCH') │ │ if source_date_epoch is not None: │ │ t = time.gmtime(min(t, int(source_date_epoch))) │ │ else: │ │ @@ -1281,28 +1249,32 @@ │ │ time_str += ' UTC' │ │ elif time.daylight and t.tm_isdst == 1: │ │ time_str += ' ' + time.tzname[1] │ │ else: │ │ time_str += ' ' + time.tzname[0] │ │ # Attempt to convert the localtime to the output encoding. │ │ try: │ │ - time_str = char_encode(time_str.decode(locale.getdefaultlocale()[1])) │ │ + time_str = time_str.decode(locale.getdefaultlocale()[1]) │ │ except Exception: │ │ pass │ │ return date_str, time_str │ │ │ │ │ │ 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' │ │ + raise AssertionError('no class instances allowed') │ │ + │ │ + def __iter__(self): │ │ + return self │ │ + │ │ @staticmethod │ │ - def next(): │ │ + def next_element(): │ │ """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 │ │ @@ -1328,15 +1300,15 @@ │ │ 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' │ │ + raise EAsciiDoc('paragraph expected') │ │ result = paragraphs.current │ │ # Optimization: Cache answer. │ │ Lex.prev_cursor = reader.cursor │ │ Lex.prev_element = result │ │ return result │ │ │ │ @staticmethod │ │ @@ -1372,15 +1344,15 @@ │ │ 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 │ │ + raise EAsciiDoc('illegal substitution option: %s' % o) │ │ trace(o, s, result) │ │ if not result: │ │ break │ │ return result │ │ │ │ @staticmethod │ │ def subs(lines,options): │ │ @@ -1609,21 +1581,21 @@ │ │ # 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: │ │ + if Lex.next_element() 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): │ │ + if not isinstance(Lex.next_element(),Paragraph): │ │ message.error('malformed name section body') │ │ lines = reader.read_until(r'^$') │ │ s = ' '.join(lines) │ │ mo = re.match(r'^(?P.*?)\s+-\s+(?P.*)$',s) │ │ if not mo: │ │ message.error('malformed name section body') │ │ self.attributes['manname'] = mo.group('manname').strip() │ │ @@ -1641,32 +1613,32 @@ │ │ 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: │ │ + if Lex.next_element() 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: │ │ + if Lex.next_element() is not Title: │ │ Section.translate_body() │ │ # Process remaining sections. │ │ while not reader.eof(): │ │ - if Lex.next() is not Title: │ │ - raise EAsciiDoc,'section title expected' │ │ + if Lex.next_element() 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): │ │ @@ -1718,17 +1690,16 @@ │ │ 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() │ │ + initials = (firstname[:1] + middlename[:1] + lastname[:1]) │ │ + initials = 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: │ │ @@ -1746,18 +1717,18 @@ │ │ │ │ │ │ class Header: │ │ """Static methods and attributes only.""" │ │ REV_LINE_RE = r'^(\D*(?P.*?),)?(?P.*?)(:\s*(?P.*))?$' │ │ RCS_ID_RE = r'^\$Id: \S+ (?P\S+) (?P\S+) \S+ (?P\S+) (\S+ )?\$$' │ │ def __init__(self): │ │ - raise AssertionError,'no class instances allowed' │ │ + raise AssertionError('no class instances allowed') │ │ @staticmethod │ │ def parse(): │ │ - assert Lex.next() is Title and Title.level == 0 │ │ + assert Lex.next_element() 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 │ │ @@ -1829,15 +1800,15 @@ │ │ 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' │ │ + 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") │ │ @@ -1851,15 +1822,15 @@ │ │ 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 │ │ + assert Lex.next_element() 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. │ │ @@ -1911,15 +1882,15 @@ │ │ │ │ class AttributeList: │ │ """Static methods and attributes only.""" │ │ pattern = None │ │ match = None │ │ attrs = {} │ │ def __init__(self): │ │ - raise AssertionError,'no class instances allowed' │ │ + 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(): │ │ @@ -1929,33 +1900,33 @@ │ │ mo = re.match(AttributeList.pattern, line) │ │ if mo: │ │ AttributeList.match = mo │ │ result = True │ │ return result │ │ @staticmethod │ │ def translate(): │ │ - assert Lex.next() is AttributeList │ │ + assert Lex.next_element() is AttributeList │ │ reader.read() # Discard attribute list from reader. │ │ attrs = {} │ │ d = AttributeList.match.groupdict() │ │ - for k,v in d.items(): │ │ + for k,v in list(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(): │ │ + for k,v in list(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={}): │ │ @@ -1970,28 +1941,28 @@ │ │ d[option+'-option'] = '' │ │ │ │ class BlockTitle: │ │ """Static methods and attributes only.""" │ │ title = None │ │ pattern = None │ │ def __init__(self): │ │ - raise AssertionError,'no class instances allowed' │ │ + 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 │ │ + assert Lex.next_element() 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: │ │ @@ -2014,20 +1985,20 @@ │ │ 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' │ │ + 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) │ │ + assert Lex.next_element() 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 │ │ @@ -2065,25 +2036,25 @@ │ │ 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) │ │ + ul_len = 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)): │ │ + or (ul_len-3 < len(title) < ul_len+3)): │ │ return False │ │ # Check for valid repetition of underline character pairs. │ │ - s = ul[:2]*((ul_len+1)/2) │ │ + 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() │ │ @@ -2091,15 +2062,15 @@ │ │ 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 group') │ │ Title.attributes['title'] = lines[0] │ │ - for k,v in Title.attributes.items(): │ │ + for k,v in list(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 │ │ @@ -2107,44 +2078,44 @@ │ │ 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 │ │ + raise EAsciiDoc(errmsg) │ │ if len(underlines) != len(Title.underlines): │ │ - raise EAsciiDoc,errmsg │ │ + raise EAsciiDoc(errmsg) │ │ for s in underlines: │ │ if len(s) !=2: │ │ - raise EAsciiDoc,errmsg │ │ + 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' │ │ + 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' │ │ + 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 │ │ + 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) │ │ @@ -2158,15 +2129,15 @@ │ │ """ │ │ 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(): │ │ + for pat,sect in list(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() │ │ @@ -2197,15 +2168,15 @@ │ │ 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 │ │ + assert Lex.next_element() 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') │ │ @@ -2214,15 +2185,15 @@ │ │ │ │ │ │ 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' │ │ + 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.""" │ │ @@ -2237,24 +2208,23 @@ │ │ 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() │ │ + base_id = re.sub(r'(?u)\W+', '_', 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 │ │ + base_id = idprefix + str(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: │ │ @@ -2267,15 +2237,15 @@ │ │ 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 │ │ + assert Lex.next_element() 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', \ │ │ @@ -2304,20 +2274,20 @@ │ │ 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() │ │ + next = Lex.next_element() │ │ 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() │ │ + next = Lex.next_element() │ │ 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': │ │ @@ -2384,20 +2354,20 @@ │ │ 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(): │ │ + for k,v in list(src.items()): │ │ if not re.match(r'\d+',k) and not is_name(k): │ │ - raise EAsciiDoc, msg % (k,v) │ │ + raise EAsciiDoc(msg % (k,v)) │ │ if k == 'template': │ │ if not is_name(v): │ │ - raise EAsciiDoc, msg % (k,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. │ │ @@ -2409,34 +2379,34 @@ │ │ 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) │ │ + raise EAsciiDoc(msg % (k,v)) │ │ elif k == 'style': │ │ if is_name(v): │ │ copy(dst,k,v) │ │ else: │ │ - raise EAsciiDoc, msg % (k,v) │ │ + 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) │ │ + raise EAsciiDoc(msg % (k,v)) │ │ style = mo.group('style') │ │ if not is_name(style): │ │ - raise EAsciiDoc, msg % (k,v) │ │ + raise EAsciiDoc(msg % (k,v)) │ │ d = {} │ │ if not parse_named_attributes(v,d): │ │ - raise EAsciiDoc, msg % (k,v) │ │ + 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. │ │ @@ -2478,32 +2448,32 @@ │ │ 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(): │ │ + for style,d in list(self.styles.items()): │ │ s = '' │ │ - for k,v in d.items(): s += '%s=%r,' % (k,v) │ │ + for k,v in list(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 │ │ + raise EAsciiDoc('[%s] missing delimiter' % self.defname) │ │ if self.style: │ │ if not is_name(self.style): │ │ - raise EAsciiDoc, 'illegal style name: %s' % 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())) │ │ + self.defname,self.style,list(self.styles.keys()))) │ │ # Check all styles for missing templates. │ │ all_styles_have_template = True │ │ - for k,v in self.styles.items(): │ │ + for k,v in list(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 │ │ @@ -2621,15 +2591,15 @@ │ │ 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(): │ │ + for k,v in list(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 │ │ @@ -2650,28 +2620,28 @@ │ │ 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(): │ │ + for k in list(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)) │ │ + except EAsciiDoc as 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 │ │ @@ -2753,15 +2723,15 @@ │ │ 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]' │ │ + 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') │ │ @@ -2784,15 +2754,15 @@ │ │ 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] │ │ + tags += [s['tags'] for s in list(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') │ │ @@ -2802,15 +2772,15 @@ │ │ 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: │ │ + while Lex.next_element() 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() │ │ @@ -2826,21 +2796,21 @@ │ │ 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): │ │ + while Lex.next_element() in (BlockTitle,AttributeList): │ │ # Consume continued element title and attributes. │ │ - Lex.next().translate() │ │ + Lex.next_element().translate() │ │ if not continuation and BlockTitle.title: │ │ # Titled elements terminate the list. │ │ break │ │ - next = Lex.next() │ │ + next = Lex.next_element() │ │ 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: │ │ @@ -2917,15 +2887,15 @@ │ │ (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()) │ │ + missing = tags.difference(list(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) │ │ @@ -2958,26 +2928,26 @@ │ │ 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: │ │ + while Lex.next_element() 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 │ │ + 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): │ │ @@ -3007,38 +2977,38 @@ │ │ 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(): │ │ + for section in list(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(): │ │ + for k in list(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 │ │ + raise EAsciiDoc('[%s] illegal type' % b.defname) │ │ b.validate() │ │ def dump(self): │ │ AbstractBlocks.dump(self) │ │ - for k,v in self.tags.items(): │ │ + for k,v in list(self.tags.items()): │ │ dump_section('listtags-'+k, v) │ │ │ │ │ │ class DelimitedBlock(AbstractBlock): │ │ def __init__(self): │ │ AbstractBlock.__init__(self) │ │ def load(self,name,entries): │ │ @@ -3194,15 +3164,15 @@ │ │ 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] │ │ + tags += [s['tags'] for s in list(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 │ │ @@ -3215,15 +3185,15 @@ │ │ """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(): │ │ + for k,v in list(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: │ │ @@ -3260,15 +3230,15 @@ │ │ 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 = list(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 │ │ @@ -3515,18 +3485,18 @@ │ │ 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 io │ │ import csv │ │ rows = [] │ │ - rdr = csv.reader(StringIO.StringIO('\r\n'.join(text)), │ │ + rdr = csv.reader(io.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 │ │ @@ -3672,71 +3642,71 @@ │ │ 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(): │ │ + for section in list(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(): │ │ + for k in list(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]' │ │ + 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]' │ │ + 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(): │ │ + raise EAsciiDoc('missing [tabletags-default] entry: %s' % tag) │ │ + for t in list(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(): │ │ + for t in list(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(): │ │ + for k,v in list(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): │ │ @@ -3862,25 +3832,25 @@ │ │ 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] │ │ + 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 │ │ + 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) │ │ @@ -3894,15 +3864,15 @@ │ │ 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(): │ │ + for k,v in list(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 '' │ │ @@ -4062,15 +4032,15 @@ │ │ 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(): │ │ + for listindex in list(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. │ │ #--------------------------------------------------------------------------- │ │ @@ -4101,15 +4071,15 @@ │ │ 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.f = open(fname,'r') │ │ 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. │ │ @@ -4196,28 +4166,28 @@ │ │ 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' │ │ + raise ValueError('not >= 0') │ │ self.tabsize = val │ │ except ValueError: │ │ - raise EAsciiDoc, 'illegal include macro tabsize argument' │ │ + 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' │ │ + raise ValueError('not >= 1') │ │ self.max_depth = self.current_depth + val │ │ except ValueError: │ │ - raise EAsciiDoc, "include macro: illegal 'depth' argument" │ │ + 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): │ │ @@ -4260,81 +4230,81 @@ │ │ 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 │ │ + 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 │ │ + 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 │ │ + raise EAsciiDoc('mismatched macro: %s' % result) │ │ else: │ │ if name in ('ifdef','ifndef'): │ │ if not target: │ │ - raise EAsciiDoc,'missing macro target: %s' % result │ │ + 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 │ │ + 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 │ │ + 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' │ │ + raise EAsciiDoc('ifeval invalid safe document') │ │ if not attrlist: │ │ - raise EAsciiDoc,'missing ifeval condition: %s' % result │ │ + 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)) │ │ + except Exception as 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 │ │ @@ -4392,15 +4362,15 @@ │ │ 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): │ │ + if isinstance(terminators,str): │ │ 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]: │ │ @@ -4425,15 +4395,15 @@ │ │ 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+') │ │ + self.f = open(fname,'w+') │ │ 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() │ │ @@ -4480,22 +4450,22 @@ │ │ #--------------------------------------------------------------------------- │ │ 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 │ │ + 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(): │ │ + for k,v in list(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: │ │ @@ -4615,15 +4585,15 @@ │ │ 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) │ │ + found = reo.findall(str(s)) │ │ if found: │ │ update_section(section) # Store previous section. │ │ section = found[0].lower() │ │ contents = [] │ │ else: │ │ contents.append(s) │ │ update_section(section) # Store last section. │ │ @@ -4645,22 +4615,22 @@ │ │ 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 k in list(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(): │ │ + for k,v in list(sections.items()): │ │ if k.startswith('+'): │ │ # Append section. │ │ k = k[1:] │ │ if k in self.sections: │ │ self.sections[k] += v │ │ else: │ │ self.sections[k] = v │ │ @@ -4810,27 +4780,27 @@ │ │ def load_miscellaneous(self,d): │ │ """Set miscellaneous configuration entries from dictionary 'd'.""" │ │ def set_if_int_ge(name, d, min_value): │ │ if name in d: │ │ try: │ │ val = int(d[name]) │ │ if not val >= min_value: │ │ - raise ValueError, "not >= " + str(min_value) │ │ + raise ValueError("not >= " + str(min_value)) │ │ setattr(self, name, val) │ │ except ValueError: │ │ - raise EAsciiDoc, 'illegal [miscellaneous] %s entry' % name │ │ + raise EAsciiDoc('illegal [miscellaneous] %s entry' % name) │ │ set_if_int_ge('tabsize', d, 0) │ │ set_if_int_ge('textwidth', d, 1) # DEPRECATED: Old tables only. │ │ │ │ if 'pagewidth' in d: │ │ try: │ │ val = float(d['pagewidth']) │ │ self.pagewidth = val │ │ except ValueError: │ │ - raise EAsciiDoc, 'illegal [miscellaneous] pagewidth entry' │ │ + 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. │ │ @@ -4846,38 +4816,38 @@ │ │ │ │ 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' │ │ + raise EAsciiDoc('incomplete configuration files') │ │ # Check special characters are only one character long. │ │ - for k in self.specialchars.keys(): │ │ + for k in list(self.specialchars.keys()): │ │ if len(k) != 1: │ │ - raise EAsciiDoc,'[specialcharacters] ' \ │ │ - 'must be a single character: %s' % k │ │ + 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(): │ │ + for macro in list(self.specialwords.values()): │ │ if not is_name(macro): │ │ - raise EAsciiDoc,'illegal special word name: %s' % 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()[:]: │ │ + for q in list(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(): │ │ + for k,v in list(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() │ │ @@ -4914,36 +4884,36 @@ │ │ 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(): │ │ + for k,v in list(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(): │ │ + for k,v in list(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(): │ │ + for k in list(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): │ │ @@ -4956,34 +4926,34 @@ │ │ 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(): │ │ + for k,v in list(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 │ │ + 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 │ │ + 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) │ │ @@ -4993,33 +4963,33 @@ │ │ │ │ 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(): │ │ + for pat,sectname in list(d.items()): │ │ pat = strip_quotes(pat) │ │ if not is_re(pat): │ │ - raise EAsciiDoc,'[specialsections] entry ' \ │ │ - 'is not a valid regular expression: %s' % 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(): │ │ + for pat,rep in list(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) │ │ + 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 │ │ @@ -5029,43 +4999,43 @@ │ │ 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(): │ │ + for pat,rep in list(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) │ │ + 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) │ │ + 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(): │ │ + for k,v in list(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 ' \ │ │ + raise EAsciiDoc('[specialwords] entry in %s ' \ │ │ 'is not a valid regular expression: %s' \ │ │ - % (self.fname,word) │ │ + % (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 │ │ @@ -5074,23 +5044,23 @@ │ │ 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(): │ │ + for k,v in list(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(): │ │ + for word in list(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: │ │ @@ -5103,15 +5073,15 @@ │ │ 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(): │ │ + for k,v in list(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.""" │ │ @@ -5145,16 +5115,16 @@ │ │ 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) │ │ + stag = [x.replace(chr(0), title) for x in stag] │ │ + etag = [x.replace(chr(0), title) for x in etag] │ │ d['title'] = title │ │ return (stag,etag) │ │ │ │ │ │ #--------------------------------------------------------------------------- │ │ # Deprecated old table classes follow. │ │ # Naming convention is an _OLD name suffix. │ │ @@ -5213,25 +5183,25 @@ │ │ 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(): │ │ + for k,v in list(entries.items()): │ │ if k == 'fillchar': │ │ if v and len(v) == 1: │ │ self.fillchar = v │ │ else: │ │ - raise EAsciiDoc,'malformed table fillchar: %s' % v │ │ + 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 │ │ + 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': │ │ @@ -5322,21 +5292,21 @@ │ │ s = re.sub(fc+r'+$','',s) │ │ if s == '': │ │ c.rulerwidth = None │ │ else: │ │ try: │ │ val = int(s) │ │ if not val > 0: │ │ - raise ValueError, 'not > 0' │ │ + raise ValueError('not > 0') │ │ c.rulerwidth = val │ │ except ValueError: │ │ - raise EAsciiDoc, 'malformed ruler: bad width' │ │ + 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' │ │ + 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: │ │ @@ -5348,15 +5318,15 @@ │ │ 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' │ │ + 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. │ │ @@ -5392,17 +5362,17 @@ │ │ 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' │ │ + raise EAsciiDoc('missing table rows') │ │ if i >= len(rows): │ │ - raise EAsciiDoc,'closing [%s] underline expected' % self.defname │ │ + 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. │ │ @@ -5456,49 +5426,47 @@ │ │ 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()) │ │ + data.append(row[start:].strip()) │ │ else: │ │ - data.append(char_encode(row[start:end]).strip()) │ │ + data.append(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 io │ │ import csv │ │ result = [] │ │ - rdr = csv.reader(StringIO.StringIO('\r\n'.join(rows)), │ │ + rdr = csv.reader(io.StringIO('\r\n'.join(rows)), │ │ skipinitialspace=True) │ │ try: │ │ for row in rdr: │ │ result.append(row) │ │ except Exception: │ │ - raise EAsciiDoc,'csv parse error: %s' % row │ │ + 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 │ │ + 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. │ │ @@ -5517,39 +5485,39 @@ │ │ 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(): │ │ + for k,v in list(attrs.items()): │ │ if k == 'format': │ │ if v not in self.FORMATS: │ │ - raise EAsciiDoc, 'illegal [%s] %s: %s' % (self.defname,k,v) │ │ + 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) │ │ + 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 │ │ + 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') │ │ @@ -5604,15 +5572,15 @@ │ │ # 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]' │ │ + 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 │ │ @@ -5623,15 +5591,15 @@ │ │ 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 │ │ + 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'*)' \ │ │ @@ -5678,15 +5646,15 @@ │ │ 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 │ │ + perms = (zi.external_attr >> 16) & 0o777 │ │ 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) │ │ @@ -5729,15 +5697,15 @@ │ │ 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 │ │ + raise ValueError('src must specify directory or file: %s' % src) │ │ finally: │ │ zipo.close() │ │ │ │ class Plugin: │ │ """ │ │ --filter and --theme option commands. │ │ """ │ │ @@ -5783,19 +5751,19 @@ │ │ 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: │ │ + except Exception as e: │ │ die('failed to create %s directory: %s' % (Plugin.type, str(e))) │ │ try: │ │ extract_zip(zip_file, plugin_dir) │ │ - except Exception,e: │ │ + except Exception as 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): │ │ """ │ │ @@ -5819,15 +5787,15 @@ │ │ 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: │ │ + except Exception as e: │ │ die('failed to delete %s: %s' % (Plugin.type, str(e))) │ │ │ │ @staticmethod │ │ def list(args): │ │ """ │ │ List all plugin directories (global and local). │ │ """ │ │ @@ -5848,15 +5816,15 @@ │ │ % (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: │ │ + except Exception as e: │ │ die('failed to create %s: %s' % (zip_file, str(e))) │ │ │ │ │ │ #--------------------------------------------------------------------------- │ │ # Application code. │ │ #--------------------------------------------------------------------------- │ │ # Constants │ │ @@ -5899,62 +5867,62 @@ │ │ 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 │ │ + 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 │ │ + raise EAsciiDoc('missing filter: %s' % f) │ │ if doctype not in (None,'article','manpage','book'): │ │ - raise EAsciiDoc,'illegal document type' │ │ + 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' │ │ + 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 │ │ + 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 │ │ + 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. │ │ @@ -5980,15 +5948,15 @@ │ │ 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(): │ │ + for k,v in list(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: │ │ @@ -6023,15 +5991,15 @@ │ │ document.translate(has_header) # Generate the output. │ │ finally: │ │ writer.close() │ │ finally: │ │ reader.closefile() │ │ except KeyboardInterrupt: │ │ raise │ │ - except Exception,e: │ │ + except Exception as 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) │ │ @@ -6075,44 +6043,44 @@ │ │ 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())) │ │ + message.stderr('available help topics: %s' % ', '.join(list(config.sections.keys()))) │ │ sys.exit(1) │ │ elif n > 1: │ │ message.stderr('ambiguous help topic: %s' % topic) │ │ else: │ │ for line in lines: │ │ - print >>f, line │ │ + print(line, file=f) │ │ │ │ ### 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() │ │ + >>> import io │ │ + >>> infile = io.StringIO('Hello *{author}*') │ │ + >>> outfile = io.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() │ │ + >>> print(outfile.getvalue()) │ │ <p>Hello <strong>Joe Bloggs</strong></p> │ │ │ │ >>> │ │ │ │ """ │ │ config.init(cmd) │ │ if len(args) > 1: │ │ @@ -6129,15 +6097,15 @@ │ │ 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) │ │ + 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 │ │ --- asciidoc-8.6.10/dblatex/asciidoc-dblatex.sty │ ├── +++ asciidoc-py-8.6.10/dblatex/asciidoc-dblatex.sty │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/dblatex/asciidoc-dblatex.xsl │ ├── +++ asciidoc-py-8.6.10/dblatex/asciidoc-dblatex.xsl │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/dblatex/dblatex-readme.txt │ ├── +++ asciidoc-py-8.6.10/dblatex/dblatex-readme.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/a2x.1.txt │ ├── +++ asciidoc-py-8.6.10/doc/a2x.1.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/article-docinfo.xml │ ├── +++ asciidoc-py-8.6.10/doc/article-docinfo.xml │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/article.txt │ ├── +++ asciidoc-py-8.6.10/doc/article.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/asciidoc.1.txt │ ├── +++ asciidoc-py-8.6.10/doc/asciidoc.1.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/asciidoc.dict │ ├── +++ asciidoc-py-8.6.10/doc/asciidoc.dict │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/asciidoc.txt │ ├── +++ asciidoc-py-8.6.10/doc/asciidoc.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/asciidocapi.txt │ ├── +++ asciidoc-py-8.6.10/doc/asciidocapi.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/asciimathml.txt │ ├── +++ asciidoc-py-8.6.10/doc/asciimathml.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/book-multi.txt │ ├── +++ asciidoc-py-8.6.10/doc/book-multi.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/book.txt │ ├── +++ asciidoc-py-8.6.10/doc/book.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/customers.csv │ ├── +++ asciidoc-py-8.6.10/doc/customers.csv │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/epub-notes.txt │ ├── +++ asciidoc-py-8.6.10/doc/epub-notes.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/faq.txt │ ├── +++ asciidoc-py-8.6.10/doc/faq.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/latex-backend.txt │ ├── +++ asciidoc-py-8.6.10/doc/latex-backend.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/latex-bugs.txt │ ├── +++ asciidoc-py-8.6.10/doc/latex-bugs.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/latex-filter.txt │ ├── +++ asciidoc-py-8.6.10/doc/latex-filter.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/latexmath.txt │ ├── +++ asciidoc-py-8.6.10/doc/latexmath.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/latexmathml.txt │ ├── +++ asciidoc-py-8.6.10/doc/latexmathml.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/main.aap │ ├── +++ asciidoc-py-8.6.10/doc/main.aap │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/music-filter.txt │ ├── +++ asciidoc-py-8.6.10/doc/music-filter.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/publishing-ebooks-with-asciidoc.txt │ ├── +++ asciidoc-py-8.6.10/doc/publishing-ebooks-with-asciidoc.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/slidy-example.txt │ ├── +++ asciidoc-py-8.6.10/doc/slidy-example.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/slidy.txt │ ├── +++ asciidoc-py-8.6.10/doc/slidy.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/source-highlight-filter.txt │ ├── +++ asciidoc-py-8.6.10/doc/source-highlight-filter.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/doc/testasciidoc.txt │ ├── +++ asciidoc-py-8.6.10/doc/testasciidoc.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/docbook-xsl/asciidoc-docbook-xsl.txt │ ├── +++ asciidoc-py-8.6.10/docbook-xsl/asciidoc-docbook-xsl.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/docbook-xsl/chunked.xsl │ ├── +++ asciidoc-py-8.6.10/docbook-xsl/chunked.xsl │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/docbook-xsl/common.xsl │ ├── +++ asciidoc-py-8.6.10/docbook-xsl/common.xsl │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/docbook-xsl/epub.xsl │ ├── +++ asciidoc-py-8.6.10/docbook-xsl/epub.xsl │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/docbook-xsl/fo.xsl │ ├── +++ asciidoc-py-8.6.10/docbook-xsl/fo.xsl │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/docbook-xsl/htmlhelp.xsl │ ├── +++ asciidoc-py-8.6.10/docbook-xsl/htmlhelp.xsl │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/docbook-xsl/manpage.xsl │ ├── +++ asciidoc-py-8.6.10/docbook-xsl/manpage.xsl │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/docbook-xsl/text.xsl │ ├── +++ asciidoc-py-8.6.10/docbook-xsl/text.xsl │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/docbook-xsl/xhtml.xsl │ ├── +++ asciidoc-py-8.6.10/docbook-xsl/xhtml.xsl │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/docbook45.conf │ ├── +++ asciidoc-py-8.6.10/docbook45.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/examples/website/README-website.txt │ ├── +++ asciidoc-py-8.6.10/examples/website/README-website.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/examples/website/asciidoc-website.dict │ ├── +++ asciidoc-py-8.6.10/examples/website/asciidoc-website.dict │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/examples/website/build-website.sh │ ├── +++ asciidoc-py-8.6.10/examples/website/build-website.sh │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/examples/website/customers.csv │ ├── +++ asciidoc-py-8.6.10/examples/website/customers.csv │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/examples/website/favicon.ico │ ├── +++ asciidoc-py-8.6.10/examples/website/favicon.ico │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/examples/website/index.txt │ ├── +++ asciidoc-py-8.6.10/examples/website/index.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/examples/website/layout1.conf │ ├── +++ asciidoc-py-8.6.10/examples/website/layout1.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/examples/website/layout1.css │ ├── +++ asciidoc-py-8.6.10/examples/website/layout1.css │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/examples/website/layout2.conf │ ├── +++ asciidoc-py-8.6.10/examples/website/layout2.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/examples/website/layout2.css │ ├── +++ asciidoc-py-8.6.10/examples/website/layout2.css │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/examples/website/main.aap │ ├── +++ asciidoc-py-8.6.10/examples/website/main.aap │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/examples/website/newlists.txt │ ├── +++ asciidoc-py-8.6.10/examples/website/newlists.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/examples/website/newtables.txt │ ├── +++ asciidoc-py-8.6.10/examples/website/newtables.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/examples/website/plugins.txt │ ├── +++ asciidoc-py-8.6.10/examples/website/plugins.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/examples/website/version83.txt │ ├── +++ asciidoc-py-8.6.10/examples/website/version83.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/filters/code/code-filter-readme.txt │ ├── +++ asciidoc-py-8.6.10/filters/code/code-filter-readme.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/filters/code/code-filter.py │ ├── +++ asciidoc-py-8.6.10/filters/code/code-filter.py │ │┄ Files 2% similar despite different names │ │ @@ -46,15 +46,15 @@ │ │ http://asciidoc.org/ │ │ │ │ COPYING │ │ Copyright (C) 2002-2006 Stuart Rackham. Free use of this software is │ │ granted under the terms of the GNU General Public License (GPL). │ │ ''' │ │ │ │ -import os, sys, re, string │ │ +import os, sys, re │ │ │ │ VERSION = '1.1.2' │ │ │ │ # Globals. │ │ language = None │ │ backend = None │ │ tabsize = 8 │ │ @@ -134,20 +134,20 @@ │ │ blk_comment = (re.escape(block_comments[language][0]), │ │ re.escape(block_comments[language][1])) │ │ stag,etag = commenttags[backend] │ │ in_comment = 0 # True if we're inside a multi-line block comment. │ │ tag_comment = 0 # True if we should tag the current line as a comment. │ │ line = sys.stdin.readline() │ │ while line: │ │ - line = string.rstrip(line) │ │ - line = string.expandtabs(line,tabsize) │ │ + line = line.rstrip() │ │ + line = line.expandtabs(tabsize) │ │ # Escape special characters. │ │ - line = string.replace(line,'&','&') │ │ - line = string.replace(line,'<','<') │ │ - line = string.replace(line,'>','>') │ │ + line = line.replace('&','&') │ │ + line = line.replace('<','<') │ │ + line = line.replace('>','>') │ │ # Process block comment. │ │ if blk_comment: │ │ if in_comment: │ │ if re.match(r'.*'+blk_comment[1]+r'$',line): │ │ in_comment = 0 │ │ else: │ │ if re.match(r'^\s*'+blk_comment[0]+r'.*'+blk_comment[1],line): │ │ @@ -159,15 +159,15 @@ │ │ in_comment = 1 │ │ else: │ │ tag_comment = 0 │ │ if tag_comment: │ │ if line: line = stag+line+etag │ │ else: │ │ if inline_comment: │ │ - pos = string.find(line,inline_comment) │ │ + pos = line.find(inline_comment) │ │ else: │ │ pos = -1 │ │ if pos >= 0: │ │ # Process inline comment. │ │ line = re.sub(r'\b(?P<word>\w+)\b',sub_keyword,line[:pos]) \ │ │ + stag + line[pos:] + etag │ │ else: │ │ @@ -189,43 +189,43 @@ │ │ 'b:l:ht:v', │ │ ['help','version']) │ │ if len(args) > 0: │ │ usage() │ │ sys.exit(1) │ │ for o,v in opts: │ │ if o in ('--help','-h'): │ │ - print __doc__ │ │ + print(__doc__) │ │ sys.exit(0) │ │ if o in ('--version','-v'): │ │ print('code-filter version %s' % (VERSION,)) │ │ sys.exit(0) │ │ if o == '-b': backend = v │ │ if o == '-l': │ │ - v = string.lower(v) │ │ + v = v.lower() │ │ if v == 'c': v = 'c++' │ │ language = v │ │ if o == '-t': │ │ try: │ │ tabsize = int(v) │ │ except: │ │ usage('illegal tabsize') │ │ sys.exit(1) │ │ if tabsize <= 0: │ │ usage('illegal tabsize') │ │ sys.exit(1) │ │ if backend is None: │ │ usage('backend option is mandatory') │ │ sys.exit(1) │ │ - if not keywordtags.has_key(backend): │ │ + if backend not in keywordtags: │ │ usage('illegal backend option') │ │ sys.exit(1) │ │ if language is None: │ │ usage('language option is mandatory') │ │ sys.exit(1) │ │ - if not keywords.has_key(language): │ │ + if language not in keywords: │ │ usage('illegal language option') │ │ sys.exit(1) │ │ # Do the work. │ │ code_filter() │ │ │ │ if __name__ == "__main__": │ │ try: │ │ --- asciidoc-8.6.10/filters/graphviz/asciidoc-graphviz-sample.txt │ ├── +++ asciidoc-py-8.6.10/filters/graphviz/asciidoc-graphviz-sample.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/filters/graphviz/graphviz-filter.conf │ ├── +++ asciidoc-py-8.6.10/filters/graphviz/graphviz-filter.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/filters/graphviz/graphviz2png.py │ ├── +++ asciidoc-py-8.6.10/filters/graphviz/graphviz2png.py │ │┄ Files 2% similar despite different names │ │ @@ -61,15 +61,15 @@ │ │ Copyright (C) 2008-2009 Gouichi Iisaka. │ │ Free use of this software is granted under the terms of │ │ the GNU General Public License (GPL). │ │ ''' │ │ │ │ def __init__(self, argv=None): │ │ # Run dot, get the list of supported formats. It's prefixed by some junk. │ │ - format_output = subprocess.Popen(["dot", "-T?"], stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate()[1] │ │ + format_output = str( subprocess.Popen(["dot", "-T?"], stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate()[1] ) │ │ # The junk contains : and ends with :. So we split it, then strip the final endline, then split the list for future usage. │ │ supported_formats = format_output.split(": ")[2][:-1].split(" ") │ │ │ │ if not argv: │ │ argv = sys.argv │ │ │ │ self.usage = '%prog [options] inputfile' │ │ @@ -109,25 +109,25 @@ │ │ def systemcmd(self, cmd): │ │ if self.options.do_verbose: │ │ msg = 'Execute: %s' % cmd │ │ sys.stderr.write(msg + os.linesep) │ │ else: │ │ cmd += ' 2>%s' % os.devnull │ │ if os.system(cmd): │ │ - raise EApp, 'failed command: %s' % cmd │ │ + raise EApp('failed command: %s' % cmd) │ │ │ │ def graphviz2png(self, infile, outfile): │ │ '''Convert Graphviz notation in file infile to │ │ PNG file named outfile.''' │ │ │ │ outfile = os.path.abspath(outfile) │ │ outdir = os.path.dirname(outfile) │ │ │ │ if not os.path.isdir(outdir): │ │ - raise EApp, 'directory does not exist: %s' % outdir │ │ + raise EApp('directory does not exist: %s' % outdir) │ │ │ │ basefile = os.path.splitext(outfile)[0] │ │ saved_cwd = os.getcwd() │ │ os.chdir(outdir) │ │ try: │ │ cmd = '%s -T%s "%s" > "%s"' % ( │ │ self.options.layout, self.options.format, infile, outfile) │ │ @@ -147,15 +147,15 @@ │ │ sys.stderr.write('OUTFILE must be specified') │ │ sys.exit(1) │ │ infile = os.path.splitext(self.options.outfile)[0] + '.txt' │ │ lines = sys.stdin.readlines() │ │ open(infile, 'w').writelines(lines) │ │ │ │ if not os.path.isfile(infile): │ │ - raise EApp, 'input file does not exist: %s' % infile │ │ + raise EApp('input file does not exist: %s' % infile) │ │ │ │ if self.options.outfile is None: │ │ outfile = os.path.splitext(infile)[0] + '.png' │ │ else: │ │ outfile = self.options.outfile │ │ │ │ self.graphviz2png(infile, outfile) │ │ --- asciidoc-8.6.10/filters/latex/latex-filter.conf │ ├── +++ asciidoc-py-8.6.10/filters/latex/latex-filter.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/filters/latex/latex2img.py │ ├── +++ asciidoc-py-8.6.10/filters/latex/latex2img.py │ │┄ Files 3% similar despite different names │ │ @@ -54,19 +54,16 @@ │ │ http://code.google.com/p/latexmath2png/ │ │ │ │ COPYING │ │ Copyright (C) 2010 Stuart Rackham. Free use of this software is │ │ granted under the terms of the MIT License. │ │ ''' │ │ │ │ -# Suppress warning: "the md5 module is deprecated; use hashlib instead" │ │ -import warnings │ │ -warnings.simplefilter('ignore',DeprecationWarning) │ │ - │ │ -import os, sys, tempfile, md5 │ │ +import os, sys, tempfile │ │ +from hashlib import md5 │ │ │ │ VERSION = '0.2.0' │ │ │ │ # Include LaTeX packages and commands here. │ │ TEX_HEADER = r'''\documentclass{article} │ │ \usepackage{amsmath} │ │ \usepackage{amsthm} │ │ @@ -110,40 +107,40 @@ │ │ global verbose │ │ if verbose: │ │ cmd += ' 1>&2' │ │ else: │ │ cmd += ' 2>%s 1>&2' % os.devnull │ │ print_verbose('executing: %s' % cmd) │ │ if os.system(cmd): │ │ - raise EApp, 'failed command: %s' % cmd │ │ + raise EApp('failed command: %s' % cmd) │ │ │ │ def latex2img(infile, outfile, imgfmt, dpi, modified): │ │ ''' │ │ Convert LaTeX input file infile to image file named outfile. │ │ ''' │ │ outfile = os.path.abspath(outfile) │ │ outdir = os.path.dirname(outfile) │ │ if not os.path.isdir(outdir): │ │ - raise EApp, 'directory does not exist: %s' % outdir │ │ + raise EApp('directory does not exist: %s' % outdir) │ │ texfile = tempfile.mktemp(suffix='.tex', dir=os.path.dirname(outfile)) │ │ basefile = os.path.splitext(texfile)[0] │ │ dvifile = basefile + '.dvi' │ │ temps = [basefile + ext for ext in ('.tex','.dvi', '.aux', '.log')] │ │ skip = False │ │ if infile == '-': │ │ tex = sys.stdin.read() │ │ if modified: │ │ - checksum = md5.new(tex + imgfmt + str(dpi)).digest() │ │ + checksum = md5((tex + imgfmt + str(dpi)).encode('utf-8')).digest() │ │ md5_file = os.path.splitext(outfile)[0] + '.md5' │ │ if os.path.isfile(md5_file) and os.path.isfile(outfile) and \ │ │ checksum == read_file(md5_file,'rb'): │ │ skip = True │ │ else: │ │ if not os.path.isfile(infile): │ │ - raise EApp, 'input file does not exist: %s' % infile │ │ + raise EApp('input file does not exist: %s' % infile) │ │ tex = read_file(infile) │ │ if modified and os.path.isfile(outfile) and \ │ │ os.path.getmtime(infile) <= os.path.getmtime(outfile): │ │ skip = True │ │ if skip: │ │ print_verbose('skipped: no change: %s' % outfile) │ │ return │ │ @@ -203,18 +200,18 @@ │ │ outfile = None │ │ imgfmt = 'png' │ │ modified = False │ │ import getopt │ │ opts,args = getopt.getopt(sys.argv[1:], 'D:o:mhvf:', ['help','version']) │ │ for o,v in opts: │ │ if o in ('--help','-h'): │ │ - print __doc__ │ │ + print(__doc__) │ │ sys.exit(0) │ │ if o =='--version': │ │ - print('latex2img version %s' % (VERSION,)) │ │ + print(('latex2img version %s' % (VERSION,))) │ │ sys.exit(0) │ │ if o == '-D': dpi = v │ │ if o == '-o': outfile = v │ │ if o == '-m': modified = True │ │ if o == '-v': verbose = True │ │ if o == '-f': imgfmt = v │ │ if len(args) != 1: │ │ @@ -241,10 +238,10 @@ │ │ if __name__ == "__main__": │ │ try: │ │ main() │ │ except SystemExit: │ │ raise │ │ except KeyboardInterrupt: │ │ sys.exit(1) │ │ - except Exception, e: │ │ + except Exception as e: │ │ print_stderr("%s: %s" % (os.path.basename(sys.argv[0]), str(e))) │ │ sys.exit(1) │ │ --- asciidoc-8.6.10/filters/music/music-filter-test.txt │ ├── +++ asciidoc-py-8.6.10/filters/music/music-filter-test.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/filters/music/music-filter.conf │ ├── +++ asciidoc-py-8.6.10/filters/music/music-filter.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/filters/music/music2png.py │ ├── +++ asciidoc-py-8.6.10/filters/music/music2png.py │ │┄ Files 5% similar despite different names │ │ @@ -46,19 +46,16 @@ │ │ Written by Stuart Rackham, <srackham@gmail.com> │ │ │ │ COPYING │ │ Copyright (C) 2006 Stuart Rackham. Free use of this software is │ │ granted under the terms of the GNU General Public License (GPL). │ │ ''' │ │ │ │ -# Suppress warning: "the md5 module is deprecated; use hashlib instead" │ │ -import warnings │ │ -warnings.simplefilter('ignore',DeprecationWarning) │ │ - │ │ -import os, sys, tempfile, md5 │ │ +import os, sys, tempfile │ │ +from hashlib import md5 │ │ │ │ VERSION = '0.1.2' │ │ │ │ # Globals. │ │ verbose = False │ │ │ │ class EApp(Exception): pass # Application specific exception. │ │ @@ -86,38 +83,38 @@ │ │ │ │ def run(cmd): │ │ global verbose │ │ if not verbose: │ │ cmd += ' 2>%s' % os.devnull │ │ print_verbose('executing: %s' % cmd) │ │ if os.system(cmd): │ │ - raise EApp, 'failed command: %s' % cmd │ │ + raise EApp('failed command: %s' % cmd) │ │ │ │ def music2png(format, infile, outfile, modified): │ │ '''Convert ABC notation in file infile to cropped PNG file named outfile.''' │ │ outfile = os.path.abspath(outfile) │ │ outdir = os.path.dirname(outfile) │ │ if not os.path.isdir(outdir): │ │ - raise EApp, 'directory does not exist: %s' % outdir │ │ + raise EApp('directory does not exist: %s' % outdir) │ │ basefile = tempfile.mktemp(dir=os.path.dirname(outfile)) │ │ temps = [basefile + ext for ext in ('.abc', '.ly', '.ps', '.midi')] │ │ skip = False │ │ if infile == '-': │ │ source = sys.stdin.read() │ │ - checksum = md5.new(source).digest() │ │ + checksum = md5(source.encode('utf-8')).digest() │ │ filename = os.path.splitext(outfile)[0] + '.md5' │ │ if modified: │ │ if os.path.isfile(filename) and os.path.isfile(outfile) and \ │ │ checksum == read_file(filename,'rb'): │ │ skip = True │ │ else: │ │ write_file(filename, checksum, 'wb') │ │ else: │ │ if not os.path.isfile(infile): │ │ - raise EApp, 'input file does not exist: %s' % infile │ │ + raise EApp('input file does not exist: %s' % infile) │ │ if modified and os.path.isfile(outfile) and \ │ │ os.path.getmtime(infile) <= os.path.getmtime(outfile): │ │ skip = True │ │ source = read_file(infile) │ │ if skip: │ │ print_verbose('skipped: no change: %s' % outfile) │ │ return │ │ @@ -170,18 +167,18 @@ │ │ format = None │ │ outfile = None │ │ modified = False │ │ import getopt │ │ opts,args = getopt.getopt(sys.argv[1:], 'f:o:mhv', ['help','version']) │ │ for o,v in opts: │ │ if o in ('--help','-h'): │ │ - print __doc__ │ │ + print(__doc__) │ │ sys.exit(0) │ │ if o =='--version': │ │ - print('music2png version %s' % (VERSION,)) │ │ + print(('music2png version %s' % (VERSION,))) │ │ sys.exit(0) │ │ if o == '-f': format = v │ │ if o == '-o': outfile = v │ │ if o == '-m': modified = True │ │ if o == '-v': verbose = True │ │ if len(args) != 1: │ │ usage() │ │ @@ -204,10 +201,10 @@ │ │ if __name__ == "__main__": │ │ try: │ │ main() │ │ except SystemExit: │ │ raise │ │ except KeyboardInterrupt: │ │ sys.exit(1) │ │ - except Exception, e: │ │ + except Exception as e: │ │ print_stderr("%s: %s" % (os.path.basename(sys.argv[0]), str(e))) │ │ sys.exit(1) │ │ --- asciidoc-8.6.10/filters/source/source-highlight-filter-test.txt │ ├── +++ asciidoc-py-8.6.10/filters/source/source-highlight-filter-test.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/filters/source/source-highlight-filter.conf │ ├── +++ asciidoc-py-8.6.10/filters/source/source-highlight-filter.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/help.conf │ ├── +++ asciidoc-py-8.6.10/help.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/html4.conf │ ├── +++ asciidoc-py-8.6.10/html4.conf │ │┄ Files 0% similar despite different names │ │ @@ -38,24 +38,24 @@ │ │ template::[pi-blockmacro] │ │ │ │ [image-inlinemacro] │ │ <a href="{link}"{role? class="{role}"}> │ │ # src attribute must be first attribute for blogpost compatibility. │ │ {data-uri%}<img src="{imagesdir=}{imagesdir?/}{target}" style="border-width: 0; vertical-align: text-bottom;" alt="{alt={target}}"{width? width="{width}"}{height? height="{height}"}{title? title="{title}"}> │ │ {data-uri#}<img style="border-width: 0; vertical-align: text-bottom;" alt="{alt={target}}"{width? width="{width}"}{height? height="{height}"}{title? title="{title}"} │ │ -{data-uri#}{sys:"{python}" -u -c "import mimetypes,base64,sys; print 'src=\x22data:'+mimetypes.guess_type(r'{target}')[0]+';base64,'; base64.encode(sys.stdin,sys.stdout)" < "{eval:os.path.join(r"{indir={outdir}}",r"{imagesdir=}",r"{target}")}"}"> │ │ +{data-uri#}{sys:"{python}" -u -c "import mimetypes,base64,sys; print(b'src=\x22data:' + mimetypes.guess_type(r'{target}')[0].encode('utf-8') + b';base64,'); base64.encode(sys.stdin,sys.stdout)" < "{eval:os.path.join(r"{indir={outdir}}",r"{imagesdir=}",r"{target}")}"}"> │ │ {link#}</a> │ │ │ │ [image-blockmacro] │ │ <div{align? align="{align}"}{role? class="{role}"}{float? style="float:{float};"}> │ │ <a name="{id}"></a> │ │ <a href="{link}"> │ │ {data-uri%}<img src="{imagesdir=}{imagesdir?/}{target}" style="border-width: 0;" alt="{alt={target}}"{width? width="{width}"}{height? height="{height}"}> │ │ {data-uri#}<img alt="{alt={target}}"{width? width="{width}"}{height? height="{height}"} │ │ -{data-uri#}{sys:"{python}" -u -c "import mimetypes,base64,sys; print 'src=\x22data:'+mimetypes.guess_type(r'{target}')[0]+';base64,'; base64.encode(sys.stdin,sys.stdout)" < "{eval:os.path.join(r"{indir={outdir}}",r"{imagesdir=}",r"{target}")}"}"> │ │ +{data-uri#}{sys:"{python}" -u -c "import mimetypes,base64,sys; print(b'src=\x22data:' + mimetypes.guess_type(r'{target}')[0].encode('utf-8') + b';base64,'); base64.encode(sys.stdin,sys.stdout)" < "{eval:os.path.join(r"{indir={outdir}}",r"{imagesdir=}",r"{target}")}"}"> │ │ {link#}</a> │ │ <p><b>{caption={figure-caption} {counter:figure-number}. }</b>{title}</p> │ │ </div> │ │ │ │ [unfloat-blockmacro] │ │ <br clear="all"> │ │ --- asciidoc-8.6.10/html5.conf │ ├── +++ asciidoc-py-8.6.10/html5.conf │ │┄ Files 2% similar despite different names │ │ @@ -79,25 +79,25 @@ │ │ </div></div> │ │ │ │ [image-inlinemacro] │ │ <span class="image{role? {role}}"> │ │ <a class="image" href="{link}"> │ │ {data-uri%}<img src="{imagesdir=}{imagesdir?/}{target}" alt="{alt={target}}"{width? width="{width}"}{height? height="{height}"}{title? title="{title}"}> │ │ {data-uri#}<img alt="{alt={target}}"{width? width="{width}"}{height? height="{height}"}{title? title="{title}"} │ │ -{data-uri#}{sys:"{python}" -u -c "import mimetypes,base64,sys; print 'src=\x22data:'+mimetypes.guess_type(r'{target}')[0]+';base64,'; base64.encode(sys.stdin,sys.stdout)" < "{eval:os.path.join(r"{indir={outdir}}",r"{imagesdir=}",r"{target}")}"}"> │ │ +{data-uri#}{sys:"{python}" -u -c "import mimetypes,base64,sys; print(b'src=\x22data:' + mimetypes.guess_type(r'{target}')[0].encode('utf-8') + b';base64,'); base64.encode(sys.stdin,sys.stdout)" < "{eval:os.path.join(r"{indir={outdir}}",r"{imagesdir=}",r"{target}")}"}"> │ │ {link#}</a> │ │ </span> │ │ │ │ [image-blockmacro] │ │ <div class="imageblock{style? {style}}{role? {role}}{unbreakable-option? unbreakable}"{id? id="{id}"}{align? style="text-align:{align};"}{float? style="float:{float};"}> │ │ <div class="content"> │ │ <a class="image" href="{link}"> │ │ {data-uri%}<img src="{imagesdir=}{imagesdir?/}{target}" alt="{alt={target}}"{width? width="{width}"}{height? height="{height}"}> │ │ {data-uri#}<img alt="{alt={target}}"{width? width="{width}"}{height? height="{height}"} │ │ -{data-uri#}{sys:"{python}" -u -c "import mimetypes,base64,sys; print 'src=\x22data:'+mimetypes.guess_type(r'{target}')[0]+';base64,'; base64.encode(sys.stdin,sys.stdout)" < "{eval:os.path.join(r"{indir={outdir}}",r"{imagesdir=}",r"{target}")}"}"> │ │ +{data-uri#}{sys:"{python}" -u -c "import mimetypes,base64,sys; print(b'src=\x22data:' + mimetypes.guess_type(r'{target}')[0].encode('utf-8') + b';base64,'); base64.encode(sys.stdin,sys.stdout)" < "{eval:os.path.join(r"{indir={outdir}}",r"{imagesdir=}",r"{target}")}"}"> │ │ {link#}</a> │ │ </div> │ │ <div class="title">{caption={figure-caption} {counter:figure-number}. }{title}</div> │ │ </div> │ │ │ │ [audio-blockmacro] │ │ <div class="audioblock{role? {role}}{unbreakable-option? unbreakable}"{id? id="{id}"}> │ │ --- asciidoc-8.6.10/images/highlighter.png │ ├── +++ asciidoc-py-8.6.10/images/highlighter.png │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/images/icons/callouts/11.png │ ├── +++ asciidoc-py-8.6.10/images/icons/callouts/11.png │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/images/icons/callouts/12.png │ ├── +++ asciidoc-py-8.6.10/images/icons/callouts/12.png │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/images/icons/callouts/13.png │ ├── +++ asciidoc-py-8.6.10/images/icons/callouts/13.png │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/images/icons/callouts/15.png │ ├── +++ asciidoc-py-8.6.10/images/icons/callouts/15.png │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/images/icons/caution.png │ ├── +++ asciidoc-py-8.6.10/images/icons/caution.png │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/images/icons/example.png │ ├── +++ asciidoc-py-8.6.10/images/icons/example.png │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/images/icons/home.png │ ├── +++ asciidoc-py-8.6.10/images/icons/home.png │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/images/icons/important.png │ ├── +++ asciidoc-py-8.6.10/images/icons/important.png │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/images/icons/next.png │ ├── +++ asciidoc-py-8.6.10/images/icons/next.png │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/images/icons/note.png │ ├── +++ asciidoc-py-8.6.10/images/icons/note.png │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/images/icons/prev.png │ ├── +++ asciidoc-py-8.6.10/images/icons/prev.png │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/images/icons/tip.png │ ├── +++ asciidoc-py-8.6.10/images/icons/tip.png │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/images/icons/up.png │ ├── +++ asciidoc-py-8.6.10/images/icons/up.png │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/images/icons/warning.png │ ├── +++ asciidoc-py-8.6.10/images/icons/warning.png │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/images/tiger.png │ ├── +++ asciidoc-py-8.6.10/images/tiger.png │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/install-sh │ ├── +++ asciidoc-py-8.6.10/install-sh │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/javascripts/ASCIIMathML.js │ ├── +++ asciidoc-py-8.6.10/javascripts/ASCIIMathML.js │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/javascripts/LaTeXMathML.js │ ├── +++ asciidoc-py-8.6.10/javascripts/LaTeXMathML.js │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/javascripts/asciidoc.js │ ├── +++ asciidoc-py-8.6.10/javascripts/asciidoc.js │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/javascripts/slidy.js │ ├── +++ asciidoc-py-8.6.10/javascripts/slidy.js │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/javascripts/toc.js │ ├── +++ asciidoc-py-8.6.10/javascripts/toc.js │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/lang-cs.conf │ ├── +++ asciidoc-py-8.6.10/lang-cs.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/lang-de.conf │ ├── +++ asciidoc-py-8.6.10/lang-de.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/lang-el.conf │ ├── +++ asciidoc-py-8.6.10/lang-el.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/lang-en.conf │ ├── +++ asciidoc-py-8.6.10/lang-en.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/lang-es.conf │ ├── +++ asciidoc-py-8.6.10/lang-es.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/lang-fi.conf │ ├── +++ asciidoc-py-8.6.10/lang-fi.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/lang-fr.conf │ ├── +++ asciidoc-py-8.6.10/lang-fr.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/lang-hu.conf │ ├── +++ asciidoc-py-8.6.10/lang-hu.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/lang-id.conf │ ├── +++ asciidoc-py-8.6.10/lang-id.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/lang-it.conf │ ├── +++ asciidoc-py-8.6.10/lang-it.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/lang-ja.conf │ ├── +++ asciidoc-py-8.6.10/lang-ja.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/lang-nl.conf │ ├── +++ asciidoc-py-8.6.10/lang-nl.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/lang-pl.conf │ ├── +++ asciidoc-py-8.6.10/lang-pl.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/lang-pt-BR.conf │ ├── +++ asciidoc-py-8.6.10/lang-pt-BR.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/lang-ro.conf │ ├── +++ asciidoc-py-8.6.10/lang-ro.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/lang-ru.conf │ ├── +++ asciidoc-py-8.6.10/lang-ru.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/lang-sv.conf │ ├── +++ asciidoc-py-8.6.10/lang-sv.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/lang-uk.conf │ ├── +++ asciidoc-py-8.6.10/lang-uk.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/latex.conf │ ├── +++ asciidoc-py-8.6.10/latex.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/main.aap │ ├── +++ asciidoc-py-8.6.10/main.aap │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/slidy.conf │ ├── +++ asciidoc-py-8.6.10/slidy.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/stylesheets/asciidoc.css │ ├── +++ asciidoc-py-8.6.10/stylesheets/asciidoc.css │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/stylesheets/docbook-xsl.css │ ├── +++ asciidoc-py-8.6.10/stylesheets/docbook-xsl.css │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/stylesheets/pygments.css │ ├── +++ asciidoc-py-8.6.10/stylesheets/pygments.css │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/stylesheets/slidy.css │ ├── +++ asciidoc-py-8.6.10/stylesheets/slidy.css │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/stylesheets/toc2.css │ ├── +++ asciidoc-py-8.6.10/stylesheets/toc2.css │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/stylesheets/xhtml11-quirks.css │ ├── +++ asciidoc-py-8.6.10/stylesheets/xhtml11-quirks.css │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/tests/data/filters-test.txt │ ├── +++ asciidoc-py-8.6.10/tests/data/filters-test.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/tests/data/lang-cs-test.txt │ ├── +++ asciidoc-py-8.6.10/tests/data/lang-cs-test.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/tests/data/lang-de-test.txt │ ├── +++ asciidoc-py-8.6.10/tests/data/lang-de-test.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/tests/data/lang-en-test.txt │ ├── +++ asciidoc-py-8.6.10/tests/data/lang-en-test.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/tests/data/lang-es-test.txt │ ├── +++ asciidoc-py-8.6.10/tests/data/lang-es-test.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/tests/data/lang-fr-test.txt │ ├── +++ asciidoc-py-8.6.10/tests/data/lang-fr-test.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/tests/data/lang-hu-test.txt │ ├── +++ asciidoc-py-8.6.10/tests/data/lang-hu-test.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/tests/data/lang-it-test.txt │ ├── +++ asciidoc-py-8.6.10/tests/data/lang-it-test.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/tests/data/lang-ja-test.txt │ ├── +++ asciidoc-py-8.6.10/tests/data/lang-ja-test.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/tests/data/lang-nl-test.txt │ ├── +++ asciidoc-py-8.6.10/tests/data/lang-nl-test.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/tests/data/lang-pt-BR-test.txt │ ├── +++ asciidoc-py-8.6.10/tests/data/lang-pt-BR-test.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/tests/data/lang-ro-test.txt │ ├── +++ asciidoc-py-8.6.10/tests/data/lang-ro-test.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/tests/data/lang-ru-test.txt │ ├── +++ asciidoc-py-8.6.10/tests/data/lang-ru-test.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/tests/data/lang-sv-test.txt │ ├── +++ asciidoc-py-8.6.10/tests/data/lang-sv-test.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/tests/data/lang-uk-test.txt │ ├── +++ asciidoc-py-8.6.10/tests/data/lang-uk-test.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/tests/data/oldtables.txt │ ├── +++ asciidoc-py-8.6.10/tests/data/oldtables.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/tests/data/open-block-test.txt │ ├── +++ asciidoc-py-8.6.10/tests/data/open-block-test.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/tests/data/testcases.txt │ ├── +++ asciidoc-py-8.6.10/tests/data/testcases.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/tests/data/utf8-examples.txt │ ├── +++ asciidoc-py-8.6.10/tests/data/utf8-examples.txt │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/tests/testasciidoc.conf │ ├── +++ asciidoc-py-8.6.10/tests/testasciidoc.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/tests/testasciidoc.py │ ├── +++ asciidoc-py-8.6.10/tests/testasciidoc.py │ │┄ Files 10% similar despite different names │ │ @@ -1,8 +1,8 @@ │ │ -#!/usr/bin/env python │ │ +#!/usr/bin/env python3 │ │ │ │ USAGE = '''Usage: testasciidoc.py [OPTIONS] COMMAND │ │ │ │ Run AsciiDoc conformance tests specified in configuration FILE. │ │ │ │ Commands: │ │ list List tests │ │ @@ -22,17 +22,17 @@ │ │ │ │ │ │ import os, sys, re, difflib │ │ import time │ │ │ │ if sys.platform[:4] == 'java': │ │ # Jython cStringIO is more compatible with CPython StringIO. │ │ - import cStringIO as StringIO │ │ + import io as StringIO │ │ else: │ │ - import StringIO │ │ + import io │ │ │ │ import asciidocapi │ │ │ │ │ │ BACKENDS = ('html4','xhtml11','docbook','html5') # Default backends. │ │ BACKEND_EXT = {'html4':'.html', 'xhtml11':'.html', 'docbook':'.xml', │ │ 'slidy':'.html','html5':'.html'} │ │ @@ -41,25 +41,25 @@ │ │ def iif(condition, iftrue, iffalse=None): │ │ """ │ │ Immediate if c.f. ternary ?: operator. │ │ False value defaults to '' if the true value is a string. │ │ False value defaults to 0 if the true value is a number. │ │ """ │ │ if iffalse is None: │ │ - if isinstance(iftrue, basestring): │ │ + if isinstance(iftrue, str): │ │ iffalse = '' │ │ if type(iftrue) in (int, float): │ │ iffalse = 0 │ │ if condition: │ │ return iftrue │ │ else: │ │ return iffalse │ │ │ │ def message(msg=''): │ │ - print >>sys.stderr, msg │ │ + print(msg, file=sys.stderr) │ │ │ │ def strip_end(lines): │ │ """ │ │ Strip blank strings from the end of list of strings. │ │ """ │ │ for i in range(len(lines)-1,-1,-1): │ │ if not lines[i]: │ │ @@ -139,34 +139,34 @@ │ │ self.title = l[0][1:] │ │ else: │ │ self.title = l[0] │ │ self.description = l[1:] │ │ continue │ │ reo = re.match(r'^%\s*(?P<directive>[\w_-]+)', l[0]) │ │ if not reo: │ │ - raise (ValueError, 'illegal directive: %s' % l[0]) │ │ + raise ValueError │ │ directive = reo.groupdict()['directive'] │ │ data = normalize_data(l[1:]) │ │ if directive == 'source': │ │ if data: │ │ self.source = os.path.normpath(os.path.join( │ │ self.confdir, os.path.normpath(data[0]))) │ │ elif directive == 'options': │ │ self.options = eval(' '.join(data)) │ │ for i,v in enumerate(self.options): │ │ - if isinstance(v, basestring): │ │ + if isinstance(v, str): │ │ self.options[i] = (v,None) │ │ elif directive == 'attributes': │ │ self.attributes.update(eval(' '.join(data))) │ │ elif directive == 'backends': │ │ self.backends = eval(' '.join(data)) │ │ elif directive == 'name': │ │ self.name = data[0].strip() │ │ else: │ │ - raise (ValueError, 'illegal directive: %s' % l[0]) │ │ + raise ValueError │ │ if not self.title: │ │ self.title = self.source │ │ if not self.name: │ │ self.name = os.path.basename(os.path.splitext(self.source)[0]) │ │ │ │ def is_missing(self, backend): │ │ """ │ │ @@ -200,29 +200,29 @@ │ │ """ │ │ Generate and return test data output for backend. │ │ """ │ │ asciidoc = asciidocapi.AsciiDocAPI() │ │ asciidoc.options.values = self.options │ │ asciidoc.attributes = self.attributes │ │ infile = self.source │ │ - outfile = StringIO.StringIO() │ │ + outfile = io.StringIO() │ │ asciidoc.execute(infile, outfile, backend) │ │ return outfile.getvalue().splitlines() │ │ │ │ def update_expected(self, backend): │ │ """ │ │ Generate and write backend data. │ │ """ │ │ lines = self.generate_expected(backend) │ │ if not os.path.isdir(self.datadir): │ │ - print('CREATING: %s' % self.datadir) │ │ + print(('CREATING: %s' % self.datadir)) │ │ os.mkdir(self.datadir) │ │ f = open(self.backend_filename(backend),'w+') │ │ try: │ │ - print('WRITING: %s' % f.name) │ │ + print(('WRITING: %s' % f.name)) │ │ f.writelines([ s + os.linesep for s in lines]) │ │ finally: │ │ f.close() │ │ │ │ def update(self, backend=None, force=False): │ │ """ │ │ Regenerate and update expected test data outputs. │ │ @@ -242,43 +242,43 @@ │ │ """ │ │ if backend is None: │ │ backends = self.backends │ │ else: │ │ backends = [backend] │ │ result = True # Assume success. │ │ self.passed = self.failed = self.skipped = 0 │ │ - print('%d: %s' % (self.number, self.title)) │ │ + print(('%d: %s' % (self.number, self.title))) │ │ if self.source and os.path.isfile(self.source): │ │ - print('SOURCE: asciidoc: %s' % self.source) │ │ + print(('SOURCE: asciidoc: %s' % self.source)) │ │ for backend in backends: │ │ fromfile = self.backend_filename(backend) │ │ if not self.is_missing(backend): │ │ expected = self.get_expected(backend) │ │ strip_end(expected) │ │ got = self.generate_expected(backend) │ │ strip_end(got) │ │ lines = [] │ │ for line in difflib.unified_diff(got, expected, n=0): │ │ lines.append(line) │ │ if lines: │ │ result = False │ │ self.failed +=1 │ │ lines = lines[3:] │ │ - print('FAILED: %s: %s' % (backend, fromfile)) │ │ + print(('FAILED: %s: %s' % (backend, fromfile))) │ │ message('+++ %s' % fromfile) │ │ message('--- got') │ │ for line in lines: │ │ message(line) │ │ message() │ │ else: │ │ self.passed += 1 │ │ - print('PASSED: %s: %s' % (backend, fromfile)) │ │ + print(('PASSED: %s: %s' % (backend, fromfile))) │ │ else: │ │ self.skipped += 1 │ │ - print('SKIPPED: %s: %s' % (backend, fromfile)) │ │ + print(('SKIPPED: %s: %s' % (backend, fromfile))) │ │ else: │ │ self.skipped += len(backends) │ │ if self.source: │ │ msg = 'MISSING: %s' % self.source │ │ else: │ │ msg = 'NO ASCIIDOC SOURCE FILE SPECIFIED' │ │ print(msg) │ │ @@ -332,34 +332,34 @@ │ │ for test in self.tests: │ │ if (not test.disabled or number) and (not number or number == test.number) and (not backend or backend in test.backends): │ │ test.run(backend) │ │ self.passed += test.passed │ │ self.failed += test.failed │ │ self.skipped += test.skipped │ │ if self.passed > 0: │ │ - print('TOTAL PASSED: %s' % self.passed) │ │ + print(('TOTAL PASSED: %s' % self.passed)) │ │ if self.failed > 0: │ │ - print('TOTAL FAILED: %s' % self.failed) │ │ + print(('TOTAL FAILED: %s' % self.failed)) │ │ if self.skipped > 0: │ │ - print('TOTAL SKIPPED: %s' % self.skipped) │ │ + print(('TOTAL SKIPPED: %s' % self.skipped)) │ │ │ │ def update(self, number=None, backend=None, force=False): │ │ """ │ │ Regenerate expected test data and update configuratio file. │ │ """ │ │ for test in self.tests: │ │ if (not test.disabled or number) and (not number or number == test.number): │ │ test.update(backend, force=force) │ │ │ │ def list(self): │ │ """ │ │ Lists tests to stdout. │ │ """ │ │ for test in self.tests: │ │ - print '%d: %s%s' % (test.number, iif(test.disabled,'!'), test.title) │ │ + print('%d: %s%s' % (test.number, iif(test.disabled,'!'), test.title)) │ │ │ │ │ │ class Lines(list): │ │ """ │ │ A list of strings. │ │ Adds eol() and read_until() to list type. │ │ """ │ │ @@ -425,15 +425,15 @@ │ │ try: │ │ number = int(arg) │ │ except ValueError: │ │ backend = arg │ │ if backend and backend not in BACKENDS: │ │ message('illegal BACKEND: %s' % backend) │ │ sys.exit(1) │ │ - if number is not None and number not in range(1, len(tests.tests)+1): │ │ + if number is not None and number not in list(range(1, len(tests.tests)+1)): │ │ message('illegal test NUMBER: %d' % number) │ │ sys.exit(1) │ │ if cmd == 'run': │ │ tests.run(number, backend) │ │ if tests.failed: │ │ sys.exit(1) │ │ elif cmd == 'update': │ │ --- asciidoc-8.6.10/themes/flask/flask.css │ ├── +++ asciidoc-py-8.6.10/themes/flask/flask.css │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/themes/volnitsky/volnitsky.css │ ├── +++ asciidoc-py-8.6.10/themes/volnitsky/volnitsky.css │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/vim/syntax/asciidoc.vim │ ├── +++ asciidoc-py-8.6.10/vim/syntax/asciidoc.vim │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/xhtml11-quirks.conf │ ├── +++ asciidoc-py-8.6.10/xhtml11-quirks.conf │ │┄ Files identical despite different names │ │ --- asciidoc-8.6.10/xhtml11.conf │ ├── +++ asciidoc-py-8.6.10/xhtml11.conf │ │┄ Files 0% similar despite different names │ │ @@ -78,26 +78,26 @@ │ │ </div></div> │ │ │ │ [image-inlinemacro] │ │ <span class="image{role? {role}}"> │ │ <a class="image" href="{link}"> │ │ {data-uri%}<img src="{imagesdir=}{imagesdir?/}{target}" alt="{alt={target}}"{width? width="{width}"}{height? height="{height}"}{title? title="{title}"} /> │ │ {data-uri#}<img alt="{alt={target}}"{width? width="{width}"}{height? height="{height}"}{title? title="{title}"} │ │ -{data-uri#}{sys:"{python}" -u -c "import mimetypes,sys; print 'src=\x22data:'+mimetypes.guess_type(r'{target}')[0]+';base64,';"} │ │ +{data-uri#}{sys:"{python}" -u -c "import mimetypes,sys; print(b'src=\x22data:' + mimetypes.guess_type(r'{target}')[0].encode('utf-8') + b';base64,');"} │ │ {data-uri#}{sys3:"{python}" -u -c "import base64,sys; base64.encode(sys.stdin,sys.stdout)" < "{eval:os.path.join(r"{indir={outdir}}",r"{imagesdir=}",r"{target}")}"}" /> │ │ {link#}</a> │ │ </span> │ │ │ │ [image-blockmacro] │ │ <div class="imageblock{style? {style}}{role? {role}}{unbreakable-option? unbreakable}"{id? id="{id}"}{align? style="text-align:{align};"}{float? style="float:{float};"}> │ │ <div class="content"> │ │ <a class="image" href="{link}"> │ │ {data-uri%}<img src="{imagesdir=}{imagesdir?/}{target}" alt="{alt={target}}"{width? width="{width}"}{height? height="{height}"} /> │ │ {data-uri#}<img alt="{alt={target}}"{width? width="{width}"}{height? height="{height}"} │ │ -{data-uri#}{sys:"{python}" -u -c "import mimetypes,base64,sys; print 'src=\x22data:'+mimetypes.guess_type(r'{target}')[0]+';base64,'; base64.encode(sys.stdin,sys.stdout)" < "{eval:os.path.join(r"{indir={outdir}}",r"{imagesdir=}",r"{target}")}"}" /> │ │ +{data-uri#}{sys:"{python}" -u -c "import mimetypes,base64,sys; print(b'src=\x22data:'+mimetypes.guess_type(rb'{target}')[0]+';base64,'); base64.encode(sys.stdin,sys.stdout)" < "{eval:os.path.join(r"{indir={outdir}}",r"{imagesdir=}",r"{target}")}"}" /> │ │ {link#}</a> │ │ </div> │ │ <div class="title">{caption={figure-caption} {counter:figure-number}. }{title}</div> │ │ </div> │ │ │ │ [unfloat-blockmacro] │ │ <div style="clear:both;"></div>