#!/usr/bin/env python3 from starlette.applications import Starlette from starlette.responses import HTMLResponse from starlette.routing import Route import pygments from pygments.formatters import HtmlFormatter from pygments.lexers import guess_lexer, guess_lexer_for_filename from pygments.lexers.special import TextLexer from pygments.util import ClassNotFound formatter = None async def startup_task(): guess_lexer('') global formatter formatter = HtmlFormatter(style='pastie', nobackground=True) def do_highlight(filename, data): try: lexer = guess_lexer_for_filename(filename, data) except ClassNotFound: try: lexer = guess_lexer(data) # SqlLexer always gives 0.01 if lexer.analyse_text(data) <= 0.01: lexer = TextLexer() except ClassNotFound: lexer = TextLexer() return ''.join([ f'', '', pygments.highlight(data, lexer, formatter) ]) async def run_highlight(request): return HTMLResponse(do_highlight(request.query_params['filename'], await request.body())) app = Starlette( routes=[ Route('/highlight', run_highlight, methods=["POST"]), ], on_startup=[startup_task], )