cubicweb/misc/source_highlight.py
author Philippe Pepiot <ph@itsalwaysdns.eu>
Tue, 31 Mar 2020 19:15:03 +0200
changeset 12957 0c973204033a
parent 12770 be0864a2eec8
permissions -rw-r--r--
[server] prevent returning closed cursor to the database pool In since c8c6ad8 init_repository use repo.internal_cnx() instead of repo.system_source.get_connection() so it use the pool and we should not close cursors from the pool before returning it back. Otherwise we may have "connection already closed" error. This bug only trigger when connection-pool-size = 1. Since we are moving to use a dynamic pooler we need to get this fixed. This does not occur with sqlite since the connection wrapper instantiate new cursor everytime, but this occur with other databases.

"""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 ""