Add support for Markdown

master
Dustin 2015-03-07 17:22:47 -06:00
parent 3f95de7e49
commit df25f0f3c7
1 changed files with 39 additions and 0 deletions

View File

@ -3,6 +3,12 @@ try:
import docutils.core
except ImportError:
docutils = None
try:
import markdown
except ImportError:
markdown = None
else:
import markdown.extensions.codehilite
def get_previewer(source):
@ -60,6 +66,39 @@ class ReStructuredTextPreviewer(BasePreviewer):
)['html_body']
class MarkdownPreviewer(BasePreviewer):
def __init__(self, source):
super(MarkdownPreviewer, self).__init__(source)
self.extensions = [
markdown.extensions.codehilite.CodeHiliteExtension(
css_class='code',
),
]
@classmethod
def detect(cls, lines):
if markdown is None:
return False
for idx, line in enumerate(lines):
if line.lstrip().startswith('#'): # heading
return True
if '![' in line: # image
return True
if '](' in line: # inline link
return True
if line.startswith('[') and ']:' in line: # reference-style link
return True
if line.startswith(' '): # code block
# reStructuredText has a similar syntax, so make sure
# it isn't that
if idx and not line[idx - 1].endswith('::'):
return True
def preview(self):
return markdown.markdown(self.source, extensions=self.extensions)
class PlainTextPreviewer(BasePreviewer):
def preview(self):