##// END OF EJS Templates
revlog: don't use slicing to return parents...
revlog: don't use slicing to return parents This is the only place we use a slice on index entries, which are currently tuples. In preparation for moving away from tuples, let's stop using slices so we don't have to implement that support on the new type. We also tweak the logic slightly so the exception only catches the IndexError on the index lookup, not on the index entry lookup. The old code should never have been buggy. But it was semantically wrong. Differential Revision: https://phab.mercurial-scm.org/D1764

File last commit:

r35330:169d66db default
r35539:a0fab647 default
Show More
highlight.py
93 lines | 3.0 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
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
Augie Fackler
highlight: put pygments import inside demandimport.deactivated...
r32908 with demandimport.deactivated():
import pygments
import pygments.formatters
import pygments.lexers
Augie Fackler
highlight: eagerly discover plugin lexers while demandimport is off...
r35330 import pygments.plugin
Augie Fackler
highlight: put pygments import inside demandimport.deactivated...
r32908 import pygments.util
Augie Fackler
highlight: eagerly discover plugin lexers while demandimport is off...
r35330 for unused in pygments.plugin.find_plugin_lexers():
pass
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