.. _renderers:
Renderers
=========
Mistune has several built-in renderers, including:
- :class:`mistune.renderers.html.HTMLRenderer`
- :class:`mistune.renderers.markdown.MarkdownRenderer`
- :class:`mistune.renderers.rst.RSTRenderer`
You're welcome to contribute more renderers.
Customize HTMLRenderer
----------------------
You can customize HTML output with your own renderers. Take an example, we're going
to add an inline math syntax like below:
.. code::
`$a^2=4$`
To render this syntax, we can create a subclass of ``mistune.HTMLRenderer``:
.. code-block:: python
from mistune import HTMLRenderer
class MyRenderer(HTMLRenderer):
def codespan(self, text):
if text.startswith('$') and text.endswith('$'):
return '' + escape(text) + ''
return '' + escape(text) + ''
# use customized renderer
markdown = mistune.create_markdown(renderer=MyRenderer())
print(markdown('hi `$a^2=4$`'))
Available methods
~~~~~~~~~~~~~~~~~
Here is a a list of available renderer functions for ``HTMLRenderer``, including methods on plugins:
.. code-block::
# inline level
text(self, text)
link(self, text, url, title=None)
image(self, alt, url, title=None)
emphasis(self, text)
strong(self, text)
codespan(self, text)
linebreak(self)
softbreak(self)
inline_html(self, html)
# block level
paragraph(self, text)
heading(self, text, level, **attrs)
blank_line(self)
thematic_break(self)
block_text(self, text)
block_code(self, code, info=None)
block_quote(self, text)
block_html(self, html)
block_error(self, html)
list(self, text, ordered, **attrs)
list_item(self, text, **attrs)
# provided by strikethrough plugin
strikethrough(self, text)
# provided by mark plugin
mark(self, text)
# provided by insert plugin
insert(self, text)
# provided by subscript plugin
subscript(self, text)
# provided by abbr plugin
abbr(self, text, title)
# provided by ruby plugin
ruby(self, text, rt)
# provided by task_lists plugin
task_list_item(self, text, checked=False, **attrs)
# provide by table plugin
table(self, text)
table_head(self, text)
table_body(self, text)
table_row(self, text)
table_cell(self, text, align=None, head=False)
# provided by footnotes plugin
footnote_ref(self, key, index)
footnotes(self, text)
footnote_item(self, text, key, index)
# provide by def_list plugin
def_list(self, text)
def_list_head(self, text)
def_list_item(self, text)
# provide by math plugin
block_math(self, text)
inline_math(self, text)
RestructuredText Renderer
-------------------------
The ``RSTRenderer`` can be used to convert markdown text to RestructuredText.
.. code-block:: python
from mistune.renderers.rst import RSTRenderer
convert_rst = mistune.create_markdown(renderer=RSTRenderer())
convert_rst(your_markdown_text)
Markdown Renderer
-----------------
The ``MarkdownRenderer`` can be used to reformat your Markdown text.
.. code-block:: python
from mistune.renderers.markdown import MarkdownRenderer
format_markdown = mistune.create_markdown(renderer=MarkdownRenderer())
format_markdown(your_markdown_text)
With plugins
~~~~~~~~~~~~
The original ``MarkdownRenderer`` can **ONLY** render the basic Markdown syntax.
If you're using plugins, you would need to customize ``MarkdownRenderer`` with
extra render methods. Take an example, you are going to add the :ref:`strikethrough`
plugin:
.. code-block:: python
from mistune.renderers.markdown import MarkdownRenderer
class MyRenderer(MarkdownRenderer):
def strikethrough(self, token, state):
return '~~' + self.render_children(token, state) + '~~'
format_markdown = mistune.create_markdown(renderer=MarkdownRenderer(), plugins=['strikethrough'])
format_markdown(your_markdown_text)
Default methods
~~~~~~~~~~~~~~~
Here is a a list of default renderer functions of ``MarkdownRenderer``:
.. code-block::
# inline level
text(self, token, state)
link(self, token, state)
image(self, token, state)
emphasis(self, token, state)
strong(self, token, state)
codespan(self, token, state)
linebreak(self, token, state)
softbreak(self, token, state)
inline_html(self, token, state)
# block level
paragraph(self, token, state)
heading(self, token, state)
blank_line(self, token, state)
thematic_break(self, token, state)
block_text(self, token, state)
block_code(self, token, state)
block_quote(self, token, state)
block_html(self, token, state)
block_error(self, token, state)
list(self, token, state)