Mercurial > hg
view hgext/highlight/__init__.py @ 6987:d09e813b21e3
highlight: only pygmentize for HTML mimetypes
For non-html mimetypes it doesn't make much sense. This also fixes the
issue that highlight unconditionally adds a <link/> tag for its CSS to
the template's header (which is pointless in text/plain output).
author | Rocco Rutte <pdmef@gmx.net> |
---|---|
date | Fri, 05 Sep 2008 10:39:57 +0200 |
parents | ce94b3236ea4 |
children | 9df67ee30ef5 |
line wrap: on
line source
"""a mercurial extension for syntax highlighting in hgweb It depends on the pygments syntax highlighting library: http://pygments.org/ To enable the extension add this to hgrc: [extensions] hgext.highlight = There is a single configuration option: [web] pygments_style = <style> The default is 'colorful'. -- Adam Hupp <adam@hupp.org> """ import highlight from mercurial.hgweb import webcommands, webutil, common web_filerevision = webcommands._filerevision web_annotate = webcommands.annotate def filerevision_highlight(web, tmpl, fctx): mt = ''.join(tmpl('mimetype', encoding=web.encoding)) # 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) return web_filerevision(web, tmpl, fctx) def annotate_highlight(web, req, tmpl): mt = ''.join(tmpl('mimetype', encoding=web.encoding)) if 'html' in mt: fctx = webutil.filectx(web.repo, req) style = web.config('web', 'pygments_style', 'colorful') highlight.pygmentize('annotateline', fctx, style, tmpl) return web_annotate(web, req, tmpl) 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 webcommands._filerevision = filerevision_highlight webcommands.annotate = annotate_highlight webcommands.highlightcss = generate_css webcommands.__all__.append('highlightcss')