function PintarHTML($Texto) { $_Debug = false; // El primer paso es separar todas las etiquetas en un array $Texto = str_replace(' ', ' ', $Texto); // Re-emplazo tabuladores $Texto = str_replace('&', '&', $Texto); // Re-emplazo simbolos AND $TamTexto = strlen($Texto); $PalabraActual = ""; $Estado = ""; // Puede ser : PHP, JavaScript_Inicio, JavaScript_Str1, JavaScript_Str2, JavaScript_Fin, // CSS_Inicio, CSS_Str1, CSS_Str2, CSS_Fin, Etiqueta, Etiqueta_Str1, Etiqueta_Str2, // Comentario, Estilo_Str1, Estilo_Str2 $TextoColoreado = ""; $InicioEtiqueta = 0; $InicioEstilo = 0; for ($i = 0; $i < $TamTexto; $i++) { switch ($Estado) { case "": // Sin estado if ($Texto[$i] == "<") { // Posible etiqueta abierta if (substr($Texto, $i, 7) == "<script") { // JavaScript $TextoColoreado .= $PalabraActual; $PalabraActual = "<span class='Codigo_Marron'><script"; $Estado = "JavaScript_Inicio"; $i += 6; } else { if (substr($Texto, $i, 6) == "<style") { // CSS $TextoColoreado .= $PalabraActual; $PalabraActual = "<span class='Codigo_Lila'><style"; $Estado = "CSS_Inicio"; $i += 5; } else { if (substr($Texto, $i, 5) == "<?php") { // PHP $TextoColoreado .= $PalabraActual; $PalabraActual = "<?php "; $Estado = "PHP"; $i += 5; } else { if (substr($Texto, $i, 4) == "<!--") { // Comentario $TextoColoreado .= $PalabraActual; $PalabraActual = "<span class='Codigo_Gris'><!--"; $Estado = "Comentario"; $i += 4; } else { // Otras etiquetas $TextoColoreado .= $PalabraActual; $PalabraActual = "<"; $Estado = "Etiqueta"; $InicioEtiqueta = $i + 1; } } } } } else { $PalabraActual .= $Texto[$i]; } break; // -[FIN devildrey33.PintarHTML1]- // -[INICIO devildrey33.PintarHTML2]- // Estado : String con comillas simples dentro de una etiqueta // -[FIN devildrey33.PintarHTML1]- // -[INICIO devildrey33.PintarHTML2]- // Estado : String con comillas simples dentro de una etiqueta case "Etiqueta_Str1": if (_FinString1($Texto, $i) == true) { $PalabraActual .= "'</span>"; $Estado = "Etiqueta"; } else { $PalabraActual .= $Texto[$i]; } break; // Estado : String con comillas dobles dentro de una etiqueta // Estado : String con comillas dobles dentro de una etiqueta case "Etiqueta_Str2": if (_FinString2($Texto, $i) == true) { $PalabraActual .= '"</span>'; $Estado = "Etiqueta"; } else { $PalabraActual .= $Texto[$i]; } break; // Estado : dentro de una etiqueta // Estado : dentro de una etiqueta case "Etiqueta": if ($Texto[$i] == ">") { // Final de la etiqueta $Color = _BuscarEtiqueta(substr($Texto, $InicioEtiqueta, $i - $InicioEtiqueta)); $TextoColoreado .= "<span class='" . $Color . "'>" . $PalabraActual . "></span>"; $PalabraActual = ""; $Estado = ""; } else { if ($Texto[$i] == "<") { // Estabamos en una etiqueta falsa $TextoColoreado .= $PalabraActual; $PalabraActual = "<"; $InicioEtiqueta = $i + 1; } else { if ($Texto[$i] == "s") { // miramos si es el atributo style if (substr($Texto, $i, 5) == "style") { while ($Texto[$i] != "'" && $Texto[$i] != '"') { $PalabraActual .= $Texto[$i++]; } if ($Texto[$i] == "'") { $Estado = "Estilo_Str1"; } else { if ($Texto[$i] == '"') { $Estado = "Estilo_Str2"; } } $PalabraActual .= "<span class='Codigo_Azul'>" . $Texto[$i++]; $InicioEstilo = $i; } else { $PalabraActual .= $Texto[$i]; } } else { if ($Texto[$i] == "'") { // String con comillas simples dentro de la etiqueta $PalabraActual .= "<span class='Codigo_Azul'>'"; $Estado = "Etiqueta_Str1"; } else { if ($Texto[$i] == '"') { // String con comillas dobles dentro de la etiqueta $PalabraActual .= '<span class="Codigo_Azul">"'; $Estado = "Etiqueta_Str2"; } else { $PalabraActual .= $Texto[$i]; } } } } } break; // Estado : inicio del atributo style encapsulado por comillas simples // Estado : inicio del atributo style encapsulado por comillas simples case "Estilo_Str1": if (_FinString1($Texto, $i) == true) { $PalabraActual .= PintarEstiloCSS(substr($Texto, $InicioEstilo, $i - $InicioEstilo)) . "'</span>"; $Estado = "Etiqueta"; } break; // Estado : inicio del atributo style encapsulado por comillas dobles // Estado : inicio del atributo style encapsulado por comillas dobles case "Estilo_Str2": if (_FinString2($Texto, $i) == true) { $PalabraActual .= PintarEstiloCSS(substr($Texto, $InicioEstilo, $i - $InicioEstilo)) . '"</span>'; $Estado = "Etiqueta"; } break; // -[FIN devildrey33.PintarHTML2]- // -[INICIO devildrey33.PintarHTML3]- // Estado : inicio de un texto de un atributo dentro de una etiqueta script con comillas simples // -[FIN devildrey33.PintarHTML2]- // -[INICIO devildrey33.PintarHTML3]- // Estado : inicio de un texto de un atributo dentro de una etiqueta script con comillas simples case "JavaScript_Str1": if (_FinString1($Texto, $i) == true) { $PalabraActual .= "'</span>"; $Estado = "JavaScript_Inicio"; } else { $PalabraActual .= $Texto[$i]; } break; // Estado : inicio de un texto de un atributo dentro de una etiqueta script con comillas dobles // Estado : inicio de un texto de un atributo dentro de una etiqueta script con comillas dobles case "JavaScript_Str2": if (_FinString2($Texto, $i) == true) { $PalabraActual .= '"</span>'; $Estado = "JavaScript_Inicio"; } else { $PalabraActual .= $Texto[$i]; } break; // Estado : dentro de una etiqueta script // Estado : dentro de una etiqueta script case "JavaScript_Inicio": if ($Texto[$i] == ">") { // Final de una etiqueta script $TextoColoreado .= $PalabraActual . "></span>"; $PalabraActual = ""; $Estado = "JavaScript_Fin"; } else { if ($Texto[$i] == "'") { // String dentro de una etiqueta script con comillas simples $PalabraActual .= "<span class='Codigo_Azul'>'"; $Estado = "JavaScript_Str1"; } else { if ($Texto[$i] == '"') { // String dentro de una etiqueta script con comillas dobles $PalabraActual .= '<span class="Codigo_Azul">"'; $Estado = "JavaScript_Str2"; } else { $PalabraActual .= $Texto[$i]; } } } break; // Estado : se ha encontrado el final de una etiqueta script // Estado : se ha encontrado el final de una etiqueta script case "JavaScript_Fin": if (substr($Texto, $i, 9) == "</script>") { // Comprobamos que sea la etiqueta de cierre if (strlen($PalabraActual) > 1) { $TextoColoreado .= PintarJavaScript($PalabraActual); } else { $TextoColoreado .= $PalabraActual; } $TextoColoreado .= "<span class='Codigo_Marron'></script></span>"; $PalabraActual = ""; $Estado = ""; $i += 8; } else { $PalabraActual .= $Texto[$i]; } break; // -[FIN devildrey33.PintarHTML3]- // -[INICIO devildrey33.PintarHTML4]- // Estado : string dentro de una etiqueta style con comillas simples // -[FIN devildrey33.PintarHTML3]- // -[INICIO devildrey33.PintarHTML4]- // Estado : string dentro de una etiqueta style con comillas simples case "CSS_Str1": if (_FinString1($Texto, $i) == true) { $PalabraActual .= "'</span>"; $Estado = "CSS_Inicio"; } else { $PalabraActual .= $Texto[$i]; } break; // Estado : string dentro de una etiqueta style con comillas dobles // Estado : string dentro de una etiqueta style con comillas dobles case "CSS_Str2": if (_FinString2($Texto, $i) == true) { $PalabraActual .= '"</span>'; $Estado = "CSS_Inicio"; } else { $PalabraActual .= $Texto[$i]; } break; // Estado : etiqueta style inicial // Estado : etiqueta style inicial case "CSS_Inicio": if ($Texto[$i] == ">") { // Final de la etiqueta style $TextoColoreado .= $PalabraActual . "></span>"; $PalabraActual = ""; $Estado = "CSS_Fin"; } else { if ($Texto[$i] == "'") { // String con comillas simples dentro de la etiqueta style $PalabraActual .= "<span class='Codigo_Verde'>'"; $Estado = "CSS_Str1"; } else { if ($Texto[$i] == '"') { // String con comillas dobles dentro de la etiqueta style $PalabraActual .= '<span class="Codigo_Verde">"'; $Estado = "CSS_Str2"; } else { $PalabraActual .= $Texto[$i]; } } } break; // Estado : etiqueta style de cierre // Estado : etiqueta style de cierre case "CSS_Fin": if (substr($Texto, $i, 8) == "</style>") { $TextoColoreado .= PintarEstilosCSS($PalabraActual); $TextoColoreado .= "<span class='Codigo_Lila'></style></span>"; $PalabraActual = ""; $Estado = ""; $i += 8; } else { $PalabraActual .= $Texto[$i]; } break; // -[FIN devildrey33.PintarHTML4]- // -[INICIO devildrey33.PintarHTML5]- // Estado : Comentario HTML (puede ser multilinea) // -[FIN devildrey33.PintarHTML4]- // -[INICIO devildrey33.PintarHTML5]- // Estado : Comentario HTML (puede ser multilinea) case "Comentario": if ($Texto[$i] == ">" && $Texto[$i - 1] == "-" && $Texto[$i - 2] == "-") { $PalabraActual .= "></span>"; $Estado = ""; } else { if ($Texto[$i] == "<") { $PalabraActual .= "<"; } else { if ($Texto[$i] == ">") { $PalabraActual .= ">"; } else { $PalabraActual .= $Texto[$i]; } } } break; // Estado : dentro de un código php // Estado : dentro de un código php case "PHP": if ($Texto[$i] == ">" && $Texto[$i - 1] == "?") { $TextoColoreado .= PintarPHP($PalabraActual . ">"); $PalabraActual = ""; $Estado = ""; } else { $PalabraActual .= $Texto[$i]; } break; } } $TextoColoreado .= $PalabraActual; if ($_Debug == true) { echo "PintarHML<pre>"; print_r($Etiquetas); echo "</pre>"; } return $TextoColoreado; }
return; default : break; } if (MiCadena == parseInt(MiNumero)) alert("Imposible!"); } // -[FIN devildrey33.EjemploJavaScript]- </script> <style> /* -[INICIO devildrey33.CSS]- */ .Codigo_Gris { font-family:Courier New; font-size:12px; color:rgb(128, 128, 128); } .Codigo_Lila { font-family:Courier New; font-size:12px; color:rgb(153, 0, 153); } .Codigo_Azul { font-family:Courier New; font-size:12px; color:#0000FF; } .Codigo_AzulOscuro { font-family:Courier New; font-size:12px; color:#009; } .Codigo_VerdeClaro { font-family:Courier New; font-size:12px; color:rgb(0, 153, 153); } .Codigo_Rojo { font-family:Courier New; font-size:12px; color:#CC0000; } /* -[FIN devildrey33.CSS]- */ </style> </head> <body> <p>Ejemplo de código JavaScript pintado :</p> <pre style="border-color:#000; border-width:1px; border-style:solid"> <?php echo PintarJavaScript("function NombreFuncion(Parametro) {\n\t// Comentario con trampas \\' \"\" '' if return alert parseInt\n\t/* ComentarioML con trampas \" \"\" '' \n\t if return alert parseInt */\n\tvar MiCadena = 'Cadena Caracteres con trampas \" \\'\\' if return alert parseInt';\n\tvar MiNumero = 33;\n\tswitch (Parametro) {\n\t\tcase 'Cosa' :\n\t\t\treturn;\n\t\tdefault : \n\t\t\tbreak;\n\t}\n\tif (MiCadena == parseInt(MiNumero)) alert('Imposible!');\n}"); ?> </pre> <a href="/Blog/ColorearCodigoPHP_JavaScript">Volver a devildrey33</a>. </body> </html>