28 de Noviembre, 2005

Syntax highlighting para tu blog

He integrado GeSHi, una clase PHP para adornar un poco los fragmentos de código que voy publicando en el blog.

Me gusta porque el código está muy claro y es fácil de cambiar par adaptarlo a nuestras necesidades, que para eso es Software Libre (hasta le he mandado un parche al autor para la sintaxis de Ruby en el ratillo que he estado trasteando :P).

La única pega es que si le pasas como fuente una cadena para que le de formato, debes indicarle el lenguaje que es para que lo coloree de la forma adecuada. Lo he solucionado añadiendo un estilo especial a los tags pre.

Dicho estilo nunca llega a verse, es solo una marca que preproceso antes de mostrar la anotación:

<?php

while(ereg("<pre style=\"lang-([^\"]*)\">([^<]*)</pre>", $cuerpo, $valores))
	$cuerpo=str_replace($valores[0],
		geshi_highlight(html_entity_decode($valores[2]),
			$valores[1], "[la path]/geshi", true), $cuerpo);

Sí, uso expresiones regulares ;).

La idea es detectar el patrón:

<pre style="lang-LENGUAJE">
Aquí viene el código fuente
</pre>

El código fuente y el LENGUAJE (php, javascript, c, ruby, etc) indicado se le pasan a GeSHi para reemplazar la ocurrencia con el código resultado. Fácil, ¿no?

No están todos los lenguajes (echo de menos el soporte para consola), pero sí hay una buena lista. Solo falta ser un poco creativo con CSS para darle el formato que queramos a la caja con el código y listo.

Anotación por Juan J. Martínez, clasificada en: php.

Hay 6 comentarios

Gravatar

Yo la ultima vez que lo probé traia bash.

por ceritium, en 2005-11-28 12:57:39

Gravatar

El soporte para BASH no cubre las ejecuciones de comandos en consola, solo scripts.

Por ejemplo el prompt de root (#) lo toma como un comentario, y la salida de los programas no debería aparecer coloreada y sí lo hace.

He estado mirando de añadir yo el soporte, pero no he tenido tiempo.

por Juanjo, en 2005-11-28 13:06:05

Gravatar

Genial!
Hay incluso un plugin para wordpress http://dev.wp-plugins.org/browser/geshi-syntax-colorer/ :)

por Pau Oliva (pof), en 2005-11-28 14:01:58

Gravatar

Un poco de colorido al código nunca viene mal, de todas formas (veo que pof también lo ha implementado), creo que queda mejor con fondos claros. Me gusta.

por r0sk, en 2005-11-29 11:26:29

Gravatar

¿No os parece trabajo inutil que cada vez que se ejecute la página, se haga el syntax highlighting?

por Saiyine, en 2005-11-29 17:45:18

Gravatar

La gente tiene un poco de obsesión con el tiempo de CPU recientemente... y sospecho que todo es debido a servicios de hosting sub-standard (¿PHP como CGI? Yo no lo pagaría).

No es inútil: da resaltado con color al código. Ahora, ya deberíamos valorar si tiene un consumo soportable, y que además merezca la pena para lo que se consigue. Probablemente se debería valorar por casa caso.

En el mío no veo una solución factible almacenar el código ya procesado en la base de datos (no podría modificarlo fácilmente), y (por ahora) no tengo problemas de CPU (una carga de 0.20 no parece mucha carga :D).

por Juanjo, en 2005-11-29 18:12:17

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: