直接转为高亮版,IE+FF+Cr测试通过:
代码:
程序代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transicional//ES"
" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml ">
<cabeza>
<meta http-equiv="Tipo de contenido" content="text/html; charset=utf-8" />
<título>Preh(al)</título>
<tipo de estilo="texto/css">
pre.preh{font-family:Consolas,"Lucida Console",monospace;}
pre.preh ol{borde:1px sólido #ddd;margen:0;padding:0 0 0 4em;color:gris;}
pre.preh ol li{altura de línea:1.75em;borde-inferior:1px sólido #ddd;borde-izquierda:1px sólido #ddd;}
pre.preh ol li span{color:negro;espacio en blanco:pre;}
pre.preh ol li span span.regexp{fondo:verde;color:blanco}
pre.preh ol li span em{color:azul;estilo de fuente:normal;}
pre.preh ol li span var.object{color:rojo}
pre.preh ol li span var.method_property{color:naranja}
pre.preh ol li span.comments{color:#aaa}
pre.preh li var{color:azul;estilo de fuente:normal;}
pre.preh li q{color:verde;}
q:antes{contenido:ninguno;pantalla:ninguno;}
</estilo>
<!--[if IE]> <style>pre.preh{font-family:fixedsys,monospace}</style> <![endif]-->
<guión>
//palabras clave
var palabras clave = {js:{},html:{},css:{}};
palabras clave.js.keys="resumen byte de ruptura caso captura clase char const continuar eliminación predeterminada hacer el doble si no extiende falso final finalmente flotante para la función ir a si implementa la importación en instancia de interfaz int largo paquete nulo nativo privado protegido público restablecer devolver breve interruptor estático súper sincronizado este lanzamiento es transitorio verdadero, intente var void mientras esté con";
palabras clave.js.objects="Anchor Applet Área Argumentos Matriz Botón booleano Casilla de verificación Colección Cripto Fecha Diccionario Unidad de documento Unidades Elemento Enumerador Archivo de evento FileObject FileSystemObject FileUpload Carpeta Carpetas Formulario Marco Función Global Oculto Historia HTMLElement Imagen Infinity Entrada JavaArray JavaClass JavaObject JavaPackage JSObject Layer Link Math MimeType Número de navegador Opción de objeto Paquetes Contraseña Complemento PrivilegeManager Expresión regular aleatoria Pantalla Seleccionar cadena Enviar texto Área de texto URL Ventana VBArray WScript";
palabras clave.js.properties="sobre abs acos acción activeElement alerta alinkColor todos los anclas altKey ancla appCodeName applets aplicar appName appVersion argumentos arity asin asignar atan atan2 atob disponibilidadAltura disponibilidadIzquierda disponibilidadTop disponibilidadAncho ActiveXObjeto fondo posterior debajo bgColor parpadeo grande desenfoque borde negrita anchos de borde inferior btoa botón llamar a la persona que llama persona que llama cancelar captura de burbujas Eventos ceil charAt charCodeAt conjunto de caracteres clases infantiles marcadas nombre de clase borrar claro Intervalo borrar Tiempo de espera haga clic en cliente Información cliente X cliente Y cerrar color cerrado Compilación en profundidad completa concat confirmar constructir contiene cookie contextual cos cripto ctrl Clave de datos actuales predeterminado Conjunto de caracteres predeterminado Predeterminado verificado Predeterminado seleccionado Estado predeterminado Descripción del valor deshabilitar Captura externa deshabilitar Dominio de documento de privilegio E Elementos de elemento de eco incrustados habilitados Complemento enableExternalCapture enablePrivilege codificación escape eval evento exec exp expando FromPoint fgColor fileName buscar foco de piso fijo fontColor fontSize formulario reenviar marcos desde CharCode fromElement getAttribute get getClass getDate getDay getFullYear getHours getMember getMillisegundos getMinutes getMonth getSeconds getSelection getSlot getTime getTimezoneOffset getUTCDate getUTCDay getUTCFullYear getUTCHours illisegundos getUTCMinutes getUTCMonth getUTCSegundos getWindow getYear global go HandleEvent Altura hash historial oculto inicio host HostName href hspace id ids ignoreCase imágenes índice indexOf interior interiorHTML interiorTexto interiorAncho insertAdjacentHTML insertAdjacentText isFinite isNAN cursiva java javaEnabled clave de uniónEnlaces de código LN10 LN2 LOG10E LOG2E lang idioma lastIndex lastIndexOf lastMatch lastModified lastParen capas capaX capaY izquierda izquierdaContexto longitud enlace linkColor carga ubicación ubicaciónBar registro lowsrc MAX_VALUE MIN_VALUE márgenes coinciden con el método máximo de la barra de menú mimeTypes min modificadores moveAbove moveBelow moveBy moveTo moveToAbsolute multilínea NaN NEGATIVE_INFINITY nombre navegar navegador netscape siguiente número fuera de pantallaBuffering offset offsetHeight offsetLeft offsetParent offsetTopAncho offsetX offsetY onabort onblur onchange onclick ondblclick ondragdrop onerror onfocus onHe lp al presionar la tecla al presionar la tecla onkeyup onload onmousedown onmousemove onmouseout onmouseover onmouseup onmove onreset onresize onsubmit onunload abrir opciones de apertura exteriorHeight exteriorHTML exteriorTexto exteriorWidth POSITIVE_INFINITY PI paddings páginaX páginaXOffset páginaY páginaYOffset padre padreElemento padreCapa padreVentana analizar análisisFloat parseInt nombre de ruta barra personal complementos de plataforma profundidad puerto pop preferencia de pow protocolo de impresión anterior prototipo push aleatorio readyState motivo de referencia actualizar lanzamientoRecarga de eventos eliminarReemplazar miembro cambiar tamañoPor cambio de tamañoPara regresarValor revertir derecha contexto redondo SQRT1_2 SQRT2 pantallaX pantallaY desplazarse barras de desplazamiento desplazarsePor desplazamientoIntoView desplazarsePara buscar seleccionar seleccionado Índice autoestablecidoConjunto de atributosConjunto de díaConjunto de año completoConjunto de teclas de acceso rápidoConjunto de intervalosConjunto de miembrosConjunto de milisegundosConjunto de minutosConjunto de mesesConjunto redimensionableConjunto de segundosConjunto de ranurasTiempo de espera setUTCDate setUTCFullYear setUTCHours setUTCMillsegundos setUTCMinutos setUTCMes setUTCSegundos setAño setZOptions cambio shiftKey hermanoArriba hermanoAbajo signoTexto sin corte pequeñoordenar origen fuenteIndex empalme dividir sqrt src srcElemento srcEstado del filtro barra de estado detener estilo de ataque sub enviar substr sufijos de subcadena sistema sun supIdioma TIPO etiquetaEtiquetas de nombre mancha manchaEnabled título de texto de prueba de destino bronceado toElemento toGMTString toLocaleString toLowerCase barra de herramientas top toString mayúsculas toUTCString tipo typeOf UTC unescape unshift untaint unwatch userAgent userLanguage valor valueOf visibilidad vlinkColor vspace observar qué ancho ventana escribir writeln zIndex";
función htmlEncode(strS){
return strS.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");
}
función htmlEncodef(c){
return c=="&"?'&':(c=="<"?'<':(c=='>'?'>':c));
}
función htmlEncodefl(c){
return c=="&"?5:(c=="<"||c=='>'?4:1);
}
función html2txt(cadena){
return strS.replace(/</g,"<").replace(/>/g,">").replace(/ /g," ").replace(/<br/?>/g," rn").replace(/&/g,"&").replace(/<.+?>/g,"");
}
var lexers = {}
lexers.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="objeto">$1</var>',
clMP:'<var class="method_property">$1</var>',
lex:función(es){
var str=" ", c="",palabra='',lastState="", seq, intNextQuote, intTemp, intCount, intWordStart,glbStr=s,i;
glbStr=glbStr.replace(/r|n/g,'rn');
glbStr=glbStr.replace(/rnrn/g,'rn');
para(i=0;i<glbStr.length;i++){
c=glbStr.charAt(i);
cambiar(c){
caso """:
str+=htmlEncodef(c);
intNextQuote=i;
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 ++;
if(intCount%2==0)romper;
}
if(intNextQuote==-1)romper;
str+="<q>"+htmlEncode(glbStr.substring(i+1,intNextQuote))+"</q>"";
i=intNextQuote;
últimoEstado="";
romper;
caso "'":
str+=htmlEncodef(c);
intNextQuote=i;
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 ++;
if(intCount%2==0)romper;
}
if(intNextQuote==-1)romper;
str+="<q>"+htmlEncode(glbStr.substring(i+1,intNextQuote))+"</q>'";
i=intNextQuote;
últimoEstado="";
romper;
caso "/":
str+=htmlEncodef(c);
si(glbStr.charAt(i+1)=="/"){
intNextQuote=i;
intNextQuote=glbStr.indexOf('rn',intNextQuote+1);
if(intNextQuote==-1)intNextQuote=glbStr.length;
str=str.substring(0,str.length-1);
str+="<span class="comentarios">/"+htmlEncode(glbStr.substring(i+1,intNextQuote))+"</span>";
i=intNextQuote;
}de lo contrario si(glbStr.charAt(i+1)=="*"){
intNextQuote=i;
intNextQuote=glbStr.indexOf("*/",intNextQuote+1);
si(intNextQuote==-1)retorno;
str=str.substring(0,str.length-1);
str+="<span class="comentarios">/"+htmlEncode(glbStr.substring(i+1,intNextQuote))+"*/</span>";
i=intNextQuote+1;
}else if(str.match(/(?:(?:[!=(]|</var>|[|,|n|:)[ t]*/$)|^ n?[t ]*/$/)){
intNextQuote=i;
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 ++;
if(intCount%2==0)romper;
}
if(intNextQuote==-1)romper;
str+="<span class="regexp">"+htmlEncode(glbStr.substring(i+1,intNextQuote))+"</span>/";
i=intNextQuote;
últimoEstado="";
}
últimoEstado="";
romper;
por defecto:
if(c.match(/w/))palabra+=c; //en una palabra
si(c.match(/W/)){
si(palabra!='')
str+=word.replace(this.regKW,this.clKW).replace(this.regObj,this.clObj).replace(this.regMP,this.clMP) + htmlEncodef(c)
demás str+=htmlEncodef(c);
palabra = '';
}
últimoEstado="";
romper;
}
}
return str.replace(/(s*r?n)+$/,'');
}
};
función str2styled(x,idioma){
var _A = lexers[idioma].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 $ = función(e){return document.getElementById(e)};
ventana.onload = función(){
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')
}
</script>
</cabeza>
<cuerpo>
<pre id="prueba" clase="preh js">
punto var = función(){
esto.x = 1;
esto.y = 2;
this.valueOf = function(){return 'Punto:('+x+','+y+')'};
}
si(c<2)f()
var P = nuevo punto();
alerta(P.valueOf());
var rex_factory = function(){return {x:/re/g,y:/rere/g,z:[/re/,/rere/,/rerere/]}};
</pre>
<pre id="test2" class="preh js">
otro = 'este es otro ejemplo'
</pre>
</cuerpo>
</html>