cubicweb/misc/source_highlight.py
author Philippe Pepiot <philippe.pepiot@logilab.fr>
Tue, 17 Mar 2020 13:29:08 +0100
branch3.27
changeset 12914 87c3562b3bae
parent 12770 be0864a2eec8
permissions -rw-r--r--
[pkg] require python >= 3.4 This avoid pip pulling a version that does not run on python2 when using a python2 environment. Since we already released some 3.27 releases in pypi, I think we should release 3.27.3 and remove releases 3.27.2, 3.27.1 and 3.27.0 from pypi.

"""This module provide syntaxe highlight functions"""

from logilab.common.logging_ext import _colorable_terminal

try:
    from pygments import highlight as pygments_highlight
    from pygments.lexers import get_lexer_by_name
    from pygments.formatters.terminal import TerminalFormatter
    from pygments.formatters.html import HtmlFormatter
    has_pygments = True
except ImportError:
    has_pygments = False


def highlight_terminal(code, language):
    if not has_pygments:
        return code

    if not _colorable_terminal():
        return code

    return pygments_highlight(code, get_lexer_by_name(language), TerminalFormatter())


def highlight_html(code, language, linenos=False, linenostart=1, **kwargs):
    if not has_pygments:
        return str(code)

    return pygments_highlight(str(code),
                              get_lexer_by_name(language),
                              HtmlFormatter(wrapcode=True, linenos=linenos, linenostart=linenostart, **kwargs))


def generate_css():
    if has_pygments:
        return HtmlFormatter().get_style_defs()
    else:
        return ""