##// END OF EJS Templates
hook: lower inflated use of sys.__stdout__ and __stderr__...
hook: lower inflated use of sys.__stdout__ and __stderr__ They were introduced at 9f76df0edb7d, where sys.stdout could be replaced by sys.stderr. After that, we've changed the way of stdout redirection by afccc64eea73, so we no longer need to reference the original __stdout__ and __stderr__ objects. Let's move away from using __std*__ objects so we can simply wrap sys.std* objects for Python 3 porting.

File last commit:

r29485:6a98f940 default
r30365:5564fcd0 default
Show More
highlight.py
88 lines | 2.8 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
Matt Mackall
Update license to GPLv2+
r10263 # GNU General Public License version 2 or any later version.
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.
Pulkit Goyal
py3: make files use absolute_import and print_function...
r29485 from __future__ import absolute_import
import pygments
import pygments.formatters
import pygments.lexers
import pygments.util
Patrick Mezard
highlight: split code to improve startup times
r6938 from mercurial import demandimport
Benoit Boissinot
fix coding style (reported by pylint)
r10394 demandimport.ignore.extend(['pkgutil', 'pkg_resources', '__main__'])
Pulkit Goyal
py3: make files use absolute_import and print_function...
r29485
from mercurial import (
encoding,
util,
)
Patrick Mezard
highlight: split code to improve startup times
r6938
Pulkit Goyal
py3: make files use absolute_import and print_function...
r29485 highlight = pygments.highlight
ClassNotFound = pygments.util.ClassNotFound
guess_lexer = pygments.lexers.guess_lexer
guess_lexer_for_filename = pygments.lexers.guess_lexer_for_filename
TextLexer = pygments.lexers.TextLexer
HtmlFormatter = pygments.formatters.HtmlFormatter
Patrick Mezard
highlight: split code to improve startup times
r6938
SYNTAX_CSS = ('\n<link rel="stylesheet" href="{url}highlightcss" '
'type="text/css" />')
Gregory Szorc
highlight: add option to prevent content-only based fallback...
r26680 def pygmentize(field, fctx, style, tmpl, guessfilenameonly=False):
Patrick Mezard
highlight: split code to improve startup times
r6938
# append a <link ...> to the syntax highlighting css
Matt Mackall
highlight: fix to work with caching templater
r10959 old_header = tmpl.load('header')
Patrick Mezard
highlight: split code to improve startup times
r6938 if SYNTAX_CSS not in old_header:
timeless
cleanup: remove superfluous space after space after equals (python)
r27637 new_header = old_header + SYNTAX_CSS
Patrick Mezard
highlight: split code to improve startup times
r6938 tmpl.cache['header'] = new_header
text = fctx.data()
if util.binary(text):
return
Matt Mackall
highlight: ignore Unicode's extra linebreaks (issue4291)...
r23613 # str.splitlines() != unicode.splitlines() because "reasons"
for c in "\x0c\x1c\x1d\x1e":
if c in text:
text = text.replace(c, '')
Yuya Nishihara
highlight: fixes garbled text in non-UTF-8 environment...
r9424 # Pygments is best used with Unicode strings:
# <http://pygments.org/docs/unicode/>
text = text.decode(encoding.encoding, 'replace')
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:
Alexander Plavin
highlight: fix page layout with empty first and last lines...
r19169 lexer = guess_lexer_for_filename(fctx.path(), text[:1024],
stripnl=False)
Patrick Mezard
highlight: split code to improve startup times
r6938 except (ClassNotFound, ValueError):
Gregory Szorc
highlight: add option to prevent content-only based fallback...
r26680 # guess_lexer will return a lexer if *any* lexer matches. There is
# no way to specify a minimum match score. This can give a high rate of
# false positives on files with an unknown filename pattern.
if guessfilenameonly:
return
Patrick Mezard
highlight: split code to improve startup times
r6938 try:
Alexander Plavin
highlight: fix page layout with empty first and last lines...
r19169 lexer = guess_lexer(text[:1024], stripnl=False)
Patrick Mezard
highlight: split code to improve startup times
r6938 except (ClassNotFound, ValueError):
av6
highlight: exit early on textual and unknown files (issue3005)...
r25899 # Don't highlight unknown files
return
# Don't highlight text files
if isinstance(lexer, TextLexer):
return
Patrick Mezard
highlight: split code to improve startup times
r6938
av6
highlight: produce correct markup when there's a blank line just before EOF...
r25867 formatter = HtmlFormatter(nowrap=True, style=style)
Patrick Mezard
highlight: split code to improve startup times
r6938
colorized = highlight(text, lexer, formatter)
Yuya Nishihara
highlight: fixes garbled text in non-UTF-8 environment...
r9424 coloriter = (s.encode(encoding.encoding, 'replace')
for s in colorized.splitlines())
Patrick Mezard
highlight: split code to improve startup times
r6938
timeless
py3: convert to next() function...
r29216 tmpl.filters['colorize'] = lambda x: next(coloriter)
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