# HG changeset patch # User Rocco Rutte # Date 2008-09-05 08:39:57 # Node ID d09e813b21e36b1f3ec8ac9bbd63ea41305d72d0 # Parent 55c16f12908b6983c21efc957f77f3b5650c7f0b 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 tag for its CSS to the template's header (which is pointless in text/plain output). diff --git a/hgext/highlight/__init__.py b/hgext/highlight/__init__.py --- a/hgext/highlight/__init__.py +++ b/hgext/highlight/__init__.py @@ -25,14 +25,25 @@ web_filerevision = webcommands._filerevi web_annotate = webcommands.annotate def filerevision_highlight(web, tmpl, fctx): - style = web.config('web', 'pygments_style', 'colorful') - highlight.pygmentize('fileline', fctx, style, tmpl) + 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): - fctx = webutil.filectx(web.repo, req) - style = web.config('web', 'pygments_style', 'colorful') - highlight.pygmentize('annotateline', fctx, style, 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): diff --git a/tests/test-highlight b/tests/test-highlight --- a/tests/test-highlight +++ b/tests/test-highlight @@ -18,14 +18,41 @@ echo % hg serve hg serve -p $HGPORT -d -n test --pid-file=hg.pid -A access.log -E errors.log cat hg.pid >> $DAEMON_PIDS -echo % hgweb filerevision +echo % hgweb filerevision, html ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/get-with-headers.py') \ | sed "s/[0-9]* years ago/long ago/g" -echo % hgweb fileannotate +echo % hgweb fileannotate, html ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/annotate/tip/get-with-headers.py') \ | sed "s/[0-9]* years ago/long ago/g" +echo % hgweb fileannotate, raw +("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/annotate/tip/get-with-headers.py?style=raw') \ + | sed "s/test@//" > a + +echo "200 Script output follows" > b +echo "" >> b +echo "" >> b +hg annotate "get-with-headers.py" >> b +echo "" >> b +echo "" >> b +echo "" >> b +echo "" >> b + +diff -u b a + +echo +echo % hgweb filerevision, raw +("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/get-with-headers.py?style=raw') \ + > a + +echo "200 Script output follows" > b +echo "" >> b +hg cat get-with-headers.py >> b + +diff -u b a + +echo echo % hgweb highlightcss friendly "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/highlightcss' > out head -n 4 out diff --git a/tests/test-highlight.out b/tests/test-highlight.out --- a/tests/test-highlight.out +++ b/tests/test-highlight.out @@ -1,6 +1,6 @@ adding get-with-headers.py % hg serve -% hgweb filerevision +% hgweb filerevision, html 200 Script output follows @@ -63,7 +63,7 @@ 200 Script output follows -% hgweb fileannotate +% hgweb fileannotate, html 200 Script output follows @@ -130,6 +130,10 @@ 200 Script output follows +% hgweb fileannotate, raw + +% hgweb filerevision, raw + % hgweb highlightcss friendly 200 Script output follows