Skip to content

Commit d90d2d8

Browse files
author
jomae
committed
1.7.1dev: merge [17873,17876-17878] from 1.6-stable (fix for #13864,13865,13866)
git-svn-id: http://trac.edgewall.org/intertrac/log:/trunk@17879 af82e41b-90c4-0310-8c96-b1721e28e2e2
1 parent 4e4d052 commit d90d2d8

File tree

4 files changed

+65
-31
lines changed

4 files changed

+65
-31
lines changed

trac/mimeview/pygments.py

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,20 @@
3737
__all__ = ['PygmentsRenderer']
3838

3939

40+
if hasattr(HtmlFormatter, 'get_background_style_defs') and \
41+
hasattr(HtmlFormatter, 'get_token_style_defs'):
42+
def _get_style_defs(style, arg):
43+
lines = []
44+
formatter = HtmlFormatter(style=style)
45+
lines.extend(formatter.get_background_style_defs(arg))
46+
lines.extend(formatter.get_token_style_defs(arg))
47+
return '\n'.join(lines)
48+
else:
49+
def _get_style_defs(style, arg):
50+
formatter = HtmlFormatter(style=style)
51+
return formatter.get_style_defs(arg)
52+
53+
4054
class PygmentsRenderer(Component):
4155
"""HTML renderer for syntax highlighting based on Pygments."""
4256

@@ -140,7 +154,7 @@ def get_preference_panels(self, req):
140154
yield 'pygments', _('Syntax Highlighting')
141155

142156
def render_preference_panel(self, req, panel):
143-
styles = list(get_all_styles())
157+
styles = set(get_all_styles())
144158

145159
if req.method == 'POST':
146160
style = req.args.get('style')
@@ -151,15 +165,25 @@ def render_preference_panel(self, req, panel):
151165
add_notice(req, _("Your preferences have been saved."))
152166
req.redirect(req.href.prefs(panel or None))
153167

154-
for style in sorted(styles):
155-
add_stylesheet(req, '/pygments/%s.css' % style, title=style.title())
168+
def style_defs(style):
169+
cls = get_style_by_name(style)
170+
selector = '.trac-pygments-%s div.code pre' % style
171+
return _get_style_defs(cls, selector)
172+
173+
default_style = self.default_style
174+
if default_style not in styles:
175+
default_style = 'trac'
176+
selection = req.session.get('pygments_style')
177+
if selection not in styles:
178+
selection = default_style
156179
output = self._generate('html', self.EXAMPLE)
157-
add_script_data(req, default_style=self.default_style.title())
180+
add_script_data(req, default_style=default_style, selection=selection)
158181
return 'prefs_pygments.html', {
159182
'output': output,
160-
'selection': req.session.get('pygments_style'),
161-
'default_style': self.default_style,
162-
'styles': styles
183+
'selection': selection,
184+
'default_style': default_style,
185+
'styles': sorted(styles),
186+
'style_defs': style_defs,
163187
}
164188

165189
# IRequestHandler methods
@@ -186,11 +210,8 @@ def process_request(self, req):
186210
req.end_headers()
187211
return
188212

189-
formatter = HtmlFormatter(style=style_cls)
190-
content = '\n\n'.join([
191-
formatter.get_style_defs('div.code pre'),
192-
formatter.get_style_defs('table.code td')
193-
]).encode('utf-8')
213+
content = _get_style_defs(style_cls, ['div.code pre', 'table.code td'])
214+
content = content.encode('utf-8')
194215

195216
req.send_response(200)
196217
req.send_header('Content-Type', 'text/css; charset=utf-8')

trac/mimeview/templates/prefs_pygments.html

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,21 @@
2424
div.code pre { border: 1px solid #999; font-size: 90%; margin: 1em 2em;
2525
padding: 5px; width: 60%;
2626
}
27+
# for style_ in styles:
28+
${- style_defs(style_)|safe}
29+
# endfor
2730
</style>
2831
<script>
29-
(function($){
30-
window.switchStyleSheet = function(title) {
31-
$('link[rel="stylesheet"][title]').each(function() {
32-
this.disabled = true; // needed to force correct behavior for WebKit (see #10923)
33-
this.disabled = this.getAttribute('title') != title;
34-
});
35-
}
36-
})(jQuery);
3732
jQuery(function($) {
38-
$("#pygment_theme").attr("autocomplete", "off").on('change keypress', function() {
39-
var idx = this.selectedIndex;
40-
var text = this.options[idx].text;
41-
var stylesheet = idx > 0 ? text : default_style;
42-
switchStyleSheet(stylesheet);
33+
var selection = window.selection;
34+
var default_style = window.default_style;
35+
var $theme = $('#pygment_theme');
36+
var $field = $theme.closest('div.field');
37+
$theme.attr("autocomplete", "off").on('change keypress', function() {
38+
var style = this.value || default_style;
39+
$field.removeClass('trac-pygments-' + selection)
40+
.addClass('trac-pygments-' + style);
41+
selection = style;
4342
}).change();
4443
});
4544
</script>
@@ -48,12 +47,12 @@
4847

4948
<body>
5049
# block prefpanel
51-
<div class="field">
50+
<div class="field trac-pygments-${selection}">
5251
<label>${_("Style:")}
5352
<select id="pygment_theme" name="style">
5453
<option value="">${_("Default: %(default)s",
5554
default=default_style.title())}</option>
56-
# for style in sorted(styles):
55+
# for style in styles:
5756
<option${{'value': style,
5857
'selected': selection == style
5958
}|htmlattr}>${style.title()}</option>

trac/mimeview/tests/pygments.data

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
# python_hello_pygments_2.1plus
55
<span class="k">def</span> <span class="nf">hello</span><span class="p">():</span>
66
<span class="k">return</span> <span class="s2">&quot;Hello World!&quot;</span>
7+
# python_hello_pygments_2.19plus
8+
<span class="k">def</span><span class="w"> </span><span class="nf">hello</span><span class="p">():</span>
9+
<span class="k">return</span> <span class="s2">&quot;Hello World!&quot;</span>
710
# python_hello_mimeview
811
<div class="code"><pre>
912
<span class="k">def</span> <span class="nf">hello</span><span class="p">():</span>
@@ -14,6 +17,11 @@
1417
<span class="k">def</span> <span class="nf">hello</span><span class="p">():</span>
1518
<span class="k">return</span> <span class="s2">&quot;Hello World!&quot;</span>
1619
</pre></div>
20+
# python_hello_mimeview_pygments_2.19plus
21+
<div class="code"><pre>
22+
<span class="k">def</span><span class="w"> </span><span class="nf">hello</span><span class="p">():</span>
23+
<span class="k">return</span> <span class="s2">&quot;Hello World!&quot;</span>
24+
</pre></div>
1725
# python_with_lineno_1
1826
<div class="wiki-code"><table class="code"><thead><tr><th class="lineno" title="Line numbers">Line</th><th class="content"> </th></tr></thead><tbody><tr><th id="a-L1"><a href="#a-L1">1</a></th><td><span class="k">print</span> <span class="s">&#39;this is a python sample&#39;</span>
1927
</td></tr><tr><th id="a-L2"><a href="#a-L2">2</a></th><td><span class="n">a</span> <span class="o">=</span> <span class="n">b</span><span class="o">+</span><span class="mi">3</span>

trac/mimeview/tests/pygments.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,12 @@ def hello():
8787
"""))
8888
self.assertTrue(result)
8989
if pygments_version < parse_version('2.1'):
90-
self._test('python_hello', result)
90+
expected_id = 'python_hello'
91+
elif pygments_version < parse_version('2.19'):
92+
expected_id = 'python_hello_pygments_2.1plus'
9193
else:
92-
self._test('python_hello_pygments_2.1plus', result)
94+
expected_id = 'python_hello_pygments_2.19plus'
95+
self._test(expected_id, result)
9396

9497
def test_python_hello_mimeview(self):
9598
"""
@@ -102,9 +105,12 @@ def hello():
102105
"""))
103106
self.assertTrue(result)
104107
if pygments_version < parse_version('2.1'):
105-
self._test('python_hello_mimeview', result)
108+
expected_id = 'python_hello_mimeview'
109+
elif pygments_version < parse_version('2.19'):
110+
expected_id = 'python_hello_mimeview_pygments_2.1plus'
106111
else:
107-
self._test('python_hello_mimeview_pygments_2.1plus', result)
112+
expected_id = 'python_hello_mimeview_pygments_2.19plus'
113+
self._test(expected_id, result)
108114

109115
def test_python_with_lineno(self):
110116
result = format_to_html(self.env, self.context, textwrap.dedent("""\

0 commit comments

Comments
 (0)