From 09e858a7e219da7afdfa63024ce1110ffc686b81 Mon Sep 17 00:00:00 2001 From: Jon Bergli Heier Date: Sun, 12 Mar 2017 23:00:58 +0100 Subject: 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. --- pastepy.py | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) (limited to 'pastepy.py') 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): -- cgit v1.2.3