/** * @name highlight (Code Highlight modifier) * @author Optim1zer (http://optimizer.ru) * @uses A port of highlight.js to PHP (https://github.com/scrivo/highlight.php) * @uses PHP 5.3+ * * Модификатор для подсветки кода в переданном тексте * Ищет блоки, заключенные в
и подсвечивает их как highlight.js
* Пример использования:
*
* [[*content:highlight]]
*
* И подключить на страницу css-файл с темой от highlight.js
*/
// пропускаем обработку если нет тега
if (stripos($input, '') === false) {
return $input;
}
$path = $modx->getOption('core_path').'components/Highlight/';
require_once($path."Autoloader.php");
spl_autoload_register("Highlight\\Autoloader::load");
$hl = new Highlight\Highlighter();
// Если не переопределить выбрасывается исключение если анализируемый код содержит неподдерживаемый символ для одного из языков (например '<', для json и sql)
$hl->setAutodetectLanguages(array("xml", "javascript", "php"));
$output = preg_replace_callback('~\s*]*?(?:class="language-(\w+)")?>(.*?)
\s*
~is', function($p) use ($hl) {
$lang = $p[1];
$code = html_entity_decode($p[2], NULL, 'UTF-8');
if (empty($lang)) {
$r = $hl->highlightAuto($code);
} else {
$r = $hl->highlight($lang, $code);
}
return ''.$r->value.'
';
}, $input);
return $output;