Skip to main content

Utilities for writing pandoc filters in python

Project description

A python module for writing pandoc filters. Pandoc filters are pipes that read a JSON serialization of the Pandoc AST from stdin, transform it in some way, and write it to stdout. They can be used with pandoc (>= 1.12) either using pipes::

pandoc -t json -s | ./caps.py | pandoc -f json

or using the --filter (or -F) command-line option::

pandoc --filter ./caps.py -s

For more on pandoc filters, see the pandoc documentation under --filter and the tutorial on writing filters.

To install:

python setup.py install

The source repository contains a number of illustrative examples in the examples subdirectory.

The pandocfilters module exports the following functions:

walk(x, action, format, meta)

Walk a tree, applying an action to every object. Returns a modified tree.

toJSONFilter(action)

Converts an action into a filter that reads a JSON-formatted pandoc document from stdin, transforms it by walking the tree with the action, and returns a new JSON-formatted pandoc document to stdout. The argument is a function action(key, value, format, meta), where key is the type of the pandoc object (e.g. ‘Str’, ‘Para’), value is the contents of the object (e.g. a string for ‘Str’, a list of inline elements for ‘Para’), format is the target output format (which will be taken for the first command line argument if present), and meta is the document’s metadata. If the function returns None, the object to which it applies will remain unchanged. If it returns an object, the object will be replaced. If it returns a list, the list will be spliced in to the list to which the target object belongs. (So, returning an empty list deletes the object.)

stringify(x)

Walks the tree x and returns concatenated string content, leaving out all formatting.

attributes(attrs)

Returns an attribute list, constructed from the dictionary attrs.

Most users will only need toJSONFilter. Here is a simple example of its use::

#!/usr/bin/env python

"""
Pandoc filter to convert all regular text to uppercase.
Code, link URLs, etc. are not affected.
"""

from pandocfilters import toJSONFilter

def caps(key, value, format, meta):
  if key == 'Str':
    return {'Str': value.upper()}

if __name__ == "__main__":
  toJSONFilter(caps)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pandocfilters-1.0.tar.gz (6.2 kB view details)

Uploaded Source

File details

Details for the file pandocfilters-1.0.tar.gz.

File metadata

  • Download URL: pandocfilters-1.0.tar.gz
  • Upload date:
  • Size: 6.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pandocfilters-1.0.tar.gz
Algorithm Hash digest
SHA256 e851a93ecf5d2dce469ef73f8aa3ab4d75d7f0a4316f634153caca9b74299ba0
MD5 c71564850af10d7219b016935e0764f1
BLAKE2b-256 419a29e62f2eaa9e129f598b18d972dd3ee54badf8b6f30221a6167522861c9e

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page