def init(pandocversion=None, doc=None):
    """Sets or determines the pandoc version.  This must be called.

    The pandoc version is needed for multi-version support.
    See: https://github.com/jgm/pandoc/issues/2640

    Returns the pandoc version."""

    # This requires some care because we can't be sure that a call to 'pandoc'
    # will work.  It could be 'pandoc-1.17.0.2' or some other name.  Try
    # checking the parent process first, and only make a call to 'pandoc' as
    # a last resort.

    global _PANDOCVERSION  # pylint: disable=global-statement

    pattern = re.compile(r'^[1-2]\.[0-9]+(?:\.[0-9]+)?(?:\.[0-9]+)?$')

    if 'PANDOC_VERSION' in os.environ:  # Available for pandoc >= 1.19.1
        pandocversion = str(os.environ['PANDOC_VERSION'])

    if not pandocversion is None:
        # Test the result and if it is OK then store it in _PANDOCVERSION
        if pattern.match(pandocversion):
            _PANDOCVERSION = pandocversion
            return _PANDOCVERSION
        else:
            msg = 'Cannot understand pandocversion=%s'%pandocversion
            raise RuntimeError(msg)

    if not doc is None:
        if 'pandoc-api-version' in doc:
            # This could be either 1.18 or 1.19; there is no way to
            # distinguish them (but there isn't a use case in pandoc-fignos
            # and friends where it matters)
            _PANDOCVERSION = '1.18'
            return _PANDOCVERSION

    # Get the command
    try:  # Get the path for the parent process
        if os.name == 'nt':
            # psutil appears to work differently for windows
            command = psutil.Process(os.getpid()).parent().parent().exe()
        else:
            command = psutil.Process(os.getpid()).parent().exe()
        if not os.path.basename(command).startswith('pandoc'):
            raise RuntimeError('pandoc not found')
    except:  # pylint: disable=bare-except
        # Call whatever pandoc is available and hope for the best
        command = 'pandoc'

    # Make the call
    try:
        # Get the version number and confirm it conforms to expectations
        output = subprocess.check_output([command, '-v'])
        line = output.decode('utf-8').split('\n')[0]
        pandocversion = line.split(' ')[-1].strip()
    except: # pylint: disable=bare-except
        pandocversion = ''

    # Test the result and if it is OK then store it in _PANDOCVERSION
    if pattern.match(pandocversion):
        _PANDOCVERSION = pandocversion

    if _PANDOCVERSION is None:
        msg = """Cannot determine pandoc version.  Please file an issue at
              https://github.com/tomduck/pandocfiltering/issues"""
        raise RuntimeError(textwrap.dedent(msg))

    return _PANDOCVERSION
def init ( pandocversion = None , doc = None ) : global _PANDOCVERSION pattern = re . compile ( r'^[1-2]\.[0-9]+(?:\.[0-9]+)?(?:\.[0-9]+)?$' ) if 'PANDOC_VERSION' in os . environ : pandocversion = str ( os . environ [ 'PANDOC_VERSION' ] ) if not pandocversion is None : if pattern . match ( pandocversion ) : _PANDOCVERSION = pandocversion return _PANDOCVERSION else : msg = 'Cannot understand pandocversion=%s' % pandocversion raise RuntimeError ( msg ) if not doc is None : if 'pandoc-api-version' in doc : _PANDOCVERSION = '1.18' return _PANDOCVERSION try : if os . name == 'nt' : command = psutil . Process ( os . getpid ( ) ) . parent ( ) . parent ( ) . exe ( ) else : command = psutil . Process ( os . getpid ( ) ) . parent ( ) . exe ( ) if not os . path . basename ( command ) . startswith ( 'pandoc' ) : raise RuntimeError ( 'pandoc not found' ) except : command = 'pandoc' try : output = subprocess . check_output ( [ command , '-v' ] ) line = output . decode ( 'utf-8' ) . split ( '\n' ) [ 0 ] pandocversion = line . split ( ' ' ) [ - 1 ] . strip ( ) except : pandocversion = '' if pattern . match ( pandocversion ) : _PANDOCVERSION = pandocversion if _PANDOCVERSION is None : msg = """Cannot determine pandoc version.  Please file an issue at
              https://github.com/tomduck/pandocfiltering/issues""" raise RuntimeError ( textwrap . dedent ( msg ) ) return _PANDOCVERSION
Sets or determines the pandoc version.  This must be called.

    The pandoc version is needed for multi-version support.
    See: https://github.com/jgm/pandoc/issues/2640

    Returns the pandoc version.