diff hgext/highlight/__init__.py @ 6938:ce94b3236ea4

highlight: split code to improve startup times
author Patrick Mezard <pmezard@gmail.com>
date Mon, 25 Aug 2008 23:04:56 +0200
parents
children d09e813b21e3
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hgext/highlight/__init__.py	Mon Aug 25 23:04:56 2008 +0200
@@ -0,0 +1,50 @@
+"""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):
+    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):
+    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')