繁体   English   中英

Python:将ANSI颜色代码转换为HTML

[英]Python: Converting ANSI color codes to HTML

我有一个程序可以读取Minecraft控制台输出,并将其放在Qt文本编辑字段中(无关)。 但是,Minecraft控制台使用ANSI颜色代码( [0;32;1m )输出颜色,我希望它们采用HTML格式(因为Qt文本编辑字段读取了该颜色)。

我研究了一下,发现了一堆需要样式表的解决方案,这不是我想要的。 我想要的是一个简单的<span style="color: green"></span>或类似的嵌入式控件。

谁能帮我实现这一目标?

import re

COLOR_DICT = {
    '31': [(255, 0, 0), (128, 0, 0)],
    '32': [(0, 255, 0), (0, 128, 0)],
    '33': [(255, 255, 0), (128, 128, 0)],
    '34': [(0, 0, 255), (0, 0, 128)],
    '35': [(255, 0, 255), (128, 0, 128)],
    '36': [(0, 255, 255), (0, 128, 128)],
}

COLOR_REGEX = re.compile(r'\[(?P<arg_1>\d+)(;(?P<arg_2>\d+)(;(?P<arg_3>\d+))?)?m')

BOLD_TEMPLATE = '<span style="color: rgb{}; font-weight: bolder">'
LIGHT_TEMPLATE = '<span style="color: rgb{}">'


def ansi_to_html(text):
    text = text.replace('[m', '</span>')

    def single_sub(match):
        argsdict = match.groupdict()
        if argsdict['arg_3'] is None:
            if argsdict['arg_2'] is None:
                color, bold = argsdict['arg_1'], 0
            else:
                color, bold = argsdict['arg_1'], int(argsdict['arg_2'])
        else:
            color, bold = argsdict['arg_2'], int(argsdict['arg_3'])

        if bold:
            return BOLD_TEMPLATE.format(COLOR_DICT[color][1])
        return LIGHT_TEMPLATE.format(COLOR_DICT[color][0])

    return COLOR_REGEX.sub(single_sub, text)

print ansi_to_html('[06-10-13 21:28:23] [INFO] [0;31;1mUsage: /kick [reason ...][m')
print ansi_to_html('[06-10-13 21:28:23] [INFO] [31;0mUsage: /kick [reason ...][m')
print ansi_to_html('[06-10-13 21:28:23] [INFO] [31mUsage: /kick [reason ...][m')

[06-10-13 21:28:23] [INFO] <span style="color: rgb(128, 0, 0); font-weight: bolder">Usage: /kick [reason ...]</span>
[06-10-13 21:28:23] [INFO] <span style="color: rgb(255, 0, 0)">Usage: /kick [reason ...]</span>
[06-10-13 21:28:23] [INFO] <span style="color: rgb(255, 0, 0)">Usage: /kick [reason ...]</span>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM