Добро пожаловать в Pygments

Это исходный код Pygments. Это общий синтаксический выделитель, написанный на Python, который поддерживает более 500 языков и текстовых форматов, для использования в хостингах кода, форумах, вики и других приложениях, которым необходимо украсить исходный код.

Установка

... работает как обычно, используйте pip install Pygments для получения опубликованных версий, или python setup.py install для установки из чек-аута.

Документация

... может быть найдена в Интернете по адресу https://pygments.org/ или создана с помощью Sphinx

make docs

По умолчанию документация не включает демонстрационную страницу, так как для ее создания требуется наличие установленного Docker для сборки Pyodide. Чтобы собрать документацию с демонстрационной страницей, воспользуйтесь командой

WEBSITE_BUILD=1 make docs

Первая сборка может занять некоторое время, но последующие сборки будут мгновенными благодаря кэшированию Docker.

Чтобы просмотреть созданную документацию, обслужите ее с помощью модуля Python http.server (этот шаг необходим для работы демонстрации)

python3 -m http.server --directory doc/_build/html

Разработка

... происходит на GitHub, где можно просмотреть Git-репозиторий, тикеты и запросы.

Непрерывное тестирование осуществляется в рабочих процессах GitHub:

Руководство по внесению вклада можно найти в Contributing.md.

Соображения безопасности

Pygments не предоставляет никаких гарантий по времени выполнения, что необходимо учитывать при использовании Pygments для обработки произвольного пользовательского ввода. Например, если у вас есть веб-сервис, который использует Pygments для подсветки, могут быть входы, которые заставят процесс 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 2clause. Участники, делающие запросы на исправление, должны согласиться с тем, что они могут и хотят внести свой вклад под этой лицензией.