| Пишу раскраску кода 1С
и столкнулся с проблемой, как подсветить зарезервированные слова?
вот код
<?php
function encode_c($text) {
$start_html = "<fieldset style=\"width: 95%; overflow: auto;\"><legend style=\"color: #323e5b;\">code_1Cv7</legend><div style=\"margin: 3px;\">";
$end_html = "</div></fieldset>";
$match_count = preg_match_all("#\[1cv7\](.*?)\[/1cv7\]#si", $text, $matches);
for ($i = 0; $i < $match_count; $i++) {
$after_replace = trim($matches[1][$i]);
$after_replace = str_replace("<", "<", $after_replace);
$after_replace = str_replace(">", ">", $after_replace);
$after_replace = str_replace(""", '"', $after_replace);
$after_replace = str_replace("'", "'", $after_replace);
$after_replace = str_replace("&", "&", $after_replace);
$after_replace = preg_replace("/
$after_replace = (substr($after_replace, 0, 2) != "<?") ? "<?php".$after_replace."" : $after_replace;
$after_replace = (substr($after_replace, -2) != "?>") ? "".$after_replace."?>" : $after_replace;
ob_start();
highlight_string($after_replace);
$after_replace = ob_get_contents();
ob_end_clean();
$text = str_replace("[1cv7]".$matches[1][$i]."[/1cv7]", "".$start_html."".$after_replace."".$end_html."", $text);
}
$text = str_replace("<?php", "", $text);
$text = str_replace("?>", "", $text);
//доработка цветов для 1С
$text = str_replace("#DD0000", "#000000", $text);//красн на черн
$text = str_replace("#007700", "#DD0000", $text);//зелн на красн
$text = str_replace("#FF8000", "#007700", $text);//желт на зелн
$str = array("'(Если)'si", "'(Тогда)'si", "'(ИначеЕсли)'si", "'(Иначе)'si", "'(КонецЕсли)'si",
"'(Для)'si", "'(Каждого)'si", "'(Из )'si", "'(По)'si", "'(Пока)'si", "'(Цикл)'si",
"'(КонецЦикла)'si", "'(Процедура)'si", "'(Функция)'si", "'(КонецПроцедуры)'si", "'(КонецФункции)'si",
"'(Перем)'si", "'(Перейти)'si", "'(Возврат)'si", "'(Продолжить)'si", "'(Прервать)'si", "'(И)'si",
"'(Или)'si", "'(Не)'si", "'(Попытка)'si", "'(Исключение)'si", "'(ВызватьИсключение)'si",
"'(КонецПопытки)'si", "'(Новый)'si", "'(Выполнить)'si", "'(Экспорт)'si", "'(Неопределено)'si",
"'(ИСТИНА)'si", "'(ЛОЖЬ)'si");
$replace = array_fill(0, count($str), "<span style='color: #DD0000'>\\1</span>");
$text = preg_replace($str, $replace, $text);
return $text;
?>
Он раскрашивает, но не правильно :( Как сделать так чтобы он менял не все подряд, а только при ТОЧНОМ совпадении из массива $str.
Спасибо. | |