skip to navigation
skip to content

python-creole 1.3.2

python-creole is an open-source (GPL) markup converter in pure Python for: creole2html, html2creole, html2ReSt, html2textile


python-creole is a OpenSource (GPL) Python lib for converting markups. python-creole is pure python. No external libs needed.

Compatible Python Versions (see also .travis.yml):

  • 2.7.x, 3.3, 3.4, 3.5, 3.6
  • PyPy (Python v2 and v3)

Existing converters:

  • creole -> html
  • html -> creole markup
  • reSt -> html (for clean html code)
  • html -> reStructuredText markup (only a subset of reSt supported)
  • html -> textile markup (not completed yet)

The creole2html part based on the creole markup parser and emitter from the MoinMoin project by Radomir Dopieralski and Thomas Waldmann.


Python packages available on:

~$ pip install python-creole


For the most parts (creole2html and html2creole) no external libraries are needed.

For all functionality (and running the unittests) these modules are needed:

  • docutils (for the ReStructuredText stuff)
  • textile (for html2textile tests)



Convert creole markup to html code:

>>> from creole import creole2html
>>> creole2html("This is **creole //markup//**")
u'<p>This is <strong>creole <i>markup</i></strong></p>\n'


Convert html code back into creole markup:

>>> from creole import html2creole
>>> html2creole(u'<p>This is <strong>creole <i>markup</i></strong></p>\n')
u'This is **creole //markup//**'


Convert ReStructuredText into clean html code (needs docutils):

>>> from creole.rest2html.clean_writer import rest2html
>>> rest2html(u"A ReSt link to `PyLucid CMS <>`_ :)")
u'<p>A ReSt link to <a href="">PyLucid CMS</a> :)</p>\\n'

(more information: rest2html wiki page)


Convert html code into ReStructuredText markup:

>>> from creole import html2rest
>>> html2rest(u'<p>This is <strong>ReStructuredText</strong> <em>markup</em>!</p>')
u'This is **ReStructuredText** *markup*!'


Convert html code into textile markup

>>> from creole import html2textile
>>> html2textile(u'<p>This is <strong>textile <i>markup</i></strong>!</p>')
u'This is *textile __markup__*!'

See also:

Image size additional

You can pass image width/height in image tags, e.g.:

>>> from creole import creole2html
>>> creole_markup="""{{foobar.jpg|image title|90x160}}"""
>>> creole2html(creole_markup)
'<p><img src="foobar.jpg" title="image title" alt="image title" width="90" height="160" /></p>'

The third part (90x160) is not in creole standard, you can force a strict mode, e.g.:

>>> creole2html(creole_markup, strict=True)
'<p><img src="foobar.jpg" title="image title|90x160" alt="image title|90x160" /></p>'

Source code highlighting support

You can find a example macro which highlight source code thanks to the pygments library. It is located here: /creole/shared/ Here is how to use it:

>>> from creole import creole2html
>>> from creole.shared.example_macros import code
>>> creole_markup="""<<code ext=".py">>#some code\nprint('coucou')\n<</code>>"""
>>> creole2html(creole_markup, macros={'code': code})

commandline interface

If you have python-creole installed, you will get these simple CLI scripts:

  • creole2html
  • html2creole
  • html2rest
  • html2textile

Here the --help output from html2creole:

$ html2creole --help
usage: html2creole [-h] [-v] [--encoding ENCODING] sourcefile destination

python-creole is an open-source (GPL) markup converter in pure Python for:
creole2html, html2creole, html2ReSt, html2textile

positional arguments:
  sourcefile           source file to convert
  destination          Output filename

optional arguments:
  -h, --help           show this help message and exit
  -v, --version        show program's version number and exit
  --encoding ENCODING  Codec for read/write file (default encoding: utf-8)

Example to convert a html file into a creole file:

$ html2creole foobar.html foobar.creole


We store documentation/examples into the project wiki:

How to handle unknown html tags in html2creole:

Contributers should take a look at this page:

Creole Markup Cheat Sheet can be found here:


We use nose for running unittests (with DocTests). Please install it, e.g.:

.../your/env/$ source bin/activate
.../your/env/$ pip install nose

To run the unittests:

.../path/to/python-creole$ python nosetests

Use creole in README

With python-creole you can convert a README on-the-fly from creole into ReStructuredText in How to do this, read:

Note: In this case you must install docutils! See above.


  • v1.3.2 - 2018-02-27 - compare v1.3.1…v1.3.2

    • Adding optional img size to creole2html and html2creole contributed by John Dupuy
    • run tests also with python 3.5 and 3.6
  • v1.3.1 - 2015-08-15 - compare v1.3.0…v1.3.1

    • Bugfix for “Failed building wheel for python-creole”
  • v1.3.0 - 2015-06-02 - compare v1.2.2…v1.3.0

    • Refactory internal file structure
    • run unittests and doctests with nose
    • Refactor CLI tests
    • skip official support for Python 2.6
    • small code cleanups and fixes.
    • use json.dumps() instead of repr() in some cases
  • v1.2.2 - 2015-04-05 - compare v1.2.1…v1.2.2

    • Bugfix textile unittests if url scheme is unknown
    • migrate google-code Wiki to github and remove google-code links
  • v1.2.1 - 2014-09-14 - compare v1.2.0…v1.2.1

    • Use origin PyPi code to check generated reStructuredText in
    • Update unitest for textile v2.1.8
  • v1.2.0 - 2014-05-15 - compare v1.1.1…v1.2.0

    • NEW: Add <<code>> example macro (Source code highlighting with pygments) - implemented by Julien Enselme
    • NEW: Add <<toc>> macro to create a table of contents list
    • Bugfix for: AttributeError: ‘CreoleParser’ object has no attribute ‘_escaped_char_repl’
    • Bugfix for: AttributeError: ‘CreoleParser’ object has no attribute ‘_escaped_url_repl’
    • API Change: Callable macros will raise a TypeError instead of create a DeprecationWarning (Was removed in v0.5)
  • v1.1.1 - 2013-11-08

    • Bugfix: Setup script exited with error: can’t copy ‘README.creole’: doesn’t exist or not a regular file
  • v1.1.0 - 2013-10-28

    • NEW: Simple commandline interface added.
  • v1.0.7 - 2013-08-07

    • Bugfix in ‘clean reStructuredText html writer’ if docutils => v0.11 used.
    • Bugfix for PyPy 2.1 usage
  • v1.0.6 - 2012-10-15

    • Security fix in rest2html: Disable “file_insertion_enabled” and “raw_enabled” as default.
  • v1.0.5 - 2012-09-03

    • made automatic protocol links more strict: Only whitespace before and at the end are allowed.
    • Bugfix: Don’t allow ftp:/broken (Only one slash) to be a link.
  • v1.0.4 - 2012-06-11

    • html2rest: Handle double link/image substitution and raise better error messages
    • Bugfix in unittests (include test README file in python package). Thanks to Wen Heping for reporting this.
  • v1.0.3 - 2012-06-11

    • Bugfix: AttributeError: 'module' object has no attribute 'interesting_cdata' from HTMLParser patch. Thanks to Wen Heping for reporting this.
    • Fix a bug in get_long_description() ReSt test for Py3k and his unittests.
    • Use Travis CI, too.
  • v1.0.2 - 2012-04-04

  • v1.0.1 - 2011-11-16

  • v1.0.0 - 2011-10-20

    • Change API: Replace ‘parser_kwargs’ and ‘emitter_kwargs’ with separate arguments. (More information on API Wiki Page)
  • v0.9.2

    • Turn zip_safe in on and change unittests API.
  • v0.9.1

    • Many Bugfixes, tested with CPython 2.6, 2.7, 3.2 and PyPy v1.6
  • v0.9.0

  • v0.8.5

    • Bugfix in html2creole: ignore links without href
  • v0.8.4

  • v0.8.3

  • v0.8.2

    • Bugfix in get_long_description() error handling (local variable ‘long_description_origin’ referenced before assignment)
  • v0.8.1

    • Bugfix for installation under python 2.5
    • Note: setup helper changed: rename GetLongDescription(...) to get_long_description(...)
  • v0.8

  • v0.7.3

    • Bugfix in html2rest:

      • table without <th> header
      • new line after table
      • create reference hyperlinks in table cells intead of embedded urls.
      • Don’t always use raise_unknown_node()
    • Add child content to raise_unknown_node()

  • v0.7.2

    • Activate ---- to <hr> in html2rest
    • Update
  • v0.7.1

    • Bugfix if docutils are not installed
    • API change: rest2html is now here: from creole.rest2html.clean_writer import rest2html
  • v0.7.0

    • NEW: Add a html2reStructuredText converter (only a subset of reSt supported)
  • v0.6.1

    • Bugfix: separate lines with one space in “wiki style line breaks” mode
  • v0.6

    • NEW: html2textile converter
    • some API changed!
  • v0.5

    • API changed:

      • Html2CreoleEmitter optional argument ‘unknown_emit’ takes now a callable for handle unknown html tags.
      • No macros used as default in creole2html converting.
      • We remove the support for callable macros. Only dict and modules are allowed.
    • remove unknown html tags is default behaviour in html2creole converting.

    • restructure and cleanup sourcecode files.

  • v0.4

    • only emit children of empty tags like div and span (contributed by Eric O’Connell)
    • remove inter wiki links and doesn’t check the protocol
  • v0.3.3

    • Use <tt> when {{{ … }}} is inline and not <pre>, see: PyLucid Forum Thread
    • Bugfix in html2creole: insert newline before new list. TODO: apply to all block tags: issues 16
  • v0.3.2

    • Bugfix for spaces after Headline: issues 15
  • v0.3.1

    • Make argument ‘block_rules’ in Parser() optional
  • v0.3.0

    • creole2html() has the optional parameter ‘blog_line_breaks’ to switch from default blog to wiki line breaks
  • v0.2.8

    • bugfix in
  • v0.2.7

    • handle obsolete non-closed <br> tag
  • v0.2.6

    • bugfix in
    • Cleanup DocStrings
    • add unittests
  • v0.2.5

    • creole2html: Bugfix if “–”, “//” etc. stands alone, see also: issues 12
    • Note: bold, italic etc. can’t cross line any more.
  • v0.2.4

    • creole2html: ignore file extensions in image tag

  • v0.2.3

    • html2creole bugfix/enhanced: convert image tag without alt attribute:

      • see also: issues 6
      • Thanks Betz Stefan alias ‘encbladexp’
  • v0.2.2

    • html2creole bugfix: convert <a href="/url/">Search & Destroy</a>
  • v0.2.1

    • html2creole bugfixes in:

      • converting tables: ignore tbody tag and better handling p and a tags in td
      • converting named entity
  • v0.2

    • remove all django template tag stuff: issues 3
    • html code always escaped
  • v0.1.1

    • improve macros stuff, patch by Vitja Makarov: issues 2
  • v0.1.0

first source code was written 27.11.2008: Forum thread (de)

File Type Py Version Uploaded on Size
python-creole-1.3.2.tar.gz (md5) Source 2018-02-27 72KB
python_creole-1.3.2-py2.py3-none-any.whl (md5) Python Wheel py2.py3 2018-02-27 104KB
python_creole-1.3.2-py3.6.egg (md5) Python Egg 3.6 2018-02-27 95KB