57

I'm making a framework in which I let developers describe their package using reStructuredText. I want to parse that reStructuredText into HTML so I can show it in a GUI.

I'm familiar with the excellent Sphinx, but I've never otherwise parsed reStructuredText. I imagined something like a function that takes a string of reStructuredText, and possibly several additional arguments, and returns a string of HTML.

So I looked into Docutils, which is responsible for parsing reStructuredText. I couldn't understand at all how to find this function. Documentation on the web is spotty. Many of the functions in the docutils.parsers.rst module seemed to be geared toward filenames. I don't have filenames! I'm just handling strings.

I tried creating a Parser and a Document and using the parse method, but I just get an error about a missing .tab_width setting.

Does anyone know how to parse reStructuredText into HTML?

tshepang
  • 12,111
  • 21
  • 91
  • 136
Ram Rachum
  • 84,019
  • 84
  • 236
  • 374

1 Answers1

67

Try something like this:

>>> from docutils.core import publish_string
>>> publish_string("*anurag*", writer_name='html')

publish_string accepts a strings and outputs a string or you can use publish_parts to get specific parts of html document e.g.

>>> from docutils.core import publish_parts
>>> print publish_parts("*anurag*", writer_name='html')['html_body']
<p><em>anurag</em></p>
Arto Bendiken
  • 2,567
  • 1
  • 24
  • 28
Anurag Uniyal
  • 85,954
  • 40
  • 175
  • 219
  • 5
    Your second suggestion was the more effective one: The `'body'` was exactly what I wanted. – Ram Rachum Jul 11 '11 at 22:22
  • 3
    You should link to the documentation (http://docutils.sourceforge.net/docs/api/publisher.html#publish-parts-details)! And, FWIW, here are some related code snippets: http://code.activestate.com/recipes/193890-using-rest-restructuredtext-to-create-html-snippet/ – Dr. Jan-Philip Gehrcke Mar 19 '14 at 16:16