Mi primer módulo drupaliano : codefilter
Bueno, tenía que pasar algún día, no? Como suelo publicar mi buena cantidad de código, me gusta que se vea lo más bonito posible. En Wordpress ocupaba un plug-in que pasaba todo texto entre <pre lang='php> por highlight_string. Al pasar a Drupal, no me quedó más que activar el modo php en algunos post y hacerlo a mano.
Obviamente, esto aburre. Así que decidí gastar un par de neuronas y ver si podía crear un filtro. En la página de ejemplo de módulo de filtro de la documentación de Drupal encontré la información que necesitaba.
Como ya he señalado en más de mil ocasiones, soy un flojo rematado, así que no me iba a dar la lata de crear un marcador de código. Entonces, mi neurona MLP recordó que había un paquete de Pear cuya única misión en la vida es mostrar código bónito: Text_Highlighter. Tiene soporte, además de código PHP, para código XML, Ruby, Python, C, y otra infinidad de cosas, así que mi soporte para otros lenguajes estaba garantizado.
Les remito a la descarga para el código del módulo, pero les muestro el par de líneas que hacen la verdadera magia
- function codefilter_filter($op, $delta = 0, $format = -1, $text = '') {
- swith($op) {
- case 'process':
- return preg_replace_callback("/<code lang=[\"']([^\"']+)[\"']>(.+?)<\/code>/ms",'_codefilter_process',$text);
- }
- }
- function _codefilter_process($match) {
- $lang=$match[1];
- $text=$match[2];
- $options = array(
- 'numbers' => HL_NUMBERS_LI,
- 'tabsize' => 4,
- );
- $renderer =& new Text_Highlighter_Renderer_HTML($options);
- if($hl =& Text_Highlighter::factory($lang)) {
- $hl->setRenderer($renderer);
- return $hl->highlight(trim($text));
- } else {
- return $text;
- }
- }
Si lo leen con atención, lo primera es una preg_replace_callback reemplaza todos los textos que van entre tags code con atributo lang por el resultado de la función _codefilter_process. Esta, a su vez, instancia dos objetos, una subclase de Text_Highlighter y un Text_Highlighter_Renderer_HTML, siendo el primero encargado de procesar el texto y el segundo, de mostrarlo como HTML. La subclase de Text_Highlighter la obtengo directamente del atributo, así que hay que tener cuidado de que el lenguaje esté soportado.
El código que mostré de ejemplo está procesado, precisamente, con el módulo. Si les sirve o quieren saber más, cosa de comentar
| Adjunto | Tamaño |
|---|---|
| codefilter.module.gz | 1.08 KB |
- 4146 lecturas

Sentía la necesidad de agradecerte éste aporte que encontré en drupal.org y que me ha sido muy útil. En mi web he realizado una pequeña descripción y guia de instalación y configuración para principiantes.
He puesto un enlace a éste artículo desde mi web para los que quieran ver el funcionamiento "por dentro".
Un saludo.
Que bueno que te haya servido. ¿Cual es el link del artículo?
Ufff, aunque con un "poco" de retraso, jejejeje, aquí está el link:
http://www.educasitio.com/codefilter
Enviar un comentario nuevo