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'>&lt;script";
                        $Estado = "JavaScript_Inicio";
                        $i += 6;
                    } else {
                        if (substr($Texto, $i, 6) == "<style") {
                            // CSS
                            $TextoColoreado .= $PalabraActual;
                            $PalabraActual = "<span class='Codigo_Lila'>&lt;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'>&lt;!--";
                                    $Estado = "Comentario";
                                    $i += 4;
                                } else {
                                    // Otras etiquetas
                                    $TextoColoreado .= $PalabraActual;
                                    $PalabraActual = "&lt;";
                                    $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 . "&gt;</span>";
                    $PalabraActual = "";
                    $Estado = "";
                } else {
                    if ($Texto[$i] == "<") {
                        // Estabamos en una etiqueta falsa
                        $TextoColoreado .= $PalabraActual;
                        $PalabraActual = "&lt;";
                        $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 . "&gt;</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'>&lt;/script&gt;</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 . "&gt;</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'>&lt;/style&gt;</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 .= "&gt;</span>";
                    $Estado = "";
                } else {
                    if ($Texto[$i] == "<") {
                        $PalabraActual .= "&lt;";
                    } else {
                        if ($Texto[$i] == ">") {
                            $PalabraActual .= "&gt;";
                        } 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>