Я пишу кодовое поле Ruby с подсветкой синтаксиса (для Ruby), написанной на php для моего сайта, я могу получить его для раскраски переменных экземпляра, комментариев, символов и глобальных переменных до сих пор, но я столкнулся с проблемой при использованииследующее регулярное выражение для соответствия строк в двойных кавычках, вот мой код:
<?php
function codebox($code, $name="", $highlighted_line = -1)
{
echo '<table class="code_table">';
echo '<tr>';
echo '<td class="code_table_header"></td>';
echo '<td class="code_table_name">$name</td>';
echo '<td class="code_table_header"><a href="" class="copy_to_clipboard_link">copy to clipboard</a></td>';
echo '</tr>';
$oddity = 'even';
$line_number = 1;
foreach(preg_split('/(\r?\n)/', $code) as $line)
{
echo '<tr>';
if($line_number % 10 == 0)
{
echo '<td class="line_number" style="font-weight:bold;">' . $line_number . '</td>';
} else {
echo '<td class="line_number">' . $line_number . '</td>';
}
if($line_number == $highlighted_line)
{
echo '<td class="selected_code_cell" colspan="2">' . syntax_highlight($line) . '</td>';
} else {
echo '<td class="' . $oddity . '_code_cell" colspan="2">' . syntax_highlight($line) . '</td>';
}
echo '</tr>';
$line_number += 1;
if($oddity == 'even')
{
$oddity = 'odd';
} else {
$oddity = 'even';
};
};
};
function syntax_highlight($code)
{
// Make it so html doesn't bodge up
$code = htmlentities($code);
// Replace tabs with 4 none blocking spaces
$code = str_replace(' ', ' ', $code);
//instance variables
$code = preg_replace('/\B(\@\w*\S)/', '<span style="color:lime;">$1</span>', $code);
//global variables
$code = preg_replace('/\B(\$\w*\S)/', '<span style="font-weight:bolder;color:#00b0f0;">$1</span>', $code);
//symbols
$code = preg_replace('/\B(\:\w*\S)/', '<span style="color:yellow;">$1</span>', $code);
//strings (double quote)
$code = preg_replace('/"(?:\.|(\\\")|[^\""\n])*"/', '<span style="font-style:italic;color:#FF5A00;">$1</span>', $code);
//strings (single quote)
//$code = preg_replace('/\'(?:\.|(\\\')|[^\'\'\n])*\'/', '<span style="font-style:italic;color:#FF5A00;">$1</span>', $code);
return $code;
};
?>
По какой-то причине строка в двойных кавычках разрывает другие, и подсветка синтаксиса не выполняется, кто-нибудь знает почему?Заранее спасибо, эл.