Вклад

Добро пожаловать в решение для подсветки синтаксиса на стороне сервера! Если вы хотите внести свой вклад в проект, вот несколько вещей, о которых следует помнить!

Определения языка + стили

Мы не принимаем PR с новыми или обновленными определениями языка или таблицами стилей. Вместо этого их следует вносить в проект highlight.js. Процесс поддержки стилей и преобразования определений языка полностью автоматизирован и оставлен на усмотрение сопровождающих проекта, которые должны запускать его каждый раз, когда выходит новая версия highlight.js.

Обновления из highlight.js

Если вы хотите сделать PR, содержащий изменения поведения, сделанные в проекте highlight.js, пожалуйста, убедитесь, что вы ссылаетесь на соответствующие коммиты highlight.js и журналы изменений. Поскольку этот проект является прямым переносом, мы должны сделать все возможное, чтобы поведение было как можно более идентичным.

PR, отражающие изменения, сделанные в highlight.js, должны только делаться после того, как в highlight.js будет выпущен релиз, помеченный этими изменениями. Этот проект всегда будет выпускать обновления после highlight.js релизов.

Мы не даем никаких гарантий, что последняя мастер-версия highlight.php будет совместима с последней мастер-версией highlight.js.

Структура проекта

Проект содержит следующие папки:

  1. Highlight
  2. стили
  3. демо
  4. тест
  5. инструменты

Highlight

Эта папка содержит основной исходный текст и следующие файлы (классы):

Highlight.php (Highlight)

Это тот, который делает подсветку для вас и тот, который вы, вероятно, будете искать.

Language.php (Language)

Вспомогательный класс, используемый в классе Highlight. Экземпляры этих классов представляют собой довольно сложные структуры регулярных выражений, необходимых для сканирования программного кода с целью его выделения.

Вам этот класс не нужен.

JsonRef.php (JsonRef)

Вспомогательный класс для декодирования JSON-файлов, содержащих ссылки на пути. Данные определения языка из highlight.js слишком сложны для описания в обычных JSON-файлах. Поэтому для их экспорта было решено использовать dojox.json.ref. Этот класс способен (в очень ограниченном объеме) декодировать данные JSON, созданные с помощью инструментария dojo.

Этот класс имеет очень четкое назначение и может быть полезен и в других проектах (и может быть хорошей отправной точкой для нового проекта ;). ).

Autoloader.php (Autoloader)

Простой класс автозагрузчика, который вы можете захотеть или, скорее всего, не захотите использовать. Он используется для инструментов и тестов.

папка languages

Эта папка содержит все определения языков: по одному JSON-файлу для каждого языка. Эти файлы не закодированы вручную, а извлечены из оригинального проекта highlight.js.

Стили

Это CSS-файлы, необходимые для раскраски кода. Здесь не о чем говорить: они просто скопированы из проекта highlight.js.

Demo

Эта папка содержит две демонстрационные страницы, доступ к которым можно получить через браузер.

demo.php

Тестовая страница, показывающая все поддерживаемые языки и стили.

compare.php

Похожа на demo.php, но эта страница посвящена сравнению между highlight.php и highlight.js. Оба варианта должны дать одинаковые результаты.

Тест

Эта папка содержит модульные тесты для highlight.php. Чтобы запустить их, запустите phpunit из этой папки:

phpnunit .

Обратите внимание, что следующие тесты для highlight.js не были переписаны для highlight.php:

специальный explicitLanguage

Управление выбором языка путем установки атрибута, содержащего <div>, неактуально для highlight.php

специальный customMarkup

В highlight.js код может содержать дополнительную HTML-разметку, как в следующем фрагменте PHP: $sum = <b>$a</b> + $b;. В настоящее время это не поддерживается highlight.php, который может выделять только (unescaped) код. Также не поддерживается выделение <br> (HTML break element). Однако highlight.php поддерживает замену табуляции (по умолчанию 4 пробела).

специальный noHighlight

Нет необходимости отключать подсветку через имя класса в контейнере кода.

special buildClassName

highlight.php не изменяет имена классов контейнеров кода.

Инструменты

Набор скриптов, которые используются для извлечения данных из исходного проекта highlight.js.

Процесс извлечения языков из highlight.js был вынесен в один скрипт. Этот скрипт требует, чтобы на вашей машине были установлены cURL, PHP и node.js. Это необходимо только в том случае, если вы хотите обновить языки или добавить новые языки, это не требуется для использования этой библиотеки в вашем приложении.

cd tools
bash process.sh

Почему мы обычно не используем mb_* функции?

PHP предлагает mb_ префиксные строковые функции для поддержки многобайтовых строк, что означает поддержку символов юникода. Однако функции PREG в PHP вычисляют длины и позиции строк в байтах, а не длины символов. По этой причине мы обычно не используем многобайтовые варианты строковых функций; из этой политики есть исключения.

Исключением из этой политики является использование функций, которые не используются для вычисления длин или позиций строк; например, mb_strtolower.