Add support for Markdown
parent
3f95de7e49
commit
df25f0f3c7
|
@ -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 ' 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):
|
||||
|
|
Loading…
Reference in New Issue