diff options
author | Jon Bergli Heier <snakebite@jvnv.net> | 2017-03-12 23:00:58 +0100 |
---|---|---|
committer | Jon Bergli Heier <snakebite@jvnv.net> | 2017-03-12 23:00:58 +0100 |
commit | 09e858a7e219da7afdfa63024ce1110ffc686b81 (patch) | |
tree | 6c097d0eeb276ad8f1f111f92958e43d42b89167 | |
parent | 67049cf50145d179652bd678269e9f6251643e00 (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.
-rw-r--r-- | pastepy.py | 37 | ||||
-rw-r--r-- | static/paste.css | 1 | ||||
-rw-r--r-- | templates/view.tmpl | 6 |
3 files changed, 35 insertions, 9 deletions
@@ -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): diff --git a/static/paste.css b/static/paste.css index 36df2f2..7bd00c8 100644 --- a/static/paste.css +++ b/static/paste.css @@ -11,6 +11,7 @@ div#info { font-size: small; color: #bbb; } span#nick, span#date, span#syntax-type { color: #888; } div#alt-links { font-size: small; } div#alt-links a { color: #44f; } +div.paste-rendered { background-color: #fff; } .highlighttable { width: 100%; padding-top: 1em; } .highlighttable td.code { width: 100%; background-color: #fff; } .highlighttable td { vertical-align: top; } diff --git a/templates/view.tmpl b/templates/view.tmpl index 445a1ad..a23c36e 100644 --- a/templates/view.tmpl +++ b/templates/view.tmpl @@ -18,6 +18,12 @@ <a href="/raw/$hash">Download as plain text</a> #end if </div> +#if $rendered + <div class="paste-rendered"> +#end if $text +#if $rendered + </div> +#end if </div> #end def |