citeproc-py is a CSL processor for Python. It aims to implement the CSL 1.0.1 specification. citeproc-py can output styled citations and bibliographies in a number of different output formats. Currently supported are plain text, reStructuredText and HTML. Other formats can be added easily.
citeproc-py uses semantic versioning. Currently, its major version number is still at 0, meaning the API is not yet stable. However, you should not expect to see any major API changes soon.
citeproc-py supports Python 3.7 and up. It depends on lxml for parsing and navigating the CSL style and locale files.
The recommended way of installing citeproc-py is by using pip:
pip install citeproc-py
If lxml isn't installed, pip will try to install it for you.
If you insist, you can manually install citeproc-py from distribution packages hosted at PyPI. Please ignore the release archives offered by GitHub.
To get started with citeproc-py, take a look at the examples under
examples/
. Two examples are provided, one parsing references from a
JSON representation of references as supported by citeproc-js, another
parsing the references from a BibTeX file. Both show and explain how to
cite references and render the bibliography.
Currently, citeproc-py passes almost 60% of the (relevant) tests in the citeproc-test suite. However, it is more than 60% complete, as citeproc-py doesn't take care of double spaces and repeated punctuation marks yet, making a good deal of the tests fail. In addition, the following features have not yet been implemented (there are probably some I forgot though):
- disambiguation/year-suffix
- et-al-subsequent-min/et-al-subsequent-use-first
- collapsing
- punctuation-in-quote
- display
Also, some citeproc-js functionality that is not part of the CSL spec is not (yet) supported:
- raw dates
- static-ordering
- literal names
citeproc-py is 100% volunteer maintained, and new contributions are always welcome. If you would like to contribute, please follow the guidelines in the CONTRIBUTING.rst file.
First clone the citeproc-py repository and install the submodules with git
submodule update --init
. Then install with pip install -e .
. Then move to
the tests
directory and run python citeproc-test.py
.
Run citeproc-test.py --help
to see its usage information. The first time
you run the script it will clone the citeproc-test suite repository into the
tests
directory and checkout the last tested version. By default failed tests are
automatically added into the failing_tests.txt
file and aren't shown when
running the test suite again.
If you want git to fully ignore the submodule, you can type git update-index
--assume-unchanged citeproc/data/schema