highlight / highlighter.py

#!/usr/bin/env python

from cherrypy import expose, quickstart, tools
from pygments import highlight
from pygments.lexers import get_lexer_by_name, guess_lexer
from pygments.formatters import HtmlFormatter

class Highlighter:
    @expose
    def index(self, **kw):
        with open("index.html") as fo:
            return fo.read()

    @expose
    def highlight(self, **kw):
        code = kw.get("code", "")
        if not code:
            return ""

        lang = kw.get("lang", "").lower()
        if not lang:
            lexer = guess_lexer(code)
        else:
            lexer = get_lexer_by_name(lang)

        linenos = kw.get("linenos", 0)

        formatter = HtmlFormatter(linenos=linenos, cssclass="source")
        return highlight(code, lexer, formatter)

    @expose
    @tools.response_headers(headers=[("Content-Type", "text/css")])
    def css(self, **kw):
        return HtmlFormatter().get_style_defs()

    @expose
    @tools.response_headers(headers=[("Content-Type", "application/json")])
    def js(self, **kw):
        with open("jquery.js") as fo:
            jquery = fo.read()
        with open("highlight.js") as fo:
            script = fo.read()

        return "%s\n%s" % (jquery, script)

    @expose
    def demo(self, **kw):
        with open("demo.html") as fo:
            return fo.read()

if __name__ == "__main__":
    quickstart(Highlighter())
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.