Python中利用pygments.formatters.html_get_ttype_class()函数实现代码数字高亮功能
pygments是一个通用的代码高亮库,可以支持多种语言和多种输出格式。pygments.formatters.html_get_ttype_class()函数是pygments库中的一个功能函数,用于获取代码的标记类型,并返回相应的CSS类名称,以实现代码高亮。
下面是一个使用pygments.formatters.html_get_ttype_class()函数实现代码数字高亮功能的例子:
1. 首先,我们需要安装pygments库,可以使用pip命令进行安装:
pip install pygments
2. 在Python代码中导入必要的库:
from pygments import highlight from pygments.lexers import PythonLexer from pygments.formatters import HtmlFormatter from pygments.formatters.html import _get_ttype_class
3. 创建一个简单的Python代码字符串:
code = """
def fibonacci(n):
if n <= 0:
return 'Invalid input'
elif n == 1:
return 0
elif n == 2:
return 1
else:
a, b = 0, 1
for _ in range(n - 2):
a, b = b, a + b
return b
"""
4. 定义一个函数,用于将代码字符串高亮并添加数字高亮功能:
def highlight_with_number(code):
lexer = PythonLexer()
formatter = HtmlFormatter(cssclass='syntax')
result = []
for i, line in enumerate(code.split('
')):
line_with_number = f'<span class="line-number">{i+1}</span>{line}'
tokens = lexer.get_tokens(line_with_number)
result.append(highlight(line_with_number, lexer, formatter))
return '
'.join(result)
5. 调用highlight_with_number()函数对代码进行高亮并添加数字高亮功能:
highlighted_code = highlight_with_number(code)
6. 创建一个HTML文件,在文件中显示高亮后的代码:
html = f'''
<!doctype html>
<html>
<head>
<style>
.line-number {{
display: inline-block;
width: 30px;
background-color: #f0f0f0;
padding-right: 5px;
text-align: right;
margin-right: 5px;
border-right: 1px solid gray;
}}
.syntax {{
background-color: #f0f0f0;
padding: 10px;
font-family: "Courier New", Courier, monospace;
white-space: pre-wrap;
}}
{HtmlFormatter().get_style_defs('.syntax')}
</style>
</head>
<body>
{highlighted_code}
</body>
</html>
'''
with open('highlighted_code.html', 'w') as f:
f.write(html)
以上代码中,我们首先使用PythonLexer对代码进行词法分析,获取到代码中每个符号的标记类型。然后,将代码按行分割,并在每行开头添加行号。通过调用highlight()函数对每行代码进行高亮,并传入HtmlFormatter对象生成相应的HTML代码。最后,将高亮后的代码,以及适当的CSS样式写入HTML文件中。
需要注意的是,在生成HTML时,我们使用了pygments库中的默认CSS样式,可以通过调用HtmlFormatter().get_style_defs('.syntax')获取到,其中'.syntax'是我们设置给代码框的CSS类名,也可以自定义其他样式。
最后,运行上述代码,将会生成一个名为'highlighted_code.html'的HTML文件,其中包含高亮并带有行号的代码。通过打开该文件,即可看到数字高亮的效果。
