__init__.py
59 lines
| 2.3 KiB
| text/x-python
|
PythonLexer
Martin Geisler
|
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 | ||||
# GNU General Public License version 2, incorporated herein by reference. | ||||
# | ||||
# The original module was split in an interface and an implementation | ||||
# file to defer pygments loading and speedup extension setup. | ||||
Dirkjan Ochtman
|
r8932 | """syntax highlighting for hgweb (requires Pygments) | ||
Patrick Mezard
|
r6938 | |||
Martin Geisler
|
r9064 | It depends on the Pygments syntax highlighting library: http://pygments.org/ | ||
Patrick Mezard
|
r6938 | |||
There is a single configuration option: | ||||
[web] | ||||
pygments_style = <style> | ||||
The default is 'colorful'. | ||||
""" | ||||
import highlight | ||||
from mercurial.hgweb import webcommands, webutil, common | ||||
Dirkjan Ochtman
|
r8874 | from mercurial import extensions, encoding | ||
Patrick Mezard
|
r6938 | |||
Matt Mackall
|
r7216 | def filerevision_highlight(orig, web, tmpl, fctx): | ||
Dirkjan Ochtman
|
r8874 | mt = ''.join(tmpl('mimetype', encoding=encoding.encoding)) | ||
Rocco Rutte
|
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 | ||||
if 'html' in mt: | ||||
style = web.config('web', 'pygments_style', 'colorful') | ||||
highlight.pygmentize('fileline', fctx, style, tmpl) | ||||
Matt Mackall
|
r7216 | return orig(web, tmpl, fctx) | ||
Patrick Mezard
|
r6938 | |||
Matt Mackall
|
r7216 | def annotate_highlight(orig, web, req, tmpl): | ||
Dirkjan Ochtman
|
r8874 | mt = ''.join(tmpl('mimetype', encoding=encoding.encoding)) | ||
Rocco Rutte
|
r6987 | if 'html' in mt: | ||
fctx = webutil.filectx(web.repo, req) | ||||
style = web.config('web', 'pygments_style', 'colorful') | ||||
highlight.pygmentize('annotateline', fctx, style, tmpl) | ||||
Matt Mackall
|
r7216 | return orig(web, req, tmpl) | ||
Patrick Mezard
|
r6938 | |||
def generate_css(web, req, tmpl): | ||||
pg_style = web.config('web', 'pygments_style', 'colorful') | ||||
fmter = highlight.HtmlFormatter(style = pg_style) | ||||
req.respond(common.HTTP_OK, 'text/css') | ||||
return ['/* pygments_style = %s */\n\n' % pg_style, fmter.get_style_defs('')] | ||||
# monkeypatch in the new version | ||||
Matt Mackall
|
r7216 | extensions.wrapfunction(webcommands, '_filerevision', filerevision_highlight) | ||
extensions.wrapfunction(webcommands, 'annotate', annotate_highlight) | ||||
Patrick Mezard
|
r6938 | webcommands.highlightcss = generate_css | ||
webcommands.__all__.append('highlightcss') | ||||