diff options
author | Alberto Bertogli <albertito@blitiri.com.ar> | 2012-11-14 01:48:46 +0100 |
---|---|---|
committer | Alberto Bertogli <albertito@blitiri.com.ar> | 2012-11-18 15:55:22 +0100 |
commit | 62da3ebc08949d60a9d7b6ce84d9fe6ed68110db (patch) | |
tree | d94cf05ed4cc34ebdeb8413d7ed59887f082ef62 /utils.py | |
parent | ba3b2132f5ffa852579734a350104a719f654b64 (diff) | |
download | git-arr-fork-62da3ebc08949d60a9d7b6ce84d9fe6ed68110db.zip |
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>
Diffstat (limited to 'utils.py')
-rw-r--r-- | utils.py | 24 |
1 files changed, 22 insertions, 2 deletions
@@ -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') |