Use heuristics to decide what to colorize
In practise pygments seems to have a very hard time processing large files and files with long lines, so try to avoid using it in those cases. Signed-off-by: Alberto Bertogli <albertito@blitiri.com.ar>
This commit is contained in:
parent
ba3b2132f5
commit
62da3ebc08
2
git-arr
2
git-arr
@ -158,7 +158,7 @@ def with_utils(f):
|
||||
"""
|
||||
utilities = {
|
||||
'shorten': utils.shorten,
|
||||
'has_colorizer': utils.has_colorizer,
|
||||
'can_colorize': utils.can_colorize,
|
||||
'colorize_diff': utils.colorize_diff,
|
||||
'colorize_blob': utils.colorize_blob,
|
||||
'abort': bottle.abort,
|
||||
|
24
utils.py
24
utils.py
@ -18,8 +18,28 @@ def shorten(s, width = 60):
|
||||
return s
|
||||
return s[:57] + "..."
|
||||
|
||||
def has_colorizer():
|
||||
return pygments is not None
|
||||
def can_colorize(s):
|
||||
"""True if we can colorize the string, False otherwise."""
|
||||
if pygments is None:
|
||||
return False
|
||||
|
||||
# Pygments can take a huge amount of time with long files, or with very
|
||||
# long lines; these are heuristics to try to avoid those situations.
|
||||
if len(s) > (512 * 1024):
|
||||
return False
|
||||
|
||||
# If any of the first 5 lines is over 300 characters long, don't colorize.
|
||||
start = 0
|
||||
for i in range(5):
|
||||
pos = s.find('\n', start)
|
||||
if pos == -1:
|
||||
break
|
||||
|
||||
if pos - start > 300:
|
||||
return False
|
||||
start = pos + 1
|
||||
|
||||
return True
|
||||
|
||||
def colorize_diff(s):
|
||||
lexer = lexers.DiffLexer(encoding = 'utf-8')
|
||||
|
@ -36,7 +36,7 @@
|
||||
<a href="">{{!fname.html}}</a>
|
||||
</h3>
|
||||
|
||||
% if has_colorizer():
|
||||
% if can_colorize(blob):
|
||||
{{!colorize_blob(fname.unicode, blob)}}
|
||||
% else:
|
||||
<pre class="blob-body">
|
||||
|
@ -55,7 +55,7 @@
|
||||
|
||||
<hr/>
|
||||
|
||||
% if has_colorizer():
|
||||
% if can_colorize(c.diff.body):
|
||||
{{!colorize_diff(c.diff.body)}}
|
||||
% else:
|
||||
<pre class="diff-body">
|
||||
|
Loading…
Reference in New Issue
Block a user