From 3fe840b52e4d780587f14d06a46fcab523ba23c3 Mon Sep 17 00:00:00 2001 From: maheshgudi Date: Mon, 20 Aug 2018 17:35:55 +0530 Subject: Add syntax highlight for code answers in answerpaper --- requirements/requirements-common.txt | 1 + yaksh/templates/yaksh/grade_user.html | 5 ++++- yaksh/templates/yaksh/user_data.html | 4 +++- yaksh/templates/yaksh/view_answerpaper.html | 4 +++- yaksh/templatetags/custom_filters.py | 13 +++++++++++++ 5 files changed, 24 insertions(+), 3 deletions(-) diff --git a/requirements/requirements-common.txt b/requirements/requirements-common.txt index 484111e..ceb9060 100644 --- a/requirements/requirements-common.txt +++ b/requirements/requirements-common.txt @@ -8,3 +8,4 @@ selenium==2.53.6 coverage ruamel.yaml==0.15.23 markdown==2.6.9 +pygments==2.2.0 diff --git a/yaksh/templates/yaksh/grade_user.html b/yaksh/templates/yaksh/grade_user.html index 2e5a403..bc9ed87 100644 --- a/yaksh/templates/yaksh/grade_user.html +++ b/yaksh/templates/yaksh/grade_user.html @@ -298,7 +298,9 @@ Status : Failed
{% if question.type == "code" %} -
{{ ans.answer.answer.strip|safe }}
+ {% pygmentise_user_answer question.language ans.answer.answer.strip as user_answer %} + +
{{user_answer.0|safe}}
{% elif question.type == "mcc"%}
{% for testcases in question.get_test_cases %} @@ -327,6 +329,7 @@ Status : Failed
{% else %}
{{ ans.answer.answer.strip|safe }} +
{% endif %}
diff --git a/yaksh/templates/yaksh/user_data.html b/yaksh/templates/yaksh/user_data.html index 9449fcc..72397dc 100644 --- a/yaksh/templates/yaksh/user_data.html +++ b/yaksh/templates/yaksh/user_data.html @@ -233,7 +233,9 @@ User IP address: {{ paper.user_ip }} {{ answer.answer.answer.strip|safe }}
{% else %} -
{{ answer.answer.answer.strip|safe }}
+ {% pygmentise_user_answer question.language answer.answer.answer.strip as user_answer %} + +
{{user_answer.0|safe}}
{% endif %} diff --git a/yaksh/templates/yaksh/view_answerpaper.html b/yaksh/templates/yaksh/view_answerpaper.html index 8f3fad7..e3f7df4 100644 --- a/yaksh/templates/yaksh/view_answerpaper.html +++ b/yaksh/templates/yaksh/view_answerpaper.html @@ -229,7 +229,9 @@ {% endfor %} {% endwith %}
-
{{ answer.answer.answer.strip }}
+ {% pygmentise_user_answer question.language answer.answer.answer.strip as user_answer %} + +
{{user_answer.0|safe}}
{% endif %} diff --git a/yaksh/templatetags/custom_filters.py b/yaksh/templatetags/custom_filters.py index 056421f..2fdc1d2 100644 --- a/yaksh/templatetags/custom_filters.py +++ b/yaksh/templatetags/custom_filters.py @@ -6,6 +6,9 @@ try: from itertools import zip_longest except ImportError: from itertools import izip_longest as zip_longest +from pygments import highlight +from pygments.lexers import get_lexer_by_name +from pygments.formatters import HtmlFormatter register = template.Library() @@ -87,3 +90,13 @@ def get_answer_for_arrange_options(ans, question): @register.filter(name='replace_spaces') def replace_spaces(name): return name.replace(" ", "_") + +@register.simple_tag +def pygmentise_user_answer(language, answer): + lexer = get_lexer_by_name(language, stripall=True) + formatter = HtmlFormatter(linenos="inline", + cssclass="highlight", + style="colorful") + style = formatter.get_style_defs('.highlight') + result = highlight(answer, lexer, formatter) + return result, style -- cgit