WP-SynHighlight es un plugin para WordPress que permite mostrar codigo fuente con sintaxis resaltada en el contenido de los posts. Este plugin hace uso de GeShi para resaltar el código y por tanto soporta todos los lenguajes soportados por GeShi.
Hoy estaba revisando como se ven los posts en este blog cuando son leidos desde un FeedReader como Google Reader o Liferea. El problema con resaltar el código con una solución del lado del servidor como WP-SynHighlight es que no importa como se acceda el contenido, WordPress siempre va a incluir en la respuesta una cantidad de elementos HTML con el mero objetivo de mejorar la presentación. Creo que cuando un usuario está leyendo el contenido a través de un FeedReader está mas interesado en la estructura y el contenido, no tanto su presentación, de otro modo iría directamente a la fuente. Así, enviar contenido con código fuente resaltado a quienes usan FeedReaders me parece innecesario porque a) sin las hojas de estilo utilizadas en el sitio fuente el contenido no aparece realmente resaltado y b) los elementos HTML que antes permitían resaltar el código ahora dificultan que el lector lo manipule: un simple copy-paste da como resultado código mal formado y numeros de línea entre las linea de código.
La solución: evitar que WP-SynHighlight actué cuando el contenido va a ser insertado en un feed. Para lograrlo basta con hacer una pequeña modificación al plugin usando la función is_feed() de WordPress. En el archivo wp-synhighlight/modules/highlighter.php
cambiar:
//Actual parsing here
return ($header . $geshi->parse_code() . $footer);
por
if (is_feed()) {
//Do not show highlighted code in feed content
return ('<pre>'.htmlentities($content).'</pre>');
} else {
//Actual parsing here
return ($header . $geshi->parse_code() . $footer);
}
Con esto los usuarios de FeedReaders verán el codigo encerrado en <pre> tag y no un monton de otros elementos que no agregan ningún valor.
Los fragmentos de códido que aparecen arriba fueron generandos con WP-SynHighlight 1.1.