
PHP tiene una función interesante que resalta automáticamente el código PHP llamado highlight_string (); En teoría, esto podría usarse para colocar su propio código resaltado en un sitio, en lugar de depender de JavaScript o algún tipo de servicio externo para hacerlo. En este artículo, le mostraré los conceptos básicos de cómo funciona y luego lo ampliaré con algunos trucos. Dado que JavaScript es tan similar a PHP en sintaxis, podemos engañar a la función para que también resalte el código JavaScript. Entonces, finalmente, ¿cómo podemos sacar algunos conocimientos para auto-tabular el código?
Un agradecimiento especial a Benjamin Mayo (Darren Beige) que escribió la función format_javascript () que veremos a continuación.
Uso básico
La función highlight_string () solo acepta una cadena, que debe comenzar con Php y terminar con?>. por defecto hace eco / imprime la línea.
<?php highlight_string('<?php
$i = 1;
function rockOut() {
alert("wah wah wah");
}
?>'); ?>
El HTML resultante es:
<pre id="code_highlighted"><code><span style="color: #0000BB">
<span style="color: #0000BB"><script type="text/javascript">
</span><span style="color: #007700">if (</span><span style="color: #0000BB">true</span><span style="color: #007700">) {
echo </span><span style="color: #DD0000">'The value is true'</span><span style="color: #007700">;
} else {
echo </span><span style="color: #DD0000">'The value is false'</span><span style="color: #007700">;
}
</span><span style="color: #0000BB"></script></span>
</span>
Que se ve así:
Bastante salvaje, ¿eh? Si prefiere que se devuelva esa cadena en lugar de imprimirla, simplemente pase TRUE como segundo parámetro.
Truco para resaltar JavaScript
Benjamin Mayo (Darren Beige) creó una función PHP que engañaría a PHP para que resaltara el código JavaScript en lugar de PHP exclusivamente. Más allá de eso, también aplica la sangría de tabulación adecuada del código, a pesar de lo que esté presente en el archivo. Por ejemplo, incluso si el código original estaba completamente alineado a la izquierda de esta manera, la salida tendrá una buena sangría.
Consulte la demostración para verla en acción:
Ver demostración Descargar archivos
Cómo funciona
La sangría se produce agregando saltos de línea después de cada llave y punto y coma si aún no están allí. Esto coloca cada declaración en su propia línea, preparando el código. Sin embargo, la mayor parte del código para la sangría ocurre en el bucle mismo.
$lineecho = $line;
if (substr_count($line, "t") != $tab) {
$lineecho = str_replace("t", "", trim($lineecho));
$lineecho = str_repeat("t", $tab) . $lineecho;
}
$tab = $tab + substr_count($line, "{") - substr_count($line, "}");
El bloque funciona manteniendo un recuento (en la variable $ pestaña) de cuántos caracteres de pestaña (” t”) hay en la línea anterior. La línea actual se cuenta para pestañas usando la función substr_count (). Si los dos valores no coinciden, la línea repetida se rellena con el valor $ tab. Esto ahora significa que el número de caracteres de tabulación al comienzo de la línea coincide con el número de la variable $ tab. Después de este procedimiento, el nuevo valor de la pestaña $ se calcula tomando la pestaña $ actual y sumando el número de llaves de apertura encontradas restando la cantidad de llaves de cierre.
El código de salida está en etiquetas
para que las pestañas se muestren correctamente.Uso
Supongamos que desea resaltar una gran parte del código JavaScript que se encuentra en un archivo. Fácil, solo incluye el archivo / función PHP, toma el contenido de ese archivo y ejecuta la función en él.
<?php include_once('format_javascript.php'); $BigJavaScriptString = file_get_contents('path/to/javascript.js'); echo format_javascript($testBigJS); ?>
Entonces, el trato aquí es que si desea resaltar el código de esta manera, debe ingresarlo en una variable de cadena. Si quisiera usar esto en, por ejemplo, un CMS, necesitaría poder guardar y ejecutar PHP dentro de las áreas de contenido guardadas. O, necesitaría escribir algunas cosas elegantes de expresiones regulares para analizar el contenido y buscar etiquetas particulares y poder extraer las entrañas en una variable para resaltar. Sobre mi cabeza.
Si está interesado en cómo puede usar esto para resaltar otros idiomas, consulte el hilo de comentarios en la documentación, que tiene algunos intentos de resaltar XML y HTML.
Otros recursos
- PHP: engañar a highlight_file para usar clases CSS en lugar de estilos en línea