Hello community,

here is the log from the commit of package python-panflute for 
openSUSE:Leap:15.2 checked in at 2020-03-15 07:13:28
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2/python-panflute (Old)
 and      /work/SRC/openSUSE:Leap:15.2/.python-panflute.new.3160 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-panflute"

Sun Mar 15 07:13:28 2020 rev:2 rq:785087 version:1.12.5

Changes:
--------
--- /work/SRC/openSUSE:Leap:15.2/python-panflute/python-panflute.changes        
2020-02-22 17:50:01.205477777 +0100
+++ 
/work/SRC/openSUSE:Leap:15.2/.python-panflute.new.3160/python-panflute.changes  
    2020-03-15 07:14:38.425074854 +0100
@@ -1,0 +2,9 @@
+Thu Mar 12 11:32:27 UTC 2020 - Marketa Calabkova <[email protected]>
+
+- Update to version 1.12.5
+  * tweak error messages of panflute.dump
+  * allow slice assignment to element items (via ListContainer)
+  * Tables should now work well without a header or without a body.
+  * stringify() now adds quotes around the contents of a Quoted() element.
+
+-------------------------------------------------------------------

Old:
----
  panflute-1.11.2.tar.gz

New:
----
  panflute-1.12.5.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-panflute.spec ++++++
--- /var/tmp/diff_new_pack.pCOXQY/_old  2020-03-15 07:14:38.705075001 +0100
+++ /var/tmp/diff_new_pack.pCOXQY/_new  2020-03-15 07:14:38.705075001 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-panflute
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -12,17 +12,18 @@
 # license that conforms to the Open Source Definition (Version 1.9)
 # published by the Open Source Initiative.
 
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
+#
 
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-panflute
-Version:        1.11.2
+Version:        1.12.5
 Release:        0
-License:        BSD-3-Clause
 Summary:        Pandoc filters package for Python
-Url:            https://github.com/sergiocorreia/panflute
+License:        BSD-3-Clause
 Group:          Development/Languages/Python
+URL:            https://github.com/sergiocorreia/panflute
 Source:         
https://files.pythonhosted.org/packages/source/p/panflute/panflute-%{version}.tar.gz
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  fdupes
@@ -31,8 +32,8 @@
 BuildRequires:  %{python_module PyYAML}
 BuildRequires:  %{python_module click}
 BuildRequires:  %{python_module future}
-BuildRequires:  %{python_module pytest}
 BuildRequires:  %{python_module pytest-cov}
+BuildRequires:  %{python_module pytest}
 BuildRequires:  python-configparser
 BuildRequires:  python-shutilwhich
 # /SECTION
@@ -61,7 +62,7 @@
 sed -i 's|shutilwhich||' 
%{buildroot}%{python3_sitelib}/panflute-*.egg-info/requires.txt
 
 %files %{python_files}
-%doc README.md README.rst
+%doc README.md
 %license LICENSE
 %python3_only %{_bindir}/panflute
 %python3_only %{_bindir}/panfl

++++++ panflute-1.11.2.tar.gz -> panflute-1.12.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panflute-1.11.2/MANIFEST.in 
new/panflute-1.12.5/MANIFEST.in
--- old/panflute-1.11.2/MANIFEST.in     2019-01-21 09:59:30.000000000 +0100
+++ new/panflute-1.12.5/MANIFEST.in     2020-02-20 06:52:03.000000000 +0100
@@ -1,2 +1,3 @@
 include README.md
 include LICENSE
+include requirements.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panflute-1.11.2/PKG-INFO new/panflute-1.12.5/PKG-INFO
--- old/panflute-1.11.2/PKG-INFO        2019-01-21 10:00:45.000000000 +0100
+++ new/panflute-1.12.5/PKG-INFO        2020-02-20 06:52:18.328729000 +0100
@@ -1,95 +1,61 @@
 Metadata-Version: 2.1
 Name: panflute
-Version: 1.11.2
+Version: 1.12.5
 Summary: Pythonic Pandoc filters
 Home-page: https://github.com/sergiocorreia/panflute
 Author: Sergio Correia
 Author-email: [email protected]
 License: BSD3
-Description: :Date:   January 21, 2019
+Description: # Panflute: Pythonic Pandoc Filters
         
-        .. contents::
-           :depth: 3
-        ..
-        
-        Panflute: Pythonic Pandoc Filters
-        =================================
-        
-        |Python version| |PyPI version| |Development Status| |Build Status|
-        
-        `panflute <http://scorreia.com/software/panflute/>`__ is a Python
-        package that makes creating Pandoc filters fun.
-        
-        For a detailed user guide, documentation, and installation 
instructions,
-        see http://scorreia.com/software/panflute/. For examples that you can
-        use as starting points, check the `examples
-        repo 
<https://github.com/sergiocorreia/panflute-filters/tree/master/filters>`__,
-        the `sample
-        template 
<https://raw.githubusercontent.com/sergiocorreia/panflute/master/docs/source/_static/template.py>`__,
-        or `this github
-        search 
<https://github.com/search?o=desc&q=%22import+panflute%22+OR+%22from+panflute%22+created%3A%3E2016-01-01+language%3APython+extension%3Apy&s=indexed&type=Code&utf8=%E2%9C%93>`__.
-        If you want to contribute, head `here </CONTRIBUTING.md>`__.
+        [![Python 
version](https://img.shields.io/pypi/pyversions/panflute.svg)](https://pypi.python.org/pypi/panflute/)
+        [![PyPI 
version](https://img.shields.io/pypi/v/panflute.svg)](https://pypi.python.org/pypi/panflute/)
+        [![Development 
Status](https://img.shields.io/pypi/status/panflute.svg)](https://pypi.python.org/pypi/panflute/)
+        [![Build 
Status](https://github.com/sergiocorreia/panflute/workflows/CI%20Tests/badge.svg)](https://github.com/sergiocorreia/panflute/actions?query=workflow%3A%22CI+Tests%22)
         
-        Install
-        -------
+        [panflute](http://scorreia.com/software/panflute/) is a Python package 
that makes creating Pandoc filters fun.
         
-        To install panflute, open the command line and type:
+        For a detailed user guide, documentation, and installation 
instructions, see
+        <http://scorreia.com/software/panflute/>.
+        For examples that you can use as starting points, check the [examples 
repo](https://github.com/sergiocorreia/panflute-filters/tree/master/filters), 
the [sample 
template](https://raw.githubusercontent.com/sergiocorreia/panflute/master/docs/source/_static/template.py),
 or [this github 
search](https://github.com/search?o=desc&q=%22import+panflute%22+OR+%22from+panflute%22+created%3A%3E2016-01-01+language%3APython+extension%3Apy&s=indexed&type=Code&utf8=%E2%9C%93).
+        If you want to contribute, head [here](/CONTRIBUTING.md).
+        
+        You might also find useful [this 
presentation](https://github.com/BPLIM/Workshops/raw/master/BPLIM2019/D2_S1_Sergio_Correia_Markdown.pdf)
 on how I use markdown+pandoc+panflute to write research papers (at the Banco 
de Portugal 2019 Workshop on Reproductible Research).
         
-        .. code:: bash
         
-           pip install panflute
+        ## Install
+        
+        To install panflute, open the command line and type:
         
-        Python 2.7+, 3.3+, PyPy, and PyPy3 are supported.
+        ```bash
+        pip install panflute
+        ```
         
-        Uninstall
-        ---------
+        Python 3.6+ and PyPy3 are supported (Python 2.7 and Python 3.3-3.5 
were supported up to version 1.11.4).
         
-        .. code:: bash
+        ## Uninstall
         
-           pip uninstall panflute
+        ```bash
+        pip uninstall panflute
+        ```
         
-        Dev Install
-        -----------
+        ## Dev Install
         
         After cloning the repo and opening the panflute folder:
         
-        ``python setup.py install``
-           installs the package locally
-        ``python setup.py develop``
-           installs locally with a symlink so changes are automatically updated
-        
-        In addition, if you use python2, you need to pasteurize the code before
-        running tests. In this directory, Run
-        
-        .. code:: bash
-        
-           # install pasteurize if you didn't have it yet
-           pip2 install -U future
-           pasteurize -wnj 4 .
-        
-        Contributing
-        ------------
-        
-        Feel free to submit push requests. For consistency, code should comply
-        with `pep8 <https://pypi.python.org/pypi/pep8>`__ (as long as its
-        reasonable), and with the style guides by
-        [@kennethreitz](http://docs.python-guide.org/en/latest/writing/style/)
-        and `google <http://google.github.io/styleguide/pyguide.html>`__. Read
-        more `here </CONTRIBUTING.md>`__.
-        
-        License
-        -------
-        
-        BSD3 license (following ``pandocfilters`` by @jgm).
-        
-        .. |Python version| image:: 
https://img.shields.io/pypi/pyversions/panflute.svg
-           :target: https://pypi.python.org/pypi/panflute/
-        .. |PyPI version| image:: https://img.shields.io/pypi/v/panflute.svg
-           :target: https://pypi.python.org/pypi/panflute/
-        .. |Development Status| image:: 
https://img.shields.io/pypi/status/panflute.svg
-           :target: https://pypi.python.org/pypi/panflute/
-        .. |Build Status| image:: 
https://travis-ci.org/sergiocorreia/panflute.svg?branch=master
-           :target: https://travis-ci.org/sergiocorreia/panflute
+        `python setup.py install`: installs the package locally
+        
+        `python setup.py develop`: installs locally with a symlink so changes 
are automatically updated
+        
+        
+        ## Contributing
+        
+        Feel free to submit push requests. For consistency, code should comply 
with [pep8](https://pypi.python.org/pypi/pep8) (as long as its reasonable), and 
with the style guides by 
[@kennethreitz](http://docs.python-guide.org/en/latest/writing/style/) and 
[google](http://google.github.io/styleguide/pyguide.html). Read more 
[here](/CONTRIBUTING.md).
+        
+        ## License
+        
+        BSD3 license (following  `pandocfilters` by @jgm).
+        
         
 Keywords: pandoc pandocfilters markdown latex
 Platform: UNKNOWN
@@ -101,14 +67,11 @@
 Classifier: License :: OSI Approved :: BSD License
 Classifier: Operating System :: OS Independent
 Classifier: Topic :: Text Processing :: Filters
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: Implementation :: PyPy
-Provides-Extra: pypi
+Description-Content-Type: text/markdown
 Provides-Extra: test
+Provides-Extra: pypi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panflute-1.11.2/README.md 
new/panflute-1.12.5/README.md
--- old/panflute-1.11.2/README.md       2019-01-21 09:59:30.000000000 +0100
+++ new/panflute-1.12.5/README.md       2020-02-20 06:52:03.000000000 +0100
@@ -3,7 +3,7 @@
 [![Python 
version](https://img.shields.io/pypi/pyversions/panflute.svg)](https://pypi.python.org/pypi/panflute/)
 [![PyPI 
version](https://img.shields.io/pypi/v/panflute.svg)](https://pypi.python.org/pypi/panflute/)
 [![Development 
Status](https://img.shields.io/pypi/status/panflute.svg)](https://pypi.python.org/pypi/panflute/)
-[![Build 
Status](https://travis-ci.org/sergiocorreia/panflute.svg?branch=master)](https://travis-ci.org/sergiocorreia/panflute)
+[![Build 
Status](https://github.com/sergiocorreia/panflute/workflows/CI%20Tests/badge.svg)](https://github.com/sergiocorreia/panflute/actions?query=workflow%3A%22CI+Tests%22)
 
 [panflute](http://scorreia.com/software/panflute/) is a Python package that 
makes creating Pandoc filters fun.
 
@@ -12,6 +12,8 @@
 For examples that you can use as starting points, check the [examples 
repo](https://github.com/sergiocorreia/panflute-filters/tree/master/filters), 
the [sample 
template](https://raw.githubusercontent.com/sergiocorreia/panflute/master/docs/source/_static/template.py),
 or [this github 
search](https://github.com/search?o=desc&q=%22import+panflute%22+OR+%22from+panflute%22+created%3A%3E2016-01-01+language%3APython+extension%3Apy&s=indexed&type=Code&utf8=%E2%9C%93).
 If you want to contribute, head [here](/CONTRIBUTING.md).
 
+You might also find useful [this 
presentation](https://github.com/BPLIM/Workshops/raw/master/BPLIM2019/D2_S1_Sergio_Correia_Markdown.pdf)
 on how I use markdown+pandoc+panflute to write research papers (at the Banco 
de Portugal 2019 Workshop on Reproductible Research).
+
 
 ## Install
 
@@ -21,7 +23,7 @@
 pip install panflute
 ```
 
-Python 2.7+, 3.3+, PyPy, and PyPy3 are supported.
+Python 3.6+ and PyPy3 are supported (Python 2.7 and Python 3.3-3.5 were 
supported up to version 1.11.4).
 
 ## Uninstall
 
@@ -33,19 +35,10 @@
 
 After cloning the repo and opening the panflute folder:
 
-`python setup.py install`
-: installs the package locally
-
-`python setup.py develop`
-: installs locally with a symlink so changes are automatically updated
+`python setup.py install`: installs the package locally
 
-In addition, if you use python2, you need to pasteurize the code before 
running tests. In this directory, Run
+`python setup.py develop`: installs locally with a symlink so changes are 
automatically updated
 
-```bash
-# install pasteurize if you didn't have it yet
-pip2 install -U future
-pasteurize -wnj 4 .
-```
 
 ## Contributing
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panflute-1.11.2/README.rst 
new/panflute-1.12.5/README.rst
--- old/panflute-1.11.2/README.rst      2019-01-21 10:00:12.000000000 +0100
+++ new/panflute-1.12.5/README.rst      1970-01-01 01:00:00.000000000 +0100
@@ -1,84 +0,0 @@
-:Date:   January 21, 2019
-
-.. contents::
-   :depth: 3
-..
-
-Panflute: Pythonic Pandoc Filters
-=================================
-
-|Python version| |PyPI version| |Development Status| |Build Status|
-
-`panflute <http://scorreia.com/software/panflute/>`__ is a Python
-package that makes creating Pandoc filters fun.
-
-For a detailed user guide, documentation, and installation instructions,
-see http://scorreia.com/software/panflute/. For examples that you can
-use as starting points, check the `examples
-repo 
<https://github.com/sergiocorreia/panflute-filters/tree/master/filters>`__,
-the `sample
-template 
<https://raw.githubusercontent.com/sergiocorreia/panflute/master/docs/source/_static/template.py>`__,
-or `this github
-search 
<https://github.com/search?o=desc&q=%22import+panflute%22+OR+%22from+panflute%22+created%3A%3E2016-01-01+language%3APython+extension%3Apy&s=indexed&type=Code&utf8=%E2%9C%93>`__.
-If you want to contribute, head `here </CONTRIBUTING.md>`__.
-
-Install
--------
-
-To install panflute, open the command line and type:
-
-.. code:: bash
-
-   pip install panflute
-
-Python 2.7+, 3.3+, PyPy, and PyPy3 are supported.
-
-Uninstall
----------
-
-.. code:: bash
-
-   pip uninstall panflute
-
-Dev Install
------------
-
-After cloning the repo and opening the panflute folder:
-
-``python setup.py install``
-   installs the package locally
-``python setup.py develop``
-   installs locally with a symlink so changes are automatically updated
-
-In addition, if you use python2, you need to pasteurize the code before
-running tests. In this directory, Run
-
-.. code:: bash
-
-   # install pasteurize if you didn't have it yet
-   pip2 install -U future
-   pasteurize -wnj 4 .
-
-Contributing
-------------
-
-Feel free to submit push requests. For consistency, code should comply
-with `pep8 <https://pypi.python.org/pypi/pep8>`__ (as long as its
-reasonable), and with the style guides by
-[@kennethreitz](http://docs.python-guide.org/en/latest/writing/style/)
-and `google <http://google.github.io/styleguide/pyguide.html>`__. Read
-more `here </CONTRIBUTING.md>`__.
-
-License
--------
-
-BSD3 license (following ``pandocfilters`` by @jgm).
-
-.. |Python version| image:: https://img.shields.io/pypi/pyversions/panflute.svg
-   :target: https://pypi.python.org/pypi/panflute/
-.. |PyPI version| image:: https://img.shields.io/pypi/v/panflute.svg
-   :target: https://pypi.python.org/pypi/panflute/
-.. |Development Status| image:: https://img.shields.io/pypi/status/panflute.svg
-   :target: https://pypi.python.org/pypi/panflute/
-.. |Build Status| image:: 
https://travis-ci.org/sergiocorreia/panflute.svg?branch=master
-   :target: https://travis-ci.org/sergiocorreia/panflute
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panflute-1.11.2/panflute/__init__.py 
new/panflute-1.12.5/panflute/__init__.py
--- old/panflute-1.11.2/panflute/__init__.py    2019-01-21 10:00:24.000000000 
+0100
+++ new/panflute-1.12.5/panflute/__init__.py    2020-02-20 06:52:03.000000000 
+0100
@@ -5,13 +5,7 @@
 Panflute is a Python package that makes `Pandoc <http://pandoc.org/>`_
 filters fun to write. (`Installation <install.html>`_)
 """
-from __future__ import unicode_literals
-from __future__ import print_function
-from __future__ import division
-from __future__ import absolute_import
 
-from future import standard_library
-standard_library.install_aliases()
 from .containers import ListContainer, DictContainer
 
 from .base import Element, Block, Inline, MetaValue
@@ -38,6 +32,6 @@
 from .tools import (
     stringify, yaml_filter, shell, run_pandoc, convert_text, debug, get_option)
 
-from .autofilter import main, panfl, get_filter_dir, stdio
+from .autofilter import main, panfl, get_filter_dirs, stdio
 
 from .version import __version__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panflute-1.11.2/panflute/autofilter.py 
new/panflute-1.12.5/panflute/autofilter.py
--- old/panflute-1.11.2/panflute/autofilter.py  2019-01-21 10:00:26.000000000 
+0100
+++ new/panflute-1.12.5/panflute/autofilter.py  2020-02-20 06:52:03.000000000 
+0100
@@ -5,18 +5,12 @@
 
 Exports ``main`` and ``panfl``.
 """
-from __future__ import unicode_literals
-from __future__ import print_function
-from __future__ import division
-from __future__ import absolute_import
-
-from builtins import open
-from future import standard_library
-standard_library.install_aliases()
+
 import os
 import os.path as p
 import sys
 import click
+from io import StringIO
 
 from .io import load, dump
 from .tools import debug
@@ -26,21 +20,35 @@
 reduced_sys_path = [dir_ for dir_ in sys.path if (dir_ not in ('', '.')) and 
p.isdir(dir_)]
 
 
-def get_filter_dir(hardcoded=True):
+def get_filter_dirs(hardcoded=True):
+    """
+    Return directories where we expect to find filters.
+
+    If hardcoded=True use paths we know ex ante; if False ask Pandoc for a list
+    """
     if hardcoded:
         if os.name == 'nt':
-            return p.join(os.environ["APPDATA"], "pandoc", "filters")
+            d1 = [p.join(os.environ["APPDATA"], "pandoc", "filters")]
+            return d1
         else:
-            return p.join(os.environ["HOME"], ".pandoc", "filters")
+            d1 = p.join(os.environ["HOME"], ".pandoc", "filters")
+            d2 = p.join(os.environ["HOME"], ".local", "share", "pandoc", 
"filters")
+            return [d1, d2]
     else:
         from .tools import run_pandoc
+        
         # Extract $DATADIR
         info = run_pandoc(args=['--version']).splitlines()
         prefix = "Default user data directory: "
         info = [row for row in info if row.startswith(prefix)]
         assert len(info) == 1
         data_dir = info[0][len(prefix):]
-        return p.normpath(p.expanduser(p.expandvars(p.join(data_dir, 
'filters'))))
+
+        # data_dir might contain multiple folders:
+        # Default user data directory: /home/runner/.local/share/pandoc or 
/home/runner/.pandoc/filters
+        data_dir = data_dir.split(' or ')
+        data_dir = [p.normpath(p.expanduser(p.expandvars(p.join(d, 
'filters')))) for d in data_dir]
+        return data_dir
 
 
 def stdio(filters=None, search_dirs=None, data_dir=True, sys_path=True, 
panfl_=False, input_stream=None, output_stream=None):
@@ -61,8 +69,8 @@
         for debug purpose
     :return: None
     """
+
     doc = load(input_stream)
-    # meta = doc.metadata  # Local variable 'meta' value is not used
     verbose = doc.get_metadata('panflute-verbose', False)
 
     if search_dirs is None:
@@ -86,16 +94,20 @@
         # default panflute behaviour:
         search_dirs.append('.')
         if data_dir:
-            search_dirs.append(get_filter_dir())
+            search_dirs.extend(get_filter_dirs())
         if sys_path:
             search_dirs += sys.path
     else:
         # panfl/pandoctools behaviour:
         if data_dir:
-            search_dirs.append(get_filter_dir())
+            search_dirs.extend(get_filter_dirs())
         if sys_path:
             search_dirs += reduced_sys_path
 
+    if verbose:
+        debug('panflute will search for filters in the following folders:')
+        debug(' '.join('"{}"'.format(f) for f in search_dirs))
+
     # Display message (tests that everything is working ok)
     msg = doc.get_metadata('panflute-echo', False)
     if msg:
@@ -248,6 +260,9 @@
         else:
             raise Exception("filter not found: " + filter_)
 
+    # Intercept any print() statements made by filters (which would cause 
Pandoc to fail)
+    sys.stdout = alt_stdout = StringIO()
+
     for filter_, filter_path, module_, extra_dir in filter_paths:
         if verbose:
             debug("panflute: running filter <{}>".format(filter_))
@@ -266,5 +281,15 @@
                 raise Exception(e)
         if verbose:
             debug("panflute: filter <{}> completed".format(filter_))
+        
+        alt_stdout_data = alt_stdout.getvalue()
+        if alt_stdout_data:
+            debug('[PANFLUTE WARNING] Filter "{}" wrote to stdout, but Pandoc 
does not allow that'.format(filter_))
+            debug(alt_stdout_data)
+            sys.stderr.flush()
+            sys.stdout = alt_stdout = StringIO()
+
+    # Restore stdout
+    sys.stdout = sys.__stdout__
 
     return doc
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panflute-1.11.2/panflute/base.py 
new/panflute-1.12.5/panflute/base.py
--- old/panflute-1.11.2/panflute/base.py        2019-01-21 10:00:26.000000000 
+0100
+++ new/panflute-1.12.5/panflute/base.py        2020-02-20 06:52:03.000000000 
+0100
@@ -1,28 +1,14 @@
 """
 Base classes and methods of all Pandoc elements
 """
-from __future__ import unicode_literals
-from __future__ import print_function
-from __future__ import division
-from __future__ import absolute_import
 
 # ---------------------------
 # Imports
 # ---------------------------
 
-from future import standard_library
-standard_library.install_aliases()
-import sys
-py2 = sys.version_info[0] == 2
-if py2: str = basestring
-
 from operator import attrgetter
-if py2:
-    from collections import OrderedDict, MutableSequence, MutableMapping
-else:
-    from collections import OrderedDict
-    from collections.abc import MutableSequence, MutableMapping
-
+from collections import OrderedDict
+from collections.abc import MutableSequence, MutableMapping
 from itertools import chain
 
 from .containers import ListContainer, DictContainer
@@ -286,7 +272,7 @@
                 raise TypeError(type(obj))
             setattr(self, child, ans)
 
-        # Then apply the action to the element
+        # Then apply the action to the root element
         altered = action(self, doc)
         return self if altered is None else altered
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panflute-1.11.2/panflute/containers.py 
new/panflute-1.12.5/panflute/containers.py
--- old/panflute-1.11.2/panflute/containers.py  2019-01-21 10:00:26.000000000 
+0100
+++ new/panflute-1.12.5/panflute/containers.py  2020-02-20 06:52:03.000000000 
+0100
@@ -2,26 +2,13 @@
 These containers keep track of the identity of the parent
 object, and the attribute of the parent object that they correspond to.
 """
-from __future__ import print_function
-from __future__ import unicode_literals
-from __future__ import division
-from __future__ import absolute_import
 
 # ---------------------------
 # Imports
 # ---------------------------
 
-from future import standard_library
-standard_library.install_aliases()
-import sys
-py2 = sys.version_info[0] == 2
-if py2: str = basestring
-
-if py2:
-    from collections import OrderedDict, MutableSequence, MutableMapping
-else:
-    from collections import OrderedDict
-    from collections.abc import MutableSequence, MutableMapping
+from collections import OrderedDict
+from collections.abc import MutableSequence, MutableMapping
 from .utils import check_type, encode_dict  # check_group
 
 
@@ -52,11 +39,7 @@
 
     __slots__ = ['list', 'oktypes', 'parent', 'location']
 
-    def __init__(self, *args, **_3to2kwargs):
-        if 'parent' in _3to2kwargs: parent = _3to2kwargs['parent']; del 
_3to2kwargs['parent']
-        else: parent = None
-        if 'oktypes' in _3to2kwargs: oktypes = _3to2kwargs['oktypes']; del 
_3to2kwargs['oktypes']
-        else: oktypes = object
+    def __init__(self, *args, oktypes=object, parent=None):
         self.oktypes = oktypes
         self.parent = parent
         self.location = None  # Cannot be set through __init__
@@ -84,7 +67,10 @@
         del self.list[i]
 
     def __setitem__(self, i, v):
-        v = check_type(v, self.oktypes)
+        if isinstance(i, slice):
+            v = (check_type(x, self.oktypes) for x in v)
+        else:
+            v = check_type(v, self.oktypes)
         self.list[i] = v
 
     def insert(self, i, v):
@@ -116,11 +102,7 @@
 
     __slots__ = ['dict', 'oktypes', 'parent', 'location']
 
-    def __init__(self, *args, **kwargs):
-        if 'parent' in kwargs: parent = kwargs['parent']; del kwargs['parent']
-        else: parent = None
-        if 'oktypes' in kwargs: oktypes = kwargs['oktypes']; del 
kwargs['oktypes']
-        else: oktypes = object
+    def __init__(self, *args, oktypes=object, parent=None, **kwargs):
         self.oktypes = oktypes
         self.parent = parent
         self.location = None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panflute-1.11.2/panflute/elements.py 
new/panflute-1.12.5/panflute/elements.py
--- old/panflute-1.11.2/panflute/elements.py    2019-01-21 10:00:33.000000000 
+0100
+++ new/panflute-1.12.5/panflute/elements.py    2020-02-20 06:52:03.000000000 
+0100
@@ -1,25 +1,17 @@
-from __future__ import unicode_literals
-from __future__ import print_function
-from __future__ import division
-from __future__ import absolute_import
+"""
+Classes corresponding to Pandoc elements
+"""
+
 # ---------------------------
 # Imports
 # ---------------------------
 
-from builtins import dict
-from builtins import str
-from future import standard_library
-standard_library.install_aliases()
 from collections import OrderedDict
 
 from .utils import check_type, check_group, encode_dict
 from .containers import ListContainer, DictContainer
 from .base import Element, Block, Inline, MetaValue
 
-import sys
-py2 = sys.version_info[0] == 2
-if py2: str = basestring
-
 
 # ---------------------------
 # Special Root Class
@@ -56,13 +48,7 @@
 
     _children = ['metadata', 'content']
 
-    def __init__(self, *args, **_3to2kwargs):
-        if 'api_version' in _3to2kwargs: api_version = 
_3to2kwargs['api_version']; del _3to2kwargs['api_version']
-        else: api_version = None
-        if 'format' in _3to2kwargs: format = _3to2kwargs['format']; del 
_3to2kwargs['format']
-        else: format = 'html'
-        if 'metadata' in _3to2kwargs: metadata = _3to2kwargs['metadata']; del 
_3to2kwargs['metadata']
-        else: metadata = {}
+    def __init__(self, *args, metadata={}, format='html', api_version=None):
         self._set_content(args, Block)
         self.metadata = metadata
         self.format = format  # Output format
@@ -373,18 +359,11 @@
     __slots__ = ['level', '_content', 'identifier', 'classes', 'attributes']
     _children = ['content']
 
-    def __init__(self, *args, **_3to2kwargs):
-        if 'attributes' in _3to2kwargs: attributes = 
_3to2kwargs['attributes']; del _3to2kwargs['attributes']
-        else: attributes = {}
-        if 'classes' in _3to2kwargs: classes = _3to2kwargs['classes']; del 
_3to2kwargs['classes']
-        else: classes = []
-        if 'identifier' in _3to2kwargs: identifier = 
_3to2kwargs['identifier']; del _3to2kwargs['identifier']
-        else: identifier = ''
-        if 'level' in _3to2kwargs: level = _3to2kwargs['level']; del 
_3to2kwargs['level']
-        else: level = 1
+    def __init__(self, *args, level=1,
+                 identifier='', classes=[], attributes={}):
         self.level = check_type(level, int)
-        if not 0 < self.level <= 6:
-            raise TypeError('Header level not between 1 and 6')
+        if not 0 < self.level <= 10:
+            raise TypeError('Header level not between 1 and 10')
         self._set_ica(identifier, classes, attributes)
         self._set_content(args, Inline)
 
@@ -409,13 +388,7 @@
     __slots__ = ['_content', 'identifier', 'classes', 'attributes']
     _children = ['content']
 
-    def __init__(self, *args, **_3to2kwargs):
-        if 'attributes' in _3to2kwargs: attributes = 
_3to2kwargs['attributes']; del _3to2kwargs['attributes']
-        else: attributes = {}
-        if 'classes' in _3to2kwargs: classes = _3to2kwargs['classes']; del 
_3to2kwargs['classes']
-        else: classes = []
-        if 'identifier' in _3to2kwargs: identifier = 
_3to2kwargs['identifier']; del _3to2kwargs['identifier']
-        else: identifier = ''
+    def __init__(self, *args, identifier='', classes=[], attributes={}):
         self._set_ica(identifier, classes, attributes)
         self._set_content(args, Block)
 
@@ -440,13 +413,7 @@
     __slots__ = ['_content', 'identifier', 'classes', 'attributes']
     _children = ['content']
 
-    def __init__(self, *args, **_3to2kwargs):
-        if 'attributes' in _3to2kwargs: attributes = 
_3to2kwargs['attributes']; del _3to2kwargs['attributes']
-        else: attributes = {}
-        if 'classes' in _3to2kwargs: classes = _3to2kwargs['classes']; del 
_3to2kwargs['classes']
-        else: classes = []
-        if 'identifier' in _3to2kwargs: identifier = 
_3to2kwargs['identifier']; del _3to2kwargs['identifier']
-        else: identifier = ''
+    def __init__(self, *args, identifier='', classes=[], attributes={}):
         self._set_ica(identifier, classes, attributes)
         self._set_content(args, Inline)
 
@@ -467,9 +434,7 @@
     __slots__ = ['quote_type', '_content']
     _children = ['content']
 
-    def __init__(self, *args, **_3to2kwargs):
-        if 'quote_type' in _3to2kwargs: quote_type = 
_3to2kwargs['quote_type']; del _3to2kwargs['quote_type']
-        else: quote_type = 'DoubleQuote'
+    def __init__(self, *args, quote_type='DoubleQuote'):
         self.quote_type = check_group(quote_type, QUOTE_TYPES)
         self._set_content(args, Inline)
 
@@ -495,9 +460,7 @@
     __slots__ = ['_content', '_citations']
     _children = ['content', 'citations']
 
-    def __init__(self, *args, **_3to2kwargs):
-        if 'citations' in _3to2kwargs: citations = _3to2kwargs['citations']; 
del _3to2kwargs['citations']
-        else: citations = []
+    def __init__(self, *args, citations=[]):
         self._set_content(args, Inline)
         self.citations = citations
 
@@ -615,17 +578,8 @@
                  'identifier', 'classes', 'attributes']
     _children = ['content']
 
-    def __init__(self, *args, **_3to2kwargs):
-        if 'attributes' in _3to2kwargs: attributes = 
_3to2kwargs['attributes']; del _3to2kwargs['attributes']
-        else: attributes = {}
-        if 'classes' in _3to2kwargs: classes = _3to2kwargs['classes']; del 
_3to2kwargs['classes']
-        else: classes = []
-        if 'identifier' in _3to2kwargs: identifier = 
_3to2kwargs['identifier']; del _3to2kwargs['identifier']
-        else: identifier = ''
-        if 'title' in _3to2kwargs: title = _3to2kwargs['title']; del 
_3to2kwargs['title']
-        else: title = ''
-        if 'url' in _3to2kwargs: url = _3to2kwargs['url']; del 
_3to2kwargs['url']
-        else: url = ''
+    def __init__(self, *args, url='', title='',
+                 identifier='', classes=[], attributes={}):
         self._set_content(args, Inline)
         self._set_ica(identifier, classes, attributes)
         self.url = check_type(url, str)
@@ -659,17 +613,8 @@
                  'identifier', 'classes', 'attributes']
     _children = ['content']
 
-    def __init__(self, *args, **_3to2kwargs):
-        if 'attributes' in _3to2kwargs: attributes = 
_3to2kwargs['attributes']; del _3to2kwargs['attributes']
-        else: attributes = {}
-        if 'classes' in _3to2kwargs: classes = _3to2kwargs['classes']; del 
_3to2kwargs['classes']
-        else: classes = []
-        if 'identifier' in _3to2kwargs: identifier = 
_3to2kwargs['identifier']; del _3to2kwargs['identifier']
-        else: identifier = ''
-        if 'title' in _3to2kwargs: title = _3to2kwargs['title']; del 
_3to2kwargs['title']
-        else: title = ''
-        if 'url' in _3to2kwargs: url = _3to2kwargs['url']; del 
_3to2kwargs['url']
-        else: url = ''
+    def __init__(self, *args, url='', title='',
+                 identifier='', classes=[], attributes={}):
         self._set_content(args, Inline)
         self._set_ica(identifier, classes, attributes)
         self.url = check_type(url, str)
@@ -736,7 +681,7 @@
 
     :param text: a string of raw text with another underlying format
     :type text: :class:`str`
-    :param format: Format of the raw text ('html', 'tex', 'latex' or 'context')
+    :param format: Format of the raw text ('html', 'tex', 'latex', 'context', 
etc.)
     :type format: ``str``
     :Base: :class:`Block`
      """
@@ -807,7 +752,7 @@
 
     :param text: a string of raw text with another underlying format
     :type text: :class:`str`
-    :param format: Format of the raw text ('html', 'tex', 'latex' or 'context')
+    :param format: Format of the raw text ('html', 'tex', 'latex', 'context', 
etc.)
     :type format: ``str``
     :Base: :class:`Inline`
      """
@@ -881,13 +826,7 @@
     __slots__ = ['_content', 'start', 'style', 'delimiter']
     _children = ['content']
 
-    def __init__(self, *args, **_3to2kwargs):
-        if 'delimiter' in _3to2kwargs: delimiter = _3to2kwargs['delimiter']; 
del _3to2kwargs['delimiter']
-        else: delimiter = 'Period'
-        if 'style' in _3to2kwargs: style = _3to2kwargs['style']; del 
_3to2kwargs['style']
-        else: style = 'Decimal'
-        if 'start' in _3to2kwargs: start = _3to2kwargs['start']; del 
_3to2kwargs['start']
-        else: start = 1
+    def __init__(self, *args, start=1, style='Decimal', delimiter='Period'):
         self._set_content(args, ListItem)
         self.start = check_type(start, int)
         self.style = check_group(style, LIST_NUMBER_STYLES)
@@ -1113,42 +1052,50 @@
                  'alignment', 'width', 'rows', 'cols']
     _children = ['header', 'content', 'caption']
 
-    def __init__(self, *args, **_3to2kwargs):
 
-        if 'width' in _3to2kwargs: width = _3to2kwargs['width']; del 
_3to2kwargs['width']
-        else: width = None
-        if 'alignment' in _3to2kwargs: alignment = _3to2kwargs['alignment']; 
del _3to2kwargs['alignment']
-        else: alignment = None
-        if 'caption' in _3to2kwargs: caption = _3to2kwargs['caption']; del 
_3to2kwargs['caption']
-        else: caption = None
-        if 'header' in _3to2kwargs: header = _3to2kwargs['header']; del 
_3to2kwargs['header']
-        else: header = None
+    def __init__(self, *args, header=None, caption=None,
+                 alignment=None, width=None):
+
         self._set_content(args, TableRow)
-        self.rows = len(self.content)
-        self.cols = len(self.content[0].content)
         self.header = header
         self.caption = caption if caption else []
 
+        self.rows = len(self.content)
+        self.cols = 0
+
+        if self.content:
+            self.cols = len(self.content[0].content)
+        
+        if self.header:
+            header_cols = len(self.header.content)
+            if not self.cols:
+                self.cols = header_cols
+            elif self.cols != header_cols:
+                msg = '\n\nInvalid number of header columns.'
+                msg += 'Expected {} but received {}\n'.format(self.cols, 
header_cols)
+                raise IndexError(msg)
+        
         if alignment is None:
             self.alignment = ['AlignDefault'] * self.cols
         else:
-            self.alignment = [check_group(a, TABLE_ALIGNMENT)
-                              for a in alignment]
-            if len(self.alignment) != self.cols:
-                raise IndexError('alignment has an incorrect number of cols')
+            self.alignment = [check_group(a, TABLE_ALIGNMENT) for a in 
alignment]
+            if self.cols != len(self.alignment):
+                msg = '\n\nInvalid number of alignment columns.'
+                msg += 'Expected {} but received {}\n'.format(self.cols, 
len(self.alignment))
+                raise IndexError(msg)
 
         if width is None:
             self.width = [0.0] * self.cols
         else:
             self.width = [check_type(w, (float, int)) for w in width]
-            if len(self.width) != self.cols:
-                raise IndexError('width has an incorrect number of cols')
+            if self.cols != len(self.width):
+                msg = '\n\nInvalid number of width columns.'
+                msg += 'Expected {} but received {}\n'.format(self.cols, 
len(self.width))
+                raise IndexError(msg)
+
 
     @property
     def header(self):
-        if self._header is not None:
-            self._header.parent = self
-            self._header.location = 'header'
         return self._header
 
     @header.setter
@@ -1159,8 +1106,10 @@
 
         value = value.content if isinstance(value, TableRow) else list(value)
         self._header = TableRow(*value)
-        if len(value) != self.cols:
-            msg = 'table header has an incorrect number of cols:'
+        self._header.parent = self
+        self._header.location = 'header'
+        if hasattr(self, 'cols') and len(value) != self.cols:
+            msg = 'table header has an incorrect number of columns:'
             msg += ' {} rows but expected {}'.format(len(value), self.cols)
             raise IndexError(msg)
 
@@ -1378,8 +1327,45 @@
 
 MATH_FORMATS = {'DisplayMath', 'InlineMath'}
 
-RAW_FORMATS = {'html', 'tex', 'latex', 'context', 'rtf', 'opendocument',
-               'noteref', 'openxml', 'icml'}
+RAW_FORMATS = {'tex',
+               'latex',
+               'html',
+               'context',
+               'rtf',
+               'opendocument',
+               'noteref',
+               'openxml',
+               'icml',
+               'commonmark',
+               'creole',
+               'docbook',
+               'docx',
+               'dokuwiki',
+               'epub',
+               'fb2',
+               'gfm',
+               'haddock',
+               'ipynb',
+               'jats',
+               'json',
+               'man',
+               'markdown',
+               'markdown_github',
+               'markdown_mmd',
+               'markdown_phpextra',
+               'markdown_strict',
+               'mediawiki',
+               'muse',
+               'native',
+               'odt',
+               'opml',
+               'org',
+               'rst',
+               't2t',
+               'textile',
+               'tikiwiki',
+               'twiki',
+               'vimwiki'}
 
 SPECIAL_ELEMENTS = LIST_NUMBER_STYLES | LIST_NUMBER_DELIMITERS | \
     MATH_FORMATS | TABLE_ALIGNMENT | QUOTE_TYPES | CITATION_MODE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panflute-1.11.2/panflute/io.py 
new/panflute-1.12.5/panflute/io.py
--- old/panflute-1.11.2/panflute/io.py  2019-01-21 10:00:27.000000000 +0100
+++ new/panflute-1.12.5/panflute/io.py  2020-02-20 06:52:03.000000000 +0100
@@ -1,13 +1,12 @@
-from __future__ import unicode_literals
-from __future__ import print_function
-from __future__ import division
-from __future__ import absolute_import
+"""
+I/O related functions
+"""
+
+
 # ---------------------------
 # Imports
 # ---------------------------
 
-from future import standard_library
-standard_library.install_aliases()
 from .elements import Element, Doc, from_json, ListContainer
 
 # These will get modified if using Pandoc legacy (<1.8)
@@ -22,8 +21,6 @@
 from collections import OrderedDict
 from functools import partial
 
-py2 = sys.version_info[0] == 2
-
 
 # ---------------------------
 # Functions
@@ -56,7 +53,7 @@
     """
 
     if input_stream is None:
-        input_stream = io.open(sys.stdin.fileno()) if py2 else 
io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8')
+        input_stream = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8')
 
     # Load JSON and validate it
     doc = json.load(input_stream, object_pairs_hook=from_json)
@@ -130,9 +127,12 @@
         (default is :data:`sys.stdout`)
     """
 
-    assert type(doc) == Doc, "panflute.dump needs input of type panflute.Doc"
+    if not isinstance(doc, Doc):
+        msg = 'panflute.dump needs input of type "panflute.Doc" but received 
one of type "{}"'.format(type(doc).__name__)
+        raise TypeError(msg)
+
     if output_stream is None:
-        sys.stdout = codecs.getwriter("utf-8")(sys.stdout) if py2 else 
codecs.getwriter("utf-8")(sys.stdout.detach())
+        sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
         output_stream = sys.stdout
 
     # Switch to legacy JSON output; eg: {'t': 'Space', 'c': []}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panflute-1.11.2/panflute/tools.py 
new/panflute-1.12.5/panflute/tools.py
--- old/panflute-1.11.2/panflute/tools.py       2019-01-21 10:00:29.000000000 
+0100
+++ new/panflute-1.12.5/panflute/tools.py       2020-02-20 06:52:03.000000000 
+0100
@@ -1,13 +1,12 @@
-from __future__ import print_function
-from __future__ import unicode_literals
-from __future__ import division
-from __future__ import absolute_import
+"""
+Useful (but not essential) functions for writing panflute filters
+"""
+
+
 # ---------------------------
 # Imports
 # ---------------------------
 
-from future import standard_library
-standard_library.install_aliases()
 from .base import Element
 from .elements import *
 from .io import dump
@@ -20,20 +19,11 @@
 import yaml
 import shlex
 
-# shutil.which: new in version 3.3
-try:
-    from shutil import which
-except ImportError:
-    from shutilwhich import which
-
+from shutil import which
 from subprocess import Popen, PIPE
 from functools import partial
 
 
-py2 = sys.version_info[0] == 2
-if py2: str = basestring
-
-
 # ---------------------------
 # Constants
 # ---------------------------
@@ -205,6 +195,14 @@
             ans = ''
         else:
             ans = ''
+
+        # Add quotes around the contents of Quoted()
+        if type(e.parent) == Quoted:
+            if e.index == 0:
+                ans = '"' + ans
+            if e.index == len(e.container) - 1:
+                ans += '"'
+        
         answer.append(ans)
 
     answer = []
@@ -338,8 +336,10 @@
     proc = Popen([pandoc_path] + args, stdin=PIPE, stdout=PIPE, stderr=PIPE)
     out, err = proc.communicate(input=text.encode('utf-8'))
     exitcode = proc.returncode
+    if err:
+        debug(err.decode('utf-8'))
     if exitcode != 0:
-        raise IOError(err)
+        raise IOError('')
     return out.decode('utf-8')
 
 
@@ -522,10 +522,9 @@
 
 
 def get_option(options=None, local_tag=None, doc=None, doc_tag=None, 
default=None, error_on_none=True):
-    """ fetch an option variable, 
-    from either a local (element) level option/attribute tag, 
-    document level metadata tag,
-    or a default
+    """
+    Fetch an option variable from either a local (element) level 
option/attribute tag,
+    a document level metadata tag, or a default.
 
      :type options: ``dict``
      :type local_tag: ``str``
@@ -539,9 +538,13 @@
     Also, if error_on_none=True and the final variable is None, then a 
ValueError will be raised  
 
     In this manner you can set global variables, which can be optionally 
overriden at a local level.
-    For example, to apply different styles to docx text
+    For example, the two files below show how to apply different styles to 
docx text:
+
+    **main.md:**
+
+    .. code-block:: none
+        :linenos:
 
-    main.md:
         ------------------
         style-div:
             name: MyStyle
@@ -555,7 +558,11 @@
         some more text
         :::
 
-    style_filter.py:
+    **style_filter.py:**
+
+    .. code-block:: python
+        :linenos:
+
         import panflute as pf
 
         def action(elem, doc):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panflute-1.11.2/panflute/utils.py 
new/panflute-1.12.5/panflute/utils.py
--- old/panflute-1.11.2/panflute/utils.py       2019-01-21 10:00:27.000000000 
+0100
+++ new/panflute-1.12.5/panflute/utils.py       2020-02-20 06:52:03.000000000 
+0100
@@ -1,17 +1,11 @@
 """
 Auxiliary functions that have no dependencies
 """
-from __future__ import unicode_literals
-from __future__ import print_function
-from __future__ import division
-from __future__ import absolute_import
+
 # ---------------------------
 # Imports
 # ---------------------------
 
-from future import standard_library
-standard_library.install_aliases()
-from builtins import object
 from collections import OrderedDict
 import sys
 import os.path as p
@@ -22,16 +16,48 @@
 # Functions
 # ---------------------------
 
+
+def get_caller_name():
+    '''Get the name of the calling Element
+
+    This is just the name of the Class of the __init__ calling function
+    '''
+
+    # References:
+    # 
https://jugad2.blogspot.com/2015/09/find-caller-and-callers-caller-of.html
+    # https://stackoverflow.com/a/47956089/3977107
+    # https://stackoverflow.com/a/11799376/3977107
+
+    pos = 1
+    while True:
+        pos += 1
+        try:
+            callingframe = sys._getframe(pos)
+        except ValueError:
+            return 'Panflute'
+        #print(pos, callingframe.f_code.co_name, file=sys.stderr)
+
+        if callingframe.f_code.co_name == '__init__':
+            class_name = callingframe.f_locals['self'].__class__.__name__
+            if 'Container' not in class_name:
+                return class_name
+
+
 def check_type(value, oktypes):
     # This allows 'Space' instead of 'Space()'
     if callable(value):
         value = value()
-    if not isinstance(value, oktypes):
-        tag = type(value).__name__
-        msg = 'received {} but expected {}'.format(tag, oktypes)
-        raise TypeError(msg)
-    else:
+    
+    if isinstance(value, oktypes):
         return value
+    
+    # Invalid type
+    caller = get_caller_name()
+    tag = type(value).__name__
+    #oktypes_names = [x.name for x in oktypes]
+    #print(oktypes, file=sys.stderr)
+    msg = '\n\nElement "{}" received "{}" but expected {}\n'.format(caller, 
tag, oktypes)
+    raise TypeError(msg)
 
 
 def check_group(value, group):
@@ -51,7 +77,7 @@
 # Classes
 # ---------------------------
 
-class ContextImport(object):
+class ContextImport:
     """
     Import module context manager.
     Temporarily prepends extra dir
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panflute-1.11.2/panflute/version.py 
new/panflute-1.12.5/panflute/version.py
--- old/panflute-1.11.2/panflute/version.py     2019-01-21 09:59:30.000000000 
+0100
+++ new/panflute-1.12.5/panflute/version.py     2020-02-20 06:52:03.000000000 
+0100
@@ -1 +1,5 @@
-__version__ = '1.11.2'
+"""
+Panflute version
+"""
+
+__version__ = '1.12.5'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panflute-1.11.2/panflute.egg-info/PKG-INFO 
new/panflute-1.12.5/panflute.egg-info/PKG-INFO
--- old/panflute-1.11.2/panflute.egg-info/PKG-INFO      2019-01-21 
10:00:44.000000000 +0100
+++ new/panflute-1.12.5/panflute.egg-info/PKG-INFO      2020-02-20 
06:52:18.000000000 +0100
@@ -1,95 +1,61 @@
 Metadata-Version: 2.1
 Name: panflute
-Version: 1.11.2
+Version: 1.12.5
 Summary: Pythonic Pandoc filters
 Home-page: https://github.com/sergiocorreia/panflute
 Author: Sergio Correia
 Author-email: [email protected]
 License: BSD3
-Description: :Date:   January 21, 2019
+Description: # Panflute: Pythonic Pandoc Filters
         
-        .. contents::
-           :depth: 3
-        ..
-        
-        Panflute: Pythonic Pandoc Filters
-        =================================
-        
-        |Python version| |PyPI version| |Development Status| |Build Status|
-        
-        `panflute <http://scorreia.com/software/panflute/>`__ is a Python
-        package that makes creating Pandoc filters fun.
-        
-        For a detailed user guide, documentation, and installation 
instructions,
-        see http://scorreia.com/software/panflute/. For examples that you can
-        use as starting points, check the `examples
-        repo 
<https://github.com/sergiocorreia/panflute-filters/tree/master/filters>`__,
-        the `sample
-        template 
<https://raw.githubusercontent.com/sergiocorreia/panflute/master/docs/source/_static/template.py>`__,
-        or `this github
-        search 
<https://github.com/search?o=desc&q=%22import+panflute%22+OR+%22from+panflute%22+created%3A%3E2016-01-01+language%3APython+extension%3Apy&s=indexed&type=Code&utf8=%E2%9C%93>`__.
-        If you want to contribute, head `here </CONTRIBUTING.md>`__.
+        [![Python 
version](https://img.shields.io/pypi/pyversions/panflute.svg)](https://pypi.python.org/pypi/panflute/)
+        [![PyPI 
version](https://img.shields.io/pypi/v/panflute.svg)](https://pypi.python.org/pypi/panflute/)
+        [![Development 
Status](https://img.shields.io/pypi/status/panflute.svg)](https://pypi.python.org/pypi/panflute/)
+        [![Build 
Status](https://github.com/sergiocorreia/panflute/workflows/CI%20Tests/badge.svg)](https://github.com/sergiocorreia/panflute/actions?query=workflow%3A%22CI+Tests%22)
         
-        Install
-        -------
+        [panflute](http://scorreia.com/software/panflute/) is a Python package 
that makes creating Pandoc filters fun.
         
-        To install panflute, open the command line and type:
+        For a detailed user guide, documentation, and installation 
instructions, see
+        <http://scorreia.com/software/panflute/>.
+        For examples that you can use as starting points, check the [examples 
repo](https://github.com/sergiocorreia/panflute-filters/tree/master/filters), 
the [sample 
template](https://raw.githubusercontent.com/sergiocorreia/panflute/master/docs/source/_static/template.py),
 or [this github 
search](https://github.com/search?o=desc&q=%22import+panflute%22+OR+%22from+panflute%22+created%3A%3E2016-01-01+language%3APython+extension%3Apy&s=indexed&type=Code&utf8=%E2%9C%93).
+        If you want to contribute, head [here](/CONTRIBUTING.md).
+        
+        You might also find useful [this 
presentation](https://github.com/BPLIM/Workshops/raw/master/BPLIM2019/D2_S1_Sergio_Correia_Markdown.pdf)
 on how I use markdown+pandoc+panflute to write research papers (at the Banco 
de Portugal 2019 Workshop on Reproductible Research).
         
-        .. code:: bash
         
-           pip install panflute
+        ## Install
+        
+        To install panflute, open the command line and type:
         
-        Python 2.7+, 3.3+, PyPy, and PyPy3 are supported.
+        ```bash
+        pip install panflute
+        ```
         
-        Uninstall
-        ---------
+        Python 3.6+ and PyPy3 are supported (Python 2.7 and Python 3.3-3.5 
were supported up to version 1.11.4).
         
-        .. code:: bash
+        ## Uninstall
         
-           pip uninstall panflute
+        ```bash
+        pip uninstall panflute
+        ```
         
-        Dev Install
-        -----------
+        ## Dev Install
         
         After cloning the repo and opening the panflute folder:
         
-        ``python setup.py install``
-           installs the package locally
-        ``python setup.py develop``
-           installs locally with a symlink so changes are automatically updated
-        
-        In addition, if you use python2, you need to pasteurize the code before
-        running tests. In this directory, Run
-        
-        .. code:: bash
-        
-           # install pasteurize if you didn't have it yet
-           pip2 install -U future
-           pasteurize -wnj 4 .
-        
-        Contributing
-        ------------
-        
-        Feel free to submit push requests. For consistency, code should comply
-        with `pep8 <https://pypi.python.org/pypi/pep8>`__ (as long as its
-        reasonable), and with the style guides by
-        [@kennethreitz](http://docs.python-guide.org/en/latest/writing/style/)
-        and `google <http://google.github.io/styleguide/pyguide.html>`__. Read
-        more `here </CONTRIBUTING.md>`__.
-        
-        License
-        -------
-        
-        BSD3 license (following ``pandocfilters`` by @jgm).
-        
-        .. |Python version| image:: 
https://img.shields.io/pypi/pyversions/panflute.svg
-           :target: https://pypi.python.org/pypi/panflute/
-        .. |PyPI version| image:: https://img.shields.io/pypi/v/panflute.svg
-           :target: https://pypi.python.org/pypi/panflute/
-        .. |Development Status| image:: 
https://img.shields.io/pypi/status/panflute.svg
-           :target: https://pypi.python.org/pypi/panflute/
-        .. |Build Status| image:: 
https://travis-ci.org/sergiocorreia/panflute.svg?branch=master
-           :target: https://travis-ci.org/sergiocorreia/panflute
+        `python setup.py install`: installs the package locally
+        
+        `python setup.py develop`: installs locally with a symlink so changes 
are automatically updated
+        
+        
+        ## Contributing
+        
+        Feel free to submit push requests. For consistency, code should comply 
with [pep8](https://pypi.python.org/pypi/pep8) (as long as its reasonable), and 
with the style guides by 
[@kennethreitz](http://docs.python-guide.org/en/latest/writing/style/) and 
[google](http://google.github.io/styleguide/pyguide.html). Read more 
[here](/CONTRIBUTING.md).
+        
+        ## License
+        
+        BSD3 license (following  `pandocfilters` by @jgm).
+        
         
 Keywords: pandoc pandocfilters markdown latex
 Platform: UNKNOWN
@@ -101,14 +67,11 @@
 Classifier: License :: OSI Approved :: BSD License
 Classifier: Operating System :: OS Independent
 Classifier: Topic :: Text Processing :: Filters
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: Implementation :: PyPy
-Provides-Extra: pypi
+Description-Content-Type: text/markdown
 Provides-Extra: test
+Provides-Extra: pypi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panflute-1.11.2/panflute.egg-info/SOURCES.txt 
new/panflute-1.12.5/panflute.egg-info/SOURCES.txt
--- old/panflute-1.11.2/panflute.egg-info/SOURCES.txt   2019-01-21 
10:00:45.000000000 +0100
+++ new/panflute-1.12.5/panflute.egg-info/SOURCES.txt   2020-02-20 
06:52:18.000000000 +0100
@@ -1,7 +1,7 @@
 LICENSE
 MANIFEST.in
 README.md
-README.rst
+requirements.txt
 setup.cfg
 setup.py
 panflute/__init__.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panflute-1.11.2/panflute.egg-info/requires.txt 
new/panflute-1.12.5/panflute.egg-info/requires.txt
--- old/panflute-1.11.2/panflute.egg-info/requires.txt  2019-01-21 
10:00:45.000000000 +0100
+++ new/panflute-1.12.5/panflute.egg-info/requires.txt  2020-02-20 
06:52:18.000000000 +0100
@@ -1,6 +1,4 @@
 pyyaml
-future
-shutilwhich
 click
 
 [pypi]
@@ -11,4 +9,3 @@
 pandocfilters
 configparser
 pytest-cov
-future
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panflute-1.11.2/requirements.txt 
new/panflute-1.12.5/requirements.txt
--- old/panflute-1.11.2/requirements.txt        1970-01-01 01:00:00.000000000 
+0100
+++ new/panflute-1.12.5/requirements.txt        2020-02-20 06:52:03.000000000 
+0100
@@ -0,0 +1,2 @@
+pyyaml
+click
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panflute-1.11.2/setup.py new/panflute-1.12.5/setup.py
--- old/panflute-1.11.2/setup.py        2019-01-21 09:59:30.000000000 +0100
+++ new/panflute-1.12.5/setup.py        2020-02-20 06:52:03.000000000 +0100
@@ -12,12 +12,12 @@
 here = path.abspath(path.dirname(__file__))
 
 # Get the long description from the README file
-try:
-    with open(path.join(here, 'README.rst'), encoding='utf-8') as f:
-        long_description = f.read()
-except (IOError):
-    with open(path.join(here, 'README.md'), encoding='utf-8') as f:
-        long_description = f.read()
+with open(path.join(here, 'README.md'), encoding='utf-8') as f:
+    long_description = f.read()
+
+# Get requirements from 'requirements.txt'
+with open(path.join(here, 'requirements.txt'), encoding='utf-8') as f:
+    requirements = [x.strip() for x in f.readlines()]
 
 # Import version number
 version = {}
@@ -35,6 +35,7 @@
 
     description='Pythonic Pandoc filters',
     long_description=long_description,
+    long_description_content_type='text/markdown',
 
     # The project's main homepage.
     url='https://github.com/sergiocorreia/panflute',
@@ -70,10 +71,6 @@
         # Specify the Python versions you support here. In particular, ensure
         # that you indicate whether you support Python 2, Python 3 or both.
         # https://pypi.python.org/pypi?%3Aaction=list_classifiers
-        'Programming Language :: Python :: 2',
-        'Programming Language :: Python :: 2.7',
-        'Programming Language :: Python :: 3',
-        'Programming Language :: Python :: 3.5',
         'Programming Language :: Python :: 3.6',
         'Programming Language :: Python :: 3.7',
         'Programming Language :: Python :: 3.8',
@@ -96,7 +93,7 @@
     # your project is installed. For an analysis of "install_requires" vs pip's
     # requirements files see:
     # https://packaging.python.org/en/latest/requirements.html
-    install_requires=['pyyaml', 'future', 'shutilwhich', 'click'],
+    install_requires=requirements,
 
     # List additional groups of dependencies here (e.g. development
     # dependencies). You can install these using the following syntax,
@@ -104,7 +101,7 @@
     # $ pip install -e .[dev,test]
     extras_require={
     #    'dev': ['check-manifest'],
-        'test': ['pandocfilters', 'configparser', 'pytest-cov', 'future'],
+        'test': ['pandocfilters', 'configparser', 'pytest-cov'],
         'pypi': ['docutils', 'Pygments']
     },
 


Reply via email to