pygments/pygments
GitHub: pygments/pygments
Pygments 是一个用 Python 编写的通用语法高亮库,支持 500 多种语言和多种输出格式,是代码托管平台和文档系统的核心组件。
Stars: 2117 | Forks: 776
# 欢迎使用 Pygments
这是 Pygments 的源码。它是一个用 Python 编写的**通用语法高亮器**,支持超过 500 种语言和文本格式,适用于代码托管平台、论坛、Wiki 或其他需要美化源代码的应用程序。
## 安装
... 操作与往常一样,使用 ``pip install Pygments`` 获取已发布的版本,或使用 ``pip install -e .`` 以可编辑模式从检出目录安装。
## 文档
... 可以在 https://pygments.org/ 在线查阅,或使用 Sphinx 通过以下命令创建 ::
tox -e doc
默认情况下,文档不包含演示页面,因为构建 Pyodide 需要安装 Docker。要构建包含演示页面的文档,请使用 ::
tox -e web-doc
初次构建可能需要一些时间,但由于 Docker 缓存,后续构建应该是即时的。
要查看生成的文档,请使用 Python 的 ``http.server`` 模块提供服务(演示功能需要此步骤才能运行)::
python3 -m http.server --directory doc/_build/html
## 开发
... 在 `GitHub `_ 上进行,可以在那里查看 Git 仓库、工单(tickets)和 pull requests。
持续测试在 GitHub workflows 上运行:
.. image:: https://github.com/pygments/pygments/workflows/Pygments/badge.svg
:target: https://github.com/pygments/pygments/actions?query=workflow%3APygments
请阅读我们的`贡献指南 `_。
## 安全注意事项
Pygments 不对执行时间提供任何保证,在使用 Pygments 处理任意用户输入时需要考虑到这一点。例如,如果你有一个使用 Pygments 进行高亮显示的 Web 服务,可能存在某些输入会导致 Pygments 进程“永久”运行和/或消耗大量内存。如果进程没有迅速终止,随后这可能会被利用对服务器发起远程拒绝服务攻击。
遗憾的是,实际上不可能让 Pygments 本身完全防范这些问题:某些正则表达式可能导致“灾难性回溯”,但其他错误如不正确的匹配器也可能导致类似问题,并且没有自动化的方法可以发现它们(除非能解决停机问题)。Pygments 拥有广泛的单元测试、自动化随机测试,并且也由 `OSS-Fuzz `_ 进行测试,但我们永远无法消除这一领域的所有错误。
我们的建议是:
* 确保在合理的短超时时间后*终止* Pygments 进程。通常情况下,对于合理大小的输入,Pygments 最多只需几秒钟。
* *限制* 并发 Pygments 进程的数量,以避免资源超载。
Pygments 作者将以高优先级处理任何导致长处理时间的错误 —— 这是会在补丁版本中修复的问题之一。在报告怀疑存在超线性执行时间的错误时,请务必附上可复现该问题的输入。
## 作者
Pygments 由 **Georg Brandl**(邮箱地址 *georg*\ *@*\ *python.org*)、**Matthäus Chajdas** 和 **Jean Abou-Samra** 维护。
许多词法分析器和修复由 **Armin Ronacher**、`Pocoo `_ 团队的其他成员以及 **Tim Hatch** 贡献。
代码根据 BSD 2-clause 许可证分发。提交 pull request 的贡献者必须同意他们能够并且愿意将其贡献置于该许可证之下。
标签:Docker, DoS防护, Linux安全, Pyodide, Python, Sphinx, Web组件, 云安全监控, 代码美化, 威胁情报, 安全防御评估, 开发者工具, 开源库, 搜索引擎爬虫, 文本处理, 文档工具, 无后门, 格式化, 解析器, 语法高亮, 逆向工具, 配置错误, 静态分析