Mercurial > hg
view hgext/highlight/__init__.py @ 7127:9df67ee30ef5
help: better documentation intro for a few extensions
author | Dirkjan Ochtman <dirkjan@ochtman.nl> |
---|---|
date | Sat, 18 Oct 2008 16:56:39 +0200 |
parents | d09e813b21e3 |
children | 292fb2ad2846 |
line wrap: on
line source
"""syntax highlighting in hgweb, based on Pygments 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')