diff options
| author | Adam Tauber <asciimoo@gmail.com> | 2015-01-15 18:57:08 +0100 |
|---|---|---|
| committer | Adam Tauber <asciimoo@gmail.com> | 2015-01-15 18:57:08 +0100 |
| commit | 75bd4556f8cca8c39799fdee02739408a4d84cfa (patch) | |
| tree | 8e2545b9953f6d7f1e94d5aad85cab75295c590d /searx/webapp.py | |
| parent | c5599e3c7c790ac2674b68f99919c0ec284327a3 (diff) | |
| parent | fe5ff5137711e6f8799e3e635543e75ad8fbe331 (diff) | |
Merge branch 'pointhi-code_results'
Diffstat (limited to 'searx/webapp.py')
| -rw-r--r-- | searx/webapp.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/searx/webapp.py b/searx/webapp.py index 8ed4cc7c1..877e40ddc 100644 --- a/searx/webapp.py +++ b/searx/webapp.py @@ -48,6 +48,14 @@ from searx.search import Search from searx.query import Query from searx.autocomplete import searx_bang, backends as autocomplete_backends from searx import logger +try: + from pygments import highlight + from pygments.lexers import get_lexer_by_name + from pygments.formatters import HtmlFormatter +except: + logger.critical("cannot import dependency: pygments") + from sys import exit + exit(1) logger = logger.getChild('webapp') @@ -101,6 +109,55 @@ def get_locale(): return locale +# code-highlighter +@app.template_filter('code_highlighter') +def code_highlighter(codelines, language=None): + if not language: + language = 'text' + + try: + # find lexer by programing language + lexer = get_lexer_by_name(language, stripall=True) + except: + # if lexer is not found, using default one + logger.debug('highlighter cannot find lexer for {0}'.format(language)) + lexer = get_lexer_by_name('text', stripall=True) + + html_code = '' + tmp_code = '' + last_line = None + + # parse lines + for line, code in codelines: + if not last_line: + line_code_start = line + + # new codeblock is detected + if last_line is not None and\ + last_line + 1 != line: + + # highlight last codepart + formatter = HtmlFormatter(linenos='inline', + linenostart=line_code_start) + html_code = html_code + highlight(tmp_code, lexer, formatter) + + # reset conditions for next codepart + tmp_code = '' + line_code_start = line + + # add codepart + tmp_code += code + '\n' + + # update line + last_line = line + + # highlight last codepart + formatter = HtmlFormatter(linenos='inline', linenostart=line_code_start) + html_code = html_code + highlight(tmp_code, lexer, formatter) + + return html_code + + def get_base_url(): if settings['server']['base_url']: hostname = settings['server']['base_url'] |