直接转为高亮版,IE+FF+Cr测试通过:
代码:
程序代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml ">
<голова>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Прех(ал)</title>
<style type="text/css">
pre.preh{font-family:Consolas,"Lucida Console",monospace;}
pre.preh ol{border:1px Solid #ddd;margin:0;padding:0 0 0 4em;цвет:серый;}
pre.preh ol li{line-height:1.75em;border-bottom:1px Solid #ddd;border-left:1px Solid #ddd;}
pre.preh ol li span{цвет:черный;белое пространство:pre;}
pre.preh ol li span span.regexp{фон:зеленый;цвет:белый}
pre.preh ol li span em {цвет: синий; стиль шрифта: нормальный;}
pre.preh ol li span var.object{color:red}
pre.preh ol li span var.method_property{цвет:оранжевый}
pre.preh ol li span.comments{color:#aaa}
pre.preh li var {цвет: синий; стиль шрифта: нормальный;}
pre.preh li q{цвет:зеленый;}
q:before{content:none;display:none;}
</стиль>
<!--[if IE]> <style>pre.preh{font-family:fixedsys,monospace</style> <![endif]-->
<скрипт>
//ключевые слова
ключевые слова var = {js:{},html:{},css:{}};
ключевые слова.js.keys="абстрактный разрыв байта Case catch char class const продолжить по умолчанию удалить сделать двойной еще расширяет ложь финал наконец плавает для функции goto, если реализует импорт в экземпляре int интерфейс длинный собственный нулевой пакет частный защищенный публичный сброс возврат короткий статический суперпереключатель синхронизирован этот throw transient true try var void while with";
ключевые слова.js.objects="Привязка апплета Область Аргументы Массив Логическое значение Кнопка Флажок Коллекция Криптовалюта Дата Словарь Документ Дисководы Элемент Перечислитель Файл событий FileObject FileSystemObject FileUpload Папка Папки Форма Функция кадра Глобальная скрытая история HTMLElement Изображение Бесконечный ввод JavaArray JavaClass JavaObject JavaPackage JSObject Layer Link Math MimeType Номер навигатора Объект Пакеты опций Пароль Плагин PrivilegeManager Случайное экранное выражение RegExp Выбор строки Отправить текст Текстовое поле URL-адрес VBArray Window WScript";
ключевые слова.js.properties="above abs acos action activeElement alert alinkColor все якорные привязки altKey апплеты appCodeName применяют appName аргументы appVersion arity asin Asin Asin Asin Asin Asin Asin AVailLeft AvailTop AvailWidth ActiveXObject задний фон ниже bgColor большое мигание размытие жирной границы границыWidths нижняя сторона вызова кнопки btoa вызывающий абонент cancelBubble captureEvents ceil charAt charCodeAt charset проверенные дочерние классы className очистить ClearInterval ClearTimeout click clientInformation clientX clientY закрыть закрытый colorDepth компиляция завершить concat подтвердить конструктор содержит контекстные файлы cookie, потому что криптографический ctrlKey текущие данные defaultCharset defaultChecked defaultSelected defaultStatus defaultValue EnableExternalCapture EnablePrivilege кодирование escape eval event exec expexpando FromPoint fgColor fileName найти фиксированный фокус поля FontColor FontSize form формирует кадры вперед изCharCode fromElement getAttribute get getClass getDate getDay getFullYear getHours getMember getMilliсекунды getMinutes getMonth getSeconds getSelection getSlot getTime getTimezoneOffset getUTCDate getUTCDay getUTCFullYear getUTCHours getUTCMilliсекунды getUTCMinutes getUTCMonth getUTCSeconds getWindow getYear глобальный go HandleEvent Height скрытая история домашнего хоста имя хоста href hspace id id ignoreCase images index indexOf Internal InternalHTML InternalText InternalWidth InsertAdjacentHTML InsertAdjacentText isFinite isNAN курсив javaEnabled join keyCode Links LN10 LN2 LOG10E LOG2E lang язык LastIndex LastIndexOf LastMatch LastModified LastParen слои LayerX LayerY left LeftКонтекстная длина ссылки linkColor load locationBar log lowsrc MAX_VALUE MIN_VALUE поля соответствуют максимальному методу строки меню mimeTypes min модификаторы moveAbove moveBelow moveBy moveTo moveToAbsolute многострочный NaN NEGATIVE_INFINITY имя навигации по навигатору netscape следующий номер offscreenBuffering offset offsetHeight offsetLeft offsetParent offsetTop offsetX offsetY onabort onblur onchange onclick ondblclick ondragdrop onerror onfocus onПомощь onkeydown onkeypress onkeyup onload onmousedown onmousemove onmouseout onmouseover onmouseup onmove onreset onresize onsubmit onunload open opener options externalHeight externalHTML externalText externalWidth POSITIVE_INFINITY PI-заполнения pageX pageXOffset pageY pageYOffset родительский родительский элемент родительский слой родительский синтаксический анализ окна Float parseInt путь имя персональной панели PixelDepth плагины платформы pop pow предыдущий прототип протокола приглашения на печать push случайное готовое состояние причина реферера обновить ReleaseEvents перезагрузка RemoveAttribute RemoveMember replace resizeBy resizeTo returnValue обратный правый правый контекст вокруг SQRT1_2 SQRT2 screenX screenY прокрутка полосы прокрутки прокруткаBy прокруткаIntoView прокруткаДля поиска выберите выбранноеIndex self setAttribute setDay setFullYear setHotkeys setHours setInterval setMember setМиллисекунды setMinutes setMonth setResizable setSeconds set Слот setTime setTimeout setUTCDate setUTCFullYear setUTCHours setUTCMillсекунды setUTCMinutes setUTCMonth setUTCSeconds setYear setZOptions сдвиг ShiftKey siblingAbove siblingBelow SignText sin срез smallsort исходный источникIndex splice Split sqrt src srcElement srcFilter статус-бар стоп стиль удара sub submit substr суффиксы подстроки sun up systemLanguage TYPE tagName tagName tags taint taintEnabled tan target test text title toElement toGMTString toLocaleString toLowerCase инструмент верхняя часть панели toString toUpperCase toUTCString typeOf UTC unescape unshift untaint unwatch userAgent userLanguage valueOfvisibility vlinkColor vspace посмотреть, какую ширину окна написать writeln zIndex";
функция htmlEncode(strS){
return strS.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");
}
функция htmlEncodef(c){
return c=="&"?'&':(c=="<"?'<':(c=='>'?'>':c));
}
функция htmlEncodefl(c){
return c=="&"?5:(c=="<"||c=='>'?4:1);
}
функция html2txt(strS){
return strS.replace(/</g,"<").replace(/>/g,">").replace(/ /g," ").replace(/<br/?>/g," rn").replace(/&/g,"&").replace(/<.+?>/g,"");
}
вар лексеры = {}
лексерс.js = {
regKW:new RegExp("^("+keywords.js.keys.replace(/ /g,"|")+")$","g"),
regObj:new RegExp("^("+keywords.js.objects.replace(/ /g,"|")+")$","g"),
regMP:new RegExp("^("+keywords.js.properties.replace(/ /g,"|")+")$","g"),
clKW:'<em>$1</em>',
clObj:'<var class="object">$1</var>',
clMP:'<var class="method_property">$1</var>',
лекс: функция(и){
var str=" ", c="",word='',lastState="", seq, intNextQuote, intTemp, intCount, intWordStart,glbStr=s,i;
glbStr=glbStr.replace(/r|n/g,'rn');
glbStr=glbStr.replace(/rnrn/g,'rn');
for(i=0;i<glbStr.length;i++){
c = glbStr.charAt (я);
переключатель(с){
случай """:
стр+=htmlEncodef(c);
intNextQuote = я;
while(intNextQuote!=-1&&intNextQuote<glbStr.length){
intNextQuote=glbStr.indexOf(""",intNextQuote+1);
if(intNextQuote==-1||glbStr.charAt(intNextQuote-1)!=" \")break ;
intCount=0; intTemp = intNextQuote;
while(glbStr.charAt(--intTemp)==" \")intCount ++;
если (intCount%2 == 0) перерыв;
}
если (intNextQuote ==-1) перерыв;
str+="<q>"+htmlEncode(glbStr.substring(i+1,intNextQuote))+"</q>"";
я = intNextQuote;
последнийстате="";
перерыв;
случай "'":
стр+=htmlEncodef(c);
intNextQuote = я;
while(intNextQuote!=-1&&intNextQuote<glbStr.length){
intNextQuote=glbStr.indexOf("'",intNextQuote+1);
if(intNextQuote==-1||glbStr.charAt(intNextQuote-1)!=" \")break ;
intCount=0; intTemp = intNextQuote;
while(glbStr.charAt(--intTemp)==" \")intCount ++;
если (intCount%2 == 0) перерыв;
}
если (intNextQuote ==-1) перерыв;
str+="<q>"+htmlEncode(glbStr.substring(i+1,intNextQuote))+"</q>'";
я = intNextQuote;
последнийстате="";
перерыв;
случай "/":
стр+=htmlEncodef(c);
if(glbStr.charAt(i+1)=="/"){
intNextQuote = я;
intNextQuote=glbStr.indexOf('rn',intNextQuote+1);
if(intNextQuote==-1)intNextQuote=glbStr.length;
str=str.substring(0,str.length-1);
str+="<span class="comments">/"+htmlEncode(glbStr.substring(i+1,intNextQuote))+"</span>";
я = intNextQuote;
}иначе if(glbStr.charAt(i+1)=="*"){
intNextQuote = я;
intNextQuote=glbStr.indexOf("*/",intNextQuote+1);
если (intNextQuote ==-1) возврат;
str=str.substring(0,str.length-1);
str+="<span class="comments">/"+htmlEncode(glbStr.substring(i+1,intNextQuote))+"*/</span>";
я = intNextQuote+1;
}else if(str.match(/(?:(?:[!=(]|</var>|[|,|n|:)[ t]*/$)|^ n?[t ]*/$/)){
intNextQuote = я;
while(intNextQuote!=-1&&intNextQuote<glbStr.length){
intNextQuote=glbStr.indexOf("/",intNextQuote+1);
if(intNextQuote==-1||glbStr.charAt(intNextQuote-1)!=" \")break ;
intCount=0;intTemp=intNextQuote;
while(glbStr.charAt(--intTemp)==" \")intCount ++;
если (intCount%2 == 0) перерыв;
}
если (intNextQuote ==-1) перерыв;
str+="<span class="regexp">"+htmlEncode(glbStr.substring(i+1,intNextQuote))+"</span>/";
я = intNextQuote;
последнийстате="";
}
последнийстате="";
перерыв;
по умолчанию:
if(c.match(/w/))word+=c; //одним словом
если(c.match(/W/)){
если(слово!='')
str+=word.replace(this.regKW,this.clKW).replace(this.regObj,this.clObj).replace(this.regMP,this.clMP) + htmlEncodef(c)
еще str+=htmlEncodef(c);
слово = '';
}
последнийстате="";
перерыв;
}
}
return str.replace(/(s*r?n)+$/,'');
}
};
функция str2styled(x,language){
var _A = лексеры[язык].lex(html2txt(x)).split(/n/);
for(i=0;i<_A.length;i++){_A[i] = '<li><span>'+_A[i].replace(/r/g,'').replace(/ t/g,' ').replace(/ /g,' ')+'</span></li>';}
return '<ol>'+_A.join('')+'</ol>';
}
var $ = function(e){return document.getElementById(e)};
window.onload = функция(){
var pres = document.getElementsByTagName('pre');
for(k=0;k<pres.length;k++)if(pres[k].className.match(/bprehb/))
pres[k].innerHTML = str2styled(pres[k].innerHTML,'js')
}
</скрипт>
</голова>
<тело>
<pre id="test" class="preh js">
вар точка = функция() {
это.х = 1;
это.у = 2;
this.valueOf = function(){return 'Point:('+x+','+y+')'};
}
если (с<2)f()
вар P = новая точка();
оповещение(P.valueOf());
var rex_factory = function(){return {x:/re/g,y:/rere/g,z:[/re/,/rere/,/rerere/]}};
</pre>
<pre id="test2" class="preh js">
другой = 'это еще один пример'
</pre>
</body>
</html>