Вобщем кода много, но идея простая. Сначала вытаскивается html, потом я его разчленяю на строки через сплит, и циклом оборачиваю каждую строку в <li></li>. После чего старый pre удаляеться а на его место ставиться уже новый.
PS: Это jQuery
$('pre.code').each(function(index) {
var html = $(this).find('code').html(),
htmlArr = html.split('\n'),
totalLines = htmlArr.length;
$(this).after(
'<div class="precode">'+
'<pre>'+
'<ol></ol>'+
'</pre>'+
'</div>'
);
var wrap = $(this).next('.precode');
$(this).remove();
var result = '',i;
for(i = 0; i < totalLines; i++) {
var curHTML = htmlArr[i],
id = 'code'+(index+1)+'_l'+(i+1);
curHTML = curHTML == false ? ' empty">' : '">'+curHTML;
result += '<li id="'+id+'" rel="#'+id+'"><span class="l'+curHTML+'</span></li>';
}
wrap.find('ol').html(result);
});
На всяки случай цепляю и html код pre тега (внутри pre - код для теста)
<pre class="code"><code>function oversky_dynamic_vars($vars) {
$vars[] = 'dynamic';
return $vars;
}
add_filter('query_vars','oversky_dynamic_vars');
function oversky_dynamic_check() {
$curVar = get_query_var('dynamic');
if($curVar == 'css') {
header("Content-Type: text/css");
require (FUNCTIONS.'/dinamic-css.php');
die;
}
if($curVar == 'js') {
header('Content-type: text/javascript');
require (FUNCTIONS.'/dinamic-js.php');
die;
}
}
add_action('template_redirect', 'oversky_dynamic_check');</code></pre>