Add support for Markdown
parent
3f95de7e49
commit
df25f0f3c7
|
@ -3,6 +3,12 @@ try:
|
||||||
import docutils.core
|
import docutils.core
|
||||||
except ImportError:
|
except ImportError:
|
||||||
docutils = None
|
docutils = None
|
||||||
|
try:
|
||||||
|
import markdown
|
||||||
|
except ImportError:
|
||||||
|
markdown = None
|
||||||
|
else:
|
||||||
|
import markdown.extensions.codehilite
|
||||||
|
|
||||||
|
|
||||||
def get_previewer(source):
|
def get_previewer(source):
|
||||||
|
@ -60,6 +66,39 @@ class ReStructuredTextPreviewer(BasePreviewer):
|
||||||
)['html_body']
|
)['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):
|
class PlainTextPreviewer(BasePreviewer):
|
||||||
|
|
||||||
def preview(self):
|
def preview(self):
|
||||||
|
|
Loading…
Reference in New Issue