annotate rhodecode/lib/markup_renderer.py @ 4147:1c8f818787b3 rhodecode-2.2.5-gpl

old style: show the full link box on summary page - no overlap or truncation
author Mads Kiilerich <madski@unity3d.com>
date Wed, 02 Jul 2014 19:03:23 -0400
parents ffd45b185016
children 7e5f8c12a3fc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1604
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
2 # This program is free software: you can redistribute it and/or modify
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
3 # it under the terms of the GNU General Public License as published by
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
4 # the Free Software Foundation, either version 3 of the License, or
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
5 # (at your option) any later version.
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
6 #
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
7 # This program is distributed in the hope that it will be useful,
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
8 # but WITHOUT ANY WARRANTY; without even the implied warranty of
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
9 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
10 # GNU General Public License for more details.
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
11 #
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
12 # You should have received a copy of the GNU General Public License
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
13 # along with this program. If not, see <http://www.gnu.org/licenses/>.
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4009
diff changeset
14 """
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4009
diff changeset
15 rhodecode.lib.markup_renderer
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4009
diff changeset
16 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4009
diff changeset
17
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4009
diff changeset
18 Renderer for markup languages with ability to parse using rst or markdown
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4009
diff changeset
19
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4009
diff changeset
20 :created_on: Oct 27, 2011
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4009
diff changeset
21 :author: marcink
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4009
diff changeset
22 :copyright: (c) 2013 RhodeCode GmbH.
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4009
diff changeset
23 :license: GPLv3, see LICENSE for more details.
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4009
diff changeset
24 """
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4009
diff changeset
25
1604
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
26
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
27 import re
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
28 import logging
2747
cdce3d7282b2 catch errors on renderers, and display plain if critical rendering error is present
Marcin Kuzminski <marcin@python-works.com>
parents: 2201
diff changeset
29 import traceback
1604
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
30
2201
ea5ff843b200 #426 fixed mention extracting regex
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
31 from rhodecode.lib.utils2 import safe_unicode, MENTIONS_REGEX
1604
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
32
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
33 log = logging.getLogger(__name__)
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
34
1996
0592987973eb activate codehilite extension on markdown renderer, inspired by bitbucket blog ;)
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
35
1604
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
36 class MarkupRenderer(object):
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
37 RESTRUCTUREDTEXT_DISALLOWED_DIRECTIVES = ['include', 'meta', 'raw']
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1769
diff changeset
38
1996
0592987973eb activate codehilite extension on markdown renderer, inspired by bitbucket blog ;)
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
39 MARKDOWN_PAT = re.compile(r'md|mkdn?|mdown|markdown', re.IGNORECASE)
0592987973eb activate codehilite extension on markdown renderer, inspired by bitbucket blog ;)
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
40 RST_PAT = re.compile(r're?st', re.IGNORECASE)
0592987973eb activate codehilite extension on markdown renderer, inspired by bitbucket blog ;)
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
41 PLAIN_PAT = re.compile(r'readme', re.IGNORECASE)
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1769
diff changeset
42
4009
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
43 def _detect_renderer(self, source, filename=None):
1604
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
44 """
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
45 runs detection of what renderer should be used for generating html
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
46 from a markup language
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1769
diff changeset
47
1604
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
48 filename can be also explicitly a renderer name
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1769
diff changeset
49
1604
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
50 :param source:
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
51 :param filename:
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
52 """
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
53
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
54 if MarkupRenderer.MARKDOWN_PAT.findall(filename):
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
55 detected_renderer = 'markdown'
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
56 elif MarkupRenderer.RST_PAT.findall(filename):
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
57 detected_renderer = 'rst'
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
58 elif MarkupRenderer.PLAIN_PAT.findall(filename):
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
59 detected_renderer = 'rst'
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
60 else:
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
61 detected_renderer = 'plain'
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
62
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
63 return getattr(MarkupRenderer, detected_renderer)
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
64
4009
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
65 @classmethod
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
66 def _flavored_markdown(cls, text):
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
67 """
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
68 Github style flavored markdown
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
69
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
70 :param text:
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
71 """
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
72 from hashlib import md5
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
73
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
74 # Extract pre blocks.
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
75 extractions = {}
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
76 def pre_extraction_callback(matchobj):
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
77 digest = md5(matchobj.group(0)).hexdigest()
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
78 extractions[digest] = matchobj.group(0)
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
79 return "{gfm-extraction-%s}" % digest
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
80 pattern = re.compile(r'<pre>.*?</pre>', re.MULTILINE | re.DOTALL)
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
81 text = re.sub(pattern, pre_extraction_callback, text)
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
82
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
83 # Prevent foo_bar_baz from ending up with an italic word in the middle.
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
84 def italic_callback(matchobj):
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
85 s = matchobj.group(0)
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
86 if list(s).count('_') >= 2:
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
87 return s.replace('_', '\_')
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
88 return s
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
89 text = re.sub(r'^(?! {4}|\t)\w+_\w+_\w[\w_]*', italic_callback, text)
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
90
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
91 # In very clear cases, let newlines become <br /> tags.
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
92 def newline_callback(matchobj):
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
93 if len(matchobj.group(1)) == 1:
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
94 return matchobj.group(0).rstrip() + ' \n'
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
95 else:
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
96 return matchobj.group(0)
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
97 pattern = re.compile(r'^[\w\<][^\n]*(\n+)', re.MULTILINE)
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
98 text = re.sub(pattern, newline_callback, text)
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
99
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
100 # Insert pre block extractions.
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
101 def pre_insert_callback(matchobj):
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
102 return '\n\n' + extractions[matchobj.group(1)]
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
103 text = re.sub(r'{gfm-extraction-([0-9a-f]{32})\}',
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
104 pre_insert_callback, text)
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
105
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
106 return text
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
107
1604
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
108 def render(self, source, filename=None):
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
109 """
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
110 Renders a given filename using detected renderer
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
111 it detects renderers based on file extension or mimetype.
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
112 At last it will just do a simple html replacing new lines with <br/>
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1769
diff changeset
113
1604
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
114 :param file_name:
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
115 :param source:
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
116 """
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
117
4009
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
118 renderer = self._detect_renderer(source, filename)
1604
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
119 readme_data = renderer(source)
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
120 return readme_data
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
121
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
122 @classmethod
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4009
diff changeset
123 def plain(cls, source, universal_newline=True):
1604
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
124 source = safe_unicode(source)
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4009
diff changeset
125 if universal_newline:
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4009
diff changeset
126 newline = '\n'
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4009
diff changeset
127 source = newline.join(source.splitlines())
1604
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
128 def urlify_text(text):
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
129 url_pat = re.compile(r'(http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]'
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
130 '|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+)')
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
131
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
132 def url_func(match_obj):
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
133 url_full = match_obj.groups()[0]
1996
0592987973eb activate codehilite extension on markdown renderer, inspired by bitbucket blog ;)
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
134 return '<a href="%(url)s">%(url)s</a>' % ({'url': url_full})
1604
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
135
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
136 return url_pat.sub(url_func, text)
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
137
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
138 source = urlify_text(source)
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
139 return '<br />' + source.replace("\n", '<br />')
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
140
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
141 @classmethod
4009
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
142 def markdown(cls, source, safe=True, flavored=False):
1604
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
143 source = safe_unicode(source)
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
144 try:
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
145 import markdown as __markdown
4009
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
146 if flavored:
7563624e712c Added github flavored markdown style rendering into markdown
Marcin Kuzminski <marcin@python-works.com>
parents: 3164
diff changeset
147 source = cls._flavored_markdown(source)
3164
01cb7df198ae Enable all Markdown Extra in Python markdown library.
xpol <xpolife@gmail.com>
parents: 3019
diff changeset
148 return __markdown.markdown(source, ['codehilite', 'extra'])
1604
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
149 except ImportError:
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
150 log.warning('Install markdown to use this function')
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
151 return cls.plain(source)
2747
cdce3d7282b2 catch errors on renderers, and display plain if critical rendering error is present
Marcin Kuzminski <marcin@python-works.com>
parents: 2201
diff changeset
152 except Exception:
cdce3d7282b2 catch errors on renderers, and display plain if critical rendering error is present
Marcin Kuzminski <marcin@python-works.com>
parents: 2201
diff changeset
153 log.error(traceback.format_exc())
cdce3d7282b2 catch errors on renderers, and display plain if critical rendering error is present
Marcin Kuzminski <marcin@python-works.com>
parents: 2201
diff changeset
154 if safe:
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4009
diff changeset
155 log.debug('Fallbacking to render in plain mode')
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4009
diff changeset
156 return cls.plain(source)
2747
cdce3d7282b2 catch errors on renderers, and display plain if critical rendering error is present
Marcin Kuzminski <marcin@python-works.com>
parents: 2201
diff changeset
157 else:
cdce3d7282b2 catch errors on renderers, and display plain if critical rendering error is present
Marcin Kuzminski <marcin@python-works.com>
parents: 2201
diff changeset
158 raise
1604
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
159
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
160 @classmethod
2747
cdce3d7282b2 catch errors on renderers, and display plain if critical rendering error is present
Marcin Kuzminski <marcin@python-works.com>
parents: 2201
diff changeset
161 def rst(cls, source, safe=True):
1604
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
162 source = safe_unicode(source)
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
163 try:
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
164 from docutils.core import publish_parts
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
165 from docutils.parsers.rst import directives
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
166 docutils_settings = dict([(alias, None) for alias in
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
167 cls.RESTRUCTUREDTEXT_DISALLOWED_DIRECTIVES])
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
168
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
169 docutils_settings.update({'input_encoding': 'unicode',
1996
0592987973eb activate codehilite extension on markdown renderer, inspired by bitbucket blog ;)
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
170 'report_level': 4})
1604
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
171
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
172 for k, v in docutils_settings.iteritems():
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
173 directives.register_directive(k, v)
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
174
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
175 parts = publish_parts(source=source,
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
176 writer_name="html4css1",
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
177 settings_overrides=docutils_settings)
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
178
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
179 return parts['html_title'] + parts["fragment"]
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
180 except ImportError:
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
181 log.warning('Install docutils to use this function')
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
182 return cls.plain(source)
2747
cdce3d7282b2 catch errors on renderers, and display plain if critical rendering error is present
Marcin Kuzminski <marcin@python-works.com>
parents: 2201
diff changeset
183 except Exception:
cdce3d7282b2 catch errors on renderers, and display plain if critical rendering error is present
Marcin Kuzminski <marcin@python-works.com>
parents: 2201
diff changeset
184 log.error(traceback.format_exc())
cdce3d7282b2 catch errors on renderers, and display plain if critical rendering error is present
Marcin Kuzminski <marcin@python-works.com>
parents: 2201
diff changeset
185 if safe:
4116
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4009
diff changeset
186 log.debug('Fallbacking to render in plain mode')
ffd45b185016 Imported some of the GPLv3'd changes from RhodeCode v2.2.5.
Bradley M. Kuhn <bkuhn@sfconservancy.org>
parents: 4009
diff changeset
187 return cls.plain(source)
2747
cdce3d7282b2 catch errors on renderers, and display plain if critical rendering error is present
Marcin Kuzminski <marcin@python-works.com>
parents: 2201
diff changeset
188 else:
cdce3d7282b2 catch errors on renderers, and display plain if critical rendering error is present
Marcin Kuzminski <marcin@python-works.com>
parents: 2201
diff changeset
189 raise
1604
bb3c2111bf92 initial version of markup renderer
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
190
1769
025f3333c769 @mention highlighting
Marcin Kuzminski <marcin@python-works.com>
parents: 1604
diff changeset
191 @classmethod
025f3333c769 @mention highlighting
Marcin Kuzminski <marcin@python-works.com>
parents: 1604
diff changeset
192 def rst_with_mentions(cls, source):
2201
ea5ff843b200 #426 fixed mention extracting regex
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
193 mention_pat = re.compile(MENTIONS_REGEX)
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1769
diff changeset
194
1769
025f3333c769 @mention highlighting
Marcin Kuzminski <marcin@python-works.com>
parents: 1604
diff changeset
195 def wrapp(match_obj):
025f3333c769 @mention highlighting
Marcin Kuzminski <marcin@python-works.com>
parents: 1604
diff changeset
196 uname = match_obj.groups()[0]
2201
ea5ff843b200 #426 fixed mention extracting regex
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
197 return ' **@%(uname)s** ' % {'uname': uname}
1769
025f3333c769 @mention highlighting
Marcin Kuzminski <marcin@python-works.com>
parents: 1604
diff changeset
198 mention_hl = mention_pat.sub(wrapp, source).strip()
025f3333c769 @mention highlighting
Marcin Kuzminski <marcin@python-works.com>
parents: 1604
diff changeset
199 return cls.rst(mention_hl)