This repository has been archived by the owner on Jan 25, 2019. It is now read-only.
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Make markdown, pygments, and docutils dependencies optional.
- Loading branch information
Showing
3 changed files
with
63 additions
and
28 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,40 +1,71 @@ | ||
# Markdown | ||
from markdown import markdown | ||
# reStructuredText | ||
import docutils.core | ||
from docutils.writers.html4css1 import Writer as rst_html_writer | ||
from docutils.parsers.rst import directives | ||
from wok.rst_pygments import Pygments as RST_Pygments | ||
# Check for pygments | ||
try: | ||
import pygments | ||
have_pygments = True | ||
except ImportError: | ||
out.util.info('Loading renderers', 'Pygments not enabled.') | ||
have_pygments = False | ||
|
||
# List of available renderers | ||
all = [] | ||
|
||
class Renderer(object): | ||
extensions = [] | ||
|
||
@classmethod | ||
def render(cls, plain): | ||
return plain | ||
all.append(Renderer) | ||
|
||
class Markdown(Renderer): | ||
extensions = ['markdown', 'mkd'] | ||
class Plain(Renderer): | ||
"""Plain text renderer. Replaces new lines with html </br>s""" | ||
extensions = ['txt'] | ||
|
||
@classmethod | ||
def render(cls, plain): | ||
return markdown(plain, ['def_list', 'footnotes', 'codehilite(css_class=highlight )']) | ||
return plain.replace('\n', '<br>') | ||
all.append(Plain) | ||
|
||
class ReStructuredText(Renderer): | ||
directives.register_directive('Pygments', RST_Pygments) | ||
# Include markdown, if it is available. | ||
try: | ||
from markdown import markdown | ||
class Markdown(Renderer): | ||
"""Markdown renderer.""" | ||
extensions = ['markdown', 'mkd'] | ||
|
||
extensions = ['rst'] | ||
plugins = ['def_list', 'footnotes'] | ||
if have_pygments: | ||
plugins.append('codehilite(css_class=highlight)') | ||
|
||
@classmethod | ||
def render(cls, plain): | ||
w = rst_html_writer() | ||
return docutils.core.publish_parts(plain, writer=w)['body'] | ||
@classmethod | ||
def render(cls, plain): | ||
return markdown(plain, Markdown.plugins) | ||
|
||
class Plain(Renderer): | ||
extensions = 'txt' | ||
all.append(Markdown) | ||
|
||
@classmethod | ||
def render(cls, plain): | ||
return plain.replace('\n', '<br>') | ||
except ImportError: | ||
util.out.info('Loading renderers', 'Markdown not enabled.') | ||
|
||
# Include ReStructuredText Parser, if we have docutils | ||
try: | ||
|
||
import docutils.core | ||
from docutils.writers.html4css1 import Writer as rst_html_writer | ||
from docutils.parsers.rst import directives | ||
|
||
if have_pygments: | ||
from wok.rst_pygments import Pygments as RST_Pygments | ||
directives.register_directive('Pygments', RST_Pygments) | ||
|
||
class ReStructuredText(Renderer): | ||
"""reStructuredText renderer.""" | ||
extensions = ['rst'] | ||
|
||
@classmethod | ||
def render(cls, plain): | ||
w = rst_html_writer() | ||
return docutils.core.publish_parts(plain, writer=w)['body'] | ||
|
||
all = [Renderer, Plain, Markdown, ReStructuredText] | ||
all.append(ReStructuredText) | ||
except: | ||
util.out.info('Loading renderers', 'reStructuredText not enabled.') |