diff --git a/euscanwww/djeuscan/templatetags/djeuscan_helpers.py b/euscanwww/djeuscan/templatetags/djeuscan_helpers.py index 2df1d07..427b421 100644 --- a/euscanwww/djeuscan/templatetags/djeuscan_helpers.py +++ b/euscanwww/djeuscan/templatetags/djeuscan_helpers.py @@ -3,8 +3,6 @@ from django.conf import settings from euscan.version import is_version_type_stable, get_version_type -from djeuscan.utils import plaintext2html - register = template.Library() @@ -73,4 +71,6 @@ def version_type(version): @register.filter def ansi_to_html(text): - return plaintext2html(text) + from ansi2html import Ansi2HTMLConverter + conv = Ansi2HTMLConverter(inline=True, linkify=True) + return conv.convert(text, full=False) diff --git a/euscanwww/djeuscan/utils.py b/euscanwww/djeuscan/utils.py deleted file mode 100644 index 60965e0..0000000 --- a/euscanwww/djeuscan/utils.py +++ /dev/null @@ -1,92 +0,0 @@ -import re -import cgi - -colorcodes = { - 'bold': ('\\\u001b[01m|\\\u001b[36;01m', '\\\u001b[39;49;00m'), - 'cyan': ('\\\u001b[36m', '\\\u001b[39m'), - 'blue': ('\\\u001b[34m', '\\\u001b[39m'), - 'red': ('\\\u001b[31m', '\\\u001b[39m'), - 'magenta': ('\\\u001b[35m', '\\\u001b[39m'), - 'green': ('\\\u001b[32;01m', '\\\u001b[39;49;00m'), - 'underline': ('\\\u001b[4m', '\\\u001b[24m'), -} - - -def recolor(color, text): - regexp = r"(?:%s)(.*?)(?:%s)" % colorcodes[color] - regexp = regexp.replace('[', r'\[') - return re.sub( - regexp, r'''\1''' % color, text - ) - - -def bold(text): - regexp = "(?:%s)(.*?)(?:%s)" % colorcodes['bold'] - regexp = regexp.replace('[', r'\[') - return re.sub(regexp, r'\1', text) - - -def underline(text): - regexp = "(?:%s)(.*?)(?:%s)" % colorcodes['underline'] - regexp = regexp.replace('[', r'\[') - return re.sub( - regexp, r'\1', text - ) - - -def removebells(text): - return text.replace('\07', '') - - -def removebackspaces(text): - backspace_or_eol = r'(.\010)|(\033\[K)' - n = 1 - while n > 0: - text, n = re.subn(backspace_or_eol, '', text, 1) - return text - - -def plaintext2html(text, tabstop=4): - def do_sub(m): - c = m.groupdict() - if c['htmlchars']: - return cgi.escape(c['htmlchars']) - if c['lineend']: - return '
' - elif c['space']: - t = m.group().replace('\t', ' ' * tabstop) - t = t.replace(' ', ' ') - return t - elif c['space'] == '\t': - return ' ' * tabstop - else: - url = m.group('protocal') - if url.startswith(' '): - prefix = ' ' - url = url[1:] - else: - prefix = '' - last = m.groups()[-1] - if last in ['\n', '\r', '\r\n']: - last = '
' - return '%s%s' % (prefix, url) - re_string = re.compile( - r'(?P[<&>])|(?P^[ \t]+)|(?P\r\n|\r|\n)|' - r'(?P(^|\s)((http|ftp)://.*?))(\s|$)', - re.S | re.M | re.I - ) - result = re.sub(re_string, do_sub, text) - - result = re.sub(r"\\n", "
", result) - - result = recolor('cyan', result) - result = recolor('blue', result) - result = recolor('red', result) - result = recolor('magenta', result) - result = recolor('green', result) - result = bold(result) - result = underline(result) - result = removebells(result) - result = removebackspaces(result) - - return result