/** * @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;