summaryrefslogtreecommitdiff
path: root/searx/webapp.py
diff options
context:
space:
mode:
authorAdam Tauber <asciimoo@gmail.com>2015-01-15 18:57:08 +0100
committerAdam Tauber <asciimoo@gmail.com>2015-01-15 18:57:08 +0100
commit75bd4556f8cca8c39799fdee02739408a4d84cfa (patch)
tree8e2545b9953f6d7f1e94d5aad85cab75295c590d /searx/webapp.py
parentc5599e3c7c790ac2674b68f99919c0ec284327a3 (diff)
parentfe5ff5137711e6f8799e3e635543e75ad8fbe331 (diff)
Merge branch 'pointhi-code_results'
Diffstat (limited to 'searx/webapp.py')
-rw-r--r--searx/webapp.py57
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']