Mercurial > kallithea
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 |
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) |