================
Register Plugins
================

If you want to extend pygments without hacking in the sources but want to
use the lexer/formatter/style resolve functions you can use setuptools
entrypoints to add new lexers, formatters or styles to the pygments core.

That means you can use your highlighter also with the ``pygmentize`` script.


Entrypoints
===========

Here a list of setuptools entrypoints pygments understands:

`pygments.lexers`

    This entrypoint is used for adding new lexers to the pygments core.
    The name of entrypoint values doesn't really matter, pygements extract
    required informations from the class definition:

    .. sourcecode:: ini

        [pygments.lexers]
        yourlexer = yourmodule:YourLexer

    Note that you have to
    defined a ``name``, ``aliases`` and ``filename`` patterns so that you
    can use the highlighter from the command line:

    .. sourcecode:: python

        class YourLexer(...):
            name = 'Name Of Your Lexer'
            aliases = ['alias']
            filenames = ['*.ext']


`pygments.formatters`

    You can use this entrypoint to add new formatters to pygments. The
    name of an entrypoint item is the name of the formatter. If you
    prefix the name with a slash it's used for the filename pattern:

    .. sourcecode:: ini

        [pygments.formatters]
        yourformatter = yourmodule:YourFormatter
        /.ext = yourmodule:YourFormatter


`pygments.styles`

    To add a new style you can use this entrypoint. The name of the entrypoint
    is the name of the style:

    .. sourcecode:: ini

        [pygments.styles]
        yourstyle = yourmodule:YourStyle


How To Use Entrypoints
======================

This documentation doesn't explain how to use those entrypoints because this is
covered in the `setuptools documentation`_. That page should cover everything
you need to write a plugin. Also `this blog entry`_ might be interesting.

.. _setuptools documentation: http://peak.telecommunity.com/DevCenter/setuptools
.. _this blog entry: http://lucumr.pocoo.org/entry/setuptools-plugins/


Extending The Core
==================

If you have written a pygments plugin which is open source, please inform us
about that. There is a high chance that we'll add it to the pygments core :-)
