##// END OF EJS Templates
Factor tags module out of localrepo (issue548)....
Factor tags module out of localrepo (issue548). Currently only handles reading tags, and will soon grow support for tag caching. Could eventually deal with updating tags too.

File last commit:

r8360:acc202b7 default
r9149:abb7d4d4 default
Show More
highlight.py
60 lines | 2.1 KiB | text/x-python | PythonLexer
Martin Geisler
highlight: add copyright and license header
r8251 # highlight.py - highlight extension implementation file
#
# Copyright 2007-2009 Adam Hupp <adam@hupp.org> and others
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2, incorporated herein by reference.
Patrick Mezard
highlight: split code to improve startup times
r6938 #
# The original module was split in an interface and an implementation
# file to defer pygments loading and speedup extension setup.
from mercurial import demandimport
demandimport.ignore.extend(['pkgutil', 'pkg_resources', '__main__',])
Matt Mackall
move encoding bits from util to encoding...
r7948 from mercurial import util, encoding
Patrick Mezard
highlight: split code to improve startup times
r6938
from pygments import highlight
from pygments.util import ClassNotFound
from pygments.lexers import guess_lexer, guess_lexer_for_filename, TextLexer
from pygments.formatters import HtmlFormatter
SYNTAX_CSS = ('\n<link rel="stylesheet" href="{url}highlightcss" '
'type="text/css" />')
def pygmentize(field, fctx, style, tmpl):
# append a <link ...> to the syntax highlighting css
old_header = ''.join(tmpl('header'))
if SYNTAX_CSS not in old_header:
new_header = old_header + SYNTAX_CSS
tmpl.cache['header'] = new_header
text = fctx.data()
if util.binary(text):
return
Christian Ebert
highlight: convert text to local before passing to pygmentize (issue1341)...
r7120 # avoid UnicodeDecodeError in pygments
Matt Mackall
move encoding bits from util to encoding...
r7948 text = encoding.tolocal(text)
Christian Ebert
highlight: convert text to local before passing to pygmentize (issue1341)...
r7120
Patrick Mezard
highlight: split code to improve startup times
r6938 # To get multi-line strings right, we can't format line-by-line
try:
lexer = guess_lexer_for_filename(fctx.path(), text[:1024],
Matt Mackall
move encoding bits from util to encoding...
r7948 encoding=encoding.encoding)
Patrick Mezard
highlight: split code to improve startup times
r6938 except (ClassNotFound, ValueError):
try:
Matt Mackall
move encoding bits from util to encoding...
r7948 lexer = guess_lexer(text[:1024], encoding=encoding.encoding)
Patrick Mezard
highlight: split code to improve startup times
r6938 except (ClassNotFound, ValueError):
Matt Mackall
move encoding bits from util to encoding...
r7948 lexer = TextLexer(encoding=encoding.encoding)
Patrick Mezard
highlight: split code to improve startup times
r6938
Matt Mackall
move encoding bits from util to encoding...
r7948 formatter = HtmlFormatter(style=style, encoding=encoding.encoding)
Patrick Mezard
highlight: split code to improve startup times
r6938
colorized = highlight(text, lexer, formatter)
# strip wrapping div
colorized = colorized[:colorized.find('\n</pre>')]
colorized = colorized[colorized.find('<pre>')+5:]
coloriter = iter(colorized.splitlines())
Dirkjan Ochtman
templater: provide the standard template filters by default
r8360 tmpl.filters['colorize'] = lambda x: coloriter.next()
Patrick Mezard
highlight: split code to improve startup times
r6938
oldl = tmpl.cache[field]
newl = oldl.replace('line|escape', 'line|colorize')
tmpl.cache[field] = newl