##// END OF EJS Templates
py3: make a pycompat.osdevnull, use it in extdiff...
py3: make a pycompat.osdevnull, use it in extdiff Differential Revision: https://phab.mercurial-scm.org/D7545

File last commit:

r43347:687b865b default
r44229:765a9c29 default
Show More
__init__.py
109 lines | 3.5 KiB | text/x-python | PythonLexer
Martin Geisler
highlight: add copyright and license header
r8251 # highlight - syntax highlighting in hgweb, based on Pygments
#
# Copyright 2008, 2009 Patrick Mezard <pmezard@gmail.com> 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.
Martin Geisler
highlight: add copyright and license header
r8251 #
# The original module was split in an interface and an implementation
# file to defer pygments loading and speedup extension setup.
Dirkjan Ochtman
extensions: fix up description lines some more
r8932 """syntax highlighting for hgweb (requires Pygments)
Patrick Mezard
highlight: split code to improve startup times
r6938
Martin Geisler
highlight: wrap docstrings at 70 characters
r9262 It depends on the Pygments syntax highlighting library:
http://pygments.org/
Patrick Mezard
highlight: split code to improve startup times
r6938
Gregory Szorc
highlight: add option to prevent content-only based fallback...
r26680 There are the following configuration options::
Patrick Mezard
highlight: split code to improve startup times
r6938
Martin Geisler
highlight: use reST syntax for literal block
r9210 [web]
av6
highlight: add highlightfiles config option which takes a fileset (issue3005)...
r26249 pygments_style = <style> (default: colorful)
highlightfiles = <fileset> (default: size('<5M'))
Gregory Szorc
highlight: add option to prevent content-only based fallback...
r26680 highlightonlymatchfilename = <bool> (default False)
``highlightonlymatchfilename`` will only highlight files if their type could
be identified by their filename. When this is not enabled (the default),
Pygments will try very hard to identify the file type from content and any
match (even matches with a low confidence score) will be used.
Patrick Mezard
highlight: split code to improve startup times
r6938 """
Pulkit Goyal
py3: make files use absolute_import and print_function...
r29485 from __future__ import absolute_import
from . import highlight
from mercurial.hgweb import (
webcommands,
webutil,
)
from mercurial import (
extensions,
Connor Sheehan
highlight: fix encoding issues to enable Py3 compatibility...
r43193 pycompat,
Pulkit Goyal
py3: make files use absolute_import and print_function...
r29485 )
Augie Fackler
extensions: change magic "shipped with hg" string...
r29841 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for
Augie Fackler
extensions: document that `testedwith = 'internal'` is special...
r25186 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
# be specifying the version(s) of Mercurial they are tested with, or
# leave the attribute unspecified.
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 testedwith = b'ships-with-hg-core'
Patrick Mezard
highlight: split code to improve startup times
r6938
Augie Fackler
formatting: blacken the codebase...
r43346
Gregory Szorc
highlight: inline checkfctx()...
r26679 def pygmentize(web, field, fctx, tmpl):
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 style = web.config(b'web', b'pygments_style', b'colorful')
expr = web.config(b'web', b'highlightfiles', b"size('<5M')")
filenameonly = web.configbool(b'web', b'highlightonlymatchfilename', False)
Gregory Szorc
highlight: inline checkfctx()...
r26679
av6
highlight: add highlightfiles config option which takes a fileset (issue3005)...
r26249 ctx = fctx.changectx()
Yuya Nishihara
highlight: use matcher API to test if file should be pygmentized...
r38710 m = ctx.matchfileset(expr)
if m(fctx.path()):
Augie Fackler
formatting: blacken the codebase...
r43346 highlight.pygmentize(
field, fctx, style, tmpl, guessfilenameonly=filenameonly
)
Gregory Szorc
highlight: consolidate duplicate code...
r26678
Gregory Szorc
hgweb: stop passing req and tmpl into @webcommand functions (API)...
r36903 def filerevision_highlight(orig, web, fctx):
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 mt = web.res.headers[b'Content-Type']
Rocco Rutte
highlight: only pygmentize for HTML mimetypes...
r6987 # only pygmentize for mimetype containing 'html' so we both match
# 'text/html' and possibly 'application/xhtml+xml' in the future
# so that we don't have to touch the extension when the mimetype
# for a template changes; also hgweb optimizes the case that a
# raw file is sent using rawfile() and doesn't call us, so we
# can't clash with the file's content-type here in case we
# pygmentize a html file
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if b'html' in mt:
pygmentize(web, b'fileline', fctx, web.tmpl)
Gregory Szorc
highlight: consolidate duplicate code...
r26678
Gregory Szorc
hgweb: stop passing req and tmpl into @webcommand functions (API)...
r36903 return orig(web, fctx)
Patrick Mezard
highlight: split code to improve startup times
r6938
Augie Fackler
formatting: blacken the codebase...
r43346
Gregory Szorc
hgweb: stop passing req and tmpl into @webcommand functions (API)...
r36903 def annotate_highlight(orig, web):
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 mt = web.res.headers[b'Content-Type']
if b'html' in mt:
Gregory Szorc
hgweb: pass modern request type into various webutil functions (API)...
r36902 fctx = webutil.filectx(web.repo, web.req)
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 pygmentize(web, b'annotateline', fctx, web.tmpl)
Gregory Szorc
highlight: consolidate duplicate code...
r26678
Gregory Szorc
hgweb: stop passing req and tmpl into @webcommand functions (API)...
r36903 return orig(web)
Patrick Mezard
highlight: split code to improve startup times
r6938
Augie Fackler
formatting: blacken the codebase...
r43346
Gregory Szorc
hgweb: stop passing req and tmpl into @webcommand functions (API)...
r36903 def generate_css(web):
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 pg_style = web.config(b'web', b'pygments_style', b'colorful')
Connor Sheehan
highlight: fix encoding issues to enable Py3 compatibility...
r43193 fmter = highlight.HtmlFormatter(style=pycompat.sysstr(pg_style))
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 web.res.headers[b'Content-Type'] = b'text/css'
style_defs = fmter.get_style_defs(pycompat.sysstr(b''))
Augie Fackler
formatting: blacken the codebase...
r43346 web.res.setbodybytes(
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 b''.join(
Augie Fackler
formatting: blacken the codebase...
r43346 [
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 b'/* pygments_style = %s */\n\n' % pg_style,
Augie Fackler
formatting: blacken the codebase...
r43346 pycompat.bytestr(style_defs),
]
)
)
Gregory Szorc
hgweb: always return iterable from @webcommand functions (API)...
r36896 return web.res.sendresponse()
Patrick Mezard
highlight: split code to improve startup times
r6938
Augie Fackler
formatting: blacken the codebase...
r43346
Matt Harbison
extensions: deprecate extsetup without a `ui` argument (API)...
r41098 def extsetup(ui):
Martin Geisler
highlight: move code from module top-level into extsetup
r9409 # monkeypatch in the new version
Augie Fackler
formatting: blacken the codebase...
r43346 extensions.wrapfunction(
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 webcommands, b'_filerevision', filerevision_highlight
Augie Fackler
formatting: blacken the codebase...
r43346 )
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 extensions.wrapfunction(webcommands, b'annotate', annotate_highlight)
Martin Geisler
highlight: move code from module top-level into extsetup
r9409 webcommands.highlightcss = generate_css
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 webcommands.__all__.append(b'highlightcss')