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