summaryrefslogtreecommitdiff
path: root/pastepy.py
diff options
context:
space:
mode:
authorJon Bergli Heier <snakebite@jvnv.net>2017-03-12 23:00:58 +0100
committerJon Bergli Heier <snakebite@jvnv.net>2017-03-12 23:00:58 +0100
commit09e858a7e219da7afdfa63024ce1110ffc686b81 (patch)
tree6c097d0eeb276ad8f1f111f92958e43d42b89167 /pastepy.py
parent67049cf50145d179652bd678269e9f6251643e00 (diff)
Added support for rendering markdown.
If a syntax name starts with 'Rendered ' (lazy fix, we'll come up with something better later) the paste will now be handled by the corresponding renderer. For now we only support markdown, but this can easily be extended to support other renderers as well.
Diffstat (limited to 'pastepy.py')
-rw-r--r--pastepy.py37
1 files changed, 28 insertions, 9 deletions
diff --git a/pastepy.py b/pastepy.py
index 25d8746..5e0e404 100644
--- a/pastepy.py
+++ b/pastepy.py
@@ -9,6 +9,11 @@ import random
import settings
import templates
+try:
+ import markdown
+ has_markdown = True
+except ImportError:
+ has_markdown = False
from pygments import highlight
from pygments.lexers import get_all_lexers, get_lexer_by_name
from pygments.formatters import HtmlFormatter
@@ -38,6 +43,10 @@ class Paste(object):
del lexers[l]
except KeyError:
pass
+ rendered = []
+ if has_markdown:
+ rendered.append(('Rendered markdown', 'md-render'))
+ self.lexers.append(('Rendered', rendered))
self.lexers.append(('Others' if settings.categories else 'Syntax', sorted(lexers.items(), cmp = lambda a, b: cmp(a[0], b[0]))))
self.formatter = CustomHtmlFormatter(linenos = 'table', lineanchors = 'line', anchorlinenos = True)
@@ -72,12 +81,16 @@ class Paste(object):
}))]
def preview(self, mp):
- try:
- lex = get_lexer_by_name(mp['syntax'].value.decode('utf8'))
- lexername = lex.name
- text = highlight(mp['text'].value.decode('utf8'), lex, self.formatter)
- except:
- return self.message('Could not find the lexer "%s".' % mp['syntax'].value, 'Error')
+ if mp['syntax'].value == 'md-render' and has_markdown:
+ text = markdown.markdown(mp['text'].value)
+ lexername = 'Rendered markdown'
+ else:
+ try:
+ lex = get_lexer_by_name(mp['syntax'].value.decode('utf8'))
+ lexername = lex.name
+ text = highlight(mp['text'].value.decode('utf8'), lex, self.formatter)
+ except:
+ return self.message('Could not find the lexer "%s".' % mp['syntax'].value, 'Error')
self.start_response('200 OK', [('Content-Type', 'text/html; charset=utf-8')])
return [str(templates.view(searchList = {
@@ -89,6 +102,7 @@ class Paste(object):
'syntax': lexername,
'pastetitle': mp['title'].value.decode('utf8') or 'Untitled',
'text': text,
+ 'rendered': (lexername or '').startswith('Rendered '),
}))]
def add_paste(self, mp):
@@ -118,9 +132,13 @@ class Paste(object):
def view(self):
def get_formatted(syntax, text):
- lex = get_lexer_by_name(syntax or 'text')
- lexername = lex.name
- text = highlight(text, lex, self.formatter)
+ if syntax == 'md-render' and has_markdown:
+ text = markdown.markdown(text)
+ lexername = 'Rendered markdown'
+ else:
+ lex = get_lexer_by_name(syntax or 'text')
+ lexername = lex.name
+ text = highlight(text, lex, self.formatter)
return (lexername, text)
hash = self.path[1]
@@ -158,6 +176,7 @@ class Paste(object):
'syntax': cache.syntax_name,
'pastetitle': paste.title or 'Untitled',
'text': cache.text,
+ 'rendered': (cache.syntax_name or '').startswith('Rendered '),
}))]
def raw(self):