var begintag = "&lt;";                     // начало тега
var endtag = "&gt;";                       // конец тега
var extbegintag = "<SPAN class=keyword>";  // начало выделения
var extendtag   = "</SPAN>";               // конец выделения
var nomark      = "nomark";  // если задан этот класс, не размечать

// Запуск функции ExtractionTags после загрузки документа 
if (window.attachEvent) 
     window.attachEvent("onload",ExtraTags)
else window.addEventListener("load", ExtraTags, true);

function ExtraTags()
{
  ExtractionTags("PRE");
  ExtractionTags("CODE");
}

//  Выделить имена тегов во фрагменте кода 
//  <nametag>...</nametag>
function ExtractionTags(nametag)
{
  var el = new Array();                        // Получить массив элементов,
  el = document.getElementsByTagName(nametag); // в которых надо выделять теги 
  for(var i=0; i<el.length; i++) 
  {
     if(el[i].className == nomark) continue;   // если задан этот класс, не размечать
     if(nametag == "PRE") // Преодоление бага IE (нормализации содержимого)
     {
       var cl = "";
       if (el[i].className) cl = ' class="'+el[i].className+'"';
       var w=document.createElement("DIV");
       w.innerHTML="<PRE"+cl+">"+transform(el[i].innerHTML)+"</PRE>";
       var s=el[i].parentNode;
       s.replaceChild(w,el[i]);
     }
     else el[i].innerHTML = transform(el[i].innerHTML);
  } 
}

// Выделение имен тегов внутри строки
function transform(str)
{
   var begin = str.indexOf(begintag);       // ищем начало тега
   if (begin == -1) return str;             // выход их рекурсии

   begin += begintag.length;
   if (str.charAt(begin) =="/") begin++;

   var i;
   
   // Найдем конец имени тега: пробел, конец строки, конец тега, конец текста
   for (i=begin; i<str.length; i++)
   {
     if (str.charAt(i) == " " || str.charAt(i) == "\n") break;

     if(str.substring(i, i+endtag.length) == endtag) break;
   }
   
   var insstr = extbegintag + str.substring(begin, i) + extendtag;
   return str.substring(0, begin) + insstr + transform(str.substring(i));
}
